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

mon*_*onk 3 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]
Run Code Online (Sandbox Code Playgroud)

我目前正在从目录执行我的剧本,如下所示ansible_work

ansible-playbook -i inventory/inventory_1 playbook_dir_1/playbook_1.yml
Run Code Online (Sandbox Code Playgroud)

或者

ansible-playbook -i inventory/inventory_1 playbook_dir_1/playbook_2.yml
Run Code Online (Sandbox Code Playgroud)

或者

ansible-playbook -i inventory/inventory_2 playbook_dir_1/playbook_1.yml
Run Code Online (Sandbox Code Playgroud)

每个剧本都需要引用 ansible.cfg 中设置的一些变量log_path,例如role_path等。一切正常。

现在我被告知,我应该使配置足够灵活,以便在给定清单和剧本的完整路径时可以从任何位置执行这些剧本。(这似乎是公平的要求)但由于我的剧本引用了 ansible.cfg 的本地副本,因此如果我从 dir 之外的任何点触发执行,则不会设置此本地 ansible.cfg 中设置的内容/home/monk/ansible_work/

默认情况下 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. 
Run Code Online (Sandbox Code Playgroud)

问题:

DEFAULT_LOG_PATH如何使 playbook 独立于 ansible.cfg 并仍然设置诸如等的配置DEFAULT_ROLES_PATH

或者

如何使剧本可以从任何目录执行,但仍然继续获取创建的用户ansible.cfg?它不存在于三个默认位置中。

tas*_*inp 5

从任何目录执行 playbook 并仍然引用您定义的文件 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
Run Code Online (Sandbox Code Playgroud)

任何用户可以使用你的 ansible 架构的另一种方式是拥有公共 git 工作区,任何人都可以在自己的主目录中克隆(这就是我们在这里所做的)。它的优点:任何人都可以独立使用 git 分支,而不是依赖于一个不能同时在多个分支中的公共工作区。