扩展命令
实现以下命令
__put__ <file to upload> <path in remote host>
从solve所在的主机上传文件。__put__为关键字,使用空格分隔参数。第一个参数为本地文件的全路径,第二个参数为要保存在远端主机的路径。远端路径不存在则创建。远端文件存在则判断MD5码是否一致,一致则不再上传,不一致则重命名远端文件然后重新上传。命令之后不要存在空格。
__get__ <file in remote host> <local path>
从远端主机下载文件到solve所在的主机。__get__为关键字,使用空格分隔参数。第一个参数为远端主机文件的全路径,第二个参数为要保存在本地的路径。本地路径不存在则创建,本地文件已经存在则重命名然后下载。命令之后不要存在空格。
文件的上传、下载需要使用md5值对比,远端主机存在md5sum命令可以加快运行速度,不存在则使用python的代码计算且需要从远端读文件到本地因而效率不高。
__save__ <full filename> <file content>
可以将复杂的字符串保存到远端或本地的文件中,如字符串中包含单引号、双引号、空格、换行、$等特殊字符。无需任何转义,换行符需要通过参数引入,如session参数引入。
__sync__ <from ip_tag>:<from full path> <to path> <options>或__sync__ <from full path> <to ip_tag>:<to path> <options>
内置文件、目录复制方法。不支持后台运行。<from ip_tag>与<to ip_tag>相同时只判断目录是否相同。
options
| option | 描述 | 支持try类型 | 值格式 | 默认值 |
|---|---|---|---|---|
| try | 进行传输的方法顺序,上一个失败则使用下一个方法传输 | - | 1234组合 | 1234 |
| compress | 传输时是否压缩 | 1,2,3 | 1 是 0 否 | 是 |
| bwlimit | 带宽限制 | 1,2,3 | 数字+k/m/g | 空 |
| partial | 是否断点续传 | 1,2,4 | 1 是 0 否 | 是 |
| check | 传输结果校验,为文件则校验md5,为目录则校验大小 | 1,2,3,4 | 1 是 0 否 | 否 |
| progress | stdout中是否显示进度 | 1,2,3 | 1 是 0 否 | 是 |
| proxy | 是否使用其他代理,none、null(不分大小写)表示为空 | 3 | 对应realhost的ip | 空 |
| batch | 每次从源端读取多少字节 | 4 | 数字 | 524288 |
try类型说明
- 1 在当前执行命令的主机运行rsync。
- 2 在交互的另外一台主机执行命令的主机运行rsync。
- 3 使用代理执行ssh+管道执行数据传输,默认为solve运行的主机,可以通过proxy使用其他主机作为代理。
- 4 使用python的内置方法通过solve运行的主机代理传输。只支持文件,日志带有已经传输的数据量大小。
样例 __sync__ /a/b/c 10.0.0.1:/a/b -compress=1 -try=1234 -proxy=192.168.0.1 -bwlimit=10m -partial=1 -check=1 --progress=1 将目录或文件/a/b/c传输到10.0.0.1:/a/b下,目录或文件名保持原来的名字
__render__ <path to template> <path to file> -a=aaaa -b=bbb -c=ccc
将jinja模板文件中的变量进行渲染。
渲染值存在空格时使用单引号或双引号包含。
复杂的格式则需要先存储成文件,如-__d=/path_2_file,通过变量加双下划线前缀,可实现将文件的内容赋给变量d。
__call__ <playbook line num> <options>
重新调用第几行playbook
options
| option | 描述 | 值格式 | 默认值 |
|---|---|---|---|
| constrict | 如果调用的命令不符合正则表达式,则报错 | 正则表达式 | 空 |
- 其他扩展命令
其他的扩展命令对应扩展目录extends下的文件,可用于自定义封装轻量级shell命令集合同时无需先预先上传文件(比较复杂的shell脚本建议上传后运行)。如 __abc__则类似于使用文件 __abc__或 __abc__.sh 执行。