WindowsのWSLで、Ansbileを利用する方法
Ansibleのplaybookを実行するにはLinux環境が必要となるため、Windowsで利用するには工夫が必要となります。今回は、WindowsのSubsystem for LinuxのUbuntu環境を用いて、Ansibleを利用する方法を記載します。
環境情報
Ansibleのインストール
Ubuntu 18.04には、デフォルトでPython3系がインストールされているので、Python3系でAnsibleを動かすことになります。
まず、事前にパッケージ情報を更新しておきます。これをしておかないと、以後のインストール作業で不可解なエラーに出会う可能性があります。
$ sudo apt-get update && sudo apt-get update
pipをインストールした後、Ansibleをインストールします。
$ sudo apt-get install -y python3-pip
$ sudo pip3 install ansible
Ansibleの動作確認。SUCCESSが返ってくることことを確認します。
$ ansible localhost -m ping [WARNING]: Unable to parse /etc/ansible/hosts as an inventory source [WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' localhost | SUCCESS => { "changed": false, "ping": "pong" }
Ansibleのインストールは以上で完了です。
Windows側ファイルシステムのマウント設定を変更
ここからは、WSLでAnsibleを利用する場合に、設定しておくと嬉しい部分となります。以下は、wslでマウントされるWindow側ファイルシステムのパーミッションを変更する方法です。
WSLでAnsibleを触っていると、AnsibleのYAMLファイルや、対象サーバにログインするための秘密鍵を、Windows側のファイルシステムに置いておいたほうが色々と幸せになります。しかしながら、デフォルトのWSLの設定では、Windows側ファイルシステムのパーミッションは、777で固定されており、自由にchmodできない設定となっています。これでは秘密鍵を利用する時に、 Permissions are too open
と怒られてしまうので、困ってしまいます。ので、その辺りの設定を変更する方法。
WSL上で、以下の /etc/wsl.conf
というコンフィグファイルを作成します。通常時はファイルそのものが存在しないはずですので、新規作成してあげます。
$ cat /etc/wsl.conf [automount] enabled = true mountFsTab = false root = /mnt/ options = "metadata,umask=22,fmask=11" [network] generateHosts = true generateResolvConf = true
記載の通り、mountの設定とnetworkの設定を管理してくれるファイルとなります。細かいパラメータについては、以下の公式ドキュメントを参照。
Manage Linux Distributions | Microsoft Docs
automountセクションのoptionsパラメータにて、 metadata
という値が設定されたことにより、chmodが実行できるようになります。これは、WSLで利用されているファイルシステム「drvfs」の仕組みで、Windows側ファイルを、あたかもLinuxファイルとして扱えるようメタデータ層を用意しれくれる仕組み、らしいです。
詳細は、こちらのMS Developerのサイトにて。
Chmod/Chown WSL Improvements | Windows Command Line Tools For Developers