Cisco UCS Director Open Automation 開発者ガイド、リリース 4.1
モジュールの操作
モジュールの操作
発行日;2014/02/05   |   ドキュメントご利用ガイド   |   ダウンロード ;   この章 pdf   ,   ドキュメント全体 pdf    |   フィードバック

モジュールの操作

この章は、次の内容で構成されています。

モジュールとそのコンポーネントの概要

モジュールには、次のコンポーネントを含めることができます。

  • タスク:ワークフローを定義する際に使用できるワークフロー タスク。
  • レポート:UCS Director UI に表示されるレポート。 レポートには、アクション ボタンを含めることも含めないことも可能です。
  • ウィザード:特定のアクション(複数も可)を実行するためにユーザからの入力を収集するユーザ インターフェイス コンポーネント。

    (注)  


    ウィザードはこのリリースではサポートされておらず、このマニュアルでは取り上げていません。


  • トリガー:満たされたときに何らかのアクションに関連付けできる条件。 例:VM のシャットダウン、VM の起動など。

    (注)  


    トリガーはこのリリースではサポートされておらず、このマニュアルでは取り上げていません。


上記の主要コンポーネントはそれぞれ、次に示す 1 つ以上のサブ コンポーネントを利用できます。

  • オブジェクト ストア
  • 注釈
  • リスト
  • テーブル
  • コネクタ
  • ログ

オブジェクト ストア

オブジェクト ストアは、データベースの持続性のためにシンプルな API を提供します。 データベースへのオブジェクトの持続性を必要とするモジュールは、通常、オブジェクト ストア API を使用してすべての CRUD(作成、読み取り、更新、削除)操作を実行します。

Cisco UCS Director では、データベースとして MySQL を使用します。 プラットフォーム ランタイムは、DataNucleus が提供する Java Data Object(JDO)ライブラリを利用して、オブジェクト クエリ表現によってすべての SQL 操作を抽象化します。 これにより、データの持続性について開発の簡素化、高速化が可能になります。 オブジェクト ストアのマニュアルには、JDO を使用して CRUD 操作を行う方法を示す項も用意されています。


(注)  


このマニュアルで、POJO(Plain Old Java Object)という頭字語は、他のクラスを拡張するか、インターフェイスを実装しない Java クラスを指しています。

クラスへの持続性のマーキング

データベースで持続的に存在する必要がある POJO クラスは、JDO の適切な注釈を使用して定義し、マーキングする必要があります。 次に示すクラスは、JDO の持続性を示すマーキングが付けられています。

このクラスでは、次の点に注意してください。

  • foo_netapp_filer がクラス宣言の先頭に付加されていること。
  • 使用するテーブルの名前を table 属性で指定していること。
  • foo はモジュールの名前であること。
  • 持続性が必要なフィールドに @Persistent が付加されていること。  
package com.cloupia.lib.cIaaS.netapp.model;

@PersistenceCapable(detachable = "true", table = “foo_netapp_filer”)
public class  NetAppFiler
{
    @Persistent
    private String filerName;

    @Persistent
    private String accountName;
   
    @Persistent
    private String dcName;
}

前述のクラスには、@PersistenceCapable@Persistent の 2 つの注釈が使用されています。 これらの持続性は JDO で定義されており、Cisco UCS Director プラットフォーム ランタイムでは、持続的なすべてのクラスがこれら 2 つの注釈でマーキングされると想定しています。 JDO ではネストされたスキーマを作成でき、許可されてはいますが、Cisco UCS Director ではフラット スキーマを使用しているため、モジュールにネストされたスキーマを作成することは推奨されません。

次の作業

持続性クラスはデータベースに対する CRUD 操作に対応できるようになりました。

持続性クラスの公開

JDO の適切な注釈でマーキングされたクラスは公開して、プラットフォーム ランタイムがそのクラスを取得できるようにする必要があります。

持続性クラスを公開するには、次の手順を実行します。

