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
相关推荐
chlk1234 小时前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑5 小时前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件5 小时前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号15 小时前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash19 小时前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI1 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行2 天前
Linux和window共享文件夹
linux
木心月转码ing2 天前
WSL+Cpp开发环境配置
linux
崔小汤呀3 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
何中应3 天前
vi编辑器使用
linux·后端·操作系统