【連載01】204.yumにて必要なライブラリ／ミドル／ソフトウェアをインストールする【Ansible yumモジュール】

<b><font color="#ff6633">当記事はケーススタディの連載となっています。目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f
)です。</font></b>
<b><font color="#ff6633">最新のソースコードは[【GitHub】](https://github.com/csfactorygihubblog001/blogansible)で公開中です。</font></b>
サーバの責務は<b>[こちら](http://qiita.com/CsFactoryitter/items/032cc339048e52ee3586)</b>で確認ください。

##1.yumでのインストール概要
yumを利用して必要なライブラリ/ソフトウェア/ミドルウェアをインストールする。

![image](https://qiita-image-store.s3.amazonaws.com/0/98085/c2763221-5702-8237-b91e-cb517b7fee49.png)

##2.playbookファイルの相関
![image](https://qiita-image-store.s3.amazonaws.com/0/98085/f62baba0-9666-a3e1-827e-5d44e791cc88.png)

##3.playbook(site.yml)
${ANSIBLE_HOME}/site.yml
[メインとなるplaybook(site.yml)](http://qiita.com/CsFactoryitter/items/3112c6d504d3b5a58011#3%E3%83%A1%E3%82%A4%E3%83%B3%E3%81%A8%E3%81%AA%E3%82%8Bplaybooksiteyml)参照

##4.yumインストール用のplaybook
${ANSIBLE_HOME}/operations/0012_yum.yml

```yaml:0012_yum.yml
# ===================
# yumにてパッケージをインストールする(yum.yml)
# =================== 

# ===================
# すべてのサーバにインストールするパッケージ
# 主にサーバ固有のミドルウェア以外のライブラリやソフトウェア
# をインストールする
# ===================
- hosts: all
  sudo: no
  remote_user: root
  tasks:
    - name: YUMインストール(全体)
      yum: name=firewalld state=present
    - yum: name={{rpm.package.vim }} state=present
    - yum: name={{rpm.package.openssl }} state=present
    - yum: name={{rpm.package.wget }} state=present
    - yum: name={{rpm.package.unzip }} state=present
    - yum: name={{rpm.package.gcc }} state=present
    - yum: name={{rpm.package.git }} state=present
    - yum: name={{rpm.package.rsync }} state=present
    - yum: name={{rpm.package.libffi_devel }} state=present
    - yum: name={{rpm.package.bind_utils }} state=present
    - yum: name={{rpm.package.net_tools }} state=present
    - yum: name={{rpm.package.manpage }} state=present
    - yum: name={{rpm.package.chrony }} state=present
    - yum: name={{rpm.package.openssl_devel }} state=present
    - yum: name={{rpm.package.readline_devel }} state=present
    - yum: name={{rpm.package.zlib_devel }} state=present
    - yum: name={{rpm.package.psmisc }} state=present
    - yum: name={{rpm.package.nfs_utils }} state=present
    - yum: name={{rpm.package.mlocate }} state=present
    - yum: name={{rpm.package.mariadb }} state=present
    - yum: name={{rpm.package.expect }} state=present
    - yum: name={{rpm.package.lsof }} state=present
    - yum: name={{rpm.package.python_passlib }} state=present

    # ===================
    #AnsibleにてSELinuxを実行するのに必要
    # ===================
    - yum: name={{rpm.package.libselinux_python }} state=present
 
# ===================
# アパッチをインストール
# java APサーバのTOMCATはyumではなく直接TOMCATのサイトからダウンロードした
# ものを使用する為ここではインストールしない
# ===================
- hosts: ap_admin
  sudo: no
  remote_user: root
  vars_files:
    - ../vars/yum.yml
  tasks:
    - name: YUMインストール(apserv01とadminserv0にアパッチをインストール)
      yum: name={{rpm.package.httpd }} state=present
    - yum: name={{rpm.package.mod_ssl }} state=present
 
# ===================
# mysql(mariadb-server)をインストール
# adminserv01にインストールするのは本番デプロイ前の確認用
# ===================
- hosts: db_admin
  sudo: no
  remote_user: root
  vars_files:
    - ../vars/yum.yml
  tasks:
    - name: YUMインストール(dbserv01とadminserv01にmysqlをインストール)
      yum: name={{rpm.package.mariadb_server }} state=present
 
# ===================
# adminserv01のみでyumからインストールするのはopenvpnのみ
# SelniumやTomcatは本家サイトより直接ダウンロードする
# ===================
- hosts: adminserv01
  sudo: no
  remote_user: root
  vars_files:
    - ../vars/yum.yml
  tasks:
    # ===================
    # ・openvpnをyumからインストールする為EPELリポジトリをインストールする
    # ・openvpnに設定するSSL証明書作成にはeasy_rsaで作成する(直接OpenSSLコマンド使用しない)
    # ===================
    - name: YUMインストール(adminserv01にopenvpn関連をインストール。またアパッチのSVNモジュールもインストール)
      yum: name={{rpm.package.epel }} state=present
    - yum: name={{rpm.package.openvpn }} state=present
    - yum: name={{rpm.package.easy_rsa }} state=present
    - yum: name=mod_dav_svn state=present
```

- <b><font color="#0066ff">【YUMモジュール】Ansibleでのyumインストールモジュール</font></b>

Ansible

書式：
>yum: name=\${ライブラリ名} state=${present または latest またはabsent}

例：
firewalldがインストールされていなければする。

```yaml:
yum: name=firewalld state=present
```

|state|状態|
|:------|:------|
|present|インストールされていること|
|latest|最新がインストールされていること|
|absent|インストールされていないこと|

##5.yumインストール用のplaybook(/vars/yum.yml)
${ANSIBLE_HOME}/vars/yum.yml

```yaml:
rpm:
    package:
      vim: vim
      openssl: openssl
      httpd: httpd
      wget: wget
      unzip: unzip
      gcc: gcc
      git: git
      rsync: rsync
      libffi_devel: libffi-devel.x86_64
      bind_utils: bind-utils
      net_tools: net-tools
      mod_ssl: mod_ssl
      manpage: man-pages-ja
      chrony: chrony
      openssl_devel: openssl-devel
      readline_devel: readline-devel
      zlib_devel: zlib-devel
      psmisc: psmisc
      nfs_utils: nfs-utils
      mlocate: mlocate
      mariadb: mariadb
      mariadb_server: mariadb-server
      epel: epel-release
      openvpn: openvpn
      expect: expect
      libselinux_python: libselinux-python
      easy_rsa: easy-rsa
```

rpm
├── package
│   └── vim : vim
│   └── openss:oepnssl
・・・
の階層でYUMパッケージ名を定義している。

変数を使う場合は複数個所で利用する場合は良いですが
・一ヵ所からしか参照されない
・本番環境と開発環境で値を切り替える必要がある（環境依存するIPやホスト名、パスやポート等）
でない場合はかえって直感性を失ってしまうかもしれません。
今回のyum.ymlも再利用性もなく、本番環境と開発環境での切り替えが不要な為、変数を外部化するメリットは薄い気がしますｗ

次回は「[SELinuxを無効化する【Ansible SELinuxモジュール】](http://qiita.com/CsFactoryitter/items/c3670600f51bf4903dd7)」について。

<b><font color="#ff6633">連載の目次は[【こちら】](http://qiita.com/CsFactoryitter/items/6b8308b96afafd61ce5f)です。</font></b>