Рейтинг:0

Как заставить Ansible запускать пакет задач на узле кластера — узел за узлом

флаг cn

У меня есть ansible playbook, который выглядит примерно следующим образом. я нуждаюсь Начало обновления с нулевым временем простоя и Завершенные этапы обновления с нулевым временем простоя. запустится один раз, чтобы перевести\удалить cluser в режим обновления. кроме того, мне нужны все задачи в Блокировать будет запущен только на одном узле в одно и то же время и продолжится на следующем узле, как только мы получим HTTP 200

Не могли бы вы просмотреть файл yml? в настоящее время я получаю ОШИБКА! «uri» не является допустимым атрибутом для блока и если у вас есть предложения по его улучшению.

---
- название: Начало обновления с нулевым временем простоя
  хосты: атл
  сериал: 1
  сбор_фактов: ложь
  vars_files:
    vars.yml
  задачи:
   - имя: получить состояние кластера
     run_once: правда
     ури:
      URL-адрес: https://{{ base_url}}.XXX.com/rest/api/2/cluster/zdu/state
      заголовки:
       Тип содержимого: приложение/json
      force_basic_auth: правда
      validate_certs: ложь
      пользователь: ХХХ
      пароль: ХХХ
     зарегистрироваться: ответ
  # - имя: отладка.
  # отладка: var=ответ
  # run_once: правда
   - имя: активировать API обновления с нулевым временем простоя
     run_once: правда
     ури:
      URL-адрес: https://{{ base_url}}.XXX.com/rest/api/2/cluster/zdu/start
      метод: ПОСТ
      validate_certs: ложь
      заголовки:
       Тип содержимого: приложение/json
      force_basic_auth: правда
      пользователь: ХХХ
      пароль: ХХХ
      код_статуса: 201
# регистрация: ответ
     когда: response.json.state == 'СТАБИЛЬНЫЙ'
  # - имя: отладка.
  # run_once: правда
  # отладка: var=ответ
   - блокировать:
      - имя: создать каталог для конфигурации резервного копирования
        файл:
          путь: "{{ atl_backup_conf }}"
          состояние: каталог
          режим: '0755'
          владелец: атл
          группа: атл
      - имя: резервные файлы конфигурации
        копировать:
          источник: "{{ элемент }}"
          назначение: "{{ atl_backup_conf }}"
    # резервная копия: правда
          remote_src: правда
          владелец: атл
          группа: атл
        with_items:
          - "{{ atl_app }}/bin/setenv.sh"
        ignore_errors: правда
      - имя: "остановить службу atl на {{ ansible_hostname }} узле atl"
        #shell: /etc/init.d/atl стоп
        системный:
          имя: атл
          состояние: остановлено
        стать: да
- имя: Завершенные шаги обновления с нулевым временем простоя.
     хосты: атл
     vars_files:
      vars.yml
     задачи: 
     - имя: инициировать изменение API обновления с нулевым временем простоя на Стабильный статус.
       run_once: правда
       ури:
        URL-адрес: https://{{ base_url}}.XXX.com/rest/api/2/cluster/zdu/approve
        метод: ПОСТ
        validate_certs: ложь
        заголовки:
          Тип содержимого: приложение/json
        force_basic_auth: правда
        пользователь: ХХХ
        пароль: ХХХ
        код_статуса: 409 , 200

Рейтинг:1
флаг in

Вы пропустили тире перед блокировать.

После удаления всех атрибутов ваши задачи выглядят так:

  задачи:
  - имя: получить состояние кластера
  - имя: активировать API обновления с нулевым временем простоя
    блокировать:
# ^-- пропущен тире
      - name: «Обновить {{ ansible_hostname }} узел atl».
      - имя: создать каталог для конфигурации резервного копирования
      - имя: "остановить службу atl на {{ ansible_hostname }} узле atl"
      - имя: Установить новую версию atl.
    - имя: настроить службу systemd.
# ^-- неправильный отступ
      - имя: Reload Enable and Start atl.service
      - имя: проверки работоспособности - активировать состояние узла GET.

