Help us understand the problem. What is going on with this article?

Windows10 に ゼロから Ansible をインストールする(Ansible for Windows)

More than 1 year has passed since last update.

Windows10にAnsibleを設定する手順をまとめました。

はじめに

オンプレミス環境のWindowsServerの構築・管理を自動化したいと思ったのがきっかけでAnsibleに興味を持ちました。
ところが、管理対象としてWindowsの事例はあってもAnsible本体をWindowsに置く方法がなかなかみつからず。試してみたことをまとめました。

次の記事:
  WindowsServerをAnsibleでリモート管理するための第一歩
  IISにWebサイトを追加するplaybookサンプル

Ansible稼働環境

  • Windows 10 Pro (バージョン1803)
  • PowerShell 5.1
  • ActiveDirectory ドメインに属する

Windowsホスト上でAnsibleを設置するには、大きく2つの方法があります
1. Linux For Windows + Ansible
2. 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を有効にします。
01.png

Docker for Windowsのインストール

https://store.docker.com/editions/community/docker-ce-desktop-windows
インストーラーのダウンロードにはユーザー登録が必要です。「Login」→「Create Account」でユーザー登録を済ませます。登録の際に決めたユーザー名が後ほど必要になります。
02.png

インストーラ(Docker for Windows Installer.exe)サイズは512MBあります。

Ansible用のDockerを立ち上げる

最初にテキストエディタで「DockerFile」という名前のファイルを作成します。
前述記事内のDockerFileを元にCentOS用にカスタマイズしています。

DockerFile
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」をクリックします。
12.png

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コンテナ・イメージの停止と削除

最初からやり直したいときなど、コンテナとイメージを削除する手順です。
1. コンテナの一覧からCONTAINER IDを取得
2. コンテナを停止
3. コンテナを削除
4. イメージを一覧
5. イメージを削除

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: 《略》

Tkm08
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした