Spec-Zone.ru › Ansible 2.10

ansible.builtin.uri – Взаимодействие с веб-службами

Примечание

Этот модуль является частью ansible-base и включён во все установки Ansible. В большинстве случаев, вы можете использовать короткое имя модуля uri даже без указания collections: ключевого слова. Несмотря на это, мы рекомендуем использовать FQCN для лёгкой ссылки на документацию модуля и для избежания конфликтов с другими коллекциями, которые могут иметь то же имя модуля.

Новое в версии 1.1: of ansible.builtin

  • Обзор
  • Параметры
  • Примечания
  • См. также
  • Примеры
  • Возвращаемые значения

Обзор

  • Взаимодействует с веб-службами HTTP и HTTPS и поддерживает механизмы аутентификации HTTP Digest, Basic и WSSE.
  • Для целевых систем Windows используйте модуль ansible.windows.win_uri вместо этого.

Примечание

У этого модуля есть соответствующий плагин действия.

Параметры

Параметр Варианты/Значения по умолчанию Комментарии
attributes
строка
добавлен в 2.3 ansible.builtin
Атрибуты, которые должны иметь результирующий файл или каталог.
Для получения поддерживаемых флагов обратитесь к странице справки chattr на целевой системе.
Эта строка должна содержать атрибуты в том же порядке, что и выводится lsattr.
Оператор = используется по умолчанию, в противном случае необходимо включить операторы + или - в строку.

псевдонимы: attr
body
сырой
Тело http запроса/ответа веб-сервису. Если body_format установлено в 'json', оно будет принимать уже отформатированную JSON-строку или преобразовывать структуру данных в JSON.
Если body_format установлено в 'form-urlencoded', оно преобразует словарь или список кортежей в строку 'application/x-www-form-urlencoded'. (Добавлена в v2.7)
Если body_format установлено в 'form-multipart', оно преобразует словарь в тело 'multipart/form-multipart'. (Добавлена в v2.10)
body_format
строка
добавлен в 2.0 ansible.builtin
    Варианты:
  • form-urlencoded
  • json
  • сырой ←
  • form-multipart
Формат сериализации тела. При установке в json, form-multipart, или form-urlencoded, кодирует аргумент тела, если необходимо, и автоматически устанавливает заголовок Content-Type соответствующим образом.
Начиная с 2.3, можно переопределить заголовок `Content-Type`, установив его в json или form-urlencoded через опцию headers.
Заголовок 'Content-Type' не может быть переопределен при использовании form-multipart
form-urlencoded был добавлен в v2.7.
form-multipart был добавлен в v2.10.
client_cert
путь
добавлен в 2.4 ansible.builtin
Файл цепочки сертификатов в формате PEM, который будет использоваться для аутентификации SSL клиента.
Этот файл также может содержать ключ, и если ключ включен, опция client_key не требуется
client_key
путь
добавлен в 2.4 ansible.builtin
Файл в формате PEM, содержащий ваш закрытый ключ, который будет использоваться для аутентификации SSL клиента.
Если client_cert содержит и сертификат, и ключ, эта опция не требуется.
creates
путь
Имя файла. Если файл уже существует, этот шаг не будет выполнен.
dest
путь
Путь, куда загрузить файл (при необходимости). Если dest является каталогом, будет использовано имя файла на удалённом сервере.
follow_redirects
строка
    Варианты:
  • all
  • no
  • none
  • safe ←
  • urllib2
  • yes
Следовать ли модулю URI перенаправлениям. all будет следовать всем перенаправлениям. safe будет следовать только «безопасным» перенаправлениям, где «безопасный» означает, что клиент выполняет только GET или HEAD для URI, на который он перенаправляется. none не будет следовать никаким перенаправлениям. Обратите внимание, что yes и no варианты принимаются для обратной совместимости, где yes эквивалентно all, а no эквивалентно safe. yes и no устарели и будут удалены в будущих версиях Ansible.
force
булево
    Варианты:
  • нет ←
  • да
Если yes не использовать кэшированную копию.
Псевдоним thirsty устарел и будет удален в 2.13.

