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
1 2 3 4 5 6 7 8 9 |
[servers:children] vmhosts [vmhosts] vmhost01 [vmhost:vers] ansible_ssh_user=sudouser ansible_ssh_pass=sudopassword |
2. playbookファイルを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
--- ←これも必要 - 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というモジュールがあるので、置き換えてください。。。
1 |
yum: name=* state=latest |
コレ!公式ドキュメント読むと update なのか例にあるupgradeなのかわかんなくなるよ。
subscription-managerもモジュールになってるんだけど、まだバギーらしい。登録するuserとpasswordは適宜環境に合わせて修正してね。
device-mapperのパッケージだけど、前回使ってたのが 404 not found になってて、どうやらバージョンアップしたらしい。直接指定だから難しいけど、state=latest な感じにできればいいな。yumのパッケージのバージョンが上がればこんな無茶はいらないんだけどなぁ~
proxyは環境に合わせて不要なら外してね。
IPADDRESSって書いている所は適宜編集してね。
3. 流し込み!
1 2 3 |
% ansible-playbook -i /etc/ansible/host ./playbook --syntax-check % ansible-playbook -i /etc/ansible/host ./playbook |
インストール先のホストの/var/log/messagesにも、実行されたコマンドが出力されるので、実行側の結果と照らし合わせてみると進行状況とか良くわかっていいかもです。
・・・が、Ansible使うんだし、インストール先にログインしちゃダメですかねwww
ひな形作る、try&errorの時だけにしますね(ノ∀`*)