Модуль 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
1 ответ:
Да. Модуль
blockinfileпо умолчанию является идемпотентным.В дополнение к содержимому, которое вы указываете, он добавляет две строки: в начале блока и в конце блока. При последующих запусках он проверяет содержимое между этими двумя маркерами, и если содержимое не изменилось, он возвращает состояние "ОК" и не вставляет его снова.
Эти строки должны быть вставлены в файл конфигурации в виде комментариев, поэтому в зависимости от используемого формата файла конфигурации вы можете настройте символ, используемый для обозначения комментария аргументом
marker(по умолчанию это#).Если вы используете несколько задач
blockinfileв одном файле назначения, вы должны дополнительно добавить уникальную строку к каждой задаче (также в аргументеmarker), чтобы Ansible мог различать их.Подробнее о
blockinfileв Анзибль документации.
Comments