在 Red Hat Ansible Tower 中使用 Infoblox 作为动态清单
在 Red Hat Ansible Tower 中使用 Infoblox 作为动态清单
您是否还在使用电子表格来跟踪所有设备清单?您是否在基础设施中部署了 Infoblox 设备?您是否想在不维护静态设备注册表的负担下开始自动化?如果您对以上任何问题的回答都是肯定的,那么这篇博文就是为您准备的。
运维团队经常难以保持其配置管理数据库 (CMDB) 的最新状态,主要是因为他们没有参与规范流程,无法分享哪些信息与他们相关,或者即使他们参与了,一旦流程建立起来,
团队也不被允许更改任何配置项 (CI) ,因为他们只有只读权限!
现实情况是,当我们谈论CMDB 时,很多时候我们谈论的是数据库中的表格,而没有版本控制机制,因此只向最终用户提供只读访问权限。
其影响是,为了执行其配置项的生命周期管理(创建/更新/停用),团队必须经历一个繁琐的手动流程,直到他们放弃更改 CMDB 中的 CI(配置项),并将其保留原样。接下来会发生什么?不同的团队开始依赖自己的CMDB (又称电子表格) 来跟踪子网、IP 分配、DNS 记录、区域、视图等。最终结果是什么?最终用户请求他们的机器,仍然需要至少等待一周,才能让来自 NetOps 团队的某人查询他们自己的 CMDB(是的,电子表格)为他们提供 DNS 记录和 IP 地址。
动态清单
动态清单是 Red Hat Ansible Tower 中最强大的功能之一。动态清单允许 Ansible 查询外部系统并使用响应数据构建其清单。Red Hat Ansible Tower 通过动态清单脚本提供了一些开箱即用的集成,并且还允许用户通过提供自己的自定义动态清单脚本 来扩展这些功能。
Red Hat Ansible Tower 和 Infoblox
让我们看看配置自定义动态清单脚本以查询 Infoblox 并将其用作我们的真实来源清单所需的操作步骤。
安装 infoblox-client
首先,我们需要在 Red Hat Ansible Tower 集群中每个节点的 venv 以及 infoblox 清单脚本所需的配置文件中安装 infoblox-client python 库。
# source /var/lib/awx/venv/awx/bin/activate # pip install infoblox-client
注意:您也可以创建一个playbook 来执行此操作,使用 Ansible 的pip_module。
在/etc/ansible/infoblox.yaml 中创建infoblox 配置文件
--- filters: extattrs: {} view: null
注意:请遵循Ansible GitHub 问题,我建议从环境变量或文件中获取配置项以提高灵活性。
凭据类型
在前面的步骤中的安装在集群中的所有节点上成功完成之后,我们需要在 Ansible Tower 中指定凭据和主机名以建立与 Infoblox 设备的通信。到目前为止,我们还没有任何针对 Infoblox 的特定 Ansible Tower 凭据,因此让我们创建一个自定义凭据类型。然后,我们可以提供与 Infoblox 通信所需的信息,并让 Ansible Tower 保护密码,并实现RBAC(基于角色的访问控制)。
作为管理员,请转到左侧菜单中的凭据类型。
创建新的凭据类型:INFOBLOX_INVENTORY(绿色 + 符号)
在输入配置字段中定义所需的输入。
fields: - type: string id: hostname label: Hostname - type: string id: username label: Username - secret: true type: string id: password label: Password required: - username - password
在注入器配置字段中定义作为环境变量的输入注入。
env: INFOBLOX_HOST: '{{ hostname }}' INFOBLOX_PASSWORD: '{{ password }}' INFOBLOX_USERNAME: '{{ username }}'
凭据
在 Ansible Tower 中创建凭据类型 INFOBLOX_INVENTORY 后,我们可以使用它来创建新的凭据,并指定与 Infoblox 设备通信所需的信息。
创建与 Infoblox 设备通信的凭据:infoblox-ip.ip.ip.ip
注意:在本例中,名称包含 IP 或 FQDN,因此我们可以知道此特定凭据指的是哪个设备。
清单脚本
创建自定义清单脚本,用于查询 Infoblox 设备并将输出解析为 Ansible 清单所期望的格式。
创建一个新的自定义清单脚本:_infoblox-inventory-script.py
从 Ansible 的 GitHub 获取infoblox.py 并将其粘贴到自定义脚本字段中
清单源
使用 infoblox 动态脚本作为动态源创建清单,并进行同步以使用 Infoblox 设备返回的条目填充我们的清单。
转到清单,然后创建一个新的清单:netops
添加源,引用 infoblox-dynamic-script.py
清单条目
验证主机、组和变量是否根据 Infoblox 设备中的现有条目在清单中正确填充。
检查清单中的主机条目: netops
-> hosts
检查与主机条目关联的变量:netops
-> hosts
-> rtr01.acme.com
此时,我们的动态清单中包含服务器和路由器,因此从现在起,我们可以对它们执行任何 Ansible Playbook。 在下一节中,我们将介绍 infoblox 方面的配置情况。
Infoblox
此时,您可能想知道:Ansible Tower 清单中的这些变量是如何在我的 Infoblox 设备中指定的?答案是,我们使用 Infoblox 中的可扩展属性来满足 ansible_* 变量,因此它们会自动填充到 Ansible Tower 的清单中。下面是 Infoblox WebUI 中的一些屏幕截图。
Infoblox 中的“可扩展属性”配置,用于变量“ansible_host”
为什么要使用“可扩展属性”?
答案很简单。通常情况下,DNS 中的条目会引用服务器的生产接口或提供的服务,而管理访问只能通过专用的带外管理接口进行访问。ansible_host 附加属性定义了,对于此特定条目,Ansible 应使用其值通过管理接口与服务器建立通信。
此外,我们可以依赖“可扩展属性”变量来指定条目是否由 Ansible Tower 管理(例如:ansible_managed: true/false),并相应地更新我们的“动态清单配置文件”,以使用此特定属性作为过滤器。结果是,Ansible Tower 的清单将只填充我们想要自动化的条目(ansible_managed: true)。