Рейтинг:0

Использование цикла ansible до тех пор, пока с stdout_lines

флаг de

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

Если вывод однострочный:

- имя: проверить статус синхронизации
  оболочка: какая-то команда
  регистрация: sync_status
  до: sync_status.stdout == 'SSUS'

Если вывод состоит из нескольких строк, я пытаюсь использовать stdout_lines

- имя: проверить статус синхронизации
  оболочка: какая-то команда 
  регистрация: sync_status
  до: item.stdout_lines == 'SSUS'
  with_items: "{{ sync_status }}"

но я получил переменную undefined:

фатальный: [xxxxxxx]: FAILED! => {
    "msg": "''sync_status' не определен"
}

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

Любезно помочь.

флаг br
Вы не можете *зациклить* и *зарегистрировать* одну и ту же переменную.
флаг br
Вариант использования не ясен. Что вы хотите сделать, когда условие не выполняется?
sloweriang avatar
флаг de
в основном эта задача состоит в том, чтобы просто проверить статус, как только условие будет выполнено, я просто перейду к следующей задаче.
Рейтинг:0
флаг br

Например, учитывая файл и книгу воспроизведения

оболочка> кошка test.txt 
ХХ

оболочка> cat playbook.yml
- хосты: локальный
  задачи:
    - доступная.встроенная.команда:
        cmd: кошка test.txt
      регистрация: sync_status
      до: sync_status.stdout == 'SSUS'

задача не будет выполнена

ЗАДАЧА [ansible.builtin.command] ************************************************* **
НЕУДАЧА - ПОВТОРНАЯ Попытка: ansible.builtin.command (осталось 3 попытки).
НЕУДАЧА - ПОВТОРНАЯ Попытка: ansible.builtin.command (осталось 2 попытки).
НЕУДАЧА — ПОВТОРНАЯ Попытка: ansible.builtin.command (осталось 1 попытка).
фатальный: [localhost]: FAILED! => изменено = верно 
  попытки: 3
  команда:
  - кот
  - test.txt
  дельта: '0:00:00.003479'
  конец: '2021-06-16 07:27:19.927499'
  ру: 0
  начало: '2021-06-16 07:27:19.924020'
  стдерр: ''
  stderr_lines: <опущено>
  стандартный вывод: ХХ
  stdout_lines: <опущено>

Но если вы вставите строку «SSUS» в файл до или во время тестирования, задача будет выполнена успешно, например.

ЗАДАЧА [ansible.builtin.command] ************************************************* **
НЕУДАЧА - ПОВТОРНАЯ Попытка: ansible.builtin.command (осталось 3 попытки).
НЕУДАЧА - ПОВТОРНАЯ Попытка: ansible.builtin.command (осталось 2 попытки).
изменено: [локальный хост]

Установите параметры к вашим потребностям.


Вопрос: "Если вывод состоит из нескольких строк, мне нужно будет использовать stdout_lines."

A: Проверьте наличие строки в списке, например.

    - доступная.встроенная.команда:
        cmd: кошка test.txt
      регистрация: sync_status
      до: "'SSUS' в sync_status.stdout_lines"
sloweriang avatar
флаг de
Привет, например, есть несколько линий, некоторые с SSUS, некоторые с PAIR. Мои условия - убедиться, что все строки соблюдены, а не только некоторые строки содержат ключевое слово

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

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