【问题标题】:How to remove the comma at the end of the line in ansible-template?如何删除ansible-template中行尾的逗号?
【发布时间】:2020-11-25 22:04:37
【问题描述】:

你能告诉我如何删除行尾的逗号吗?

最终输出:

{name: "name1", My country = "region1a", My country = "region1b"},

{name: "name2", My country = "region2a", My country = "region2b"},

您只需删除第二行末尾的一个(突出显示的)逗号。 输出就是这样生成的

{% for country in AllСountry %}
{name: "{{ country }}",{% for count in lookup('vars', country) %} My country = "{{ count }}",{% if loop.last %} My country = "{{ count }}"{% endif %}{% endfor %}},
{% endfor %}

因此,我们需要这个输出

{name: "name1", My country = "region1a", My country = "region1b"},
{name: "name2", My country = "region2a", My country = "region2b"}

【问题讨论】:

  • 你有没有自己尝试过,或者对这个主题做过任何研究?见here
  • 是的,当然。无法应用替换,并循环。 last 适用于整个周期。也许我没有太多经验,这个问题的解决方案是显而易见的。

标签: jinja2 ansible-template


【解决方案1】:

您可以为此使用loop.last,因此如果您在最后一项上循环,请将逗号括在条件测试中。

你的模板最终会变成:

{% for country in AllСountry %}
{name: "{{ country }}",{% for count in lookup('vars', country) %} My country = "{{ count }}",{% if loop.last %} My country = "{{ count }}"{% endif %}{% endfor %}}{% if not loop.last %},{% endif %}
{% endfor %}

这就是说,as raised on your other question,我觉得你在为自己做复杂的事情,你到底想达到什么目的?您是否正在尝试构建 JSON? (在这种情况下,请注意My country = "region2a" 无效)。

如果您确实在尝试构建数据结构,那么您应该创建表示它们的列表和字典,然后使用简单的现有过滤器,例如 to_json, to_yaml 等。

否则,这一点仍然适用:如果您想创建一个逗号分隔的字符串列表,请在 Ansible 中创建一个字符串列表,然后只需 join 他们。

例如:

- debug:
    msg: "{{ some_list | join(', ') }}"
  vars:
    some_list:
      - foo
      - bar
      - baz

会给你

foo, bar, baz

【讨论】:

  • 非常感谢。它确实有效,但您需要删除 {% if loop.last %} My country = " {{ count }}"
  • 其实我了解如何创建配置文件。为了让我自己理解如何编写它,我对我不理解的部分提出一个问题,然后自己尝试。非常感谢您的帮助。您的回答很有帮助。
  • 是的,我认为一般来说(或者这就是我从你的问题中了解到的),你试图在模板和 Jinja 中做太多事情,当你实际上应该对你的数据结构进行处理时,然后让奇迹发生。
  • 现在我正试图弄清楚如何为此处列出的两种数据结构实现“{% if item in capital %}”link
  • 只需要实现这个link
猜你喜欢
  • 2021-01-25
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 2019-01-10
相关资源
最近更新 更多