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