Как использовать замену модулей Ansible или встроить вместо него команду оболочки с SED

У меня есть файл со строкой:

MYAPP.db.username.DEV=MYUSERNAME

Где:

MYAPP mean name of applications
DEV means environment
MYUSERNAME means name of user for connection to db

Мне нужно заменить эти переменные в соответствии с переменными, которые у меня есть в каком-то скрипте . Я использую это:

- name: Replace line
  shell: sed -i "/{{ name_of_app }}.db.username.{{ name_of_environment }}/c\\{{ name_of_app }}.db.username.{{ name_of_environment }}={{ name_of_user_to_db }}" /path/to/my/apps/{{ name_of_app }}/config/{{ name_of_app }}.config

Он работает нормально, но я вижу предупреждения в выводе ansible

 [WARNING]: Consider using the replace, lineinfile or template module rather
than running sed.  If you need to use command because replace, lineinfile or
template is insufficient you can add warn=False to this command task or set
command_warnings=False in ansible.cfg to get rid of this message.
changed:

Я пробовал это

- name: Replace line via replace method
  replace: 
    dest: "/path/to/my/apps/{{ name_of_app }}/config/{{ name_of_app }}.config"
    regexp: "{{ name_of_app }}.db.username.{{ name_of_environment }}"
    replace: "{{ name_of_app }}.db.username.{{ name_of_environment }}={{ name_of_user_to_db }}"

и этот

- name: Replace line via lineinfile method
  lineinfile: 
    dest: "/path/to/my/apps/{{ name_of_app }}/config/{{ name_of_app }}.config"
    regexp: "{{ name_of_app }}.db.username.{{ name_of_environment }}"
    line: "{{ name_of_app }}.db.username.{{ name_of_environment }}={{ name_of_user_to_db }}"
    backrefs: yes

каждый раз, у меня результат не удалось:

FAILED! => {"changed": false, "msg": "Unsupported parameters for (replace) module: when Supported parameters include: after, attributes, backup, before, content, delimiter, directory_mode, encoding, follow, force, group, mode, owner, path, regexp, remote_src, replace, selevel, serole, setype, seuser, src, unsafe_writes, validate"}

Вы можете помочь мне, где у меня ошибка в моем playbook?

0
задан 12 October 2019 в 10:44
1 ответ

заменяет и lineinfile используйте параметр path , чтобы отметить

файл, который нужно изменить. Модуль lineinfile используется для

обеспечения [s] определенной строки в файле или [для] замены существующей строки с использованием регулярного выражения с обратной ссылкой.

Используйте

замените модуль, если вы хотите изменить несколько,похожие строки

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

Просто замените dest с путем , и оба предоставленных примера должны работать должным образом.

2
ответ дан 4 December 2019 в 13:18

Теги

Похожие вопросы