この記事は3年以上前に書かれた記事で内容が古い可能性があります
Ansibleモジュールを作成した際のファイル書き出し先は、libraryではなくplaybook
2017-01-15
てっきり.pyファイルが置いてあるlibrary/がカレントディレクトリになると思っていたが、ansibleコマンドを実行しているplaybookだった。
■実行前のフォルダ構造
(ansible_work) ~/ansible_work/ansible_module_work $ tree . ├── library │ └── export_date_file.py └── test.yml
■playbookの内容
(ansible_work) ~/ansible_work/ansible_module_work $ cat test.yml - hosts: - all tasks: - name: export_date_file export_date_file: path: (ansible_work) ~/ansible_work/ansible_module_work $
■モジュールの中身
dateの出力内容をファイルに書き出す
(ansible_work) ~/ansible_work/ansible_module_work $ cat library/export_date_file.py #!/usr/bin/python from ansible.module_utils.basic import * import datetime def main(): module = AnsibleModule( argument_spec=dict( path=dict(required=False), ) ) args = module.params path = args.get('path') or './timelog.txt' date = str(datetime.datetime.now()) f = open(path, 'a') f.write("%s\n"%(date)) message = "%s %s" % (path, date) module.exit_json(message=message, changed=True) if __name__ == '__main__': main() (ansible_work) ~/ansible_work/ansible_module_work $
■実行
(ansible_work) ~/ansible_work/ansible_module_work $ ansible-playbook -i "localhost," -c local test.yml -vv No config file found; using defaults PLAYBOOK: test.yml ************************************************************* 1 plays in test.yml PLAY [all] ********************************************************************* TASK [setup] ******************************************************************* ok: [localhost] TASK [export_date_file] ******************************************************** task path: /Users/hoge/ansible_work/ansible_module_work/test.yml:4 changed: [localhost] => {"changed": true, "message": "./timelog.txt 2017-01-15 10:05:10.912463"} PLAY RECAP ********************************************************************* localhost : ok=2 changed=1 unreachable=0 failed=0 (ansible_work) ~/ansible_work/ansible_module_work $
■できたファイル確認
(ansible_work) ~/ansible_work/ansible_module_work $ tree . ├── library │ └── export_date_file.py ├── test.yml └── timelog.txt (ansible_work) ~/ansible_work/ansible_module_work $ cat timelog.txt 2017-01-15 09:54:09.724616 (ansible_work) ~/ansible_work/ansible_module_work $