псевдонимы: thirsty
force_basic_auth
булево
    Варианты:
  • нет ←
  • да
Принудительно отправлять заголовок аутентификации Basic при первоначальном запросе.
Библиотека, используемая модулем uri, отправляет информацию об аутентификации только тогда, когда веб-сервис отвечает на первоначальный запрос кодом состояния 401. Так как некоторые сервисы basic auth не отправляют должным образом код 401, авторизация может не удаться.
group
строка
Имя группы, которая должна владеть файлом/каталогом, как передается в chown.
headers
словарь
добавлен в 2.1 ansible.builtin
Добавление пользовательских HTTP-заголовков к запросу в формате YAML-хэша. Начиная с 2.3, предоставление Content-Type здесь переопределит заголовок, сгенерированный при использовании json или form-urlencoded для body_format.
http_agent
строка
По умолчанию:
"ansible-httpget"
Заголовок для идентификации, обычно отображается в журналах веб-сервера.
method
строка
По умолчанию:
"GET"
HTTP-метод запроса или ответа.
В более поздних версиях мы больше не ограничиваем метод на уровне модуля, но он все равно должен быть допустимым методом, принимаемым сервисом, обрабатывающим запрос.
mode
сырой
Разрешения, которые должен иметь результирующий файл или каталог.
Для тех, кто привык к /usr/bin/chmod, помните, что режимы фактически являются восьмеричными числами. Вы должны либо добавить ведущую ноль, чтобы парсер YAML Ansible знал, что это восьмеричное число (например, 0644 или 01777), либо заключить его в кавычки (например, '644' или '1777'), чтобы Ansible получил строку и смог выполнить преобразование из строки в число.
Передача Ansible числа без соблюдения одного из этих правил приведет к десятичному числу, что повлечет за собой непредсказуемые результаты.
Начиная с Ansible 1.8, режим может быть указан в символическом формате (например, u+rwx или u=rw,g=r,o=r).
owner
строка
Имя пользователя, который должен владеть файлом/каталогом, как передается в chown.
remote_src
булево
добавлен в 2.7 ansible.builtin
    Варианты:
  • нет ←
  • да
Если no, модуль будет искать src на исходной/главной машине.
Если yes, модуль будет использовать путь src на удалённой/целевой машине.
removes
путь
Имя файла. Если файла не существует, этот шаг не будет выполнен.
return_content
булево
    Варианты:
  • нет ←
  • да
Возвращать ли тело ответа в качестве ключа "content" в результирующем словаре, независимо от успеха или неудачи.
Независимо от этой опции, если указанный тип содержимого — "application/json", то JSON всегда загружается в ключ json в результирующем словаре.
selevel
строка
Часть уровня контекста файла SELinux.
Это атрибут MLS/MCS, иногда известный как range.
Если установлено в _default, будет использоваться часть политики level, если она доступна.
serole
строка
Часть роли контекста файла SELinux.
Если установлено в _default, будет использоваться часть политики role, если она доступна.
setype
строка
Часть типа контекста файла SELinux.
Если установлено в _default, будет использоваться часть политики type, если она доступна.
seuser
строка
Часть пользователя контекста файла SELinux.
По умолчанию используется политика system, где это применимо.
Если установлено в _default, будет использоваться часть политики user, если она доступна.
src
путь
добавлен в 2.7 ansible.builtin
Путь к файлу, который будет отправлен на удаленный сервер.
Не может использоваться с body.
status_code
список / элементы=строка
По умолчанию:
[200]
Список допустимых числовых HTTP-кодов состояния, указывающих на успех запроса.
timeout
целое число
По умолчанию:
30
Таймаут на уровне сокета в секундах
unix_socket
строка
добавлен в 2.8 ansible.builtin
Путь к Unix доменному сокету для подключения
unsafe_writes
boolean
добавлен в 2.2 ansible.builtin
    Варианты:
  • нет ←
  • да
