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