Модуль Ansible blockinfile idempotent?



Я хочу вставить несколько строк в файл, используя модуль blockinfile.
Задача выглядит примерно так:



name: add some lines
become: true
blockinfile:
dest: /etc/sysctl.conf
block: |
mykey1={{ kernvars['my_value1'] }}
mykey2={{ kernvars['my_value2'] }}
mykey3={{ kernvars['my_value3'] }}


Есть ли способ для модуля (или соответствующего шаблона) проверить и вставить определенные строки, только если они еще не существуют?



Используя ansible 2.0.0.2 на Ubuntu 16.04.01

645   1  

1 ответ:

Да. Модуль blockinfile по умолчанию является идемпотентным.

В дополнение к содержимому, которое вы указываете, он добавляет две строки: в начале блока и в конце блока. При последующих запусках он проверяет содержимое между этими двумя маркерами, и если содержимое не изменилось, он возвращает состояние "ОК" и не вставляет его снова.

Эти строки должны быть вставлены в файл конфигурации в виде комментариев, поэтому в зависимости от используемого формата файла конфигурации вы можете настройте символ, используемый для обозначения комментария аргументом marker (по умолчанию это #).

Если вы используете несколько задач blockinfile в одном файле назначения, вы должны дополнительно добавить уникальную строку к каждой задаче (также в аргументе marker), чтобы Ansible мог различать их.

Подробнее о blockinfile в Анзибль документации.

Comments

    Ничего не найдено.