Как я могу выполнить цикл вокруг массива в этой ситуации?

#loops #ansible

#циклы #ansible

Вопрос:

У меня есть следующие переменные в моем сборнике воспроизведения:

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

Мне нужно иметь возможность записать следующее в файл с помощью шага Ansible playbook:

 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 %}'"

  

Заранее благодарю вас

Ответ №1:

ДА. Это возможно. Строка ниже

 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