Copyright © 2015 NTT DATA Corporation
第3回 Puppetユーザ会
発表資料
2016年4月20日
株式会社NTTデータ
黒岩 良太
井上 怜
商用ミドルウェアのPuppet化で気を付けたい5つのこと
~ Oracle製品(Weblogic、Oracle Client)編 ~
2Copyright © 2015 NTT DATA Corporation
アジェンダ
1. 今回の発表内容(なぜ商用ミドルウェアにPuppet?)
2. 商用製品のPuppet化で気を付けたい5つのこと
2-1. 商用ミドルウェアのPuppet化に向けて
商用ミドルウェアのインストール/設定についてPuppet化できるかチェック
2-2. WeblogicのPuppet化事例
2-3. Oracle ClientのPuppet化事例
3. Puppetモジュール化後のミドルウェア試験自動化例
・事例1) Weblogicの設定ファイルのパラメータ確認試験をServerspecで
・事例2) Oracle Clientのコネクションタイムアウト試験を内製のテスト自動化ツールで
4. まとめ
黒岩
井上
3Copyright © 2015 NTT DATA Corporation
はじめに 自己紹介
名前: 黒岩 良太
所属: 株式会社NTTデータ
公共・社会基盤事業推進部 プロジェクト推進統括部技術戦略担当
経歴:
・2012年度入社
・2012~2014 パブリッククラウドサービスの比較検討案件を担当
(Amazon Web ServicesとCloudnの比較を実施)
・2014~2016 大規模プロジェクトでインフラ構築・維持を担当
(構築・維持ツールとしてPuppetを活用)
4Copyright © 2015 NTT DATA Corporation
1. 今回の発表内容(なぜ商用ミドルウェアにPuppet?)
商用ミドルウェアでもPuppet化する価値がある!
たとえば、
・多くのサーバに導入(インストール)する
・設定変更がたびたび発生する
という商用ミドルウェアはPuppet化する価値あり
今回の発表では、
Oracle製品(Weblogic、Oracle Client)を
例として、
・商用ミドルウェアのPuppet化のノウハウ
・Puppet適用後のミドルウェア試験の自動化
について発表します。
今回の発表対象
第1回Puppetユーザ会資料より抜粋(2015/10/28 NTTデータ 落合)
+試験自動化
5Copyright © 2015 NTT DATA Corporation
2. 商用ミドルウェアのPuppet化で気を付けたい5つのこと
①商用ミドルウェアのインストール方法に気をつけろ
②商用ミドルウェアの設定方法に気をつけろ
③インストール後に再度インストーラを叩かないように気をつけろ
④Puppetのコマンドタイムアウトに気をつけろ
⑤execリソースを複数使うときは気をつけろ
6Copyright © 2015 NTT DATA Corporation
2-1. 商用ミドルウェアのPuppet化に向けて(インストール編)
商用ミドルウェアのインストールについて「Puppet化する/しない」の考え方を以下に示します。
項
番
分類 チェック項目 オープンソース
ミドルウェア
商用ミドルウェア
JBoss EAP Weblogic Oracle
Client
特定業界向け
業務パッケージ
1 インストール
方式
rpmパッケージで
インストール可能?
× × × ×
2 サイレント
インストール可能?
○
(zipファイル解
凍)
○
(silent.xmlファイ
ルを使用)
○
(レスポンスファ
イルを使用)
×
3 CUI対話形式?
- ○ ○
○
(手動インストー
ルのみ)
4 GUI対話形式? - ○ ○ -
5 インストール
するサーバ
の数
手動でインストール可
能な数か?
×
(導入台数:
約200台)
○
(導入台数:
15台)
×
(導入台数:
約140台)
○
(導入台数:
5台)
チェック結果 インストール方式および導入
台数を踏まえて・・・
・Puppet化 or
・手動インストール
Puppet化
(インストールモ
ジュール作成)
Puppet化
(インストールモ
ジュール作成)
Puppet化
(インストールモ
ジュール作成)
手動
インストール
低
難
易
度
高
インストールの
Puppet化可能
7Copyright © 2015 NTT DATA Corporation
2-1. 商用ミドルウェアのPuppet化に向けて(設定編)
項
番
分類 チェック項目 オープンソース
ミドルウェア
商用ミドルウェア
JBoss EAP Weblogic Oracle
Client
特定業界向け
業務パッケージ
1 設定の方
法
ファイル形式?
(ファイルの置き換え
で設定可能か?)
○
(standalone.xml
で設定)
×
○
(tnsnames.ora
など) ○
(ファイルとコマン
ドの両方を使用)2 コマンドで設定?
○
○
(pythonファイル
の実行が必要)
-
3 CUI対話形式?
○ ○ - -
4 GUI対話形式? ○ ○ - -
5 設定する
サーバ台数
手動で設定可能な数
か?
×
(導入台数:
約200台)
○
(導入台数:
15台)
×
(導入台数:
約140台)
○
(導入台数:
5台)
チェック結果 設定方式および設定する台
数を踏まえて・・・
・Puppet化 or
・手動設定
Puppet化
(設定モジュール
作成)
Puppet化
(設定モジュール
作成)
Puppet化
(設定モジュー
ル作成)
手動設定
低
難
易
度
高
設定の
Puppet化可能
商用ミドルウェアの設定について「Puppet化する/しない」の考え方を以下に示します。
8Copyright © 2015 NTT DATA Corporation
2. 商用ミドルウェアのPuppet化で気を付けたい5つのこと
①商用ミドルウェアのインストール方法に気をつけろ
②商用ミドルウェアの設定方法に気をつけろ
③インストール後に再度インストーラを叩かないように気をつけろ
④Puppetのコマンドタイムアウトに気をつけろ
⑤execリソースを複数使うときは気をつけろ
9Copyright © 2015 NTT DATA Corporation
2-2. WeblogicのPuppet化事例
Weblogicのインストールの流れ(インストール手順)
作業概要 コマンド
1 Weblogicインストールディレクトリの
オーナ権限を変更
chown weblogic:weblogic /opt/weblogic
2 weblogicユーザにユーザをスイッチ su – weblogic
3
環境変数を設定
vi ~/.profile
umask 022
export JAVA_HOME=/usr/java/jdk1.7.0_40
export PATH=$JAVA_HOME/bin:$PATH:/sbin
export LC_ALL=en_US.UTF-8
export USER_HOME=/home/weblogic
export DOMAIN_HOME=/var/opt/weblogic/domains/MDM
export MW_HOME=/opt/webloigc
4 設定した環境変数の読み込み . ~/.profile
5 wls1036_generic.jar および
silent.xml
のファイルが
「/home/weblogic/staging」にあ
るか確認
ls /home/weblogic/staging
6
Silentモードでインストールを開始
cd ~/staging
java -jar wls1036_generic.jar -mode=silent -silent_xml=silent.xml
7 rootユーザにユーザをスィッチ su - root
8 ドメインのロケーションを作成 mkdir /var/opt/weblogic/domains
9 作成したドメインロケーションの
オーナー権限を変更
chown weblogic:weblogic /var/opt/weblogic/domains
10 weblogicユーザにユーザをスィッ
チ
su - weblogic
11 WLSTを起動するための環境変数
を設定
. ./opt/weblogic/wlserver_10.3/server/bin/setWLSEnv.sh
12 ドメイン作成スクリプトの実行
Exiting...と表示されると完了
java weblogic.WLST
/opt/weblogic/wlserver_10.3/wlsDomainCreationAndConfiguration.py
②インストール実行
大まかな流れ
①インストール前作業
ディレクトリ作成、ユーザスイッチ
インストール資材配布
(jar、xmlファイル)
④ドメイン作成
③ドメイン作成前の準備
ディレクトリ作成、ユーザスイッチ
環境変数の設定
10Copyright © 2015 NTT DATA Corporation
2-2. WeblogicのPuppet化事例
class weblogic::install (
$weblogic_archive_name = 'wls1036_generic.jar',
$weblogic_archive_src = 'modules/weblogic/wls1036_generic.jar',
){
file { '/opt/weblogic':
ensure => directory,
owner => 'weblogic',
group => 'weblogic',
mode => '0750',
}
file { '/home/weblogic/.profile':
ensure => present,
owner => 'weblogic',
group => 'weblogic',
mode => '0664',
content => template("weblogic/dot_profile.erb"),
}
file { '/home/weblogic/staging/silent.xml':
ensure => present,
owner => root,
group => root,
mode => '0644',
content => template("weblogic/silent.xml.erb"),
require => File [ "/home/weblogic/staging/" ] ,
}
・・・
}
①インストール前作業
・ディレクトリを作成
・.profile配布
・jar/xmlファイル配布
modules/weblogic/manifests/install.ppインストール手順からPuppetモジュール
化すると...
②~④は次のスライド
以降で説明
②インストール実行
①インストール前作業
ディレクトリ作成、ユーザスイッチ
インストール資材配布
(jar、xmlファイル)
④ドメイン作成
③ドメイン作成前の準備
ディレクトリ作成、ユーザスイッチ
環境変数の設定
11Copyright © 2015 NTT DATA Corporation
class weblogic::install (
$weblogic_archive_name = 'wls1036_generic.jar',
$weblogic_archive_src = 'modules/weblogic/wls1036_generic.jar',
){
・・・
file { '/home/weblogic/staging/weblogic_version':
ensure => present,
owner => weblogic,
group => weblogic,
mode => '0644',
content => template("weblogic/weblogic_version.erb"),
require => File [ "/home/weblogic/staging/" ] ,
}
exec { 'weblogic_install':
command => "/usr/bin/java -jar wls1036_generic.jar -mode=silent -
silent_xml=silent.xml; sleep 60;",
user => 'weblogic',
cwd => '/home/weblogic/staging',
refreshonly => true,
subscribe => File ['/home/weblogic/staging/weblogic_version'],
require => File [ ['/home/weblogic/staging/wls1036_generic.jar',
'/home/weblogic/staging/silent.xml'] ],
}
}
2-2. WeblogicのPuppet化事例
インストール手順からPuppetモジュール
化すると...
modules/weblogic/manifests/install.pp
②インストール実行
①インストール前作業
ディレクトリ作成、ユーザスイッチ
インストール資材配布
(jar、xmlファイル)
④ドメイン作成
③ドメイン作成前の準備
ディレクトリ作成、ユーザスイッチ
環境変数の設定
【ポイント】
すでにweblogicがインストールさ
れている場合、再度インストーラ
が起動しないようにexecリソー
スのrefreshonly属性を使用
refreshonly属性とは・・・
ファイルが変更されたら指定したコマ
ンドを実行する属性
対象ファイルはsubscribe属性で指定
11gR1(10.3.6.0.6)
weblogic_version.erb
ファイルの有無で
インストールされている・
いないを判定する
12Copyright © 2015 NTT DATA Corporation
2-2. WeblogicのPuppet化事例
class weblogic::create_domain (
$admin_url,
$jdbc_url,
$cmo,
$env,
){
・・・
exec { "java weblogic.WLST
/opt/weblogic/wlserver_10.3/wlsDomainCreationAndConfiguration.py":
command => "/bin/ksh -c 'source
/opt/weblogic/wlserver_10.3/server/bin/setWLSEnv.sh; /usr/bin/java weblogic.WLST
/opt/weblogic/wlserver_10.3/wlsDomainCreationAndConfiguration.py'",
user => 'weblogic',
cwd => '/opt/weblogic/wlserver_10.3/',
timeout => 0,
logoutput => on_failure,
refreshonly => true,
subscribe => File ['/home/weblogic/staging/weblogic_version'],
require => [
Exec ["weblogic_patch_apply"],
File ["/opt/weblogic/wlserver_10.3/wlsDomainCreationAndConfiguration.py"],
]
}
【ポイント】
execリソースのrefreshonly
属性を使用(インストールと同様、
ドメイン作成後、再実行されない
ように定義)
modules/weblogic/manifests/create_domain.pp
③ドメイン作成前の準備
ディレクトリ作成、環境変数の設定
②インストール実行
①インストール前作業
ディレクトリ作成、ユーザスイッチ
インストール資材配布
(jar、xmlファイル)
④ドメイン作成
③ドメイン作成前の準備
ディレクトリ作成、ユーザスイッチ
環境変数の設定
インストール手順からPuppetモジュール
化すると...
【ポイント】
ドメイン作成に時間がかかって、
コマンドタイムアウトが発生してしま
うことがあったため、execリソースの
timeout属性で“0”を指定
(タイムアウトを無効化)
timeout属性とは・・・
コマンド実行で待つ時間。この時間を過
ぎるとコマンド実行が失敗したと見なされ
る。デフォルトは300秒。
13Copyright © 2015 NTT DATA Corporation
2-3. Oracle ClientのPuppet化事例
Oracle Clientインストールの流れ(インストール手順)
項
番
作業概要 コマンド
1 インストール先フォルダを作成 mkdir /opt/oracle
2 作成したインストール先フォルダのオーナー権
限を変更
chown oracle:oinstall /opt/oracle
3 oracleユーザにユーザをスィッチ su - oracle
4 以下のunzipコマンドを実行して、インストール
ファイルを解凍
cd /home/oracle/staging
unzip p13390677_112040_Linux-x86-64_4of7.zip
5 以下のコマンドを実行して、言語設定を実施 export LC_ALL=en_US.UTF-8
6 Silentモードでインストール実行
./runInstaller -silent -responseFile
/home/oracle/staging/client_install.rsp
7 rootユーザにユーザをスィッチ su - root
8 /etc/oratabを作成
また、環境変更スクリプトを作成
sh /opt/oracle/product/11.2.0/client_2/root.sh
9 /etc/oraInst.locを作成 sh /opt/oracle/orainstRoot.sh
10 /opt/oracle/配下の権限を変更する chmod -R 755 /opt/oracle/
11 mdmsapユーザへスイッチ su – mdmsap
12 環境変数の設定
vi ~/.profile
. ~/.profile
13 oracleユーザにユーザをスィッチ su – oracle
14
tnsnames.oraを作成&配布
vi
/opt/oracle/product/11.2.0/client_2/network/admin/tn
snames.ora
①インストール前準備
ディレクトリ作成、ユーザスイッチ
インストール資材配布、環境変数の設定
②インストール実行
大まかな流れ
③インストール後の
セットアップ
/etc/oratabの作成
/etc/oraInst.locの作成
環境変数の設定
tnsnames.oraの設定
14Copyright © 2015 NTT DATA Corporation
2-3. Oracle ClientのPuppet化事例
class oracle::install_client (
$oracle_client_archive_name = 'p13390677_112040_Linux-x86-64_4of7.zip',
$oracle_client_archive_src = 'modules/oracle/p13390677_112040_Linux-x86-64_4of7.zip',
$oracle_client_files = 'modules/oracle',
){
・・・
file { '/var/tmp/oracle/oracle_client_version':
ensure => present,
owner => oracle,
group => oinstall,
mode => '0644',
content => template("oracle/oracle_client_version"),
require => File ["/var/tmp/oracle"],
}
file { '/home/oracle/staging/install_oracle_client.sh':
ensure => present,
owner => root,
group => root,
mode => '0755',
content => template("oracle/install_oracle_client.sh"),
require => File ['/opt/oracle/','/home/oracle/staging'],
}
exec { '/bin/bash /home/oracle/staging/install_oracle_client.sh':
command => "/bin/bash /home/oracle/staging/install_oracle_client.sh",
user => 'root',
cwd => '/home/oracle/staging/',
refreshonly => true,
subscribe => File ['/var/tmp/oracle/oracle_client_version'],
require => [
File ["/home/oracle/staging/${oracle_client_archive_name}"],
File ['/home/oracle/staging/client_install.rsp'],
File ['/home/oracle/staging/install_oracle_client.sh'],
]
}
}
①インストール前準備
ディレクトリ作成、ユーザスイッチ
インストール資材配布、環境変数の設定
②インストール実行
③インストール後の
セットアップ
・/etc/oratabの作成
・/etc/oraInst.locの作成
・環境変数の設定
【ポイント】
execリソースのrefreshonly属性を
使用(Weblogicインストールと同様、再
実行されないように定義)
【ポイント】
複数のexecリソースで定義する
と・・・怒涛のrequire地獄に!
それを回避するために、1つの
execリソースでインストール~イ
ンストール後のセットアップまで
を実施。
インストール~インストール後の
セットアップを実施するシェルを
作成し、execからはそれを実行
する定義に。
#!/bin/bash
・・・
sh /opt/oracle/ … /root.sh
sh /opt/oracle/orainstRoot.sh
・・・
modules/oracle/manifests/install_client.pp
15Copyright © 2015 NTT DATA Corporation
2-3. Oracle ClientのPuppet化事例
class oracle::install_client (
$oracle_client_archive_name = 'p13390677_112040_Linux-x86-64_4of7.zip',
$oracle_client_archive_src = 'modules/oracle/p13390677_112040_Linux-x86-64_4of7.zip',
$oracle_client_files = 'modules/oracle',
){
・・・
file { '/var/tmp/oracle/oracle_client_version':
ensure => present,
owner => oracle,
group => oinstall,
mode => '0644',
content => template("oracle/oracle_client_version"),
require => File ["/var/tmp/oracle"],
}
file { '/home/oracle/staging/install_oracle_client.sh':
ensure => present,
owner => root,
group => root,
mode => '0755',
content => template("oracle/install_oracle_client.sh"),
require => File ['/opt/oracle/','/home/oracle/staging'],
}
exec { '/bin/bash /home/oracle/staging/install_oracle_client.sh':
command => "/bin/bash /home/oracle/staging/install_oracle_client.sh",
user => 'root',
cwd => '/home/oracle/staging/',
refreshonly => true,
subscribe => File ['/var/tmp/oracle/oracle_client_version'],
require => [
File ["/home/oracle/staging/${oracle_client_archive_name}"],
File ['/home/oracle/staging/client_install.rsp'],
File ['/home/oracle/staging/install_oracle_client.sh'],
]
}
}
①インストール前準備
ディレクトリ作成、ユーザスイッチ
インストール資材配布、環境変数の設定
②インストール実行
③インストール後の
セットアップ
・/etc/oratabの作成
・/etc/oraInst.locの作成
・環境変数の設定
【ポイント】
execリソースのrefreshonly属性を
使用(Weblogicインストールと同様、再
実行されないように定義)
【ポイント】
複数のexecリソースで定義する
と・・・怒涛のrequire地獄に!
それを回避するために、1つの
execリソースでインストール~イ
ンストール後のセットアップまで
を実施。
インストール~インストール後の
セットアップを実施するシェルを
作成し、execからはそれを実行
する定義に。
#!/bin/bash
・・・
sh /opt/oracle/ … /root.sh
sh /opt/oracle/orainstRoot.sh
・・・
modules/oracle/manifests/install_client.pp
例、
「コマンドAを実行した後に、Bを実行して、
AとBが共に完了したらCを実行する」 という定義を書くと・・・
exec {‘Exec_A':
command => “コマンドA",
}
exec {‘Exec_B':
command => “コマンドB",
require => Exec [“Exec_A"],
}
exec {‘Exec_C':
command => “コマンドC",
require => [ Exec [“Exec_A”], Exec [‘Exec_B’] ],
}
これを1つのシェルにまとめて1つのexecリソースで実行
exec {‘Exec_ABC':
command => “ABC.sh",
}
#!/bin/sh
コマンドA;
コマンドB;
コマンドC;
ABC.sh
16Copyright © 2015 NTT DATA Corporation
2. 商用ミドルウェアのPuppet化で気を付けたい5つのこと
•商用ミドルウェアがサイレントインストール可能か確認すべし
①商用ミドルウェアのインストール方法に気をつけろ
•CUI/GUI対話形式でないことを確認すべし
②商用ミドルウェアの設定方法に気をつけろ
•execリソースのrefreshonlyで再実行時のPuppetの挙動を設定すべし。
③インストール後に再度インストーラを叩かないように気をつけろ
•Puppetのコマンドタイムアウトはデフォルト300秒。状況に応じて無効化すべし。
④Puppetのコマンドタイムアウトに気をつけろ
•怒涛のrequire地獄を避けるために、1つのexecリソースにまとめて定義すべし。
⑤execリソースを複数使うときは気をつけろ
17Copyright © 2015 NTT DATA Corporation
アジェンダ
1. 今回の発表内容(なぜ商用ミドルウェアにPuppet?)
2. 商用製品のPuppet化で気を付けたい5つのこと
2-1. 商用ミドルウェアのPuppet化に向けて
商用ミドルウェアのインストール/設定についてPuppet化できるかチェック
2-2. WeblogicのPuppet化事例
2-3. Oracle ClientのPuppet化事例
3. Puppetモジュール化後のミドルウェア試験自動化例
・事例1) Weblogicの設定ファイルのパラメータ確認試験をServerspecで
・事例2) Oracle Clientのコネクションタイムアウト試験を内製のテスト自動化ツールで
4. まとめ
黒岩
井上
18Copyright © 2015 NTT DATA Corporation
はじめに 自己紹介
名前: 井上 怜 (いのうえ れい)
所属: 株式会社NTTデータ
公共・社会基盤事業推進部 プロジェクト推進統括部技術戦略担当
経歴:
・2014年度入社
・2014~2016 大規模プロジェクトでインフラ構築・維持を担当
19Copyright © 2015 NTT DATA Corporation
3. Puppetモジュール化後のミドルウェア試験自動化例
Puppetを用いた構築自動化だけでなく、
そのあとに続くシステム基盤試験の自動化を行った
詳細設計
例)可用性設計
処理方式設計 など
パラメータ設計
例)ミドルウェアの各設定値の決定
ディレクトリ一覧・ユーザ一覧作成 など
構築(インストール・設定)
設計に従ってサーバやOSの設定、および
ミドルウェアのインストールを実施
システム基盤試験(単体試験)
例)ディレクトリ、ユーザが作成されていることの検証
パラメータが正しく設定されていることの検証
必要なRPMがあること など
システム基盤試験(連携試験)
例)フェイルオーバ/フェイルバックすることの確認
ロードバランサの振り分けに問題ないことの確認
最大コネクション数に達したときの挙動確認
試験する
試験する
Puppetで自動化
Serverspecで自動化
(事例1で紹介)
一部を内製ツールで自動化
(事例2で紹介)
20Copyright © 2015 NTT DATA Corporation
確認内容 /var/opt/weblogic/domains/xxx/config/config.xml
インストール後の
WebLogic設定確認
- 省略-
<name>ADMIN</name>
<log>
<rotation-type>byTime</rotation-type>
<number-of-files-limited>true</number-
of-files-limited>
</log>
<machine>machine1</machine>
- 省略-
Serverspecを用いたWebLogicインストール後の単体試験(パラメータ確認)
3. Puppetモジュール化後のミドルウェア試験自動化例
事例1)Weblogicの設定ファイルのパラメータ確認試験をServerspecで
③試験項目から
③-1 試験手順書を作成する
③-2 試験用ファイルを作成する
④試験の実施
①試験観点を整理する
②設計書から試験項目を作成する
システム基盤試験の大まかな流れ
試験項目(ケース:設定ファイルの文字列を確認しミドルウェアの状態を試験で確認)
テスト用ファイル(設定ファイル内の文字列確認テストの抜粋)
試験項目を元にテストコードを作成する
この例では赤字部分が試験での確認項目となっている
describe file('/var/opt/weblogic/domains/xxx/config/config.xml') do
its(:content) { should match /<name>ADMIN<¥/name>/ }
its(:content) { should match /<rotation-type>byTime<¥/rotation-
type>/ }
its(:content) { should match /<number-of-files-
limited>true<¥/number-of-files-limited>/ }
its(:content) { should match /<machine>machine1<¥/machine>/ }
・・・
end ※match部分はxpathなど用いたほうがスマートです。。
21Copyright © 2015 NTT DATA Corporation
Serverspecを用いたWebLogicインストール後の単体試験(パラメータ確認)
[root@<試験実行サーバ名> spec]# ASK_SSH_PASSWORD=1 bundle
exec rake spec
~省略~
File “/var/opt/weblogic/domains/<ドメイン名>/config/config.xml"
content
root@<試験対象サーバ名>'s password:
should match /<name>ADMIN<¥/name>/
content
should match /<rotation-type>byTime<¥/rotation-type>/
content
should match /<number-of-files-limited>true<¥/number-of-
files-limited>/
content
should match /<machine>machine1<¥/machine>/
~省略~
Finished in 14.31 seconds (files took 0.26224 seconds to load)
95 examples, 0 failures
テスト結果(ターミナルの標準出力を抜粋)
3. Puppetモジュール化後のミドルウェア試験自動化例
事例1)Weblogicの設定ファイルのパラメータ確認試験をServerspecで
③試験項目から
③-1 試験手順書を作成する
③-2 試験用ファイルを作成する
④試験の実施
①試験観点を整理する
②設計書から試験項目を作成する
システム基盤試験の大まかな流れ
22Copyright © 2015 NTT DATA Corporation
Oracle Clientの連携試験(タイムアウト確認)
クライアントサーバとデータベースサーバ間の接続が切れた際に、コネクションが無限待ちせず
タイムアウトすることを確認する。手動実行では2つのターミナルを操作する試験項目である。
3. Puppetモジュール化後のミドルウェア試験自動化例
事例2) Oracle Clientのコネクションタイムアウト試験を内製のテスト自動化ツールで
確認手順 確認項目(結果)
①下記コマンドを実行し対象DBインスタンスに接続できること
date;sqlplus <ユーザ名>/<パスワード>@<ネットサービス名
>
②下記コマンドを実行し,DBサーバからの通信を抑止する
iptables -I INPUT -s <IPアドレス> -j DROP
③通信が抑止されていることを確認する
ping <IPアドレス>
④SQLプロンプトで下記を実行し、出力を待つ
select systimestamp from dual;
④標準出力に以下の通りエラーが出力
されること
【標準出力】
ORA-12170: TNS: 接続タイムアウ
トが発生しました。
⑤通信抑止を解除する
iptables -D INPUT -s <IPアドレスA> -j DROP
⑥通信が抑止解除されていることを確認する
ping <IPアドレス>
Terminal-1
③試験項目から
③-1 試験手順書を作成する
③-2 試験用ファイルを作成する
④試験の実施
①試験観点を整理する
②設計書から試験項目を作成する
システム基盤試験の大まかな流れ
【tnsname.oraの記載例】
<ネットサービス名>=(DESCRIPTION=(CONNECT_TIMEOUT=10)(ENABLE=BROKEN・・・)
↑タイムアウト値が有効であることを確認している
Terminal-1
Terminal-2
Terminal-2
試験項目
23Copyright © 2015 NTT DATA Corporation
試験項目表(Excel)から内製ツールで試験を自動実行する
3. Puppetモジュール化後のミドルウェア試験自動化例
事例2) Oracle Clientのコネクションタイムアウト試験を内製のテスト自動化ツールで
試験手順 識別ID 実行操作 結果 実施日
時
DBサーバ1号機からのパケット抑止
- DBサーバ1号機からの通信を抑
止する
Term-1 iptables -I INPUT -s %HOST_1 -j
DROP
- pingを打つ Term-1 %RESULT=ping -c 3 %HOST_1
- 通信が抑止されていることを確認
する
check-str %RESULT notcontain
icmp_seq
DBサーバへの接続
- 業務ユーザへのスイッチする Term-2 su - <業務ユーザ名>
- Enter user-name:>が表示さ
れたら入力する
Term-2 addWaitSend "Enter user-name:"
%USER_NAME
- Enter password:>が表示され
たら入力する
Term-2 addWaitSend "Enter password:"
%PASS
- sqlplusを実行し、DBサーバへ接
続する
Term-2 %RESULT=sqlplus
%USER_NAME/%PASS@%SCHEMA
- コネクション確立状態をみる Term-2 check-str %RESULT contain ORA-
12170
- 業務ユーザからexitする Term-2 exit
DBサーバ1号機からのパケット抑止の
解除
- DBサーバ1号機からの通信抑止
を解除する
Term-1 iptables -D INPUT -s %HOST_1 -j
DROP
- pingを打つ Term-1 %RESULT=ping -c 2 %HOST_1
- 通信が抑止されていることを確認
する
check-str %RESULT contain icmp_seq
~以下省略~
テスト用ファイル(Excel)
③試験項目から
③-1 試験手順書を作成する
③-2 試験用ファイルを作成する
④試験の実施
①試験観点を整理する
②設計書から試験項目を作成する
システム基盤試験の大まかな流れ
24Copyright © 2015 NTT DATA Corporation
試験項目表(Excel)から内製ツールで試験を自動実行する
3. Puppetモジュール化後のミドルウェア試験自動化例
事例2) Oracle Clientのコネクションタイムアウト試験を内製のテスト自動化ツールで
試験手順 識別ID 実行操作 結果 実施日
時
DBサーバ1号機からのパケット抑止
- DBサーバ1号機からの通信を抑
止する
Term-1 iptables -I INPUT -s %HOST_1 -j
DROP
OK 2015/
7/11…
- pingを打つ Term-1 %RESULT=ping -c 3 %HOST_1 OK 2015/
- 通信が抑止されていることを確認
する
check-str %RESULT notcontain
icmp_seq
OK 2015/
7/11…
DBサーバへの接続
- 業務ユーザへのスイッチする Term-2 su - <業務ユーザ名> OK 2015/
- Enter user-name:>が表示さ
れたら入力する
Term-2 addWaitSend "Enter user-name:"
%USER_NAME
OK 2015/
7/11…
- Enter password:>が表示され
たら入力する
Term-2 addWaitSend "Enter password:"
%PASS
OK 2015/
7/11…
- sqlplusを実行し、DBサーバへ接
続する
Term-2 %RESULT=sqlplus
%USER_NAME/%PASS@%SCHEMA
OK 2015/
7/11…
- コネクション確立状態をみる Term-2 check-str %RESULT contain ORA-
12170
OK 2015/
7/11…
- 業務ユーザからexitする Term-2 exit OK 2015/
DBサーバ1号機からのパケット抑止の
解除
- DBサーバ1号機からの通信抑止
を解除する
Term-1 iptables -D INPUT -s %HOST_1 -j
DROP
OK 2015/
7/11…
- pingを打つ Term-1 %RESULT=ping -c 2 %HOST_1 OK 2015/
- 通信が抑止されていることを確認
する
check-str %RESULT contain icmp_seq OK 2015/
7/11…
~以下省略~ OK
テスト結果
「実行操作」がエラーなく実施できたので「OK」
となり、エラーがあれば「NG」となる
③試験項目から
③-1 試験手順書を作成する
③-2 試験用ファイルを作成する
④試験の実施
①試験観点を整理する
②設計書から試験項目を作成する
システム基盤試験の大まかな流れ
「実行操作」のコマンドを順次実行する
25Copyright © 2015 NTT DATA Corporation
4. まとめ
①商用ミドルウェアのインストール方法に気をつけろ
②商用ミドルウェアの設定方法に気をつけろ
③インストール後に再度インストーラを叩かないように気をつけろ
④Puppetのコマンドタイムアウトに気をつけろ
⑤execリソースを複数使うときは気をつけろ
<試験自動化まとめ>
ミドルウェア試験自動化の事例を紹介
事例1) ServerspecによるWebLogicの単体試験(パラメータ確認)
事例2) 内製のツールによるOracle Clientの連携試験(タイムアウト確認)
商用ミドルウェアのPuppet化で気を付けたい5つのこと
Copyright © 2011 NTT DATA Corporation
Copyright © 2015 NTT DATA Corporation

