この章では、ソフトウェア・ライブラリ・フレームワークについて紹介し、拡張機能および即時利用可能なエンティティを含めるソフトウェア・ライブラリを拡張するために、プラグイン・インテグレータによって使用されるメタデータを定義および登録する方法について説明します。カスタム拡張機能を登録したら、ソフトウェア・ライブラリ・コンソール、EM CLI、アクション・スクリプトAPIなどのインタフェースを使用して、ソフトウェア・ライブラリ・エンティティの作成、管理およびアクセスができます。この章の項目は、次のとおりです。
注意:
この章で説明する項目の概念の詳細は、『Oracle Enterprise Manager Cloud Control拡張プログラマーズ・ガイド』を参照してください。
新しいメタデータを定義および登録したら、ソフトウェア・ライブラリ・フレームワークを拡張すると、新しいタイプのソフトウェア、スクリプトまたは構成を認識できます。ジョブ・タイプまたはデプロイメント・プロシージャで表される既存またはカスタムの自動化ロジックでこれらのエンティティを使用できます。
プラグイン開発者として、次のソフトウェア・ライブラリ・メタデータを定義できます。
フォルダ
ソフトウェア・ライブラリを使用すると、効率良く管理するために、様々なユーザー定義または即時利用可能なエンティティを論理フォルダに編成できます。
詳細は、フォルダの定義に関する説明を参照してください。
タイプおよびサブタイプ
タイプとサブタイプはともに、共通で検索可能なメタデータ/構成プロパティ、そのデフォルト値、ファイルの関連付け要件などの面で、タイプとサブタイプで表されるエンティティの共通の特徴を定義します。ソフトウェア・ライブラリのすべてのエンティティは、関連付けられたタイプおよびサブタイプを持っています。
詳細は、タイプの定義に関する説明およびサブタイプの定義に関する説明を参照してください。
エンティティ
エンティティとは、ソフトウェア・ライブラリに格納されている主要なアーティファクトです。エンティティは、作成されたときのタイプ/サブタイプによって、また存在しているフォルダによって識別されます。
詳細は、エンティティの定義に関する説明を参照してください。
この項の内容は次のとおりです。
注意:
ソフトウェア・ライブラリ・アーティファクトの使用方法を説明した例を表示するには、次の手順を実行します。
Cloud Controlで、「設定」メニューから「拡張性」を選択し、「開発キット」をクリックします。
「拡張開発キット」ページの「はじめに」セクションでは、サンプル・ディレクトリに5つのサンプルが表示されます。サンプル・ホスト・プラグイン2 (サンプルII)は、ソフトウェア・ライブラリ・アーティファクトに関する情報を記述したプラグイン・サンプルです。
EDKキットをローカル・システムにダウンロードしたら、/samples/plugins/
ディレクトリにあるoracle.samples.xsh2
サンプルを選択します。さらに/samples/plugins/oracle.samples.xsh2/plugin_dist/oms/metadata
ディレクトリにまでドリルダウンすると、必要な例が含まれたswlib
フォルダが表示されます。
注意:
この項で説明するすべてのソフトウェア・ライブラリ・メタデータは、ソフトウェア・ライブラリ・メタデータ・ファイルの編成に関する説明で説明するように、XMLファイルに含まれている必要があります。次に、これらは、Enterprise Managerへのソフトウェア・ライブラリ・メタデータの追加に関する説明の情報を使用して登録する必要があります。
次の例では、MPFolder1
とMPFolder2
という2つの上位レベルのフォルダを作成し、それぞれのフォルダの下にSubfolder
というサブフォルダを作成する方法を説明しています。
<Folders> <Folder name="MPFolder1"> </Folder> <Folder name="MPFolder2"> </Folder> <Folder name="MPFolder1/subfolder"> </Folder> <Folder name="MPFolder2/subfolder"> </Folder> </Folders>
フォルダの定義および登録後、プラグインがデプロイされたら、これらのフォルダはロック記号とともにソフトウェア・ライブラリ・コンソールに表示されます。つまり、フォルダはOracle所有であり、編集できないことを意味しています。ソフトウェア・ライブラリにある類似作成機能を使用すると、フォルダをカスタマイズできます。ユーザーがEnterprise Managerコンソールを使用して作成する他のすべてのフォルダは、ロック記号なしで表示され、フォルダへの必要なアクセス権を付与されている者はだれでもフォルダを編集できます。
次の例では、MPType1
とMPType2
という2つのタイプ・アーティファクトの作成方法について説明しています。
<Types> <EntityType internalName="MPType1"/> <EntityType internalName="MPType2"/> </Types>
次の例では、タイプMPType1
のサブタイプMPSubtype1
を作成する方法について説明しています。
<EntitySubtype internalName="MPSubtype1" type="MPType1"> <EntityProperties filename="MPSubtype-entPropDict.xml"/> <GenericUISpecification> <Create> <ContentDescriptor> <DisplayName default="Describe"/> <Description default="Describe"/> <Content contentId="/WEB-INF/sdk/core/regions/swlib/sdkcore-regions-swlib-describe-task-flow.xml#sdkcore-regions-swlib-describe-task-flow" contentType="ADFRegion"/> </ContentDescriptor> <ContentDescriptor> <DisplayName default="Select Files"/> <Description default="Select Files"/> <Content contentId="/WEB-INF/sdk/core/regions/swlib/sdkcore-regions-swlib-upload-task-flow.xml#sdkcore-regions-swlib-upload-task-flow" contentType="ADFRegion"/> </ContentDescriptor> <ContentDescriptor> <DisplayName default="Review"/> <Description default="Review"/> <Content contentId="/WEB-INF/sdk/core/regions/swlib/sdkcore-regions-swlib-review-task-flow.xml#sdkcore-regions-swlib-review-task-flow" contentType="ADFRegion"/> </ContentDescriptor> </Create> <Edit> <ContentDescriptor> <DisplayName default="Describe"/> <Description default="Describe"/> <Content contentId="/WEB-INF/sdk/core/regions/swlib/sdkcore-regions-swlib-describe-task-flow.xml#sdkcore-regions-swlib-describe-task-flow" contentType="ADFRegion"/> </ContentDescriptor> <ContentDescriptor> <DisplayName default="Select Files"/> <Description default="Select Files"/> <Content contentId="/WEB-INF/sdk/core/regions/swlib/sdkcore-regions-swlib-upload-task-flow.xml#sdkcore-regions-swlib-upload-task-flow" contentType="ADFRegion"/> </ContentDescriptor> </Edit> <View> <ContentDescriptor> <DisplayName default="Describe"/> <Description default="Describe"/> <Content contentId="/WEB-INF/sdk/core/regions/swlib/sdkcore-regions-swlib-describe-task-flow.xml#sdkcore-regions-swlib-describe-task-flow" contentType="ADFRegion"/> </ContentDescriptor> <ContentDescriptor> <DisplayName default="Select Files"/> <Description default="Select Files"/> <Content contentId="/WEB-INF/sdk/core/regions/swlib/sdkcore-regions-swlib-upload-task-flow.xml#sdkcore-regions-swlib-upload-task-flow" contentType="ADFRegion"/> </ContentDescriptor> </View> </GenericUISpecification> </EntitySubtype>
定義したサブタイプを登録したら、ソフトウェア・ライブラリ・コンソールを使用して、このサブタイプのエンティティを作成できます(作成が禁止されていない場合)。そのためには、Enterpriseのメニューから「プロビジョニングとパッチ適用」を選択し、「ソフトウェア・ライブラリ」をクリックします。「ソフトウェア・ライブラリ」ページで、ユーザー所有のフォルダを選択します。「アクション」メニューから「作成」を選択し、「タイプ」を選択し、「サブタイプ」 を選択します。選択したタイプに属するすべてのサブタイプが表示されます。詳細は、次の図ファイルを参照してください。
論理的には、このリストの一部として作成したサブタイプが表示されるはずですが、そうでない場合は、登録に問題があります。サブタイプの登録の詳細は、Enterprise Managerへのソフトウェア・ライブラリ・メタデータの追加に関する説明を参照してください。
エンティティ・プロパティ・ファイルMPSubtype-entPropDict.xml
は、次のとおりです。
<?xml version="1.0"?> <Dictionary xmlns="http://www.oracle.com/sysman/emgc/Properties"> <TypeDefinitions> <DictionaryItem refID="MPAttr1" purpose="PURPOSE_TopLevel"> <PropType typeCode="TYPE_String"> <SimpleType className="java.lang.String" uiHintReadOnly="false" uiHintHidden="false" secret="false" guid="false"> <Constraints/> </SimpleType> </PropType> </DictionaryItem> <DictionaryItem refID="MPAttr2" purpose="PURPOSE_TopLevel"> <PropType typeCode="TYPE_String"> <SimpleType className="java.lang.String" uiHintReadOnly="false" uiHintHidden="false" secret="false" guid="false"> <Constraints/> </SimpleType> </PropType> </DictionaryItem> <DictionaryItem refID="MPAttr3" purpose="PURPOSE_TopLevel"> <PropType typeCode="TYPE_String"> <SimpleType className="java.lang.String" uiHintReadOnly="false" uiHintHidden="false" secret="false" guid="false"> <Constraints/> </SimpleType> </PropType> </DictionaryItem> </TypeDefinitions> <DynamicTypes/> </Dictionary>
このファイルを使用するには、次の変更を行ってください。
MPAttr1
、MPAttr2
およびMPAttr3
はエンティティ・プロパティの名前であり、不要なプロパティは削除し、適切に保持するプロパティの名前は変更します。
前述のサンプルからDictionaryItem
セクションをコピーし、さらにエンティティ・プロパティを作成します。エンティティ・プロパティの名前を更新できるのみで、その他の面は変更できません。
このサブタイプのエンティティ・プロパティは、ソフトウェア・ライブラリ・コンソールにOther Attributes
として表示されます。エンティティ・プロパティ定義を備えたサブタイプ・メタデータを登録した後でのみ、エンティティを作成または編集しているときに、エンティティ・プロパティの値を指定できます。ただし、新しいエンティティ・プロパティの定義はできません。
次の例では、フォルダMPFolder1
内のタイプMPType
とサブタイプMPSubtype
のエンティティを作成する方法について説明しています。
<Entity name="MPTSEntity"> <Type>MPType</Type> <Directory>/MPFolder1</Directory> <Subtype>MPSubtype</Subtype> <Fileset> <FileEntry> <path>payload.zip</path> <sourcePath>payloadSrc.zip</sourcePath> </FileEntry> </Fileset> <ExternalID>0.1</ExternalID> </Entity>
FileSet: ファイルpayloadSrc.zip
は、このXMLと同じディレクトリに存在している必要があります。エンティティは、ファイル・エントリpayload.zip
を持ちます。
ExternalID: xxxxxxxx.x
という形式の10進数浮動小数点数です。つまり、小数点の前に最大8桁が、小数点の後に1桁が使用できるという意味です。たとえば、0.6、23.9などです。メタデータを再び登録する場合、エンティティの外部IDが比較されます。現在登録されている最新リビジョンのExternalIDとExternalIDが一致するエンティティは、再び登録されることはありません。
次に例を示します。
MPFolder1
内のエンティティMPTSEntity
がExternalID 0.1で登録されている場合、リビジョン0.1のエンティティが作成されます。ExternalIDが指定されていない場合、デフォルト値は0.1です。
ExternalIDを変更しないでXMLを更新して再び登録した場合、このエンティティは登録されず、警告が記録されます。エンティティは引き続き0.1リビジョンを持ちます。
ExternalIDを0.2に変更して再び登録した場合、登録は適用され、すでに登録されている0.1リビジョンに加えてリビジョン0.2が作成されます。したがって、開発およびテスト・フェーズ中に登録されるようにするために、ExternalIDに対して複数の増分の実行が必要になることがあります。ただし、リリース前に、正しい値にリセットして適切に追跡してください。
ソフトウェア・ライブラリ・メタデータ・ファイルを編成するには、次の手順を実行します。
ディレクトリ構造の例は次のようになります。
swlib/ order.xml functionalArea/swlib.xml functionalArea1/swlib.xml
order.xml
ファイルの内容の例は、次のとおりです。
<order> <name>functionalArea/swlib.xml</name> <name>functionalArea1/swlib.xml</name> </order>
注意:
プラグインの機能領域ごとに、例に示されているように、order.xml
ファイルにエントリを追加する必要があります。
Enterprise Managerへのソフトウェア・ライブラリ・メタデータの追加は、この項で説明しているように2つの手順のプロセスです。
テストのために、次のようにemctlを使用してメタデータを登録します。
emctl register oms metadata -service swlib -file <Metadata Instance file> -pluginId <Plugin Id> [-sysman_pwd "sysman password"] Where: Metadata Instance file is the path to the folder containing order.xml. For example, $OMS_PLUGIN/metadata/swlib.
注意:
ソフトウェア・ライブラリの場所を追加していない場合、emctl register
コマンドは機能しません。かわりに、次のようなエラー・メッセージが表示されます。
EM-04040: Metadata operation is skipped. Reason: Software Library OMS shared storage is not configured, skipping metadata registration. Check /u01/inst/em/EMGC_OMS1/sysman/log/emctl.log for more details.
また、エンティティに対してメタデータXMLファイルを繰り返し登録する場合、そのたびに外部ID要素が増分されることを確認する必要があります。たとえば、XMLに11のエンティティが定義されており、このうち4つが同じExternalIDを持ち、7つが更新済のExternalIDを持っている場合、次のメッセージが表示されます。
Total 0 errors, 4 warnings. 7 entities imported. Metadata registration successful
注意:
登録を有効にするにはOMSを再起動する必要があります。この場合、emctlを使用して登録されているメタデータはタイプまたはサブタイプを含んでいます。ただし、タイプおよびサブタイプの登録の場合にはOMSを再起動する必要はありません。この場合、プラグインに定義されているソフトウェア・ライブラリ・メタデータは、タイプまたはサブタイプを含んでおり、デプロイされます。
なんらかの警告がある可能性があるため、登録が成功した場合でもログを確認することをお薦めします。外部IDが変更されていない場合にこれらの警告が主に発生し、この結果、エンティティの登録は失敗します。ログを表示するには、次の場所に移動します。
$INSTANCE_HOME/sysman/log/emctl.log
前述のように編成されたソフトウェア・ライブラリ・メタデータを含むプラグインOPARがデプロイされている場合、システム上でソフトウェア・ライブラリが構成されると、ソフトウェア・ライブラリ・メタデータは登録されます。他のメタデータのようにソフトウェア・ライブラリ・メタデータXMLはOPARに含まれます。詳細は、第13章「プラグインの検証、パッケージ化およびデプロイ」を参照してください。
注意1: プラグインのデプロイメント時にソフトウェア・ライブラリが構成されない場合、プラグインのデプロイメント後に初めてソフトウェア・ライブラリを構成するときに、プラグインのソフトウェア・ライブラリ・メタデータは登録されます。
プラグインによって作成されるソフトウェア・ライブラリ・エンティティは、パッチ/スクリプト/構成、またはプラグインに関連した他のソフトウェアを表すことがあります。前の項で説明したオプションを使用して作成された後にこれらのエンティティを使用するには、次のいずれかの方法を検討してください。
注意:
プラグイン・グラフィカル・ユーザー・インタフェースがソフトウェア・ライブラリ検索サービスを使用する方法の詳細は、「ソフトウェア・ライブラリ検索サービス」を参照してください。
カスタム・デプロイメント・アクティビティを自動化するためにユーザー定義デプロイメント・プロシージャのコンポーネント・ステップおよびディレクティブ・ステップを使用する方法の詳細は、『Oracle Enterprise Managerライフサイクル管理者ガイド』を参照してください。
ソフトウェア・ライブラリは、次のジョブ・タイプを使用します。
SwlibStageEntities
: ソフトウェア・ライブラリ・エンティティに関連付けられたファイルを宛先ホスト・ターゲットに転送します。
SwlibUploadFiles
: ソフトウェア・ライブラリ・エンティティに関連付けられるファイルを指定された適切なソフトウェア・ライブラリ・ストレージの場所に更新します。
独自のジョブ・タイプを作成することができ、その結果、これらのジョブ・タイプを含みます。たとえば、次のようなSwlibStageEntities
ジョブ・タイプを含むジョブ・タイプXMLを作成できます。
<?xml version="1.0"?> <jobType name="StageWrap" version="1.0" singleTarget="true" targetTypes="host" editable="true"> <credentials> <credential usage="destHostCreds" authTargetType="host" defaultCredentialSet="HostCredsNormal"> </credential> <credential usage="destNfsHostCreds" authTargetType="host" defaultCredentialSet="HostCredsPriv"> </credential> </credentials> <paramInfo> <paramSource sourceType="user" paramNames="stageLocation, entityURN" required="true" evaluateAtSubmission="true" /> <paramSource sourceType="user" paramNames="stageFileEntryPaths, operMode, autoRetry" required="false"/> <paramSource sourceType="inline" paramNames="operMode"> <sourceParam name="paramValues" value="mount"/> <sourceParam name="overwriteExistingFiles" value="yes"/> </paramSource> </paramInfo> <stepset ID="main" type="serial"> <step ID="preStage" command="remoteOp"> <credList> <cred usage="defaultHostCred" reference="destHostCreds"/> </credList> <paramList> <param name="remoteCommand">%job_default_shell%</param> <param name="args">ls, -R, %stageLocation%</param> <param name="targetName">%job_target_names%[1]</param> <param name="targetType">%job_target_types%[1]</param> </paramList> </step> <job ID="stage" type="SwlibStageEntities"> <credList> <cred usage="destHostCreds" reference="destHostCreds"/> <cred usage="destNfsHostCreds" reference="destNfsHostCreds"/> </credList> <paramList> <param name="entityURN">%entityURN%</param> <param name="stageFileEntryPaths" valueOf="stageFileEntryPaths"/> <param name="stageLocation">%stageLocation%</param> <param name="operMode">%operMode%</param> <param name="autoRetry">%autoRetry%</param> <param name="overwriteExistingFiles">%overwriteExistingFiles%</param> </paramList> <targetList allTargets="true" /> </job> <step ID="postStage" command="remoteOp"> <credList> <cred usage="defaultHostCred" reference="destHostCreds"/> </credList> <paramList> <param name="remoteCommand">%job_default_shell%</param> <param name="args">ls, -R, %stageLocation%</param> <param name="targetName">%job_target_names%[1]</param> <param name="targetType">%job_target_types%[1]</param> </paramList> </step> </stepset> <displayInfo useDefaultCreateUI="true" showParams="true"> <jobTypeDisplayInfo> <nlsValue>Stage Wrap</nlsValue> </jobTypeDisplayInfo> <parameterDisplayInfo name="stageLocation" showInResults="true" showInCreate="true"> <parameterLabel> <nlsValue>Stage Location</nlsValue> </parameterLabel> <parameterHint> <nlsValue>Directory location on target where the files from the entity will be transferred.</nlsValue> </parameterHint> <parameterTextBox lines="1" /> </parameterDisplayInfo> <parameterDisplayInfo name="entityURN" showInResults="true" showInCreate="true"> <parameterLabel> <nlsValue>Entity URN</nlsValue> </parameterLabel> <parameterHint> <nlsValue>Internal identifier of the entity</nlsValue> </parameterHint> <parameterTextBox lines="1" /> </parameterDisplayInfo> </displayInfo> </jobType>
ジョブ・タイプSwlibStageEntities
のジョブは、次のような入力を必要とします。
ステージ場所: エンティティのファイルが転送されるディレクトリ・パス。
エンティティURN: これはエンティティの内部識別子です。次のどの方法を使用しても取得できます。
Enterprise Manager Cloud Controlで、「エンタープライズ」メニューから「プロビジョニングとパッチ適用」を選択し、「ソフトウェア・ライブラリ」をクリックします。「ソフトウェア・ライブラリ」ホームページで、「表示」メニューから「内部ID」を選択してこれを有効にします。使用可能な内部ID値を、このパラメータの値としてジョブにコピーして指定します。
emcli動詞list_swlib_entities
とパラメータ-show_entity_rev_id
を使用すると、内部IDを取得できます。使用可能な内部ID値を、このパラメータの値としてジョブにコピーして指定します。