Ansible - 如何创建从 Microsoft AD 获取主机的动态清单

Ansible - 如何创建从 Microsoft AD 获取主机的动态清单

我使用 Ubuntu 作为控制节点,并希望从我的域控制器 (windows server 2022) 获取主机,LDAP 库存指南&microsoft.ad.ldap inventory – Active Directory 的库存插件文档没有足够的帮助。

inventory.microsoft.ad.yml我创建了一个名为also tried 的文件inventory.microsoft.ad.ldap.yml,并在其中填充了以下内容:

plugin: microsoft.ad.ldap
server: ldap://example.domain.com
base_dn: dc=example,dc=com
bind_dn: cn=Administrator,cn=Users,dc=example,dc=com
bind_password: admin_pass
query_filter: (objectClass=computer)

之后我就跑了ansible-inventory -i /etc/ansible/inventory.microsoft.ad.yml --list

我收到以下错误:

[WARNING]:  * Failed to parse /etc/ansible/inventory.microsoft.ad.yml with auto
plugin: inventory config '/etc/ansible/inventory.microsoft.ad.yml' specifies
unknown plugin 'microsoft.ad.ldap'
[WARNING]:  * Failed to parse /etc/ansible/inventory.microsoft.ad.yml with yaml
plugin: Plugin configuration YAML file, not YAML inventory
[WARNING]:  * Failed to parse /etc/ansible/inventory.microsoft.ad.yml with ini
plugin: Invalid host pattern 'plugin:' supplied, ending in ':' is not allowed,
this character is reserved to provide a port.
[WARNING]: Unable to parse /etc/ansible/inventory.microsoft.ad.yml as an
inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available

不确定为什么它返回unknown plugin microsoft.ad.ldap文档使用这个插件并且我通过运行验证了 microsoft.ad 已安装ansible-galaxy collection list

我还确保安装了文档中指定的要求:

  • dnspython
  • pyspnego >= 0.8.0
  • pyspnego[kerberos]
  • 桑斯德普

我甚至不确定我的步骤是否正确,因为我找不到任何解释如何为 Microsoft AD 创建动态库存的资料来源,我发现的只是与云提供商相关的内容。

我还发现互联网上有人为动态库存创建 Python 脚本,尽管没有在文档中看到它,不确定是否需要创建 Python 脚本或仅使用插件就足够了。

答案1

文件名必须是 microsoft.ad.ldap.yml 或 microsoft.ad.ldap.yaml。

文件应该位于 inventory 目录中。

库存/microsoft.ad.ldap.yml

如果您使用 AAP,则这里有一个示例:https://autodotes.com/posts/xnl1o59Sdls9p7vZleBf

答案2

而且这个问题有点老了,我刚刚自己解决了这个问题,并认为这个解决方案可以帮助别人。

正如罗伯特所说,库存文件必须命名为inventories/microsoft.ad.ldap.yml(.yAml 也可以。

这对我来说还不够。默认的 awx-ee 执行环境没有 microsoft.ad 插件,使用 requirements.yml 文件强制安装对我来说不起作用。我必须构建一个自定义 EE,我使用 ansible builder v3 完成了这项工作。

为此,我创建了一个名为的文件,execution-environment.yml其内容如下:

---
version: 3

images:
  base_image:
    name: quay.io/ansible/awx-ee:24.2.0
dependencies:
  galaxy: requirements.yml
  python: 
    - pyspnego
    - sansldap

以及requirements.yml包含以下内容的文件:

---
collections:
  - name: awx.awx
  - name: microsoft.ad

我用它来构建我的图像,ansible-builder并将图像推送到 dockerhub 以供我的构建使用。我为 AWX 构建了它,因此选择了 base_image 和 collections。插入集合 awx.awx 可能是多余的,因为我怀疑它已经在 awx-ee 中了。

我浪费了大部分时间的问题是,我假设 LDAP 查询需要 bind_dn,并且我将一个可分辨名称作为用户名,而microsoft.ad.ldap插件需要一种user@domain格式。

相关内容