RUNDECK+ANSIBLE实现本地脚本上传并在各目标机器上面执行
ansible 2.6.4 + rundeck-3.0.7-20181008.war
一、ansible剧本:
[[email protected] usr]# cat execcmds.yml
---
- hosts: "{{ dsthosts }}"
remote_user: apps
vars:
# 执行脚本的目标机器,等待RUNDECK传参
dsthosts: 192.168.156.71
# 执行的命令
cmds: "sh /tmp/sh2.sh"
tasks:
- name: copyshfiles | 拷贝文件至目标待执行的机器
copy:
src: "/tmp/sh1.sh"
dest: "/tmp/sh2.sh"
- name: execcmds | 执行命令
shell: "{{ cmds }}"
register: cmd_out
- name: echo cmd_out | 打印命令执行结果
debug: var=cmd_out
二、rundeck作业,为方便查看和迁移部署,可导出为xml格式
<joblist>
<job>
<context>
<options preserveOrder='true'>
<option name='dsthosts' values='192.168.156.71'>
<description>执行命令的主机</description>
</option>
<option name='cmds' value='"sh /tmp/sh2.sh"'>
<description>执行的上传的脚本,脚本统一存放为/tmp/sh2.sh,默认不加参数,可以手工添加</description>
</option>
<option name='shellfiles' type='file'>
<description>shellfiles</description>
</option>
</options>
</context>
<defaultTab>summary</defaultTab>
<description>EXEC脚本执行命令</description>
<executionEnabled>true</executionEnabled>
<id>41656e80-9339-4b16-81b4-ee4a1199056f</id>
<loglevel>INFO</loglevel>
<name>EXEC脚本执行命令</name>
<nodeFilterEditable>false</nodeFilterEditable>
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<node-step-plugin type='copyfile'>
<configuration>
<entry key='destinationPath' value='/tmp/sh1.sh' />
<entry key='echo' value='true' />
<entry key='recursive' value='false' />
<entry key='sourcePath' value='${file.shellfiles}' />
</configuration>
</node-step-plugin>
</command>
<command>
<exec>ansible-playbook /usr/execcmds.yml --extra-vars "dsthosts=${option.dsthosts} cmds=${option.cmds}" </exec>
</command>
</sequence>
<uuid>41656e80-9339-4b16-81b4-ee4a1199056f</uuid>
</job>
</joblist>
实现脚本文件的上传主要使用了rundeck的File类型的参数,并添加Copy File步骤调用这个参数实现
三、执行效果