我正在使用 Ansible,并且我的库存/全部中有此配置:
[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
我不想为每个新实例重复所有参数。我怎样才能在一个地方配置它们?有没有这些参数的文件?
您可以将以下部分添加到库存文件中:
注意:在 Ansible 2.0 之前
ansible_user
是ansible_ssh_user
.组变量
您可以使用Ansible 的最佳实践文档中指定的playbook 布局并创建定义它们的文件来设置适用于所有主机的变量。
group_vars/all
[编辑] 我对你试图做的事情感到困惑。您不需要在清单中指定 Ansible 用户或密码。如果你使用 Vagrant,你肯定不会,如果你从命令行调用 Ansible,你可以指定用户
--user=vagrant
并让它要求输入密码--ask-pass
。我认为最好在所有服务器上使用 ssh 密钥安装。您应该仅在每个节点上运行 ssh-copy-id 并在任何地方安装您的 ssh 密钥,以便 ansible 能够使用您的 ssh 密钥登录。不将密码保存到剧本/库存中会更安全。
为此,您应该生成 ssh 密钥对 ,然后为所有服务器运行 ssh-copy-id。
将以下添加到清单主机。
对于 Ansible <2.0:
对于 Ansible >=2.0:
免责声明:我只在 OSX 上测试过。根据各种文档,我希望它可以在其他平台上运行。
“项目目录”是指 Vagrant 项目的基本目录——包含
Vagrantfile
.Vagrant 自动生成的 Ansible Inventory 文件:
Vagrant使用默认的 Ansible 连接变量创建清单文件。在 中寻找它
<project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
。该文件将由 Vagrant 根据需要重新生成,因此手动编辑将被覆盖。但是,根据 Vagrant 文档,您可以在其中指定多台机器、组变量等,
Vagrantfile
它们将被添加到此清单文件中。将 Ansible 配置为默认使用此清单文件:
ansible
当您在项目目录中(在主机上)时,要使该文件成为命令使用的默认文件,请在项目目录中添加一个ansible.cfg
包含这些内容的文件,并根据需要更改路径:要确认此清单文件正在被使用,请将其查找为 ansible 报告的默认值:
(从项目目录中)
$ 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:
在项目目录中,您应该能够
ansible
正常使用您在Vagrantfile
.例如:
您必须设置正确的变量。你需要使用:
您需要仔细阅读,因为
ansible_ssh_password
并且ansible_ssh_user
在版本中不起作用:ansible 2.9.6以下是如何为 SSH 连接设置默认 Ansible 用户名/密码的步骤
ansible.cfs 配置将是
库存文件将是
ansible执行成功结果