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
IT火车![Linux easy-rsa制作证书[实测最简步骤]-IT火车](https://idc.birk.cn/wp-content/uploads/2024/02/5c9c04de835c4a4c8ceb13e457a0c4e2-220x150.gif)
最新评论