Я использую 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
Я не хочу повторять все параметры для каждого нового экземпляра. Как я могу настроить их только в одном месте? Есть ли файл с этими параметрами?
~/.ssh/config
Ответы:
Вы можете добавить следующий раздел в свой инвентарный файл:
Примечание: до Ansible 2.0
ansible_user
былаansible_ssh_user
.источник
[all:vars] ansible_connection=ssh ansible_port=22 ansible_user=admin
ansible_port
, поэтому вам не нужно явно указывать его, если не указано иное. Интересно, если кто-нибудь знает, как применять переменные более чем к одной группе за раз (но не ко всем), разделение запятыми не работает.Групповые переменные
Вы можете установить переменные, которые применяются ко всем хостам, используя макет playbook, указанный в документе Best Practices Ansible, и создав
group_vars/all
файл, в котором вы их определяете .[править] Я смущен тем, что вы пытаетесь сделать, хотя. Вам не нужно указывать Ansible пользователя или пароль в инвентаре. Если вы используете Vagrant, вы определенно этого не сделаете, и если вы вызываете Ansible из командной строки, вы можете указать пользователя с помощью
--user=vagrant
и попросить пароль--ask-pass
.источник
group_vars/all/main.yml
или простоgroup_vars/all
?sshpass
-"you must install the sshpass program"
group_vars/all
.Я думаю, что лучше использовать установку ключа ssh на всех серверах через натяжение. Вы должны запускать ssh-copy-id только для каждого узла и устанавливать ключ ssh везде, чтобы ansible могла войти в систему с помощью ключа ssh. Будет безопаснее не сохранять пароли в playbook / инвентарь.
Для этого вы должны сгенерировать пару ключей ssh и впоследствии запустить ssh-copy-id для всех серверов.
источник
Добавьте ниже к инвентарю хостов.
Для Ansible <2.0:
Для Ansible> = 2.0 :
источник
ansible_ssh_pass
, нетansible_pass
.Отказ от ответственности: я только проверял это на OSX. Основываясь на различных документах, я ожидаю, что он будет работать на других платформах.
«каталог проекта» относится к базовому каталогу проекта Vagrant - каталогу, который содержит
Vagrantfile
.Файл Ansible Inventory, автоматически сгенерированный Vagrant:
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
.Например:
источник