構成管理ツール「Ansible」入門 (2日目)~Playbookを書いてみた~
最近ちゃんとLPICの勉強をし始めました。カーネルコンパイルとか難しいですが、頑張りまする。
Ansibleの勉強するぞーって言っておきながら、あんまりできてません。まったくできてません。
が、Best Practiceを参考にplaybookは一応できたので、復習がてら書いていきます。
内容としては、インストール直後のサーバに対してssh接続できるところまでのplaybookとなりもうす。
構成管理ツール「Ansible」入門 (1日目)~基本的な使い方編~ - 黒縁眼鏡は海を飛ぶ
参考にさせていただいたところ
Ansible チュートリアル | Ansible Tutorial in Japanese
AnsibleでVPS初期設定 - blog.ieknir.com
私のplaybookはGithubのリポジトリにあげております。
全体構成
playbook ├─hosts ├─init.yml ├─group_vars │ └─sshd └─roles └─ssh ├─handlers │ └─main.yml └─tasks └─main.yml
なんか凄く見にくい感じになってそうで怖い。
hosts
$ cat hosts [sshd] 192.168.10.101 192.168.10.102
本Playbookのinventoryファイル。
2つの対象ホストを指定しています。
/etc/ansible/hosts
ファイルを使用せず、こちらに用意しています。
いきなりであれですが、たぶんこのsshd
ってグループの命名は糞っぽい。
init.yml
$ cat init.yml - hosts: sshd roles: - ssh
本playbookの親玉。
対象のホストグループはsshd
であり、実行するroleはssh
ですよーと指定しています。
group_vars
$ cat group_vars/sshd ansible_ssh_port: 22 ansilbe_ssh_user: root ssh_user: sshuser ssh_port: 22 ssh_user_passwd: password
sshd
グループが共通で使用する変数をgroup_vars
ディレクトリ配下に別出ししています。
変数の参照については後ほど。
roles/ssh/handlers/main.yml
$ cat roles/ssh/handlers/main.yml - name: restart sshd service: name=sshd state=restarted
このroles
ディレクトリ以下に、各role毎にファイルを置いていきます。
roleの割り当てについては、ssh
だったりmysql
だったり。
handlers
ディレクトリは、task実行後にnotify
で呼び出されるハンドラです。
今回ですと、設定ファイルの書き換えなんかがあるので、sshd
の再起動を記載しています。
rolse/ssh/tasks/main.yml
$ cat rolse/ssh/tasks/main.yml - name : update shell: yum -y update - name : install lib yum: name: libselinux-python state: latest - name: user add user: name: "{{ ssh_user }}" groups: wheel password: "{{ ssh_user_passwd }}" - name: mkdir .ssh file: path: /home/{{ ssh_user }}/.ssh state: directory owner: "{{ ssh_user }}" - name: translate public key copy: src: /home/{{ ssh_user }}/.ssh/authorized_keys dest: /home/{{ ssh_user }}/.ssh/authorized_keys owner: "{{ ssh_user }}" mode: 0600 - name: allow wheel group to use sudo lineinfile: dest: /etc/sudoers regexp: "^# %wheel\\tALL=\\(ALL\\)\\tALL" line: "%wheel ALL=(ALL) ALL" backup: yes - name: allow ssh_user to use ssh lineinfile: dest: /etc/ssh/sshd_config line: "AllowUsers {{ ssh_user }}" notify: restart sshd
長い。ブログに張り付けるにしては非常に長くてうざい。
libselinux-pythonを個別に入れているのは、入っていないとplaybook実行途中で死んじゃうからです。
もうlineinfile
だけ覚えておけばなんとかできるような気がしてきたでござるよ。
一応私の環境だと、以下のコマンドで公開鍵認証を切ってから実施すると正常に動作することを確認しました。
(ここなんとかする方法あるのか)
$ ansible-playbook -v ./init.yml -i ./hosts -k SSHPASSWORD:
-k
オプションをつけるとPasswordによる認証となりまする。
とりあえず、以上。