Влияет на использование атомарной операции для предотвращения повреждения данных или несогласованного чтения из целевого файла.
По умолчанию этот модуль использует атомарные операции для предотвращения повреждения данных или несогласованного чтения из целевых файлов, но иногда системы настроены или просто неисправны, что предотвращает это. Одним из примеров являются файлы, смонтированные Docker, которые не могут быть обновлены атомарно изнутри контейнера и могут быть записаны только не безопасным способом.
Этот параметр позволяет Ansible переключаться на небезопасные методы обновления файлов при сбое атомарных операций (однако он не заставляет Ansible выполнять небезопасные записи).
ВАЖНО! Небезопасные записи подвержены гонкам и могут привести к повреждению данных.
url
строка / обязательно
HTTP или HTTPS URL в формате (http|https)://host.domain[:port]/path
url_password
строка
Пароль, используемый модулем для аутентификации Digest, Basic или WSSE.

псевдонимы: password
url_username
строка
Имя пользователя, используемое модулем для аутентификации Digest, Basic или WSSE.

псевдонимы: user
use_proxy
boolean
    Варианты:
  • нет
  • да ←
Если no, он не будет использовать прокси, даже если он определен в переменной среды на целевых хостах.
validate_certs
boolean
добавлен в 1.9.2 ansible.builtin
    Варианты:
  • нет
  • да ←
Если no, сертификаты SSL не будут проверены.
Это следует устанавливать только в no используемых на контролируемых вами сайтах с использованием самозаверяющих сертификатов.
До версии 1.9.2 код по умолчанию был no.

Примечания

Примечание

  • Зависимость от httplib2 была удалена в Ansible 2.1.
  • Модуль возвращает все HTTP-заголовки в нижнем регистре.
  • Для целевых систем Windows используйте модуль ansible.windows.win_uri вместо этого.

См. также

См. также

ansible.builtin.get_url

Официальная документация модуля ansible.builtin.get_url.

ansible.windows.win_uri

Официальная документация модуля ansible.windows.win_uri.

Примеры

- name: Check that you can connect (GET) to a page and it returns a status 200
  uri:
    url: http://www.example.com

- name: Check that a page returns a status 200 and fail if the word AWESOME is not in the page contents
  uri:
    url: http://www.example.com
    return_content: yes
  register: this
  failed_when: "'AWESOME' not in this.content"

- name: Create a JIRA issue
  uri:
    url: https://your.jira.example.com/rest/api/2/issue/
    user: your_username
    password: your_pass
    method: POST
    body: "{{ lookup('file','issue.json') }}"
    force_basic_auth: yes
    status_code: 201
    body_format: json

- name: Login to a form based webpage, then use the returned cookie to access the app in later tasks
  uri:
    url: https://your.form.based.auth.example.com/index.php
    method: POST
    body_format: form-urlencoded
    body:
      name: your_username
      password: your_password
      enter: Sign in
    status_code: 302
  register: login

- name: Login to a form based webpage using a list of tuples
  uri:
    url: https://your.form.based.auth.example.com/index.php
    method: POST
    body_format: form-urlencoded
    body:
    - [ name, your_username ]
    - [ password, your_password ]
    - [ enter, Sign in ]
    status_code: 302
  register: login

- name: Upload a file via multipart/form-multipart
  uri:
    url: https://httpbin.org/post
    method: POST
    body_format: form-multipart
    body:
      file1:
        filename: /bin/true
        mime_type: application/octet-stream
      file2:
        content: text based file content
        filename: fake.txt
        mime_type: text/plain
      text_form_field: value

- name: Connect to website using a previously stored cookie
  uri:
    url: https://your.form.based.auth.example.com/dashboard.php
    method: GET
    return_content: yes
    headers:
      Cookie: "{{ login.cookies_string }}"

- name: Queue build of a project in Jenkins
  uri:
    url: http://{{ jenkins.host }}/job/{{ jenkins.job }}/build?token={{ jenkins.token }}
    user: "{{ jenkins.user }}"
    password: "{{ jenkins.password }}"
    method: GET
    force_basic_auth: yes
    status_code: 201

- name: POST from contents of local file
  uri:
    url: https://httpbin.org/post
    method: POST
    src: file.json

