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 插件。
参数
| 参数 | 注释 | 
|---|---|
| 生成的系统对象应具有的属性。 要获取支持的标志,请查看目标系统上  此字符串应按  假设使用  | |
| 对 Web 服务的 HTTP 请求/响应的主体。如果  如果  如果  如果  | |
| 主体的序列化格式。当设置为  从 v2.3 开始,可以通过  使用  
 
 选项 
 | |
| 包含用于验证的 CA 证书的 PEM 格式文件。 | |
| 用于请求的 SSL/TLS 密码。 提供列表时,所有密码都将按顺序用  有关更多详细信息,请参阅 OpenSSL 密码列表格式。 可用的密码取决于 Python 和 OpenSSL/LibreSSL 版本。 | |
| PEM 格式的证书链文件,用于 SSL 客户端身份验证。 此文件还可以包含密钥,如果包含密钥,则不需要  | |
| 包含用于 SSL 客户端身份验证的私钥的 PEM 格式文件。 如果  | |
| 文件名,如果文件已存在,则不会运行此步骤。 | |
| 是否尝试解压缩 gzip 内容编码的响应。 选项 
 | |
| 下载文件的路径(如果需要)。如果  | |
| URI 模块是否应遵循重定向。 选项 
 | |
| 如果  选项 
 | |
| 强制在初始请求时发送 Basic 身份验证标头。 当此设置为  当此设置为  在以下任何情况下使用此设置 您知道 Web 服务端点始终需要 HTTP Basic 身份验证,并且您希望通过消除第一次往返来加快请求速度。 Web 服务没有正确地向您的客户端发送 HTTP 401 错误,因此 Ansible 的 HTTP 库将无法正确响应 HTTP 凭据,登录将失败。 Web 服务禁止或限制速率导致任何 HTTP 401 错误的客户端。 选项 
 | |
| 应拥有文件系统的组的名称,如同提供给  如果未指定,则它将使用当前用户的当前组,除非您是 root 用户,在这种情况下,它可以保留以前的拥有者。 | |
| 以YAML哈希格式向请求添加自定义HTTP标头。从Ansible 2.3开始,在此提供 默认值:  | |
| 用于识别的标头,通常出现在Web服务器日志中。 默认值:  | |
| 请求或响应的HTTP方法。 在较新的版本中,我们不再在模块级别限制方法,但它仍然必须是服务处理请求所接受的有效方法。 默认值:  | |
| 生成的filesystem对象应具有的权限。 对于习惯使用 如果不遵循以上任何规则向Ansible提供数字,最终将得到一个十进制数,这将导致意外的结果。 从Ansible 1.8开始,模式可以指定为符号模式(例如, 如果未指定 如果未指定 指定 | |
| 应拥有filesystem对象的用户名,就像提供给 如果未指定,则使用当前用户,除非您是root用户,在这种情况下,它可以保留之前的拥有权。 指定数字用户名将被认为是用户ID而不是用户名。避免使用数字用户名以避免混淆。 | |
| 文件名,如果它不存在,则不会运行此步骤。 | |
| 无论成功还是失败,是否将响应正文作为字典结果中的“content”键返回。 独立于此选项,如果报告的 选项 
 | |
| SELinux filesystem对象上下文的级别部分。 这是MLS/MCS属性,有时称为 设置为 | |
| SELinux filesystem对象上下文的角色部分。 设置为 | |
| SELinux filesystem对象上下文的类型部分。 设置为 | |
| SELinux filesystem对象上下文的用户部分。 默认情况下,它使用 设置为 | |
| 有效数字HTTP状态码列表,表示请求成功。 默认值:  | |
| 以秒为单位的套接字级别超时 默认值:  | |
| 要用于连接的Unix域套接字路径。 | |
| 不会在后续重定向请求中发送的标头名称列表。此列表不区分大小写。默认情况下,所有标头都将被重定向。在某些情况下,在此处列出 默认值:  | |
| 影响何时使用原子操作来防止数据损坏或目标filesystem对象的不一致读取。 默认情况下,此模块使用原子操作来防止数据损坏或目标filesystem对象的不一致读取,但有时系统配置或损坏的方式会阻止此操作。一个示例是docker挂载的filesystem对象,无法从容器内部以原子方式更新,只能以不安全的方式写入。 此选项允许Ansible在原子操作失败时回退到不安全的filesystem对象更新方法(但是,它不会强制Ansible执行不安全的写入)。 重要!不安全的写入容易出现竞争条件,并可能导致数据损坏。 选项 
 | |
| 形式为(http|https)://host.domain[:port]/path的HTTP或HTTPS URL。 | |
| 模块用于摘要、基本或WSSE身份验证的密码。 | |
| 模块用于摘要、基本或WSSE身份验证的用户名。 | |
| 使用GSSAPI执行身份验证,通常用于Kerberos或通过Negotiate身份验证的Kerberos。 需要安装Python库gssapi。 GSSAPI的凭据可以使用 即使已安装NTLM的GSSAPI机制,也不支持NTLM身份验证。 选项 
 | |
| 确定是否使用 默认情况下, 当 选项 
 | |
| 如果为 选项 
 | |
| 如果为 仅应在使用自签名证书的个人控制站点上将此设置为 在1.9.2之前,代码默认为 选项 
 | 
属性
| 属性 | 支持 | 描述 | 
|---|---|---|
| 支持:不支持 | 可以在check_mode下运行并返回更改状态预测,而无需修改目标,如果支持,则将跳过操作。 | |
| 支持:不支持 | 在差异模式下,将返回有关更改内容(或可能需要在check_mode下更改的内容)的详细信息 | |
| 平台: posix | 可以针对其进行操作的目标操作系统/系列 | 
注释
注意
- Ansible 2.1中删除了对httplib2的依赖。 
- 模块以小写形式返回所有HTTP标头。 
- 对于 Windows 目标,请改用 ansible.windows.win_uri 模块。 
另请参见
另请参见
- ansible.builtin.get_url
- 从HTTP、HTTPS或FTP下载文件到节点。 
- ansible.windows.win_uri
- **ansible.windows.win_uri**模块的官方文档。 
示例
- 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
        multipart_encoding: base64
      file2:
        content: text based file content
        filename: fake.txt
        mime_type: text/plain
        multipart_encoding: 7or8bit
      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'
返回值
常见的返回值已在此处记录,以下是此模块特有的字段
| Key | 描述 | 
|---|---|
| 响应正文内容。 返回值:状态不在status_code中或return_content为true 示例:  | |
| 放置在cookie存储中的cookie值。 返回值:成功时 示例:  | |
| 未来请求Cookie头的值。 返回值:成功时 示例:  | |
| 执行下载所花费的秒数。 返回值:成功时 示例:  | |
| 来自请求的HTTP消息。 返回值:始终返回 示例:  | |
| 目标文件/路径 返回值:定义了dest时 示例:  | |
| 请求是否被重定向。 返回值:成功时 示例:  | |
| 来自请求的HTTP状态码。 返回值:始终返回 示例:  | |
| 请求实际使用的URL。 返回值:始终返回 示例:  | 
