Храните несколько пакетов с помощью Ansible

0

Вопрос

Я пытаюсь хранить несколько пакетов с помощью ansible-playbook, но со мной это не работает.

Используя приведенный ниже код, он удерживает первый пакет, затем снимите его, затем удерживайте второй пакет

Вот мой код

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

Вот вывод со стороны сервера во время выполнения кода enter image description here первая строка перед выполнением второй строки-это вывод, когда был задержан первый пакет , третья строка, когда был задержан второй пакет, и он остановлен

Я не понимаю, почему такое поведение? и как я могу хранить несколько пакетов одновременно, используя ansible?

ПРИМЕЧАНИЕ: Я уже следовал инструкциям из официального документа https://docs.ansible.com/ansible/latest/collections/ansible/builtin/dpkg_selections_module.html Заранее спасибо

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

Лучший ответ

1

Уже по соображениям производительности и ресурсов предоставление пакетов в виде списка может быть лучше.

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

Тем не менее, ваш тест сообщил

dpkg: error: unexpected data after package and selection

Поэтому, возможно, модуль не может обрабатывать списки, поэтому я заглянул в исходный кодdpkg_selections.py. Похоже, это какая-то простая обертка

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

которые предоставляют информацию только для одного модуля. Я также предполагаю, что модуль должен работать with_items, но, похоже, это не так из-за вашего вопроса.

Согласно man-страницам, команда dpkg сам по себе, похоже, способен обрабатывать список пакетов, но предоставляется в виде файла значений, разделенных символами

dpkg --set-selections < /tmp/pkg_list

с разделителем в формате

postgresql hold
docker hold

В вашем случае может помочь простой обходной путь.

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

Возможно, вам потребуется самостоятельно выполнить обработку некоторых ошибок и состояний, т. е.

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

Благодаря

2021-11-24 09:45:32

не синтаксическая ошибка ` “МСГ”: “с dpkg: ошибка: неожиданный данных после упаковки и отбора в строке 1", “РК”: 2, “стандартный вывод”: “с dpkg: ошибка: неожиданный данных после упаковки и отбора в строке 1\п”, “stderr_lines”: [ “команды dpkg: ошибка: неожиданный данных после упаковки и отбора в строке 1” ], “стандартный вывод”: “”, “stdout_lines”: [] `
Sara

@Сара, спасибо за предоставление результатов теста, я соответствующим образом обновил ответ.
U880D

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................