我在 Mac OS 上运行 Vagrant 1.8.1 和 ansible 1.8.4。
我在 vagrant 上启动了 2 台 Ubuntu 机器:
itais-MacBook-Pro:ansible-dir itaiganot$ ./dev/hosts --list | jq '.'
{
"web": [
"web"
],
"app": [
"app-1"
],
"vagrant": [
"web",
"app-1"
],
"_meta": {
"hostvars": {
"web": {
"ansible_ssh_host": "127.0.0.1",
"ansible_ssh_port": "2201",
"ansible_ssh_user": "vagrant",
"ansible_ssh_private_key_file": "/Users/itaiganot/ansible-dir/.vagrant/machines/web/virtualbox/private_key"
},
"app-1": {
"ansible_ssh_host": "127.0.0.1",
"ansible_ssh_port": "2202",
"ansible_ssh_user": "vagrant",
"ansible_ssh_private_key_file": "/Users/itaiganot/ansible-dir/.vagrant/machines/app-1/virtualbox/private_key"
}
}
}
}
我ansible.cfg
在当前目录中有一个文件,VagrantFile 也位于该目录中。
itais-MacBook-Pro:ansible-dir itaiganot$ cat ansible.cfg
[defaults]
host_key_checking = False
inventory = dev
在 dev 目录中有两个文件:hosts - 一个 python 脚本,可自动查找启动的 vagrant 机器的 IP;另一个文件包含角色配置:
itais-MacBook-Pro:dev itaiganot$ cat static
[web]
[app]
[role_web:children]
web
[role_app:children]
app
我正在尝试运行以下命令:
ansible role_app -a 'hostname'
但我收到以下错误:
ERROR: Unable to find an inventory file, specify one with -i ?
我在 Google 上搜索了一下,发现我可以导出一个变量来指向配置,如下所示:
export ANSIBLE_CONFIG=/Users/itaiganot/ansible-dir/ansible.cfg
但这对我也没什么帮助。
顺便说一下,将 dev 目录作为清单添加到命令中是可行的:
itais-MacBook-Pro:ansible-dir itaiganot$ ansible role_app -a 'hostname' -i dev
app-1 | success | rc=0 >>
app-1
知道为什么该ansible.cfg
文件被 ansible 忽略了吗?
答案1
根据 Ansible 文档:http://docs.ansible.com/ansible/intro_configuration.html#inventory,此变量在1.9版本之前不可用:
存货
这是 Ansible 将用来确定可以与哪些主机通信的清单文件、脚本或目录的默认位置:
inventory = /etc/ansible/hosts
hostfile
它在 1.9 之前的 Ansible 中被调用
另一件事是确保系统中没有其他可用的 ansible.cfg 文件:http://docs.ansible.com/ansible/intro_configuration.html
可以在配置文件中进行和使用更改,这些更改将按以下顺序处理:
- ANSIBLE_CONFIG(环境变量)
- ansible.cfg(在当前目录中)
- .ansible.cfg(在主目录中)
- /etc/ansible/ansible.cfg