[小ネタ] WSL上でAnsibleを使う際にハマったこと

小ネタです。
私は普段Windowsを利用しており、Windows Subsystem for Linux(WSL)にAnsibleをインストールして作業を行った際に少しハマったのでその内容を共有します。

TL;DR;

それほど大した話ではないので最初に結論を書いておきます。
WSL上でAnsibleを利用する際はWindows側(/mnt/c/配下)ディレクトリのアクセス権に気を付けましょう。

前提

環境としては

  • Windows 10 October 2018 Update (1809)
  • WSLのディストリビューションはUbuntu 18.04
  • Ansible 2.7.4

になります。
WSLの構築手順は端折りますが、Ansibleはインストレーションガイドに従いAptからインストールしています。

sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt-get install ansible

特にエラーもなくサクッとインストールできました。
こういう時のWSLは本当に便利ですね。

また、エディタにVisual Studio Codeを使いたかったのでAnsibleの各種ファイルをCドライブ配下のディレクトリ(WSLから見ると/mnt/c/配下)に置いて作業していました。

WSL上でAnsibleを使う際にハマったこと

ここから本題です。

ansible.cfgがWindows側ディレクトリにあるとエラーになる

例としてC:\project\sample_project\ansible.cfgを配置し、WSL側から

cd /mnt/c/project/sample_project
ansible-playbook web.yml

という風にコマンドを実行するとansible.cfgの内容が読み込まれずエラーとなります。

これは、警告メッセージにある通りで、world writableなディレクトリではセキュリティ上の理由によりansible.cfgの読み込みをスキップする仕様のためです。

そしてWSLでは通常/mnt/c/配下のアクセス権を変更できないため単純にchmodして解決できない点がハマりどころです。

この場合

export ANSIBLE_CONFIG=$(pwd)

といった感じでANSIBLE_CONFIG環境変数を設定することでエラーを回避することができます。

別解

先ほど/mnt/c/配下のアクセス権を変更できないと言いましたが、Windows 10 Build 17063以降(正式リリース版だと1803以降)であれば以下のコマンドでCドライブをマウントしなおせばアクセス権の変更が可能です。

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata

こちらの詳細についてはMicrosoft社のブログ(Chmod/Chown WSL Improvements)をご覧ください。

設定変更したあとはchmodでディレクトリのアクセス権を変更して対処できる様になります。

sudo chmod 755 /mnt/c/project/sample_project

その他ハマった点

ほかにファイルのアクセス権に関連して

  • SSH鍵を/mnt/c/配下に置いてアクセス権を変更できずエラー

といったこともありましたが、これはAnsibleに限った話ではないので割愛します。