我有一个目录结构,可在其中保留我的剧本,如下所示:
/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/
目录之外的任何位置触发执行,都不会设置在该本地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
等配置?
OR
如何使剧本可从任何目录执行,但仍会继续寻找由用户创建的ansible.cfg
?这在三个默认位置中不存在。
答案 0 :(得分:2)
从任何目录执行剧本并仍然引用文件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分支,而不必依赖不能同时出现在多个分支中的一个公共工作空间。