四 使用其他语言发开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的字典列表|