お疲れ様です。きざきまるおです。
皆さんはAnsibleはご存じでしょうか?
こちらは冪等性のある環境を構築するために使われるソフトウェアで簡単に統一された環境を構築することが出来ます。
時代はパブリッククラウドのため、昔よりも重要度は少なくなりましたが、細かい設定を入れたい場合は今でも十分に使えるので、ぜひ学習してみてください。
それではどうぞ。
実行環境
今回はVirtualBox上にRoecky Linux2台を構築しました。
IPアドレスはそれぞれ以下になります。
- 192.168.0.1 (Ansible マスター兼スレーブ)
- 192.168.0.2 (Ansible スレーブ)
手順
インストール
マスター側で以下コマンドを用いてインストールしましょう。
dnf -y install epel-release
dnf -y install ansible
このコマンドだけでインストールできるからかなり簡単ですね。
次にスレーブ側にパスワードなしの接続ができるように鍵の設定をしましょう。
以下コマンドを順番に入力してください。
mkdir .ssh
chmod 700 .ssh
cd .ssh
ssh-keygen
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
ssh-copy-id 192.168.0.2
次にAnsibleで環境構築する対象ホストを設定しましょう。
vi /etc/ansible/hosts
----以下を末尾に追記----
192.168.0.1
192.168.0.2
そしてAnsibleの肝であるPlaybookを設定しましょう。
今回はapacheとpostgresqlをインストールします。
vi /etc/ansible/sample-playbook.yml
以下内容を追記
- name: package install
hosts: all
become: yes
vars:
apache: httpd
postgres: postgresql-server
tasks:
- name: apache install
dnf:
name: "{{ apache }}"
state: latest
notify:
- apache service
- name: postgresql service
dnf:
name: "{{ postgres }}"
state: latest
notify:
- postgresql service
handlers:
- name: apache service start
service:
name: "{{ apache }}"
state: started
listen: apache service
- name: apache service enable
service:
name: "{{ apache }}"
enabled: yes
listen: apache service
- name: postgres service start
service:
name: "{{ postgres }}"
state: started
listen: postgresql service
- name: postgres service enable
service:
name: "{{ postgres }}"
enabled: yes
listen: postgresql service
パーツごとに説明していきます。
以下はこのプレイブックの定義をしています。
hostsではどのマシンに実行するかでbecomeはrootで実行するかを示しています。
- name: package install
hosts: all
become: yes
こちらは変数を定義しています。
定義した変数は{{}}で呼び出すことが出来ます。
vars:
apache: httpd
postgres: postgresql-server
こちらはインストールの本体となります。上から順に実行し、dnfを用いてapacheとpostgresqlをインストールすることを記述しています。
また、notifyでインストール完了後に実行するコマンド郡をそれぞれ記載しています。
tasks:
- name: apache install
dnf:
name: "{{ apache }}"
state: latest
notify:
- apache service
- name: postgresql service
dnf:
name: "{{ postgres }}"
state: latest
notify:
- postgresql service
こちらはtaskが実行された後に実行するコマンドを記載します。
それぞれのタスクごとに違う操作を分岐させたいときに利用できます。
handlers:
- name: apache service start
service:
name: "{{ apache }}"
state: started
listen: apache service
- name: apache service enable
service:
name: "{{ apache }}"
enabled: yes
listen: apache service
- name: postgres service start
service:
name: "{{ postgres }}"
state: started
listen: postgresql service
- name: postgres service enable
service:
name: "{{ postgres }}"
enabled: yes
listen: postgresql service
実行しても問題ないか–chekオプションで確認します。
ansible-playbook -i hosts sample-playbook.yml --check
----実行結果----
PLAY [package install] *********************************************************
TASK [Gathering Facts] *********************************************************
ok: [192.168.0.2]
TASK [apache install] **********************************************************
changed: [192.168.0.2]
TASK [postgresql service] ******************************************************
changed: [192.168.0.2]
RUNNING HANDLER [apache service start] *****************************************
fatal: [192.168.0.2]: FAILED! => {"changed": false, "msg": "Could not find the requested service httpd: host"}
RUNNING HANDLER [apache service enable] ****************************************
RUNNING HANDLER [postgres service start] ***************************************
RUNNING HANDLER [postgres service enable] **************************************
NO MORE HOSTS LEFT *************************************************************
PLAY RECAP *********************************************************************
192.168.0.2 : ok=3 changed=2 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
apacheの起動で失敗しているのはおそらくすでに起動しているからでしょう。
そして以下コマンドで本実行です。エラーが起きなければインストールは完了です。
ansible-playbook -i hosts sample-playbook.yml
今回はここまでにします。
Playbookの中にループ処理などを入れることが出来るのでいつかまとめたいと思います。
それではまた。