ansible - script模块执行脚本

场景

ansible - script模块执行脚本

在批量管理主机的时候,希望批量执行一个脚本,这个脚本只执行一次,就不想把脚本放到远程机器上了,这时候就可以使用script模块进行操作。


用法

ansible [ip/hostname] -m script -a [args]

常用参数

chdir参数 : 此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到 chdir 参数指定的目录中。

creates参数 :使用此参数指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本,可参考 command 模块中的解释。

removes参数 :使用此参数指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本,可参考 command 模块中的解释。

例子

脚本内容(1.sh)

#!/bin/bash
echo "start ..."
pwd
sleep 10
pwd
mkdir aa
echo "end ..."

ansible - script模块执行脚本

直接执行

ansible 192.168.57.102 -m script -a '1.sh'

192.168.57.102 | CHANGED => {

"changed": true,

"rc": 0,

"stderr": "Shared connection to 192.168.57.102 closed.",

"stderr_lines": [

"Shared connection to 192.168.57.102 closed."

],

"stdout": "start .../root/rootend ...",

"stdout_lines": [

"start ...",

"/root",

"/root",

"end ..."

]

}

可以看到,默认工作目录是到用户的家目录

切换目录执行

ansible 192.168.57.102 -m script -a 'chdir=/tmp/ 1.sh'

192.168.57.102 | CHANGED => {

"changed": true,

"rc": 0,

"stderr": "Shared connection to 192.168.57.102 closed.",

"stderr_lines": [

"Shared connection to 192.168.57.102 closed."

],

"stdout": "start .../tmp/tmpend ...",

"stdout_lines": [

"start ...",

"/tmp",

"/tmp",

"end ..."

]

}

判断目录或者文件是否存在,存在就不执行,不存在就执行

ansible 192.168.57.102 -m script -a 'creates=/tmp/aa chdir=/tmp/ chdir=/tmp 1.sh'

192.168.57.102 | CHANGED => {

"changed": true,

"rc": 0,

"stderr": "Shared connection to 192.168.57.102 closed.",

"stderr_lines": [

"Shared connection to 192.168.57.102 closed."

],

"stdout": "start .../tmp/tmpend ...",

"stdout_lines": [

"start ...",

"/tmp",

"/tmp",

"end ..."

]

}

上一个执行脚本创建了/tmp/aa的目录,存在这个目录就不执行了

ansible 192.168.57.102 -m script -a 'creates=/tmp/aa chdir=/tmp/ chdir=/tmp 1.sh'

192.168.57.102 | SKIPPED

判断目录或者文件是否存在,存在就执行,不存在就不执行

ansible 192.168.57.102 -m script -a 'removes=/tmp/aa chdir=/tmp/ chdir=/tmp 1.sh'

192.168.57.102 | CHANGED => {

"changed": true,

"rc": 0,

"stderr": "Shared connection to 192.168.57.102 closed.",

"stderr_lines": [

"Shared connection to 192.168.57.102 closed."

],

"stdout": "start .../tmp/tmpend ...",

"stdout_lines": [

"start ...",

"/tmp",

"/tmp",

"end ..."

]

}

ansible - script模块执行脚本


总结

其实ansible在执行过程中也是有文件拷贝的,只是这个执行文件是拷贝到临时目录,执行完以后就自动删除了,对于一下存放密码的脚本相对比较安全。

¥66.76
购买

相关推荐