用於 Terraform 角色支援的 Ansible 提供程序

用於 Terraform 角色支援的 Ansible 提供程序

我有一個 Ansible 劇本,其中包含我想從 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 中重現此內容,而無需手動建立清單/主機檔案。我做了以下事情:

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 主機和群組。您有什麼建議嗎?

相關內容