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の時だけにしますね(ノ∀`*)
