JBoss ON コマンドラインスクリプトの作成
JBoss ON CLI およびリモート API の使用
概要
パート I. 使ってみる リンクのコピーリンクがクリップボードにコピーされました!
第1章 JBoss ON Server および CLI でのスクリプトの仕組み リンクのコピーリンクがクリップボードにコピーされました!
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 ファイルおよびディレクトリー リンクのコピーリンクがクリップボードにコピーされました!
| ファイルまたはディレクトリー | 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 スクリプトのオプション リンクのコピーリンクがクリップボードにコピーされました!
| 短いオプション | 長いオプション | 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/modulesRHQ_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();
| 変数 | 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 |
|
| Assert.assertEqualsNoOrder |
|
| Assert.assertExists |
|
| Assert.assertFalse |
|
| Assert.assertNotNull |
|
| Assert.assertNotSame |
|
| Assert.assertNull |
|
| Assert.assertNumberEqualsJS |
|
| Assert.assertSame |
|
| Assert.assertTrue |
|
| Assert.fail |
|
9.2. subject リンクのコピーリンクがクリップボードにコピーされました!
| method | 署名 |
|---|---|
| subject.addLdapRole |
|
| subject.addRole |
|
| 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 |
|
| subject.removeRole |
|
| subject.roles | ロール名、パーミッション、関連付けられた LDAP ユーザーおよびグループ、関連するリソースグループ、および現在のユーザーが属するすべてのロールに関するその他の情報を表示します。 |
| subject.sessionId | 現在のセッション ID 番号を出力します。 |
| subject.smsAddress | ユーザーのページ番号(存在する場合)を返します。 |
| subject.toString |
|
| subject.userConfiguration | 設定されたポートレット、ダッシュボード、ログインユーザー固有の設定に基づいて、ダッシュボード情報をすべて返します。 |
9.3. pretty リンクのコピーリンクがクリップボードにコピーされました!
| method | 署名 |
|---|---|
| pretty.exportMode | サーバーの現在のエクスポート設定を出力します。 |
| pretty.print |
|
| pretty.width | コンソール表示の現在の幅設定を出力します。 |
9.4. unlimitedPC および pageControl リンクのコピーリンクがクリップボードにコピーされました!
| method | 署名 |
|---|---|
| unlimitedPC.addDefaultOrderingField |
|
| unlimitedPC.clone |
|
| unlimitedPC.firstRecord | 結果ページの最初のレコードを返します。 |
| unlimitedPC.getExplicitPageControl |
|
| unlimitedPC.getSingleRowInstance |
|
| unlimitedPC.getUnlimitedInstance |
|
| unlimitedPC.initDefaultOrderingField |
|
| unlimitedPC.orderingFields | |
| unlimitedPC.orderingFieldsAsArray | |
| unlimitedPC.pageNumber | ページ化された結果の現在のページ番号を返します。 |
| unlimitedPC.pageSize | 現在の設定されたページサイズを返します(ページごとに返されたエントリーの数)。 |
| unlimitedPC.primarySortColumn | |
| unlimitedPC.primarySortOrder | |
| unlimitedPC.removeOrderingField |
|
| unlimitedPC.reset |
|
| unlimitedPC.setPrimarySort |
|
| unlimitedPC.setPrimarySortOrder |
|
| unlimitedPC.sortBy |
|
| unlimitedPC.startRow | 現在の開始行番号を返します。 |
| unlimitedPC.toString |
|
| unlimitedPC.truncateOrderingFields |
|
9.5. exporter リンクのコピーリンクがクリップボードにコピーされました!
| method | 署名 |
|---|---|
| exporter.close |
|
| exporter.file | |
| exporter.format | は、現在設定されている出力形式を表示します。 |
| exporter.pageWidth | 出力ファイルのコンテンツの設定済み行の長さを表示します。 |
| exporter.setFormat |
|
| exporter.setFile |
|
| exporter.setPageWidth |
|
| exporter.setTarget |
|
| exporter.write |
|
9.6. ProxyFactory リンクのコピーリンクがクリップボードにコピーされました!
| method | 署名 |
|---|---|
| ProxyFactory.getResource |
|
| ProxyFactory.outputWriter | |
| ProxyFactory.remoteClient | リモートクライアントによって使用されるマネージャーおよび設定に関する情報を返します。インタラクティブ CLI では、インタラクティブ CLI によって使用されるマネージャー Bean に関する情報が出力されます。 |
| ProxyFactory.resource |
9.7. scriptUtil リンクのコピーリンクがクリップボードにコピーされました!
| method | 署名 |
|---|---|
| scriptUtil.findResources |
|
| scriptUtil.getFileBytes |
|
| scriptUtil.isDefined |
|
| scriptUtil.saveBytesToFile |
|
| scriptUtil.sleep |
|
| scriptUtil.waitForScheduledOperationToComplete |
|
9.8. プロキシーリソースに使用できる方法 リンクのコピーリンクがクリップボードにコピーされました!
| 情報メソッド | |
|---|---|
| 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 |
|
| platform.getMeasurement |
|
| platform.updatePluginConfiguration |
|
| platform.toString |
|
| 情報メソッド | |
|---|---|
| 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 |
|
| jbossas.getMeasurement |
|
| jbossas.updatePluginConfiguration |
|
| jbossas.toString |
|
| 情報メソッド | |
|---|---|
| measurements | 利用可能なメトリック、現在の値、およびコンテンツリソースのすべての測定値の説明をプリントする一覧を表示します。 |
| operations | リソースタイプに使用できる操作を表示します。 |
| ショートカットメトリックメソッド | ||
|---|---|---|
| createdDate | modifiedDate | description |
| path | version | Exploqued |
| ショートカットリソースエントリーメソッド | ||
|---|---|---|
| ID(インベントリー ID 番号) | resourceType | name(インベントリー名) |
| ショートカット操作メソッド |
|---|
| 元に戻す |
| ショートカット設定メソッド | |
|---|---|
| editPluginConfiguration() | pluginConfiguration |
| pluginConfigurationDefinition | |
| ショートカットコンテンツメソッド | |
|---|---|
| contentTypes | backingContent |
| ショートカットのインベントリーメソッド |
|---|
| 子 |
| method | 署名 |
|---|---|
| content.getChild |
|
| content.getMeasurement |
|
| content.updatePluginConfiguration |
|
| content.toString |
|
| content.retrieveBackingContent |
|
| content.updateBackingContent |
|
第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. 利用可能なユーティリティーとサンプルスクリプト リンクのコピーリンクがクリップボードにコピーされました!
| 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 つのパブリック機能を確認することです。
addToClustercopyDeployments
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.jsCLI スクリプトにより)。 - これは、一般的な
deploy.xmlレシピを作成し、drift ディレクトリーを zip し、(createBundle.jsCLI スクリプトを介して)新しいバンドルおよびバンドルデプロイメントを作成します。 - 最初のスナップショットを待機した後には、(
snapshot.jsCLI スクリプトを介して)スナップショットを定義に固定します。
これらのファイルはすべて、シェルスクリプトにより生成されます。 - アラート定義は、(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 | |||
| ||||
| 改訂 3.3.7-1 | Tue 20 Sep 2016 | |||
| ||||
| 改訂 3.3.2-11 | Fri 19 Aug 2016 | |||
| ||||
| 改訂 3.3.2-10 | Thu 02 July 2015 | |||
| ||||
| 改訂 3.3.1-1 | Wed Feb 18 2015 | |||
| ||||
| 改訂 3.3-20 | Mon Nov 17 2014 | |||
| ||||