你刚刚创建的文件被称为剧本playbook,安装 htop 的指令(我任意选择的一个包作为例子)被称为动作play。剧本本身是一个 YAML 格式的文件,它是一种易于阅读的标记语言。对 YAML 的完整讲述超出了本文的范围,但你无需专业理解即可熟练使用 Ansible。该配置易于阅读;只需查看此文件,你就可以轻松理解我们正在安装的 htop 软件包。要注意一下最后一行的 apt 模块,它只适用于基于 Debian 的系统。如果你使用的是 Red Hat 平台,你可以将其更改为 yum 而不是 apt,或者如果你正在使用 Fedora,则将其更改为 dnf。name 行只是提供有关我们任务的信息,并将显示在输出中。因此,你需要确保名称具有描述性,以便在需要对多个动作进行故障排除时很容易找到。
接下来,让我们将新文件提交到我们的仓库:
git add local.yml
git commit -m "initial commit"
git push origin master
现在我们的新剧本应该出现在我们的 GitHub 上的仓库中。我们可以使用以下命令应用我们创建的剧本:
sudo ansible-pull -U https://github.com/<your_user_name>/ansible.git
如果执行正确,htop包应该会安装在你的系统上。你可能会在开头附近看到一些警告,抱怨缺少库存清单文件。这很好,因为我们没有使用库存清单文件(我们也不需要这样做)。在输出结束时,它将概述它做的内容。如果 htop 安装正确,你应该在输出的最后一行看到 changed = 1。
它是如何工作的呢?ansible-pull 命令使用了 -U 选项,它需要一个仓库 URL。出于安全考虑,我给它提供了仓库 URL 的 https 版本,因为我不希望任何主机对仓库具有写访问权限(默认情况下 https 是只读的)。local.yml 是预设的剧本名称,因此我们不需要为剧本提供文件名:如果它在仓库的根目录中找到名为 local.yml 的剧本,它将自动运行它。接下来,我们在命令前面使用了 sudo,因为我们正在修改系统。
让我们继续为我们的剧本添加更多的包。我将添加两个包,使它看起来像这样:
- hosts: localhost
become:true
tasks:
- name:Installhtop
apt: name=htop
- name:Install mc
apt: name=mc
- name:Installtmux
apt: name=tmux
我添加了更多的动作(任务)来安装另外两个包,mc 和 tmux。在此剧本中选择安装的哪些软件包并不重要;我只是随意挑选这些。你应该安装你希望所有的系统都具有的软件包。唯一需要注意的是,在你分发前,你必须知道那个包存在于软件仓库中。
在我们提交并应用这个更新的剧本之前,我们应该整理一下它。它可以很好地工作,但(说实话)它看起来有点混乱。让我们尝试在一个动作中安装所有三个包。用下面这个替换你的 local.yml 的内容:
- hosts: localhost
become:true
tasks:
- name:Install packages
apt: name={{item}}
with_items:
-htop
- mc
-tmux
现在看起来更干净、更有效率了。我们使用 with_items 将我们的包列表合并为一个动作。如果我们想要添加其他包,我们只需添加另一个带有连字符和包名称的行。可以把 with_items 看做类似于 for 循环。我们列出的每个包都将安装。
将我们的新更改提交回仓库:
git add local.yml
git commit -m "added additional packages, cleaned up formatting"
git push origin master
现在我们可以运行我们的剧本以接受新的新配置:
sudo ansible-pull -U https://github.com/<your_user_name>/ansible.git
不可否认,这个例子还没有做多少事情;它所做的就是安装一些软件包。你可以使用包管理器更快地安装这些包。然而,随着这个系列的继续,这些例子将变得更加复杂,我们将自动化更多的东西。最后,你创建的 Ansible 配置将自动执行越来越多的任务。例如,我自己使用的那个配置可以自动安装数百个软件包、设置cron 作业、处理桌面配置等等。
从我们迄今为止所取得的成就来看,你可能已经有了大概了解。我们所要做的就是创建一个仓库,在该仓库中放置一个剧本,然后利用 ansible-pull 命令拉取该仓库并将其应用到我们的机器上。我们不需要设置服务器。将来,如果我们想要更改配置,我们可以拉取该仓库、更新它,然后将其推回到我们的仓库并应用它。如果我们要设置新机器,我们只需要安装 Ansible 并应用配置。