備忘録 AnsibleでApacheを導入してみる。

Ansibleを利用し、CentOS 6とCent OS 7にApacheを導入してみる。

#1. playbookを書いてみた。

やりたいことは、
    - yumで apacheを導入
    - httpdプロセスを起動
    - iptablesまたは、firewalldで80portを設定
    - iptables/firewalldの変更があれば、プロセス再起動

で、書いてみた内容が以下。

``` apache.yml
---
- hosts: kobatest
  tasks:
   - name: install apache
     yum: name=httpd

   - name: CentOS6 start httpd
     service: name=httpd state=restarted
     when:  (ansible_distribution == "CentOS" and ansible_distribution_major_version == "6")

   - name: CentOS7 start htpd
     systemd: name=httpd state=restarted
     when:  (ansible_distribution == "CentOS" and ansible_distribution_major_version == "7")

   - name: iptables allow port 80
     lineinfile: dest=/etc/sysconfig/iptables line="-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT" insertafter="^:OUTPUT "
     notify: restart iptables
     when:  (ansible_distribution == "CentOS" and ansible_distribution_major_version == "6")

   - name: firewall-cmd allow port 80
     command: firewall-cmd --permanent --add-port=80/tcp
     notify: restart firewalld
     when: (ansible_distribution == "CentOS" and ansible_distribution_major_version == "7")

  handlers:
     - name: restart iptables
       service: name=iptables state=restarted

     - name: restart firewalld
       service: name=firewalld state=restarted
```

CentOS 6と7ではservice/systemdやiptables/firewalldなどの違いがある。
とりあえずサービスの起動については

・service
`service: name=httpd state=restarted`

・systemd
`systemd: name=httpd state=restarted`

とかいてみた。
バージョンの違いによって、実行を切り替えたいので、以下の書き方でやる（例：OSがCent OSでバージョンが 7の場合）。
`when:  (ansible_distribution == "CentOS" and ansible_distribution_major_version == "7")`

firewalldの設定は、まだ調べてないので、とりあえず commandオプションでられつ。

#2. 実行してみた

結果はこちら。

```
# ansible-playbook apache.yml

PLAY [kobatest] *************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************
ok: [brighton002]
ok: [brighton003]

TASK [install apache] *******************************************************************************************
changed: [brighton002]
changed: [brighton003]

TASK [CentOS6 start httpd] **************************************************************************************
skipping: [brighton003]
changed: [brighton002]

TASK [CentOS7 start htpd] ***************************************************************************************
skipping: [brighton002]
changed: [brighton003]

TASK [iptables allow port 80] ***********************************************************************************
skipping: [brighton003]
changed: [brighton002]

TASK [firewall-cmd allow port 80] *******************************************************************************
skipping: [brighton002]
changed: [brighton003]

RUNNING HANDLER [restart iptables] ******************************************************************************
changed: [brighton002]

RUNNING HANDLER [restart firewalld] *****************************************************************************
changed: [brighton003]

PLAY RECAP ******************************************************************************************************
brighton002                : ok=5    changed=4    unreachable=0    failed=0
brighton003                : ok=5    changed=4    unreachable=0    failed=0
```

すべていきました。途中when構文がきいていて、skipされているのもわかる。

#3. 冪統制の確認

実行してみるぞっと。

```
# ansible-playbook apache.yml

PLAY [kobatest] *************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************
ok: [brighton002]
ok: [brighton003]

TASK [install apache] *******************************************************************************************
ok: [brighton002]
ok: [brighton003]

TASK [CentOS6 start httpd] **************************************************************************************
skipping: [brighton003]
changed: [brighton002]

TASK [CentOS7 start htpd] ***************************************************************************************
skipping: [brighton002]
changed: [brighton003]

TASK [iptables allow port 80] ***********************************************************************************
skipping: [brighton003]
ok: [brighton002]

TASK [firewall-cmd allow port 80] *******************************************************************************
skipping: [brighton002]
changed: [brighton003]

RUNNING HANDLER [restart firewalld] *****************************************************************************
changed: [brighton003]

PLAY RECAP ******************************************************************************************************
brighton002                : ok=4    changed=1    unreachable=0    failed=0
brighton003                : ok=5    changed=3    unreachable=0    failed=0
```

install以外は、冪統制が担保されていない・・・
chefよりもこの辺が難しい。これについて次回調査。