首页 > 解决方案 > 在这种情况下如何循环数组?

问题描述

我的剧本中有以下变量:

frontends:
  - domain01.fr
  - domain02.fr
  - domain03.fr
  - domain04.fr

我需要能够通过 Ansible 剧本步骤在文件中写入以下内容:

tcp://domain01.fr:11211,tcp://domain02.fr:11211,tcp://domain03.fr:11211,tcp://domain04.fr:11211

我想出了以下解决方案,但我对此并不满意。

- name: Setting up Apache (2/2)
  lineinfile:
    path: /etc/opt/rh/rh-php56/php.ini
    regexp: '^session.save_path ='
    line: "session.save_path = 'tcp://{{ frontends | join(':11211,tcp://') }}'"

我不能硬写lineinfile方法中的域,因为它依赖很多,而且在某些情况下我只有 2 个域而不是 4 个域。

是否有可能有以下内容:

- name: Setting up Apache (2/2)
  lineinfile:
    path: /etc/opt/rh/rh-php56/php.ini
    regexp: '^session.save_path ='
    line: "session.save_path = '{% for frontend in frontends %} tcp://{% frontend %}:11211,{% endfor %}'"

先感谢您

标签: loopsansible

解决方案


是的。这是可能的。下面的

regexp: '^session.save_path ='
line: >-
  session.save_path ={% for frontend in frontends %}
  tcp://{{ frontend }}:11211{% if not loop.last %},{% endif %}{% endfor %}

session.save_path = tcp://domain01.fr:11211, tcp://domain02.fr:11211, tcp://domain03.fr:11211, tcp://domain04.fr:11211

推荐阅读