Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

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

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

image

2.playbookファイルの相関

image

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モジュール】」について。

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away