概要
VirtualboxやVagrantを使った入門は、ハードルが高めなので、
Dockerを使って、Ansibleにハンズオンします。
構成
Dockerを用いることで、Ansibleのコンテナを1台、Targetのコンテナを2台作る。
Ansibleコンテナから、2台のTargetコンテナに対して、Ansibleコマンドを実行する。
Ansibleコンテナから、Target01
、Target02
コンテナ内に、hoge
というファイルを作成してみる。
ハンズオン
1 . git cloneする。
git clone https://github.com/Naoto92X82V99/docker-ansible.git
.
├── README.md
├── docker
│ ├── ansible
│ │ └── Dockerfile ansibleのDocerfile
│ └── target
│ └── Dockerfile targetのDockerfile
├── docker-compose.yml docker-composeファイル
├── inventry.ini hostsファイル
└── playbook.yml playbookファイル
2 . コンテナを起動する。
docker-compose up -d
- Ansibleコンテナに接続する
docker exec -it ansible /bin/exec
- Ansibleコンテナから、
target01
、target02
コンテナに対し、ssh接続する。
ssh target01 # yesで接続
exit
ssh target02 # yesで接続
exit
6 . target01
、target02
コンテナに対し、ansibleコマンドを実行する。
ansible-playbook -i inventry.ini playbook.yml
PLAY [target] ********************************************************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************************************************
ok: [target01]
ok: [target02]
TASK [???] ***********************************************************************************************************************************************************************
[WARNING]: Consider using the file module with state=touch rather than running touch. If you need to use command because file is insufficient you can add warn=False to this
command task or set command_warnings=False in ansible.cfg to get rid of this message.
changed: [target02]
changed: [target01]
PLAY RECAP ***********************************************************************************************************************************************************************
target01 : ok=2 changed=1 unreachable=0 failed=0
target02 : ok=2 changed=1 unreachable=0 failed=0
7 . target01
、target02
コンテナに再接続し、hoge
が作成されていることを確認する。
ssh target01
ls # hoge
exit
ssh target02
ls # hoge
解説
本質と外れるため、Dockerについての説明はしません。
Ansibleの基本ファイルは、hosts
ファイルとplaybook
です。
hostsファイル
hosts
ファイルは、Ansibleコマンドを実行する対象サーバを記述します。
今回は、target01
、target02
コンテナを対象とするため、以下のようになります。
[target]
target01
target02
playbookファイル
playbook
ファイルには、サーバの状態を定義していきます。
今回は、hosts
ファイルに記載されたtarget
に対し、touch hoge
を実行します。
- hosts: target
tasks:
- name: "テスト"
shell: |
touch hoge
まとめ
Dockerを使って、Ansibleにハンズオンする方法を書きました。
playbook
ファイルを書いて、Ansibleコマンドを実行する環境が、
docker-compose up
のみで実現できます。
ハンズオンで用いたtouch
コマンドは、冪等性が担保されないため、実際には使用しないでください。
ハンズオン後は、playbook.yml
を編集し、Ansibleコマンドを試してみて下さい。
間違い・指摘等があればコメントお願いします。