0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: ansible, devops, инстанс, inventory, terraform, local-exec, dynamic inventory, remote-exec, ansible-playbook, local/remote-exec, плагины для terraform, anisble provision</p>
1
<p>Теги: ansible, devops, инстанс, inventory, terraform, local-exec, dynamic inventory, remote-exec, ansible-playbook, local/remote-exec, плагины для terraform, anisble provision</p>
2
<h2>Эта заметка - краткая выжимка оригинальной<a>статьи</a></h2>
2
<h2>Эта заметка - краткая выжимка оригинальной<a>статьи</a></h2>
3
<h3>Использование local-exec</h3>
3
<h3>Использование local-exec</h3>
4
<p>При таком подходе inventory задаётся в явном виде, используя значение ip-адреса созданного инстанса, например:</p>
4
<p>При таком подходе inventory задаётся в явном виде, используя значение ip-адреса созданного инстанса, например:</p>
5
provisioner "local-exec" { command = "ansible-playbook -u username -i '${self.public_ip},' --private-key ${var.ssh_key_private} provision.yml" }<p>Однако local-exec не будет ждать завершения процесса создания и может упасть с ошибкой. Для решения этой проблемы можно первым задавать remote-exec с минимальной полезной нагрузкой, который дождётся создания инстанса.</p>
5
provisioner "local-exec" { command = "ansible-playbook -u username -i '${self.public_ip},' --private-key ${var.ssh_key_private} provision.yml" }<p>Однако local-exec не будет ждать завершения процесса создания и может упасть с ошибкой. Для решения этой проблемы можно первым задавать remote-exec с минимальной полезной нагрузкой, который дождётся создания инстанса.</p>
6
<p>Данный способ работает в большинстве ситуаций, однако inventory всегда содержит только один хост, чего не всегда достаточно.</p>
6
<p>Данный способ работает в большинстве ситуаций, однако inventory всегда содержит только один хост, чего не всегда достаточно.</p>
7
<h3>Использование Dynamic inventory</h3>
7
<h3>Использование Dynamic inventory</h3>
8
<p>При таком подходе inventory файл для Ansible генерируется специальным ПО, и его содержимым можно управлять в той или иной степени. Прямой связи Terraform и Ansible в данном случае нет. Мы создаём инфраструктуру terraform'ом, а затем запускаем ansible-playbook с dynamic inventory. И конечно, надо не забывать запускать Ansible при изменении количества инстансов.</p>
8
<p>При таком подходе inventory файл для Ansible генерируется специальным ПО, и его содержимым можно управлять в той или иной степени. Прямой связи Terraform и Ansible в данном случае нет. Мы создаём инфраструктуру terraform'ом, а затем запускаем ansible-playbook с dynamic inventory. И конечно, надо не забывать запускать Ansible при изменении количества инстансов.</p>
9
<p>Автор оригинальной статьи не рассмотрел вариант совмещения dynamic inventory с первым способом. Я считаю, что возможно использовать local/remote-exec, указывая не ip-адрес конкретного инстанса, а весь dynamic invеntory. Конечно, в таком случае playbook будет вызываться не только на новом, но и на старых инстансах, что не всегда приемлемо. Однако если ваши плейбуки идемпотентны и не слишком сложны, это не должно быть проблемой.</p>
9
<p>Автор оригинальной статьи не рассмотрел вариант совмещения dynamic inventory с первым способом. Я считаю, что возможно использовать local/remote-exec, указывая не ip-адрес конкретного инстанса, а весь dynamic invеntory. Конечно, в таком случае playbook будет вызываться не только на новом, но и на старых инстансах, что не всегда приемлемо. Однако если ваши плейбуки идемпотентны и не слишком сложны, это не должно быть проблемой.</p>
10
<h3>Генерирование inventory из файла состояния Terraform</h3>
10
<h3>Генерирование inventory из файла состояния Terraform</h3>
11
<p>Автор оригинальной статьи указал два проекта: -<a>Первый</a>-<a>Второй</a>Оба генерируют inventory из файла состояния Terraform. Здесь так же надо следить за тем, что плейбуки вызваны для всех инстансов при изменении их количества.</p>
11
<p>Автор оригинальной статьи указал два проекта: -<a>Первый</a>-<a>Второй</a>Оба генерируют inventory из файла состояния Terraform. Здесь так же надо следить за тем, что плейбуки вызваны для всех инстансов при изменении их количества.</p>
12
<h3>Плагины для Terraform</h3>
12
<h3>Плагины для Terraform</h3>
13
<p>Автор оригинальной статьи указал два проекта: -<a>Первый</a>-<a>Второй</a>Первый уже не поддерживается, а второй автору оригинальной статьи запустить не удалось. Однако он предоставляет достаточно органичный и гибкий способ Anisble provision. Надеюсь, со временем будет включён в официальную поставку Terraform.</p>
13
<p>Автор оригинальной статьи указал два проекта: -<a>Первый</a>-<a>Второй</a>Первый уже не поддерживается, а второй автору оригинальной статьи запустить не удалось. Однако он предоставляет достаточно органичный и гибкий способ Anisble provision. Надеюсь, со временем будет включён в официальную поставку Terraform.</p>
14
<h3>Дополнительно</h3>
14
<h3>Дополнительно</h3>
15
<p>Можно прочитать достаточно<a>горячую дискуссию</a>в официальном репо на тему "А нужно ли это вообще?".</p>
15
<p>Можно прочитать достаточно<a>горячую дискуссию</a>в официальном репо на тему "А нужно ли это вообще?".</p>
16
16