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 |
| Формат сериализации тела. При установке в json, form-multipart, или form-urlencoded, кодирует аргумент тела, если необходимо, и автоматически устанавливает заголовок Content-Type соответствующим образом.Начиная с 2.3, можно переопределить заголовок `Content-Type`, установив его в json или form-urlencoded через опцию headers.Заголовок 'Content-Type' не может быть переопределен при использовании form-multipartform-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 строка |
| Следовать ли модулю 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