1

我正在尝试从 Ansible 文档站点最佳实践部分创建替代目录布局。

按照这个指导,这是我在里面创建的布局~/ansible_proj/windows_setupwindows_setup是一个 Python 虚拟环境):

.venv
inventories/
   production/
      hosts
      group_vars/
         windows
            windows.yml
            vault

windows_configure.yml

roles/
    role1/
    role2/
    role3/
    role4/

.gitignore # this contains 1 line produced by: echo 'vault' >> .gitignore

当我尝试运行 playbook时,按照此处windows_configure.yml的建议(参见第一个示例),使用

$ (.venv) cd ~/ansible_proj/windows_setup
$ (.venv) user@sname: ~/ansible_proj/windows_setup$ ansible-playbook
                      -i production windows_configure.yml --ask-vault-pass

错误是

Unable to parse /.../production as an inventory source

production hosts list is empty, only localhost is available

我必须指出hosts文件的路径,而不是像:

$ (.venv) user@sname: ~/ansible_proj/windows_setup$ ansible-playbook
                       -i inventories/production/hosts windows_configure.yml --ask-vault-pass

为了让它运行。

Q1。如何使用替代目录布局通过使用production(如文档建议)而不是运行剧本inventories/production/hosts


在相同的目录结构中,如果我放在windows_configure.yml里面playbooks/,并运行:

$ (.venv) user@sname: ~/ansible_proj/windows_setup$ ansible-playbook
                      -i inventories/production/hosts playbooks/windows_configure.yml
                      --ask-vault-pass

然后我得到这个错误

ERROR: the role 'role1' was not found in /.../playbooks/roles:/.../playbooks

Q2。在这个替代目录结构中,是否可以将所有剧本放在一个playbooks目录中?


编辑

我尝试添加ansible.cfg到当前目录~/ansible_proj/windows_setup)(其中还包含剧本windows_configure.yml。这里是ansible.cfg

[defaults]
inventory  = ~/ansible_proj/windows_setup/inventories/production
roles_path = ~/ansible_proj/windows_setup

当我跑

$ (.venv) cd ~/ansible_proj/windows_setup
$ (.venv) user@sname: ~/ansible_proj/windows_setup$ ansible-playbook
                      -i production windows_configure.yml --ask-vault-pass

出现同样的错误

Unable to parse /.../production as an inventory source

production hosts list is empty, only localhost is available
4

1 回答 1

0

对于第一季度。只要:

看来这个问题在这个 github 问题中被讨论了- 解决方案是使用inventories/production. ansible.cfg我对此进行了测试(当前目录中没有任何文件)并且它有效:

$ (.venv) user@sname: ~/ansible_proj/windows_setup$ ansible-playbook
                      -i inventories/production windows_configure.yml --ask-vault-pass

对于第二季度。

看起来符号链接可能是一种方法 - 我不想这样做,所以我将剧本留在了根项目目录中,而不是在playbooks目录中。但是,这里有一些基于符号链接的解决方案:12。我不确定是否有其他方法可以解决此问题。

于 2017-11-01T17:47:21.083 回答