П
паяльник
@cryptoanal85 подп.
468просмотров
4 августа 2025 г.
Score: 515
Оч долго строил мостики между terraform и ansible путем отрисовки шаблона инвентаря из terraform. Наконец-то решил опробовать cloud.terraform - коллекция плагинов, которая умеет парсить tfstate файлы и собирать инвентарь динамически. Работаю я с Yandex.Cloud и из коробки, очевидно, оно не поддерживается. Документация... не полная. Компенсируется тем, что исходники понятные. Примерный сетап: ansible.cfg: [defaults] inventory = ./inventory/terraform_state.yml private_key_file = ../internal/ctf_master_key host_key_checking = False [ssh_connection] ssh_args = -F ./ssh_config inventory/terraform_state.yml: plugin: cloud.terraform.terraform_state backend_type: local backend_config: path: /home/ne_bknn/absolute/path/to/terraform/terraform.tfstate search_child_modules: true strict: true hostnames: - name compose: ansible_host: >- network_interface[0].nat_ip_address if (network_interface is defined and network_interface|length > 0 and network_interface[0].nat_ip_address) else network_interface[0].ip_address provider_mapping: - provider_name: "registry.terraform.io/yandex-cloud/yandex" types: - yandex_compute_instance keyed_groups: - key: labels["type"] Используем cloud.terraform.terraform_state - там еще есть cloud.terraform.terraform_provider, но для него нужно в терраформ-сущности впихивать ansible_host/ansible_group. Путь до tfstate абсолютный, strict режим лучше не выключать (будете ловить баги на протяжении получаса и не понимать, почему). compose - композитные переменные из переменных, которые terraform сохранил в tfstate, описываемые как jinja2-экспрешны. keyed_groups позволяют делать ансибловые группы. Название файла должно матчится .*terraform_state.ya?ml, иначе плагин его проскипает. labels["type"] - лейблы ресурса yandex_compute_instance. После часика бодания свою задачу выполняет. Минус вижу один - ну пипяо долго работает: ❯ time ansible-inventory --graph @all: |--@ungrouped: |--@_group1: | |--jump | |--vm1_internal |--@_group2: | |--vm2_internal | |--vm3_internal ansible-inventory --graph 1.51s user 0.52s system 17% cpu 11.485 total К тому же результаты не кешируются. Пока не знаю, лучше ли, чем рендерить YAML-инвентарь.
468
просмотров
2235
символов
Нет
эмодзи
Нет
медиа

Другие посты @cryptoanal

Все посты канала →
Оч долго строил мостики между terraform и ansible путем отри — @cryptoanal | PostSniper