Spec-Zone.ru › Ansible 2.11

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

Примечание

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

Новое в версии 1.1: от 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.
ca_path
путь
добавлен в 2.11 ansible.builtin
Файл в формате PEM, содержащий сертификат CA, используемый для валидации
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).
Если mode не указан и целевой файл не существует, по умолчанию umask на системе будет использоваться при установке режима для вновь созданного файла.
Если mode не указан и целевой файл существует, режим существующего файла будет использован.
Указание mode — лучший способ гарантировать создание файлов с правильными разрешениями. См. CVE-2020-1736 для получения дополнительной информации.
owner
строка
Имя пользователя, который должен владеть файлом/каталогом, как это передается в chown.
remote_src
булево
добавлен в 2.7 ansible.builtin
    Варианты:
  • нет ←
  • да
Если no, модуль будет искать src на контроллере.
Если yes, модуль будет искать src на управляемом (удаленном) узле.
removes
путь
Имя файла. Если файл не существует, этот шаг не будет выполнен.
return_content
булево
    Варианты:
  • нет ←
  • да
Возвращать ли тело ответа в качестве ключа "content" в результатах словаря независимо от успеха или неудачи.
Независимо от этой опции, если указанный Content-type — "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
строка / обязательно
URL HTTP или HTTPS в формате (http|https)://host.domain[:port]/path
url_password
строка
Пароль для модуля, используемый для аутентификации Digest, Basic или WSSE.

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

псевдонимы: пользователь
use_gssapi
boolean
добавлено в 2.11 ansible.builtin
    Варианты:
  • нет ←
  • да
Использовать GSSAPI для аутентификации, обычно для аутентификации Kerberos или Kerberos через Negotiate.
Требуется установка Python библиотеки gssapi.
Учётные данные для GSSAPI могут быть указаны с помощью url_username/url_password или с помощью переменной окружения GSSAPI KRB5CCNAME, которая определяет пользовательский кэш учетных данных Kerberos.
Аутентификация NTLM not поддерживается, даже если механизм GSSAPI для NTLM был установлен.
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–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/collections/ansible/builtin/uri_module.html

Spec-Zone.ru

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