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 |
| Формат сериализации тела. При установке в 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 строка |
| Следовать ли модулю 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