Comment puis-je utiliser les regex avec Ansible?

Je vais avoir du mal à obtenir une regex modèle pour correspondre à Ansible 2. Quelqu'un pourrait-il m'aider à comprendre ce que je fais de mal? Merci.

--- # Disable auto update for Ubuntu
- hosts: nonedgeLinux
  become: yes
  tasks:
    - name: disable auto updates
      replace:
        dest: /etc/apt/apt.conf.d/50unattended-upgrades
        regexp: '(?:[ \t]*\"${distro_id}:${distro_codename}-security\";)'
        replace: '// "${distro_id}:${distro_codename}-security\";'

J'ai utilisé https://regex101.com/ pour valider la regex contre un copier/coller du contenu du fichier en cours de recherche. Ce test des rapports de l'expression régulière pattern est correct. Chaque fois qu'il est exécuté sur un Ubuntu 16.04.2 boîte j'obtiens les résultats suivants:

[email protected]:/data/scripts/ansible# ansible-playbook disableAutoUpdate.yml -vvvv
Using /data/scripts/ansible/ansible.cfg as config file
Loaded callback default of type stdout, v2.0
1 plays in disableAutoUpdate.yml
PLAY ****************************************************************************
TASK [setup] *******************************************************************
ESTABLISH LOCAL CONNECTION FOR USER: root
localhost EXEC ( umask 22 && mkdir -p "$( echo $HOME/.ansible/tmp/ansible-tmp-1492480514.73-9504514182168 )" && echo "$( echo $HOME/.ansible/tmp/ansible-tmp-1492480514.73-9504514182168 )" )
localhost PUT /tmp/tmpkYPc6g TO /root/.ansible/tmp/ansible-tmp-1492480514.73-9504514182168/setup
localhost EXEC LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1492480514.73-9504514182168/setup; rm -rf "/root/.ansible/tmp/ansible-tmp-1492480514.73-9504514182168/" > /dev/null 2>&1
ok: [localhost]
TASK [disable auto updates] ****************************************************
task path: /data/scripts/ansible/disableAutoUpdate.yml:15
ESTABLISH LOCAL CONNECTION FOR USER: root
localhost EXEC ( umask 22 && mkdir -p "$( echo $HOME/.ansible/tmp/ansible-tmp-1492480515.71-278594852314124 )" && echo "$( echo $HOME/.ansible/tmp/ansible-tmp-1492480515.71-278594852314124 )" )
localhost PUT /tmp/tmpG3gchf TO /root/.ansible/tmp/ansible-tmp-1492480515.71-278594852314124/replace
localhost EXEC LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1492480515.71-278594852314124/replace; rm -rf "/root/.ansible/tmp/ansible-tmp-1492480515.71-278594852314124/" > /dev/null 2>&1
ok: [localhost] => {"changed": false, "invocation": {"module_args": {"backup": false, "content": null, "delimiter": null, "dest": "/etc/apt/apt.conf.d/50unattended-upgrades", "directory_mode": null, "follow": false, "force": null, "group": null, "mode": null, "owner": null, "regexp": "(?:(?!\\/\\/).*[ \\t]*\\\"\\${distro_id}:\\${distro_codename}-security\\\";)/g", "remote_src": null, "replace": "replaced", "selevel": null, "serole": null, "setype": null, "seuser": null, "src": null, "validate": null}, "module_name": "replace"}, "msg": ""}
PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0

Voici une capture du fichier en cours de recherche:

Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-system";
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};
# ansible --version
ansible 2.0.0.2
config file = /data/scripts/ansible/ansible.cfg
configured module search path = Default w/o overrides

Une dernière remarque: je n'ai avoir du succès dans la recherche et le remplacer au sein de ce fichier lorsque vous recherchez uniquement des chaînes de caractères. Lors de la recherche pour l'ensemble de la ligne est lorsque cela ne fonctionne pas. En outre, j'ai essayé d'échapper les caractères spéciaux ainsi, par exemple, [/][/] en place de \/\/\, etc. avec pas de chance.

  • Et que voulez-vous atteindre avec ce? Les résultats semblent parfaitement bien. La chaîne n'est pas dans le fichier d'entrée, de sorte qu'il n'est pas remplacé. La tâche se termine avec ok état.
  • Et pour cet exemple particulier, pourquoi n'êtes-vous pas à l'aide de lineinfile module?
  • J'avais essayé d'utiliser le lineinfile module avec les mêmes résultats. donc essayé de la remplacer le module.
  • pouvez-vous m'éclairer quant à ce qui est mal avec la regexp qu'il ne trouve pas la chaîne? Veuillez vous reporter à la troisième ligne dans le snip: "${distro_id}:${distro_codename}-système";
  • Vous n'avez pas security chaîne dans votre fichier d'entrée. Et le moteur d'expressions régulières ne correspond pas security avec system. Vous sentez-vous éclairé maintenant?
  • Merci pour l'aperçu. Je vais devoir aller apprendre cette regex match security vs system.

InformationsquelleAutor Steven | 2017-04-18