Как найти строку в блоке «повторные попытки и до»? - PullRequest
1 голос
/ 23 октября 2019

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

- name: install plugins
  command: "run {{ item }}"
  with_items:
  - install plugins
  - status
  register: result
  until: result.stdout.find("InstallPlugin1 and InstallPlugin2") != -1
  retries: 5
  delay: 10

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

debug: msg="{{ result['results'][1]['stdout'] }}" 

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

until: result['results'][1]['stdout'].find("all systems go") != -1

Ответы [ 2 ]

1 голос
/ 24 октября 2019

Если оба значения run install plugins и run status возвращают что-то вроде

installed: InstallPlugin1, InstallPlugin2

, задача, приведенная ниже, выполнит работу

- name: install plugins
  command: "run {{ item }}"
  loop:
    - install plugins
    - status
  register: result
  until:
    - result.stdout is search('InstallPlugin1')
    - result.stdout is search('InstallPlugin2')
  retries: 5
  delay: 10

Невозможно использовать цикл, если только run status возвращает подтверждение, потому что оператор до вычисляется на каждой итерации. Один из вариантов - объединить команды. Например,

- name: install plugins
  command: "run install plugins; run status"
  register: result
  until:
    - result.stdout is search('InstallPlugin1')
    - result.stdout is search('InstallPlugin2')
  retries: 5
  delay: 10


Можно проверить зарегистрированный результат в каждом цикле. После завершения цикла переменная результат будет накапливать результат.Результаты . Возможно, стоит пересмотреть это.
- debug:
    var: result
1 голос
/ 24 октября 2019

Я думаю, это то, что вы ищете: until: "all systems go" in item['stdout']

У вас в register заявлении будет список совокупных результатов от всех раздражений в цикле with_items и чтоВы хотите использовать только item. В зависимости от того, что вы делаете, вам может даже не понадобиться регистрировать эту переменную.

...