商用ミドルウェアのPuppet化で気を付けたい5つのこと

  • 1.
    Copyright © 2015NTT DATA Corporation 第3回 Puppetユーザ会 発表資料 2016年4月20日 株式会社NTTデータ 黒岩 良太 井上 怜 商用ミドルウェアのPuppet化で気を付けたい5つのこと ~ Oracle製品(Weblogic、Oracle Client)編 ~
  • 2.
    2Copyright © 2015NTT DATA Corporation アジェンダ 1. 今回の発表内容(なぜ商用ミドルウェアにPuppet?) 2. 商用製品のPuppet化で気を付けたい5つのこと 2-1. 商用ミドルウェアのPuppet化に向けて 商用ミドルウェアのインストール/設定についてPuppet化できるかチェック 2-2. WeblogicのPuppet化事例 2-3. Oracle ClientのPuppet化事例 3. Puppetモジュール化後のミドルウェア試験自動化例 ・事例1) Weblogicの設定ファイルのパラメータ確認試験をServerspecで ・事例2) Oracle Clientのコネクションタイムアウト試験を内製のテスト自動化ツールで 4. まとめ 黒岩 井上
  • 3.
    3Copyright © 2015NTT DATA Corporation はじめに 自己紹介 名前: 黒岩 良太 所属: 株式会社NTTデータ 公共・社会基盤事業推進部 プロジェクト推進統括部技術戦略担当 経歴: ・2012年度入社 ・2012~2014 パブリッククラウドサービスの比較検討案件を担当 (Amazon Web ServicesとCloudnの比較を実施) ・2014~2016 大規模プロジェクトでインフラ構築・維持を担当 (構築・維持ツールとしてPuppetを活用)
  • 4.
    4Copyright © 2015NTT DATA Corporation 1. 今回の発表内容(なぜ商用ミドルウェアにPuppet?) 商用ミドルウェアでもPuppet化する価値がある! たとえば、 ・多くのサーバに導入(インストール)する ・設定変更がたびたび発生する という商用ミドルウェアはPuppet化する価値あり 今回の発表では、 Oracle製品(Weblogic、Oracle Client)を 例として、 ・商用ミドルウェアのPuppet化のノウハウ ・Puppet適用後のミドルウェア試験の自動化 について発表します。 今回の発表対象 第1回Puppetユーザ会資料より抜粋(2015/10/28 NTTデータ 落合) +試験自動化
  • 5.
    5Copyright © 2015NTT DATA Corporation 2. 商用ミドルウェアのPuppet化で気を付けたい5つのこと ①商用ミドルウェアのインストール方法に気をつけろ ②商用ミドルウェアの設定方法に気をつけろ ③インストール後に再度インストーラを叩かないように気をつけろ ④Puppetのコマンドタイムアウトに気をつけろ ⑤execリソースを複数使うときは気をつけろ
  • 6.
    6Copyright © 2015NTT DATA Corporation 2-1. 商用ミドルウェアのPuppet化に向けて(インストール編) 商用ミドルウェアのインストールについて「Puppet化する/しない」の考え方を以下に示します。 項 番 分類 チェック項目 オープンソース ミドルウェア 商用ミドルウェア JBoss EAP Weblogic Oracle Client 特定業界向け 業務パッケージ 1 インストール 方式 rpmパッケージで インストール可能? × × × × 2 サイレント インストール可能? ○ (zipファイル解 凍) ○ (silent.xmlファイ ルを使用) ○ (レスポンスファ イルを使用) × 3 CUI対話形式? - ○ ○ ○ (手動インストー ルのみ) 4 GUI対話形式? - ○ ○ - 5 インストール するサーバ の数 手動でインストール可 能な数か? × (導入台数: 約200台) ○ (導入台数: 15台) × (導入台数: 約140台) ○ (導入台数: 5台) チェック結果 インストール方式および導入 台数を踏まえて・・・ ・Puppet化 or ・手動インストール Puppet化 (インストールモ ジュール作成) Puppet化 (インストールモ ジュール作成) Puppet化 (インストールモ ジュール作成) 手動 インストール 低 難 易 度 高 インストールの Puppet化可能
  • 7.
    7Copyright © 2015NTT DATA Corporation 2-1. 商用ミドルウェアのPuppet化に向けて(設定編) 項 番 分類 チェック項目 オープンソース ミドルウェア 商用ミドルウェア JBoss EAP Weblogic Oracle Client 特定業界向け 業務パッケージ 1 設定の方 法 ファイル形式? (ファイルの置き換え で設定可能か?) ○ (standalone.xml で設定) × ○ (tnsnames.ora など) ○ (ファイルとコマン ドの両方を使用)2 コマンドで設定? ○ ○ (pythonファイル の実行が必要) - 3 CUI対話形式? ○ ○ - - 4 GUI対話形式? ○ ○ - - 5 設定する サーバ台数 手動で設定可能な数 か? × (導入台数: 約200台) ○ (導入台数: 15台) × (導入台数: 約140台) ○ (導入台数: 5台) チェック結果 設定方式および設定する台 数を踏まえて・・・ ・Puppet化 or ・手動設定 Puppet化 (設定モジュール 作成) Puppet化 (設定モジュール 作成) Puppet化 (設定モジュー ル作成) 手動設定 低 難 易 度 高 設定の Puppet化可能 商用ミドルウェアの設定について「Puppet化する/しない」の考え方を以下に示します。
  • 8.
    8Copyright © 2015NTT DATA Corporation 2. 商用ミドルウェアのPuppet化で気を付けたい5つのこと ①商用ミドルウェアのインストール方法に気をつけろ ②商用ミドルウェアの設定方法に気をつけろ ③インストール後に再度インストーラを叩かないように気をつけろ ④Puppetのコマンドタイムアウトに気をつけろ ⑤execリソースを複数使うときは気をつけろ
  • 9.
    9Copyright © 2015NTT DATA Corporation 2-2. WeblogicのPuppet化事例 Weblogicのインストールの流れ(インストール手順) 作業概要 コマンド 1 Weblogicインストールディレクトリの オーナ権限を変更 chown weblogic:weblogic /opt/weblogic 2 weblogicユーザにユーザをスイッチ su – weblogic 3 環境変数を設定 vi ~/.profile umask 022 export JAVA_HOME=/usr/java/jdk1.7.0_40 export PATH=$JAVA_HOME/bin:$PATH:/sbin export LC_ALL=en_US.UTF-8 export USER_HOME=/home/weblogic export DOMAIN_HOME=/var/opt/weblogic/domains/MDM export MW_HOME=/opt/webloigc 4 設定した環境変数の読み込み . ~/.profile 5 wls1036_generic.jar および silent.xml のファイルが 「/home/weblogic/staging」にあ るか確認 ls /home/weblogic/staging 6 Silentモードでインストールを開始 cd ~/staging java -jar wls1036_generic.jar -mode=silent -silent_xml=silent.xml 7 rootユーザにユーザをスィッチ su - root 8 ドメインのロケーションを作成 mkdir /var/opt/weblogic/domains 9 作成したドメインロケーションの オーナー権限を変更 chown weblogic:weblogic /var/opt/weblogic/domains 10 weblogicユーザにユーザをスィッ チ su - weblogic 11 WLSTを起動するための環境変数 を設定 . ./opt/weblogic/wlserver_10.3/server/bin/setWLSEnv.sh 12 ドメイン作成スクリプトの実行 Exiting...と表示されると完了 java weblogic.WLST /opt/weblogic/wlserver_10.3/wlsDomainCreationAndConfiguration.py ②インストール実行 大まかな流れ ①インストール前作業 ディレクトリ作成、ユーザスイッチ インストール資材配布 (jar、xmlファイル) ④ドメイン作成 ③ドメイン作成前の準備 ディレクトリ作成、ユーザスイッチ 環境変数の設定
  • 10.
    10Copyright © 2015NTT DATA Corporation 2-2. WeblogicのPuppet化事例 class weblogic::install ( $weblogic_archive_name = 'wls1036_generic.jar', $weblogic_archive_src = 'modules/weblogic/wls1036_generic.jar', ){ file { '/opt/weblogic': ensure => directory, owner => 'weblogic', group => 'weblogic', mode => '0750', } file { '/home/weblogic/.profile': ensure => present, owner => 'weblogic', group => 'weblogic', mode => '0664', content => template("weblogic/dot_profile.erb"), } file { '/home/weblogic/staging/silent.xml': ensure => present, owner => root, group => root, mode => '0644', content => template("weblogic/silent.xml.erb"), require => File [ "/home/weblogic/staging/" ] , } ・・・ } ①インストール前作業 ・ディレクトリを作成 ・.profile配布 ・jar/xmlファイル配布 modules/weblogic/manifests/install.ppインストール手順からPuppetモジュール 化すると... ②~④は次のスライド 以降で説明 ②インストール実行 ①インストール前作業 ディレクトリ作成、ユーザスイッチ インストール資材配布 (jar、xmlファイル) ④ドメイン作成 ③ドメイン作成前の準備 ディレクトリ作成、ユーザスイッチ 環境変数の設定
  • 11.
    11Copyright © 2015NTT DATA Corporation class weblogic::install ( $weblogic_archive_name = 'wls1036_generic.jar', $weblogic_archive_src = 'modules/weblogic/wls1036_generic.jar', ){ ・・・ file { '/home/weblogic/staging/weblogic_version': ensure => present, owner => weblogic, group => weblogic, mode => '0644', content => template("weblogic/weblogic_version.erb"), require => File [ "/home/weblogic/staging/" ] , } exec { 'weblogic_install': command => "/usr/bin/java -jar wls1036_generic.jar -mode=silent - silent_xml=silent.xml; sleep 60;", user => 'weblogic', cwd => '/home/weblogic/staging', refreshonly => true, subscribe => File ['/home/weblogic/staging/weblogic_version'], require => File [ ['/home/weblogic/staging/wls1036_generic.jar', '/home/weblogic/staging/silent.xml'] ], } } 2-2. WeblogicのPuppet化事例 インストール手順からPuppetモジュール 化すると... modules/weblogic/manifests/install.pp ②インストール実行 ①インストール前作業 ディレクトリ作成、ユーザスイッチ インストール資材配布 (jar、xmlファイル) ④ドメイン作成 ③ドメイン作成前の準備 ディレクトリ作成、ユーザスイッチ 環境変数の設定 【ポイント】 すでにweblogicがインストールさ れている場合、再度インストーラ が起動しないようにexecリソー スのrefreshonly属性を使用 refreshonly属性とは・・・ ファイルが変更されたら指定したコマ ンドを実行する属性 対象ファイルはsubscribe属性で指定 11gR1(10.3.6.0.6) weblogic_version.erb ファイルの有無で インストールされている・ いないを判定する
  • 12.
    12Copyright © 2015NTT DATA Corporation 2-2. WeblogicのPuppet化事例 class weblogic::create_domain ( $admin_url, $jdbc_url, $cmo, $env, ){ ・・・ exec { "java weblogic.WLST /opt/weblogic/wlserver_10.3/wlsDomainCreationAndConfiguration.py": command => "/bin/ksh -c 'source /opt/weblogic/wlserver_10.3/server/bin/setWLSEnv.sh; /usr/bin/java weblogic.WLST /opt/weblogic/wlserver_10.3/wlsDomainCreationAndConfiguration.py'", user => 'weblogic', cwd => '/opt/weblogic/wlserver_10.3/', timeout => 0, logoutput => on_failure, refreshonly => true, subscribe => File ['/home/weblogic/staging/weblogic_version'], require => [ Exec ["weblogic_patch_apply"], File ["/opt/weblogic/wlserver_10.3/wlsDomainCreationAndConfiguration.py"], ] } 【ポイント】 execリソースのrefreshonly 属性を使用(インストールと同様、 ドメイン作成後、再実行されない ように定義) modules/weblogic/manifests/create_domain.pp ③ドメイン作成前の準備 ディレクトリ作成、環境変数の設定 ②インストール実行 ①インストール前作業 ディレクトリ作成、ユーザスイッチ インストール資材配布 (jar、xmlファイル) ④ドメイン作成 ③ドメイン作成前の準備 ディレクトリ作成、ユーザスイッチ 環境変数の設定 インストール手順からPuppetモジュール 化すると... 【ポイント】 ドメイン作成に時間がかかって、 コマンドタイムアウトが発生してしま うことがあったため、execリソースの timeout属性で“0”を指定 (タイムアウトを無効化) timeout属性とは・・・ コマンド実行で待つ時間。この時間を過 ぎるとコマンド実行が失敗したと見なされ る。デフォルトは300秒。
  • 13.
    13Copyright © 2015NTT DATA Corporation 2-3. Oracle ClientのPuppet化事例 Oracle Clientインストールの流れ(インストール手順) 項 番 作業概要 コマンド 1 インストール先フォルダを作成 mkdir /opt/oracle 2 作成したインストール先フォルダのオーナー権 限を変更 chown oracle:oinstall /opt/oracle 3 oracleユーザにユーザをスィッチ su - oracle 4 以下のunzipコマンドを実行して、インストール ファイルを解凍 cd /home/oracle/staging unzip p13390677_112040_Linux-x86-64_4of7.zip 5 以下のコマンドを実行して、言語設定を実施 export LC_ALL=en_US.UTF-8 6 Silentモードでインストール実行 ./runInstaller -silent -responseFile /home/oracle/staging/client_install.rsp 7 rootユーザにユーザをスィッチ su - root 8 /etc/oratabを作成 また、環境変更スクリプトを作成 sh /opt/oracle/product/11.2.0/client_2/root.sh 9 /etc/oraInst.locを作成 sh /opt/oracle/orainstRoot.sh 10 /opt/oracle/配下の権限を変更する chmod -R 755 /opt/oracle/ 11 mdmsapユーザへスイッチ su – mdmsap 12 環境変数の設定 vi ~/.profile . ~/.profile 13 oracleユーザにユーザをスィッチ su – oracle 14 tnsnames.oraを作成&配布 vi /opt/oracle/product/11.2.0/client_2/network/admin/tn snames.ora ①インストール前準備 ディレクトリ作成、ユーザスイッチ インストール資材配布、環境変数の設定 ②インストール実行 大まかな流れ ③インストール後の セットアップ /etc/oratabの作成 /etc/oraInst.locの作成 環境変数の設定 tnsnames.oraの設定
  • 14.
    14Copyright © 2015NTT DATA Corporation 2-3. Oracle ClientのPuppet化事例 class oracle::install_client ( $oracle_client_archive_name = 'p13390677_112040_Linux-x86-64_4of7.zip', $oracle_client_archive_src = 'modules/oracle/p13390677_112040_Linux-x86-64_4of7.zip', $oracle_client_files = 'modules/oracle', ){ ・・・ file { '/var/tmp/oracle/oracle_client_version': ensure => present, owner => oracle, group => oinstall, mode => '0644', content => template("oracle/oracle_client_version"), require => File ["/var/tmp/oracle"], } file { '/home/oracle/staging/install_oracle_client.sh': ensure => present, owner => root, group => root, mode => '0755', content => template("oracle/install_oracle_client.sh"), require => File ['/opt/oracle/','/home/oracle/staging'], } exec { '/bin/bash /home/oracle/staging/install_oracle_client.sh': command => "/bin/bash /home/oracle/staging/install_oracle_client.sh", user => 'root', cwd => '/home/oracle/staging/', refreshonly => true, subscribe => File ['/var/tmp/oracle/oracle_client_version'], require => [ File ["/home/oracle/staging/${oracle_client_archive_name}"], File ['/home/oracle/staging/client_install.rsp'], File ['/home/oracle/staging/install_oracle_client.sh'], ] } } ①インストール前準備 ディレクトリ作成、ユーザスイッチ インストール資材配布、環境変数の設定 ②インストール実行 ③インストール後の セットアップ ・/etc/oratabの作成 ・/etc/oraInst.locの作成 ・環境変数の設定 【ポイント】 execリソースのrefreshonly属性を 使用(Weblogicインストールと同様、再 実行されないように定義) 【ポイント】 複数のexecリソースで定義する と・・・怒涛のrequire地獄に! それを回避するために、1つの execリソースでインストール~イ ンストール後のセットアップまで を実施。 インストール~インストール後の セットアップを実施するシェルを 作成し、execからはそれを実行 する定義に。 #!/bin/bash ・・・ sh /opt/oracle/ … /root.sh sh /opt/oracle/orainstRoot.sh ・・・ modules/oracle/manifests/install_client.pp
  • 15.
    15Copyright © 2015NTT DATA Corporation 2-3. Oracle ClientのPuppet化事例 class oracle::install_client ( $oracle_client_archive_name = 'p13390677_112040_Linux-x86-64_4of7.zip', $oracle_client_archive_src = 'modules/oracle/p13390677_112040_Linux-x86-64_4of7.zip', $oracle_client_files = 'modules/oracle', ){ ・・・ file { '/var/tmp/oracle/oracle_client_version': ensure => present, owner => oracle, group => oinstall, mode => '0644', content => template("oracle/oracle_client_version"), require => File ["/var/tmp/oracle"], } file { '/home/oracle/staging/install_oracle_client.sh': ensure => present, owner => root, group => root, mode => '0755', content => template("oracle/install_oracle_client.sh"), require => File ['/opt/oracle/','/home/oracle/staging'], } exec { '/bin/bash /home/oracle/staging/install_oracle_client.sh': command => "/bin/bash /home/oracle/staging/install_oracle_client.sh", user => 'root', cwd => '/home/oracle/staging/', refreshonly => true, subscribe => File ['/var/tmp/oracle/oracle_client_version'], require => [ File ["/home/oracle/staging/${oracle_client_archive_name}"], File ['/home/oracle/staging/client_install.rsp'], File ['/home/oracle/staging/install_oracle_client.sh'], ] } } ①インストール前準備 ディレクトリ作成、ユーザスイッチ インストール資材配布、環境変数の設定 ②インストール実行 ③インストール後の セットアップ ・/etc/oratabの作成 ・/etc/oraInst.locの作成 ・環境変数の設定 【ポイント】 execリソースのrefreshonly属性を 使用(Weblogicインストールと同様、再 実行されないように定義) 【ポイント】 複数のexecリソースで定義する と・・・怒涛のrequire地獄に! それを回避するために、1つの execリソースでインストール~イ ンストール後のセットアップまで を実施。 インストール~インストール後の セットアップを実施するシェルを 作成し、execからはそれを実行 する定義に。 #!/bin/bash ・・・ sh /opt/oracle/ … /root.sh sh /opt/oracle/orainstRoot.sh ・・・ modules/oracle/manifests/install_client.pp 例、 「コマンドAを実行した後に、Bを実行して、 AとBが共に完了したらCを実行する」 という定義を書くと・・・ exec {‘Exec_A': command => “コマンドA", } exec {‘Exec_B': command => “コマンドB", require => Exec [“Exec_A"], } exec {‘Exec_C': command => “コマンドC", require => [ Exec [“Exec_A”], Exec [‘Exec_B’] ], } これを1つのシェルにまとめて1つのexecリソースで実行 exec {‘Exec_ABC': command => “ABC.sh", } #!/bin/sh コマンドA; コマンドB; コマンドC; ABC.sh
  • 16.
    16Copyright © 2015NTT DATA Corporation 2. 商用ミドルウェアのPuppet化で気を付けたい5つのこと •商用ミドルウェアがサイレントインストール可能か確認すべし ①商用ミドルウェアのインストール方法に気をつけろ •CUI/GUI対話形式でないことを確認すべし ②商用ミドルウェアの設定方法に気をつけろ •execリソースのrefreshonlyで再実行時のPuppetの挙動を設定すべし。 ③インストール後に再度インストーラを叩かないように気をつけろ •Puppetのコマンドタイムアウトはデフォルト300秒。状況に応じて無効化すべし。 ④Puppetのコマンドタイムアウトに気をつけろ •怒涛のrequire地獄を避けるために、1つのexecリソースにまとめて定義すべし。 ⑤execリソースを複数使うときは気をつけろ
  • 17.
    17Copyright © 2015NTT DATA Corporation アジェンダ 1. 今回の発表内容(なぜ商用ミドルウェアにPuppet?) 2. 商用製品のPuppet化で気を付けたい5つのこと 2-1. 商用ミドルウェアのPuppet化に向けて 商用ミドルウェアのインストール/設定についてPuppet化できるかチェック 2-2. WeblogicのPuppet化事例 2-3. Oracle ClientのPuppet化事例 3. Puppetモジュール化後のミドルウェア試験自動化例 ・事例1) Weblogicの設定ファイルのパラメータ確認試験をServerspecで ・事例2) Oracle Clientのコネクションタイムアウト試験を内製のテスト自動化ツールで 4. まとめ 黒岩 井上
  • 18.
    18Copyright © 2015NTT DATA Corporation はじめに 自己紹介 名前: 井上 怜 (いのうえ れい) 所属: 株式会社NTTデータ 公共・社会基盤事業推進部 プロジェクト推進統括部技術戦略担当 経歴: ・2014年度入社 ・2014~2016 大規模プロジェクトでインフラ構築・維持を担当
  • 19.
    19Copyright © 2015NTT DATA Corporation 3. Puppetモジュール化後のミドルウェア試験自動化例 Puppetを用いた構築自動化だけでなく、 そのあとに続くシステム基盤試験の自動化を行った 詳細設計 例)可用性設計 処理方式設計 など パラメータ設計 例)ミドルウェアの各設定値の決定 ディレクトリ一覧・ユーザ一覧作成 など 構築(インストール・設定) 設計に従ってサーバやOSの設定、および ミドルウェアのインストールを実施 システム基盤試験(単体試験) 例)ディレクトリ、ユーザが作成されていることの検証 パラメータが正しく設定されていることの検証 必要なRPMがあること など システム基盤試験(連携試験) 例)フェイルオーバ/フェイルバックすることの確認 ロードバランサの振り分けに問題ないことの確認 最大コネクション数に達したときの挙動確認 試験する 試験する Puppetで自動化 Serverspecで自動化 (事例1で紹介) 一部を内製ツールで自動化 (事例2で紹介)
  • 20.
    20Copyright © 2015NTT DATA Corporation 確認内容 /var/opt/weblogic/domains/xxx/config/config.xml インストール後の WebLogic設定確認 - 省略- <name>ADMIN</name> <log> <rotation-type>byTime</rotation-type> <number-of-files-limited>true</number- of-files-limited> </log> <machine>machine1</machine> - 省略- Serverspecを用いたWebLogicインストール後の単体試験(パラメータ確認) 3. Puppetモジュール化後のミドルウェア試験自動化例 事例1)Weblogicの設定ファイルのパラメータ確認試験をServerspecで ③試験項目から ③-1 試験手順書を作成する ③-2 試験用ファイルを作成する ④試験の実施 ①試験観点を整理する ②設計書から試験項目を作成する システム基盤試験の大まかな流れ 試験項目(ケース:設定ファイルの文字列を確認しミドルウェアの状態を試験で確認) テスト用ファイル(設定ファイル内の文字列確認テストの抜粋) 試験項目を元にテストコードを作成する この例では赤字部分が試験での確認項目となっている describe file('/var/opt/weblogic/domains/xxx/config/config.xml') do its(:content) { should match /<name>ADMIN<¥/name>/ } its(:content) { should match /<rotation-type>byTime<¥/rotation- type>/ } its(:content) { should match /<number-of-files- limited>true<¥/number-of-files-limited>/ } its(:content) { should match /<machine>machine1<¥/machine>/ } ・・・ end ※match部分はxpathなど用いたほうがスマートです。。
  • 21.
    21Copyright © 2015NTT DATA Corporation Serverspecを用いたWebLogicインストール後の単体試験(パラメータ確認) [root@<試験実行サーバ名> spec]# ASK_SSH_PASSWORD=1 bundle exec rake spec ~省略~ File “/var/opt/weblogic/domains/<ドメイン名>/config/config.xml" content root@<試験対象サーバ名>'s password: should match /<name>ADMIN<¥/name>/ content should match /<rotation-type>byTime<¥/rotation-type>/ content should match /<number-of-files-limited>true<¥/number-of- files-limited>/ content should match /<machine>machine1<¥/machine>/ ~省略~ Finished in 14.31 seconds (files took 0.26224 seconds to load) 95 examples, 0 failures テスト結果(ターミナルの標準出力を抜粋) 3. Puppetモジュール化後のミドルウェア試験自動化例 事例1)Weblogicの設定ファイルのパラメータ確認試験をServerspecで ③試験項目から ③-1 試験手順書を作成する ③-2 試験用ファイルを作成する ④試験の実施 ①試験観点を整理する ②設計書から試験項目を作成する システム基盤試験の大まかな流れ
  • 22.
    22Copyright © 2015NTT DATA Corporation Oracle Clientの連携試験(タイムアウト確認) クライアントサーバとデータベースサーバ間の接続が切れた際に、コネクションが無限待ちせず タイムアウトすることを確認する。手動実行では2つのターミナルを操作する試験項目である。 3. Puppetモジュール化後のミドルウェア試験自動化例 事例2) Oracle Clientのコネクションタイムアウト試験を内製のテスト自動化ツールで 確認手順 確認項目(結果) ①下記コマンドを実行し対象DBインスタンスに接続できること date;sqlplus <ユーザ名>/<パスワード>@<ネットサービス名 > ②下記コマンドを実行し,DBサーバからの通信を抑止する iptables -I INPUT -s <IPアドレス> -j DROP ③通信が抑止されていることを確認する ping <IPアドレス> ④SQLプロンプトで下記を実行し、出力を待つ select systimestamp from dual; ④標準出力に以下の通りエラーが出力 されること 【標準出力】 ORA-12170: TNS: 接続タイムアウ トが発生しました。 ⑤通信抑止を解除する iptables -D INPUT -s <IPアドレスA> -j DROP ⑥通信が抑止解除されていることを確認する ping <IPアドレス> Terminal-1 ③試験項目から ③-1 試験手順書を作成する ③-2 試験用ファイルを作成する ④試験の実施 ①試験観点を整理する ②設計書から試験項目を作成する システム基盤試験の大まかな流れ 【tnsname.oraの記載例】 <ネットサービス名>=(DESCRIPTION=(CONNECT_TIMEOUT=10)(ENABLE=BROKEN・・・) ↑タイムアウト値が有効であることを確認している Terminal-1 Terminal-2 Terminal-2 試験項目
  • 23.
    23Copyright © 2015NTT DATA Corporation 試験項目表(Excel)から内製ツールで試験を自動実行する 3. Puppetモジュール化後のミドルウェア試験自動化例 事例2) Oracle Clientのコネクションタイムアウト試験を内製のテスト自動化ツールで 試験手順 識別ID 実行操作 結果 実施日 時 DBサーバ1号機からのパケット抑止 - DBサーバ1号機からの通信を抑 止する Term-1 iptables -I INPUT -s %HOST_1 -j DROP - pingを打つ Term-1 %RESULT=ping -c 3 %HOST_1 - 通信が抑止されていることを確認 する check-str %RESULT notcontain icmp_seq DBサーバへの接続 - 業務ユーザへのスイッチする Term-2 su - <業務ユーザ名> - Enter user-name:>が表示さ れたら入力する Term-2 addWaitSend "Enter user-name:" %USER_NAME - Enter password:>が表示され たら入力する Term-2 addWaitSend "Enter password:" %PASS - sqlplusを実行し、DBサーバへ接 続する Term-2 %RESULT=sqlplus %USER_NAME/%PASS@%SCHEMA - コネクション確立状態をみる Term-2 check-str %RESULT contain ORA- 12170 - 業務ユーザからexitする Term-2 exit DBサーバ1号機からのパケット抑止の 解除 - DBサーバ1号機からの通信抑止 を解除する Term-1 iptables -D INPUT -s %HOST_1 -j DROP - pingを打つ Term-1 %RESULT=ping -c 2 %HOST_1 - 通信が抑止されていることを確認 する check-str %RESULT contain icmp_seq ~以下省略~ テスト用ファイル(Excel) ③試験項目から ③-1 試験手順書を作成する ③-2 試験用ファイルを作成する ④試験の実施 ①試験観点を整理する ②設計書から試験項目を作成する システム基盤試験の大まかな流れ
  • 24.
    24Copyright © 2015NTT DATA Corporation 試験項目表(Excel)から内製ツールで試験を自動実行する 3. Puppetモジュール化後のミドルウェア試験自動化例 事例2) Oracle Clientのコネクションタイムアウト試験を内製のテスト自動化ツールで 試験手順 識別ID 実行操作 結果 実施日 時 DBサーバ1号機からのパケット抑止 - DBサーバ1号機からの通信を抑 止する Term-1 iptables -I INPUT -s %HOST_1 -j DROP OK 2015/ 7/11… - pingを打つ Term-1 %RESULT=ping -c 3 %HOST_1 OK 2015/ - 通信が抑止されていることを確認 する check-str %RESULT notcontain icmp_seq OK 2015/ 7/11… DBサーバへの接続 - 業務ユーザへのスイッチする Term-2 su - <業務ユーザ名> OK 2015/ - Enter user-name:>が表示さ れたら入力する Term-2 addWaitSend "Enter user-name:" %USER_NAME OK 2015/ 7/11… - Enter password:>が表示され たら入力する Term-2 addWaitSend "Enter password:" %PASS OK 2015/ 7/11… - sqlplusを実行し、DBサーバへ接 続する Term-2 %RESULT=sqlplus %USER_NAME/%PASS@%SCHEMA OK 2015/ 7/11… - コネクション確立状態をみる Term-2 check-str %RESULT contain ORA- 12170 OK 2015/ 7/11… - 業務ユーザからexitする Term-2 exit OK 2015/ DBサーバ1号機からのパケット抑止の 解除 - DBサーバ1号機からの通信抑止 を解除する Term-1 iptables -D INPUT -s %HOST_1 -j DROP OK 2015/ 7/11… - pingを打つ Term-1 %RESULT=ping -c 2 %HOST_1 OK 2015/ - 通信が抑止されていることを確認 する check-str %RESULT contain icmp_seq OK 2015/ 7/11… ~以下省略~ OK テスト結果 「実行操作」がエラーなく実施できたので「OK」 となり、エラーがあれば「NG」となる ③試験項目から ③-1 試験手順書を作成する ③-2 試験用ファイルを作成する ④試験の実施 ①試験観点を整理する ②設計書から試験項目を作成する システム基盤試験の大まかな流れ 「実行操作」のコマンドを順次実行する
  • 25.
    25Copyright © 2015NTT DATA Corporation 4. まとめ ①商用ミドルウェアのインストール方法に気をつけろ ②商用ミドルウェアの設定方法に気をつけろ ③インストール後に再度インストーラを叩かないように気をつけろ ④Puppetのコマンドタイムアウトに気をつけろ ⑤execリソースを複数使うときは気をつけろ <試験自動化まとめ> ミドルウェア試験自動化の事例を紹介 事例1) ServerspecによるWebLogicの単体試験(パラメータ確認) 事例2) 内製のツールによるOracle Clientの連携試験(タイムアウト確認) 商用ミドルウェアのPuppet化で気を付けたい5つのこと
  • 26.
    Copyright © 2011NTT DATA Corporation Copyright © 2015 NTT DATA Corporation

