Dans Ansible, comment ajouter une ligne à la fin d'un fichier?

Je m'attendrais à ce que ce soit assez simple. J'utilise le module lineinfile comme ceci:

- 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

Le problème que j'ai est qu'il remplace la dernière ligne du fichier (qui est fi) par ma nouvelle ligne plutôt que d'ajouter la ligne. Cela produit une erreur de syntaxe.

Ai-je les paramètres corrects? J'ai essayé de définir regexp à la fois '^' et '' (vide). Y a-t-il un autre moyen de s'y prendre?

J'utilise Ansible 1.3.3.

30
demandé sur klenwell 2013-10-30 20:44:28

2 réponses

Le groupe de discussion Ansible m'a aidé à résoudre ce problème. Le problème est le paramètre regexp.

Puisque je ne veux que la ligne ajoutée au fichier une fois, j'ai besoin de l'expression rationnelle pour correspondre à la ligne aussi étroitement que possible. C'est compliqué dans mon cas par le fait que ma ligne inclut des variables. Mais, en supposant que la ligne a commencé [[ -s $HOME/.pythonbrew, j'ai trouvé ce qui suit suffisant:

- 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
31
répondu klenwell 2018-03-27 16:23:51

Apparemment ansible a mûri et maintenant (version > 2.4.0) selon la documentation , les valeurs par défaut lorsque seule la ligne est spécifiée ajouteront une ligne donnée au fichier de destination:

    - name: Update bashrc for PythonBrew for foo user
      lineinfile:
        dest=/home/foo/.bashrc
        line="[[ -s ${pythonbrew.bashrc_path} ]] && source {pythonbrew.bashrc_path}"
        owner=foo
9
répondu shlomoa 2017-11-27 19:02:22