【问题标题】:yaml syntactical error with_items loop with a list带有列表的带有_items循环的yaml语法错误
【发布时间】: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 定义。

标签: ansible yaml


【解决方案1】:

看起来类似于@Unknown的建议,在回声的 : 周围加上单引号。

另外,你确定两个 shell 命令可以在单个任务中工作吗?我会做两个任务,比如:

- name: "append 1st yml"
  shell: echo 'first part'
  with_items: "{{ my_list }}"

- name: "append 2nd yml"
  shell: echo 'second part'
  with_items: "{{ my_list }}"

【讨论】:

  • 这正是我想提出的第二个问题。有没有办法在 ubuntu xenial 上遍历 ansible 2.0.0.1 上的列表?
猜你喜欢
  • 2021-06-15
  • 2017-09-20
  • 2013-12-21
  • 2016-05-26
  • 2016-05-29
  • 2014-09-12
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多