将 Ansible 清单迁移到 Red Hat Ansible Tower 的三种快速方法
将 Ansible 清单迁移到 Red Hat Ansible Tower 的三种快速方法
如果您已经使用了一段时间的命令行 Ansible,那么您可能在清单中列出了许多服务器、网络设备和其他目标节点。您知道 Red Hat Ansible Tower 使您团队中的每个人更容易运行 Ansible Playbook。因此,您想过使用 Ansible Tower 将您的自动化提升到一个新的水平,但您希望保留现有清单文件或目录中的所有数据和变量。您是否担心将清单从命令行使用迁移到 Ansible Tower?让我向您展示将现有 Ansible 清单导入 Ansible Tower 是多么容易!
这篇博文介绍了将现有 Ansible 清单连接到 Ansible Tower 的三种快速有效的方法
- 从 Ansible Tower 控制节点 (awx-manage) 迁移清单文件
- 从任何使用 Playbook 的地方迁移清单文件
- 设置 Tower 以访问 git 源代码控制的清单文件
如果您使用的是 动态清单,则无需将清单导入 Ansible Tower。动态清单从现有源获取您的清单。使用动态清单,您无需管理清单文件,只需在每次需要时获取最新和最更新的列表即可。Ansible Tower 无缝集成 常见的动态清单源,包括 Red Hat OpenStack Platform、Red Hat Satellite、公共云平台 (Amazon Web Services/AWS、Google Compute Engine/GCE、Microsoft Azure) 以及 Red Hat Virtualization 和 VMware vCenter 等虚拟化解决方案。您还可以使用脚本将 Infoblox DDI 和 ServiceNow CMDB 集成到 Ansible Tower 中以实现动态清单。
注意:这篇博文不涵盖将 Ansible Playbook 或 Ansible Tower 工作流导入 Ansible Tower,仅重点介绍 Ansible 清单的可移植性。
从 Ansible Tower 控制节点 (awx-manage) 迁移清单文件
命令行工具 awx-manage(随 Ansible Tower 安装提供)是一种简单有效的工具,可以用来导入您的清单。当您的清单是 YAML 或 ini 格式的扁平文件,并且已经存在于 Ansible 控制节点上时,使用 awx-manage 最有意义。您运行该命令并指向现有清单文件,然后 Ansible Tower 将加载所有主机。
-
使用 WebUI 登录到 Ansible Tower 并创建一个空清单。
-
通过 SSH 登录到您的 Ansible Tower 控制节点(这是安装了 Ansible Tower 的 Linux 机器)。
-
找到代表 Ansible 清单的扁平文件。
-
运行 awx-manage inventory_import 命令,如下所示
sudo awx-manage inventory_import --source=/path/to/hosts --inventory-name="My Inventory"
在终端窗口中,您将收到类似于以下内容的输出
1.387 INFO Updating inventory 3: My Inventory 1.475 INFO Reading Ansible inventory source: /path/to/hosts 2.119 INFO Processing JSON output... 2.120 INFO Loaded 6 groups, 6 hosts 2.329 INFO Inventory import completed for (My Inventory - 9) in 0.9s
-
现在,当您通过 WebUI 登录时,您将在清单下看到所有主机
awx-manage 命令行工具非常简单快捷。我只需要几秒钟的时间就可以获取我的现有清单并将其导入 Ansible Tower。
对于使用 Ansible Tower 运行 Playbook 但在 Ansible Tower 之外管理清单的团队而言,使用 awx-manage 导入并不是最佳选择,因为您需要在每次更改清单文件时重新导入扁平文件清单。如果您的团队将在 Ansible Tower 之外继续管理清单,那么您可能需要使用下面描述的 GitHub 选项。
从任何使用 Playbook 的地方迁移清单文件
您可以使用 Ansible Tower 模块 自动将清单传输到 Ansible Tower。这些模块使您可以使用 Ansible Playbook 自动化和管理所有内容,包括 Ansible Tower 实例中的清单。有一个 tower_inventory 模块 可以让我们创建清单,还有一个 tower_host 模块 可以让我们将主机添加到现有清单中。假设我们已经创建了一个名为“网络路由器”的清单,我将构建一个 Ansible Playbook 来使用 tower_host 模块将我组路由器中的所有路由器添加到该清单中。Ansible Playbook 将如下所示
- name: NETWORK SETUP hosts: routers connection: local become: yes gather_facts: no tasks: - name: ADD NETWORK HOSTS INTO TOWER tower_host: name: "{{ inventory_hostname }}" inventory: "Network Routers" tower_username: admin tower_password: ansible tower_host: https://localhost variables: ansible_network_os: "{{ansible_network_os}}" ansible_host: "{{ansible_host}}" ansible_user: "{{ansible_user}}" ansible_connection: "{{ansible_connection}}" ansible_become: yes ansible_become_method: enable
Ansible Playbook 将同时添加组路由器中的所有设备。Playbook 输出将类似于以下内容:
这种方法的优点是您不必在控制节点上,您可以从任何地方运行 Ansible Playbook。与 awx-manage 选项一样,仅当您将来将在 Tower 中管理清单时,使用 Ansible Playbook 将清单传输到 Ansible Tower 才有效。这两种方法都是迁移到 Tower 的策略。Ansible 如果您使用动态清单或源代码控制来管理清单,则需要在每次更改清单时重新运行 Ansible Tower 的 Playbook。
设置 Tower 以访问 git 源代码控制的清单文件
我在这篇文章中要介绍的最后一种方法是使用源代码控制来管理我的清单。我在 GitHub 存储库中存储了一个扁平文件清单文件。我创建了一个示例存储库来说明这个概念,如下所示
https://github.com/ipvsean/sample_inventory
与前两种方法不同,这并非迁移策略,而是一种更持久的方法,可以使用 git 和源代码控制来管理 Ansible 清单。可以在 GitHub 中管理清单,Ansible Tower 可以简单地反映这些更改。
首先,我们需要创建一个 Ansible Tower 项目。Ansible Tower 项目是让我们将 Ansible Tower 同步到 Ansible Tower 支持的源代码管理 (SCM) 系统的方式,包括 Git、Subversion 和 Mercurial。我将添加一个名为 Sean's Github 的项目,将 SCM 类型设置为 Git,并将我上面列出的 SCM URL 放入其中。
现在,我需要创建一个将使用此 Ansible Tower 项目的清单。我将
- 创建一个名为 Sean Github Inventory 的清单。
- 添加一个名为 Sean Github Source 的源,并选择之前创建的 Ansible Tower 项目(名为 Sean's Github)。
- 选择项目后,将出现一个下拉菜单,让我们可以直接指向主机扁平文件。
- 创建源后,您可以使用圆形箭头同步按钮同步它。主机和组将自动显示在主机按钮下,如下面的动画所示。
使用源代码控制来管理清单在 Ansible Tower 用户中很流行,并且可以很好地扩展。