LoginSignup
10
13

More than 5 years have passed since last update.

【連載01】215.Ansibleを使ってjava/Tomcatのインストール・配置する

Posted at

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

1.JDKインストール/設定概要

JDKとTOMCATをインストールします。
JDKとTOMCAT(最新は)yumリポジトリには無い為
事前にダウンロードしてmanageterm端末よりcopyモジュールを使用し
adminserv01サーバに送信しNFS経由でJDK/TOMCATを取得した後
インストールする形式をとります。
manageterm端末からファイル送信は
http://qiita.com/CsFactoryitter/items/1ecf579bcb4f4c6e987e
NFSに関しては
http://qiita.com/CsFactoryitter/items/f951549c9beb962badcb
を参照してください。

※oracleJDKは
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.rpm
を使用すれば取得可能なのでget_urlモジュールを使用すればダウンロード/インストールが可能ですが
今回はURL変更やCookieの変更に影響を受けてansible実行が失敗しないようにしています。

image

2.playbookファイルの相関

image

3.playbook(site.yml)

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

4.JDK・TOMCATインストール/設定のplaybook(/operations/1021_javatomcat.yml)

${ANSIBLE_HOME}/operations/1021_javatomcat.yml

playbook中のコメントの補足に関しては「6.補足説明」を参照。

# ========================================================
# JavaとTomcatをインストール設定(javatomcat.yml)
# ========================================================
---
- hosts: ap_admin
  sudo: no
  vars_files:
    - ../vars/filedir.yml
  remote_user: root
  tasks:
    # ========================================================
    # Javaのインストール確認
    # ========================================================
    - name: javaの存在確認
      shell: which java
      register: java_which
      failed_when: java_which.rc not in [0, 1]

    # ========================================================
    # javaがインストールされていない場合Javaをインストール
    # ========================================================
    - name: Java インストール
      yum: name=/var/opt/data/nfs/java/installer/jdk-7u79-linux-x64.rpm state=present
      when: java_which.rc == 1


    # ========================================================
    # tagにreinstallを指定した場合はTomcatを再インストールする
    # ========================================================
    - name: 実行時に指定するtagsが"reinstall"の場合再実行する為一度削除する
      shell: rm -f /opt/tomcat/bin/startup.sh
      when: target == 'reinstall'

   # ========================================================
    # /opt/tomcat/bin/startup.shファイルが
    # 存在する場合はインストール終了とする(冪等性は当該ファイルで担保)
    # ========================================================
    - name: tomcatの存在確認(以下すべて存在してない場合のみ実行)
      stat: path=/opt/tomcat/bin/startup.sh
      register: tomcatexists

    # ========================================================
    # tar.gz圧縮されたtomatを/tmpに展開する
    # ========================================================
    - name: 未インストールの場合:圧縮ファイルを展開する
      command: tar zxvf /var/opt/data/nfs/tomcat/installer/apache-tomcat-7.0.65.tar.gz -C /tmp/.
      when: not tomcatexists.stat.exists

    # ========================================================
    # /tmp配下にあるtomat7を/opt配下にコピーする
    # ========================================================
    - name: 未インストールの場合:展開したファイルを/opt/tomcat配下にコピーする
      command: "cp -r /tmp/apache-tomcat-7.0.65/. /opt/tomcat/."
      when: not tomcatexists.stat.exists

    # ========================================================
    # tomcatの環境変数を設定するsetenvファイルを/opt/tomcat/binにコピー
    # ========================================================
    - name: 未インストールの場合:envのファイルをコピー
      command: "cp -r /var/opt/data/nfs/tomcat/settings/setenv.sh /opt/tomcat/bin/setenv.sh"
      when: not tomcatexists.stat.exists

    # ========================================================
    # systemdの環境変数を設定するtomcatenviromentファイルをコピーする
    # ========================================================
    - name: 未インストールの場合:systemdのenviromentファイル
      command: "cp  /var/opt/data/nfs/tomcat/settings/tomcatenviroment /etc/sysconfig/tomcatenviroment"
      when: not tomcatexists.stat.exists


    # ========================================================
    # 不要になった/tmpファイルを削除する
    # ========================================================
    - name: 未インストールの場合:展開したフォルダを削除する
      command: rm -rf /tmp/apache-tomcat-7.0.65
      when: not tomcatexists.stat.exists

    # ========================================================
    # /opt/tomcatのパーミッションを再設定TOMCATユーザー 755を設定
    # ========================================================
    - name: 未インストールの場合:パーミッションとユーザーの変更
      file:
          recurse=yes
          group={{path.dir.tomcat_home.group}}
          mode={{path.dir.tomcat_home.permision}}
          owner={{path.dir.tomcat_home.user}}
          path={{path.dir.tomcat_home.path}}
          state={{path.dir.tomcat_home.state}}
      when: not tomcatexists.stat.exists

    # ========================================================
    # 事前に用意したtomcat自動起動設定ファイルを配置する
    # ========================================================
    - name: 未インストールの場合:SYSTEMDのユニットファイルsystemDIRにコピーする
      command: "cp /var/opt/data/nfs/tomcat/settings/tomcat_systemd.template /usr/lib/systemd/system/tomcat.service"
      when: not tomcatexists.stat.exists

    # ========================================================
    # 事前に用意したserver.xmlを配置する
    # ========================================================
    - name: server.xmlのコピー
      command: "cp /var/opt/data/nfs/tomcat/settings/server.xml /opt/tomcat/conf/server.xml"
      when: not tomcatexists.stat.exists


