I am using terraform to create resources then using templatefile approach to create ansible inventory in yaml language. I am creating multiple Virtual Machines in terraform and configure them using ansible in single pipeline.
Issue I am having is yaml file uses - for lists which is giving error in ansible playbook
Outputs.tf
resource "local_file" "AnsibleInventory" {
content = templatefile("inventory.tmpl",
{
ansible_port = "5986"
ansible_connection = "winrm"
ansible_winrm_server_cert_validation = "ignore"
ansible_winrm_transport = "ntlm"
vm-ip = data.azurerm_public_ip.main.*.ip_address,
username = "testadmin",
ansible_password = "abc"
}
)
filename = "inventory.json"
}
inventory.tmpl
${jsonencode({
"all": {
"hosts": {
"server": [
for ip in vm-ip : {
"ansible_host": "${ip}",
"ansible_port": 5986,
"ansible_user": "testadmin",
"ansible_winrm_transport": "ntlm",
"ansible_connection": "winrm",
"ansible_winrm_server_cert_validation": "ignore",
"ansible_password": "abc"
}
]
}
}
})}
inventory.json
{"all":{"hosts":{"server":{"ansible_connection":"winrm","ansible_host":"343434","ansible_password":"abc","ansible_port":5986,"ansible_user":"testadmin","ansible_winrm_server_cert_validation":"ignore","ansible_winrm_transport":"ntlm"}}}}
inventory.yaml
all:
hosts:
server:
- ansible_connection: winrm
ansible_host: 40.88.14.205
ansible_password: abc
ansible_port: 5986
ansible_user: testadmin
ansible_winrm_server_cert_validation: ignore
ansible_winrm_transport: ntlm
Is my approach right then how to remove "-" from code or am I doing something wrong.
Edited:
I am converting json file to yaml file using bash in pipeline.
python -c 'import sys, yaml, json; yaml.safe_dump(json.load(sys.stdin), sys.stdout, default_flow_style=False)' < inventory.json > inventory.yaml