WindowsのWSLで、Ansbileを利用する方法

Ansibleのplaybookを実行するにはLinux環境が必要となるため、Windowsで利用するには工夫が必要となります。今回は、WindowsのSubsystem for LinuxUbuntu環境を用いて、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