yoshiislandblog.net
元営業の駆け出しアラサーSEが、休日にMACと戯れた際の殴り書きメモ。日々勉強。日々進歩。

この記事は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 $