介绍
欢迎来到 Ansible Local Action 模块实验!在本实验中,你将深入学习 Ansible Local Action 模块的使用。Local Action 模块允许你在执行 Ansible 的控制机器上运行任务。这在需要本地执行操作时非常有用,例如执行 shell 命令或运行脚本。
让我们开始吧!
欢迎来到 Ansible Local Action 模块实验!在本实验中,你将深入学习 Ansible Local Action 模块的使用。Local Action 模块允许你在执行 Ansible 的控制机器上运行任务。这在需要本地执行操作时非常有用,例如执行 shell 命令或运行脚本。
让我们开始吧!
在这一步中,你将学习如何使用 Ansible Local Action 模块在控制机器上执行一个简单的命令。这将帮助你理解该模块的基本用法和语法。
首先,完成 /home/labex/project/execute_local_command.yml
文件。
在 playbook 文件中添加以下内容:
- name: Executing a Simple Command Locally
gather_facts: false
hosts: localhost
tasks:
- name: Print a message locally
local_action:
module: command
cmd: echo "Hello, World!"
register: result
- name: Debug the output
debug:
var: result.stdout
gather_facts
:指定 Ansible 是否应收集目标主机的事实信息。在这里设置为 false
,表示不收集事实信息。hosts
:指定运行 playbook 的目标主机。在这里,目标主机是 localhost
,因此 playbook 将在本地主机上运行。tasks
:这是要执行的任务列表。local_action
:表示操作应在运行 Ansible 的控制机器上本地执行。module
:指定用于操作的 Ansible 模块。在这里使用的是 command
模块。cmd
:这是要执行的实际命令。在这里是 shell 命令 echo "Hello, World!"
,它将在控制台打印消息 "Hello, World!"。register
:将命令的输出注册到 result
变量中,以便在 playbook 中后续使用。debug
:这是用于打印调试信息的 Ansible 模块。var
:这是 debug
模块的参数,用于指定要调试的变量。在这里是 result.stdout
,它包含上一个任务中执行的命令的标准输出。总结来说,这个 playbook 在控制机器上本地执行了一个简单的命令 echo "Hello, World!"
,注册了输出,然后使用 debug
模块打印输出。
接下来,显示 Ansible playbook 中命令的输出。
ansible-playbook /home/labex/project/execute_local_command.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 [Local Action Module Challenge] *******************************************
TASK [Print a message locally] *************************************************
changed: [localhost]
TASK [Debug the output] ********************************************************
ok: [localhost] => {
"result.stdout": "Hello, World!"
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
在这里,"result.stdout": "Hello, World!"
是 echo "Hello, World!"
命令的输出。
在这一步中,你将通过引入变量替换来加深对 Local Action 模块的理解。这将允许你根据 playbook 中定义的变量动态更改要执行的命令。
首先,完成 /home/labex/project/execute_command_with_variable_substitution.yml
文件。
在 playbook 文件中添加以下内容:
- name: Executing a Command with Variable Substitution
gather_facts: false
hosts: localhost
vars:
message: "Hello, Ansible!"
tasks:
- name: Print a message with variable substitution
local_action:
module: command
cmd: echo "{{ message }}"
register: result
- name: Debug the output
debug:
var: result.stdout
vars
:此部分用于定义变量。在这个 playbook 中,它定义了一个名为 message
的变量,其值为 "Hello, Ansible!"
。local_action
:表示操作应在运行 Ansible 的控制机器上本地执行。module
:指定用于操作的 Ansible 模块。在这里使用的是 command
模块。cmd
:这是要执行的实际命令。在这里是 shell 命令 echo "{{ message }}"
,其中 {{ message }}
会被替换为之前定义的 message
变量的值。register
:将命令的输出注册到 result
变量中,以便在 playbook 中后续使用。debug
:这是用于打印调试信息的 Ansible 模块。var
:这是 debug
模块的参数,用于指定要调试的变量。在这里是 result.stdout
,它包含上一个任务中执行的命令的标准输出。总结来说,这个 playbook 在控制机器上本地执行了命令 echo "{{ message }}"
,其中 {{ message }}
被替换为 vars
部分中定义的 message
变量的值。它注册了命令的输出,然后使用 debug
模块打印输出。
接下来,显示 Ansible playbook 中命令的输出。
ansible-playbook /home/labex/project/execute_command_with_variable_substitution.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 [Local Action Module Challenge] *******************************************
TASK [Print a message with variable substitution] ******************************
changed: [localhost]
TASK [Debug the output] ********************************************************
ok: [localhost] => {
"result.stdout": "Hello, Ansible!"
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
在这里,"result.stdout": "Hello, Ansible!"
是 echo "{{ message }}"
命令的输出。
在这一步中,你将探索 Ansible Local Action 模块的更复杂用法。你将在本地执行一个 shell 脚本,并向脚本传递参数。
首先,完成 /home/labex/project/execute_complex_local_action.yml
文件。
在 playbook 文件中添加以下内容:
- name: Executing a Complex Local Action
gather_facts: false
hosts: localhost
tasks:
- name: Execute a shell script with arguments
local_action:
module: shell
cmd: ./script.sh 5 7
register: result
- name: Debug the output
debug:
var: result.stdout
local_action
:表示操作应在运行 Ansible 的控制机器上本地执行。module
:指定用于操作的 Ansible 模块。在这里使用的是 shell
模块。cmd
:这是要执行的实际 shell 命令。在这里是 ./script.sh 5 7
,它执行一个名为 script.sh
的 shell 脚本,并传递参数 5
和 7
。register
:将命令的输出注册到 result
变量中,以便在 playbook 中后续使用。debug
:这是用于打印调试信息的 Ansible 模块。var
:这是 debug
模块的参数,用于指定要调试的变量。在这里是 result.stdout
,它包含上一个任务中执行的命令的标准输出。总结来说,这个 playbook 在控制机器上本地执行了一个 shell 脚本 script.sh
,并传递了参数 5
和 7
。它注册了脚本的输出,然后使用 debug
模块打印输出。
提示: 我们已经为你准备好了这个 shell 脚本,它位于
/home/labex/project/
目录下,名为script.sh
。该脚本的功能是计算两个参数的和。
接下来,显示 Ansible playbook 中命令的输出。
ansible-playbook /home/labex/project/execute_complex_local_action.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 [Local Action Module Challenge] *******************************************
TASK [Execute a shell script with arguments] ***********************************
changed: [localhost]
TASK [Debug the output] ********************************************************
ok: [localhost] => {
"result.stdout": "The sum of 5 and 7 is 12."
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
在这里,"result.stdout": "The sum of 5 and 7 is 12."
是 ./script.sh 5 7
脚本的输出。
恭喜你完成了 Ansible Local Action 模块实验!在本实验中,你学习了如何使用 Ansible Local Action 模块在本地执行命令和脚本。从简单的命令执行开始,你逐步掌握了变量替换以及执行带参数的复杂 shell 脚本。
通过完成本实验,你获得了利用 Local Action 模块在控制机器上执行任务的宝贵经验。继续探索 Ansible 及其模块,进一步提升你的自动化能力。
祝你自动化愉快!