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


当記事はケーススタディの連載となっています。目次は【こちら】です。
最新のソースコードは【GitHub】で公開中です。
サーバの責務はこちらで確認ください。

1.yumでのインストール概要

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

2.playbookファイルの相関

3.playbook(site.yml)

${ANSIBLE_HOME}/site.yml
メインとなるplaybook(site.yml)参照

4.yumインストール用のplaybook

${ANSIBLE_HOME}/operations/0012_yum.yml

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
  • 【YUMモジュール】Ansibleでのyumインストールモジュール

Ansible

書式:

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

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

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

5.yumインストール用のplaybook(/vars/yum.yml)

${ANSIBLE_HOME}/vars/yum.yml

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も再利用性もなく、本番環境と開発環境での切り替えが不要な為、変数を外部化するメリットは薄い気がしますw

次回は「SELinuxを無効化する【Ansible SELinuxモジュール】」について。

連載の目次は【こちら】です。