Ansible 是一个非常受欢迎的 开源配置管理和软件自动化项目. 虽然几乎可以肯定 IT 专业人士每天都在使用 Ansible,但它在 IT 行业之外的影响并不广泛。 Ansible 是一个强大而灵活的工具。 它可以轻松地应用于几乎所有台式计算机用户共有的任务:安装后“清单”。
大多数用户喜欢在新安装后应用一个“调整”。 Ansible 的幂等性、声明性语法非常适合描述如何配置系统。
简而言之,Ansible
ansible 程序本身执行一个 单任务 针对一组主机。 这大致概念化为:
for HOST in $HOSTS; do ssh $HOST /usr/bin/echo "Hello World" done
为了执行多个任务,Ansible 定义了“剧本”的概念。 剧本是描述目标机器状态的 YAML 文件。 运行时,Ansible 会检查每个主机并仅执行执行 playbook 中定义的状态所需的任务。
- hosts: all tasks: - name: Echo "Hello World" command: echo "Hello World"
使用 ansible-playbook 命令运行 playbook:
$ ansible-playbook ~/playbook.yml
配置工作站
首先安装ansible:
dnf install ansible
接下来,创建一个文件来存储 playbook:
touch ~/post_install.yml
首先定义运行此 playbook 的主机。 在这种情况下,“本地主机”:
- hosts: localhost
每个任务都包含一个名称字段和一个模块字段。 Ansible 有 很多 的 模块. 请务必浏览模块索引以熟悉 Ansible 提供的所有功能。
封装模块
大多数用户在全新安装后会安装额外的软件包,并且许多用户喜欢删除一些他们不使用的已发布软件。 这 包裹 模块提供了一个围绕系统包管理器的通用包装器(在 Fedora的情况下,dnf)。
- hosts: localhost tasks: - name: Install Builder become: yes package: name: gnome-builder state: present - name: Remove Rhythmbox become: yes package: name: rhythmbox state: absent - name: Install GNOME Music become: yes package: name: gnome-music state: present - name: Remove Shotwell become: yes package: name: shotwell state: absent
该剧本导致以下结果:
- 安装了 GNOME Builder 和 GNOME Music
- 删除了节奏盒
- 在 Fedora 28 或更高版本,Shotwell 没有任何反应(它不在默认的软件包列表中)
- 在 Fedora 27 岁或以上,Shotwell 被移除
该剧本还介绍了 变成:是 指示。 这指定任务必须由特权用户(在大多数情况下,root)运行。
DConf 模块
Ansible 可以做的不仅仅是安装软件。 例如,GNOME 包含一个很棒的颜色转换功能,称为夜灯。 它默认禁用,但是 Ansible 配置文件 模块可以很容易地启用它。
- hosts: localhost tasks: - name: Enable Night Light dconf: key: /org/gnome/settings-daemon/plugins/color/night-light-enabled value: true - name: Set Night Light Temperature dconf: key: /org/gnome/settings-daemon/plugins/color/night-light-temperature value: uint32 5500
Ansible 还可以使用 复制 模块。 在此示例中,将本地文件复制到目标路径。
- hosts: localhost tasks: - name: Enable "AUTH_ADMIN_KEEP" for pkexec become: yes copy: src: files/51-pkexec-auth-admin-keep.rules dest: /etc/polkit-1/rules.d/51-pkexec-auth-admin-keep.rules
命令模块
即使不存在专门的模块,Ansible 仍然可以运行命令(通过恰当命名的 命令 模块)。 该剧本使 平面图 存储库并安装一些 Flatpak。 这些命令的制作方式使其有效地具有幂等性。 这是一个需要考虑的重要行为; 每次在机器上运行剧本时,它都应该成功。
- hosts: localhost tasks: - name: Enable Flathub repository become: yes command: flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo - name: Install Fractal become: yes command: flatpak install --assumeyes flathub org.gnome.Fractal - name: Install Spotify become: yes command: flatpak install --assumeyes flathub com.spotify.Client
将所有这些任务组合到一个剧本中,并且在一个命令中,Ansible 将自定义一个新安装的工作站。 不仅如此,6 个月后,在对 playbook 进行更改后,再次运行它以将“经验丰富”的安装恢复到已知状态。
$ ansible-playbook -K ~/post_install.yml
本文只触及了 Ansible 可能实现的表面。 后续文章将介绍更高级的 Ansible 概念,例如角色、配置多个具有一组职责的主机。