ansibleモジュールは、pythonで書くと引数と戻り値に便利なヘルパがあり便利です。
AnsibleModuleのargument_specで引数を定義します。引数が必須かオプションかを定義できるようです。
戻り値は、exit_jsonで返します。最後の2行は、python初心者なのでおまじないということで…
$ cat library/mymodule.py #! /usr/bin/python def main(): module = AnsibleModule( argument_spec = dict( src = dict(required=True), dest = dict(required=False), ), ) src = module.params['src'] dest = module.params['dest'] res_args = dict( src = src, dest = dest, changed = True ) module.exit_json(**res_args) # import module snippets from ansible.module_utils.basic import * main() $
実行
テスト実行します。前に書いたサンプルより一貫性があって分かりやすい実装です。
$ $ANSIBLE_HOME/hacking/test-module -m library/mymodule.py -a "src=bbb"
* including generated source, if any, saving to: /home/vagrant/.ansible_module_generated
* this may offset any line numbers in tracebacks/debuggers!
***********************************
RAW OUTPUT
{"dest": null, "src": "bbb", "changed": true, "invocation": {"module_args": {"dest": null, "src": "bbb"}}}
***********************************
PARSED OUTPUT
{
"changed": true,
"dest": null,
"invocation": {
"module_args": {
"dest": null,
"src": "bbb"
}
},
"src": "bbb"
}
$
必須オプションが指定されないと、failedとエラーメッセージが戻り値に設定されます。これは便利です。
$ $ANSIBLE_HOME/hacking/test-module -m library/mymodule.py -a "dest=bbb"
* including generated source, if any, saving to: /home/vagrant/.ansible_module_generated
* this may offset any line numbers in tracebacks/debuggers!
***********************************
RAW OUTPUT
{"msg": "missing required arguments: src", "failed": true, "invocation": {"module_args": {"dest": "bbb"}}}
***********************************
PARSED OUTPUT
{
"failed": true,
"invocation": {
"module_args": {
"dest": "bbb"
}
},
"msg": "missing required arguments: src"
}
$