12.4. リソースおよびグループ
12.4.1. コンテンツバックアップリソース(Web アプリケーション)の作成および更新 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Web アプリケーション(EAR および WAR)は、コンテンツベースのリソース であり、管理されたリソースとコンテンツパッケージとの間にまたがるリソースです。
CLI スクリプトの実行時に、リソースのコンテンツを取得または作成するために特別に使用できるメソッドがいくつかあります。
コンテンツベースのリソースを作成するには、指定のバージョン番号でファイルをアップロードします。
このスクリプトの手順は以下のとおりです。
- コンテンツをアップロードするリソースを検索します。この例では、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
);
}
}
パッケージの更新は若干簡単です。これには、新規ファイルとバージョン番号を既存の EAR リソースに送信する必要があります。
例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);
}
}
コンテンツベースのリソースは、ソフトウェアパッケージ(ソフトウェアパッケージ)であるかのように追加または更新されますが、リソースのように削除されます。
注記
削除は、リソースのインベントリー解除とは異なります。Uninventorying はインベントリーからリソースを削除しますが、プラットフォーム上にはそのままにしておきます。リソースを削除すると、プラットフォーム自体からリソースが削除されます。
例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 の作成および編集 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
動的グループは、インベントリーの検索に使用する検索用語を指定し、グループに属する一致するリソースを特定します。検索結果は、結果が追加および削除されると自動的に変更されるため、グループメンバーシップは常に変更され、常に最新の状態になります。
動的グループ(または dynagroups) には、グループを作成および更新するための独自のクラスがあります。
dynagroup は、一致するメンバーのインベントリーを検索するために使用する検索フィルターである式のセットを定義することで作成されます。グループメンバーシップは(このような式を使用して)管理タスクによって算出されます。
注記
Dynagroups 式は、『『Users Guide』』 で広範囲に説明されています。
両方の Dynagroup を編集する場合は、グループメンバーシップを再計算して、一致するメンバーへの変更を取得する必要があります。また、インベントリーに変更が加えられるたびにグループメンバーシップを再作成して、新しいメンバーで 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());
setExpression 値内で groupby などのより複雑な式を使用できます。
例12.10 Dynagroup の編集
これにより、別の式が 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());
Dynagroup メンバーシップは、計算操作後にのみ更新されます。したがって、dynagroup 式自体に変更がなくてもインベントリーに変更がある場合は、メンバーを更新するために dynagroup を更新する必要があります。
例12.11 グループ定義の再計算
これにより、グループ名に基づいて単一の dynagroup が更新されます。
// 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 のセットを再計算できます。これは、で説明してい 「単一および複数リソースのデータの取得」 ます。