Windows10にAnsibleを設定する手順をまとめました。
はじめに
オンプレミス環境のWindowsServerの構築・管理を自動化したいと思ったのがきっかけでAnsibleに興味を持ちました。
ところが、管理対象としてWindowsの事例はあってもAnsible本体をWindowsに置く方法がなかなかみつからず。試してみたことをまとめました。
次の記事:
WindowsServerをAnsibleでリモート管理するための第一歩
IISにWebサイトを追加するplaybookサンプル
Ansible稼働環境
- Windows 10 Pro (バージョン1803)
- PowerShell 5.1
- ActiveDirectory ドメインに属する
Windowsホスト上でAnsibleを設置するには、大きく2つの方法があります
- Linux For Windows + Ansible
- Docker For Windows + LinuxOS Image + Ansible
今回は「2. Docker For Windows」の上にAnsibleを設定する方法を選択しました。
- Docker for Windows 18.06.1
こちらの記事が大変参考になりました。
「Docker for WindowsからAnsibleを使ってみました。」
http://blog.serverworks.co.jp/tech/2018/04/11/ansible-docker-for-windows/
上の記事ではamazonlinuxを使っていらっしゃいましたが、今回はCentOSイメージを使います。
設定手順
Hyper-Vを有効にする
「コントロールパネル>プログラムと機能>Windowsの機能の有効化または無効化」からHyper-Vを有効にします。
Docker for Windowsのインストール
https://store.docker.com/editions/community/docker-ce-desktop-windows
インストーラーのダウンロードにはユーザー登録が必要です。「Login」→「Create Account」でユーザー登録を済ませます。登録の際に決めたユーザー名が後ほど必要になります。
インストーラ(Docker for Windows Installer.exe)サイズは512MBあります。
Ansible用のDockerを立ち上げる
最初にテキストエディタで「DockerFile」という名前のファイルを作成します。
前述記事内のDockerFileを元にCentOS用にカスタマイズしています。
FROM centos
MAINTAINER xxxxx@xxxxxxxxxxx.xx.xx
RUN yum -y install epel-release && yum clean all
RUN yum -y install python-pip && yum clean all
RUN yum -y reinstall glibc-common && \
pip install --upgrade pip && \
pip install ansible==2.6.4 && \
pip install pywinrm && \
yum clean all && \
mkdir /mydata
ENV LANG ja_JP.UTF-8
CMD ["/bin/bash"]
次にPowerShellを管理者モードで起動し、docker pullを通すために初回のみdocker loginを実行します。このときUsernameにメールアドレスではなく登録時に指定したユーザー名を入力するのがポイントです。
PS> docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username(xxxxx@xxxxx.xxx.xxx): 《メールアドレスではなく登録したUserNameを入力する》
Password:
Login Succeeded
先ほど作ったDockerFileの保存フォルダ(ここでは「D:\Projects\SRE\Ansible」)に移動しDockerイメージを構築します。
PS> cd D:\Projects\SRE\Ansible
PS> docker build -t my-ansible .
作成したDockerイメージを確認します。
PS> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-ansible latest ea11980ca160 14 minutes ago 378MB
centos latest 5182e96772bf 5 weeks ago 200MB
docker4w/nsenter-dockerd latest cae870735e91 10 months ago 187kB
Dockerコンテナーを起動します。このときDocker内からアクセス可能なWindowsのフォルダをマウントします。
ここでは「D:\Projects\SRE\Ansible\MyData」というフォルダ作り、Docker内の「/mydata」にマウントします。
PS> docker run -dit -v D:\Projects\SRE\Ansible\MyData:/mydata my-ansible
初回の実行時のみ、ファイル共有許可を求めるダイアログウィンドウが表示されるので「ShareIt」をクリックします。
Dockerコンテナを確認します。
PS> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
899225e6b593 my-ansible "/bin/bash" About a minute ago Up About a minute sad_shannon
Dockerコンテナへ接続します。CONTAINER IDを引数に指定します。
PS> docker exec -it 899225e6b593 /bin/bash
接続に成功すると、PowerShellのコマンドプロンプトがLinuxのシェルターミナルに変わります。
[root@899225e6b593 /]# ls
anaconda-post.log dev home lib64 mnt opt root sbin sys usr
bin etc lib media mydata proc run srv tmp var
マウントした/mydataに移動してファイルを作成します。
[root@899225e6b593 /]# cd mydata/
[root@899225e6b593 mydata]# ls > test.txt
[root@899225e6b593 mydata]# ls
test.txt
Windows側でもtest.txtファイルが作成されていることが確認できます。
Dockerシェルターミナルから抜けるには
[root@899225e6b593 mydata]# exit
PS>
Dockerコンテナ・イメージの停止と削除
最初からやり直したいときなど、コンテナとイメージを削除する手順です。
- コンテナの一覧からCONTAINER IDを取得
- コンテナを停止
- コンテナを削除
- イメージを一覧
- イメージを削除
PS> docker ps -a ←コンテナの一覧からCONTAINER IDを取得
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fc68aff37f7d my-ansible "/bin/bash" 3 days ago Up 3 days zen_meitner
PS> docker stop fc68aff37f7d ←コンテナを停止
fc68aff37f7d
PS> docker rm fc68aff37f7d ←コンテナを削除
fc68aff37f7d
PS> docker images ←イメージを一覧
REPOSITORY TAG IMAGE ID CREATED SIZE
my-ansible latest e9d3b75df4d3 3 days ago 378MB
centos latest 5182e96772bf 5 weeks ago 200MB
docker4w/nsenter-dockerd latest cae870735e91 10 months ago 187kB
PS> docker rmi e9d3b75df4d3 5182e96772bf cae870735e91 ←イメージを削除
Untagged: my-ansible:latest
Deleted: 《略》
Untagged: centos:latest
Deleted: 《略》
Untagged: docker4w/nsenter-dockerd:latest
Deleted: 《略》