HTML Diff
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