2015-09-04 67 views
3

Ansible有一个很长的配置参数列表,包括ssh的不同设置。假设我在当前文件夹中有一些/etc/ansible/ansible.cfg文件和其他ansible.cfg文件,如何查看结果配置?从命令行显示Ansible配置

我只是讲是这样的:

ansible show-config 
ansible-playbook show config 
+0

在什么情况下你会想要多一个ansible.cfg?还是真的有全球环境和你的本地项目cfg? – j12y

+0

比方说,我只是想确定一个正确的参数运行正确的参数,比如看是否真的启用了ControlMaster,如果使用了流水线等等,那么看看运行时的配置参数是什么 –

回答

3

是Ansible拉在以下优先顺序配置的Ansible docs状态:

  1. ANSIBLE_CONFIG(环境变量)
  2. ansible.cfg(以当前目录)
  3. .ansible.cfg(在主目录中)
  4. /etc/ansible/ansible.cfg

而现有1.5的顺序是:

  1. ansible.cfg(在当前目录)
  2. ANSIBLE_CONFIG(环境变量)
  3. .ansible.cfg(在主目录)
  4. /etc/ansible/ansible.cfg

它还声明它不会合并这些,因此您不必考虑如果在/etc/ansible/ansible.cfg中有一个选项但未在任何优先文件中设置选项会发生什么情况。

我不知道问Ansible的方式直接表明CONFIG如果从目录中运行Ansible它会使用,但您可以通过使用这个简单的bash脚本看到:

#!/bin/bash 

if ! [[ -z $ANSIBLE_CONFIG ]]; then 
    echo $ANSIBLE_CONFIG 
    exit 0 
elif [[ -f ansible.cfg ]]; then 
    cat ansible.cfg 
    exit 0 
elif [[ -f ~/.ansible.cfg ]]; then 
    cat ~/.ansible.cfg 
    exit 0 
elif [[ -f /etc/ansible/ansible.cfg ]]; then 
    cat /etc/ansible/ansible.cfg 
    exit 0 
else 
    echo "No Ansible config found! Using default settings" 
    exit 1 
fi 

我把它放在/usr/local/bin/(使其可执行)并将其命名为get_ansible_cfg.sh

为了显示它的行动,我们需要设置Ansible获取配置的所有4个位置,然后逐个删除它们。我设置为测试值可以在这里看到:

[email protected]:~$ echo $ANSIBLE_CONFIG 
Set in env variables 

[email protected]:~$ sudo find/-name "*ansible.cfg" 
/etc/ansible/ansible.cfg 
/home/vagrant/.ansible.cfg 
/home/vagrant/inventory/ansible.cfg 

[email protected]:~$ cat /etc/ansible/ansible.cfg 
Config in /etc/ansible/ansible.cfg 
[email protected]:~/inventory$ cat ~/.ansible.cfg 
Set in ~/.ansible.cfg 
[email protected]:~/inventory$ pwd 
/home/vagrant/inventory 
[email protected]:~/inventory$ cat ansible.cfg 
Set in local directory ansible.cfg 

随着这些设置和运行,我们得到:

[email protected]:~/inventory$ get_ansible_cfg.sh 
Set in env variables 

它返回我们ANSIBLE_CONFIG测试值。

解封这并再次运行给我们:

[email protected]:~/inventory$ unset ANSIBLE_CONFIG 
[email protected]:~/inventory$ get_ansible_cfg.sh 
Set in local directory ansible.cfg 

这是该外壳是目前在该目录中ansible.cfg

删除此文件,然后给我们:

[email protected]:~/inventory$ rm ansible.cfg 
[email protected]:~/inventory$ get_ansible_cfg.sh 
Set in ~/.ansible.cfg 

这是在.ansible.cfg文件中的当前用户的主目录设置的测试值。

最后,取消这给我们:

[email protected]:~/inventory$ get_ansible_cfg.sh 
Config in /etc/ansible/ansible.cfg 

如果有任何这些位置,我们得到的没有配置:

[email protected]:~/inventory$ sudo rm /etc/ansible/ansible.cfg 
[email protected]:~/inventory$ get_ansible_cfg.sh 
No Ansible config found! Using default settings 
4

运行 'ansible --version'。

$ ansible --version 
ansible 2.0.1.0 
config file = /etc/ansible/ansible.cfg 
configured module search path = Default w/o overrides 

$ touch ~/.ansible.cfg 
ansible 2.0.1.0 
config file = /home/jdoe/.ansible.cfg 
configured module search path = Default w/o overrides