Titulaire de plusieurs packages à l'aide de Ansible

0

La question

Je suis en train d'essayer de tenir plusieurs packages à l'aide de ansible-playbook, mais il ne fonctionne pas avec moi.

En utilisant le code ci-dessous il tient le premier paquet de l'onu-le tenir ensuite, maintenez le deuxième paquet

Voici mon code

- name: Prevent packages from being upgraded
  dpkg_selections:
    name: "{{ item }}"
    selection: hold
  with_items:
    - postgresql
    - docker

Voici le résultat de la partie serveur, tandis que le code de l'exécution de enter image description here la première ligne avant de l'exécuter la deuxième ligne est la sortie lorsque le premier paquet a été enfoncée la troisième ligne lors de la deuxième paquet de mesures a eu lieu et il est arrêtée

Je ne comprends pas pourquoi le comportement est comme ça? et comment je peux tenir plusieurs packages à l'aide de la ansible?

NOTE: j'ai déjà suivi l'instruction de la Anible doc https://docs.ansible.com/ansible/latest/collections/ansible/builtin/dpkg_selections_module.html Merci d'avance

ansible linux
2021-11-23 19:10:07
1

La meilleure réponse

1

Déjà pour des performances et des ressources raisons, fournir des paquets de la liste peut-être mieux.

- name: Prevent packages from being upgraded
  dpkg_selections:
    name: ['postgresql', 'docker']
    selection: hold

Cependant, votre test signalé

dpkg: error: unexpected data after package and selection

Par conséquent, il se peut que le module ne peut pas gérer des listes, j'ai donc eu un coup d'oeil dans la source dpkg_selections.py. Il semble être quelque chose de simple wrapper

module.run_command([dpkg, '--set-selections'], data="%s %s" % (name, selection), check_rc=True)

qui vient de fournir de l'information pour un seul module. J'ai également supposer que le module devrait fonctionner with_itemsmais il ne semble pas être le cas en raison de votre question.

Selon des pages de manuel, la commande dpkg lui-même semble être en mesure de gérer une liste de paquets, mais à condition que séparés par un caractère de fichier de valeur

dpkg --set-selections < /tmp/pkg_list

avec séparateur dans le format

postgresql hold
docker hold

Une solution simple pourrait aider dans votre cas.

- name: Prevent packages from being upgraded
  shell:
    cmd: |
      dpkg --set-selections << EOF
      postgresql hold
      docker hold
      EOF
    warn: false
    register: result

Vous pouvez avoir besoin de mettre en œuvre certaines d'erreur et d'état de la manipulation par vous-même, c'est à dire

changed_when: result.rc ...
failed_when: result.rc ...

Grâce à

2021-11-24 09:45:32

pas d'erreur de syntaxe ` “msg”: “dpkg: erreur: les données inattendues après le forfait et sélection à la ligne 1", “rc”: 2, “stderr”: “dpkg: erreur: les données inattendues après le forfait et sélection à la ligne 1\n”, “stderr_lines”: [ “dpkg: erreur: les données inattendues après le forfait et sélection à la ligne 1” ], “stdout”: “”, “stdout_lines”: [] `
Sara

@Sara, merci de fournir des résultats de test, j'ai mis à jour la réponse en conséquence.
U880D

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................