前置き
motemen/ghqを使ったAnsible module を自作しました。
https://github.com/suzuki-shunsuke/ansible-ghq-module
モジュール本体のコードはこちら
ghq import < FILE
としてインポートするファイルをタスクのsrcパラメータとして指定できるようにしています。
yaml
1# ghq import < repos.txt 2ghq: 3 src: repos.txt
困っていること
Vagrant を使ってテストをしたところ、
リモートサーバに対してはうまく行く(Vagrantのansible provisionerでテスト)のですが、
- Vagrantの ansible local provisioner を使った場合
- playbookでconnection: local を指定した場合
のいずれの場合でも次のようなエラーが発生してしまいます。
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "Source repos.txt not found"}
roleのfilesディレクトリにソースとなるファイル(今回はrepos.txt)を配置しており、
パーミッションも問題ないのですが(ちゃんとread権限がある)、
どうも roleの filesディレクトリ配下を参照できていない様に思えます。
質問
- Vagrantの ansible local provisioner を使った場合
- playbookでconnection: local を指定した場合
でも上手く動作するようにするにはどうすればよろしいのでしょうか?
実行環境
- ホストOS: Arch Linux
- ゲストOS: Ubuntu 16.04
- Python 2.7.12 (ホスト、ゲストともに)
- Ansible version: 2.1.1.0 (ホスト、ゲストともに)
- Vagrant version: 1.8.6
再現方法
- Vagrant
- Ansible
がインストール済みの前提で
$ git clone https://github.com/suzuki-shunsuke/ansible-ghq-module $ cd ansible-ghq-module $ sh _setup.sh $ vagrant up --provision-with=ansible_local # ここでテストが実行される
補足
ファイルを参照する処理については
ansibleのfileモジュールやcopyモジュールのコードを参考にしました。
copy モジュールのソースコード
。
copyモジュールのsrcを参照するコードは次のようになっています(一部抜粋)。
python
1module = AnsibleModule( 2 argument_spec = dict( 3 src = dict(required=False), 4 ), 5 add_file_common_args=True, 6 supports_check_mode=True, 7) 8 9src = os.path.expanduser(module.params['src']) 10 11if not os.path.exists(src): 12 module.fail_json(msg="Source %s not found" % (src))
上のコードはplaybookで指定されたsrcパラメータを os.path.expanduserに渡したものを
os.path.existsで存在チェックしているだけです。
copyモジュールのsrcパラメータは
- Vagrantの ansible local provisioner を使った場合
- playbookでconnection: local を指定した場合
いずれの場合でもきちんと動作しているように思えます。
それと同様の処理を自作のモジュールでも行っているつもりなのですが、何故か動作しません。
以上、何卒よろしくお願いいたします。
情報が足りなければ追記いたしますので、お申し付けください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。