- name: POST from contents of remote file
  uri:
    url: https://httpbin.org/post
    method: POST
    src: /path/to/my/file.json
    remote_src: yes

- name: Create workspaces in Log analytics Azure
  uri:
    url: https://www.mms.microsoft.com/Embedded/Api/ConfigDataSources/LogManagementData/Save
    method: POST
    body_format: json
    status_code: [200, 202]
    return_content: true
    headers:
      Content-Type: application/json
      x-ms-client-workspace-path: /subscriptions/{{ sub_id }}/resourcegroups/{{ res_group }}/providers/microsoft.operationalinsights/workspaces/{{ w_spaces }}
      x-ms-client-platform: ibiza
      x-ms-client-auth-token: "{{ token_az }}"
    body:

- name: Pause play until a URL is reachable from this host
  uri:
    url: "http://192.0.2.1/some/test"
    follow_redirects: none
    method: GET
  register: _result
  until: _result.status == 200
  retries: 720 # 720 * 5 seconds = 1hour (60*60/5)
  delay: 5 # Every 5 seconds

# There are issues in a supporting Python library that is discussed in
# https://github.com/ansible/ansible/issues/52705 where a proxy is defined
# but you want to bypass proxy use on CIDR masks by using no_proxy
- name: Work around a python issue that doesn't support no_proxy envvar
  uri:
    follow_redirects: none
    validate_certs: false
    timeout: 5
    url: "http://{{ ip_address }}:{{ port | default(80) }}"
  register: uri_data
  failed_when: false
  changed_when: false
  vars:
    ip_address: 192.0.2.1
  environment: |
      {
        {% for no_proxy in (lookup('env', 'no_proxy') | regex_replace('\s*,\s*', ' ') ).split() %}
          {% if no_proxy | regex_search('\/') and
                no_proxy | ipaddr('net') != '' and
                no_proxy | ipaddr('net') != false and
                ip_address | ipaddr(no_proxy) is not none and
                ip_address | ipaddr(no_proxy) != false %}
            'no_proxy': '{{ ip_address }}'
          {% elif no_proxy | regex_search(':') != '' and
                  no_proxy | regex_search(':') != false and
                  no_proxy == ip_address + ':' + (port | default(80)) %}
            'no_proxy': '{{ ip_address }}:{{ port | default(80) }}'
          {% elif no_proxy | ipaddr('host') != '' and
                  no_proxy | ipaddr('host') != false and
                  no_proxy == ip_address %}
            'no_proxy': '{{ ip_address }}'
          {% elif no_proxy | regex_search('^(\*|)\.') != '' and
                  no_proxy | regex_search('^(\*|)\.') != false and
                  no_proxy | regex_replace('\*', '') in ip_address %}
            'no_proxy': '{{ ip_address }}'
          {% endif %}
        {% endfor %}
      }

Возвращаемые значения

Общие возвращаемые значения описаны здесь, следующие поля уникальны для этого модуля:

Ключ Возвращаемое значение Описание
content
строка
статус не в status_code или return_content равно true
Содержимое тела ответа.

Пример:
{}
cookies
словарь
добавлен в 2.4 ansible.builtin
при успехе
Значения cookie, помещенные в cookie-контейнер.

Пример:
{'SESSIONID': '[SESSIONID]'}
cookies_string
строка
добавлен в 2.6 ansible.builtin
при успехе
Значение для будущих заголовков Cookie запроса.

Пример:
SESSIONID=[SESSIONID]
elapsed
целое число
при успехе
Количество секунд, затраченных на загрузку.

Пример:
23
msg
строка
всегда
HTTP-сообщение из запроса.

Пример:
OK (неизвестные байты)
redirected
boolean
при успехе
Было ли перенаправление запроса.

status
целое число
всегда
Код HTTP-статуса из запроса.

Пример:
200
url
строка
всегда
Фактический URL, используемый для запроса.

Пример:
https://www.ansible.com/


Авторы

  • Romeo Theriault (@romeotheriault)

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/collections/ansible/builtin/uri_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API