Поставщик Ansible для поддержки ролей Terraform

Поставщик Ansible для поддержки ролей Terraform

У меня есть Ansible playbook с ролями, которые я хочу выполнить из Terraform.

site.yaml

---

- hosts: cluster
  gather_facts: yes
  become: yes
  roles:
    - role: prereq

roles/prereq/tasks/main.ymlсодержит задачи.

С помощью Ansible я сначала создаю инвентарь:

inventory/hosts

[bastion]
192.168.2.1

[node]
192.168.2.2
192.168.2.3

[cluster:children]
node

[cluster:vars]
ansible_ssh_common_args='-o ProxyCommand="ssh -W %h:%p -q [email protected]"'

Затем я запускаю ansible-playbook -i inventory/hosts site.yml.

Я хочу воспроизвести это в Terraform, не создавая вручную файл inventory/hosts. Я сделал следующее:

terraform {
  required_providers {
    ansible = {
      source  = "ansible/ansible"
      version = "~> 1.1.0"
    }
}

resource "ansible_group" "bastion" {
  name = "bastion"
}

resource "ansible_group" "nodes" {
  name = "node"
}

resource "ansible_group" "cluster" {
  name = "cluster"

  children = [
    ansible_group.nodes.name
  ]

  variables = {
    ansible_ssh_common_args = "-o ProxyCommand='...'"
  }
}

# NOTE bastion and then nodes come from a remote state.

resource "ansible_host" "bastion" {
  name   = bastion.ip
  groups = [ansible_group.bastion.name]
}

resource "ansible_host" "nodes" {
  for_each = { for key, val in nodes : key => val }

  name   = each.value.ip
  groups = [ansible_group.nodes.name]
}

resource "ansible_playbook" "test" {
  name       = "all"
  playbook   = "site.yaml"
  replayable = true

  ansible_playbook_binary = "ansible-playbook"

  ignore_playbook_failure = true
}

И он терпит неудачу со следующим сообщением:

ansible_playbook = <<EOT
[WARNING]: Found both group and host with same name: cluster
[WARNING]: Found both group and host with same name: all

PLAY [cluster] *******************************************************************

TASK [Gathering Facts] *********************************************************
fatal: [cluster]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname cluster: Temporary failure in name resolution", "unreachable": true}

PLAY RECAP *********************************************************************
cluster                : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0   


EOT
ansible_playbook_errors = "exit status 4"

Мне не ясно, что мне вставить в nameпараметр в ansible_playbook.testи как мне настроить хосты и группы ansible. Есть ли у вас какие-либо предложения?

Связанный контент