当記事はケーススタディの連載となっています。目次は【こちら】です。
最新のソースコードは【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実行が失敗しないようにしています。
##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のインストール・配置]」について。
連載の目次は【こちら】です。