我有一个目录结构,在这种结构下,我保存我的剧本如下:
/home/monk/
|_____Ansible_work
|_____[ansible.cfg]
|_____[playbook_dir_1]
| |_______playbook_1.yml
|_____[playbook_dir_2]
| |_______playbook_2.yml
|_____[playbook_dir_3]
| |_______playbook_3.yml
|_____[playbook_dir_4]
| |_______playbook_4.yml
|_____[inventory]
|___[inventory_1]
|___[inventory_2]
我目前正在执行我的剧本,如下所示ansible_work
目录:
ansible-playbook -i inventory/inventory_1 playbook_dir_1/playbook_1.yml
或
ansible-playbook -i inventory/inventory_1 playbook_dir_1/playbook_2.yml
或
ansible-playbook -i inventory/inventory_2 playbook_dir_1/playbook_1.yml
每个剧本都需要参考 ansible 中设置的一些变量.cfg如log_path
、role_path
等,一切正常。
现在有人告诉我,我应该使配置足够灵活,以便在给定清单和剧本的完整路径时可以从任何位置执行这些剧本。(这似乎是公平的要求) 但是,由于我的剧本引用了 ansible 的本地副本.cfg,如果我从/home/monk/ansible_work/
dir 以外的任何点触发执行,则不会设置此本地 ansible 中设置的内容.cfg。
默认情况下,Ansible.cfg查找优先级如下:
* ANSIBLE_CONFIG (an environment variable)
* ansible.cfg (in the current directory) <--------------I am currently using this
* .ansible.cfg (in the home directory) <--------------Cannot use this as multiple users will be running the PB
* /etc/ansible/ansible.cfg <--------------Cannot set this as , we do not have admin rights.
问题:
如何使剧本独立于 ansible.cfg并且仍然设置DEFAULT_LOG_PATH
、DEFAULT_ROLES_PATH
等配置?
或
如何使 playbook 从任何目录可执行,但它仍然不断采购用户创建的ansible.cfg
? 这在三个默认位置中不存在。
从任何目录执行剧本并仍然引用文件的一种方法 ansible.cfg您定义的是完全定义路径,使用额外的 var ANS_WORK会更短,并使用 ANSIBLE_CONFIG var 指向您的 ansible.cfg:
ANS_WORK=/home/monk/ansible_work
ANSIBLE_CONFIG=${ANS_WORK}/ansible.cfg
ansible-playbook
-i ${ANS_WORK}/inventory/inventory_2
${ANS_WORK}/playbook_dir_1/playbook_1.yml
任何用户都可以使用您的 Ansible 架构的另一种方式是拥有通用的 Git 工作区,例如任何人都可以在自己的家庭目录中克隆(这就是我们在这里所做的)。优点:任何人都可以独立使用 git 分支,而不依赖于一个不能同时位于多个分支中的公共工作区。