ksaitoの日記

日々試したことの覚え書き

ansibleモジュールの引数と戻り値の処理

移転しました。

自動的にリダイレクトします。

ansibleモジュールは、pythonで書くと引数と戻り値に便利なヘルパがあり便利です。

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