Я использую 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
Я не хочу повторять все параметры для каждого нового экземпляра. Как их настроить в одном месте? Есть ли файл с этими параметрами?
Вы можете добавить в свой инвентарный файл следующий раздел:
[all:vars]
ansible_connection=ssh
ansible_user=vagrant
ansible_ssh_pass=vagrant
Примечание: До Ansible 2.0 ansible_user
был ansible_ssh_user
.
Вы можете установить переменные, которые применяются ко всем хостам, используя макет playbook указано в Ansible Лучшие практики документ и создание group_vars/all
файл, где вы определить их.
---
# file: group_vars/all
ansible_connection: ssh
ansible_ssh_user: vagrant
ansible_ssh_pass: vagrant
[править] Я не совсем понимаю, что вы пытаетесь сделать. Вам не нужно указывать пользователя или пароль Ansible в инвентаре. Если вы используете Vagrant, вы определенно этого не делаете, и если вы вызываете Ansible из командной строки, вы можете указать пользователя с помощью --user=vagrant
и попросить пароль с --ask-pass
.
Я думаю, что лучше использовать установку ssh-ключа на всех серверах по запросу. Вы должны запускать ssh-copy-id только для каждого узла и устанавливать свой ssh-ключ везде, чтобы ansible мог войти в систему, используя ваш ssh-ключ. Будет безопаснее не сохранять пароли в playbook / инвентарь.
Для этого вам следует сгенерируйте свою пару ключей ssh и после этого запустите ssh-copy-id для всех серверов.
Добавьте ниже в список хостов.
Для 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 # or ansible_ssh_pass=vagrant
Отказ от ответственности: я тестировал это только на OSX. Судя по различным документам, я ожидаю, что он будет работать на других платформах.
"каталог проекта" относится к базовому каталогу для проекта Vagrant - каталог, содержащий Vagrantfile
.
Файл Ansible Inventory, автоматически созданный Vagrant:
Бродяга создает файл инвентаризации с переменными соединения Ansible по умолчанию. Ищите это в <project directory>/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
.
Этот файл будет регенерирован Vagrant по мере необходимости, поэтому изменения, внесенные вручную, будут перезаписаны. Однако, согласно документации Vagrant, вы можете указать несколько машин, групповых переменных и т. Д. В Vagrantfile
и они будут добавлены в этот инвентарный файл.
Настройте Ansible по умолчанию для этого файла инвентаризации:
Чтобы сделать этот файл используемым по умолчанию ansible
когда вы находитесь в каталоге проекта (на хосте), добавьте ansible.cfg
файл в каталоге вашего проекта с этим содержимым, при необходимости изменив путь:
[defaults]
inventory = ./path/to/inventory
Чтобы убедиться, что этот файл инвентаризации используется, найдите его как значение по умолчанию, о котором сообщает 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 slave -a 'hostname'
Вы должны установить правильные переменные. Вам нужно использовать:
# yml syntax
ansible_user: myusername
ansible_password: mypassword
# inventory syntax
host ansible_user=myusername ansible_password=mypassword
Читать нужно очень внимательно, потому что ansible_ssh_password
и ansible_ssh_user
не работают в версии: ansible 2.9.6
Ниже приведены инструкции по установке имени пользователя / пароля Ansible по умолчанию для SSH-соединения.
Конфигурация ansible.cfs будет
$ cat ansible.cfg [defaults] inventory = ./inventory [privilege_escalation] become = True become_method = sudo become_user = root
Файл инвентаризации будет
$ cat inventory [App1] 10.163.128.21 [App1:vars] ansible_password=************* ansible_ssh_user=Appuser1 host_key_checking=False
доступный результат успешного выполнения
$ ansible App1 -m ping 10.163.128.21 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }