Red Hat Training
A Red Hat training course is available for Red Hat JBoss Operations Network
JBoss ON コマンドラインスクリプトの作成
JBoss ON CLI およびリモート API の使用
概要
パート I. 使ってみる
第1章 JBoss ON Server および CLI でのスクリプトの仕組み
1.1. JBoss ON のパブリック API の概要
表1.1 JBoss ON API
API | description |
---|---|
remote |
インベントリーの管理、設定変更、コンテンツのアップロードおよび管理、オペレーションの開始、メトリクスとアラートの表示、設定のドリフトの管理、グループの作成、ユーザーおよびロールの作成および管理などのタスク用のリソース管理機能。
リモート API は、標準の Java エンタープライズクライアントメカニズムまたはサーブレットベースの JBoss リモーティングエンドポイントを使用してアクセスできます。
|
domain |
特に機能領域の設定方法において、サーバーのローカルマネージャー Bean を並行する機能。
クライアントはリモート API を使用してアクションをスクリプト化します。リモート API はドメイン API を使用して、オブジェクト検索に使用する基準やリソース設定を表示するさまざまなプロパティーなど、そのほとんどの機能を提供します。
|
プラグイン | 両方のエージェント(リソース)プラグインに関連する機能。これは、JBoss ON CLI またはサーバー側のスクリプトで全く使用されません。API は、エージェントと JBoss ON サーバーとの間で情報を受信し、配信するためにエージェントプラグインによって使用されます。 |
1.2. JBoss ON Server およびインターフェース
- 実装クラスは *ManagerBean です。これにより、ローカル API とリモート API の両方が実装されます。
- サーバーが内部的に使用された SLSB は *ManagerLocal です。
- リモート API を定義する SLSB は *ManagerRemote です。
*managers
.リモート API は、のコンパイルです。 *remote
サーバーの EJB のインターフェース。
図1.1 サーバーインターフェースおよびクライアントの対話
1.3. JBoss ON CLI スクリプトおよび JBoss ON Server スクリプト
- JBoss ON CLI は手動で実行し、スクリプトファイルを実行でき、cron などのシステムツールによって自動的に呼び出されることもできます。CLI は任意の JBoss ON サーバーに接続でき、リモートで実行できます。基本的に、CLI はスクリプト実行エンジンです。これは、スクリプト言語でリモート API を公開し、JBoss ON サーバーを動的に対話すると便利になります。
- サーバー側のスクリプトは、JBoss ON サーバーデータベースで管理されるコンテンツリポジトリーにアップロードされ、起動されたアラートに対して呼び出されます。サーバー側のスクリプトがサーバーにありますが、同じ API を使用して他の CLI スクリプトとしてサーバーと通信します。
1.3.1. JBoss ON CLI および Server Scripts での CommonJS の使用
1.4. JBoss ON CLI と JBoss ON GUI 操作の相違点
- アラート定義の設定。これはおそらく最も重要な違いです。アラートが発生したアラートは CLI およびスクリプトから取得できますが、アラート定義を作成または編集したり、アラート通知を設定したり、アラート条件を設定する方法がありません。
- 子リソースの手動作成
- サーバーのフェイルオーバー一覧の定義
- エージェントのアフィニティーグループの定義
- raw 測定データの圧縮
- 処理、キャッシング、およびロギングアラートの状況
- パーティションイベントの処理
- ロールメンバーシップに基づくリソースへの認可の判断
- メトリクスコレクション、ドリフト検出、およびその他のスケジュール済みイベントのロードバランサーのスケジュール
1.5. 他のクライアントの使用
- アラートやモニタリングのチャートを表示するデスクトップアプリケーションなどの Java クライアント。JBoss ON CLI 自体は、スクリプト実行エンジンとして動作する Java シェルです。
- JVM 互換言語のクライアント(Scalala、Groovy など)
1.6. その他のリソース
第2章 JBoss ON CLI のインストール
- アラートへの対応
- CLI ユーティリティーの使用
2.1. CLI のインストール
Caused by: java.lang.IllegalArgumentException: interface org.rhq.enterprise.server.auth.SubjectManagerRemote is not visible from class loader at java.lang.reflect.Proxy.getProxyClass(Proxy.java:353) at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:581) at org.rhq.enterprise.client.RemoteClientProxy.getProcessor(RemoteClientProxy.java:69)
- JBoss ON GUI を開きます。
http://server.example.com:7080
- トップメニューの Administration タブをクリックします。
- Downloads メニュー項目を選択します。
- Command Line Client Download セクションまでスクロールし、をクリックし Download CLI 4.9.JON.3.3ます。
- CLI がインストールされているディレクトリーに
.zip
ファイルを保存します。 - パッケージを展開します。例:
[jsmith@server opt]$ unzip rhq-remoting-cli-4.9.JON.3.3.zip
2.2. CLI 環境変数の設定
rhq-cli-env.sh|bat
ファイルに定義されます。
rhq-cli-env.sh|bat
ファイルには完全にアノテーションが付けられるため、利用可能なパラメーターがすべて詳細な説明が記載されます。JVM 設定またはパラメーターの一部を変更する場合は、rhq-cli-env.sh|bat
ファイルで読み、利用可能なパラメーターを把握します。
rhq-cli-env.sh|bat
ファイルで RHQ_CLI_JAVA_HOME または RHQ_CLI_JAVA_EXE_FILE_PATH 変数を編集して設定できます。例:
RHQ_CLI_JAVA_HOME="/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jdk"
rhq-cli.sh|bat
ファイルで環境変数を設定したりしないでください。環境変数と Java オプションは、rhq-cli-env.sh|bat
ファイルでのみ設定する必要があります。
rhq-cli.sh|bat
ファイルを編集すると、予期しない動作が発生したり、ユーティリティーを実行できなくなる可能性があります。
2.3. CLI ファイルおよびディレクトリー
表2.1 重要な CLI ユーティリティーディレクトリーおよびファイル
ファイルまたはディレクトリー | description | ||
---|---|---|---|
cliRoot/rhq-remoting-cli-4.9.0.JON320GA | インストールディレクトリー。CLI ユーティリティーは単に展開されるため、インストールディレクトリーはシステム上の任意の場所になります。 | ||
CLI スクリプト | |||
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/bin | CLI ユーティリティー用の Linux(shell)および Windows(batch)スクリプトの両方が含まれています。 | ||
rhq-cli.sh | rhq-cli.bat | CLI ユーティリティー。 | ||
rhq-cli-env.sh | rhq-cli-env.bat | Java ホームディレクトリーや Java オプションなど、CLI ユーティリティーの環境変数を設定します。 | ||
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules/ | CommonJS モジュールのサンプルが含まれます。これは、modules:/ URI を使用して CommonJS モジュールを読み込むデフォルトのディレクトリーでもあります。 | ||
util.js |
オブジェクトの配列を使用して繰り返し処理する検索関数を定義します。
foreach )をクリックし、最初に一致するオブジェクト(find )または、一致するすべてのオブジェクトを返します(findAll ).また、情報を JavaScript ハッシュから JBoss ON 設定オブジェクトへ変換する機能も含まれています。
samples/util.js スクリプトと同じですが、CommonJS モジュールとして記述されます。
| ||
bundles.js |
バンドルの作成およびデプロイ、バンドル宛先の作成、リソースのサポートされるベースディレクトリーへの情報の取得などを行う関数を定義します。
samples/bundles.js スクリプトと同じですが、CommonJS モジュールとして記述されます。
| ||
drift.js |
スナップショットの作成および配布、定義を取得し、リソースまたは特定ファイルの履歴を表示する関数を定義します。
samples/drift.js スクリプトと同じですが、CommonJS モジュールとして記述されます。
| ||
jbossas.js |
Web アプリケーションのデプロイや EAP クラスターの管理など、EAP 6 / AS 7 リソースを管理する複数の機能を定義します。
CommonJS モジュールとして組み合わせ、記述された
samples/deploy-to-and-restart-JBAS.js samples/add-as7-standalone-server-to-cluster.js スクリプトはおよびスクリプトと同じです。
| ||
サンプル | |||
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples | サンプル JavaScript ファイルと、他のスクリプトと連携するように調整できる補助 JavaScript ファイルが含まれています。 | ||
util.js | オブジェクトの検索、マッピング、および一覧表示の追加機能を提供するユーティリティースクリプト。 | ||
measurement_utils.js | メトリクススケジュールの更新を簡素化するユーティリティースクリプト。基本的な測定 API を理解する代わりに、平易な(UI)名に基づいて変更するメトリクスを定義する方法を提供し、続いてより単純な用語で有効に/無効化、コレクション間隔を設定します。 | ||
drift.js | スナップショットの作成、特定のドリフト定義の検索、スナップショットの比較、およびドリフト履歴の表示を行う関数を含むサンプルスクリプト。 | ||
bundles.js | バンドル定義を設定するサンプルスクリプト。これには、バンドルアーカイブの生成、宛先グループの作成、バンドルのデプロイが含まれます。 | ||
deploy-to-and-restart-JBAS.js | JBoss サーバーのグループに新しいバンドルまたは更新されたバンドルをデプロイし、宛先グループのサーバーを再起動するサンプルスクリプト。 | ||
モジュールサンプルスクリプト | |||
logging | |||
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/conf | CLI ユーティリティーに log4j ロガーを設定する XML ファイルが含まれます。 | ||
| CLI ユーティリティーの通常のロギングおよびデバッグロギングの設定を設定します。 | ||
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/logs | CLI ユーティリティーのエラーログが含まれます。このディレクトリーは、CLI の初回実行時に作成されます。 | ||
rhq-server-cli.log | CLI ユーティリティーのエラーログ。 | ||
ライブラリー | |||
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/lib | プロキシーリソースや CLI 固有のコマンドのライブラリーなど、CLI ユーティリティーによって使用されるすべてのライブラリーが含まれます。 |
パート II. CLI での JBoss ON スクリプトの実行の基本例
第3章 CLI を使用したコマンドおよびオプション
第4章 互換性のある CLI およびサーバーバージョンの確認
[root@server ~]# vim cliRoot/rhq-remoting-cli-4.9.0.JON320GA/bin/rhq-cli-env.sh
RHQ_CLI_ADDITIONAL_JAVA_OPTS=-Drhq.client.version-check=false
第5章 JBoss ON CLI コマンド構文
5.1. CLI スクリプト
/bin
ディレクトリーから直接実行されます。JBoss ON CLI の起動に関連するファイルが 2 つあります。
- スクリプト(
rhq-cli.sh|bat
) - 環境変数のファイル(
rhq-cli-env.sh|bat
)rhq-cli-env.sh|bat
ファイルの環境変数は、ほとんどのデプロイメントで妥当なデフォルトを使用するため、このファイルを編集する必要はありません。変数をリセットして、仮想マシンやデフォルト以外の JVM などのデフォルトのインストールに従わないサーバーをポイントすることができます。rhq-cli-env.|bat
ファイルの上部にあるコメントには、利用可能な環境変数の詳細リストが含まれます。重要rhq-cli.sh|bat
ファイルは編集しないでください。スクリプト自体ではなく、ターミナルまたはrhq-cli-env.sh|bat
ファイルで環境変数のみを設定します。
RHQ_CLI_JAVA_HOME
または RHQ_CLI_JAVA_EXE_FILE_PATH
変数。
rhq-cli.sh|bat
スクリプトには、以下の一般的な構文があります。
rhq-cli.sh|bat options
[jsmith@server bin]$ cliRoot/rhq-remoting-cli-4.9.0.JON320GA/bin/rhq-cli.sh RHQ - RHQ Enterprise Remote CLI unconnected$
[jsmith@server bin]$ rhq-cli -u rhqadmin -p rhqadmin
rhq-cli.sh
スクリプトを実行するもの)は、CLI の logs/
ディレクトリーへの書き込みアクセスが必要になります。
5.2. CLI スクリプトのオプション
表5.1 コマンドラインオプション
短いオプション | 長いオプション | description |
---|---|---|
-h | --help | CLI のコマンドラインオプションのヘルプテキストを表示します。 |
-u | --user | JBoss ON サーバーにログインするために使用されるユーザー名。 |
-p | --password | JBoss ON サーバーにログインするために使用されるパスワード。 |
-P | 入力が画面にエコーされないパスワードプロンプトを表示します。 | |
-s | --host | CLI がコマンドを実行する JBoss ON サーバー。デフォルトは localhost です。 |
-t | --port | JBoss ON サーバーが HTTP リクエストを受け入れるポート。デフォルトは 7080 です。 |
-c | --command | 実行するコマンド。コマンドは二重引用符で囲む必要があります。コマンドの実行が終了すると、CLI が終了します。 |
-f | --file | 実行するスクリプトの完全パスとファイル名。 |
--args-style | は、スクリプトに渡される引数のタイプまたは形式を示します。 | |
-v | --version | CLI に接続したら、CLI と JBoss ON のサーバーバージョン情報を表示します。 |
--transport | CLI と JBoss ON サーバー間の通信層プロトコルに SSL を使用するかどうかを決定します。指定しない場合、値は {port} オプションで決定されます。443 で終わるポートを使用する場合、SSL が使用されます。JBoss ON サーバーが 443 で終了しないポートで SSL をリッスンしている場合のみ、明示的にトランスポートを指定する必要があります。 |
5.3. インタラクティブな CLI コマンド
5.3.1. login
login username password [host] [port]
rhq-cli.sh --f
オプションで使用できます。
5.3.2. logout
logout
rhq-cli.sh --f
オプションで使用できます。
5.3.3. quit
quit
java.lang.System.exit
.
5.3.4. record
record [-b | -e] [-a] -f filename
オプション | description |
---|---|
-b, --start
|
録画を開始するには、このオプションを指定します。
|
-e、--end
|
録画を停止するには、このオプションを指定します。
|
-a、--append
|
ファイルの最後に出力を追加します。指定されていない場合は、ファイルの最初に出力が書き込まれます。
|
-f, --file
|
出力が書き込まれるファイル。
|
5.3.5. EXEC(非推奨)
オプション | description |
---|---|
-f, --file
|
実行するスクリプトの完全パスファイル名。完全パスが指定されるか、または CLI がスクリプトを見つけることができません。
|
-s, --style=named|indexed
|
は、スクリプトに渡される引数のタイプまたは形式を示します。
indexed またはのいずれかの値が必要です named 。
|
第6章 依存関係とカスタム機能のスクリプトモジュールの使用
6.1. スクリプト依存関係とエクスポート機能について
rhq-cli.sh -f
オプションを使用してファイルからスクリプトを実行する場合、外部ファイル内で明示的な依存関係を定義する方法はありません。このスクリプトに必要な関数は、スクリプトに含めるか、またはスクリプトからアクセスできる必要があります。
util.js
ファイルはをエクスポートします。 foreach
JBoss ON のすべてのオブジェクトを検索でき、汎用オブジェクト、配列、基準(検索)オブジェクト、またはマップとして検索できます。
exports.foreach = function (obj, fn) { var criteriaExecutors = { Alert: function(criteria) { return AlertManager.findAlertsByCriteria(criteria); }, ... 8< ... }
.js
でき ますが、これを除外することが推奨されます。
var printResults = require("modules:/modules/util");
printResults
変数、 foreach
関数が利用可能です。 printResults.foreach
.
6.2. スクリプトモジュールソースのデフォルトの場所
- Modules Directory
- 説明: ローカルシステム上に設定された場所から指定されたモジュールファイルを読み込みます。CLI には、モジュールのデフォルトディレクトリーを定義するシステムプロパティー(
RHQ_CLI_MODULES_DIR
)があります。以下の例のように、rhq-cli-env.sh
ファイルを更新するか、コマンドラインで場所を設定または変更できます。RHQ_CLI_MODULES_DIR=/opt/rhq/modules
RHQ_CLI_MODULES_DIR=/opt/rhq/modules; bin/rhq-cli.sh
利用可能な CLI - ローカルファイルシステム
- 指定したモジュールファイルをローカルシステムの絶対パスから読み込みます。形式 - ファイル:/path例:
var myModule = require("file:/opt/jon/js-modules/myModule"); //This will load the module from a file called "myModule_js" in the /opt/jon/js-modules directory on the local filesystem.
利用可能な CLI - JBoss ON リポジトリー
- 指定された JBoss ON リポジトリーから指定のモジュールファイルをダウンロードします。これはサーバーに接続するため、ユーザーは最初に JBoss ON サーバーにログインする必要があります。Format — rhq://repositories/repo_name/module_name例:
var myModule = require("rhq://repositories/myRepo/myModule"); //This will load the module stored in the RHQ server repository "myRepo" called "myModule_js"
CLI および Server で利用可能 - JBoss ON ダウンロード
- JBoss ON サーバー上のダウンロード場所から指定のモジュールファイルをダウンロードします。JBoss ON では、アラートサーバー側のスクリプトまたは CLI に使用できる一部のスクリプトを利用できるようにできます。これはサーバーに接続するため、ユーザーは最初に JBoss ON サーバーにログインする必要があります。形式 - rhq://downloads/path/module_name例:
var myModule = require("rhq://downloads/script-modules/util"); //This will load the module stored in the RHQ server downloads section called "js/util_js"
利用可能 - CLI、サーバー
6.3. 新規モジュールソースタイプの作成
- 新規の作成
ScriptSourceProvider
インターフェース。 - クラスの JAR の
META-INF/services
ディレクトリーに Java サービスエントリーを追加します。 - 新しい JAR をクライアントおよび JBoss ON サーバーで使用できるように
lib/
CLI インストールディレクトリーのディレクトリーにserverRoot/jon-server-3.3/modules/org/rhq/server-startup/main/deployments/rhq.ear/lib
配置し、サーバー側のスクリプト(alert スクリプト)で使用できるようにします。
例6.1 HTTP モジュールソースの場所
public class URLScriptSourceProvider implements ScriptSourceProvider { public Reader getScriptSource(URI scriptUri) { if (scriptUri == null) { return null; } try { return new InputStreamReader(scriptUri.toURL().openStream()) } catch (MalformedURLException e) { return null; } catch (IOException e) { return null; } } }
META-INF
ディレクトリーに services
ディレクトリーを作成します。
META-INF/services/
ディレクトリー内に、というファイルを作成します。 org.rhq.scripting.ScriptSourceProvider
.JAR に実装されたソースプロバイダーの完全なクラス名(行ごとに 1 つ)を追加します。たとえば、 URLScriptSourceProvider
唯一のソースプロバイダーです。
com.example.URLScriptSourceProvider
* com * example * URLScriptSourceProvider.class * META-INF * services * org.rhq.scripting.ScriptSourceProvider
lib
CLI インストールディレクトリーに ba を追加する必要があります。その後、スクリプトは、そのシステムの JBoss ON CLI で実行され、HTTP プロバイダーを使用してネットワークからファイルをダウンロードできます。
var myModule = require("http://server.example.com/rhq-scripts/stuff_js");
modules/org/rhq/server-startup/main/deployments/rhq.ear/lib/
ディレクトリーに追加する必要があります。
第7章 JBoss ON API での利用可能なインプリシット変数
org.rhq.core.domain
クラスは自動的にインポートされるため、CLI を使用してリソース、アラート、およびその他の設定エリアの管理が容易になります。例: クラス org.rhq.core.domain.criteria.ResourceCriteria
一般的には、リソースのクエリーに使用されます。クラスパス全体はそのクラスを呼び出すときに指定できます。
var criteria = new org.rhq.core.domain.criteria.ResourceCriteria(); var resource = new org.rhq.core.domain.resource.Resource();
var criteria = new ResourceCriteria(); var resource = new Resource();
表7.1 デフォルトで使用できる変数は JBoss ON CLI です。
変数 | type | description | Access Requires ログイン |
---|---|---|---|
rhq | org.rhq.enterprise.client.Controller | インタラクティブ CLI に組み込みコマンド(login、logout、quit、exec、および version)を提供します。これらのメソッドの 2 つ(login および logout)は、以下のようなサーバースクリプトファイルで呼び出すことができます。 rhq.login('rhqadmin', 'rhqadmin') . | ◯ |
subject | org.rhq.core.domain.auth.Subject | ユーザーにログインしている現在のユーザーを表します。セキュリティー上の理由から、すべてのリモートサービスの呼び出しでは、サブジェクトを渡す必要がありますが、CLI は暗黙的にサブジェクトを渡します。 | ◯ |
assert | org.rhq.bindings.util.ScriptAssert | CLI スクリプト用のアサーションユーティリティーを提供します。 | いいえ |
pretty |
org.rhq.enterprise.client.TabularWriter
| タブ形式の印刷とオブジェクトの変換(パッケージ内のドメインオブジェクト)を提供し org.rhq.core.domain、コンソールで表示に適した形式にします。 | いいえ |
unlimitedPC | org.rhq.core.domain.util.PageControl | いいえ | |
pageControl | org.rhq.core.domain.util.PageControl | データ取得操作でページングとソートを指定するために使用されます。 | いいえ |
exporter |
org.rhq.enterprise.client.Exporter
| 出力をファイルにエクスポートするために使用されます。サポートされる形式はプレーンテキストで、表形式および CSV です。 | いいえ |
ProxyFactory |
org.rhq.bindings.client
| いいえ | |
scriptUtil |
org.rhq.enterprise.client.utility.ScriptUtil
| では、スクリプトを作成する際に便利なメソッドを提供します。 | いいえ |
AlertManager | org.rhq.enterprise.server.alert.AlertManagerRemote | alerts サブシステムにインターフェースを提供します。 | ◯ |
AlertDefinitionManager | org.rhq.enterprise.server.alert.AlertDefinitionManagerRemote | アラート定義サブシステムにインターフェースを提供します。 | ◯ |
AvailabilityManager | org.rhq.enterprise.server.measurement.AvailabilityManagerRemote | リソースの可用性を判断するために使用できる measurement サブシステムへのインターフェースを提供します。 | ◯ |
CallTimeDataManager | org.rhq.enterprise.server.measurement.CallTimeDataManagerRemote | コールタイムメトリックデータを取得するために、measurement サブシステムにインターフェースを提供します。 | ◯ |
RepoManager | org.rhq.enterprise.server.content.RepoManagerRemote | リポジトリーを操作するために、Content サブシステムにインターフェースを提供します。 | ◯ |
ConfigurationManager | org.rhq.enterprise.server.configuration.ConfigurationManagerRemote | configuration サブシステムにインターフェースを提供します。 | ◯ |
DataAccessManager | org.rhq.enterprise.server.report.DataAccessRemote | ユーザー定義のクエリーを実行するインターフェースを提供します。 | ◯ |
EventManager | org.rhq.enterprise.server.event.EventManagerRemote | events サブシステムにインターフェースを提供します。 | ◯ |
MeasurementBaselineManager | org.rhq.enterprise.server.measurement.MeasurementBaselineManagerRemote | 測定ベースラインを操作するための measurement サブシステムへのインターフェースを提供します。 | ◯ |
MeasurementDataManager | org.rhq.enterprise.server.measurement.MeasurementDataManagerRemote | 測定データを操作するための measurement サブシステムへのインターフェースを提供します。 | ◯ |
MeasurementDefinitionManager | org.rhq.enterprise.server.measurement.MeasurementDefinitionManagerRemote | 測定定義を使用するための measurement サブシステムへのインターフェースを提供します。 | ◯ |
MeasurementScheduleManager | org.rhq.enterprise.server.measurement.MeasurementScheduleManagerRemote | 測定スケジュールを操作するための measurement サブシステムへのインターフェースを提供します。 | ◯ |
OperationManager | org.rhq.enterprise.server.operation.OperationManagerRemote | 操作サブシステムにインターフェースを提供します。 | ◯ |
ResourceManager | org.rhq.enterprise.server.resource.ResourceManagerRemote | resource サブシステムにインターフェースを提供します。 | ◯ |
ResourceGroupManager | org.rhq.enterprise.server.resource.group.ResourceGroupManagerRemote | リソースグループサブシステムにインターフェースを提供します。 | ◯ |
GroupDefinitionManager | org.rhq.enterprise.server.resource.group.definition.GroupDefinitionManagerRemote | dynagroups を作成および管理するインターフェースを提供します。 | ◯ |
ResourceTypeManager | org.rhq.enterprise.server.resource.ResourceTypeManagerRemote | リソースタイプと連携するためのインターフェースを resource サブシステムに提供します。 | ◯ |
RoleManager | org.rhq.enterprise.server.authz.RoleManagerRemote | セキュリティールールおよびロールを操作するためのインターフェースを security サブシステムに提供します。 | ◯ |
SubjectManager | org.rhq.enterprise.server.auth.SubjectManagerRemote | ユーザーと連携するためのインターフェースを security サブシステムに提供します。 | ◯ |
SupportManager | org.rhq.enterprise.server.support.SupportManagerRemote | 管理リソースのレポートを取得するためのインターフェースを reporting サブシステムに提供します。 | ◯ |
第8章 JBoss ON CLI に固有するメソッド
第9章 CLI およびサーバースクリプトで利用可能な方法
9.1. assert
method | 署名 |
---|---|
Assert.assertEquals |
assertEquals(float, float, float, String) assertEquals(short, short, String) assertEquals(double, double, double) assertEquals(long, long, String) assertEquals(byte, byte, String) assertEquals(Object, Object) assertEquals(char, char, String) assertEquals(Object, Object, String) assertEquals(double, double, double, String) assertEquals(byte[], byte[]) assertEquals(boolean, boolean) assertEquals(Object[], Object[], String) assertEquals(Collection, Collection) assertEquals(Object[], Object[]) assertEquals(byte, byte) assertEquals(float, float, float) assertEquals(char, char) assertEquals(int, int) assertEquals(long, long) assertEquals(Collection, Collection, String) assertEquals(short, short) assertEquals(String, String, String) assertEquals(byte[], byte[], String) assertEquals(boolean, boolean, String) assertEquals(String, String) assertEquals(int, int, String) |
Assert.assertEqualsNoOrder |
assertEqualsNoOrder(Object[], Object[], String) assertEqualsNoOrder(Object[], Object[]) |
Assert.assertExists |
assertExists(String) |
Assert.assertFalse |
assertFalse(boolean) assertFalse(boolean, String) |
Assert.assertNotNull |
assertNotNull(Object) assertNotNull(Object, String) |
Assert.assertNotSame |
assertNotSame(Object, Object, String) assertNotSame(Object, Object) |
Assert.assertNull |
assertNull(Object) assertNull(Object, String) |
Assert.assertNumberEqualsJS |
assertNumberEqualsJS(double, double, String) |
Assert.assertSame |
assertSame(Object, Object, String) assertSame(Object, Object) |
Assert.assertTrue |
assertTrue(boolean, String) assertTrue(boolean) |
Assert.fail |
fail() fail(String, Throwable) fail(String) |
9.2. subject
method | 署名 |
---|---|
subject.addLdapRole |
addLdapRole(Role) |
subject.addRole |
addRole(Role) addRole(Role, boolean) |
subject.department | 現在のユーザーの部門値(存在する場合)を出力します。 |
subject.emailAddress | 現在のユーザーのメールアドレスを出力します。 |
subject.factive | ユーザーアカウントがアクティブであるかどうかを出力します。 |
subject.firstName | ユーザー名を出力します。 |
subject.fsystem | |
subject.id | JBoss ON 内のユーザーアカウントの ID 番号を出力します。 |
subject.lastName | ユーザーの接頭辞を出力します。 |
subject.ldapRoles | 現在のユーザーがメンバーとなっている LDAP グループに関連付けられたロールを一覧表示します。 |
subject.name | 現在のユーザーの JBoss ON ユーザー ID を出力します。 |
subject.ownedGroups | |
subject.phoneNumber | 現在のユーザーの電話番号を出力します。 |
subject.removeLdapRole |
removeLdapRole(Role) |
subject.removeRole |
removeRole(Role) |
subject.roles | ロール名、パーミッション、関連付けられた LDAP ユーザーおよびグループ、関連するリソースグループ、および現在のユーザーが属するすべてのロールに関するその他の情報を表示します。 |
subject.sessionId | 現在のセッション ID 番号を出力します。 |
subject.smsAddress | ユーザーのページ番号(存在する場合)を返します。 |
subject.toString |
String toString() |
subject.userConfiguration | 設定されたポートレット、ダッシュボード、ログインユーザー固有の設定に基づいて、ダッシュボード情報をすべて返します。 |
9.3. pretty
method | 署名 |
---|---|
pretty.exportMode | サーバーの現在のエクスポート設定を出力します。 |
pretty.print |
print(String[][]) print(PropertySimple, int) print(Configuration) print(PropertyMap, int) print(PropertyList, int) print(Collection) print(Map) print(Object[]) print(Object) |
pretty.width | コンソール表示の現在の幅設定を出力します。 |
9.4. unlimitedPC および pageControl
method | 署名 |
---|---|
unlimitedPC.addDefaultOrderingField |
addDefaultOrderingField(String, PageOrdering) addDefaultOrderingField(String) |
unlimitedPC.clone |
clone() |
unlimitedPC.firstRecord | 結果ページの最初のレコードを返します。 |
unlimitedPC.getExplicitPageControl |
PageControl getExplicitPageControl(int, int) |
unlimitedPC.getSingleRowInstance |
PageControl getSingleRowInstance() |
unlimitedPC.getUnlimitedInstance |
PageControl getUnlimitedInstance() |
unlimitedPC.initDefaultOrderingField |
initDefaultOrderingField(String) initDefaultOrderingField(String, PageOrdering) |
unlimitedPC.orderingFields | |
unlimitedPC.orderingFieldsAsArray | |
unlimitedPC.pageNumber | ページ化された結果の現在のページ番号を返します。 |
unlimitedPC.pageSize | 現在の設定されたページサイズを返します(ページごとに返されたエントリーの数)。 |
unlimitedPC.primarySortColumn | |
unlimitedPC.primarySortOrder | |
unlimitedPC.removeOrderingField |
removeOrderingField(String) |
unlimitedPC.reset |
reset() |
unlimitedPC.setPrimarySort |
setPrimarySort(String, PageOrdering) |
unlimitedPC.setPrimarySortOrder |
setPrimarySortOrder(PageOrdering) |
unlimitedPC.sortBy |
sortBy(String) |
unlimitedPC.startRow | 現在の開始行番号を返します。 |
unlimitedPC.toString |
String toString() |
unlimitedPC.truncateOrderingFields |
truncateOrderingFields(int) |
9.5. exporter
method | 署名 |
---|---|
exporter.close |
close() |
exporter.file | |
exporter.format | は、現在設定されている出力形式を表示します。 |
exporter.pageWidth | 出力ファイルのコンテンツの設定済み行の長さを表示します。 |
exporter.setFormat |
setFormat(String) |
exporter.setFile |
setFile(String) |
exporter.setPageWidth |
setPageWidth(int) |
exporter.setTarget |
setTarget(String, String) |
exporter.write |
write(Object) |
9.6. ProxyFactory
method | 署名 |
---|---|
ProxyFactory.getResource |
ResourceClientProxy getResource(int) |
ProxyFactory.outputWriter | |
ProxyFactory.remoteClient | リモートクライアントによって使用されるマネージャーおよび設定に関する情報を返します。インタラクティブ CLI では、インタラクティブ CLI によって使用されるマネージャー Bean に関する情報が出力されます。 |
ProxyFactory.resource |
9.7. scriptUtil
method | 署名 |
---|---|
scriptUtil.findResources |
PageList<Resource> findResources(String) |
scriptUtil.getFileBytes |
byte[] getFileBytes(String) |
scriptUtil.isDefined |
boolean isDefined(String) |
scriptUtil.saveBytesToFile |
saveBytesToFile(byte[], String) |
scriptUtil.sleep |
sleep(long) |
scriptUtil.waitForScheduledOperationToComplete |
ResourceOperationHistory waitForScheduledOperationToComplete(ResourceOperationSchedule, long, int) ResourceOperationHistory waitForScheduledOperationToComplete(ResourceOperationSchedule) |
9.8. プロキシーリソースに使用できる方法
表9.1 プラットフォームのプロキシーメソッド
情報メソッド | |
---|---|
measurements | 利用可能なメトリック、現在の値、プラットフォームリソースのすべての測定値の説明をプリントする一覧を表示します。 |
operations | リソースタイプに使用できる操作を表示します。 |
ショートカットメトリックメソッド | |||
---|---|---|---|
osname | OSVersion | アーキテクチャー | createdDate |
description | distributionName | distributionVersion | freeMemory |
freeSwapSpace | hostname | idle | TotalMemory |
systemLoad | totalSwapSpace | usedSwapSpace | usedMemory |
userLoad | modifiedDate | waitLoad | version |
ショートカットリソースエントリーメソッド | ||
---|---|---|
ID(インベントリー ID 番号) | resourceType | name(インベントリー名) |
ショートカット操作メソッド | ||
---|---|---|
manualAutodiscovery | cleanYumMetadataCache | viewProcessList |
ショートカット設定メソッド | |
---|---|
editPluginConfiguration() | pluginConfiguration |
pluginConfigurationDefinition |
ショートカットコンテンツメソッド |
---|
contentTypes |
ショートカットのインベントリーメソッド |
---|
子 |
method | 署名 |
---|---|
platform.getChild |
ResourceClientProxy getChild(String) |
platform.getMeasurement |
Measurement getMeasurement(String) |
platform.updatePluginConfiguration |
PluginConfigurationUpdate updatePluginConfiguration(Configuration) |
platform.toString |
String toString() |
表9.2 JBoss AS/EAP サーバーのプロキシーメソッド
情報メソッド | |
---|---|
measurements | 利用可能なメトリクス、現在の値、および JBoss リソースのすべての測定値の詳細をプリントする一覧を表示します。 |
operations | リソースタイプに使用できる操作を表示します。 |
ショートカットメトリックメソッド | |||
---|---|---|---|
JVMFreeMemory | JVMMaxMemory | JVMTotalMemory | activeThreadCount |
activeThreadGroupCount | buildDate | createdDate | description |
modifiedDate | startDate | totalTransactions | totalTransactionsperMinute |
transactionsCommitted | transactionsCommittedperMinute | transactionsRolledback | transactionsRolledbackperMinute |
partitionName | versionName | version |
ショートカットリソースエントリーメソッド | ||
---|---|---|
ID(インベントリー ID 番号) | resourceType | name(インベントリー名) |
ショートカット操作メソッド | ||
---|---|---|
restart | shutdown | start |
ショートカット設定メソッド | |
---|---|
editPluginConfiguration() | pluginConfiguration |
pluginConfigurationDefinition |
ショートカットコンテンツメソッド |
---|
contentTypes |
ショートカットのインベントリーメソッド |
---|
子 |
method | 署名 |
---|---|
jbossas.getChild |
ResourceClientProxy getChild(String) |
jbossas.getMeasurement |
Measurement getMeasurement(String) |
jbossas.updatePluginConfiguration |
PluginConfigurationUpdate updatePluginConfiguration(Configuration) |
jbossas.toString |
String toString() |
表9.3 コンテンツソースのプロキシーメソッド(EAR、WAR、JAR)
情報メソッド | |
---|---|
measurements | 利用可能なメトリック、現在の値、およびコンテンツリソースのすべての測定値の説明をプリントする一覧を表示します。 |
operations | リソースタイプに使用できる操作を表示します。 |
ショートカットメトリックメソッド | ||
---|---|---|
createdDate | modifiedDate | description |
path | version | Exploqued |
ショートカットリソースエントリーメソッド | ||
---|---|---|
ID(インベントリー ID 番号) | resourceType | name(インベントリー名) |
ショートカット操作メソッド |
---|
元に戻す |
ショートカット設定メソッド | |
---|---|
editPluginConfiguration() | pluginConfiguration |
pluginConfigurationDefinition |
ショートカットコンテンツメソッド | |
---|---|
contentTypes | backingContent |
ショートカットのインベントリーメソッド |
---|
子 |
method | 署名 |
---|---|
content.getChild |
ResourceClientProxy getChild(String) |
content.getMeasurement |
Measurement getMeasurement(String) |
content.updatePluginConfiguration |
PluginConfigurationUpdate updatePluginConfiguration(Configuration) |
content.toString |
String toString() |
content.retrieveBackingContent |
retrieveBackingContent(String fileName) |
content.updateBackingContent |
updateBackingContent(String filename, String displayVersion) |
第10章 JBoss ON CLI スクリプトでの一般的なアクション
Caused by: java.lang.IllegalArgumentException: interface org.rhq.enterprise.server.auth.SubjectManagerRemote is not visible from class loader at java.lang.reflect.Proxy.getProxyClass(Proxy.java:353) at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:581) at org.rhq.enterprise.client.RemoteClientProxy.getProcessor(RemoteClientProxy.java:69)
10.1. ログイン
- rhq-cli.sh スクリプトの実行時にユーザーの認証情報を渡す。
- スクリプト command で、またはサーバーに接続せずに CLI を起動した後。
例10.1 指定のサーバーへのログイン
rhq-cli.sh -u rhqadmin -p rhqadmin -s 192.168.1.100 -t 70443
例10.2 パスワードのプロンプト
rhq-cli.sh -u rhqadmin -P
10.2. リソースプロキシーの使用
ProxyFactory
リモートおよびドメイン API と対話する。
ProxyFactory
は、対話モードで JBoss ON CLI を使用するか、スクリプトファイルを使用する場合に使用できます。これは、アラートに使用されるスクリプトなど、サーバースクリプトでも利用できます。
ProxyFactory
のリソースに関する情報を取得します。 getResource()
リソースの ID 番号を指定する方法。
ProxyFactory
現在の監視データや特性、リソース名、利用可能なメトリック、利用可能な操作、コンテンツ情報、子インベントリーなど、指定されたリソースに関する完全なサマリーを返します。すべてのリソースはリソースタイプに依存します。例:
rhqadmin@localhost:7080$ ProxyFactory.getResource(10001) ResourceClientProxy_$$_javassist_0: OSName: Linux OSVersion: 2.6.32-220.4.1.el6.x86_64 architecture: x86_64 children: contentTypes: {rpm=RPM File} createdDate: Mon Feb 06 11:24:50 EST 2012 description: Linux Operating System distributionName: Red Hat Enterprise Linux Server distributionVersion: release 6.2 (Santiago) freeMemory: 16.7GB freeSwapSpace: 25.6GB handler: hostname: server.example.com id: 10001 idle: 70.8% measurements: [Wait Load, Used Memory, System Load, Distribution Version, Total Memory, OS Name, Free Memory, Hostname, Architecture, Distribution Name, Idle, Total Swap Space, Used Swap Space, User Load, OS Version, Free Swap Space] modifiedDate: Mon Feb 06 11:24:50 EST 2012 name: server.example.com operations: [viewProcessList, cleanYumMetadataCache, manualAutodiscovery] pluginConfiguration: pluginConfigurationDefinition: ConfigurationDefinition[xml:id=10009, name=Linux] resourceType: Linux systemLoad: 0.0% totalMemory: 23.5GB totalSwapSpace: 25.6GB usedMemory: 6.8GB usedSwapSpace: 0.0B userLoad: 15.8% version: Linux 2.6.32-220.4.1.el6.x86_64 waitLoad: 0.0%
ProxyFactory
リソースプロキシーオブジェクトを作成します。
例10.3 プラットフォームプロキシーリソースの定義
var rhelServerOne = ProxyFactory.getResource(10001)
- リソースの基本情報(子など)の表示
- 測定情報の取得
- 操作の実行
- リソースおよびプラグイン設定の変更
- コンテンツの更新および取得
例10.4 リソースの表示
ProxyFactory
すべてのプロキシーオブジェクトにメソッドがあります。子
。プロキシーリソースの子をすべて表示します。
var rhelServerOne = ProxyFactory.getResource(10001) rhqadmin@localhost:7080$ platform.children Array of org.rhq.bindings.client.ResourceClientProxy [10027] Bundle Handler - Ant (Ant Bundle Handler::AntBundlePlugin) [10026] CPU 6 (CPU::Platforms) [10025] CPU 0 (CPU::Platforms) [10024] CPU 5 (CPU::Platforms) [10023] CPU 1 (CPU::Platforms) [10022] CPU 4 (CPU::Platforms) [10021] CPU 2 (CPU::Platforms) [10020] CPU 3 (CPU::Platforms) [10019] CPU 7 (CPU::Platforms) [10018] /boot (File System::Platforms) [10017] / (File System::Platforms) [10016] /dev/shm (File System::Platforms) [10015] /home (File System::Platforms) [10014] eth1 (Network Adapter::Platforms) [10013] eth2 (Network Adapter::Platforms) [10012] eth0 (Network Adapter::Platforms) [10011] lo (Network Adapter::Platforms) [10004] postgres (Postgres Server::Postgres) [10003] AS server.example.com RHQ Server (JBossAS Server::JBossAS) [10002] RHQ Agent (RHQ Agent::RHQAgent)
例10.5 リソースメトリクスの表示
ProxyFactory
リソースタイプの個別の測定に対して、ショートカットメトリックのセットを提供します。これは、 findLiveData()
リモート API のメソッドは、簡単にモニタリング情報を取得でき、利用可能なメトリクスを特定する方が簡単です。
var jbossas = ProxyFactory.getResource(14832) rhqadmin@localhost:7080$ jbossas.JVMTotalMemory Measurement: name: JVM Total Memory displayValue: 995.3MB description: The total amount of memory currently available in the app server JVM for current and fut...
measurements
方法:
var rhelServerOne = ProxyFactory.getResource(10001) rhqadmin@localhost:7080$ rhelServerOne.measurements Array of org.rhq.bindings.client.ResourceClientProxy$Measurement name displayValue description ----------------------------------------------------------------------------------------------------------------------- Wait Load 0.0% Percentage of all CPUs waiting on I/O Used Memory 6.3GB The total used system memory System Load 0.0% Percentage of all CPUs running in system mode Distribution Version release 6.2 (Santiago) version of the Linux distribution Total Memory 31.4GB The total system memory OS Name Linux Name that the operating system is known as Free Memory 25.2GB The total free system memory Hostname server.example.com Name that this platform is known as Architecture x86_64 Hardware architecture of the platform Distribution Name Red Hat Enterprise Linux Server name of the Linux distribution Idle 92.6% Idle percentage of all CPUs Total Swap Space 33.6GB The total system swap Used Swap Space 0.0B The total used system swap User Load 16.7% Percentage of all CPUs running in user mode OS Version 2.6.32-220.4.2.el6.x86_64 Version of the operating system Free Swap Space 33.6GB The total free system swap 16 rows
例10.6 プロキシーでの操作の実行
ProxyFactory
リソースで利用可能なすべての操作には、ショートカットメソッドがあります。
var rhelServerOne = ProxyFactory.getResource(10001) rhqadmin@localhost:7080$ rhelServerOne.operations Array of org.rhq.bindings.client.ResourceClientProxy$Operation name description ----------------------------------------------------------------------------------------------------------------------- viewProcessList View running processes on this system cleanYumMetadataCache Deletes all cached package metadata manualAutodiscovery Run an immediate discovery to search for resources 3 rows
rhqadmin@localhost:7080$ rhelServerOne.viewProcessList(); Invoking operation viewProcessList Configuration [11951] - null processList [305] { pid name size userTime kernelTime ------------------------------------------------------------------------------------------------------------------ 1 init 19865600 150 10050 .... 26285 httpd 214618112 90 80 26286 httpd 214618112 90 80 26288 httpd 214618112 110 70 26289 httpd 214618112 90 80 27357 java 4734758912 1289650 373890 30458 postgres 218861568 1820 27440 30460 postgres 180985856 1210 5330 30462 postgres 218984448 13080 42200 30463 postgres 218861568 3970 26940 30464 postgres 219328512 10600 15320 30465 postgres 181407744 18680 78760 30482 httpd 185905152 1660 7520 32410 bash 108699648 0 10 32420 java 6024855552 3890240 669810 305 rows }
例10.7 設定プロパティーの変更
editResourceConfiguration()
および editPluginConfiguration()
それぞれ - それらのプロパティーを編集します。
get*Configuration)
.たとえば、プラグイン設定の場合は以下のようになります。
var rhelServerOne = ProxyFactory.getResource(10001) rhqadmin@localhost:7080$ rhelServerOne.getPluginConfiguration() Configuration [10793] - null metadataCacheTimeout = 1800 enableContentDiscovery = false yumPort = 9080 enableInternalYumServer = false logs [0] { }
edit*Configuration()
メソッドを使用すると、すべてのプロパティーを個別に処理し、各値を保持または変更するよう指示する設定ウィザードが表示されます。このプロパティーは、JBoss ON の Web UI が使用する組織に従ってグループ化されます。例:
rhqadmin@localhost:7080$ rhelServerOne.editPluginConfiguration(); Non-Grouped Properties: Group: Content enableContentDiscovery[false]: enableInternalYumServer[false]: yumPort[9080]: metadataCacheTimeout[1800]: Group: Event Logs [R]eview, [E]dit, Re[V]ert [S]ave or [C]ancel: ...
キー | action |
---|---|
return | プロパティーのデフォルトまたは既存の値を選択します。 |
ctrl-d | 設定 UI で unset チェックボックスを選択する場合と同じです。 |
ctrl-k | 設定ウィザードを終了します。 |
ctrl-e | 現在のプロパティーのヘルプの説明を表示します。 |
例10.8 リソースのコンテンツの管理
var contentResource = ProxyFactory.getResource(14932) contentResource.retrieveBackingContent("/resources/backup/original.war")
updateBackingContent
コンテンツとバージョン番号を配置するために、アプリケーションサーバーのパスでファイル名を指定して方法を指定します。例:
contentResource.updateBackingContent("/resources/current/new.war", "2.0")
10.3. コマンドとスクリプト引数を渡す
rhq-cli.sh
、コマンドまたは完全なスクリプトを同時に渡すことができます。CLI は対話モードで接続されるのではなく、指定されたコマンドまたはスクリプトを実行し、終了するため、CLI に接続する非対話的な方法です。
例10.9 変数をサーバーに渡す
-c
ます。この例では、サーバーは、サーバーのサポートされるすべてのリソースタイプを検索してプリントし、結果を出力します。 resource_types.txt
rhq-cli.sh -u rhqadmin -p rhqadmin -c "pretty.print(ResourceTypeManager.findResourceTypesByCriteria(new ResourceTypeCriteria()))" > resource_types.txt
ResourceTypeManager.findResourceTypesByCriteria(new ResourceTypeCriteria())
クラスが呼び出されます。 findResourceTypesByCriteria
操作オン ResourceTypeManager
.新しい ResourceTypeCriteria
オブジェクトは引数として渡されます。
pretty
は、CLI がコマンドおよびスクリプトで使用できる暗黙的なオブジェクトです。これは、ドメインオブジェクト用に設計された、読み取り可能な表形式でオブジェクトを出力する際に便利です。
例10.10 スクリプトの実行
my_script.js
ます。スクリプトの実行が終了すると、CLI はすぐに終了します。
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/bin/rhq-cli.sh -f /export/myScripts/my_script.js
例10.11 スクリプト引数の処理
if (args.length < 2) { throw "Not enough arguments!"; } for (i in args) { println('args[' + i + '] = ' + args[i]); }
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules
ディレクトリーのモジュールとして追加されている場合にのみ利用できます。
[jsmith@server ~]$ cliRoot/rhq-remoting-cli-4.9.0.JON320GA/bin/rhq-cli.sh -s jon-server.example.com -u rhqadmin -p rhqadmin -t 7080 echo_args.js --args-style=named x=1 y=2
echo_args.js
、は、スクリプトの呼び出し(x および y)でという名前の 2 つのオプションを受け入れるように記述されています。
for (i in args) { println('args[' + i + '] = ' + args[i]); } println('named args...'); println('x = ' + x); println('y = ' + y);
args[0] = 1 args[1] = 2 named args... x = 1 y = 2
- --args-style オプションで名前付き引数を使用することを明示的に指定します。
- 名前付き引数の値は、暗黙的な args アレイから引き続きアクセスできます。
- x およびなどの名前付き引数は y、変数としてスクリプトコンテキストにバインドされます。
例10.12 1 つのステートメントの実行
-c
オプションを使用する場合と同じように、コマンドを渡して実行でき rhq-cli.sh
ます。
localhost:7080> var x = 1
例10.13 複数ラインステートメントの実行
localhost:7080(rhqadmin)> for (i = 1; i < 3; ++i) { \ localhost:7080(rhqadmin)> println(i); \ localhost:7080(rhqadmin)> } 1 2 localhost:7080(rhqadmin)>
例10.14 スクリプトの実行
-f
オプションを使用します。
-f
オプションは、スクリプトと同じディレクトリーにある場合でも、スクリプトの場所を絶対的に指定する必要があり rhq-cli.sh
ます。CLI は、相対パスのみを持つスクリプトを見つけることはありません。
[jsmith@server ~]$ cliRoot/rhq-remoting-cli-4.9.0.JON320GA/bin/rhq-cli.sh -u rhqadmin -p rhqadmin -s jon-server.example.com -t 7080 -f /absolute/path/to/myscript.js
例10.15 引数を使用したスクリプトの実行
[jsmith@server ~]$ cliRoot/rhq-remoting-cli-4.9.0.JON320GA/bin/rhq-cli.sh -u rhqadmin -p rhqadmin -s jon-server.example.com -t 7080 -f /absolute/path/to/myscript.js 1 2 3
例10.16 名前付き引数でのスクリプトの実行
[jsmith@server ~]$ cliRoot/rhq-remoting-cli-4.9.0.JON320GA/bin/rhq-cli.sh -u rhqadmin -p rhqadmin -s jon-server.example.com -t 7080 --args-style=named -f /absolute/path/to/myscript.js x=1 y=2 y=3
10.4. Pretty-Print 出力の表示
TabularWriter
)は、すべての CLI コマンドに暗黙的であるため、ほとんどすべての出力は自動的にフォーマットされます。このクラスは、pretty と呼ばれる暗黙的な変数としても利用できます。これは、スクリプトを作成する際に便利です。
rhqadmin@localhost:7080$ criteria = ResourceCriteria() rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('service-alpha') rhqadmin@localhost:7080$ criteria.addFilterParentResourceName('server-omega-0') rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria) id name version resourceType ------------------------------------------------ 11373 service-alpha-8 1.0 service-alpha 11374 service-alpha-1 1.0 service-alpha 11375 service-alpha-0 1.0 service-alpha 11376 service-alpha-4 1.0 service-alpha 11377 service-alpha-2 1.0 service-alpha 11378 service-alpha-3 1.0 service-alpha 11379 service-alpha-5 1.0 service-alpha 11380 service-alpha-9 1.0 service-alpha 11381 service-alpha-6 1.0 service-alpha 11382 service-alpha-7 1.0 service-alpha 10 rows
pretty
ドメイン(org.rhq.core.domain)パッケージで定義されたオブジェクトのフォーマット。
rhqadmin@localhost:7080$ println(resources) PageList[Resource[id=11373, type=service-alpha, key=service-alpha-8, name=service-alpha-8, version=1.0], Resource[id=11374, type=service-alpha, key=service-alpha-1, name=service-alpha-1, version=1.0], .... 8< ....
pretty
サマリー情報(@Summary)をチェックし、情報のサブセットのみを表示します。その後、単一オブジェクトの概要情報がフォーマットされたリストとして出力されます。例:
rhqadmin@localhost:7080$ pretty.print(resources.get(0)) Resource: id: 11373 name: service-alpha-8 version: 1.0 resourceType: service-alpha
10.5. 出力のエクスポート
export
は、出力を指定されたファイルに書き込むもう 1 つの暗黙的なスクリプト変数です。exporter
使用方法 pretty.print
インタラクティブ表示で使用されるテーブル形式のフォーマットに一致するプレーンテキストファイルにすべての情報を出力するには、以下を実行します。
rhqadmin@localhost:7080$ exporter.setTarget('raw', 'output.txt') rhqadmin@localhost:7080$ exporter.write(resources)
exporter
IO 操作を処理します。
exporter
raw リソースまたは他の情報を CSV ファイルに書き込むことができます。
rhqadmin@localhost:7080$ exporter.setTarget('csv', 'output.csv') rhqadmin@localhost:7080$ exporter.write(resources)
第11章 CLI の使用に関するヒント
11.1. タブ Complete の使用
[jsmith@server bin]# ./rhq-cli.sh -u rhqadmin -p rhqadmin RHQ Enterprise Remote CLI 3.3 Remote server version is: 3.3 (2484565) Login successful rhqadmin@localhost:7080$ Resource ResourceFactoryManager ResourceGroupManager ResourceManager ResourceTypeManager rhqadmin@localhost:7080$ ex exporter exec
rhqadmin@localhost:7080$ ResourceManager. availabilitySummary disableResources enableResources findChildResources findResourceLineage findResourcesByCriteria getAvailabilitySummary getLiveResourceAvailability getParentResource getResource getResourcesAncestry liveResourceAvailability parentResource resource toString uninventoryResources updateResource
rhqadmin@localhost:7080$ List<Integer> enableResources(GenericArrayTypeImpl[int]) Resource updateResource(Resource resource) List<Integer> uninventoryResources(GenericArrayTypeImpl[int] resourceIds) ResourceAvailabilitySummary getAvailabilitySummary(int resourceId) PageList<Resource> findChildResources(int resourceId, PageControl pageControl) Map<Integer,String> getResourcesAncestry(GenericArrayTypeImpl[Integer] resourceIds, ResourceAncestryFormat format) List<Integer> disableResources(GenericArrayTypeImpl[int]) List<Resource> findResourceLineage(int resourceId) ResourceAvailability getLiveResourceAvailability(int resourceId) PageList<Resource> findResourcesByCriteria(ResourceCriteria criteria) Resource getResource(int resourceId) String toString() Resource getParentResource(int resourceId)
11.2. CLI の対話およびファイルとの相違点
-f
オプションを使用してスクリプトファイルを CLI に直接入力するか(インタラクティブモードで)、または CommonJS モジュールスクリプトで関数を定義して、CLI で実行できます。
- quit(CLI を終了する)
- record
rhq.login('rhqadmin', 'rhqadmin'); rhq.logout();
11.3. リソースタイプおよびバージョン間の API の相違点
11.4. 利用可能なユーティリティーとサンプルスクリプト
表11.1 ユーティリティーおよびサンプルスクリプト
script | description | location |
---|---|---|
CommonJS モジュールユーティリティースクリプト | ||
util.js |
オブジェクトの配列を使用して繰り返し処理する検索関数を定義します。
foreach )をクリックし、最初に一致するオブジェクト(find )または、一致するすべてのオブジェクトを返します(findAll ).また、情報を JavaScript ハッシュから JBoss ON 設定オブジェクトへ変換する機能も含まれています。
samples/util.js スクリプトと同じですが、CommonJS モジュールとして記述されます。
| cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules/ |
bundles.js |
バンドルの作成およびデプロイ、バンドル宛先の作成、リソースのサポートされるベースディレクトリーへの情報の取得などを行う関数を定義します。
samples/bundles.js スクリプトと同じですが、CommonJS モジュールとして記述されます。
| cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules/ |
drift.js |
スナップショットの作成および配布、定義を取得し、リソースまたは特定ファイルの履歴を表示する関数を定義します。
samples/drift.js スクリプトと同じですが、CommonJS モジュールとして記述されます。
| cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules/ |
jbossas.js |
Web アプリケーションのデプロイや EAP クラスターの管理など、EAP 6 / AS 7 リソースを管理する複数の機能を定義します。
CommonJS モジュールとして組み合わせ、記述された
samples/deploy-to-and-restart-JBAS.js samples/add-as7-standalone-server-to-cluster.js スクリプトはおよびスクリプトと同じです。
| cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules/ |
ユーティリティースクリプト | ||
util.js | オブジェクトの配列を使用して繰り返し処理する検索関数を定義します。foreach )をクリックし、最初に一致するオブジェクト(find )または、一致するすべてのオブジェクトを返します(findAll ).また、情報を JavaScript ハッシュから JBoss ON 設定オブジェクトへ変換する機能も含まれています。 | cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/ |
measurement_utils.js | メトリックスケジュールを有効または無効にする関数を定義します。 | cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/ |
bundles.js | バンドルの作成およびデプロイ、バンドル宛先の作成、リソースのサポートされるベースディレクトリーへの情報の取得などを行う関数を定義します。 | cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/ |
drift.js | スナップショットの作成および配布、定義を取得し、リソースまたは特定ファイルの履歴を表示する関数を定義します。 | cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/ |
サンプルスクリプト | ||
add-as7-standalone-server-to-cluster.js | 指定された AS 7 をクラスターに追加する一連の関数を定義します。 | cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/ |
deploy-to-and-restart-JBAS.js | 新しいコンテンツを EAP サーバーにデプロイし、既存のコンテンツを更新する 2 つの機能を定義します。適切な変数を設定すると、このスクリプトを直接実行してコンテンツをデプロイし、指定のアプリケーションサーバーを再起動することができます。 | cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/ |
fix-bundle-deployment.js | バンドルデプロイメントを指定されたバージョンに戻すサーバー側のアラートスクリプトの例。 | serverRoot/jon-server-3.3/jbossas/server/default/deploy/rhq.ear/rhq-downloads/cli-alert-scripts/ |
11.5. カスタム関数の定義
11.6. Cron を使用したスクリプトの実行スケジュール
import.js
をインベントリーに自動的に追加し、毎日実行するように書き込みます。
vim /etc/cron.daily/rhq-cli #!/bin/sh # run JON CLI every morning to import new resources cliRoot/rhq-remoting-cli-4.9.0.JON320GA/bin/rhq-cli.sh -u rhqadmin -p rhqadmin -f /export/scripts/import.js
11.7. Wrapper スクリプトの使用
11.8. JBoss ON ユーザーの権限と設定
第12章 短い例
12.1. 検索
find
オブジェクトByCriteria
そのため、リソース find メソッドは以下のようになります。 findResourcesByCriteria
グループの検索方法は findResourceGroupsByCriteria
.
12.1.1. 基本検索基準の設定
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria() // this sets the criteria to use for the search rhqadmin@localhost:7080$ criteria.clearPaging() // this clears the 200 item page size to return all entries rhqadmin@localhost:7080$ var resources = ResourceManager.findResourcesByCriteria(criteria) // this actually runs the search rhqadmin@localhost:7080$ pretty.print(resources) // this prints the search results id name versio curren resour ------------------------------------------------------------------------------- 10001 server Linux UP Linux 10002 server AS 4.2 UP JBossA 10392 full-h UP Profil 10014 AlertH UP EJB3 S 10015 Adviso UP EJB3 S 10016 DataAc UP EJB3 S 10017 Affini UP EJB3 S 10011 Access UP Access 10391 ha UP Profil ...8<...
findResourcesByCriteria()
は、検索を実行するもの、 pretty.print
結果を表示するには、メソッドが必要です。
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED
12.1.2. ソートの使用
criteria.addSortPluginName()
.ソート基準には、フォームにメソッドが含まれる AddSortXXX(PageOrdering order)
.
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria() rhqadmin@localhost:7080$ criteria.addSortPluginName(PageOrdering.ASC) // adds a sort order to the results rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED ) ORDER BY r.resourceType.plugin ASC
12.1.3. フィルターの使用
addFilterXXX()
.
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria() rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server') // a search filter rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED AND LOWER( r.resourceType.name ) like 'JBossAS Server' ESCAPE '\\' )
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria() rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server') rhqadmin@localhost:7080$ criteria.addFilterAgentName('localhost.localdomain') rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria)
SELECT r FROM Resource r WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED AND LOWER( r.agent.name ) like 'localhost.localdomain' ESCAPE '\\' )
12.1.4. 関連付けの取得
...8<... rhqadmin@localhost:7080$ resource = resources.get(0) rhqadmin@localhost:7080$ if (resource.childResources == null) print('no child resources')
rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('JBossAS Server') rhqadmin@localhost:7080$ criteria.fetchChildResources(true) rhqadmin@localhost:7080$ resources = ResourceManager.findResourcesByCriteria(criteria) rhqadmin@localhost:7080$ resource = resources.get(0) rhqadmin@localhost:7080$ if (resource.childResources == null) print('no child resources'); else pretty.print(resource.childResources) id name versio resourceType ----------------------------------------------------------- 222 AlertManagerBean EJB3 Session Bean 222 SchedulerBean EJB3 Session Bean 222 AlertDefinitionManagerBean EJB3 Session Bean 222 AlertConditionConsumerBean EJB3 Session Bean 222 PartitionEventManagerBean EJB3 Session Bean ...8<...
SELECT r FROM Resource r LEFT JOIN FETCH r.childResources WHERE ( r.inventoryStatus = InventoryStatus.COMMITTED AND LOWER( r.resourceType.name ) like 'JBossAS Server' ESCAPE '\\' )
12.1.5. ページサイズの設定
条件
クラスは、検索結果のページサイズを制御するために使用できるメソッドを定義します。
例12.1 ページサイズの消去
clearPaging
var criteria = new ResourceCriteria()
criteria.clearPaging()
var resources = ResourceManager.findResourcesByCriteria(criteria)
例12.2 ページサイズの設定
setPaging
method は、指定の検索のページ数とページサイズを設定します。通常、ページは 1 つのみであるため、ページ番号は 0 に設定され、必要に応じてページサイズをリセットできます。
rhqadmin@localhost:7080$ var criteria = new ResourceCriteria() rhqadmin@localhost:7080$ criteria.getPageSize() 200 rhqadmin@localhost:7080$ criteria.getPageNumber() 0 rhqadmin@localhost:7080$ criteria.setPaging(0,300) rhqadmin@localhost:7080$ var resources = ResourceManager.findResourcesByCriteria(criteria) id name currentAvailability resourceType ------------------------------------------------------------------------------------------------------------------ 10032 RHQDS UP Datasource 10033 ResourceFactoryManagerBean UP EJB3 Session Bean 10034 CoreTestBean UP EJB3 Session Bean 10035 rhq-postinstaller.war (//localhost/installer) UP Web Application (WAR) 10036 ResourceMetadataManagerBean UP EJB3 Session Bean 10037 SystemInfoManagerBean UP EJB3 Session Bean 10105 wstools.sh UP Script 10038 PartitionEventManagerBean UP EJB3 Session Bean 10039 CallTimeDataManagerBean UP EJB3 Session Bean 10040 AlertDefinitionManagerBean UP EJB3 Session Bean 10041 DiscoveryTestBean UP EJB3 Session Bean 10123 wsconsume.sh UP Script 10042 ROOT.war (//localhost/) UP Web Application (WAR) 10044 AlertManagerBean UP EJB3 Session Bean 10045 AgentManagerBean UP EJB3 Session Bean ... 8< ... 300 rows
12.2. オブジェクトの JBoss ON ID の取得
rhqadmin@localhost:7080$ criteria = new ResourceCriteria(); ResourceCriteria: inventoryManagerRequired: false persistentClass: class org.rhq.core.domain.resource.Resource rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('Linux') rhqadmin@localhost:7080$ ResourceManager.findResourcesByCriteria(criteria); one row Resource: id: 10001 name: gs-dl585g2-01.rhts.eng.bos.redhat.com version: Linux 2.6.32-220.el6.x86_64 currentAvailability: UP resourceType: Linux
*criteria
検索します。ID が明示的に表示されない場合でも、オブジェクトの ID が検索されます。
rhqadmin@localhost:7080$ var metrics = MeasurementDataManager.findLiveData(resources.get(0).id, [mdefs.get(0).id]);
12.3. 単一および複数リソースのデータの取得
exporter.write(data.get(0))
例12.3 get(i)
if( mdefs != null ) { if( mdefs.size() > 1 ) { for( i =0; i < mdefs.size(); ++i) { mdef = mdefs.get(i); var data = MeasurementDataManager.findDataForResource(resources.get(0).id,[mdef.id],start,end,1) exporter.write(data.get(0)); } } ...8<...
例12.4 アレイ
//find the resources //use a plugin filter to make sure they are all of the same type criteria = new ResourceCriteria(); criteria.addFilterPluginName('JBossAS5') var resources = ResourceManager.findResourcesByCriteria(criteria).toArray(); var resType = ResourceTypeManager.getResourceTypeByNameAndPlugin('JBossAS Server', 'JBossAS5'); // go through the array var idx=0; var jbossServers = new Array(); for( i in resources ) { if( resources[i].resourceType.id == resType.id ) { jbossServers[idx] = resources[i]; idx = idx + 1; } } // restart the resources for( a in resources ) { var jboss = ProxyFactory.getResource(jbossServers[a].id); jboss.restart() }
util.js
サポートスクリプトには、アレイ、コレクション、マップ、汎用オブジェクトを使用して正しく反復する foreach 関数があります。
12.4. リソースおよびグループ
12.4.1. コンテンツバックアップリソース(Web アプリケーション)の作成および更新
- コンテンツをアップロードするリソースを検索します。この例では、JBoss AS 5 サーバーを検索します。
- サーバーが稼働していることを確認します。コンテンツが正常にデプロイするには、JBoss サーバーを稼働する必要があります。
例12.5 コンテンツバックアップリソースの作成
// fill this information in before running the script var pathName = '/home/jon/myExampleApp.ear' var resTypeName = 'JBossAS Server' var pluginName = "JBossAS5" var appTypeName = "Enterprise Application (EAR)" // define a custom function to parse the filename and path info function PackageParser(pathName) { var file = new java.io.File(pathName); var fileName = file.getName(); var packageType = fileName.substring(fileName.lastIndexOf('.')+1); var tmp = fileName.substring(0, fileName.lastIndexOf('.')); var version = 1; var realName = tmp; var packageName = fileName; // parse the package version, only if version is included if(tmp.indexOf('-') != -1){ realName = tmp.substring(0, tmp.lastIndexOf('-')); version = tmp.substring(tmp.lastIndexOf('-') + 1); packageName = realName + "." + packageType; } this.packageType = packageType.toLowerCase(); this.packageName = packageName; this.version = version; this.realName = realName; this.fileName = fileName; } criteria = new ResourceCriteria(); criteria.addFilterResourceTypeName(resTypeName); criteria.addFilterPluginName(pluginName); var resources = ResourceManager.findResourcesByCriteria(criteria); // create the config options for the new EAR var deployConfig = new Configuration(); deployConfig.put( new PropertySimple("deployExploded", "false")); deployConfig.put( new PropertySimple("deployFarmed", "false")); // stream in the file bytes var file = new java.io.File(pathName); var inputStream = new java.io.FileInputStream(file); var fileLength = file.length(); var fileBytes = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, fileLength); for (numRead=0, offset=0; ((numRead >= 0) && (offset < fileBytes.length)); offset += numRead ) { numRead = inputStream.read(fileBytes, offset, fileBytes.length - offset); } // parse the filename and path info PackageParser(pathName); // identifies the type of resource being created var appType = ResourceTypeManager.getResourceTypeByNameAndPlugin(appTypeName, pluginName); // create the new EAR resource on each discovered app server if( resources != null ) { for( i =0; i < resources.size(); ++i) { var res = resources.get(i);println("res: " + res); ResourceFactoryManager.createPackageBackedResource( res.id, appType.id, packageName, null, // pluginConfiguration packageName, version, null, // architectureId deployConfig, fileBytes, null // timeout ); } }
例12.6 コンテンツバックアップリソースの更新
// update this var fullPathName = '/export/myfiles/updatedApp.ear' // define a custom function to parse the filename and path info function PackageParser(pathName) { var file = new java.io.File(pathName); var fileName = file.getName(); var packageType = fileName.substring(fileName.lastIndexOf('.')+1); var tmp = fileName.substring(0, fileName.lastIndexOf('.')); var version = 1; var realName = tmp; var packageName = fileName; // parse the package version, only if version is included if(tmp.indexOf('-') != -1){ realName = tmp.substring(0, tmp.lastIndexOf('-')); version = tmp.substring(tmp.lastIndexOf('-') + 1); packageName = realName + "." + packageType; } this.packageType = packageType.toLowerCase(); this.packageName = packageName; this.version = version; this.realName = realName; this.fileName = fileName; } // parse the filename and path info PackageParser(fullPathName); // search for the JBoss AS 5 server by name criteria = new ResourceCriteria(); criteria.addFilterName('My JBoss AS 5 Server'); var res = ResourceManager.findResourcesByCriteria(criteria); var jboss = ProxyFactory.getResource(res.get(0).id); var children = jboss.children; for( c in children ) { var child = children[c]; if( child.name == packageName ) { child.updateBackingContent(fullPathName,version); } }
例12.7 コンテンツバックアップリソースの削除
// search for the content resource by name criteria = new ResourceCriteria(); criteria.addFilterName('updatedApp.ear'); var res = ResourceManager.findResourcesByCriteria(criteria); ResourceFactoryManager.deleteResource(res.get(0).id)
12.4.2. リソースグループの作成およびメンバーの追加
- リソースタイプを検索します。
- リソースタイプに基づいてグループを作成します。
- そのリソースタイプのリソースを見つけます。
- 返されたリソースを繰り返し処理し、そのリソースをグループに追加します。
例12.8 アノテーション付きの例
// search for the resource type to use for the compat group var resType = ResourceTypeManager.getResourceTypeByNameAndPlugin("Linux","Platforms"); //create the new resource group var rg = new ResourceGroup(resType); rg.setRecursive(false); rg.setName('Linux Group - ' + java.util.Date()); rg = ResourceGroupManager.createResourceGroup(rg); //find resources to add to the group based on their resource type criteria = new ResourceCriteria(); criteria.addFilterResourceTypeId(resType.id); var resources = ResourceManager.findResourcesByCriteria(criteria); // add the found resources to the group if( resources != null ) { for( i =0; i < resources.size(); ++i) { var resource = resources.get(i); ResourceGroupManager.addResourcesToGroup(rg.id, [resource.id]); } }
12.4.3. Dynagroups の作成および編集
例12.9 Dynagroup の作成
// create the new dynagroup var dynaGroupDef = new GroupDefinition("Linux Group"); var expr = "resource.type.name=Linux" + "\n" + "resource.type.category=Platform" dynaGroupDef.setExpression(expr); var def = GroupDefinitionManager.createGroupDefinition(dynaGroupDef); // calculate the group members GroupDefinitionManager.calculateGroupMembership(def.getId());
例12.10 Dynagroup の編集
// search for the dynagroup criteria = new ResourceGroupDefinitionCriteria() criteria.addFilterName("Linux Group"); var orig = GroupDefinitionManager.findGroupDefinitionsByCriteria(criteria) // get the dynagroup entry var originalGroupDef = orig.get(0) // add the new expression var expr = "resource.type.name=Linux" + "\n" + "resource.type.category=Platform" + "\n" + "resource.availability=UP" originalGroupDef.setExpression(expr); var def = GroupDefinitionManager.updateGroupDefinition(originalGroupDef); // calculate the group members GroupDefinitionManager.calculateGroupMembership(def.getId());
例12.11 グループ定義の再計算
// search for the dynagroup criteria = new ResourceGroupDefinitionCriteria() criteria.addFilterName("All agents"); var orig = GroupDefinitionManager.findGroupDefinitionsByCriteria(criteria) // calculate the group members GroupDefinitionManager.calculateGroupMembership(orig.getId());
calculatedGroupMembership()
メソッドを実行することで、すべての dynagroups または dynagroups のセットを再計算できます。これは、で説明してい 「単一および複数リソースのデータの取得」 ます。
12.5. リソース設定
- プラグインの設定。Web UI では、これは 接続設定 と呼ばれます。これは、エージェントが PID ファイルパスやポート番号などのリソースを検出し、接続するのに使用する情報です。すべてのリソースには、何らかのプラグイン設定があります。
- リソース設定。設定プロパティーは、
.conf
またはなどのリソースの設定ファイルから提供され.xml
ます。JBoss ON 内で公開される設定ファイルおよびプロパティーは、プラグイン記述子に定義されます。リソース設定はオプションであり、多くのリソースは設定の編集や、可能なプロパティーのサブセットのみをサポートしません。
12.5.1. 現在の設定の表示
get*ConfigurationDefinitionForResourceType
メソッドは、リソース タイプの設定 に使用される記述子定義のテンプレートを表示できます。これらは、そのタイプのすべてのリソースで使用できる設定プロパティーです。
例12.12 リソースタイプのプラグイン設定の表示
rhqadmin@localhost:7080$ var res = ResourceTypeManager.getResourceTypeByNameAndPlugin('Linux','Platforms') //get the resource type ID rhqadmin@localhost:7080$ ConfigurationManager.getPluginConfigurationDefinitionForResourceType(res.id) //use the type ID to search for the resource type template ConfigurationDefinition: configurationFormat: Structured defaultTemplate: ConfigurationTemplate[id=10443, name=default, config=Linux] description: groupDefinitions: [PropertyGroupDefinition[id=10058, name=Content], PropertyGroupDefinition[id=10059, name=Event Logs]] id: 10437 name: Linux nonGroupedProperties: [] propertyDefinitions: {logs=PropertyDefinitionList[id=11792, name=logs, config=Linux, group=Event Logs], metadataCacheTimeout=SimpleProperty[metadataCacheTimeout] (Type: INTEGER)(Group: Content), enableContentDiscovery=SimpleProperty[enableContentDiscovery] (Type: BOOLEAN)(Group: Content), enableInternalYumServer=SimpleProperty[enableInternalYumServer] (Type: BOOLEAN)(Group: Content), yumPort=SimpleProperty[yumPort] (Type: INTEGER)(Group: Content)} templates: {default=ConfigurationTemplate[id=10443, name=default, config=Linux]}
logs=[id=11792, name=logs, config=Linux, group=Event Logs]
metadataCacheTimeout=SimpleProperty[metadataCacheTimeout] (Type: INTEGER)(Group: Content)
例12.13 リソースタイプの設定プロパティーの表示
rhqadmin@localhost:7080$ var res = ResourceTypeManager.getResourceTypeByNameAndPlugin('Samba Server', 'Samba') //get the resource type ID rhqadmin@localhost:7080$ ConfigurationManager.getResourceConfigurationDefinitionForResourceType(res.id) ConfigurationDefinition: configurationFormat: Structured defaultTemplate: ConfigurationTemplate[id=11123, name=default, config=Samba Server] description: groupDefinitions: [PropertyGroupDefinition[id=10905, name=Basic Configurations], PropertyGroupDefinition[id=10906, name=Security], PropertyGroupDefinition[id=10907, name=Printing], PropertyGroupDefinition[id=10908, name=Active Server Directory]] id: 11087 name: Samba Server nonGroupedProperties: [] propertyDefinitions: {winbind enum groups=SimpleProperty[winbind enum groups] (Type: BOOLEAN)(Group: Active Server Directory), winbind separator=SimpleProperty[winbind separator] (Type: STRING)(Group: Active Server Directory), cups options=SimpleProperty[cups options] (Type: STRING)(Group: Printing), workgroup=SimpleProperty[workgroup] (Type: STRING)(Group: Basic Configurations), encrypt passwords=SimpleProperty[encrypt passwords] (Type: BOOLEAN)(Group: Security), winbind enum users=SimpleProperty[winbind enum users] (Type: BOOLEAN)(Group: Active Server Directory), security=SimpleProperty[security] (Type: STRING)(Group: Security), template shell=SimpleProperty[template shell] (Type: STRING)(Group: Active Server Directory), password=SimpleProperty[password] (Type: PASSWORD)(Group: Active Server Directory), load printers=SimpleProperty[load printers] (Type: BOOLEAN)(Group: Printing), username=SimpleProperty[username] (Type: STRING)(Group: Active Server Directory), realm=SimpleProperty[realm] (Type: STRING)(Group: Active Server Directory), idmap gid=SimpleProperty[idmap gid] (Type: STRING)(Group: Active Server Directory), server string=SimpleProperty[server string] (Type: STRING)(Group: Basic Configurations), controller=SimpleProperty[controller] (Type: STRING)(Group: Active Server Directory), enableRecycleBin=SimpleProperty[enableRecycleBin] (Type: BOOLEAN)(Group: Basic Configurations), idmap uid=SimpleProperty[idmap uid] (Type: STRING)(Group: Active Server Directory)} templates: {default=ConfigurationTemplate[id=11123, name=default, config=Samba Server]}
get*Configuration
メソッド。
例12.14 リソースの設定の表示
rhqadmin@localhost:7080$ criteria = new ResourceCriteria(); // find the resource rhqadmin@localhost:7080$ criteria.addFilterResourceTypeName('Samba') rhqadmin@localhost:7080$ criteria.addFilterAgentName('agent1.example.com') rhqadmin@localhost:7080$ var resource = ResourceManager.findResourcesByCriteria(criteria); rhqadmin@localhost:7080$ ConfigurationManager.getResourceConfiguration(resource.get(0).id) Configuration [12082] - Loaded from Augeas at Wed May 02 12:04:24 EDT 2012 winbind separator = null winbind enum groups = null cups options = null workgroup = null winbind enum users = null encrypt passwords = null security = null template shell = null password = null load printers = null username = null realm = null idmap gid = null server string = null controller = null enableRecycleBin = false idmap uid = null
12.5.2. シンプル設定プロパティーの変更
- リソースを検索します。
- 設定オブジェクトを作成します。
- 新しいプロパティー値を設定します。プロパティーを設定するメソッドは、プロパティーの形式によって異なります。この場合、これは単純なプロパティーな setSimpleValue ので使用されます。simple プロパティーの場合、値は渡して設定されます('property','value')。
- リソースの更新操作を実行します。リソース設定の更新では、メソッドは以下のようになります。
updateResourceConfiguration
.プラグイン設定の更新では、updatePluginConfiguration
.
例12.15 シンプルプロパティーの変更
// find the resource criteria = new ResourceCriteria(); criteria.addFilterResourceTypeName('Samba') // this only updates the resource for this specific agent criteria.addFilterAgentName('agent1.example.com') var resources = ResourceManager.findResourcesByCriteria(criteria); //get current configuration var config = ConfigurationManager.getResourceConfiguration(resources.get(0).id); //set the new value in the form 'property', 'value' config.setSimpleValue("workgroup","example") // run the update operation ConfigurationManager.updateResourceConfiguration(resources.get(0).id,config)
12.6. operations
12.6.1. リソースの起動および停止
例12.16 簡易起動
//find the resource criteria = new ResourceCriteria(); criteria.addFilterName('My JBossAS') var servers = ResourceManager.findResourcesByCriteria(criteria); var myJBossAS = ProxyFactory.getResource(servers.get(0).id) myJBossAS.start()
rhqadmin@localhost:7080$ server.operations Array of org.rhq.bindings.client.ResourceClientProxy$Operation name description ----------------------------------------------------------------------- restart Shutdown and then start this application server. start Start this application server. shutdown Shutdown this application server via script or JMX. 3 rows
例12.17 アレイ 1 の起動
//find the resources //use a plugin filter to make sure they are all of the same type criteria = new ResourceCriteria(); criteria.addFilterPluginName('JBossAS5') var resources = ResourceManager.findResourcesByCriteria(criteria).toArray(); var resType = ResourceTypeManager.getResourceTypeByNameAndPlugin('JBossAS Server', 'JBossAS5'); // go through the array var idx=0; var jbossServers = new Array(); for( i in resources ) { if( resources[i].resourceType.id == resType.id ) { jbossServers[idx] = resources[i]; idx = idx + 1; } } // restart the resources for( a in resources ) { var jboss = ProxyFactory.getResource(jbossServers[a].id); jboss.restart() }
例12.18 アレイ 2 の起動
//find the resources //use a plugin filter to make sure they are all of the same type criteria = new ResourceCriteria(); criteria.addFilterPluginName('JBossAS5') criteria.addFilterResourceTypeName('JBossAS Server'); var jbossServers = ResourceManager.findResourcesByCriteria(criteria).toArray(); // restart the resources for( a in jbossServers ) { var jboss = ProxyFactory.getResource(jbossServers[a].id); jboss.restart() }
12.6.2. スケジューリング操作
例12.19 即時操作
rhqadmin@localhost:7080$ var agent = ProxyFactory.getResource(10008) rhqadmin@localhost:7080$ agent.executeAvailabilityScan(true) Invoking operation executeAvailabilityScan Configuration [13903] - null isChangesOnly = true agentName = server.example.com resourceAvailabilities [0] { }
- リソース ID
- 操作名
- 遅延期間: 今後操作を開始するタイミング(任意)
- 繰り返し間隔とカウント(オプション)
- タイムアウト期間(任意)
- 設定パラメーター(操作で必要な場合)
- スケジュールされた操作の説明(任意)
例12.20 スケジュールされた操作の例
// find the agent var rc = ResourceCriteria(); rc.addFilterResourceTypeName("RHQ Agent"); rc.addFilterVersion("3.3"); var agent = ResourceManager.findResourcesByCriteria(rc); //set the config properties for the operation var config = new Configuration(); config.put(new PropertySimple("changesOnly", "true") ); //schedule the operation OperationManager.scheduleResourceOperation( agent.get(0).id, "executeAvailabilityScan", 0, // 0 means that the delay was skipped 1, 0, // this skips the repeat count 10000000, config, "test from cli" );
ResourceOperationSchedule: resource: Resource[id=10008, uuid=e11390ec-34c4-49df-a4b6-c37c516f545c, type={RHQAgent}RHQ Agent, key=server.example.com RHQ Agent, name=RHQ Agent, parent=server.example.com, version=3.3]
12.6.3. 操作の結果の取得
fetchResults(true)
メソッドを使用すると、操作履歴の検索の一部として操作の結果を返すことができます。
// find the resource criteria = new ResourceCriteria(); criteria.addFilterResourceTypeName('Linux'); criteria.addFilterName('server.example.com'); ResourceManager.findResourcesByCriteria(criteria); var resource = ResourceManager.findResourcesByCriteria(criteria); // search for the operation history var opcrit = ResourceOperationHistoryCriteria(); // get the operation for the resource ID opcrit.addFilterResourceIds(resource.get(0).id); // filter by the operation name opcrit.addFilterOperationName("viewProcessList") opcrit.fetchResults(true); // get the data and print the results var r = OperationManager.findResourceOperationHistoriesByCriteria(opcrit) var h = r.get(0); var c = h.getResults(); pretty.print(c)
例12.21 プロセススキャンの結果の出力
if (args.length != 1) { throw "we need a resource id as an argument"; } var platform = ResourceManager.getResource(args[0]);
var ros = OperationManager.scheduleResourceOperation( platform.id, "viewProcessList", 0, 1, 0, 15, null, "test operation" );
- fetchResults(true)。ステータスだけでなく、操作結果データを含めるために必要です。
- この場合、ソートメソッド addSortStartTime
var opcrit = ResourceOperationHistoryCriteria(); opcrit.addFilterResourceIds(platform.id); opcrit.fetchResults(true); // request the additional optional data in the result opcrit.addSortStartTime(PageOrdering.DESC); // sort by start time java.lang.Thread.sleep(1000); // wait a second to make sure operation is in the history // wait for up to 15 seconds for last operation to complete, then print result now=new Date().getTime(); while (new Date().getTime() - now < 15000 ) { operations = OperationManager.findResourceOperationHistoriesByCriteria(opcrit); if (operations.get(0).getResults() == null) { println("operation still pending result"); java.lang.Thread.sleep(1000); } else { pretty.print(operations.get(0).getResults()); break; } } if (operations.get(0).getErrorMessage() != null) { println("Error getting process list: "); pretty.print(operations.get(0).getErrorMessage()); }
} else { pretty.print(operations.get(0).getResults()); break; }
12.6.4. リソースの動作履歴の確認
例12.22 操作履歴の表示
// find the resource var rc = ResourceCriteria(); rc.addFilterPluginName("RHQAgent"); rc.addFilterName("RHQ Agent"); rc.addFilterResourceTypeName("RHQ Agent"); rc.addFilterDescription("Agent"); var agent = ResourceManager.findResourcesByCriteria(rc); // print the operation history for the resource var opcrit = ResourceOperationHistoryCriteria() opcrit.addFilterResourceIds(agent.get(0).id) OperationManager.findResourceOperationHistoriesByCriteria(opcrit);
resource results ----------------------------------------------------------------------------------------------------------------- Resource[id=10008, uuid=e11390ec-34c4-49df-a4b6-c37c516f545c, type={RHQAgent}RHQ Agent, key=server.example.com RHQ Age Configuration[id=13903] Resource[id=10008, uuid=e11390ec-34c4-49df-a4b6-c37c516f545c, type={RHQAgent}RHQ Agent, key=server.example.com RHQ Age Configuration[id=13913] 2 rows
12.7. 監視
12.7.1. リソースの可用性
- リソースを検索します。この場合、スクリプトはリソースタイプ(Linux プラットフォーム)に一致するリソースのみを検索し、可用性スキャンに最初に一致します。
- 現在の可用性ステータスを取得します。
例12.23 現在の可用性
// get the resource ID criteria = new ResourceCriteria(); criteria.addFilterResourceTypeName('Linux') var res = ResourceManager.findResourcesByCriteria(criteria); // check the current availability AvailabilityManager.getCurrentAvailabilityForResource(res.get(0).id)
Availability: availabilityType: UP endTime: id: 10192 resource: Resource[id=10001, uuid=null, type=<null>, key=null, name=null, parent=<null>] startTime: 1335974397214
12.7.2. 特定のメトリクスの取得
findLiveData
method は、現在の、対象外の、指定のメトリクスのライブ読み取りをプルする方法です。
- リソースタイプに基づいて利用可能なメトリクス定義を検索し、単一のメトリクスに絞り込みます。この例では、Linux プラットフォームの空きメモリーメトリックを取得します。
- リソースを検索します。
- メトリックの現在の読み取りを取得します。
- ターミナルにデータを出力します。
例12.24 アノテーション付きの例
// search for the resource criteria = new ResourceCriteria(); criteria.addFilterResourceTypeName('Linux'); var resources = ResourceManager.findResourcesByCriteria(criteria); // search for the resource type to use in the metrics definition var rt = ResourceTypeManager.getResourceTypeByNameAndPlugin("Linux", "Platforms"); // search for the metric definition var mdc = MeasurementDefinitionCriteria(); mdc.addFilterDisplayName("Free Memory"); mdc.addFilterResourceTypeId(rt.id); var mdefs = MeasurementDefinitionManager.findMeasurementDefinitionsByCriteria(mdc); //get the data var metrics = MeasurementDataManager.findLiveData(resources.get(0).id, [mdefs.get(0).id]); // as a nice little display, print the retrieved metrics value if( metrics !=null ) { println(" Metric value for " + resources.get(0).id + " is " + metrics ); }
Metric value for 10001 is [MeasurementDataNumeric[value=[6.3932239872E10], MeasurementData [MeasurementDataPK: timestamp=[Tue May 08 20:10:15 EDT 2012], scheduleId=[10002]]]]
12.7.3. リソースのメトリックデータのエクスポート
- リソースタイプに基づいて、利用可能なメトリック定義を検索します。この例では、Linux プラットフォーム用です。
- リソースを検索します。
- メトリック情報の日付範囲を設定します。これは、スクリプトが実行される時間との対比で秒単位で設定されます。
- データを書き込むファイル情報を設定します。
- リソースのすべてのメトリクス定義を繰り返し処理し、指定された CSV ファイルにデータを出力します。
例12.25 Linux サーバーのすべてのメトリクス定義のエクスポート
// search for the available metrics definitions var rt = ResourceTypeManager.getResourceTypeByNameAndPlugin("Linux","Platforms") var mdc = MeasurementDefinitionCriteria(); mdc.addFilterResourceTypeId(rt.id); var mdefs = MeasurementDefinitionManager.findMeasurementDefinitionsByCriteria(mdc); // search for the resource criteria = new ResourceCriteria(); criteria.addFilterResourceTypeName('Linux') var resources = ResourceManager.findResourcesByCriteria(criteria); // give the date range for the metrics collection // this is in seconds var start = new Date() - 8* 3600 * 1000; var end = new Date() // setup up the CSV to dump the data to exporter.file = '/opt/myfile.csv' exporter.format = 'csv' // iterate through the metrics definitions for the resource // and export all the collected metrics for all definitions // within the given date range if( mdefs != null ) { if( mdefs.size() > 1 ) { for( i =0; i < mdefs.size(); ++i) { mdef = mdefs.get(i); var data = MeasurementDataManager.findDataForResource(resources.get(0).id,[mdef.id],start,end,1) exporter.write(data.get(0)); // write the data to the CSV file } } else if( mdefs.size() == 1 ) { mdef = mdefs.get(0); var data = MeasurementDataManager.findDataForResource(resources.get(0).id,[mdef.get(0).id],start,end,60) exporter.write(data.get(0)) } }
12.7.4. ベースラインの算出
rhqadmin@localhost:7080$ MeasurementBaselineManager.findBaselinesForResource(10001) one row MeasurementBaseline: computeTime: Tue May 08 21:28:05 EDT 2012 id: 10001 max: 6.4005419008E10 mean: 6.3933904981333336E10 min: 6.380064768E10 schedule: [MeasurementSchedule, id=10002] userEntered: true
12.8. アラート
12.8.1. スクリプトでのアラートの使用
Alert
メソッドはアラート定義を識別し、アラートをトリガーしたリソースを特定します。これにより、スクリプトに再利用可能なプロキシーリソース定義を作成できます。この定義は、そのアラートスクリプトを使用するリソースに適用できます。
var myResource = ProxyFactory.getResource(alert.alertDefinition.resource.id)
12.8.2. アラートの承認
- 発生するアラートを検索します。この場合、検索はリソースタイプ(Linux)に基づいています。
- 検索結果のデータを取得します。
- 返されるすべてのアラートを確認します。
例12.26 プラットフォームリソースのアラートの承認
// set the criteria and search for the alerts var criteria = new AlertCriteria() criteria.addFilterResourceTypeName('Linux') var alerts = AlertManager.findAlertsByCriteria(criteria) // go through the results and then acknowledge the alerts if( alerts != null ) { if( alerts.size() > 1 ) { for( i =0; i < alerts.size(); ++i) { alert = alerts.get(i); AlertManager.acknowledgeAlerts([alert.id]) } } else if( alerts.size() == 1 ) { alert = alerts.get(0); AlertManager.acknowledgeAlerts([alert.id]) } }
12.8.3. アラート定義の有効化または無効化
- 優先度に基づいて一致するアラート定義を検索します(この場合は低速)。
- 検索結果のデータを取得します。
- 取得した検索リストの ID に基づいて、返されるすべてのアラート定義を無効にします。
例12.27 優先度に基づいてアラートの無効化
// set the search criteria for the alert definitions with a reasonable filter var criteria = new AlertDefinitionCriteria() criteria.addFilterPriority(AlertPriority.LOW) //search for the alert definitions alertdefs = AlertDefinitionManager.findAlertDefinitionsByCriteria(criteria) //get the data from the results alertdef = alertdefs.get(0); println(" alert: " + alertdef.id ); //disable the matching alerts, based on ID AlertDefinitionManager.disableAlertDefinitions([alertdef.id]);
12.9. ユーザーおよびロール
12.9.1. ロールの作成
- ロールを作成し、適切なパーミッションを割り当てます。この場合、ロールはインベントリーおよびユーザーパーミッションを管理します。
- メンバーとして追加するグループを検索します。
- 新規ロールエントリーを検索します。
- ロールにグループを追加します。
例12.28 新規ロール
// create the role var role = Role('Role Name - ' + java.util.Date()); role.description = 'This role is an example'; role.addPermission(Permission.MANAGE_INVENTORY); role.addPermission(Permission.VIEW_USERS); RoleManager.createRole(role); //search for the group to add to the role groupcriteria = new ResourceGroupCriteria(); groupcriteria.addFilterGroupCategory.toString('MIXED'); var groups = ResourceGroupManager.findResourceGroupsByCriteria(groupcriteria); //search for the new role var c = new RoleCriteria(); c.addFilterName('Role Name'); var roles = RoleManager.findRolesByCriteria( c ); RoleManager.addResourceGroupsToRole(roles.get(0).id,[groups.get(0).id]);
12.9.2. ユーザーの作成
- 新規ユーザー(subject)エントリーを作成します。
- 新規ユーザーのプリンシパルを作成します。
- ロールの検索でユーザーを追加し、アレイを作成します。
- ロールにユーザーを追加します。
例12.29 ユーザーの作成とロールの追加
//create the new user entry var newSubject = new Subject(); newSubject.setEmailAddress( 'admin@example.com' ); newSubject.setFirstName('John'); newSubject.setLastName('Smith' ); newSubject.setFactive(true); newSubject.setFsystem(false); newSubject.setName('jsmith'); var s = SubjectManager.createSubject(newSubject); //create the login principal for the user SubjectManager.createPrincipal( s.name, 'password' ); //search for the role and create an array var c = new RoleCriteria(); c.addFilterName('Role Name'); var roles = RoleManager.findRolesByCriteria( c ); var role = roles.get(0); var rolesArray = new Array(1); rolesArray[0] = role.getId(); //add the new user to the roles in the array RoleManager.addRolesToSubject(s.getId(), rolesArray );
パート III. 拡張例と使用シナリオ
第13章 例: インベントリーを管理するためのスクリプト(すべてのリソースタイプ)
13.1. New Resources の自動インポート: autoimport.js
- を使用して新規リソースを識別します。
findUncommittedResources()
メソッド。 - 新規リソースの ID を取得します。
- その後、検出システムのインポート操作を呼び出してこれらのリソースをインポートします。
//Usage: autoImport.js //Description: Imports all auto-discovered inventory into JON // autoImport.js rhq.login('rhqadmin', 'rhqadmin'); println("Running autoImport_js"); var resources = findUncommittedResources(); var resourceIds = getIds(resources); DiscoveryBoss.importResources(resourceIds); rhq.logout();
importResources
.他の 2 つの機能 findUncommittedResources
および getIds
- スクリプトで定義する必要があります。
ResourceCriteria
検索するには、インベントリーのステータスに基づいて検索パラメーターを追加します。
// returns a java.util.List of Resource objects // that have not yet been committed into inventory function findUncommittedResources() { var criteria = ResourceCriteria(); criteria.addFilterInventoryStatus(InventoryStatus.NEW); return ResourceManager.findResourcesByCriteria(criteria); }
// returns an array of ids for a given list // of Resource objects. Note the resources argument // can actually be any Collection that contains // elements having an id property. function getIds(resources) { var ids = []; if (resources.size() > 0) { println("Found resources to import: "); for (i = 0; i < resources.size(); i++) { resource = resources.get(i); ids[i] = resource.id; println(" " + resource.name); } } else { println("No resources found awaiting import..."); } return ids; }
13.2. Simple Inventory Count: inventoryCount.js
*criteria
クラス。リソースの場合、これはです。 ResourceCriteria
.検索には、非常に具体的な条件を渡して、1 つのリソースまたはリソースの小さなサブセットのみを返すことができます。インベントリーのすべてのものを返すことも可能です。
ResourceCriteria()
)を、すべてのリソースが検索と一致するようにします。次に、結果のサイズを取り、単純なインベントリー数を生成します。
// inventory.js rhq.login('rhqadmin', 'rhqadmin'); var resources = ResourceManager.findResourcesByCriteria(ResourceCriteria()); println('There are ' + resources.size() + ' resources in inventory'); // end script
13.3. Uninventory a Resource after an Alert: uninventory.js
uninventoryResource
方法:
List<Integer> uninventoryResources(Subject subject, int[] resourceIds);
第14章 例: 特定のタイプのリソースを管理するスクリプト
- 特定のタイプの新しい未コミットリソースを検索します。
- リソース ID を取得します。
- これらの新規リソースをインポートします。
- 新たにインポートしたリソースで作業を行います。
ResourceCriteria
検索するには、インベントリーステータスとリソースタイプ(この例では JBoss EAP 6 ドメインデプロイメント)を基にして検索パラメーターを追加します。The new findUncommittedJbasApps()
関数はその検索を実行します。
function findUncommittedJbasApps() { var criteria = ResourceCriteria(); criteria.addFilterInventoryStatus(InventoryStatus.NEW); criteria.addFilterResourceTypeName('DomainDeployment'); return ResourceManager.findResourcesByCriteria(criteria); }
autoimport.js
例では、 getIds
function はリソース ID の配列を取得します。
function getIds(resources) { var ids = []; if (resources.size() > 0) { println("Found resources to import: "); for (i = 0; i < resources.size(); i++) { resource = resources.get(i); ids[i] = resource.id; println(" " + resource.name); } } else { println("No resources found awaiting import..."); } return ids; }
DiscoveryBoss
検出されたリソースをインポートする方法。
autoimport.js
、JBoss EAP 6 のドメインデプロイメントを検索するための新しい関数にわずかな調整を行います。
rhq.login('rhqadmin', 'rhqadmin'); println("Running autoImport_js"); var resources = findUncommittedJbasApps(); var resourceIds = getIds(resources); DiscoveryBoss.importResources(resourceIds);
var config = new Configuration(); config.put(new PropertySimple("server-group", "Staging-Server-Group") ); OperationManager.scheduleResourceOperation( resources.get(0).id, "promote", 0, // 0 means that the delay was skipped 1, 0, // this skips the repeat count 10000000, config, "promote new app to server group" );
ResourceGroupManager.addResourcesToGroup(15001, [resourceIds]);
rhq.logout();
第15章 例: リソースデプロイメントのスクリプト作成(JBoss EAP 5)
- 指定された JBoss ON グループの JBoss EAP インスタンスをすべて検索します。
- 各 EAP インスタンスをシャットダウンします。
- 既存のデプロイされたアプリケーションのバイナリーを更新するか、または新規デプロイメントを作成します。
- EAP インスタンスを再起動します。
- ループを終了します。
15.1. カスタム関数の宣言
function usage() { println("Usage: deployToGroup <fileName> <groupName>"); throw "Illegal arguments"; } function PackageParser(fullPathName) { var file = new java.io.File(fullPathName); var fileName = file.getName(); var packageType = fileName.substring(fileName.lastIndexOf('.')+1); var tmp = fileName.substring(0, fileName.lastIndexOf('.')); var realName = tmp.substring(0, tmp.lastIndexOf('-')); var version = tmp.substring(tmp.lastIndexOf('-') + 1); var packageName = realName + "." + packageType; this.packageType = packageType.toLowerCase(); this.packageName = packageName; this.version = version; this.realName = realName; }
15.2. JBoss ON グループおよびインベントリーの確認
if( args.length < 2 ) usage(); var fileName = args[0]; var groupName = args[1];
// check that the file exists and that we can read it var file = new java.io.File(fileName); if( !file.exists() ) { println(fileName + " does not exist!"); usage(); } if( !file.canRead() ) { println(fileName + " can't be read!"); usage(); }
// find resource group var rgc = new ResourceGroupCriteria(); rgc.addFilterName(groupName); rgc.fetchExplicitResources(true); var groupList = ResourceGroupManager.findResourceGroupsByCriteria(rgc);
rgc.fetchExplicitResources(true);
if( groupList == null || groupList.size() != 1 ) { println("Can't find a resource group named " + groupName); usage(); } var group = groupList.get(0); println(" Found group: " + group.name ); println(" Group ID : " + group.id ); println(" Description: " + group.description);
if( group.explicitResources == null || group.explicitResources.size() == 0 ) { println(" Group does not contain explicit resources --> exiting!" ); usage(); } var resourcesArray = group.explicitResources.toArray();
for( i in resourcesArray ) { var res = resourcesArray[i]; var resType = res.resourceType.name; println(" Found resource " + res.name + " of type " + resType + " and ID " + res.id); if( resType != "JBossAS5 Server") { println(" ---> Resource not of required type. Exiting!"); usage(); } // get server resource to start/stop it and to redeploy application var server = ProxyFactory.getResource(res.id); }
var children = server.children; for( c in children ) { var child = children[c]; if( child.name == packageName ) { } }
println(" download old app to /tmp"); child.retrieveBackingContent("/tmp/" + packageName + "_" + server.name + "_old");
/tmp/
ディレクトリーにあります。
println(" stopping " + server.name + "...."); try { server.shutDown(); } catch( ex ) { println(" --> Caught " + ex ); } println(" uploading new application code"); child.updateBackingContent(fileName); println(" restarting " + server.name + "....." ); try { server.start(); } catch( ex ) { println(" --> Caught " + ex ); }
15.3. 新規リソースのデプロイ
- アプリケーションのタイプ(WAR、EAR など)
- アプリケーションをデプロイする必要があるコンテナーのタイプ(Tomcat、JBoss AS 5 など)
rhq-plugin.xml
記述子のリソースエージェントプラグインで定義されます。各デフォルトリソースタイプの属性、設定パラメーター、操作、およびメトリクスは、『リソース監視および操作リファレンス』 に一覧表示されます。
var appType = ResourceTypeManager.getResourceTypeByNameAndPlugin( appTypeName, "JBossAS5" ); if( appType == null ) { println(" Could not find application type. Exit."); usage(); }
var realPackageType = ContentManager.findPackageTypes( appTypeName, "JBossAS5" ); if( realPackageType == null ) { println(" Could not find JBoss ON's packageType. Exit."); usage(); }
rhq-plugin.xml
記述子のリソースタイプのエージェントプラグインで定義されます。新しいリソースを作成できるようにするには、これらのパラメーターを入力する必要があります。
// create deployConfig var deployConfig = new Configuration(); deployConfig.put( new PropertySimple("deployExploded", "false")); deployConfig.put( new PropertySimple("deployFarmed", "false"));
var deployConfigDef = ConfigurationManager.getPackageTypeConfigurationDefinition(realPackageType.getId());
var inputStream = new java.io.FileInputStream(file); var fileLength = file.length(); var fileBytes = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, fileLength); for (numRead=0, offset=0; ((numRead >= 0) && (offset < fileBytes.length)); offset += numRead ) { numRead = inputStream.read(fileBytes, offset, fileBytes.length - offset); }
rhq-plugin.xml
記述子のリソースタイプのエージェントプラグインで定義されます。例:
ResourceFactoryManager.createPackageBackedResource( server.id, appType.id, packageName, null, // pluginConfiguration packageName, packageVersion, null, // architectureId deployConfig, fileBytes, null // timeout );
第16章 例: バンドルを使用したアプリケーションのデプロイ(JBoss EAP 4、5、および 6)
16.1. 新規アプリケーションの作成
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules
ディレクトリーの jbossas.js
スクリプトは、バンドルバージョンと定義を迅速に作成し、指定の JBoss サーバーにデプロイするカスタム関数のセットを定義します。
jbossas.js
スクリプトでは、関数をサポートするために util.js
および bundles.js
スクリプトが必要です。これらはすべて cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules
ディレクトリーから自動的に読み込まれます。
deploy-to-and-restart-JBAS.js
スクリプトによって、という関数が定義されます。 createAppAndRestartJBAS
これにより、バンドルが作成され、デプロイされます。関数は 7 つのパラメーターを取ります。
- バンドルアーカイブファイルへのパス。
- バンドル設定に必要なトークンまたは変数が含まれる設定オブジェクト。この例では、プロパティーは渡されず、値は null になります。設定の詳細については、
bundles.js
ファイルのコメントに表示され、一般的な設定情報が表示され 「シンプル設定プロパティーの変更」 ます。 - バンドルをデプロイする互換性のあるグループの名前。
- バンドル宛先の名前。
- バンドル宛先の説明。
- バンドルをデプロイするベースディレクトリー、およびオプションでバンドルをデプロイするサブディレクトリー。
rhqadmin@localhost:7080$ var bundleZipFile = /export/bundles/myBundle.zip rhqadmin@localhost:7080$ var deploymentConfiguration = null rhqadmin@localhost:7080$ var groupName = "JBoss EAP 6 Group" rhqadmin@localhost:7080$ var destinationName = "My App - JBoss EAP 6 Destination" rhqadmin@localhost:7080$ var destinationDescription = "For my application" rhqadmin@localhost:7080$ var baseDirName = "Deploy Directory" rhqadmin@localhost:7080$ var deployDir = "helloWorldApp" rhqadmin@localhost:7080$ createAppAndRestartJBAS(bundleZipFile, deploymentConfiguration, groupName, destinationName, destinationDescription, baseDirName, deployDir)
deploy-to-and-restart-JBAS.js
スクリプトには、サポートを提供する多くのプライベート関数が定義されています。 createAppAndRestartJBAS
関数。これらは deploy-to-and-restart-JBAS.js
ファイルのコメントで説明されています。
createAppAndRestartJBAS
関数には、リソースグループの検索、バンドルの作成、およびグループの JBoss サーバーを再起動する 3 つの部分があります。
function createAppAndRestartJBAS(bundleZipFile, deploymentConfiguration, groupName, destinationName, destinationDescription, baseDirName, deployDir) { var gcrit = new ResourceGroupCriteria; gcrit.addFilterName(groupName); gcrit.fetchResourceType(true); var groups = ResourceGroupManager.findResourceGroupsByCriteria(gcrit); if (groups.empty) { throw "Could not find a resource group called " + groupName; } else if (groups.size() > 1) { throw "There are more than 1 groups called " + groupName; } var group = groups.get(0); var targetResourceType = group.resourceType;
var deployFn = function(restartFn) {
var bundleVersion = createBundleVersion(bundleZipFile);
var destination = BundleManager.createBundleDestination(bundleVersion.bundle.id, destinationName, destinationDescription, baseDirName, deployDir, group.id);
var deployment = deployBundle(destination,bundleVersion, deploymentConfiguration, "Web application", false); if (deployment.status != BundleDeploymentStatus.SUCCESS) { throw "Deployment wasn't successful: " + deployment; }
deploy-to-and-restart-JBAS.js
)を繰り返し処理し、各リソースを再起動します。その後、デプロイメント情報を出力します。
restartFn(group); return deployment; };
deploy-to-and-restart-JBAS.js
スクリプトは、サポートされるバージョンの JBoss EAP 4、5、または 6 にコンテンツをデプロイできます。バンドルシステムは、グループのリソースタイプに基づいて、リソースプラグインで定義された設定を使用します。再起動操作では、JBoss EAP の各バージョンごとに異なる再起動機能を定義します。
if (targetResourceType.plugin == "JBossAS" && targetResourceType.name == "JBossAS Server") { return deployFn(_restartAS4); } else if (targetResourceType.plugin == "JBossAS5" && targetResourceType.name == "JBossAS Server") { return deployFn(_restartAS5); } else if (targetResourceType.plugin == "JBossAS7" && (targetResourceType.name == "JBossAS7 Standalone Server" || targetResourceType.name == "JBossAS-Managed")) { return deployFn(_restartAS7); } throw "The resource group the destination targets doesn't seem to be a JBoss AS server group."; }
16.2. アプリケーションの更新
rhqadmin@localhost:7080$ var bundleZipFile = /export/bundles/myBundle.zip rhqadmin@localhost:7080$ var deploymentConfiguration = null rhqadmin@localhost:7080$ var jbasDestination = "My App - JBoss EAP 6 Destination" rhqadmin@localhost:7080$ updateAppAndRestartJBAS(bundleZipFile, jbasDestination, deploymentConfiguration)
bundles.js
ファイルのコメントに表示され、一般的な設定情報が表示され 「シンプル設定プロパティーの変更」 ます。
function updateAppAndRestartJBAS(bundleZipFile, jbasDestination, deploymentConfiguration) { // first figure out the jbas version we are deploying to var destinationId = jbasDestination; if (typeof(jbasDestination) == 'object') { destinationId = jbasDestination.id; } var destCrit = new BundleDestinationCriteria destCrit.fetchGroup(true)
get(0)
call)、宛先設定にはリソースタイプが含まれます。
var destinations = BundleManager.findBundleDestinationsByCriteria(destCrit); if (destinations.empty) { throw "No destinations corresponding to " + jbasDestination + " found on the server."; } var destination = destinations.get(0); var targetResourceType = destination.group.resourceType; if (targetResourceType == null) { throw "This function expects a compatible group of JBoss AS (4,5,6 or 7) resources but the provided destination is connected with " + destination.group; }
createBundleVersion
メソッド。
var deployFn = function(restartFn) { var bundleVersion = createBundleVersion(bundleZipFile);
var deployment = deployBundle(destination,bundleVersion, deploymentConfiguration, "Web application", false); if (deployment.status != BundleDeploymentStatus.SUCCESS) { throw "Deployment wasn't successful: " + deployment; } restartFn(destination.group); return deployment; };
if (targetResourceType.plugin == "JBossAS" && targetResourceType.name == "JBossAS Server") { return deployFn(_restartAS4); } else if (targetResourceType.plugin == "JBossAS5" && targetResourceType.name == "JBossAS Server") { return deployFn(_restartAS5); } else if (targetResourceType.plugin == "JBossAS7" && (targetResourceType.name == "JBossAS7 Standalone Server" || targetResourceType.name == "JBossAS-Managed")) { return deployFn(_restartAS7); } throw "The resource group the destination targets doesn't seem to be a JBoss AS server group."; }
第17章 例: アラート後のリモート JNDI ルックアップ(JBoss EAP 5)
-f
パラメーターの使用やサーバー側のアラートスクリプトなど、サーバー上で直接実行されることが意図されています。インタラクティブ CLI を使用して実行することはできません。
assertNotNull
JMX オブジェクトを取得するメソッド。次に、スクリプトは JMX 情報を出力します。
//This test requires a remote JBoss AS 5 server running with JNDI directory remotely accessible using JNP (without authz) //This script assumes that there is a bound object called "jmx" in the directory (which it should be) var jbossHost = 'localhost'; var jbossJnpPort = 1299; var env = new java.util.Hashtable(); env.put('java.naming.factory.initial', 'org.jboss.naming.NamingContextFactory'); env.put('java.naming.provider.url', "jnp://" + jbossHost + ":" + jbossJnpPort); var ctx = new javax.naming.InitialContext(env); var jmx = ctx.lookup('jmx'); assertNotNull(jmx); pretty.print(jmx);
第18章 例: グループ化されたサーバーの管理(JBoss EAP 5)
18.1. スクリプトの計画
-f
パラメーターを使用して定義された JavaScript を実行できます。ここでは、JBoss EAP サーバーのグループで特定のタスクを実行する小さな管理スクリプトを多数作成するという概念です。この例では、以下の 7 つのスクリプトがあります。
- グループの作成
- グループへの EAP インスタンスの追加
- EAP ステータスの確認
- EAP インスタンスの起動
- 操作のスケジュール
- グループへの新規コンテンツのデプロイメント
- メトリクスの確認
18.2. Wrapper スクリプトおよび .conf ファイルの作成
- ラッパースクリプトは通常のユーザーとして実行します。つまり、JavaScript ファイルは通常のユーザーがアクセスできる必要があります。
- スクリプトは、ラッパースクリプトと同じ
scripts/
ディレクトリーにあるディレクトリーに置かれます。 - 別の設定ファイルは、JBoss ON サーバーの接続情報を定義します。
- 各 JavaScript ファイルは、ラッパーで定義される個別の CLI コマンド呼び出しによって呼び出されます。
- JBoss ON CLI コマンドに必要なオプションや情報は JavaScript ファイルに定義され、ラッパースクリプトをオプションとして渡す可能性があります。
#!/bin/bash # # groupcontrol # ------------ # This is a simple wrapper script for all the java script scripts in this folder. # Start this script with some parameters to automate group handling from within the # command line. # # With groupcontrol you can do the following: # create : Create a new group # addMember: Add a new EAP instance to the specified group # status : Print the status of all resources of a group # start : start all EAP instances specified by group name # deploy : Deploys an application to all AS instances specified by group name # avail : Runs an availability operation on all discovered agent instances # metrics : Gets the specified metric value for all AS instances specified by group name # # ## Should not be run as root. if [ "$EUID" = "0" ]; then echo " Please use a normal user account and not the root account" exit 1 fi ## Figure out script home MY_HOME=$(cd `dirname $0` && pwd) SCRIPT_HOME=$MY_HOME/scripts ## Source some defaults . $MY_HOME/groupcontrol.conf ## Check to see if we have a valid CLI home if [ ! -d ${JON_CLI_HOME} ]; then echo "JON_CLI_HOME not correctly set. Please do so in the file" echo $MY_HOME/groupcontrol.conf exit 1 fi RHQ_OPTS="-s $JON_HOST -u $JON_USER -t $JON_PORT" # If JBoss ON_PWD is given then use it as argument. Else let the user enter the password if [ "x$JON_PWD" == "x" ]; then RHQ_OPTS="$RHQ_OPTS -P" else RHQ_OPTS="$RHQ_OPTS -p $JON_PWD" fi #echo "Calling groupcontrol with $RHQ_OPTS" usage() { echo " Usage $0:" echo " Use this tool to control most group related tasks with a simple script." echo " ------------------------------------------------------------------------- " }
doDeploy() { $JON_CLI_HOME/bin/rhq-cli.sh $RHQ_OPTS -f $SCRIPT_HOME/deploy.js $2 $3 } doCreate() { $JON_CLI_HOME/bin/rhq-cli.sh $RHQ_OPTS -f $SCRIPT_HOME/group.js $2 } doAddMember() { $JON_CLI_HOME/bin/rhq-cli.sh $RHQ_OPTS -f $SCRIPT_HOME/addMember.js $2 $3 $4 } doStatus() { $JON_CLI_HOME/bin/rhq-cli.sh $RHQ_OPTS -f $SCRIPT_HOME/status.js $2 } doRestart() { $JON_CLI_HOME/bin/rhq-cli.sh $RHQ_OPTS -f $SCRIPT_HOME/restart.js $2 } doAvail() { $JON_CLI_HOME/bin/rhq-cli.sh $RHQ_OPTS -f $SCRIPT_HOME/avail.js } doMetrics() { $JON_CLI_HOME/bin/rhq-cli.sh $RHQ_OPTS -f $SCRIPT_HOME/metrics.js $2 $3 } case "$1" in 'deploy') doDeploy $* ;; 'create') doCreate $* ;; 'addMember') doAddMember $* ;; 'status') doStatus $* ;; 'restart') doRestart $* ;; 'avail') doAvail $* ;; 'metrics') doMetrics $* ;; *) usage $* ;; esac
groupcontrol.conf
、JBoss ON CLI で必要な JBoss ON サーバーへの接続情報を定義します。
## ## This file contains some defaults for the groupcontrol script ## JON_CLI_HOME=cliRoot/rhq-remoting-cli-4.9.0.JON320GA JON_HOST=localhost JON_PORT=7080 # The user you want to connect with JON_USER=rhqadmin # if you omit the password here, you'll be prompted for it. JON_PWD=rhqadmin
18.3. CLI スクリプトの引数とその他のパラメーターの定義
args
メソッド。最低でも、各スクリプトはタスクを実行するグループの名前を受け入れます。
使用方法
関数。各コマンドで想定されるオプションを出力できるようにします。例:
function usage() { println("Usage: deploy groupName"); throw "Illegal arguments"; } if( args.length < 1 ) usage(); var groupName = args[0];
doDeploy() {
$JON_CLI_HOME/bin/rhq-cli.sh $RHQ_OPTS -f $SCRIPT_HOME/deploy.js $2 $3
}
groupcriteria = new ResourceGroupCriteria(); groupcriteria.addFilterName(groupName); var groups = ResourceGroupManager.findResourceGroupsByCriteria(groupcriteria); if( groups != null ) { if( groups.size() > 1 ) { println("Found more than one group."); } else if( groups.size() == 1 ) { group = groups.get(0); } }
18.4. グループの作成: group.js
function usage() { println("Usage: deploy groupName"); throw "Illegal arguments"; } if( args.length < 1 ) usage(); var groupName = args[0];
var rg = new ResourceGroup(resType); rg.setRecursive(false); rg.setDescription("Created via groupcontrol scripts on " + new java.util.Date().toString()); rg.setName(groupName); rg = ResourceGroupManager.createResourceGroup(rg); var resType = ResourceTypeManager.getResourceTypeByNameAndPlugin("JBossAS 5 Server","JBossAS5");
18.5. グループへのリソースの追加: addMember.js
- リソースを追加するグループの GroupName
- 追加するリソース名のresourceName。これは検索条件の 1 つです。
- 追加するリソースの タイプの resourceTypeName。これは検索条件の 1 つです。
function usage() { println("Usage: addMember groupName resourceName resourceTypeName"); throw "Illegal arguments"; } if( args.length < 3 ) usage(); var groupName = args[0]; var resourceName = args[1]; var resourceTypeName = args[2]; groupcriteria = new ResourceGroupCriteria(); groupcriteria.addFilterName(groupName); var groups = ResourceGroupManager.findResourceGroupsByCriteria(groupcriteria); if( groups != null ) { if( groups.size() > 1 ) { println("Found more than one group."); } else if( groups.size() == 1 ) { group = groups.get(0); } }
criteria = new ResourceCriteria(); criteria.addFilterName(resourceName); criteria.addFilterResourceTypeName(resourceTypeName); var resources = ResourceManager.findResourcesByCriteria(criteria); if( resources != null ) { if( resources.size() > 1 ) { println("Found more than one JBossAS Server instance. Try to specialize."); for( i =0; i < resources.size(); ++i) { var resource = resources.get(i); println(" found " + resource.name ); } } else if( resources.size() == 1 ) { resource = resources.get(0); println("Found one JBossAS Server instance. Trying to add it."); println(" " + resource.name ); ResourceGroupManager.addResourcesToGroup(group.id, [resource.id]); println(" Added to " + group.name + "!"); } else { println("Did not find any JBossAS Server instance matching your pattern. Try again."); } }
[jsmith@server cli]$ ./wrapper.sh addMember myGroup "JBossAS App 1" "JBossAS Server" Remote server version is: 3.0.1.GA (b2cb23b:859b914) Login successful Found one JBossAS Server instance. Trying to add it. AS server.example.com JBossAS App 1 Added to myGroup!
18.6. Inventory and Status Information: status.js
function usage() { println("Usage: status groupName"); throw "Illegal arguments"; } if( args.length < 1 ) usage(); var groupName = args[0]; groupcriteria = new ResourceGroupCriteria(); groupcriteria.addFilterName(groupName); var groups = ResourceGroupManager.findResourceGroupsByCriteria(groupcriteria); if( groups != null ) { if( groups.size() > 1 ) { println("Found more than one group."); } else if( groups.size() == 1 ) { group = groups.get(0); } }
criteria = new ResourceCriteria(); var groupArray= new Array(); groupArray[0]=group.id; criteria.addFilterExplicitGroupIds(groupArray); var resources = ResourceManager.findResourcesByCriteria(criteria); for( i =0; i < resources.size(); ++i) { var resource = resources.get(i); println(" found " + resource.name ); }
var server = ProxyFactory.getResource(resource.id); var avail = AvailabilityManager.getCurrentAvailabilityForResource(server.id); println(" " + server.name ); println(" - Availability: " + avail.availabilityType.getName()); println(" - Started : " + avail.startTime.toGMTString()); println(""); var avail = AvailabilityManager.getCurrentAvailabilityForResource(server.id); if( avail.availabilityType.toString() == "DOWN" ) { println(" Server is DOWN. Please first start the server and run this script again!"); println(""); }
[jsmith@server cli]$ ./wrapper.sh status myGroup Remote server version is: 3.0.1.GA (b2cb23b:859b914) Login successful found AS server.example.com JBossAS App 1 AS server.example.com JBossAS App 1 - Availability: UP - Started : 11 Feb 2012 04:07:37 GMT
18.7. サーバーの起動、停止、再起動: restart.js
- shutdown() AS4 サーバーおよび AS shutDown() 5 サーバーの場合
- start()
criteria = new ResourceCriteria(); var groupArray= new Array(); groupArray[0]=group.id; criteria.addFilterExplicitGroupIds(groupArray); var resources = ResourceManager.findResourcesByCriteria(criteria); for( i =0; i < resources.size(); ++i) { var resource = resources.get(i); var resType = resource.resourceType.name; println(" found " + resource.name ); if( resType != "JBossAS Server") { println(" ---> Resource not of required type. Exiting!"); usage(); } var server = ProxyFactory.getResource(resource.id); println(" stopping " + server.name + "...."); try { server.shutdown() } catch( ex ) { println(" --> Caught " + ex ); } println(" restarting " + server.name + "....." ); try { server.start(); } catch( ex ) { println(" --> Caught " + ex ); } }
18.8. グループメンバーへのアプリケーションのデプロイ: deploy.js
// we need check to see if the given server is up and running var avail = AvailabilityManager.getCurrentAvailabilityForResource(server.id); // unfortunately, we can only proceed with deployment if the server is running. Why? if( avail.availabilityType.toString() == "DOWN" ) { println(" Server is DOWN. Please first start the server and run this script again!"); println(""); continue; }
18.9. 可用性操作のスケジュール: avail.js
println("Scanning all RHQ Agent instances"); var rc = ResourceCriteria(); var resType = ResourceTypeManager.getResourceTypeByNameAndPlugin("RHQ Agent", "RHQAgent"); rc.addFilterPluginName("RHQAgent"); rc.addFilterResourceTypeName("RHQ Agent"); rc.addFilterParentResourceTypeId("10001"); var resources = ResourceManager.findResourcesByCriteria(rc).toArray(); var idx=0; for( i in resources ) { if( resources[i].resourceType.id == resType.id ) { resources[idx] = resources[i]; idx = idx + 1; } }
for( a in resources ) { var agent = resources[a] var resType = agent.resourceType.name; println(" Found resource " + agent.name + " of type " + resType + " and ID " + agent.id); println(" executing availability scan on agent" ); println(" -> " + agent.name + " / " + agent.id); var config = new Configuration(); config.put(new PropertySimple("changesOnly", "true") ); var ros = OperationManager.scheduleResourceOperation( agent.id, "executeAvailabilityScan", 0, 1, 0, 10000000, config, "test from cli" ); println(ros); println(""); }
18.10. 管理対象サーバーのメトリックデータの収集: metrics.js
findLiveData
メソッド。リソースの現在のアクティブな値を返します。
function usage() { println("Usage: metrics groupName metricName"); throw "Illegal arguments"; } if( args.length < 2 ) usage(); var groupName = args[0]; var metricName = args[1]; groupcriteria = new ResourceGroupCriteria(); groupcriteria.addFilterName(groupName); var groups = ResourceGroupManager.findResourceGroupsByCriteria(groupcriteria); if( groups != null ) { if( groups.size() > 1 ) { println("Found more than one group."); } else if( groups.size() == 1 ) { group = groups.get(0); } } criteria = new ResourceCriteria(); var groupArray= new Array(); groupArray[0]=group.id; criteria.addFilterExplicitGroupIds(groupArray);
var rt = ResourceTypeManager.getResourceTypeByNameAndPlugin("JBossAS 5 Server","JBossAS5"); var mdc = MeasurementDefinitionCriteria(); mdc.addFilterDisplayName(metricName); mdc.addFilterResourceTypeId(rt.id); var mdefs = MeasurementDefinitionManager.findMeasurementDefinitionsByCriteria(mdc); var resources = ResourceManager.findResourcesByCriteria(criteria); var metrics = MeasurementDataManager.findLiveData(resources.get(0).id, [mdefs.get(0).id]); if( metrics !=null ) { println(" Metric value for " + resources.get(0).id + " is " + metrics ); }
[jsmith@server cli]$ ./wrapper.sh metrics myGroup "Active Thread Count" Remote server version is: 3.0.1.GA (b2cb23b:859b914) Login successful Metric value for 10003 is [MeasurementDataNumeric[value=[64.0], MeasurementData [MeasurementDataPK: timestamp=[Wed Feb 15 22:14:38 EST 2012], scheduleId=[1]]]]
第19章 例: スタンドアロンサーバーのクラスターへのデプロイ(JBoss EAP 6)
/samples
ディレクトリーにサンプルスクリプトがあり、JBoss EAP 6 スタンドアロンサーバーを既存のクラスターに追加できるようにする一連の機能を定義します。
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules/jbossas.js
ファイルは、クラスターサーバー、デプロイされたコンテンツ、および関連する設定の特定を簡素化する便利な機能を定義します。
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules/jbossas.js
ファイル内で適切に文書化されるため、この例では範囲外です。この主な目的は、2 つのクラスター管理タスクを実行する 2 つのパブリック機能を確認することです。
addToCluster
copyDeployments
19.1. スタンドアロン EAP 6 サーバーをクラスターに追加
- クラスター内で使用する JBoss インスタンスの特定名( node-name)
- マルチキャストポート、UDP ポート、マルチキャストアドレスを含むマルチキャスト設定
- mod_cluster によって使用される socket-binding グループ情報
addToCluster
関数を使用してスタンドアロンサーバーをクラスターに追加します。既存のクラスターメンバーの設定プロパティーを使用し、それらをスタンドアロンサーバーにコピーします。
[root@server bin]# ./rhq-cli.sh -u rhqadmin -p rhqadmin rhqadmin@localhost:7080$ var newAs7Resource = ProxyFactory.getResource(10381) rhqadmin@localhost:7080$ var existingClusterMemberResource = ProxyFactory.getResource(10577) rhqadmin@localhost:7080$ var newNodeName = jbas7-standalone1 rhqadmin@localhost:7080$ addToCluster(newAs7Resource, newNodeName, existingClusterMemberResource, true)
addToCluster
function は、2 つのサーバー間のキャッシュ設定が、個別のサブシステムのコンクリメントキャッシュとキャッシュコンテナーの両方に互換性があることを前提とします。
- これは、クラスターサーバーのプラグイン接続プロパティーを確認し、これをスタンドアロンサーバーのプラグイン接続プロパティーと比較します。必要な場合は、クラスターサーバーからプラグイン設定をコピーし、スタンドアロンサーバーを再起動して、新しい設定を読み込むようにします。
- スタンドアロンサーバーの指定されたノード名を確認します。必要に応じて、デフォルトのノード名を関数で渡します。
- 次に、クラスターおよびスタンドアロンサーバーの socket-binding 設定を比較します。必要な場合は、jgroups、messaging、および mod_cluster バインディングの socket-binding 設定をクラスターサーバーからコピーし、スタンドアロンサーバーを再起動します。
- 設定されている場合、スクリプトはデプロイメントをクラスターサーバーからスタンドアロンサーバーにコピーし、スタンドアロンサーバーを再起動します。
_getClusterSignificantConfig
)をクリックします。
function addToCluster(newAs7Resource, newNodeName, existingClusterMemberResource, copyDeployments) { println("Reading config of the existing cluster member"); var clusterConfig = _getClusterSignificantConfig(existingClusterMemberResource); println("Reading config of the new member"); var memberConfig = _getClusterSignificantConfig(newAs7Resource); var memberResourceConfiguration = newAs7Resource.resourceConfiguration;
if (memberConfig['config'] != clusterConfig['config']) { println("The configurations of the servers differ.\n" + "The new cluster member's configuration will be changed to match the configuration of the existing member."); //switch to the same configuration var pluginConfig = newAs7Resource.pluginConfiguration; pluginConfig.getSimple('config').setValue(clusterConfig['config']); newAs7Resource.updatePluginConfiguration(pluginConfig); //we need to restart straight away so that we see the changes to the //rest of the configuration caused by the change of current config. println("Restarting the new cluster member to switch it to the new configuration."); newAs7Resource.restart(); //refresh the resource newAs7Resource = ProxyFactory.getResource(newAs7Resource.id); //refresh the cluster specific config after the restart with the new //config memberConfig = _getClusterSignificantConfig(newAs7Resource); memberResourceConfiguration = newAs7Resource.resourceConfiguration; }
//now check what's the node name we see if (memberConfig['node-name'] != newNodeName) { println("Updating the node name of the new cluster member from '" + memberConfig['node-name'] + "' to '" + newNodeName + "'"); _updateNodeName(memberResourceConfiguration, newNodeName); newAs7Resource.updateResourceConfiguration(memberResourceConfiguration); }
//now apply the socket binding changes for jgroups and other cluster //significant subsystems //first find the socket binding group config in the new member for(i in newAs7Resource.children) { var child = newAs7Resource.children[i]; if (child.resourceType.name == 'SocketBindingGroup' && child.resourceType.plugin == 'jboss-as-7') { println("Updating socket bindings of jgroups, messaging and modcluster subsystems"); var portOffset = javascriptString(child.resourceConfiguration.getSimpleValue('port-offset', '0')); var clusterMemberPortOffset = clusterConfig['port-offset']; var newConfig = child.resourceConfiguration.deepCopy(false); _updateSocketBindings(newConfig, portOffset, clusterMemberPortOffset, clusterConfig['jgroups']); _updateSocketBindings(newConfig, portOffset, clusterMemberPortOffset, clusterConfig['messaging']); _updateSocketBindings(newConfig, portOffset, clusterMemberPortOffset, clusterConfig['modcluster']); child.updateResourceConfiguration(newConfig); } } println("Restarting the new member for the new socket bindings to take effect."); newAs7Resource.restart();
if (copyDeployments) { println("Copying the deployments to the new cluster member..."); copyDeployments(existingClusterMemberResource, newAs7Resource); println("Restarting the new cluster member."); newAs7Resource.restart(); } }
19.2. スタンドアロンサーバー間のデプロイ済みアプリケーションのコピー
addToCluster
この関数は、スタンドアロンサーバーをクラスターに参加させる際のオプションとして機能します。The copyDeployments
関数は、任意の 2 つのスタンドアロンインスタンス間でデプロイメントをコピーすることができます。
[root@server bin]# ./rhq-cli.sh -u rhqadmin -p rhqadmin rhqadmin@localhost:7080$ var source = ProxyFactory.getResource(10381) rhqadmin@localhost:7080$ var target = ProxyFactory.getResource(10577) rhqadmin@localhost:7080$ copyDeployments(source, target)
function copyDeployments(sourceAS7, targetAS7) { if (typeof sourceAS7 == 'object') { sourceAS7 = sourceAS7.id; } if (typeof targetAS7 == 'object') { targetAS7 = targetAS7.id; }
copyDeployments
function は、デプロイメントリソースタイプのサーバーの子をすべて検索して、各デプロイメントを取得します。
var deploymentResourceType = ResourceTypeManager.getResourceTypeByNameAndPlugin('Deployment', 'jboss-as-7'); var deploymentsCrit = new ResourceCriteria; deploymentsCrit.addFilterParentResourceId(sourceAS7); deploymentsCrit.addFilterResourceTypeId(deploymentResourceType.id); var unlimitedPageControl = PageControl.unlimitedInstance; var sourceDeployments = ResourceManager.findResourcesByCriteria(deploymentsCrit); var iterator = sourceDeployments.iterator(); while (iterator.hasNext()) { var deploymentResource = iterator.next(); //get a resource proxy for easy access to configurations, etc. deploymentResource = ProxyFactory.getResource(deploymentResource.id); println("Copying deployment " + deploymentResource.name);
var installedPackage = ContentManager.getBackingPackageForResource(deploymentResource.id); var content = ContentManager.getPackageBytes(deploymentResource.id, installedPackage.id); var runtimeName = deploymentResource.resourceConfiguration.getSimpleValue('runtime-name', deploymentResource.name); var deploymentConfiguration = new Configuration; deploymentConfiguration.put(new PropertySimple('runtimeName', runtimeName)); //so now we have both metadata and the data of the deployment, let's //push a copy of it to the target server var history = ResourceFactoryManager.createPackageBackedResource(targetAS7, deploymentResourceType.id, deploymentResource.name, deploymentResource.pluginConfiguration, installedPackage.packageVersion.generalPackage.name, installedPackage.packageVersion.version, installedPackage.packageVersion.architecture.id, deploymentConfiguration, content, null); while (history.status.name() == 'IN_PROGRESS') { java.lang.Thread.sleep(1000); //the API for checking the create histories is kinda weird.. var histories = ResourceFactoryManager.findCreateChildResourceHistory(targetAS7, null, null, unlimitedPageControl); var hit = histories.iterator(); var found = false; while(hit.hasNext()) { var h = hit.next(); if (h.id == history.id) { history = h; found = true; break; } } if (!found) { throw "The history object for the deployment seems to have disappeared, this is very strange."; } } println("Deployment finished with status: " + history.status.toString() + (history.status.name() == 'SUCCESS' ? "." : (", error message: " + history.errorMessage + "."))); } }
第20章 例: バンドルでのアプリケーションのデプロイ(一般的な)
20.1. バンドルバージョンおよび宛先の設定
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules/
ディレクトリーの bundles.js
スクリプトは、バンドルバージョンと定義を迅速に作成するカスタム関数のセットを定義します。(この bundles.js
スクリプトには util.js
スクリプトが必要です。)
rhqadmin@localhost:7080$ var path = '/export/files/myApp.zip' rhqadmin@localhost:7080$ createBundleVersion(path)
createBundleVersion
bundles.js
ファイルの関数は、ファイルをバイト配列としてアップロードします。
function createBundleVersion(pathToBundleZipFile) { var bytes = getFileBytes(pathToBundleZipFile) return BundleManager.createBundleVersionViaByteArray(bytes) }
- バンドルバージョン(で作成したバンドルバージョン)
createBundleVersion
) - 互換性のあるグループ
rhqadmin@localhost:7080$ var destinationName = 'New Destination' rhqadmin@localhost:7080$ var description = 'My new example destination' rhqadmin@localhost:7080$ var bundleName = 'myApp' rhqadmin@localhost:7080$ var groupName = 'Linux Group' rhqadmin@localhost:7080$ var baseDirName = '/' rhqadmin@localhost:7080$ var deployDir = 'var/www/html/' rhqadmin@localhost:7080$ createBundleDestination(destinationName, description, bundleName, groupName, baseDirName, deployDir)
createBundleDestination
関数は、指定された名前に基づいてグループとバンドルの検索を実行します。これにより、追加の検索を実行せずに宛先を設定できます。
function createBundleDestination(destinationName, description, bundleName, groupName, baseDirName, deployDir) { var groupCrit = new ResourceGroupCriteria; groupCrit.addFilterName(groupName); var groups = ResourceGroupManager.findResourceGroupsByCriteria(groupCrit); ... 8< ... var group = groups.get(0); var bundleCrit = new BundleCriteria; bundleCrit.addFilterName(bundleName); var bundles = BundleManager.findBundlesByCriteria(bundleCrit); ... 8< ... }
20.2. バンドルのデプロイ
cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples/modules/bundles.js
ファイルに関数があります。deployBundle
これは非常に簡単なものですが、最初に情報を取得する必要があります。
rhqadmin@localhost:7080$ var destinationName = "New Destination" rhqadmin@localhost:7080$ var destcrit = new BundleDestinationCriteria() rhqadmin@localhost:7080$ destcrit.addFilterName(destinationName) var dest = BundleManager.findBundleDestinationsByCriteria(destcrit)
rhqadmin@localhost:7080$ var crit = new BundleVersionCriteria() rhqadmin@localhost:7080$ crit.addFilterBundleName(name) rhqadmin@localhost:7080$ var vers = BundleManager.findBundleVersionsByCriteria(crit) rhqadmin@localhost:7080$ if( vers != null ) { \ rhqadmin@localhost:7080$ if( vers.size() > 1 ) { \ rhqadmin@localhost:7080$ for( i =0; i < vers.size(); ++i) { \ rhqadmin@localhost:7080$ ver = vers.get(i); \ rhqadmin@localhost:7080$ println("Version: " + ver.version + " " + "ID: " + ver.id) \ rhqadmin@localhost:7080$ } \ rhqadmin@localhost:7080$ } \ rhqadmin@localhost:7080$ else if( vers.size() == 1 ) { \ rhqadmin@localhost:7080$ ver = vers.get(0); \ rhqadmin@localhost:7080$ println("Version: " + ver.version + + " " + "ID: " + ver.id) \ rhqadmin@localhost:7080$ } \ rhqadmin@localhost:7080$ } Version: 2.0 ID: 10021 Version: 1.0 ID: 10012
bundles.js
ファイルのコメントに表示され、一般的な設定情報が表示され 「シンプル設定プロパティーの変更」 ます。
rhqadmin@localhost:7080$ deployBundle(dest.get(0).id,10021,null,'my description',true) BundleDeployment: bundleVersion: BundleVersion[id=10021,name=null,version=null] configuration: Configuration[id=15021] ctime: 1337286719259 description: my description destination: BundleDestination[id=10021, bundle=driftBundle, group=Linux Group - Thu May 10 15:10:28 EDT 2012, name=NewDestination] duration: 0 errorMessage: id: 10051 live: true mtime: 1337286719259 name: Deployment [1] of Version [2.0] to [NewDestination] replacedBundleDeploymentId: resourceDeployments: [BundleResourceDeployment: bdd=[BundleDeployment[id=10051, name=Deployment [1] of Version [2.0] to [new-test]]], resource=[Resource[id=10001, uuid=535b3f54-0bd8-4653-bdd3-323ea69b98fd, type={Platforms}Linux, key=gs-dl585g2-01.rhts.eng.bos.redhat.com, name=server.example.com, parent=<null>, version=Linux 2.6.32-220.el6.x86_64]]] status: Failure subjectName: rhqadmin tags:
deployBundle
関数は 2 つの手順で実行され、デプロイメントを管理します。これは util.js
ファイルの関数の 1 つを使用してデプロイメント設定(送信されている場合)を適切なハッシュに変換します。
... 8< ... var deploymentConfig = deploymentConfiguration; if (!(deploymentConfiguration instanceof Configuration)) { deploymentConfig = asConfiguration(deploymentConfiguration); }
... 8< ... var deployment = BundleManager.createBundleDeployment(bundleVersionId, destinationId, description, deploymentConfig); deployment = BundleManager.scheduleBundleDeployment(deployment.id, isCleanDeployment); ... 8< ...
20.3. バンドルの元に戻す
bundles.js
ファイルの機能は使用しません。
scheduleRevertBundleDeployment
.これには、2 つの重要な情報が必要です。1 つ目は宛先 ID で、簡単な基準検索で取得できます。
rhqadmin@localhost:7080$ var destinationName = "NewDestination" rhqadmin@localhost:7080$ var destCrit = new BundleDestinationCriteria() rhqadmin@localhost:7080$ destCrit.addFilterName(destinationName) rhqadmin@localhost:7080$ var dest = BundleManager.findBundleDestinationsByCriteria(destCrit)
rhqadmin@localhost:7080$ var depCrit = new BundleDeploymentCriteria() rhqadmin@localhost:7080$ depCrit.addFilterDestinationName(destinationName) rhqadmin@localhost:7080$ var deploy = BundleManager.findBundleDeploymentsByCriteria(depCrit) rhqadmin@localhost:7080$ var dep = deploy.get(0); rhqadmin@localhost:7080$ var description = dep.description;
rhqadmin@localhost:7080$ BundleManager.scheduleRevertBundleDeployment(dest.get(0).id, description, true)
第21章 例: リソースドリフトの準備
21.1. スクリプトの計画
- まず、リソースにドリフトを設定するスクリプトがあります。このシェルスクリプトは、一連のセットアップ手順で一度に実行されます。
- リソースのドリフト定義を作成します(
driftDef.js
CLI スクリプトにより)。 - これは、一般的な
deploy.xml
レシピを作成し、drift ディレクトリーを zip し、(createBundle.js
CLI スクリプトを介して)新しいバンドルおよびバンドルデプロイメントを作成します。 - 最初のスナップショットを待機した後には、(
snapshot.js
CLI スクリプトを介して)スナップショットを定義に固定します。
これらのファイルはすべて、シェルスクリプトにより生成されます。 - アラート定義は、(CLI ではなく)UI で作成する必要がありますが、任意のドリフト検出を条件として使用し、応答でサーバー側のスクリプトを実行するように設定できます。この 2 つ目のスクリプトは、プリストラインベースディレクトリーで作成されたバンドルをデプロイし、ドリフトを上書きします。
21.2. 誤差定義の設定およびバンドルの準備
[root@server ~]# ./driftBundle.sh
driftBundle.sh
スクリプトは、各情報に対応するスクリプト内の多くの変数を定義します。
.conf
ファイルのセット(cf. 「Wrapper スクリプトおよび .conf ファイルの作成」)を使用し .conf
て定義できますが(この例では分かりやすくするために、すべての変数が driftBundle.sh
スクリプト自体で定義されます)。
- rhq-cli.sh スクリプトの場所
- CLI コマンドで渡すユーザー名やパスワードなどのオプション
- 生成された JavaScript ファイルを保存し、JavaScript ファイルへのパスに使用するディレクトリー。
#!/bin/bash # options for the CLI CLI='cliRoot/rhq-remoting-cli-4.9.0.JON320GA/bin/rhq-cli.sh' OPTS=' -u rhqadmin -p rhqadmin' SCRIPTS='/opt'
# set parameters for the drift definition RESTYPE='Linux' RESPLUGIN='Platforms' RESNAME="server.example.com" NAME='example drift' DESC='drift from script' BASEDIR='/opt/drift' BASEDIRTYPE='fileSystem' EXCLUDE='./logs/' PATTERN= MODE='normal' INTERVAL='3600'
driftDef() { cat <<-EOF //set the resource type var resType = ResourceTypeManager.getResourceTypeByNameAndPlugin("$RESTYPE","$RESPLUGIN"); //get the resource to associate with the drift definition rcrit = ResourceCriteria() rcrit.addFilterResourceTypeName("$RESTYPE") rcrit.addFilterName("$RESNAME") var resources = ResourceManager.findResourcesByCriteria(rcrit) var res = resources.get(0)
DriftDefinitionManager
は、a のラッパーです。 configuration()
オブジェクト。CLI スクリプトは最初に指定のリソースタイプのデフォルトドリフトテンプレートを呼び出し、そのテンプレートに基づいて定義オブジェクトを作成します。
//get the default template for the resource type criteria = DriftDefinitionTemplateCriteria() criteria.addFilterResourceTypeId(resType.id) templates = DriftTemplateManager.findTemplatesByCriteria(criteria) template = templates.get(0) //create a new drift definition instance, based on the template definition = template.createDefinition()
//set the drift definition configuration options definition.resource = res definition.name = '$NAME' definition.description = '$DESC' definition.setAttached(false) // this is false so that template changes don't affect the definition // this is set low to trigger an early initial detection run definition.setInterval(30) var basedir = new DriftDefinition.BaseDirectory(DriftConfigurationDefinition.BaseDirValueContext.valueOf('$BASEDIRTYPE'),'$BASEDIR') definition.basedir = basedir // there can be multiple exclude statements made, as desired var f = new Filter("$EXCLUDE", "$PATTERN") // location, pattern definition.addExclude(f) //this defaults to normal, which means that any changes will // trigger an alert. plannedChanges is the other option, which // disables alerting for drift changes. definition.setDriftHandlingMode(DriftConfigurationDefinition.DriftHandlingMode.valueOf('$MODE'))
//apply the new definition to the resource DriftManager.updateDriftDefinition(EntityContext.forResource(res.id),definition) EOF }
bundles.js
サンプルスクリプトにすでに定義されます。これらの関数を使用すると、デプロイバンドルが非常に簡単になります。
# options for the bundle SAMPLES='cliRoot/rhq-remoting-cli-4.9.0.JON320GA/samples' DESTNAME='drift destination' BUNDLEDESC='bundle to remediate drift' BUNDLENAME='driftBundle' GROUPNAME='Linux Group' ZIP='driftBundle.zip' BVER='1.0' BUNDLE='/opt/bundles/'$ZIP ARCHIVE='/opt/bundles/'$ZIP
deploy.xml
)を作成します。
deploy() { cat << _EOF_ <project name="$BUNDLENAME" default="main" xmlns:rhq="antlib:org.rhq.bundle"> <rhq:bundle name="$BUNDLENAME" version="$BVER" description="$BUNDLEDESC"> <rhq:deployment-unit name="drift" compliance="full"> <rhq:archive name="$ZIP" exploded="true"> </rhq:archive> </rhq:deployment-unit> </rhq:bundle> <target name="main" /> </project> _EOF_ }
bundles.js
サンプルスクリプトはバンドルのデプロイに必要なすべての関数をすでに定義していますが、util.js
サンプルスクリプトに依存しています。CLI が非対話的に実行される場合、別のスクリプトが必要とする外部スクリプトをインポートする方法はありません。
bundles.js
と util.js
スクリプトを連結し、次にバンドルバージョンとバンドル宛先を作成する呼び出しを追加します。
createBundle() { cat $SAMPLES/util.js $SAMPLES/bundles.js cat << _EOF_ // set the location of the bundle archive var path = '$BUNDLE' // create the bundle version in JON createBundleVersion(path) // set all of the variables for the bundle destination var destinationName = '$DESTNAME' var description = '$BUNDLEDESC' var bundleName = '$BUNDLENAME' var groupName = '$GROUPNAME' var baseDirName = '$BASEDIR' var deployDir = "." // create the new destinition in JON createBundleDestination(destinationName, description, bundleName, groupName, baseDirName, deployDir) _EOF_ }
snapshot() { cat <<- _EOF_ //find the resource rcrit = ResourceCriteria() rcrit.addFilterResourceTypeName("$RESTYPE") rcrit.addFilterName("$RESNAME") var resources = ResourceManager.findResourcesByCriteria(rcrit) var res = resources.get(0) //find the new drift definition criteria = DriftDefinitionCriteria() criteria.addFilterName('$NAME') criteria.addFilterResourceIds(res.id) def = DriftManager.findDriftDefinitionsByCriteria(criteria) definition = def.get(0) definition.setInterval($INTERVAL) // it is necessary to redefine the complete configuration when you're // resetting the interval or the other values will be overwritten with default // or set to null var basedir = new DriftDefinition.BaseDirectory(DriftConfigurationDefinition.BaseDirValueContext.valueOf('$BASEDIRTYPE'),'$BASEDIR') definition.basedir = basedir definition.name = '$NAME' // there can be multiple exclude statements made, as desired var f = new Filter("$EXCLUDE", "$PATTERN") // location, pattern definition.addExclude(f) DriftManager.updateDriftDefinition(EntityContext.forResource(res.id),definition) // pin to the initial snapshot, which is version 0 // this gets the most recent snapshot if that is the better version to use // snap = DriftManager.getSnapshot(DriftSnapshotRequest(definition.id)) DriftManager.pinSnapshot(definition.id,0) _EOF_ }
# create the drift definition driftDef > $SCRIPTS/driftDef.js $CLI $OPTS -f $SCRIPTS/driftDef.js # create the recipe file and then zip up the # drift base directory to make the bundle archive deploy > /deploy.xml zip $ARCHIVE $BASEDIR zip $BUNDLE $ARCHIVE /deploy.xml # create the bundle from the recipe and archive # and then create the bundle definition createBundle > $SCRIPTS/createBundle.js $CLI $OPTS -f $SCRIPTS/createBundle.js # sleep to allow the server to get the first snapshot # this only sleeps for a minute, but it really depends on your environment # whether that is long enough sleep 1m # this pins the new snapshot to the new drift definition # and then changes the drift interval to the longer, variable-specified # value snapshot > $SCRIPTS/snapshot.js $CLI $OPTS -f $SCRIPTS/snapshot.js
21.3. ドリフトの調整
// - The 'alert' variable is seeded by the alert sender // SET THESE VARIABLES var bundleDestinationName = 'drift destination' var bundleVersion = 1.0 var logFile = '/tmp/alert-cli-demo/logs/alert-' + alert.id + '.log' // Log what we're doing to a file tied to the fired alert id // var e = exporter e.setTarget( 'raw', logFile ) // Dump the alert // e.write( alert ) // get a proxy for the alerted-on Resource // var alertResource = ProxyFactory.getResource(alert.alertDefinition.resource.id) // Dump the resource // e.write( " " ) e.write( alertResource ) // Remediate file // Find the Bundle Destination // var destCrit = new BundleDestinationCriteria() destCrit.addFilterName( bundleDestinationName ) var result = BundleManager.findBundleDestinationsByCriteria( destCrit ) var dest = result.get( 0 ) // Find the Bundle Version // var versionCrit = new BundleVersionCriteria() versionCrit.addFilterVersion( bundleVersion ) result = BundleManager.findBundleVersionsByCriteria( versionCrit ) var ver = result.get( 0 ) // Create a new Deployment for the bundle version and the destination // var deployment = BundleManager.createBundleDeployment(ver.getId(), dest.getId(), 'remediate drift', new Configuration()) // Schedule a clean deploy of the deployment. This will wipe out the edited file and lay down a clean copy // BundleManager.scheduleBundleDeployment(deployment.getId(), true) e.write( " " ) e.write( "REMEDIATION COMPLETE!" )
第22章 例: JBoss ON サーバー設定の管理
22.1. 簡易エクスポート/インポートの同期
//log into the first server rhq.login('rhqadmin','rhqadmin','server1.example.com','7080'); //export the settings var ex = SynchronizationManager.exportAllSubsystems(); rhqadmin@localhost:7080$ saveBytesToFile(ex.exportFile, 'export.xml.gz'); // log out of the first server rhq.logout()
// log into the second server rhq.login('rhqadmin','rhqadmin','server2.example.com','7080'); // import the settings var data = getFileBytes('export.xml.gz'); SynchronizationManager.importAllSubsystems(data, null); // log out of the second server rhq.logout()
22.2. インポート前のサーバー設定の変更
//log into the first server rhq.login('rhqadmin','rhqadmin','server1.example.com','7080'); //export the settings var ex = SynchronizationManager.exportAllSubsystems(); rhqadmin@localhost:7080$ saveBytesToFile(ex.exportFile, 'export.xml.gz'); // log out of the first server rhq.logout()
- デフォルトの定義を取得します。
rhqadmin@localhost:7080$ var systemSettingsImportConfigurationDefinition = SynchronizationManager.getImportConfigurationDefinition('org.rhq.enterprise.server.sync.SystemSettingsSynchronizer')
- 新しい設定インスタンスを作成します。
rhqadmin@localhost:7080$ var configurationObject = systemSettingsImportConfigurationDefinition.configurationDefinition.defaultTemplate.createConfiguration() rhqadmin@localhost:7080$ var systemSettingsImportConfiguration = new ImportConfiguration(systemSettingsImportConfigurationDefinition.synchronizerClassName, configurationObject)
- 設定を変更します。たとえば、これによりサーバー同期が編集され、監視データを格納するためのデータベース設定のみがインポートされます。
rhqadmin@localhost:7080$ configurationObject.getSimple('propertiesToImport').setValue('CAM_DATA_PURGE_1H, CAM_DATA_PURGE_6H, CAM_DATA_PURGE_1D, CAM_DATA_MAINTENANCE')
メトリクステンプレート同期の場合、プロパティーリストまたはプロパティーマップに基づいて、リソースタイプごとにインポートするメトリクススケジュールを定義します。例:rhqadmin@localhost:7080$ configurationObject.getSimple('updateAllSchedules').setBooleanValue(true) rhqadmin@localhost:7080$ var updateList = new PropertyList('metricUpdateOverrides') rhqadmin@localhost:7080$ var update = new PropertyMap('metricUpdateOverride') rhqadmin@localhost:7080$ update.put(new PropertySimple('metricName', 'MCBean|ServerInfo|*|freeMemory')) rhqadmin@localhost:7080$ update.put(new PropertySimple('resourceTypeName', 'JBossAS Server')) rhqadmin@localhost:7080$ update.put(new PropertySimple('resourceTypePlugin', 'JBossAS5')) rhqadmin@localhost:7080$ update.put(new PropertySimple('updateSchedules', 'true')) rhqadmin@localhost:7080$ updateList.add(update) rhqadmin@localhost:7080$ configurationObject.put(updateList)
rhqadmin@localhost:7080$ var configsToImport = new java.util.ArrayList()
rhqadmin@localhost:7080$ configsToImport.add(systemSettingsImportConfiguration);
rhqadmin@localhost:7080$ configsToImport.add(metricTemplatesImportConfiguration);
rhqadmin@localhost:7080$ SynchronizationManager.importAllSubsystems(ex, configToImport
);
付録A ドキュメント履歴
改訂履歴 | ||||
---|---|---|---|---|
改訂 3.3.7-2 | Tue 11 Apr 2017 | Conscot ムムー | ||
| ||||
改訂 3.3.7-1 | Tue 20 Sep 2016 | Conscot ムムー | ||
| ||||
改訂 3.3.2-11 | Fri 19 Aug 2016 | Conscot ムムー | ||
| ||||
改訂 3.3.2-10 | Thu 02 July 2015 | Jared イタリア | ||
| ||||
改訂 3.3.1-1 | Wed Feb 18 2015 | Jared イタリア | ||
| ||||
改訂 3.3-20 | Mon Nov 17 2014 | Jared イタリア | ||
|