如何从用户定义的 Ansible.cfg 设置ansible_config变量



我有一个目录结构,在这种结构下,我保存我的剧本如下:

/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_pathrole_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_PATHDEFAULT_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 分支,而不依赖于一个不能同时位于多个分支中的公共工作区。

最新更新