Ansible get_url 模块

AnsibleAnsibleBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在本实验中,你将探索 Ansible 的 get_url 模块,该模块允许你从互联网下载文件并将其保存到远程主机上。get_url 模块提供了多种选项来定制下载过程,包括身份验证、请求头和校验和验证。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible(("Ansible")) -.-> ansible/PlaybookEssentialsGroup(["Playbook Essentials"]) ansible/ModuleOperationsGroup -.-> ansible/get_url("Download URL") ansible/ModuleOperationsGroup -.-> ansible/shell("Execute Shell Commands") ansible/ModuleOperationsGroup -.-> ansible/template("Generate Files from Templates") ansible/PlaybookEssentialsGroup -.-> ansible/playbook("Execute Playbook") subgraph Lab Skills ansible/get_url -.-> lab-290188{{"Ansible get_url 模块"}} ansible/shell -.-> lab-290188{{"Ansible get_url 模块"}} ansible/template -.-> lab-290188{{"Ansible get_url 模块"}} ansible/playbook -.-> lab-290188{{"Ansible get_url 模块"}} end

从 URL 下载文件

在这一步中,你将使用 Ansible 的 get_url 模块从 URL 下载文件并将其保存到远程主机上。

首先,创建一个新的 Ansible playbook 文件,命名为 /home/labex/project/get_url-module-playbook.yaml,并在文本编辑器中打开它。
将以下内容添加到 playbook 文件中:

- hosts: localhost
  tasks:
    - name: Download a file from a URL
      get_url:
        url: "https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz"
        dest: "/tmp/ansible-2.9.25.tar.gz"
  • hosts:指定运行 playbook 的目标主机。在本例中,playbook 将在本地主机上运行,因为目标主机是 localhost
  • tasks:这是要运行的任务列表。
  • name:这是任务的描述性名称,用于标识任务的用途。
  • get_url:这是 Ansible 中的一个模块,用于从互联网下载文件。
  • url:此参数指定要下载文件的 URL。在本例中,它从官方 Ansible 发布页面下载 Ansible 2.9.25 版本。
  • dest:此参数指定目标主机上保存下载文件的目标路径。在本例中,文件将保存到 /tmp/ansible-2.9.25.tar.gz

总结来说,这个 playbook 从指定的 URL 下载 Ansible 2.9.25 的压缩包,并将其保存到本地主机的 /tmp/ansible-2.9.25.tar.gz

然后,使用以下命令运行 playbook:

ansible-playbook get_url-module-playbook.yaml

观察输出,确认文件是否成功下载并保存到远程主机。
示例输出:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Download a file from a URL] **********************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

验证文件是否已成功下载并保存到远程主机。

ll /tmp/ansible-2.9.25.tar.gz

示例输出:

-rw-rw-r-- 1 labex labex 14M Mar 15 13:03 /tmp/ansible-2.9.25.tar.gz

自定义 HTTP 请求头

在这一步中,你将使用 Ansible 的 get_url 模块自定义文件下载过程中发送的 HTTP 请求头。

首先,修改现有的 playbook 文件,删除所有内容并添加以下内容到 playbook 文件中:

- hosts: localhost
  tasks:
    - name: Download a file from a URL with custom headers
      get_url:
        url: "https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz"
        dest: "/tmp/ansible-2.9.25-1.tar.gz"
        headers:
          Custom-Header-1: Value1
          Custom-Header-2: Value2
  • get_url:这是 Ansible 中的一个模块,用于从互联网下载文件。
  • url:此参数指定要下载文件的 URL。在本例中,它从官方 Ansible 发布页面下载 Ansible 2.9.25 版本。
  • dest:此参数指定目标主机上保存下载文件的目标路径。在本例中,文件将保存到 /tmp/ansible-2.9.25-1.tar.gz
  • headers:这是一个可选参数,允许你指定在下载文件时发送到服务器的 HTTP 请求中包含的自定义请求头。在本例中,它设置为包含两个自定义请求头:Custom-Header-1 的值为 Value1Custom-Header-2 的值为 Value2。这些请求头可能用于身份验证、授权或文件托管服务器所需的其他用途。

总结来说,这个 playbook 将从指定的 URL 下载 Ansible 2.9.25 的压缩包,并在 HTTP 请求中包含自定义请求头,然后将其保存到本地主机的 /tmp 目录下,文件名为 ansible-2.9.25-1.tar.gz

然后,使用以下命令运行 playbook:

ansible-playbook get_url-module-playbook.yaml

观察输出,确认文件是否成功下载并保存到远程主机,并检查自定义请求头是否包含在 HTTP 请求中。
示例输出:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [localhost] **************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Download a file from a URL with custom headers] **************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

验证文件是否已成功下载并保存到远程主机。

ll /tmp/ansible-2.9.25-1.tar.gz

示例输出:

-rw-rw-r-- 1 labex labex 14M Mar 15 13:17 /tmp/ansible-2.9.25-1.tar.gz

使用校验和验证文件完整性

在这一步中,你将使用 Ansible 的 get_url 模块通过校验和验证下载文件的完整性。

首先,修改现有的 playbook 文件,删除所有内容并添加以下内容到 playbook 文件中:

- hosts: localhost
  tasks:
    - name: Download a file and verify checksum
      get_url:
        url: "https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz"
        dest: "/tmp/ansible-2.9.25-2.tar.gz"
        checksum: "sha256:https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz.sha"
  • get_url:这是 Ansible 中的一个模块,用于从互联网下载文件。
  • url:此参数指定要下载文件的 URL。在本例中,它从官方 Ansible 发布页面下载 Ansible 2.9.25 版本。
  • dest:此参数指定目标主机上保存下载文件的目标路径。在本例中,文件将保存到 /tmp/ansible-2.9.25-2.tar.gz
  • checksum:此参数用于指定下载文件的校验和及其类型。在本例中,它设置为 sha256:https://releases.ansible.com/ansible/ansible-2.9.25.tar.gz.sha,表示 Ansible 应使用指定 URL 提供的校验和验证下载文件的 SHA256 校验和。这确保了下载文件的完整性。

总结来说,这个 playbook 将从指定的 URL 下载 Ansible 2.9.25 的压缩包,将其保存到本地主机的 /tmp 目录下,文件名为 ansible-2.9.25-2.tar.gz,并通过与指定 URL 提供的校验和进行比较来验证其完整性。

然后,使用以下命令运行 playbook:

ansible-playbook get_url-module-playbook.yaml

观察输出,确认文件是否成功下载并保存到远程主机,并检查校验和验证是否通过。
示例输出:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Download a file and verify checksum] *************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

验证文件是否已成功下载并保存到远程主机。

ll /tmp/ansible-2.9.25-2.tar.gz

示例输出:

-rw-rw-r-- 1 labex labex 14M Mar 15 13:31 /tmp/ansible-2.9.25-2.tar.gz

总结

恭喜!你已成功完成 Ansible get_url 模块的实验。你学会了如何从 URL 下载文件、将其保存到远程主机、自定义 HTTP 请求头以及使用校验和验证文件完整性。

get_url 模块是一个多功能工具,可以帮助你自动化文件下载并处理下载过程中的各种细节。通过掌握这些知识,你可以增强你的 Ansible playbook,并高效地管理基础设施中的文件分发。

继续探索 Ansible 文档并尝试使用不同的模块,以扩展你的自动化能力。祝你玩转 Ansible!