RHEL6.5(RedHat Enterprise Linux 6.5)にAnsibleでDockerをインストールする

RHEL6.5にAnsibleでDocker環境つくっちゃおう♪

docker上に作ったansibleなサーバからvmhostのRHEL6.5にdocker環境を作ってしまいます。

入門Ansibleとか、Docker入門 Immutable Infrastructureを実現するを読んでおくと、理解が早いかもしれません。電子書籍だとタブレット一つで沢山持ち歩けるので便利ですよねd(^ー゜*)

今回は、ansibleな環境をdocker上に作ってしまったため、sshのノンパスキーが旨く作れなかったので、パスワード認証にしちゃいました・・・(作れたけど起動し直すたびにホスト名変わりますよね。id_dsa.pubファイルの最後にアカウント@ホスト名みたいなのが付くんだけど、これが為に恒久的でなはいというか。)

1. inventoryなホストファイルを作成

serversな識別に、たくさんのサーバをぶら下げる想定です!

インストール先のvmhostのデフォルト環境をpackerでvagrantのbox作っちゃったりした後の想定です。
sudouserがsudopasswordというパスワードで存在することにしてください。
また、一度sshで接続して、known_hostsに登録されているようにしてください・・・(注文が多くてすみません)

/etc/ansible/hosts

[servers:children]
vmhosts

[vmhosts]
vmhost01

[vmhost:vers]
ansible_ssh_user=sudouser
ansible_ssh_pass=sudopassword

2. playbookファイルを作成

---    ←これも必要
- hosts: servers
  remote_user: sudouser
  become: yes
  become_method: su

  vars:
    myuser: ansible
    proxyAddr: IPADDRESS
    proxyPort: 8080
    proxyUrl: http:// IPADDRESS:8080/
    epelUrl: http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    epelRepoFile: /etc/yum.repos.d/epel.repo
    dockerConf: /etc/sysconfig/docker
    rpmUrl: http://rpmfind.net/linux/centos/6/updates/x86_64/Packages/
    username: user
    password: passowrd

  tasks:
  - name: regist subscription manager
    shell: subscription-manager register \
             --force \
             --username {{ username }} \
             --password {{ password }} \
             --proxy {{ proxyAddr }}:{{ proxyPort }}

  - name: add sudouser to sudoers
    shell: echo 'sudouser ALL=(ALL:ALL) ALL' > /etc/sudoers.d/sudouser

  - name: set proxy environemnt
    shell: echo "export http_proxy={{ proxyUrl }}" > /etc/profile.d/proxy.sh

  - name: add epel repos
    shell: rpm --force --httpproxy {{ proxyAddr }} --httpport {{ proxyPort }} -ihv {{ epelUrl }}

  - name: change epel repos url
    shell: sed -i \
               -e "s/^#baseurl=/baseurl=/" \
               -e "s/^mirrorlist=/#mirrorlist=/" \
               {{ epelRepoFile }}

  - name: yum update
    yum: name=* state=latest

  - name: yum install device-mapper-event-libs
    yum: name={{ item.name }} state=latest
    with_items:
      - { name: device-mapper-event-libs, docker-io }

  - name: yum local install device-mapper
    yum: name={{ item }} state=present
    with_items:
       - "{{ rpmUrl }}device-mapper-libs-1.02.95-3.el6_7.2.x86_64.rpm"
       - "{{ rpmUrl }}device-mapper-event-1.02.95-3.el6_7.2.x86_64.rpm"
       - "{{ rpmUrl }}device-mapper-event-libs-1.02.95-3.el6_7.2.x86_64.rpm"
       - "{{ rpmUrl }}device-mapper-1.02.95-3.el6_7.2.x86_64.rpm"

  - name: make docker images dir
    file: path={{ item.path }} state=directory owner={{ item.owner }} group={{  item.group }} mode={{ item.mode }}
    with_items:
    - { path: '/data/docker', owner: 'dockerroot', group: 'dockerroot', mode: '0755' }

  - name: change docker images dir
    shell: sed -i -e 's/^other_args=$/other_args="-g \/data\/docker\/"/' {{ dockerConf }}

  - name: boot docker
    service: name=docker state=restarted

えーと、sed -i -e の所! lineinfileというモジュールがあるので、置き換えてください。。。

yum: name=* state=latest

コレ!公式ドキュメント読むと update なのか例にあるupgradeなのかわかんなくなるよ。

subscription-managerもモジュールになってるんだけど、まだバギーらしい。登録するuserとpasswordは適宜環境に合わせて修正してね。

device-mapperのパッケージだけど、前回使ってたのが 404 not found になってて、どうやらバージョンアップしたらしい。直接指定だから難しいけど、state=latest な感じにできればいいな。yumのパッケージのバージョンが上がればこんな無茶はいらないんだけどなぁ~

proxyは環境に合わせて不要なら外してね。
IPADDRESSって書いている所は適宜編集してね。

3. 流し込み!

% ansible-playbook -i /etc/ansible/host ./playbook --syntax-check
% ansible-playbook -i /etc/ansible/host ./playbook

インストール先のホストの/var/log/messagesにも、実行されたコマンドが出力されるので、実行側の結果と照らし合わせてみると進行状況とか良くわかっていいかもです。
・・・が、Ansible使うんだし、インストール先にログインしちゃダメですかねwww
ひな形作る、try&errorの時だけにしますね(ノ∀`*)