使用 Ansible 设置工作站

[ad_1]

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 概念,例如角色、配置多个具有一组职责的主机。

[ad_2]

Related Posts