Terraform 역할 지원을 위한 Ansible 제공업체

Terraform 역할 지원을 위한 Ansible 제공업체

Terraform에서 실행하려는 역할이 포함된 Ansible 플레이북이 있습니다.

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.

Inventory/hosts 파일을 수동으로 생성하지 않고 Terraform에서 이를 재현하고 싶습니다. 나는 다음을 수행했습니다.

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 호스트 및 그룹을 어떻게 구성해야 하는지 명확하지 않습니다 . 어떤 제안이 있나요?

관련 정보