Выполнять команды ad hoc Ansible в Vagrant?

При создании проекта Vagrant было бы полезно запускать специальные задачи Ansible вместо добавления тестовых команд в playbook. Я пробовал несколько методов таргетинга на виртуальную машину, но продолжаю получать эту ошибку:

default | FAILED => SSH encountered an unknown error during the connection. We 
recommend you re-run the command using -vvvv, which will enable SSH debugging
output to help diagnose the issue

Я использую Vagrant сгенерированный файл инвентаризации Ansible, и в поле есть рабочее имя хоста. Как настроить таргетинг на мою Vagrant VM с помощью одной задачи Ansible?

Ответы

Ответ 1

Мне не хватало Vagrant private ssh key. Найдено, что здесь: fooobar.com/questions/379295/...

Есть несколько способов сделать это, но вот что я использую:

ansible all -i vagrant_ansible_inventory_default -u vagrant --private-key ~/.vagrant.d/insecure_private_key -m ping

Все до -m по существу является шаблоном. Я использую стандартную коробку с именем пользователя по умолчанию "бродяга". Флаг -i vagrant_ansible_inventory_default сообщает Ansible использовать файл инвентаризации, созданный Vagrant; он содержит один хост, поэтому таргетинг all безопасен (также работает "по умолчанию" ). Наконец, мы передаем секретный ключ Vagrant для аутентификации ssh-соединения: --private-key ~/.vagrant.d/insecure_private_key

Ответ 2

Хотя эта проблема устарела, но она объясняет документацию, имеющую отношение к делу

вот фрагмент

ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --private-key=~/.vagrant.d/insecure_private_key -u vagrant playbook.yml

Надеюсь, это поможет другим. Благодаря

Ответ 3

В вашей машине ~/.ssh/known_hosts удалите записи, указывающие на 127.0.0.1. Затем попробуйте снова установить бродячий экземпляр.

Ответ 4

Вместо того, чтобы каждый раз передавать файлы inventory_file, private_key и ssh_user, их можно поместить в незашифрованный файл конфигурации. См. Мой более подробный ответ здесь: fooobar.com/questions/379297/...

@geerlingguy правильно указывает, что вы можете поместить эту информацию в файл инвентаря. Однако вам все равно нужно либо указать путь инвентаризации, либо добавить его в свой файл ansible.cfg.

Кроме того, если вы используете Vagrant для предоставления EC2-боксов (через плагин), тогда файл инвентаризации автоматически генерируется. Вы можете отредактировать его, но он будет взорван в следующий раз, когда вы предоставите несколько новых ящиков EC2.

Ответ 5

Решение

Если вы не хотите использовать дополнительные флаги все время, создайте ansible.cfg в том же каталоге, что и ваш Vagrantfile со следующим содержимым:

[defaults]
inventory = .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory

Затем вы можете просто запустить команду ad-hoc:

ansible all -m setup

Подробнее

При первом использовании средства обеспечения Ansible Vagrant выдает файл инвентаризации со всеми необходимыми параметрами, включая имя пользователя и информацию о ssh. Вы можете указать его с помощью флага -i:

ansible all -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory \
        -m setup

Вы также можете использовать переменную среды ANSIBLE_INVENTORY:

export ANSIBLE_INVENTORY=.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory

Ответ 6

Возможно, если вы запустили свои поля перед этой ошибкой, вы должны выполнить это:

ssh-keygen -f "/home/your_user/.ssh/known_hosts" -R host

Также вы должны запустить:

ssh-keygen -f "/home/your_user/.ssh/known_hosts" -R 127.0.0.1

И попробуйте еще раз.