手順
    ステップ 1   jdo.files という名前のファイルを、持続性クラスと同じディレクトリ(パッケージ)に作成します。
    ステップ 2   次の手順を実行して、クラスの名前をファイルに追加します。

    例:
    Linux# cat jdo.files
    
    // Copyright (C) 2010 Cisco Inc. All rights reserved.
    // 
    // Note: all blank lines and lines that start with // are ignored
    // 
    // Each package that has Persistable Objects shall have a file called jdo.files
    // Each line here indicates one class that represents a persistable object.
    // 
    // Any line that starts with a + means package name is relative to current package
    // If a line starts without +, then it must be complete fully qualified java class name 
    // (for example: com.cloupia.lib.xyz.MyClass)
    
    +NetAppFiler
    
    Linux#
    

    持続性クラスの CRUD 操作の実行

    持続性クラスでデータベースに対する CRUD 操作を実行できる場合、次の例に示すように、使用可能な各種操作を行うことができます。

    オブジェクトの新規インスタンスの作成

    NetAppFiler filer = new NetAppFiler();
    filer.setAccountName("netapp-account");
    filer.setDcName("Default Datacenter");
    filer.setfilerName("filer0");
    filer.setIpAddress("192.168.0.1");
        	
    ObjStore store = ObjStoreHelper.getStore(NetAppFiler.class);
        store.insert(filer);

    オブジェクトの単一インスタンスの変更

    ObjStore store = ObjStoreHelper.getStore(NetAppFiler.class);
    String query = "filerName == 'filer0'"; 
    //Use Java field names as parameter,
    
        // can use && , || operators in the query.
        store.modifySingleObject(query, filer);

    データベースからのすべてのインスタンスのクエリ

    ObjStore store = ObjStoreHelper.getStore(NetAppFiler.class);
    
    List filerList = store.queryAll();
    

    ファイラ クエリを使用したインスタンスのクエリ

    ObjStore store = ObjStoreHelper.getStore(NetAppFiler.class);
    
    String query = "dcName == 'Default Datacenter'";
    List filerList = store.query(query);
    

    注釈

    注釈は、モジュール開発において最も重要な部分の 1 つです。 ほとんどのアーティファクトは注釈に基づいて生成されます。 これにより、開発のあらゆる作業がより簡単で便利になります。

    注釈は、持続性、レポート生成、ウィザード生成、および各種タスクに使用されます。

    持続性の注釈

    持続性に使用される注釈の詳細については、クラスへの持続性のマーキングを参照してください。

    タスクの注釈

    ワークフローにタスクが含まれている場合、特定の入力を求めるプロンプトがユーザに表示されます。 ユーザが入力を求められるのは、タスクを表すクラスのフィールドに注釈を使用してマーキングが付けられている場合です。 FormField 注釈は、ユーザに表示される UI 入力フィールドのタイプ(テキスト フィールドか、ドロップダウン リストか、チェックボックスかなど)を決定します。詳細については、タスクを参照してください。

    値のリスト(LOV)

    リストは、タスクに対する正しい入力値を簡単に取得できるようにユーザに対して表示される、ドロップダウン LOV(値のリスト)を表します。 既存のリストを再利用することも、タスク UI に表示する独自のリストを作成することもできます。

    Cisco UCS Director には、50 を超える事前作成済みのリスト プロバイダーが定義されており、各モジュールでこれらを簡単に使用して、ユーザの入力を促すことができます。 詳細については、リスト プロバイダーを参照してください。

    いずれかのリスト プロバイダーの使用方法を示す例は、独自のリスト プロバイダーの定義、およびタスクを参照してください。

    独自のリスト プロバイダーの定義

    独自のリスト プロバイダーを定義して、そのプロバイダーをシステムに登録するようにプラットフォーム ランタイムに要求できます。

    リスト プロバイダー クラスは LOVProviderIf インターフェイスを実装し、単一メソッド getLOVs( ) の実装を提供します。 次の例を参照してください。

    class MyListProvider implements LOVProviderIf
    {
    
    	/**
    	 * Returns array of FormLOVPair objects.  This array is what is shown 
    	 * in a dropdown list.
    	 * A FormLOVPair object has a name and a label. While the label is shown 
    	 * to the user, the name will be used for uniqueness
    	 */
    	@Override
    	public FormLOVPair[] getLOVs(WizardSession session) {
    		
    		// Simple case showing hard-coded list values
    		
    		FormLOVPair http = new FormLOVPair("http", "HTTP"); 
      // http is the name, HTTP is the value
    		FormLOVPair https = new FormLOVPair("https", "HTTPs");
    		
    		FormLOVPair[] pairs = new FormLOVPair[2];
    		pairs[0] = http;
    		pairs[1] = https;
    		return pairs;
    	}	
    }
    
    

    テーブル(表形式のレポート)

    ユーザが選択して使用できる、既存の表形式レポートを使用します。 既存の値のリスト テーブルを参照してください。

    タスク

    ワークフロー タスクは、Cisco UCS Director が保持するタスク ライブラリへの提供に必要なアーティファクトを提供します。 タスクは、ワークフロー定義で使用できます。

    タスクには少なくとも次のクラスが必要です。

    • TaskConfigIf インターフェイスを実装するクラス。
    • AbstractTask クラスのメソッドを拡張および実装するクラス。

    TaskConfigIf

    このインターフェイスを実装するクラスが、タスクの入力になります。 つまり、タスクの実行のために入力を受け入れる必要のあるタスクは、TaskConfigIf を実装するクラスに依存することになります。 このインターフェイスを実装するクラスには、ユーザにプロンプトを表示するための、適切に注釈を付けたすべての入力フィールド定義も含める必要があります。 このクラスには、プラットフォーム ランタイムがデータベースでこのオブジェクトの持続性を維持できるようにする JDO 注釈も必要です。

    サンプル コードに、サンプルの Config クラスを示しています。

    AbstractTask

    タスクの実装は AbstractTask 抽象クラスを拡張し、すべての抽象メソッドに対する実装を提供する必要があります。 これは、タスクに関連するすべてのビジネス ロジックを処理するメイン クラスです。 ビジネス ロジックの実装が記述されるこのクラスで最も重要なメソッドは、executeCustomAction( ) です。 その他のメソッドは、プラットフォーム ランタイムでタスクをオーケストレーション デザイナ ツリーに表示したり、ワークフロー内でタスクのドラッグ アンド ドロップを可能にしたりするための十分なコンテキストを提供します。