Подтвердить что ты не робот

В 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.

4b9b3361

Ответ 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