【发布时间】:2021-01-27 17:07:23
【问题描述】:
尝试循环使用列表来创建附加 yaml 文件;遇到一些语法错误? 知道如何解决这个问题吗?
- name: "append yml"
shell: echo "instances:\n\n - name: all\n - command: all\n - arguments:\n - cluster_name: dbtype{{ item }} all\n - host: {{ipv4}}\n" >> /path/dbtype-config.yml
shell: echo " - auth_source: admin\n - ssl: false\n - ssl_insecure_skip_verify: false\n - labels:\n - env: env\n" >> /tmp/newrelic-infra/integrations.d/dbtype-config.yml
with_items: "{{ instances.stdout_lines }}"
错误!加载 YAML 时出现语法错误。
错误似乎出现在“/ansible/projects/newrelic/dbtype_nr.yml”中:第 27 行,第 47 列,但可能 根据确切的语法问题,位于文件的其他位置。
违规行似乎是:
- name: "update yml"
shell: echo "instances:\n\n - name: all\n - command: all\n - arguments:\n - cluster_name: dbtype{{ item }} all\n - host: {{ipv4}}\n" >> /path/dbtype-config.yml
^ here
我们可能错了,但这个看起来可能是一个问题 缺少引号。总是引用模板表达式括号 开始一个值。例如:
with_items:
- {{ foo }}
应该写成:
with_items:
- "{{ foo }}"
【问题讨论】:
-
replace : with {{':'}} 会起作用并发现这个 -serverfault.com/questions/807025/quoting-colon-in-ansible
-
您需要在
shell定义中转义双引号或用单引号将整个表达式括起来(不详尽的可能性列表,请查看 yaml 教程,如 learnxinyminutes.com/docs/yaml 以了解定义的所有可能性标量值)。接下来,您不能在对象中定义相同的 yaml 参数。您可能不会收到错误,但只会考虑您的第二个shell定义。