Ansible несколько регулярных выражений, когда состояние - PullRequest
1 голос
/ 03 апреля 2020

Я пытаюсь заменить имя в файле на основе собранных ansible артефактов. Есть простой способ решить эту задачу с помощью ONE lineinfile

Примерно так:

lineinfile:
    path: '/somefile.conf'
    regexp: '{{ item.regexp }}'
    line: '{{ item.line }}'
  with_items:
    - { regexp: '^DB_TYPE=', line: "DB_TYPE=mysql" } when: mysql.stat.exists
    - { regexp: '^DB_TYPE=', line: "DB_TYPE=oracle" } when: oracle.stat.exists

Ответы [ 2 ]

2 голосов
/ 03 апреля 2020

Это можно сделать с помощью if ... else ... if

  lineinfile:
    path: '/somefile.conf'
    regexp: '^DB_TYPE='
    line: "{{ 'DB_TYPE=mysql' if mysql.stat.exists else 'DB_TYPE=oracle' if oracle.stat.exists }}"
0 голосов
/ 03 апреля 2020

Я полагаю, что when условия связаны с задачей, и поэтому вы не можете иметь разные условия для разных циклов в одной и той же задаче (рад, что вы исправлены здесь).

Это оставляет вам пару вариантов:

  1. Разделите это на несколько lineinfile задач, которые, как вам кажется, следует избегать.
  2. Используйте модуль set_fact. Не обязательно лучше, но круто знать.

Пример второго варианта:

- name: set database type for mysql deployment
  set_fact:
    _db_type: mysql
  when: mysql.stat.exists

- name: set database type for oracle deployment
  set_fact:
    _db_type: oracle
  when: oracle.stat.exists

- name: something something
  lineinfile:
    path: '/somefile.conf'
    regexp: '^DB_TYPE='
    line: "DB_TYPE={{ _db_type }}"

Я считаю это полезным, если вам нужно несколько задач сослаться на mysql или oracle (в качестве примера).

...