Хозяева бастиона
Чтобы использовать прокси / хост бастиона / хост прыжка с Ansible, вам необходимо указать ansible_ssh_common_args
в ansible.cfg
.
- Должна быть переменная среды
ANSIBLE_SSH_COMMON_ARGS
, но она отсутствует из-за этой проблемы Ansible - еще не исправлено в Ansible 2.9.3.
Вы можете установить это в статическом инвентаре на all
уровне группы, чтобы поэкспериментировать с этим (проще попробовать это сначала без динамического инвентаря) - см. в этом блоге для получения дополнительных сведений.
[all:vars]
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p my-bastion.example.com"'
После того, как вы это заработаете, вы можете использовать динамический инвентарь - создайте файл group_vars/all.yml
(сначала проверьте статический инвентарь), преобразовав указанный выше инвентарь в формате INI в YAML (измените =
на :
).
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p my-bastion.example.com"'
Использование частных IP-адресов с динамической инвентаризацией
Чтобы убедиться, что ansible_host
в выводе инвентаризации использует частный IP-адрес, вы должны использовать export AZURE_USE_PRIVATE_IP=true
(с классическим azure_rm.py
скриптом инвентаризации, еще не пробовал с инвентаризацией плагинов).
- без этого
ansible_host
может иметь значение null или быть установленным как общедоступный IP / доменное имя.
- вам это может не понадобиться, если вы используете доменные имена, которые разрешаются в частные IP-адреса.
Тестирование динамического инвентаря
Обязательно проверьте, что динамический инвентарь генерирует правильные данные JSON, прежде чем начинать использовать его для playbooks.
Чтобы проверить соответствие определенных значений инвентаризации правильным хостам, попробуйте:
$ AZURE_USE_PRIVATE_IP=true ansible -i azure_rm.py mygroup -m debug -a var=ansible_host
test01 | SUCCESS => {
"ansible_host": "10.0.0.1"
}
Вы также можете проверить, что Ansible SSH работает следующим образом с -vvvvv
при отладке:
$ AZURE_USE_PRIVATE_IP=trueansible -i azure_rm.py mygroup -m debug -a var=ansible_host
test01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Классический и подключаемый инвентарь
Здесь я использовал «классический» azure_rm.py
динамический инвентарь - тот же подход работает с новым динамическим инвентарем на основе плагинов (начиная с Ansible 2.4, включает кеширование инвентаря).
Чтобы просмотреть выходные данные JSON динамической инвентаризации в любом режиме:
- Классический:
AZURE_USE_PRIVATE_IP=true python azure_rm.py | jq .
- На основе плагина:
ansible-inventory -i azure.yml --graph
Использование jq необязательно, оно просто форматирует вывод для удобства чтения.
person
RichVel
schedule
21.11.2019