当从命令行运行一个示例剧本时,我们先创建清单文件,再创建剧本,然后使用ansible-playbook命令运行它。当然,所有这些都假设我们已经通过交互地指定密码或通过SSH密钥的设置建立了到远程系统的连接。
虽然AWX中的最终结果非常相似,剧本都是针对一个清单运行的,但术语和命名是相当不同的。在这一节,我们将介绍AWX启动并运行第一个剧本的过程。虽然本书没有足够的篇幅来详细介绍AWX提供的每一项功能,但本节旨在为你提供足够的知识和信心,让你能够开始从AWX管理你的剧本,并自己进一步探索。
在AWX运行第一个剧本之前,必须完成几个先决条件设置阶段。在下一节中,我们将完成第一个步骤,创建用于SSH与目标计算机进行身份验证的凭据。
当登录到AWX时,你会注意到屏幕左侧下方有一个菜单栏。要定义一组新的凭据以允许Ansible登录到目标计算机,请执行以下步骤:
1.单击左侧菜单栏中的 Credentials (凭据)。
2.单击绿色+图标创建新凭据。
3.给凭据指定一个名称,然后从 CREDENTIAL TYPE (凭据类型)字段中选择 Machine (机器)。有许多类型的凭据使AWX能够与各种各样的服务交互,但目前,我们只对这种特定类型感兴趣。
4.有许多其他字段可用于为更多的高级用例指定参数。然而,对于我们的演示来说,这已经足够了。
你的最终结果应该与图3-4所示的类似。注意,我已经为演示机器指定了登录密码,但是你也可以在屏幕上较大的文本框中指定SSH私钥。你还将观察到 Prompt on launch (启动时提示)复选框的存在,在AWX中有许多选项,它可以在运行剧本时提示用户,这有助于提供真正丰富的交互式用户体验。然而,在这个演示中,我们将不这么做,因为我们想演示在没有用户干预的情况下运行剧本,如图3-4所示。
图 3-4
定义凭据后,下一步是定义要运行的剧本的清单。我们将在下一节中对此进行探讨。
就像在命令行中一样,AWX需要创建一个清单,以便对其执行剧本。在这里,我们将使用一个官方的公开Ansible示例剧本,它需要一个包含两个组的清单。在更大型的设置中,我们会为每个组指定不同的服务器,但是对于这个小演示,我们可以为两个角色重用相同的服务器。
涉及的代码用于在RHEL或CentOS 7机器上安装简单的LAMP软件栈,可查看https://github.com/ansible/ansible-examples/tree/master/lamp_simple_rhel7。
要运行此演示,需要一台CentOS 7机器。演示主机名为centos-testhost,在命令行上定义清单文件如下所示:
要在AWX GUI中复制此功能,请按以下顺序运行:
1.单击左侧菜单栏上的 Inventories 。
2.单击绿色+图标创建新清单。
3.从下拉菜单中选择 Inventory 。
4.为清单指定一个合适的名称,然后单击 SAVE 保存。
完成此过程后,你的屏幕应该与图3-5所示的类似。
图 3-5
完成后,我们可以创建第一个组并将测试主机放入其中。为此,请执行以下步骤:
1.单击窗格顶部的 GROUPS 按钮。
2.单击绿色+图标创建一个新组。
3.在 NAME 字段中输入名称webservers。
4.单击绿色的 SAVE 按钮。
5.单击顶部的 HOSTS 按钮。
6.单击绿色+按钮添加一台新主机。从下拉列表中选择 New Host 。
7.在 HOST NAME 字段中输入名称centos-testhost。
8.单击绿色的 SAVE 按钮。
完成这些步骤后,你的屏幕应该类似于图3-6。
重复此过程以定义dbservers组。注意不要将此组创建为webservers组的子组,这很容易做到。你将注意到图3-6顶部的浏览路径记录,通过单击Hands on Inventory(或者你指定的名字,如果你选择了另一个),可以使用它导航回新清单的顶层。
图 3-6
从这里开始,过程几乎是相同的,只是当你要将主机添加到新创建的组时(从前面步骤的步骤6开始),请选择 Existing Host (退出主机),因为在本例中,我们将为两个组重用单个主机。
完成这些步骤后,清单(包括分组)在AWX中就完成了,我们可以进入定义配置的下一阶段——创建AWX项目。将在本章的下一节中详细介绍这一点。
如果在命令行上使用Ansible,你不太可能将所有的剧本和角色在一个目录中存储很长时间,因为这将变得不可管理,并且很难确定哪个文件是哪个文件。这就是AWX中建立项目的目的,它只是一个逻辑上的剧本分组,用于使剧本的组织更容易和更简单。
尽管在本书中我们将不讨论 基于角色的访问控制(RBAC) ,但项目在本书中也发挥了作用。在目前提供的屏幕截图中,你可能注意到许多窗格顶部有一个 PERMISSIONS (权限)按钮。它们在整个UI中都存在,用于定义哪些用户可以访问哪些配置项。例如,如果你有一个 数据库管理员(DBA) 团队,他们应该只有权针对这些服务器运行与数据库服务器相关的剧本,那么你可以创建一个数据库服务器的清单,并只授予DBA对此清单的访问权。类似地,你可以将所有与DBA相关的剧本放在一个项目中,并且再次仅授予该团队访问该项目的权限。通过这种方式,AWX形成了企业内部良好流程的一部分,既使得Ansible更容易访问,又确保正确的项目只对正确的人可用。
为了继续简单示例,让我们创建一个新项目来引用示例Ansible代码:
1.单击左侧菜单栏上的 Projects 。
2.单击绿色+图标创建一个新项目。
3.给这个项目起个合适的名字。
4.从 SCM TYPE 下拉列表中选择 Git 。
5.在 SCM URL 字段中输入URL:https://github.com/ansible/ansible-examples.git。
6.如果只希望使用存储库中的特定提交或分支,也可以选择填充 SCM BRANCH/TAG/COMMIT 字段。在这个简单的示例中,我们将使用最新的commit,在Git中称为 HEAD 。
7.不需要其他凭据,因为这是一个公开的GitHub示例,如果你使用的是受密码保护的存储库,那么你需要为3.4.1节中创建的计算机凭据创建一个SCM凭据。
8.选中 UPDATE REVISION ON LAUNCH (启动时更新修订)复选框,这将导致AWX每次运行此项目中的剧本时,都从我们的 SCM URL 中提取最新版本的代码。如果未选中此选项,则必须手动更新代码的本机副本,才能让AWX看到最新版本。
9.单击绿色的 SAVE 按钮。
完成以上步骤后,生成的屏幕应该类似于图3-7。
图 3-7
在为剧本的第一次运行配置剧本的最后一步之前,我们需要手动从GitHub存储库中提取内容。为此,请单击新创建的项目右侧的两个半圆箭头,这将强制从上游存储库手动同步项目。图3-8显示了一个例子供参考。
图 3-8
在同步过程中,项目标题左侧的绿点(如图3-8所示)将会跳动。一旦成功完成,它将变为静止的绿色,而如果出现问题,它将变为红色。假设一切顺利,我们就可以进入最后阶段,准备运行剧本。
在AWX中定义了项目之后,当我们开始从中运行第一个剧本时,下一个任务就是创建一个模板,我们将在下一节中介绍。
在AWX中创建模板,将你迄今为止创建的所有其他配置项放在一起。本质上,模板是你将在ansible-playbook命令后面的命令行上指定的所有参数的AWX定义。
创建模板的过程如下:
1.单击左侧菜单栏上的 Templates (模板)。
2.单击绿色+图标创建新模板。
3.从下拉列表中选择 Job Template (作业模板)。
4.给模板指定一个合适的名称。
5.在 INVENTORY 字段中,选择在3.4.2节中创建的清单。
6.在 PROJECT 字段中,选择我们先前创建的项目。
7.在 PLAYBOOK 字段中,请注意下拉列表已自动设置为填充了在 PROJECT 定义中指定的GitHub存储库中可用的所有可行剧本的列表。
从列表上选择lamp_simple_rhel7/site.yml。
8.最后,选择前面在 CREDENTIAL 字段中定义的凭据。
9.单击绿色的 SAVE 按钮。
最终结果如图3-9所示,其中显示了所有已填写的字段。
图 3-9
完成这些步骤后,就完成了从AWX运行第一个剧本所需的所有内容。因此,我们将在下一节中进行这项工作,并观察结果。
当我们从AWX运行剧本时,实际上是在运行一个模板。
因此,要以交互方式执行此操作,我们将返回 Templates 屏幕,该屏幕应显示可用模板的列表。请注意,当使用基于角色的访问控制时,你只能看到你有权限查看的模板(以及清单和其他配置项)。如果你没有权限,则它是不可见的。这有助于使AWX在不同团队之间使用时更易于管理。
我们使用的是管理员账户,因此可以查看所有内容。要启动新创建的模板,请按照以下说明操作:
1.单击模板名称右侧的“火箭发射”图标,图3-10显示了我们新创建的 Templates ,其中突出显示了执行模板的选项。
图 3-10
执行此操作时,屏幕将自动重新加载,你将在屏幕上看到运行的详细信息。如果要离开这个页面,不用担心,可以随时再次单击左侧菜单栏上的 Jobs 来找到它。既然我们已经定义了这个作业,它在第一个实例中就失败了。幸运的是, Jobs 窗格显示了从命令行运行Ansible时获得的所有相同的详细信息和输出,只有在AWX中,它被存档在数据库中,以便可以随时在以后返回来查看,或者其他用户只需登录AWX就可以分析它(假设他们拥有所需的权限)。
2.查看作业的输出,我们可以看到问题出在某种权限上,图3-11显示了它看起来可能像什么,以供参考。
查看GitHub上的剧本源代码,我们可以看到,原始作者硬编码了这个剧本的root用户账户的使用权限(请注意site.yml中的remote_user:root语句)。通常情况下,你不会这样做,更好的做法是让Ansible使用一个未经授权的账户登录,然后根据需要使用sudo,方法是将become:true语句放在剧情标题中(我们将在本书后面的操作中看到这一点)。
3.为了解决这个问题,现在,我们只需允许root用户通过SSH登录CentOS 7服务器,然后将AWX中的凭据修改为root账户的凭据。请注意,还可以定义一个新的凭据并更改链接到模板的凭据,这两种方法都是可接受的解决方案。一旦更改了凭据,再次运行模板时,输出应该有所不同,如图3-12所示的剧本已成功运行。
图 3-11
图 3-12
从图3-12中可以看到,剧本已经成功运行,以及哪个用户启动了剧本、使用了GitHub上的哪个版本、使用了哪些凭据、使用了哪些清单等所有相关细节。向下滚动此窗格将显示ansible-playbook的输出,我们在图3-12中看到了该输出;如果你愿意,可以进一步分析剧本的运行,以查看是否有警告、更改了什么,等等。因此,通过AWX,我们真正为Ansible实现了一个很好的简单用户界面,它集成了在企业环境中自动化Linux时应具备的所有良好实践,如安全性、可审核性和Ansible(实际上是通过源代码控制集成实现的剧本代码)的集中控制。
已经了解了AWX如何帮助我们手动运行任务,但是如果我们想要一个真正的任务自动化的 免操作(hands-off) 方法,我们将在下一节中探讨任务调度。