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

时间:2019-06-20 18:19:14

标签: ansible

我有一个目录结构,可在其中保留我的剧本,如下所示:

/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/目录之外的任何位置触发执行,都不会设置在该本地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等配置?

OR

如何使剧本可从任何目录执行,但仍会继续寻找由用户创建的ansible.cfg?这在三个默认位置中不存在。

1 个答案:

答案 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分支,而不必依赖不能同时出现在多个分支中的一个公共工作空间。