Editor's Notes

  • #3 【落合さんコメント】  固有名詞、中身のキーポイントを書いて、目次だけで期待を持てる内容にしてほしい   テストツールとして、QMscriptのことも書いておいてください。  「インフラ連携試験 内製のテスト自動化ツール(Excel試験手順書から自動実行)を活用」というような感じでしょうか。 【修正内容】 ・タイトルを修正 ・アジェンダをタイトルに沿った内容に変更
  • #18 【落合さんコメント】  固有名詞、中身のキーポイントを書いて、目次だけで期待を持てる内容にしてほしい   テストツールとして、QMscriptのことも書いておいてください。  「インフラ連携試験 内製のテスト自動化ツール(Excel試験手順書から自動実行)を活用」というような感じでしょうか。 【修正内容】 ・タイトルを修正 ・アジェンダをタイトルに沿った内容に変更
  • #20 詳細設計、パラメータ設計のいい説明が思い浮かばない
  • #21 「matchのところが本当にこれで良いのか微妙です。    XMLの構造を追ってマッチングする(たとえばxpathなど)なら正確ですが」 についてどう修正すればいいのかわからないので4/12レビュー時に落合さんに伺う 9ptについてもこの修正後対応する
  • #22 「matchのところが本当にこれで良いのか微妙です。    XMLの構造を追ってマッチングする(たとえばxpathなど)なら正確ですが」 についてどう修正すればいいのかわからないので4/12レビュー時に落合さんに伺う 9ptについてもこの修正後対応する