在Ansible中,shell模块是一个非常常用的模块,它允许你在目标主机上执行shell命令。以下是一些常用的shell模块的参数和示例:

参数说明

  • chdir: 在执行命令前切换到指定目录。
  • cmd: 要运行的命令及其参数。
  • creates: 如果指定的文件已存在,则不会运行此步骤。
  • executable: 更改用于执行命令的shell,需要指定到可执行文件的绝对路径。
  • free_form: 使用自由形式的命令字符串运行命令。
  • removes: 如果指定的文件不存在,则不会运行此步骤。
  • stdin: 设置命令的stdin为指定值。
  • warn: 是否启用任务警告。

示例

# 执行shell命令,并将标准输出重定向到远程文件
- name: Execute the command in remote shell; stdout goes to the specified file on the remote.
  shell: somescript.sh >> somelog.txt

# 更改工作目录后执行命令
- name: Change the working directory to somedir/ before executing the command.
  shell: somescript.sh >> somelog.txt
  args:
    chdir: somedir/

# 使用'cmd'参数代替自由形式格式
- name: This command will change the working directory to somedir/.
  shell:
    cmd: ls -l | grep log
    chdir: somedir/

# 运行使用非posix shell特性的命令
- name: Run a command that uses non-posix shell-isms.
  shell: cat < /tmp/*txt
  args:
    executable: /bin/bash

# 使用模板化变量运行命令
- name: Run a command using a templated variable.
  shell: cat {{ myfile|quote }}

# 运行其他可执行程序来执行操作
- name: Run expect to wait for a successful PXE boot via out-of-band CIMC.
  shell: |
    set timeout 300
    spawn ssh admin@{{ cimc_host }}
    # 更多expect脚本...
  args:
    executable: /usr/bin/expect

这些示例展示了如何使用shell模块来执行各种命令,包括如何使用参数来改变工作目录、指定shell解释器、重定向输出、使用变量等。shell模块因其灵活性而非常受欢迎,但也要注意避免潜在的注入风险和非幂等性问题。