Как вы видите, блокировать является атрибутом предыдущей задачи, он должен быть на уровне задачи вместо.

Кроме того, ваша задача Настройте службу systemd. имеет неправильный отступ, он должен быть на том же уровне, что и другие задачи.

  задачи:
  - имя: получить состояние кластера
  - имя: активировать API обновления с нулевым временем простоя
  - блокировать:
# ^-- добавлено недостающее тире
      - name: «Обновить {{ ansible_hostname }} узел atl».
      - имя: создать каталог для конфигурации резервного копирования
      - имя: "остановить службу atl на {{ ansible_hostname }} узле atl"
      - имя: Установить новую версию atl.
      - имя: настроить службу systemd.
# ^-- с правильным отступом
      - имя: Reload Enable and Start atl.service
      - имя: проверки работоспособности - активировать состояние узла GET.

YAML очень требователен к отступам.

флаг cn
`- name: Начало обновления с нулевым временем простоя хосты: атл сериал: 1 сбор_фактов: ложь vars_files: vars.yml задачи: - имя: активировать API обновления с нулевым временем простоя - блокировать: - name: «Обновить {{ ansible_hostname }} узел atl». - имя: создать каталог для конфигурации резервного копирования - имя: "остановить узел atl службы atl" - имя: проверки работоспособности - активировать состояние узла GET. повторы: 720 задержка: 5 - имя: Завершенные шаги обновления с нулевым временем простоя. хосты: атл задачи: - имя: активировать обновление Zero Downtime run_once: правда ури:`
флаг cn
спасибо за ваш ответ, не уверен, как я могу сделать его более читаемым в области комментариев.?! Мне нужны 2 первые команды под задачами: будут выполняться один раз, но все команды под блоком: будут выполняться на всех узлах, но **узел за узлом** и в конце снова из **Обновление выполненных шагов.** будет запустить один раз на одном из узлов.
флаг in
Вы не можете сделать это читаемым в комментариях. Если у вас есть что добавить к существующему вопросу, отредактируйте его. Если вы столкнулись с новой проблемой, лучше принять ответ, который вам помог, и задать новый вопрос с новой проблемой.
флаг cn
как только я запускаю playbook, я получаю сообщение об ошибке: «ОШИБКА! модуль/действие не обнаружено в задаче. Похоже, ошибка в main_new.yml: строка 41, столбец 9, но может быть в другом месте файла в зависимости от конкретной проблемы синтаксиса. Оскорбительная строка выглядит так: - блокировать: - имя: Обновление узла atl. ^ здесь ` Я использую ansible-playbook 2.10.9, вы уверены в синтаксисе модуля `- block:`? Я вижу, что существует `блок:` без -
флаг in
Да, [я уверен](https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html).
флаг in
Мы не можем сказать вам, что именно не так, не видя текущего состояния вашего плейбука.
флаг cn
к сожалению, я не могу поделиться здесь, потому что комментарии не читаются. есть идеи, как я могу поделиться текущим состоянием?
флаг in
Как я уже сказал вам: отредактируйте свой вопрос. Не удаляйте то, что уже есть, просто добавьте это ниже.
флаг cn
это дало мне ошибку при попытке добавить, поэтому я обновляю его на основе вашего последнего комментария
флаг cn
Я просто хочу, чтобы мы были на одной странице - мне нужно, чтобы все задачи в разделе «получить состояние кластера» и «получить состояние кластера» будут выполняться один раз (run_once = true), и все задачи внутри блока: будут выполняться узел за узлом , я имею в виду, что сначала нужно запустить все задачи на первом узле в группе хостов atl, как только узел будет запущен, это означает, что я получаю HTTP = 200, он может перейти к следующему узлу в группе хостов atl и так далее. после завершения задач «-block:» можно продолжать и выполнять задачи в разделе «Выполненные шаги обновления с нулевым временем простоя». только на одном узле (run_once=true) надеюсь теперь понятнее
флаг cn
спасибо, у меня получилось.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.