在最简单的形式中,清单是静态文件。当您开始使用Ansible时,这是理想的选择,但是随着自动化的扩展,它变得不足。
这就是为什么:
- 当某些事物不断变化,工作负载以及它们之后运行的节点出现和消失时,如何更新和维护受监视节点的完整列表?
- -, ?
这两个问题的答案都给出了动态清单(动态清单a)-看起来是自动化单元的脚本或插件,指的是事实的来源(事实的来源)。此外,动态清单会自动将节点分类为组,以便您可以更准确地选择目标系统以执行Ansible自动化。
库存插件使Ansible用户能够访问外部平台以动态查找目标节点,并在形成库存时将这些平台用作真相来源。标准的Ansible来源列表包括云平台AWS EC2,Google GCP和Microsoft Azure,并且还有许多其他适用于Ansible的清单插件。
Ansible Tower附带了许多清单插件,它们可以直接使用,并且除了上述云平台之外,还提供与VMware vCenter,Red Hat OpenStack Platform和Red Hat Satellite的集成。对于这些插件,只需提供凭据即可连接到目标平台,然后将它们用作Ansible Tower中的库存数据源。
除了Ansible Tower随附的标准插件外,Ansible社区还支持其他清单插件。随着向Red Hat Ansible Content Collections的迁移,这些插件已包含在各自的集合中。
在本文中,我们将以使用流行的IT服务管理平台ServiceNow的清单插件为例,客户经常在其中将有关其所有设备的信息存储在CMDB中。另外,CMDB可以包含对自动化有用的上下文,例如有关服务器所有者,服务级别(生产/非生产),已安装的更新和维护窗口的信息。Ansible清单插件可以与ServiceNow CMDB一起使用,并且是galaxy.ansible.com门户上servicenow集合的一部分。
Git仓库
要使用Ansible Tower中集合中的清单插件,必须将其设置为项目源。在Ansible Tower中,项目是与某种版本控制系统(例如git存储库)的集成,该系统不仅可以用于同步自动化剧本,还可以用于同步变量和清单。
我们的存储库实际上非常简单:
├── collections
│ └── requirements.yml
└── servicenow.yml
servicenow.yml文件包含插件清单的详细信息。在我们的例子中,我们只需要在CMDB ServiceNow中指定要使用的表即可。此外,我们还设置了将添加为节点变量的字段,以及有关我们要创建的组的某些信息。
$ cat servicenow.yml
plugin: servicenow.servicenow.now
table: cmdb_ci_linux_server
fields: [ip_address,fqdn,host_name,sys_class_name,name,os]
keyed_groups:
- key: sn_sys_class_name | lower
prefix: ''
separator: ''
- key: sn_os | lower
prefix: ''
separator: ''
请注意,这并未指定我们将以任何方式连接到的ServiceNow实例,也未指定用于连接的任何凭据。我们稍后将在Ansible塔中配置所有这些。需要
collections / Requirements.yml文件,以便Ansible Tower可以下载所需的馆藏,从而获得所需的清单插件。否则,我们将必须在所有Ansible Tower节点上手动安装和维护此集合。
$ cat collections/requirements.yml
---
collections:
- name: servicenow.servicenow
一旦将此配置推送到源代码管理,就可以在Ansible Tower中创建一个项目,该项目链接到相应的存储库。下面的示例将Ansible塔链接到我们的github存储库。注意SCM URL:它允许您注册一个帐户以连接到私有存储库,以及指定特定的分支,标记或提交结帐。
创建ServiceNow的凭据
如前所述,我们存储库中的配置不包含用于连接到ServiceNow的凭据,也不会充实我们将与之通信的ServiceNow实例。因此,要设置此数据,我们将在Ansible塔中创建凭据。根据ServiceNow库存插件的文档,有许多环境变量可用来设置连接参数,例如:
= username
The ServiceNow user account, it should have rights to read cmdb_ci_server (default), or table specified by SN_TABLE
set_via:
env:
- name: SN_USERNAME
在这种情况下,如果设置了SN_USERNAME环境变量,则清单插件将使用它作为连接到ServiceNow的帐户。
我们还需要设置SN_INSTANCE和SN_PASSWORD变量。
但是,Ansible Tower没有这种类型的凭据,可以在其中为ServiceNow指定此数据。但是Ansible Tower允许我们定义自定义凭据类型,您可以在文章“ Ansible Tower功能聚焦:自定义凭据”中了解更多信息。
在我们的例子中,ServiceNow的自定义凭据的输入配置如下所示:
fields:
- id: SN_USERNAME
type: string
label: Username
- id: SN_PASSWORD
type: string
label: Password
secret: true
- id: SN_INSTANCE
type: string
label: Snow Instance
required:
- SN_USERNAME
- SN_PASSWORD
- SN_INSTANCE
这些凭据将作为具有相同名称的环境变量公开。在进样器配置中对此进行了描述:
env:
SN_INSTANCE: '{{ SN_INSTANCE }}'
SN_PASSWORD: '{{ SN_PASSWORD }}'
SN_USERNAME: '{{ SN_USERNAME }}'
因此,我们已经定义了所需的凭据类型,现在您可以添加ServiceNow帐户并设置实例,用户名和密码,如下所示:
我们创建库存
因此,现在我们都准备在Ansible Tower中创建库存。我们称之为ServiceNow:
创建清单后,我们可以将数据源附加到清单上。在这里,我们指向之前创建的项目,并在源代码控制存储库中输入库存YAML文件的路径,在本例中,该路径在项目根目录中为servicenow.yml。此外,必须绑定ServiceNow帐户。
要检查一切工作原理,让我们尝试通过单击“全部同步”按钮与数据源同步。如果一切配置正确,则应将节点导入到我们的清单中:
请注意,我们所需的组也已创建。
结论
在本文中,我们以ServiceNow插件为例,研究了如何使用Ansible Tower中集合中的清单插件。我们还保护了凭据以连接到我们的ServiceNow实例。从项目中绑定清单插件不仅可以与第三方或自定义插件一起使用,还可以用于修改某些常规清单的工作。这使Ansible自动化平台可以无缝地与现有工具无缝集成,以自动化日益复杂的IT环境。
在此处找到有关本文所涉及主题以及使用Ansible的其他方面的更多信息:
- 使用ServiceNow Ansible进行自动化的博客。
- .
- Red Hat Automation Hub (cloud.redhat.com).
- Ansible Automation Platform.
*Red Hat . , .