我只是尝试连接到计算机并运行win_ping模块。

网上有几本教程概述了一些关键步骤:


创建一个目录./windows

hosts中创建文件./windows

创建目录./windows/group_vars

windows.yml中创建文件./windows/group_vars

将具有Windows凭据的多个变量插入到windows.yml中,问题是这些变量均未指定相对于“。”的位置。我尝试将这种结构放置在/etc/ansible/中,但不幸的是,看起来Ansible根本没有采用这种结构。我也尝试过移动结构,但是没有运气。

如何让Ansible引用我创建的目录?我相信ansible.cfg会有意义,但我只能看到如何将其指向默认清单文件。有趣的是-甚至在基本主机文件中添加了一个名为“ windows”的组,并在该组中调用ansible-它表示未找到主机。我还取消注释ansible.cfg中的库存位置以指向/etc/ansible/hosts,它仍然显示在调用ansible windows -m ping(或win_ping)时找不到主机。

#1 楼

Ansible在两个地方查找group_vars子目录:


剧本目录-一个包含您运行的剧本的目录
库存目录-一个在运行时使用-i选项指定的目录时间或默认时间(通常是/etc/ansible/usr/local/etc/ansible

在最典型的情况下,您可以将group_varsplaybook.yml一起放置。

您发布的示例使用第二种方法,因此要引用文件,您需要在命令中添加-i

ansible windows -m ping -i ./windows


评论


感谢您的回复。它适合我的特定问题,因此标记为答案。对于有兴趣的人,此链接也提供有关变量处理的明确答案! docs.ansible.com/ansible/intro_inventory.html#group-variables

– A L
17年5月30日在17:55

#2 楼

有一些关于Ansible最佳实践的GitHub仓库,我发现enginyoyen / ansible-best-practices不仅对您的情况有所帮助,而且还可以理解完整的Ansible项目中的剧本/清单/角色/任务差异。

一些要点:(/指向项目的主目录)


您的变量确实存在于/group_vars/



/group_vars/windows.yml将由分配给Windows组的主机自动读取

/group_vars/db.yml将由分配给db组的主机自动读取,依此类推


您还可以包括名称为/host_vars/win_host_1.yml的文件,这些文件只能由该主机读取

/group_vars/中的组在清单文件中定义(多个)

[windows]
win_host1.example.com
win_host_2.example.com


清单文件的名称类似/production.yml/staging.yml,以帮助确保将处于不同准备状态的代码部署到(理想地)相同的环境中。


角色是一个文件,它由执行某些操作所需的任务组成,例如install nginx。它们的名称类似于/roles/install_nginx.yml,而Playbooks的名称类似于/playbooks/win_hosts.yml,除了将清单文件中的组与希望这些组中的主机运行的角色进行匹配之外,其他任何操作都没有。

运行ansible-playbook时,$HOME应该是/playbooks/,以便将不同的清单文件称为ansible-playbook -i ../production.yml win_hosts.yml

这也是放置自定义可配置文件/playbooks/ansible.cfg

还有一种方法可以管理来自Ansible Galaxy或GitHub的外部角色,并使它们与您构建的自定义角色分开,但仍位于项目目录中,而不是/etc/ansible/roles/,其中ansible-galaxy默认将其放置。
一个不错的bash脚本,用于安装Ansible