我正在使用Ansible,并且在我的清单/ all中有这个configuration:
[master] 192.168.1.10 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant [slave] 192.168.1.11 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant 192.168.1.12 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant [app] 192.168.1.13 ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant [all:children] master slave
我不想重复每个新实例的所有参数。 我怎样才能在一个地方configuration他们? 有没有这些参数的文件?
您可以将以下部分添加到清单文件中:
[all:vars] ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
您可以使用Ansible的“ 最佳实践”文档中指定的Playbook 布局设置适用于所有主机的variables,并创build您定义它们的group_vars/all
文件。
--- # file: group_vars/all ansible_connection: ssh ansible_ssh_user: vagrant ansible_ssh_pass: vagrant
我很困惑,尽pipe你想要做什么。 您不需要在库存中指定Ansible用户或密码。 如果你使用的是Vagrant,你肯定不会,如果你从命令行调用Ansible,你可以指定用户名为--user=vagrant
,然后用--ask-pass
来请求密码。
我认为最好是使用SSH密钥安装到所有服务器上。 你应该只在每个节点上运行ssh-copy-id,并在任何地方安装你的ssh密钥,以便使用你的ssh密钥login。 不要将密码保存到剧本/库存中更安全。
为此,您应该生成您的ssh密钥对 ,然后为所有服务器运行ssh-copy-id。
免责声明:我只在OSX上testing过。 基于各种文档,我希望它能在其他平台上工作。
“项目目录”是指Vagrant项目的基本目录 – 包含Vagrantfile
的目录。
Vagrant自动生成的Ansible库存文件:
Vagrant使用默认的Ansible连接variables创build一个库存文件 。 在<project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
。
该文件将由Vagrant根据需要重新生成,因此手动编辑将被覆盖。 但是根据Vagrant文档,您可以在Vagrantfile
指定多台机器,组variables等, Vagrantfile
其添加到此清单文件中。
将Ansibleconfiguration为默认为此清单文件:
要将此文件设置为项目目录中(主机上)的ansible.cfg
命令所使用的默认值,请在项目目录中添加一个ansible.cfg
文件,并根据需要更改path:
[defaults] inventory = ./path/to/inventory
要确认正在使用此库存文件,请将其查找为默认报告的默认值:
(从项目目录中)
$ ansible | grep inventory ERROR! Missing target hosts -i INVENTORY, --inventory-file=INVENTORY specify inventory host path (default=./.vagrant/provis ioners/ansible/inventory/vagrant_ansible_inventory) or
确认您的主机:
$ ansible all --list-hosts hosts (2): master slave
在这些主机上使用Ansible:
从项目目录中,您应该可以正常使用您在Vagrantfile
定义的主机。
例如:
ansible slave -a 'hostname'
添加到清单主机。
对于Ansible <2.0:
[all:vars] ansible_connection=ssh ansible_ssh_user=vagrant ansible_ssh_pass=vagrant
对于Ansible> = 2.0 :
[all:vars] ansible_connection=ssh # actually default mode smart is OK ansible_user=vagrant ansible_pass=vagrant