#==================================================================
#adminserv01のserver.xmlの変数を置換する
#==================================================================
- hosts: adminserv01
  sudo: no
  vars_files:
    - ../vars/filedir.yml
    - ../vars/enviroment.yml
  remote_user: root
  tasks:
      #==================================================================
      #adminserv01のserver.xmlの変数を置換する
      #==================================================================
    - name: server.xmlのIPアドレス部分を修正
      replace: dest="/opt/tomcat/conf/server.xml" regexp="<<SERVER_GLOBAL_IP>>" replace="{{tomcat.bindip_admin}}"
      when: not tomcatexists.stat.exists
#==================================================================
#apserv01用にサーバXMLを編集
#==================================================================
- hosts: apserv01
  sudo: no
  vars_files:
    - ../vars/filedir.yml
    - ../vars/enviroment.yml
  remote_user: root
  tasks:
      #==================================================================
      #apserv01のserver.xmlの変数を置換する
      #==================================================================
    - name: server.xmlのIPアドレス部分を修正
      replace: dest="/opt/tomcat/conf/server.xml" regexp="<<SERVER_GLOBAL_IP>>" replace="{{tomcat.bindip_ap}}"
      when: not tomcatexists.stat.exists



#==================================================================
#apserv01,adminserv01のTOMCATをリロード
#==================================================================
- hosts: ap_admin
  sudo: no
  vars_files:
    - ../vars/filedir.yml
  remote_user: root
  tasks:
      #==================================================================
      # 事前に用意したtomcatのユーザーファイルを配置する
      #==================================================================
    - name: tomcat-users.xmlのコピー
      command: "cp /var/opt/data/nfs/tomcat/settings/tomcat-users.xml /opt/tomcat/conf/tomcat-users.xml"
      when: not tomcatexists.stat.exists

      #==================================================================
      # TOMCATサービスをリスタートする
      #==================================================================
    - name: TOMCATサービスをリスタートする
      service: name=tomcat enabled=yes state=restarted
      ignore_errors: True

5 変数設定

5.a 変数設定 Playbook(${ANSIBLE_HOME}/operations/firledir.yml)

---
  path:
    dir:
      data_root:
        path: /var/opt/data
        user: infra
        group: infra
        state: directory
        permision: 755
      tomcat_home:
        path: /opt/tomcat
        user: tomcat
        group: tomcat
        state: directory
        permision: 755
      selenium_home:
        path: /opt/selenium
        user: selenium
        group: selenium
        state: directory
        permision: 755
      selenium_log:
        path: /var/log/selenium
        user: selenium
        group: selenium
        state: directory
        permision: 755

      mysql_data_home:
        path: /var/opt/data/mysql
        user: mysql
        group: mysql
        state: directory
        permision: 755
      tomcat_data_webapps:
        path: /var/opt/data/tomcat/webapps
        user: tomcat
        group: tomcat
        state: directory
        permision: 755
      tomcat_data_work:
        path: /var/opt/data/tomcat/work
        user: tomcat
        group: tomcat
        state: directory
        permision: 755
      nfs_root:
        path: /var/opt/data/nfs
        user: infra
        group: infra
        state: directory
        permision: 755
      nfs_installer:
        path: /var/opt/data/nfs/installer
        user: infra
        group: infra
        state: directory
        permision: 755
      nfs_work:
        path: /var/opt/data/nfs/work
        user: infra
        group: infra
        state: directory
        permision: 755
      nfs_settings:
        path: /var/opt/data/nfs/settings
        user: infra
        group: infra
        state: directory
        permision: 755
      jenkins_root:
        path: /var/opt/data/jenkins
        user: tomcat
        group: tomcat
        state: directory
        permision: 755
      ssl_root:
        path: /etc/ssl/apserv_cets
        user: root
        group: root
        state: directory
        permision: 755
  file:
      tomcat:
        install_check_file: /opt/tomcat/bin/startup.sh
        installer: /var/opt/data/nfs/installer/tomcat7.tar.gz
        unzip_ch_path: /tmp/.
        unzip_after_file: /tmp/apache-tomcat-7.0.65
      nmon:
        install_check_file: /bin/nmon
        installer: /var/opt/data/nfs/installer/centos7.tar.gz
        unzip_ch_path: /bin
        unzip_after_file: /bin/nmon_x86_64_centos7
      java:
        install_check_cmd: which java
        installer: /var/opt/data/nfs/installer/jdk-7u79-linux-x64.rpm


