-1

朋友们,

我在这里学习 Ansible,并尝试将我所学的知识应用到我的一个简单项目中。我在尝试格式化一些字符串时遇到了困难。我收到以下错误:

fatal: [localhost]: FAILED! => {"changed": false, "msg": 
"AnsibleError: template error while templating string: 
**unexpected ']', expected ')'**. 

String: 

cluster_name = \"{{ terraform['%s' | format(env)].cluster_name }}\"
\ncredentials = \"{{ terraform['%s' | format(env)].credentials }}\"
\ninitial_node_count = \"{{ terraform['%s' | format(env]].initial_node_count }}
\format(env)].project }}\""}
    ...

这就是我的 jinja2 文件的样子:

cluster_name = "{{ terraform['%s' | format(env)].cluster_name }}"
credentials = "{{ terraform['%s' | format(env)].credentials }}"
initial_node_count = "{{ terraform['%s' | format(env]].initial_node_count }}"
...

我想terraform['testing'].credentials在运行ansible-playbook site.yaml -e env=testing并将它们写入文件时生成这样的字符串。我想不出另一种方法来完成这项工作。任何想法?

4

2 回答 2

1

你想使用这个语法:

cluster_name = "{{ terraform[env].cluster_name }}"

使用terraform.env, ansible 将获取 terraform env 的 env 键,但是使用terraform[env] , ansible 会将 env 解析为 'testing' 并获取 terraform var 的 'testing' 键。

于 2020-12-25T00:00:00.207 回答
1

问:生成这样的字符串terraform['testing'].credentials

shell> ansible-playbook site.yaml -e env=testing

A:下面的剧本

shell> cat site.yml
- hosts: localhost
  tasks:
    - set_fact:
        cluster_name: "{{ begin }}{{ env }}{{ end }}"
      vars:
        begin: "terraform['"
        end: "'].credentials"
    - debug:
        var: cluster_name

  cluster_name: terraform['testing'].credentials
于 2020-12-25T00:26:13.800 回答