背景
いまからはじめるAnsible 第1回 – インフラ勉強会 イベント共有ポータル を聞いている裏で「実際に触ってみよう」のための環境構築をしていたら、途中で PC が落ちてしまいました。
docker for windows が起動しなくて、しかたなく Hyper-V をオフにして VirtualBox 起動したんです。そしたらブルースクリーンですよ。つらい、とてもつらい。
— 大雪 命 (@mikoto2000) 2018年1月28日
後半ほとんど話を聞けていないし実際に触れてもいないので、勉強会ログ・チャットログを見ながら独習しました。
その作業記録を残していきます。
前提環境
- OS : VirtualBox 上の Debian 9
- 最小構成インストールプラスアルファ
- sudo
- ssh
- 最小構成インストールプラスアルファ
Debian 上に Docke をインストールする
$ # アップグレード
$ sudo apt-get update
$ sudo apt-get upgrade
$ # 必要パッケージのインストール
$ sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
$ # Docker リポジトリの鍵を登録
$ curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -
$ # 登録した鍵の確認
$ sudo apt-key fingerprint 0EBFCD88
$ # apt にリポジトリを登録
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable"
$ # アップデート
$ sudo apt-get update
$ # Docker, Docker Compose のインストール
$ sudo apt-get docker-ce docker-compose
$ # 今使っているユーザーで実行できるように docker グループに追加
$ sudo gpasswd -a $USER docker
※ docker サービス再起動しても認識してくれなかったのでログインしなおしました。ログインしなおすと sudo 無しで実行できるようになっているはず。
Ansible のインストール
$ sudo apt-get install ansible
「実際に触ってみよう」をやってみる
ホスト 2 つに、 httpd をインストールする演習。
※ Ansible, Docker のインストールは終わっているので、「inventory を書いてみよう」から始める。docker コンテナの起動は playbook を実行する直前に行うように順番を変えました。
inventory を書いてみよう
プロジェクト用ディレクトリを作成
$ mkdir -p ~/project/ansible-101
$ cd ~/project/ansible-101
vi で ./hosts
を作る
[testservers]
test01
test02
playbook を書いてみよう
vi で ./site.yml
を作る
---
- name: install httpd
hosts: testservers
connection: docker
tasks:
- name: Install httpd
yum:
name: httpd
state: present
- name: Start httpd
systemd:
name: httpd
state: started
enabled: yes
実行してみよう
Docker コンテナを起動する
$ docker run --privileged --rm --name test01 -i -d centos /sbin/init
$ docker run --privileged --rm --name test02 -i -d centos /sbin/init
※ --rm
は私が勝手につけました。残ってほしくないコンテナ作るときは便利。
playbook の妥当性確認
ドライランなので最後の httpd 実行で失敗するらしい。
$ ansible-playbook -i hosts site.yml --check
PLAY [install httpd] ***********************************************************
TASK [setup] *******************************************************************
ok: [test02]
ok: [test01]
TASK [Install httpd] ***********************************************************
changed: [test02]
changed: [test01]
TASK [Start httpd] *************************************************************
fatal: [test02]: FAILED! => {"changed": false, "failed": true, "msg": "Could not find the requested service httpd: cannot enable"}
fatal: [test01]: FAILED! => {"changed": false, "failed": true, "msg": "Could not find the requested service httpd: cannot enable"}
to retry, use: --limit @/home/mikoto/project/ansible-101/site.retry
PLAY RECAP *********************************************************************
test01 : ok=2 changed=1 unreachable=0 failed=1
test02 : ok=2 changed=1 unreachable=0 failed=1
playbook 実行
実際に動かすので、最後の httpd 実行も成功する。
$ ansible-playbook -i hosts site.yml
PLAY [install httpd] ***********************************************************
TASK [setup] *******************************************************************
ok: [test01]
ok: [test02]
TASK [Install httpd] ***********************************************************
changed: [test02]
changed: [test01]
TASK [Start httpd] *************************************************************
changed: [test01]
changed: [test02]
PLAY RECAP *********************************************************************
test01 : ok=3 changed=2 unreachable=0 failed=0
test02 : ok=3 changed=2 unreachable=0 failed=0
あとは、それぞれのファイルの書き方を勉強しながら試行錯誤していけば Ansible を使えるようになるのではないでしょうかね?
そんな感じでやっていきましょう。
以上。