介绍
欢迎来到 Ansible Fetch 模块实验!在本实验中,你将深入学习 Ansible Fetch 模块的使用。Fetch 模块允许你从远程机器上检索文件,并将其复制到执行 Ansible 的控制机器上。当你需要从托管主机收集特定文件或工件时,这非常有用。
让我们开始吧!
欢迎来到 Ansible Fetch 模块实验!在本实验中,你将深入学习 Ansible Fetch 模块的使用。Fetch 模块允许你从远程机器上检索文件,并将其复制到执行 Ansible 的控制机器上。当你需要从托管主机收集特定文件或工件时,这非常有用。
让我们开始吧!
在这一步中,你将学习如何使用 Ansible 的 Fetch 模块从远程机器上获取单个文件。这将帮助你理解该模块的基本用法和语法。
首先,完成 /home/labex/project/fetching_a_single_file.yml
文件。
在文本编辑器中打开它,并将以下内容添加到 playbook 文件中:
- name: Fetch Module Lab
hosts: localhost
gather_facts: false
tasks:
- name: Fetch a single file
fetch:
src: /home/labex/example/example_1.txt
dest: /home/labex/project/example_1.txt
flat: true
fetch
:这是用于从远程主机获取文件的 Ansible 模块。src
:指定需要获取的远程主机上文件的路径。在本例中,路径为 /home/labex/example/example_1.txt
。dest
:指定获取的文件在本地主机上的存储路径。在本例中,路径为 /home/labex/project/example_1.txt
。flat
:此参数控制目标路径的行为。当设置为 true
时,确保获取的文件直接放置在目标目录中,而不会创建任何子目录。这在获取单个文件并希望保持目录结构简单时非常有用。Ansible 中的 fetch
模块用于将文件从远程主机获取到本地主机。在此配置中,它用于从远程主机的 /home/labex/example/
目录中获取名为 "example_1.txt" 的文件,并将其存储为本地主机 /home/labex/project/
目录中的 "example_1.txt"。flat: true
参数确保获取的文件直接放置在目标目录中,而不会创建任何子目录。
然后,使用以下命令运行 playbook:
ansible-playbook fetching_a_single_file.yml
示例输出:
[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 [Fetch Module Lab] **************************************************
TASK [Fetch a single file] *****************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
最后,验证 example_1.txt
文件是否已从远程主机成功获取到本地。
ll /home/labex/project/example_1.txt
示例输出:
-rw-rw-r-- 1 labex labex 23 Mar 14 10:45 /home/labex/project/example_1.txt
在这一步中,你将通过从远程机器获取多个文件来加深对 Fetch 模块的理解。这将允许你在单个任务中收集多个文件。
首先,完成 /home/labex/project/fetching_multiple_files.yml
文件。
在文本编辑器中打开它,并将以下内容添加到 playbook 文件中:
- name: Fetch Module Lab
hosts: localhost
gather_facts: false
tasks:
- name: Fetch multiple files
loop:
- example_2.txt
- example_3.txt
fetch:
src: "/home/labex/example/{{ item }}"
dest: "/home/labex/project/{{ item }}"
flat: true
loop
:此关键字用于遍历项目列表。fetch
:这是用于从远程主机获取文件的 Ansible 模块。src
:指定要获取的文件的源路径。{{ item }}
占位符会被循环中的每个项目替换,从而从 /home/labex/example/
目录中获取 example_2.txt
和 example_3.txt
。dest
:指定获取的文件在本地主机上的存储路径。同样,{{ item }}
占位符用于确保每个文件被放置在 /home/labex/project/
中的相应目录中。flat
:此参数控制目标路径的行为。当设置为 true
时,确保获取的文件直接放置在目标目录中,而不会创建任何子目录。这在获取单个文件并希望保持目录结构简单时非常有用。在此配置中,它用于从本地主机的 /home/labex/example/
目录中获取多个文件(example_2.txt
和 example_3.txt
),并将它们存储在 /home/labex/project/
中的相应目录中。loop
结构允许遍历项目列表,并为列表中的每个项目执行获取操作。
然后,使用以下命令运行 playbook:
ansible-playbook fetching_multiple_files.yml
示例输出:
[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 [Fetch Module Lab] **************************************************
TASK [Fetch multiple files] ****************************************************
changed: [localhost] => (item=example_2.txt)
changed: [localhost] => (item=example_3.txt)
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
最后,验证 example_2.txt
和 example_3.txt
是否已从远程主机成功获取到本地。
ll /home/labex/project/ | grep example
示例输出:
-rw-rw-r-- 1 labex labex 23 Mar 14 10:45 example_1.txt
-rw-rw-r-- 1 labex labex 23 Mar 14 11:00 example_2.txt
-rw-rw-r-- 1 labex labex 23 Mar 14 11:00 example_3.txt
在这一步中,你将通过引入变量来探索 Ansible Fetch 模块的更高级用法。你将根据 playbook 中定义的动态值获取文件。
首先,完成 /home/labex/project/using_variablesin_fetch_modules.yml
文件。
在文本编辑器中打开它,并将以下内容添加到 playbook 文件中:
- name: Fetch Module Lab
hosts: localhost
gather_facts: false
vars:
file_path: "/home/labex/example/example_4.txt"
dest_path: "/home/labex/project/example_4.txt"
tasks:
- name: Fetch files using variables
fetch:
src: "{{ file_path }}"
dest: "{{ dest_path }}"
flat: true
vars
:此部分允许定义在 playbook 中使用的变量。fetch
:这是用于从远程主机获取文件的 Ansible 模块。src
:指定要获取的文件的源路径。它使用 file_path
变量动态提供源文件路径。dest
:指定获取的文件在本地主机上的存储路径。它使用 dest_path
变量动态提供目标文件路径。flat
:此参数控制目标路径的行为。当设置为 true
时,确保获取的文件直接放置在目标目录中,而不会创建任何子目录。这在获取单个文件并希望保持目录结构简单时非常有用。在此配置中,它用于从远程主机的源文件路径(file_path
变量)获取文件,并将其存储在本地 Ansible 控制节点的目标文件路径(dest_path
变量)中。使用变量可以动态指定文件路径,从而为 playbook 提供灵活性和可重用性。
然后,使用以下命令运行 playbook:
ansible-playbook using_variablesin_fetch_modules.yml
示例输出:
[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 [Fetch Module Lab] **************************************************
TASK [Fetch files using variables] *********************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
接下来,验证 example_4.txt
文件是否已从远程主机成功获取到本地。
ll /home/labex/project/example_4.txt
示例输出:
-rw-rw-r-- 1 labex labex 23 Mar 14 11:16 /home/labex/project/example_4.txt
最后,尝试使用 -e
选项指定 file_path
和 dest_path
:
ansible-playbook using_variablesin_fetch_modules.yml -e file_path="/tmp/example_5.txt" -e dest_path="/tmp/target/example_5.txt"
示例输出:
[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 [Fetch Module Lab] **************************************************
TASK [Fetch files using variables] *********************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
验证 example_5.txt
文件是否已从远程主机成功获取到本地。
ll /tmp/target/example_5.txt
示例输出:
-rw-rw-r-- 1 labex labex 23 Mar 14 11:24 /tmp/target/example_5.txt
恭喜你完成了 Ansible Fetch 模块实验!在本实验中,你学习了如何使用 Ansible 的 Fetch 模块从远程机器获取文件并将其复制到控制机器。从获取单个文件开始,你逐步掌握了获取多个文件以及使用变量实现动态文件获取的方法。
通过完成本实验,你获得了利用 Fetch 模块从托管主机收集特定文件或工件的宝贵经验。继续探索 Ansible 及其模块,以进一步提升你的自动化能力。
祝你自动化愉快!