ansible role配apt源

  1. 准备自定义的 APT 源文件

首先,在你的 Ansible 控制机上,创建一个 files 目录来存放源文件。

创建 files 目录 (如果你的 Playbook 目录下没有的话):

mkdir -p files

2.创建并编辑 sources.list 文件:我们以配置阿里云的 Ubuntu 22.04 (focal) 源为例。你可以根据你的操作系统版本(如 Ubuntu 18.04 bionic,Debian 11 bullseye 等)去对应的镜像站获取配置。

vim files/sources.list

将以下阿里云的 Ubuntu 22.04 源配置粘贴到文件中:

deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse

deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse

deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse

deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse

deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

3.编写 Ansible Playbook

现在,创建一个 Playbook 文件,例如 configure_apt.yml。

vim configure_apt.yml

将以下内容粘贴到文件中

复制代码
- name: 配置 APT 源
  hosts: all
  become: yes

  tasks:
    # 任务1: 备份文件
    - name: 1. 备份当前的 sources.list 文件
      ansible.builtin.copy:
        src: /etc/apt/sources.list
        dest: /etc/apt/sources.list.bak_{{ ansible_date_time.date }}
        remote_src: yes
        force: no

    # 任务2: 部署新文件
    - name: 2. 部署新的 sources.list 文件
      ansible.builtin.copy:
        src: files/sources.list
        dest: /etc/apt/sources.list
        owner: root
        group: root
        mode: '0644'
      notify:
        - 更新 apt 缓存

  # handlers 部分 (请确保这一行是顶格的,没有任何前置空格)
  handlers:
    - name: 更新 apt 缓存
      ansible.builtin.apt:
        update_cache: yes
        cache_valid_time: 3600

Playbook 详解

hosts: group1: 指定 Playbook 的目标主机组。

任务 1: 备份当前的 sources.list 文件:

使用 command 模块执行 mv 命令,将原有的 sources.list 重命名为 .bak 备份文件。

args: creates: ... 确保了只有当备份文件不存在时,才会执行备份,保证了幂等性。

ignore_errors: yes 用于容错,如果服务器上本来就没有 sources.list 文件,则忽略 mv 命令的错误。

任务 2: 部署新的 source.list 文件:

使用 copy 模块将控制机上准备好的 files/sources.list 文件复制到远程服务器的 /etc/apt/ 目录下。

notify: - 更新 apt 缓存 表示只有当 copy 模块实际替换了文件时,才会触发名为 更新 apt 缓存 的 handler。

handlers:

name: 更新 apt 缓存: 定义了一个 handler。

ansible.builtin.apt: update_cache: yes: 使用 apt 模块来执行 apt-get update 操作,这比直接使用 command: apt-get update 更好,因为 apt 模块是幂等的,并且能更好地处理各种情况。

cache_valid_time: 3600: 这是一个性能优化。它告诉 Ansible,如果距离上次更新缓存不到 3600 秒,就不要再执行 update_cache,从而避免了不必要的网络开销和时间浪费。

4.运行Playbook

然后,在项目根目录下运行Playbook:

ansible-playbook configure_apt.yml

出现以下结果就是成功了:

Playbook 执行成功后,你可以登录到任意一台目标服务器,验证 APT 源是否已更新。

登录到目标服务器

ssh root@node1

查看文件内容是否已更新

cat /etc/apt/sources.list

或者执行 apt update 查看输出

apt update

你应该能看到 apt update 的输出中显示正在从 mirrors.aliyun.com 下载软件包列表,并且 sources.list 文件的内容也已更新。

这个 Playbook 同样是可复用和幂等的,非常适合用于批量配置 Debian/Ubuntu 服务器的软件源。

相关推荐
开源Linux2 天前
Ansible高频面试题详解:30个问题从入门到精通
ansible
我爱钱因此会努力4 天前
ansible实战-不同的用户登录不同的主机
linux·运维·服务器·ansible
我爱钱因此会努力4 天前
ansible实战- 关机
linux·运维·服务器·centos·自动化·ansible
运维李哥不背锅5 天前
Ansible 模块详解:高效管理你的 IT 基础设施
服务器·网络·ansible
K_i1345 天前
Ansible模块分类与实战应用指南
ansible
我爱钱因此会努力5 天前
ansible自动化运维入门篇
linux·运维·服务器·centos·自动化·ansible
zz-zjx5 天前
Ansible生产调优与故障排查全攻略
ansible
K_i1345 天前
Ansible自动化部署ECS与Nginx全流程
nginx·自动化·ansible
zz-zjx5 天前
生产级 Ansible 部署全流程-nginx示例
ansible
运维李哥不背锅5 天前
Ansible 的变量与模板:实现更灵活的自动化配置
java·自动化·ansible