Запускать специальные команды 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 с помощью одной задачи Ansible?


person joemaller    schedule 11.10.2013    source источник
comment
Для любопытных, почему кто-то может захотеть это сделать... на данный момент нет управляющей машины Ansible для Windows. Так уж получилось, что если вы хотите изучить Ansible, создание рабочей станции Vagrant (и других машин, управление которыми вы хотели бы протестировать) кажется безопасным способом обучения.   -  person Tor    schedule 20.04.2016


Ответы (6)


Мне не хватало личного ssh-ключа Vagrant. Нашел это здесь: stackoverflow.com/a/18943360/503463

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

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

person joemaller    schedule 11.10.2013
comment
Кроме того, вы можете добавить пользователя и закрытый ключ непосредственно в файл инвентаризации, используя параметры ansible_ssh_user и ansible_ssh_private_key_file, чтобы вам не приходилось вводить их постоянно. См. список поведенческих параметров инвентаризации. - person geerlingguy; 02.02.2014

Хотя эта проблема старая, но она была объяснена в документации ansible.

вот фрагмент

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

Надеюсь, это поможет другим. Спасибо

person Arbab Nazar    schedule 17.01.2015

Решение

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

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

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

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
person Dan Lipsitt    schedule 10.03.2016

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

person awhie29urh2    schedule 11.02.2014

Вместо того, чтобы каждый раз передавать inventory_file, private_key и ssh_user, вы можете поместить их в доступный файл конфигурации. См. мой более подробный ответ здесь: https://stackoverflow.com/a/25316963/502457

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

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

person mpoisot    schedule 14.08.2014

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

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

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

person Robert    schedule 15.10.2014