[小ネタ] 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に限った話ではないので割愛します。