ansible modules开发(二)
四 使用其他语言发开module
cd /etc/ansible cat library/touch.sh #!/bin/sh args_file=$1 [ ! -f "$args_file" ] && echo -n '{"failed": true, "msg": "missing required arguments: file"}' && exit 1 args_result=$(cat $args_file | gawk -F'file=' '{print $2}' | gawk -F' ' '{print $1}') [ ! -n "$args_result" ] && echo -n "{\"failed\": true, \"msg\": \"file () is absent, cannot continue\", \"file\": \"$args_result\"}" && exit 1 touch $args_result && echo -n "{\"changed\": true, \"rc\": $?,\"file\": \"$args_result\"}" || echo -n "{\"failed\": true, \"rc\": $?, \"file\": \"$args_result\"}" exit $?
返回值一定是json dumps的字符串。
ansible的参数都会被写入一个名为args的文件,上图的$1 就是这个文件的路径,读取这个文件的内容,就能获取file参数的值。
创建playbook
cat touch.yml --- - hosts: node1 tasks: - touch: file=/tmp/123
host清单
cat hosts [node1] 192.168.77.129 ansible_ssh_pass=123456 ansible_sh_interpreter=/bin/sh
执行他
五 module的返回值
1 共同返回值
|名称 |类型 |说明| |:---|:---| |backup_file |str |对于一些modules使用了backup变量,返回备份的文件路径| |changed |bool| 表示任务是否必须进行更改。| |failed |bool |表示任务是否失败。| |invocation| dict |有关如何调用模块的信息。| |msg |str| 存储通用消息的字符串| |rc| int| 命令行程序的返回码| |results |dict |如果该键存在,则表示该任务存在循环,并且它包含每个项目的模块“results”的列表。| |skipped| bool |表示该任务是否被跳过| |stderr |str| 命令行程序的错误输出| |stderr_lines| list |它将stderr字符串按行分割存储在列表中| |stdout |str| 命令行程序的标准输出| |stdout_lines |list |它将stdout字符串按行分割存储在列表中|
2 内部使用
这些值是ansible内部定义的。 |名称 |类型 |说明| |:---|:---| |ansible_facts |dict |该key应包含一个字典,附加到分配给主机的fact。 这些可以直接访问,不需要使用注册的变量。| |exception |dict |该key包含由模块中的异常引起的追溯信息。 它只能以高度详细程度显示(-vvv)。| |warnings| list |此键包含将显示给用户的字符串列表。| |deprecations|dict |返回msg和version的字典列表|
生活不会突变,你要做的只是耐心和积累。人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦。你的时间有限,做喜欢的事情会令人愉悦,所以跟随自己的本心。