обрабатывать все вопросы, которые задаются во время обновления Ubuntu через ansible? - PullRequest
1 голос
/ 23 января 2020

Я работаю над обновлением своих машин до Ubuntu 16 с Ubuntu 14. У меня более 200 машин. Я хотел сделать это через ansible, чтобы я мог автоматизировать это вместо того, чтобы делать это вручную. Когда я запускаю команду ниже для обновления, она задала мне несколько вопросов на экране, и я всегда выбирал ответы по умолчанию для них, и это работало для меня.

В большинстве случаев на всплывающем экране было несколько вопросов, и я отвечал на них по умолчанию, а иногда в командной строке возникали вопросы, на которые я отвечал по умолчанию «N» при запуске обновления.

do-release-upgrade

Так что теперь, если я хочу сделать это через ansible, как мы можем решить те вопросы, которые возникают во время обновления? Я всегда хочу выбрать ответ по умолчанию для этих вопросов, но есть ли способ решить эту проблему через ansible? Вот то, что я получил, но не уверен, как ответить на эти вопросы.

---
- hosts: upgrade_test
  serial: "{{ num_serial }}"

  tasks:
    # Use a block to perform tasks conditionally—only if running Ubuntu 14.04.
    - block:

      - debug:
          msg: 'This server is running Ubuntu 14.04 LTS and will be upgraded to 16.04 LTS.'

      - name: Run do-release-upgrade.
        command: do-release-upgrade

      # Note: In Ansible 2.7+, use the reboot module instead.
      - name: Reboot the server.
        command: reboot
        async: 0
        poll: 0

      - name: Wait for server to reboot.
        wait_for:
          host: "{{ ansible_ssh_host }}"
          port: 22
          state: started
        connection: local
        become: no

      when: ansible_distribution == 'Ubuntu' and ansible_distribution_version == '14.04'

1 Ответ

1 голос
/ 23 января 2020

У вас есть два варианта:

Либо вы пишете все вопросы с помощью ожидаемого модуля

- name: Run do-release-upgrade.
   expect:
     command: do-release-upgrade
     responses:
       Question:
         - N
         - N
         - N
         - ...

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

- name: Run do-release-upgrade.
   expect:
     command: do-release-upgrade
     responses:
        Configuration file '/etc/pam.d/login'.*: N

Тем не менее, это заставляет вас либо сценарий весь вопрос или быть на сто процентов уверен, что вы всегда есть одинаковое количество вопросов.

Или вы можете использовать служебную команду yes

, которая отвечает по умолчанию y, но может ответить как угодно, передавая в качестве аргумента

Имя

да - выводить строку до тех пор, пока не будет убит

Конспект

да [STRING] ...
да ОПЦИЯ

Описание

Повторно выводите строку со всеми указанными STRING или 'y'.

Источник: https://linux.die.net/man/1/yes

Использование по умолчанию yes

$ yes
y
y
y
y
^C

Использование yes с аргументом

$ yes N
N
N
N
N
^C

Таким образом, вы можете изменить задачу на

 - name: Run do-release-upgrade.
   shell: yes N | do-release-upgrade

Примечание : вам нужно перейти с командного модуля на модуль оболочки , поскольку командный модуль не допускает использование каналов (|)

Команда (и) не будут обрабатываться через оболочку, поэтому такие переменные, как $ HOME, и такие операции, как "<", ">", "|", ";" и "&" не будет работать. Используйте модуль оболочки, если вам нужны эти функции.

Источник: https://docs.ansible.com/ansible/latest/modules/command_module.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...