Ansible——script模块

目录

特点

参数总结

[使用 ansible 命令](#使用 ansible 命令)

[1. 基本示例](#1. 基本示例)

[2. 传递参数](#2. 传递参数)

[3. 使用 creates 参数](#3. 使用 creates 参数)

[4. 使用 removes 参数](#4. 使用 removes 参数)

[示例 Playbook 文件](#示例 Playbook 文件)

基本语法

[1. 基本使用](#1. 基本使用)

[2. 传递参数](#2. 传递参数)

[3. 使用 creates 参数](#3. 使用 creates 参数)

[4. 使用 removes 参数](#4. 使用 removes 参数)

[5. 使用 register 捕获输出](#5. 使用 register 捕获输出)

[6. 使用 args 指定参数](#6. 使用 args 指定参数)


Ansible 的 script 模块是用来在远程主机上运行本地脚本文件的一个模块。它将本地脚本文件复制到目标主机上并执行。这个模块对于一些复杂操作性任务或者需要快速运行自定义脚本的场景非常有用。

特点

  • 脚本语言不限:可以是任何可执行的脚本,比如 Bash、Python、Perl 等。
  • 参数传递:允许传递参数给脚本。
  • 直接执行:无需考虑远程主机的具体环境,直接在远程主机上执行脚本。

参数总结

  1. chdir:

    • 描述:在执行脚本前更改到此目录。
    • 类型:字符串
    • 默认值:无
  2. creates:

    • 描述:仅在指定文件不存在时执行脚本。
    • 类型:字符串
    • 默认值:无
  3. executable:

    • 描述:用于执行脚本的可执行程序(例如 bash, python, ruby 等)。
    • 类型:字符串
    • 默认值:无
  4. removes:

    • 描述:仅在指定文件存在时执行脚本。
    • 类型:字符串
    • 默认值:无
  5. stdin:

    • 描述:为脚本提供标准输入。
    • 类型:字符串
    • 默认值:无
  6. stdin_add_newline:

    • 描述:如果为 yes,则在标准输入数据末尾添加一个新行。
    • 类型:布尔值
    • 默认值:yes
  7. strip_empty_ends:

    • 描述:如果为 yes,则从标准输入数据的两端移除空行。
    • 类型:布尔值
    • 默认值:no
  8. cmd:

    • 描述:要执行的本地脚本的路径和可选参数。
    • 类型:字符串或列表
    • 必需:是

使用 ansible 命令

1. 基本示例

在远程主机上运行本地脚本 my_script.sh

复制代码
ansible all -m script -a "/path/to/my_script.sh"
2. 传递参数

在远程主机上运行本地脚本 my_script.sh 并传递参数:

复制代码
ansible all -m script -a "/path/to/my_script.sh --option value"
3. 使用 creates 参数

只有在远程主机上不存在 /tmp/myfile 时才运行脚本:

复制代码
ansible all -m script -a "creates=/tmp/myfile /path/to/my_script.sh"
4. 使用 removes 参数

只有在远程主机上存在 /tmp/myfile 时才运行脚本:

复制代码
ansible all -m script -a "removes=/tmp/myfile /path/to/my_script.sh"

示例 Playbook 文件

基本语法

一个典型的 script 模块结构如下:

复制代码
- name: Description of the task
  script: /path/to/local/script.sh

还可以添加多个可选参数,如 createsremoves,来条件化执行脚本。

1. 基本使用

在远程主机上执行脚本 my_script.sh

复制代码
---
- name: Run basic script
  hosts: all
  tasks:
    - name: Execute the script
      script: /path/to/my_script.sh
2. 传递参数

在远程主机上执行脚本 my_script.sh 并传递参数:

复制代码
---
- name: Run script with arguments
  hosts: all
  tasks:
    - name: Execute the script with arguments
      script: /path/to/my_script.sh --option value
3. 使用 creates 参数

只有在远程主机上不存在 /tmp/myfile 文件时才执行脚本:

复制代码
---
- name: Conditionally run script if file does not exist
  hosts: all
  tasks:
    - name: Execute the script if file does not exist
      script:
        path: /path/to/my_script.sh
        creates: /tmp/myfile
4. 使用 removes 参数

只有在远程主机上存在 /tmp/myfile 文件时才执行脚本:

复制代码
---
- name: Conditionally run script if file exists
  hosts: all
  tasks:
    - name: Execute the script if file exists
      script:
        path: /path/to/my_script.sh
        removes: /tmp/myfile
5. 使用 register 捕获输出

捕获脚本执行的输出并在后续任务中使用:

复制代码
---
- name: Capture script output
  hosts: all
  tasks:
    - name: Run script and capture output
      script: /path/to/my_script.sh
      register: script_output

    - name: Print script output
      debug:
        var: script_output.stdout
6. 使用 args 指定参数

在脚本中指定额外参数:

复制代码
---
- name: Run script with specific arguments
  hosts: all
  tasks:
    - name: Execute the script with multiple arguments
      script:
        path: /path/to/my_script.sh
        args:
          creates: /tmp/myfile
          removes: /tmp/removefile
相关推荐
100编程朱老师3 分钟前
面试:什么叫Linux多路复用 ?
linux·运维·服务器
miracletiger32 分钟前
uv 新的包管理工具总结
linux·人工智能·python
enyp8033 分钟前
麒麟系统(基于Ubuntu)上使用Qt编译时遇到“type_traits文件未找到”的错误
linux·qt·ubuntu
struggle20251 小时前
LinuxAgent开源程序是一款智能运维助手,通过接入 DeepSeek API 实现对 Linux 终端的自然语言控制,帮助用户更高效地进行系统运维工作
linux·运维·服务器·人工智能·自动化·deepseek
无敌小茶2 小时前
Linux学习笔记之动静态库
linux·笔记
程序员JerrySUN3 小时前
驱动开发硬核特训 · Day 21(上篇) 抽象理解 Linux 子系统:内核工程师的视角
java·linux·驱动开发
雨声不在3 小时前
debian切换用户
linux·服务器·debian
不知名。。。。。。。。4 小时前
Linux—— 版本控制器Git
linux·运维·git
内网渗透4 小时前
OpenWrt 与 Docker:打造轻量级容器化应用平台技术分享
linux·docker·容器·openwrt·软路由
易保山5 小时前
MIT6.S081 - Lab11 networking(网络栈)
linux·操作系统·c