5.b 変数設定 Playbook(${ANSIBLE_HOME}/operations/enviroment.yml)

---
nfs:
  exportnetwork: 192.168.134.0
apache:
  user01:
    name: user01
    password: user01
  user02:
    name: user02
    password: user02
  user03:
    name: user03
    password: user03

openvpn:
  client_route: 192.168.102.0
  vpn_network: 10.99.0.0

tomcat:
  bindip_admin: 192.168.134.198
  bindip_ap: 192.168.134.196

mysql:
  password: password

nic:
  vpn: tun0
  lo: lo
  outer: enp0s9
  inner: enp0s8

6 説明

6.a 処理順説明

Java/Tomcatのインストールは以下の手順で行います。
1. Javaが既にインストールされているか確認。(インストールされていれば以降の処理を実行しない(冪等性担保)
2. NFS上に存在するJavaインストール用のrpmを使用してJavaインストール
3. NFS情報TOMACATのtarボールを展開する
4. TOMCATルートディレクトリを/opt配下に移動
5. TOMCAT起動の環境変数設定のファイル(sentenv.sh)をNFS上からコピーしてTOMCATルートディレクトリ配下にコピー
6. SYSTEMDから起動する際のTOMCAT用環境変数設定のファイル(tomcatenviroment)をNFS上からコピーしてTOMCATルートディレクトリ配下にコピー
7. TOMCATのパーミッション/オーナー設定
8. SystemDで起動できるようにSYSTEMDの設定ファイルを配置
9. TOMCATのserver.xmlをNFSからコピー
10. server.xmlにはadminserv01とapserv01でそれぞれ固有のIPアドレスを記述するようにしている為server.xml内の文字列を置換
11. TOMCATのWEBデプロイコンソールが利用できる用にユーザーを追加したファイルをNFSからコピー
12. SystemDで再スタート

※今回のjavaインストール関して冪等性の担保は
which javaが実行出来た場合にはJavaインストール処理は行わない。
tomcatの起動シェルが存在する場合にはTOMCATのインストール/設定処理は行わない。
とちょっと大雑把になっていますがバージョンアップや修正したい場合には
再度実行できないといけない為、もう少し考慮が必要かと思います。
簡単な方法はtagにtomate_reinstallやjava_reinstallが指定されていれば
指定のバージョンやミドルウェアがインストールされているか確認する
インストールされていればファイル削除やremoveを行う。
等のstatモジュールとregisterモジュールを使用して
冪等性の担保を行う等の余地があるかと思います。

6.b. 実行コマンド補足説明

上記にかきましたが事前にJavaインストールrpmをダウンロードしたものを
インストールするのではなく直接ansibleにてダウンロード/インストールする場合は以下でも可能です
(バージョンなんかは気にしてください)

get_urlモジュール,yumモジュール
get_url: url=http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.rpm dest=/tmp/jdk.rpm  headers="Cookie: oraclelicense=accept-securebackup-cookie"
yum: name=/tmp.jdk.rpm state=present
tarの解凍,所定のファイルコピー(shell/commandモジュール)

Ansibleには何故かansbile実行端末からリモートへのコピーやらはありますが
操作しているリモートサーバ内でのcpやらmvを実行するモジュールがありません。
tarコマンドをおこなうモジュールもありません。
なので今回はshellモジュールを使用します。
shell/commandモジュールは他のansibleモジュールと違い
冪等性の担保を自分でする必要があります。
registerモジュールを使用して変数に登録した上whenを使って確認後実行
とするのが冪等性を担保するうえでも良いかと思います。

# ========================================================
# statを使用してファイルの存在確認結果をXXXXExistsに登録する
# ========================================================
  stat: path=/tmp/XXXXX
  register: XXXXexists
# ========================================================
# XXXXExistsに保存した情報から/tmp/XXXXXファイルが存在しない場合だけtarコマンドを
#実行する
# ========================================================
  command: tar zxvf /tmp/XXXXX -C /tmp/YYYY/.
  when: not tomcatexists.stat.exists
パーミッション/オーナーの設定 (fileモジュール)

今までも沢山出てきていますが、fileモジュールで行います。

file:
        recurse = %YES=ディレクトリの場合再帰的に設定%
        group   = %ファイル/ディレクトリの所有グループ名%
        mode    = %パーミッション%
        owner   = %ファイル/ディレクトリの所有者%
        path    = %ファイル/ディレクトリのパス%
        state   = %file=ファイル , directory=ディレクトリ , absent-削除 , hard/link=リンク , touch=touch%

fileモジュールという名前ですがディレクトリに対しても実行可能です。
ここが役に立ちます。ファイルモジュール(日本語)

次回は「[216.seleniumのインストール・配置]」について。

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

10
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
13