2018年1月29日月曜日

「いまからはじめるAnsible 第1回」で Ansible を触った(Debian9 と Docker で Ansible を試す)

背景

いまからはじめるAnsible 第1回 – インフラ勉強会 イベント共有ポータル を聞いている裏で「実際に触ってみよう」のための環境構築をしていたら、途中で PC が落ちてしまいました。

後半ほとんど話を聞けていないし実際に触れてもいないので、勉強会ログ・チャットログを見ながら独習しました。

その作業記録を残していきます。

前提環境

  • 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 を使えるようになるのではないでしょうかね?

そんな感じでやっていきましょう。

以上。