Ansible Script 模块
发布于2026-08-13 阅读(0)
{"position":0,"title":"介绍","layout":"doc-fullscreen","text":"## 介绍nn在本实验中,你将学习如何使用 Ansible 的 Script 模块在远程主机上执行自定义脚本。Script 模块允许你在目标主机上运行用任何编程语言编写的脚本,为你的自动化任务提供了灵活性和定制选项。n","need_verify":false,"has_solution":false},{"position":1,"title":"执行一个简单的脚本","layout":"doc-workbench-split","text":"## 执行一个简单的脚本nn在这一步中,你将使用 Ansible 的 Script 模块在远程主机上执行一个简单的脚本。nn首先,创建一个新的 Ansible playbook 文件,命名为 `/home/labex/project/script-module-playbook.yaml`,并在文本编辑器中打开它。 n将以下内容添加到 playbook 文件中:nn```yamln- hosts: localhostn tasks:n - name: Execute a simple scriptn script: /home/labex/project/simple_script.shn register: script_outputnn - name: Display script outputn debug:n var: script_output.stdout_linesn```nn- `hosts`:指定运行 playbook 的目标主机。在本例中,playbook 将在本地主机上运行,因为目标主机是 "localhost"。n- `tasks`:这是要执行的任务列表。n- `name`:任务的描述性名称,用来说明这一项的用途。n- `script`:任务真正执行的命令。它会指示 Ansible 在目标主机上运行 `/home/labex/project/` 目录下的 `simple_script.sh` 脚本。n- `register`:把脚本的输出保存到 `script_output` 变量中,方便后续在 playbook 里继续使用。n- `debug`:Ansible 里用于输出调试信息的模块。n- `var`:`debug` 模块的参数,用来显示上一个任务里脚本的标准输出。`script_output.stdout_lines` 则包含了脚本输出的每一行。nn总结一下,这个 playbook 的核心目的,就是在本地主机上运行一个脚本,并在脚本执行后显示它的标准输出。`script_output` 这个注册变量会保存脚本结果,随后再用 Debug 模块把它打印出来。nn接下来,创建一个简单的脚本文件,命名为 `/home/labex/project/simple_script.sh`,内容如下:nn```bashn#!/bin/bashnecho "This is a simple script."n```nn确保这个脚本文件具备可执行权限(`chmod +x simple_script.sh`),并把它放到 playbook 中指定的 `/home/labex/project/` 目录下。nn最后,使用以下命令运行 playbook:nn```bashnchmod +x simple_script.shnansible-playbook script-module-playbook.yamln```nn观察 playbook 执行输出中显示的脚本结果。 n示例输出:nn```bashn...nPLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Execute a simple script] *************************************************
changed: [localhost]
TASK [Display script output] ***************************************************
ok: [localhost] => {
"script_output.stdout_lines": [
"This is a simple script."
]
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
```
这里的 `"This is a simple script."` 是 `simple_script.sh` 脚本的输出。
","need_verify":true,"has_solution":false},{"position":2,"title":"向脚本传递变量"},"layout":"doc-workbench-split","text":"## 向脚本传递变量nn在这一步中,你将学习如何从 Ansible playbook 向使用 Script 模块执行的脚本传递变量。nn首先,修改现有的 playbook 文件,删除所有内容并添加以下内容到 playbook 文件中:nn```yamln- hosts: localhostn tasks:n - name: Execute script with a variablen script: /home/labex/project/var_script.sh "{{ message }}"n register: variable_script_outputnn - name: Display variable script outputn debug:n var: variable_script_output.stdout_linesn```nn- `script`:这是任务实际执行的命令。`{{ message }}` 是一个传递给脚本的变量。双花括号表示这是一个 Ansible 变量,其值将在执行时动态替换。n- `register`:这将脚本的输出注册到变量 `variable_script_output` 中,以便稍后在 playbook 中使用。n- `debug`:这是用于打印调试信息的 Ansible 模块。n- `var`:这是 debug 模块的参数,用于显示上一个任务中脚本的标准输出。`variable_script_output.stdout_lines` 包含脚本输出的每一行。nn总结来说,这个 playbook 在本地主机上执行一个脚本,并向脚本传递一个名为 `message` 的变量。脚本的输出被注册到变量 `variable_script_output` 中,然后使用 debug 模块打印出来。nn接下来,创建一个简单的脚本文件,命名为 `/home/labex/project/var_script.sh`,内容如下:nn```bashn#!/bin/bashnecho $1n```nn确保脚本文件具有可执行权限(`chmod +x var_script.sh`),并将脚本文件放置在 playbook 中指定的 `/home/labex/project/` 目录下。nn最后,在运行 playbook 时,通过 `-e` 选项传递 `message` 变量作为额外变量:nn```bashnchmod +x var_script.shnansible-playbook script-module-playbook.yaml -e "message=Hello,Ansible"n```nn观察脚本的输出,其中包含提供的消息。 n示例输出:nn```bashn...nPLAY [localhost] ***************************************************************nnTASK [Gathering Facts] *********************************************************nok: [localhost]nnTASK [Execute script with a variable] ******************************************nchanged: [localhost]nnTASK [Display variable script output] ******************************************nok: [localhost] => {n "variable_script_output.stdout_lines": [n "Hello,Ansible"n ]n}nnPLAY RECAP *********************************************************************nlocalhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0n```nn这里的 `"Hello,Ansible"` 是 `simple_script.sh` 脚本的输出。n","need_verify":true,"has_solution":false},{"position":3,"title":"处理脚本失败","layout":"doc-workbench-split","text":"## 处理脚本失败nn在这一步中,你将学习如何在使用 Script 模块执行脚本时处理脚本失败的情况。你将处理脚本返回非零退出状态(表示失败)的情况。nn首先,修改现有的 playbook 文件,删除所有内容并添加以下内容到 playbook 文件中:nn```yamln- hosts: localhostn tasks:n - name: Execute a failing scriptn script: /home/labex/project/failing_script.shn register: failing_script_outputn ignore_errors: yesnn - name: Handle script failuren debug:n msg: "The script failed. Performing fallback action."n when: failing_script_output.failedn```nn- `script`:这是任务实际执行的命令。n- `register`:这将脚本的输出注册到变量 `failing_script_output` 中,以便稍后在 playbook 中使用。n- `ignore_errors`:此参数设置为 `yes`,以允许 Ansible 在脚本任务失败时继续执行后续任务。失败将被记录在 `failing_script_output` 变量中。n- `debug`:这是用于打印调试信息的 Ansible 模块。n- `msg`:这是 debug 模块的参数,用于打印一条消息,指示脚本已失败。此任务仅在上一任务(`failing_script_output`)失败时执行。n- `when`:此条件确保仅在第一个任务中的脚本失败时执行此任务。如果脚本成功,此任务将被跳过。nn总结来说,这个 playbook 尝试执行一个可能失败的脚本。如果脚本失败,playbook 会通过打印调试消息并执行回退操作来处理失败。`ignore_errors: yes` 参数允许 playbook 在脚本失败时继续执行,而条件 `when: failing_script_output.failed` 确保仅在需要时执行处理任务。nn接下来,创建一个失败的脚本文件,命名为 `/home/labex/project/failing_script.sh`,内容如下:nn```bashn#!/bin/bashnexit 1n```nn确保脚本文件具有可执行权限(`chmod +x failing_script.sh`),并将脚本文件放置在 playbook 中指定的 `/home/labex/project/` 目录下。nn最后,运行 playbook 并观察失败的脚本被执行,但由于 `ignore_errors: yes` 而被忽略。nn```bashnchmod +x failing_script.shnansible-playbook script-module-playbook.yamln```nnplaybook 将显示一条调试消息,指示失败并执行回退操作。 n示例输出:nn```bashn...nPLAY [localhost] ***************************************************************nnTASK [Gathering Facts] *********************************************************nok: [localhost]nnTASK [Execute a failing script] ************************************************nfatal: [localhost]: FAILED! => {"changed": true, "msg": "non-zero return code", "rc": 1, "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}n...ignoringnnTASK [Handle script failure] ***************************************************nok: [localhost] => {n "msg": "The script failed. Performing fallback action."n}nnPLAY RECAP *********************************************************************nlocalhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1n```nn`"msg": "The script failed. Performing fallback action."` 表示 `failing_script.sh` 脚本执行失败。n","need_verify":true,"has_solution":false},{"position":4,"title":"总结","layout":"doc-fullscreen","text":"## 总结nn恭喜!你已经成功完成了 Ansible Script 模块的实验。你学习了如何使用 Script 模块在远程主机上执行自定义脚本、向脚本传递变量以及处理脚本失败的情况。nnScript 模块通过允许你利用自定义脚本的强大功能,为你的自动化任务提供了极大的灵活性和定制选项。然而,请确保编写安全可靠的脚本,并验证所有输入以防止安全漏洞。nn现在你已经对 Script 模块有了很好的理解,可以将其集成到你的 Ansible playbook 中,以自动化各种任务并实现更高级的自动化场景。祝你使用 Ansible 编写脚本愉快!n","need_verify":false,"has_solution":false}
本文转载于:https://labex.io/zh/tutorials/ansible-ansible-script-module-289411 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。