ansible-playbook実行時にカレントディレクトリのansible.cfgは権限によっては読まれない。

落ち着いて出力されたログを読めば即解決する内容ですが、備忘録としてメモしたいと思います。

##予備知識
Ansibleのコンフィグファイルは以下の順で検索し、見つかった最初のファイルを使用する。それ以外は無視される。
・ANSIBLE_CONFIG (environment variable if set)
・ansible.cfg (in the current directory)
・~/.ansible.cfg (in the home directory)
・/etc/ansible/ansible.cfg

##事象
カレントディレクトリにansible.cfgが存在するが、`/etc/ansible/ansible.cfg`が使用された。
そのため、SSHの設定等が読み込まれずにUNREACHABLEが発生した。

以下、実行ログ
※諸事情によりディレクトリ名等は適当な値に変更しています。

```bash:実行ログ
$ ansible-playbook -i hosts/dev -vvv myansible.yml
   [WARNING] Ansible is being run in a world writable directory (/home/vagrant/aaaa), ignoring it as an ansible.cfg source. For more information see https://docs.ansible.com/ansible/devel/reference_appendices/config.html#cfg-in-world-writable-dir
  ansible-playbook 2.7.0rc2
    config file = /etc/ansible/ansible.cfg
    configured module search path = [u'/home/vagrant/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
    ansible python module location = /usr/lib/python2.7/site-packages/ansible
    executable location = /usr/bin/ansible-playbook
    python version = 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
  Using /etc/ansible/ansible.cfg as config file
  Parsed /home/vagrant/aaaa/hosts/dev/inventory inventory source with ini plugin

  PLAYBOOK: myansible.yml ********************************************************************************************************************************************************************************************************
  1 plays in myansible.yml

  PLAY [hoge] *******************************************************************************************************************************************************************************************************************

  TASK [Gathering Facts] ***********************************************************************************************************************************************************************************************************
  task path: /home/vagrant/aaaa/myansible.yml:5
  <testtest> ESTABLISH SSH CONNECTION FOR USER: None
  <testtest> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/224abd3d7d testtest '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''
  <testtest> (255, '', 'ssh: Could not resolve hostname testtest: Name or service not known\r\n')
  fatal: [testtest]: UNREACHABLE! => {
      "changed": false, 
      "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname testtest: Name or service not known\r\n", 
      "unreachable": true
  }
  	to retry, use: --limit @/home/vagrant/aaaa/myansible.retry

  PLAY RECAP ***********************************************************************************************************************************************************************************************************************
  testtest             : ok=0    changed=0    unreachable=1    failed=0   

```

冒頭でも書いた通り、ログ中に理由がありました。
(ドキュメントのURLまで出力してくれている親切設計)

```bash:見るべきログ(長いので改行を入れてみた)
[WARNING] Ansible is being run in a world writable directory (/home/vagrant/aaaa),
 ignoring it as an ansible.cfg source.
 For more information see https://docs.ansible.com/ansible/devel/reference_appendices/config.html#cfg-in-world-writable-dir

```

world writable directoryで実行したため無視されたようです。
ドキュメントには深刻なセキュリティ上のリスクが発生するともありました。

作業場所としてVagrantでVirtualBoxに作成したLinuxを使用しており、Windowsとの共有フォルダで実行したため発生したようです。。
実際に確認したところ、共有フォルダのパーミッションは777になっていました。

※world writable directory：世界書き込み可能ディレクトリ?、誰でも書き込みできるということだと思われる(予想)。

##解決
Vagrantfileの共有フォルダ設定に、
mount_optionsでパーミッション設定を追加することで実行できるようになりました。

```bash:共有フォルダ設定
config.vm.synced_folder "windir", "vmdir" , mount_options: ["dmode=775,fmode=664"]
```

WARNINGもちゃんと読まなきゃですね。
薄い内容ですが、以上です。

##参考
[Ansible Configuration Settings - Avoiding security risks with ansible.cfg in the current directory](https://docs.ansible.com/ansible/devel/reference_appendices/config.html#cfg-in-world-writable-dir)
[Vagrant Synced Folders Permissions](https://jeremykendall.net/2013/08/09/vagrant-synced-folders-permissions/)
[Basic Usage - Synced Folders - Vagrant by HashiCorp](https://www.vagrantup.com/docs/synced-folders/basic_usage.html)