Ansible - попытаться получить файл по нескольким URL-адресам и потерпеть неудачу, только если все URL-адреса были вызваны и файл не был найден - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть файл, который может быть расположен на 1 из 3 URL-адресов, но не на двух других

Я хотел бы попытаться получить файл для каждого URL-адреса:

  • Успех, если файл найден во время одной из итераций
  • Ошибка, если это конец l oop и файл не найден

Я пробовал это:

  - name : Try to get the file
    uri:
      url: "{{ item }}"
      return_content: yes
      status_code:
        - 200
        - 404
    register: module_result
    with_items:
      - http://url_1/file.txt
      - http://url_2/file.txt
      - http://url_3/file.txt
    when: module_result is not defined or module_result.status == 404

Но есть некоторые не обработанные случаи:

  • Возвращается другой код http, кроме 200 или 404
  • Последняя итерация возвращает 404 задачу и должна ошибка.

Итак, мои вопросы:

  • Можно ли обработать весь возвращенный код HTTP без записи всех существующих кодов в status_code?
  • Как выполнить задачу, если последняя итерация не возвращает HTTP 200?

Спасибо

1 Ответ

1 голос
/ 17 апреля 2020

Попробуйте:

- name: Try to get the file
  uri:
    url: "{{ item }}"
    return_content: yes
  register: module_result
  with_items:
    - http://url_1/file.txt
    - http://url_2/file.txt
    - http://url_3/file.txt
  ignore_errors: yes

- name: Register if there was any 200 status code
  set_fact:
    existing_file: "{{ item }}"
  with_items: "{{ module_result.results }}"
  when: item.status is defined and item.status == 200

- name: Fail if no 200 status code received
  fail:
    msg: No such file
  when: existing_file is not defined

- name: Display file content
  debug:
    msg: "{{ existing_file.content }}"
  1. L oop по всем URL-адресам без сбоев вообще
  2. L oop поверх результатов и установите переменную existing_file только в случае результата с кодом 200 был найден
  3. Ошибка, если existing_file не определено
  4. Если не удалось, то содержимое вашего файла находится в existing_file.content (и в этом примере будет отображаться с debug )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...