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" } $