ansible.builtin.uri 模块 – 与 Web 服务交互
注意
此模块是 ansible-core 的一部分,包含在所有 Ansible 安装中。在大多数情况下,即使不指定 collections 关键字,您也可以使用简短的模块名称 uri。但是,我们建议您使用 完全限定集合名称 (FQCN) ansible.builtin.uri,以便轻松链接到模块文档并避免与可能具有相同模块名称的其他集合冲突。
摘要
与 HTTP 和 HTTPS Web 服务交互,并支持 Digest、Basic 和 WSSE HTTP 身份验证机制。
对于 Windows 目标,请改用 ansible.windows.win_uri 模块。
注意
此模块具有相应的 action 插件。
参数
参数 |
注释 |
|---|---|
生成的系统对象应具有的属性。 要获取支持的标志,请查看目标系统上 *chattr* 的手册页。 此字符串应按 *lsattr* 显示的相同顺序包含属性。 默认情况下假定使用 |
|
对 Web 服务的 HTTP 请求/响应的主体。如果 如果 如果 |
|
主体的序列化格式。当设置为 从 v2.3 开始,可以通过 使用
选项
|
|
包含用于验证的 CA 证书的 PEM 格式文件 |
|
用于请求的 SSL/TLS 密码。 提供列表时,所有密码都将按顺序用 有关更多详细信息,请参阅 OpenSSL 密码列表格式。 可用的密码取决于 Python 和 OpenSSL/LibreSSL 版本。 |
|
用于 SSL 客户端身份验证的 PEM 格式证书链文件。 此文件也可以包含密钥,如果包含密钥,则不需要 |
|
包含用于 SSL 客户端身份验证的私钥的 PEM 格式文件。 如果 |
|
文件名,如果它已经存在,则不会运行此步骤。 |
|
是否尝试解压缩 gzip 内容编码的响应 选项
|
|
要将文件下载到的路径(如果需要)。如果 |
|
URI 模块是否应该遵循重定向。 选项
|
|
如果 选项
|
|
强制在初始请求时发送 Basic 认证头。 当此设置为 当此设置为 在以下任何情况下使用此设置: 您知道 Web 服务端点始终需要 HTTP Basic 身份验证,并且您希望通过消除往返次数来加快请求速度。 Web 服务没有正确地向您的客户端发送 HTTP 401 错误,因此 Ansible 的 HTTP 库将无法正确响应 HTTP 凭据,登录将失败。 Web 服务禁止或限速导致任何 HTTP 401 错误的客户端。 选项
|
|
应拥有文件系统对象的组的名称,如同提供给 chown 一样。 如果未指定,则使用当前用户的当前组,除非您是 root 用户,在这种情况下,它可以保留之前的拥有权。 |
|
以 YAML 哈希格式向请求添加自定义 HTTP 头。从 Ansible 2.3 开始,在此处提供 默认值: |
|
用于识别的标头,通常显示在 Web 服务器日志中。 默认值: |
|
请求或响应的 HTTP 方法。 在较新的版本中,我们不再在模块级别限制方法,但它仍然必须是服务处理请求接受的有效方法。 默认值: |
|
结果文件系统对象应具有的权限。 对于习惯使用 /usr/bin/chmod 的用户,请记住模式实际上是八进制数。您必须向 Ansible 提供足够的信息才能正确解析它们。为了获得一致的结果,请引用八进制数(例如, 如果不遵循这两个规则中的任何一个,则向 Ansible 提供数字将导致十进制数,这将产生意想不到的结果。 从 Ansible 1.8 开始,模式可以指定为符号模式(例如, 如果未指定 如果未指定 指定 |
|
应拥有文件系统对象的用户的名称,如同提供给 chown 一样。 如果未指定,则使用当前用户,除非您是 root 用户,在这种情况下,它可以保留之前的拥有权。 指定数字用户名将被假定为用户 ID 而不是用户名。避免使用数字用户名以避免此混淆。 |
|
文件名,当它不存在时,将不会运行此步骤。 |
|
无论成功还是失败,是否将响应正文作为字典结果中的“content”键返回。 独立于此选项,如果报告的 Content-type 为“application/json”,则 JSON 始终加载到字典结果中名为 选项
|
|
SELinux 文件系统对象上下文级别部分。 这是 MLS/MCS 属性,有时称为 设置为 |
|
SELinux 文件系统对象上下文的 role 部分。 设置为 |
|
SELinux 文件系统对象上下文的 type 部分。 设置为 |
|
SELinux 文件系统对象上下文的 user 部分。 默认情况下,它使用 设置为 |
|
表示请求成功的有效数字 HTTP 状态代码列表。 默认值: |
|
以秒为单位的套接字级别超时 默认值: |
|
要用于连接的 Unix 域套接字的路径 |
|
不会在后续重定向请求中发送的标头名称列表。此列表不区分大小写。默认情况下,所有标头都将被重定向。在某些情况下,在此处列出诸如 默认值: |
|
影响何时使用原子操作来防止数据损坏或目标文件系统对象的不一致读取。 默认情况下,此模块使用原子操作来防止数据损坏或目标文件系统对象的不一致读取,但有时系统的配置或损坏方式会阻止此操作。一个例子是 docker 挂载的文件系统对象,这些对象无法从容器内部以原子方式更新,只能以不安全的方式写入。 此选项允许 Ansible 在原子操作失败时回退到不安全的文件系统对象更新方法(但是,它不会强制 Ansible 执行不安全的写入)。 重要!不安全的写入容易出现竞争条件,并可能导致数据损坏。 选项
|
|
形式为 (http|https)://host.domain[:port]/path 的 HTTP 或 HTTPS URL |
|
模块用于 Digest、Basic 或 WSSE 身份验证的密码。 |
|
模块用于 Digest、Basic 或 WSSE 身份验证的用户名。 |
|
使用 GSSAPI 执行身份验证,这通常用于 Kerberos 或通过 Negotiate 身份验证的 Kerberos。 需要安装 Python 库 gssapi。 GSSAPI 的凭据可以通过 即使安装了用于 NTLM 的 GSSAPI 机制,也不支持 NTLM 身份验证。 选项
|
|
确定是否使用 ``~/.netrc`` 文件中的凭据 默认情况下,.netrc 与 Basic 身份验证标头一起使用 设置为 False 时,将忽略 .netrc 凭据 选项
|
|
如果为 选项
|
|
如果为 仅当在使用自签名证书的个人控制站点上使用时,才应将其设置为 在 1.9.2 之前,代码默认为 选项
|
属性
属性 |
支持 |
描述 |
|---|---|---|
支持:不支持 |
可以在 check_mode 下运行并返回更改状态预测,而无需修改目标;如果不支持,则将跳过该操作。 |
|
支持:不支持 |
在 diff 模式下,将返回有关已更改内容(或可能需要在 check_mode 中更改的内容)的详细信息 |
|
平台: posix |
可以对其进行操作的目标操作系统/系列 |
备注
注意
Ansible 2.1 中移除了对 httplib2 的依赖。
模块以小写形式返回所有 HTTP 标头。
对于 Windows 目标,请改用 ansible.windows.win_uri 模块。
另请参见
另请参见
- ansible.builtin.get_url
从 HTTP、HTTPS 或 FTP 下载文件到节点。
- ansible.windows.win_uri
与 Web 服务交互。
示例
- name: Check that you can connect (GET) to a page and it returns a status 200
ansible.builtin.uri:
url: http://www.example.com
- name: Check that a page returns successfully but fail if the word AWESOME is not in the page contents
ansible.builtin.uri:
url: http://www.example.com
return_content: true
register: this
failed_when: this is failed or "'AWESOME' not in this.content"
- name: Create a JIRA issue
ansible.builtin.uri:
url: https://your.jira.example.com/rest/api/2/issue/
user: your_username
password: your_pass
method: POST
body: "{{ lookup('ansible.builtin.file','issue.json') }}"
force_basic_auth: true
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
ansible.builtin.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
ansible.builtin.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
ansible.builtin.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
ansible.builtin.uri:
url: https://your.form.based.auth.example.com/dashboard.php
method: GET
return_content: true
headers:
Cookie: "{{ login.cookies_string }}"
- name: Queue build of a project in Jenkins
ansible.builtin.uri:
url: http://{{ jenkins.host }}/job/{{ jenkins.job }}/build?token={{ jenkins.token }}
user: "{{ jenkins.user }}"
password: "{{ jenkins.password }}"
method: GET
force_basic_auth: true
status_code: 201
- name: POST from contents of local file
ansible.builtin.uri:
url: https://httpbin.org/post
method: POST
src: file.json
- name: POST from contents of remote file
ansible.builtin.uri:
url: https://httpbin.org/post
method: POST
src: /path/to/my/file.json
remote_src: true
- name: Create workspaces in Log analytics Azure
ansible.builtin.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
ansible.builtin.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
- name: Provide SSL/TLS ciphers as a list
uri:
url: https://example.org
ciphers:
- '@SECLEVEL=2'
- ECDH+AESGCM
- ECDH+CHACHA20
- ECDH+AES
- DHE+AES
- '!aNULL'
- '!eNULL'
- '!aDSS'
- '!SHA1'
- '!AESCCM'
- name: Provide SSL/TLS ciphers as an OpenSSL formatted cipher list
uri:
url: https://example.org
ciphers: '@SECLEVEL=2:ECDH+AESGCM:ECDH+CHACHA20:ECDH+AES:DHE+AES:!aNULL:!eNULL:!aDSS:!SHA1:!AESCCM'
返回值
常见返回值已在此处记录,以下是此模块独有的字段
键 |
描述 |
|---|---|
响应正文内容。 返回:状态不在 status_code 中或 return_content 为 true 示例: |
|
放置在 cookie 罐中的 cookie 值。 返回:成功时 示例: |
|
未来请求 Cookie 标头的值。 返回:成功时 示例: |
|
执行下载所花费的秒数。 返回:成功时 示例: |
|
来自请求的 HTTP 消息。 返回:始终 示例: |
|
目标文件/路径 返回:定义了 dest 示例: |
|
请求是否被重定向。 返回:成功时 示例: |
|
来自请求的 HTTP 状态代码。 返回:始终 示例: |
|
请求使用的实际 URL。 返回:始终 示例: |