Ansible 替代目录结构需要路径
Ansible Alternative directory structure requires paths
我正在尝试从 Ansible 文档 site 最佳实践部分创建 替代目录布局。
按照此指导,这是我在 ~/ansible_proj/windows_setup
中创建的布局(windows_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
当我尝试 运行 剧本 windows_configure.yml
时,按照建议 here(参见第一个示例),使用
$ (.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. 如何使用 替代目录布局 到 运行 playbooks 通过使用 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
目录中?
编辑
我试过 adding ansible.cfg
to the current directory (~/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
仅针对 Q1.:
似乎在 this github issue 中讨论了这个问题 - 解决方案是使用 inventories/production
。我测试了这个(当前目录中没有任何 ansible.cfg
文件)并且它有效:
$ (.venv) user@sname: ~/ansible_proj/windows_setup$ ansible-playbook
-i inventories/production windows_configure.yml --ask-vault-pass
对于 Q2.:
看起来符号 links 可能是一种方法 - 我不想这样做,所以我将剧本留在根项目目录中,而不是 playbooks
目录中。但是,这里有一些基于符号 link 的解决方案:1, 2。我不确定是否有其他方法可以解决此问题。
我正在尝试从 Ansible 文档 site 最佳实践部分创建 替代目录布局。
按照此指导,这是我在 ~/ansible_proj/windows_setup
中创建的布局(windows_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
当我尝试 运行 剧本 windows_configure.yml
时,按照建议 here(参见第一个示例),使用
$ (.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. 如何使用 替代目录布局 到 运行 playbooks 通过使用 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
目录中?
编辑
我试过 adding ansible.cfg
to the current directory (~/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
仅针对 Q1.:
似乎在 this github issue 中讨论了这个问题 - 解决方案是使用 inventories/production
。我测试了这个(当前目录中没有任何 ansible.cfg
文件)并且它有效:
$ (.venv) user@sname: ~/ansible_proj/windows_setup$ ansible-playbook
-i inventories/production windows_configure.yml --ask-vault-pass
对于 Q2.:
看起来符号 links 可能是一种方法 - 我不想这样做,所以我将剧本留在根项目目录中,而不是 playbooks
目录中。但是,这里有一些基于符号 link 的解决方案:1, 2。我不确定是否有其他方法可以解决此问题。