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