В Ansible, как добавить строку в конец файла?
Я бы ожидал, что это будет довольно просто. Я использую модуль lineinfile
следующим образом:
- name: Update bashrc for PythonBrew for foo user
lineinfile:
dest=/home/foo/.bashrc
backup=yes
line="[[ -s ${pythonbrew.bashrc_path} ]] && source ${pythonbrew.bashrc_path}"
owner=foo
regexp='^'
state=present
insertafter=EOF
create=True
Проблема, с которой я сталкиваюсь, заключается в том, что она заменяет последнюю строку в файле (которая является fi
) моей новой строкой, а не добавляет строку. Это приводит к синтаксической ошибке.
Есть ли у меня правильные параметры? Я попытался установить regexp как на '^'
, так и на ''
(пустой). Есть ли еще один способ сделать это?
Я использую Ansible 1.3.3.
Ответы
Ответ 1
Группа обсуждения Ansible помогла мне разобраться с этим. Проблема заключается в параметре regexp
.
Так как я хочу, чтобы строка была добавлена к файлу один раз, мне нужно, чтобы regexp соответствовал строке как можно ближе. В моем случае это сложно, потому что моя строка содержит переменные. Но, предположив, что линия началась [[ -s $HOME/.pythonbrew
, я нашел достаточным следующее:
- name: Update bashrc for PythonBrew for foo user
lineinfile:
dest=/home/foo/.bashrc
line="[[ -s ${pythonbrew.bashrc_path} ]] && source ${pythonbrew.bashrc_path}"
regexp="^\[\[ -s \\$HOME/\.pythonbrew"
owner=foo
state=present
insertafter=EOF
create=True
Ответ 2
По-видимому, ansible созрел и теперь (версия > 2.4.0) в соответствии с documentation. По умолчанию, когда указана только строка, будет добавьте заданную строку в файл назначения:
- name: Update bashrc for PythonBrew for foo user
lineinfile:
dest=/home/foo/.bashrc
line="[[ -s ${pythonbrew.bashrc_path} ]] && source {pythonbrew.bashrc_path}"
owner=foo