ansible-全模块文档之shell

ansible模块shell

功能: 和command功能类似,用来在受控机中执行shell命令

常用参数:

- name: Execute shell commands on targets
   shell:
     chdir: # Change into this directory before running the command.
     cmd: # The command to run followed by optional arguments.
     creates: # A filename, when it already exists, this step will *not* be run.
     executable: # Change the shell used to execute the command. This expects an absolute path to the executable.
     free_form: # The shell module takes a free form command to run, as a string. There is no actual parameter named
     'free form'. See the examples on how to use this module.
     removes: # A filename, when it does not exist, this step will *not* be run.
     stdin: # Set the stdin of the command directly to the specified value.
     stdin_add_newline: # Whether to append a newline to stdin data.
     warn: # Whether to enable task warnings.

Ad-hoc示例:

ansible host -m shell -a 'ps'

ansible-playbook示例:

- 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/

# You can also use the 'args' form to provide the options.
- name: This command will change the working directory to somedir/ and will only run when somedir/somelog.txt doesn't exist.
  shell: somescript.sh >> somelog.txt
  args:
    chdir: somedir/
    creates: somelog.txt

# You can also use the 'cmd' parameter instead of free form format.
- name: This command will change the working directory to somedir/.
  shell:
    cmd: ls -l | grep log
    chdir: somedir/

- name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)
  shell: cat < /tmp/*txt
  args:
    executable: /bin/bash

- name: Run a command using a templated variable (always use quote filter to avoid injection)
  shell: cat {{ myfile|quote }}

# You can use shell to run other executables to perform actions inline
- 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 "password:"
    send "{{ cimc_password }}\n"

    expect "\n{{ cimc_name }}"
    send "connect host\n"

    expect "pxeboot.n12"
    send "\n"

    exit 0
  args:
    executable: /usr/bin/expect
    delegate_to: localhost

# Disabling warnings
- name: Using curl to connect to a host via SOCKS proxy (unsupported in uri). Ordinarily this would throw a warning.
  shell: curl --socks5 localhost:9000 http://www.ansible.com
  args:
    warn: noyamml

注意:

使用 command 模块时,不得出现 shell 变量 $name ,也不得使用特殊符号 > < | ; & 等,如果需要使用前面的特殊符号则可以使用 shell 模块来实现

初步来看,shell 和 command 模块能做很多同样的事情, 以下是两个模块之前的区别:

command 模块命令将不会使用 shell 执行. 因此, 像 $HOME 这样的变量是不可用的。还有像<, >, |, ;, &都将不可用。
shell 模块通过shell程序执行, 默认是/bin/sh, <, >, |, ;, & 可用。但这样有潜在的 shell 注入风险.
command 模块更安全,因为他不受用户环境的影响。 也很大的避免了潜在的 shell 注入风险。shell注入就是参数中有rm等危险命令。

常用命令:
cmd: 用接要执行的命令
chdir: 切换目录

cat shell.yaml
- hosts: node
  gather_facts: false
  become: yes
  become_method: sudo

一、切换到目录执行命令

tasks:
  - name: '解压'
    shell:
      chdir: /data
      cmd: 'tar zxvf apache-tomcat-8.5.70.tar.gz'

二、执行多个命令,可用管道符 | 分开(不好用)

tasks:
  - name:
    shell:
      cmd: |
        cd /home
        sh version.sh
        id
赞(0) 打赏
未经允许不得转载:IT火车 » ansible-全模块文档之shell

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

1元打赏送给作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