プライマリ・コンテンツに移動
Oracle® Enterprise Manager Cloud管理ガイド
12c リリース5 (12.1.0.5)
B70509-13
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

58 クラウド・ブループリントおよびブループリントのリファレンス

この章は、Oracle Enterprise Manager Cloudのブループリント処理機能のリファレンスとして機能します。概念を示し、ブループリント・プロセッサのインストールや実行方法、およびブループリント言語のドキュメント作成方法について説明します。また、ブループリント・デバッガの使用方法、エラーが診断された場合の対処方法、よくある質問など、ブループリント・プロセッサの使用に役立つ項が含まれています。このドキュメントを読む前に、第57章「ブループリントの概要」を読む必要があります。


注意:

ここをクリックすると、クラウド・ブループリントを使用してクラウド・リソースの作成を自動化する方法について、視覚的デモンストレーションを参照できます。

内容は次のとおりです。

58.1 ブループリント・プロセッサのインストール

ブループリント・プロセッサのインストールは、次の2つの手順で構成されています。

  • Python 2.7をインストールします(存在しない場合)。

  • ブループリント・プロセッサのファイルをインストールします。

-gオプションを使用してブループリントのグラフィカル表示を生成するには、第58.2項「グラフィカル・サマリー・レポートのオプション・コンポーネント」で説明されている追加のソフトウェアのインストールが必要です。

LinuxおよびWindows上のブループリント・プロセッサの詳細なインストール方法を以降に示します。


注意:

スケジュールの制約により、このバージョンのブループリント・プロセッサはローカライズされておらず、英語でのみ提供されています。

58.1.1 Linux (Oracle Linux)

Oracle Linuxにブループリント・プロセッサをインストールする場合、次の手順が必要です。

  • Pythonのインストール

  • Zipファイルからのブループリント・プロセッサのインストール

  • インストールのテスト

58.1.1.1 Pythonのインストール

  • バージョン2.7以降(3.xは除く)のPythonをダウンロードします。たとえば、http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgzを使用します。

  • 次のコマンドを入力するなどして、これを解凍します。

    tar xzf Python-2.7.3.tgz

    cd Python-2.7.3

  • 次のコマンドを実行します。

    ./configure --prefix=$HOME

    make

    make install

    注意: 構成手順の実行中に、使用しているプラットフォームで作成できなかった一部のモジュールに関する警告を含む出力が表示される場合がありますが、これらのモジュールは通常は不要であり、不足していてもブループリント・プロセッサの使用に悪影響を与えることはありません。

    Python build finished, but the necessary bits to build these modules were not found:
    
    bsddb185           dl                 imageop
    sunaudiodev
    

    必要な部分を特定するには、setup.pyのdetect_modules()を調べてモジュール名を特定します。

    Failed to build these modules:
    sqlite3
  • Pythonインタプリタがhome binディレクトリにインストールされます。これをテストします。$HOME/bin/python2.7

  • 次のようなPythonバナーが表示されます。

    Python 2.7.3 (default, May 25 2012, 11:33:27)
    [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    

58.1.1.2 Zipファイルからのブループリント・プロセッサのインストール

  • ブループリント配布ファイルを任意のディレクトリ(例: bp_installation)に解凍します。

  • ブループリント・プロセッサを実行するには、次を実行する必要があります。

    bp_installationなどのディレクトリに移動します。

    次のコマンドを実行します: python bp_processor.py <filename> <options>

58.1.1.3 インストールのテスト

  • ブループリント・プロセッサ・ファイルが含まれているディレクトリに移動します。

  • 次のコマンドを入力して、ブループリント・プロセッサを実行できることを確認します(この場合、ヘルプ・テキストのみが表示されます)。

    $HOME/bin/python2.7 bp_processor.py helloWorld.yml -h

  • 次のようなヘルプ・テキストが表示されます。

    使用方法:

    bp_processor.py [options] BlueprintFileName

    例:

    bp_processor.py myfile.yml -i "name:Joe" -i "count:2" -u jabauer -c https://...

    オプション:

     -h, --help         show this help message and exit
     -c CLOUD_URI, --cloud_uri=CLOUD_URI. 
                Ex: https://myhost:4473/em/cloud
     -u USER, --user=USER  user id
     -p PASSWORD, --password=PASSWORD 
                password If not provided, you'll be prompted.
     -t TIMEOUT, --timeout=TIMEOUT 
                timeout (seconds)
     -i INPUT_VALUE, --input_value=INPUT_VALUE
               <param name>:<param value> e.g. -i "name:Joe Blogs"
     -r REFRESH_FREQUENCY, --refresh_frequency=REFRESH_FREQUENCY 
                # of seconds between dots in timeline. Zero: no dots
     -n INSTANCE_NAME, --instance_name=INSTANCE_NAME 
                name of blueprint instance to create
     -d, --debug              more logging, including http traffic
     -E, --pause_error        Drop into debugger if error occurs
     -I, --pause_input        Pause before processing Input section
     -R, --pause_resource     Pause before processing Resource section
     -O, --pause_output       Pause before processing Output section
     -T, --pause_terminate 
                Pause before termination, but after output processing
                or error
     -g GRAPHIC_RESULTS, --graphic_results=GRAPHIC_RESULTS 
                Directory for deployed blueprint graphical report
     -G GRAPHIC_BLUEPRINT, --graphic_blueprint=GRAPHIC_BLUEPRINT
               Directory for undeployed blueprint graphical report
    
  • 次のコマンドを入力して、クラウド環境へ接続することなくブループリントの実行をシミュレーションします。

    $HOME/bin/python2.7 bp_processor.py helloWorld.yml

    次のように表示されます。

    [jabauer@zzzzzzzz blueprints]$ $HOME/bin/python2.7 bp_processor.py helloWorld.yml 
    
    Blueprint Processor - Invocation Summary
    ----------------------------------------
       Cloud URI:          sim
       User:               None
       Blueprint file:     helloWorld.yml
       Timeout:            90 minutes, 0 seconds
       Ellipses frequency: 15 seconds
       Inputs:
       Pause points:       (none)
       Debug logging:      False
       Instance name:      default_instance_name
    
     17:10:31 WARNING: No Resources specified in blueprint.  Nothing will be  
     created
     
     17:10:31 INFO: Output Processing
     17:10:31 INFO: -----------------
     17:10:31 INFO:
     17:10:31 INFO: Output values specified: 1
     17:10:31 INFO:    Value of MyMsg: Hello World
     17:10:31 INFO:
     17:10:31 INFO: Blueprint Processing Summary
     17:10:31 INFO: ----------------------------
     17:10:31 INFO:
     17:10:31 INFO: Timing Summary (seconds):
     17:10:31 INFO:    Client-side CPU time: 0.218
     17:10:31 INFO:    Elapsed time:
     17:10:31 INFO:       Processing time:    0.0
     17:10:31 INFO:       Paused time:        0.0
     17:10:31 INFO:       Total elapsed time: 0.0
    

58.1.2 ウィンドウ

Windowsにブループリント・プロセッサをインストールする場合、次の手順が必要です。

  • Pythonのインストール

  • Zipファイルからのブループリント・プロセッサのインストール

  • インストールのテスト

58.1.2.1 Pythonのインストール

  • http://www.python.org/download/releases/2.7.3にアクセスします。Pythonをインストールするためのいくつかのオプションが表示されます。

  • MSIインストーラをダウンロードします。これを実行します。インストーラが提示するデフォルトをそのまま使用します。

  • Pythonがインストールされたディレクトリをメモします。通常は次のディレクトリにインストールされます。

    ;c:\python27

  • Pythonディレクトリをパスに追加して、コマンドラインから実行できるようにします。

    • Windows XP

      • 「スタート」→「マイ コンピューター」→「プロパティ」

      • 「詳細設定」タブを選択します。

      • 「環境変数」をクリックします。

      • 現在のユーザーのパスを更新できますが、十分な権限がある場合はシステムのパスも更新できます。後者は、すべてのユーザーがPythonを実行できるようにするために必要です。

      • 次を、パス文字列の終わりに追加します。

        ;c:\python27

    • Windows 7 (Windows Vista)

      • 「スタート」メニューから「マイ コンピューター」を選択し、次に「プロパティ」を選択します。

      • 左側の「システムの詳細設定」タブを選択します。

      • 「環境変数」をクリックします。

      • 現在のユーザーのパスを更新できますが、十分な権限がある場合はシステムのパスも更新できます。後者は、すべてのユーザーがPythonを実行できるようにするために必要です。

      • 次を、パス文字列の終わりに追加します。

        ;c:\python27

      • 必要に応じて「OK」をクリックします(たとえば、2つのダイアログ・ボックス)。

  • Pythonのインストールをテストします。

    • 新しいコマンド・ウィンドウを開きます。(新しい環境変数値は、以前に開いたコマンド・ウィンドウには表示されません。)

    • pythonと入力します。

    • Pythonインタプリタが起動します。

    • exit()と入力します。

58.1.2.2 Zipファイルからのブループリント・プロセッサのインストール

  • ブループリント配布ファイルを任意のディレクトリ(例: bp_installation)に解凍します。

  • ブループリント・プロセッサを実行するには、次を実行します。

    • bp_installationディレクトリに移動します。

    • 次のコマンドを実行します: python bp_processor.py <filename> <options>

    • または、bp_processor.py <filename> <options>を使用します。

58.1.2.3 インストールのテスト

  • ブループリント・プロセッサ・ファイルが含まれているディレクトリに移動します。

  • 次のコマンドを入力して、ブループリント・プロセッサを実行できることを確認します(この場合、ヘルプ・テキストのみが表示されます)。

    python bp_processor.py helloWorld.yml -h

  • 次のコマンドを入力して、クラウド環境へ接続することなくブループリントの実行をシミュレーションします。

    python bp_processor.py helloWorld.yml

  • 出力値がHello Worldとなり、次のように表示されます。

    C:\...>python bp_processor.py interactiveTests\helloWorld.yml

Blueprint Processor - Invocation Summary
----------------------------------------
   Cloud URI:          sim
   User:               None
   Blueprint file:     helloWorld.yml
   Timeout:            90 minutes, 0 seconds
   Ellipses frequency: 15 seconds
   Inputs:
   Pause points:       (none)
   Debug logging:      False
   Instance name:      default_instance_name

17:10:31 WARNING: No Resources specified in blueprint.  Nothing will be created

17:10:31 INFO: Output Processing
17:10:31 INFO: -----------------
17:10:31 INFO:
17:10:31 INFO: Output values specified: 1
17:10:31 INFO:    Value of MyMsg: Hello World
17:10:31 INFO:
17:10:31 INFO: Blueprint Processing Summary
17:10:31 INFO: ----------------------------
17:10:31 INFO:
17:10:31 INFO: Timing Summary (seconds):
17:10:31 INFO:    Client-side CPU time: 0.218
17:10:31 INFO:    Elapsed time:
17:10:31 INFO:       Processing time:    0.0
17:10:31 INFO:       Paused time:        0.0
17:10:31 INFO:       Total elapsed time: 0.0

58.2 グラフィカル・サマリー・レポートのオプション・コンポーネント

ブループリント・プロセッサは、ブループリントのグラフィック表示が含まれるサマリー・レポートを生成できます。(このようなレポートを生成するには、–gまたは–Gオプションを使用します。)これらのオプションでレポートが生成されるためには、次のサード・パーティ・ソフトウェアがインストールされている必要があります。

  • GraphVizのインストール: GraphVizをインストールするには、http://www.graphviz.orgを参照してください。使用しているプラットフォーム向けのソフトウェアをダウンロードして、指示に従います。

  • pydotのインストール: pydotをインストールするには、http://code.google.com/p/pydot/を参照してください。ソフトウェアをダウンロードします(zipまたはtarファイル)。ブループリント・プロセッサは、pydotバージョン1.0.28を使用してテストされました。

    pydotは、セットアップツールを使用してインストールできます。たとえば、sudo easy_install pydotです。

    zip/tarファイル内のsetup.pyスクリプトも使用できます。このファイルの解凍先ディレクトリから、スクリプトpython setup.py installを実行します。

58.3 ブループリント・プロセッサの実行

ブループリントをデプロイするには、ブループリント・プロセッサを実行して、ブループリント・ファイルの名前と必要なコマンド・オプションを指定します。コマンドオプションの完全セットを表示するには、コマンドの–hオプションを使用します。

使用方法:

bp_processor.py [options] BlueprintFileName

例:

bp_processor.py myfile.yml -i "name:Joe" -i "count:2" -u jabauer -c https://...

オプション:

 -h, --help        show this help message and exit
 -c CLOUD_URI, --cloud_uri=CLOUD_URI. 
            Ex: https://myhost:4473/em/cloud
 -u USER, --user=USER  user id
 -p PASSWORD, --password=PASSWORD 
            password If not provided, you'll be prompted.
 -t TIMEOUT, --timeout=TIMEOUT 
            timeout (seconds)
 -i INPUT_VALUE, --input_value=INPUT_VALUE
            <param name>:<param value> e.g. -i "name:Joe Blogs"
 -r REFRESH_FREQUENCY, --refresh_frequency=REFRESH_FREQUENCY 
            # of seconds between dots in timeline. Zero: no dots
 -n INSTANCE_NAME, --instance_name=INSTANCE_NAME 
            name of blueprint instance to create
 -d, --debug              more logging, including http traffic
 -E, --pause_error        Drop into debugger if error occurs
 -I, --pause_input        Pause before processing Input section
 -R, --pause_resource     Pause before processing Resource section
 -O, --pause_output       Pause before processing Output section
 -T, --pause_terminate 
            Pause before termination, but after output processing
            or error
 -g GRAPHIC_RESULTS, --graphic_results=GRAPHIC_RESULTS 
            Directory for deployed blueprint graphical report
 -G GRAPHIC_BLUEPRINT, --graphic_blueprint=GRAPHIC_BLUEPRINT
            Directory for undeployed blueprint graphical report

自明ではないオプションについて、次に説明します。

  • Input_value: 各入力パラメータについて、–iまたは–input_valueの文字列を<param name>:<value>の形式で指定します。各入力パラメータを引用符で囲って指定する必要があります(例: -i "name:Joe Blogs")。複数の入力パラメータを指定するには、- iコマンドライン・オプションを複数回使用します。たとえば、次のように指定します。bp_processor.py _processor.py myfile.yml -i "DbZone:Zone1" -i "DbPassword:myPw"7

  • ブループリントで定義された入力パラメータがコマンドラインで指定されていない場合、次のように入力を求められます。

    pause_*: 入力/リソース/出力処理フェーズが開始される前に一時停止します(ブループリント・デバッガに入ります)。

    pause_errorの場合、エラーが発生したときにデバッガに入ります。pause_terminateの場合、ブループリント・プロセッサが終了する前にデバッガに入ります。デバッガ・コマンドの使用方法は、第58.9項「ブループリント・プロセッサを使用したデバッグ」で説明されています。CLOUD_URIが指定されていない場合、ブループリントの処理がシミュレーションされます。詳細は、第58.8項「シミュレーション・モード」を参照してください。

  • Timeout: ブループリントの処理を強制終了するまでの経過秒数。(プロセッサがPOSTリクエストなどのクラウド・リクエストの完了を待機している場合、そのリクエストの完了時に終了します。)

58.4 ブループリントの処理フェーズ

ブループリントの処理は、複数のフェーズで行われます。各フェーズの説明は、次の実行に役立ちます。

  • ブループリントの評価方法およびリソースの作成方法を理解します。

  • フェーズの移行時に一時停止ポイントを設定します。(これは、第58.9.2項「一時停止ポイント」で説明されているとおり、クラウドの参照およびデバッグに役立ちます)。

  • 指定されたクラウド・リソースに接続します。

  • 処理を監視します。作成に成功した場合、別のリソースで作成のブロックが解除されます。作成に失敗した場合、リソース作成フェーズが終了します。

各フェーズは次のとおりです。

  • 初期化: ブループリントを解析します。

  • 入力処理: ブループリントで入力パラメータが定義され、その一部がコマンドラインで指定されていない場合、ユーザーはパラメータ値の入力を求められます。

  • リソース作成: ブループリントで定義されている各リソースについて、他の未作成リソースとの依存関係がないかどうかを検証し、作成を開始します。

  • 出力処理: すべての出力値を評価および表示します。(エラーによりリソース作成フェーズが終了した場合、一部の出力値は表示されない場合があります。)

各フェーズの詳細な説明を以降に示します。

58.4.1 初期化

ブループリント・ファイルの読取りと解析が行われ、指定されたクラウド・リソースへの接続が行われます。解析されたブループリントの内容は、メモリーに取り込まれて拡張されます。Cloudという名前のメンバーが追加されます。この値は、第46章「クラウドのリソース・モデル」に記載されているクラウド・リソースです。環境情報を提供するInfoという名前の別のメンバーも追加されます。その値は、処理の開始時間を表すtimeと文字列「13:02:45」のペアなどの、名前/値ペアのセットです。オラクル社から提供されるマクロがブループリントのMacrosセクションにロードされます(名前がブループリントで定義されたマクロと競合する場合を除く)。

58.4.2 入力パラメータの評価

次に、入力パラメータの処理が行われ、入力パラメータが設定されます。ブループリントで指定されているが、コマンドラインでまだ入力されていないパラメータがあれば、入力を求められます。各入力パラメータの値は、ブループリント内の入力パラメータの、Value属性に格納されます。値には次のパス式を使用してアクセスできます。Inputs.<parameterName>.Value(詳細は、第58.6.7.1項「評価固有関数」を参照してください。)

58.4.3 リソースの作成

Resourcesセクションを処理するために、各リソースは並行して効果的に処理されます。各リソースについて、次が行われます。初めに、Containerセクション用に指定された式が評価されます。正常に完了した後、識別されたクラウド・リソースがREADY状態である場合、リソースのPropertiesサブセクションのすべての式が評価されます。(リソースのPropertiesまたはContainerセクションの評価を完了できず、待機する必要がある場合は、リソースがマークされて、ブループリント・プロセッサは別のリソースの処理に進みます。定期的にこのリソースおよびその他のマークされたリソースの評価が再試行されます。)リソース定義のすべての評価が完了したら、Propertiesセクションから派生したドキュメントを使用してクラウド・リソースの作成がリクエストされます(つまり、コンテナURIにPOSTされます)。成功した場合、新規に作成されたクラウド・リソースのURIが、ブループリントのリソース定義の_uri属性に格納されます。この時点で、そのURIは作成されたリソースを表します。次に、ブループリント・プロセッサは作成中のリソースをポーリングして、そのステータスを追跡します。リソースは、CREATING状態から最終的に成功または失敗の状態に移行します。失敗状態に移行した場合、ブループリント・プロセッサは状況を診断して終了します。作成が成功して、リソースがREADY状態に入った場合、他のリソース定義の評価を続行できるようになります。コマンドラインで指定されているタイムアウト値を超過した場合、ブループリント・プロセッサは終了します。作成が開始されたすべてのクラウド・リソースは、成功または失敗する前の一定期間、作成中の状態が維持される場合があります。タイムアウトの他に、式の評価時のエラーや、作成リクエストのレスポンスなどでクラウドから返されるエラー・コードなど、他の失敗が発生する場合があります。このようなすべての場合に、ブループリント・プロセッサは状況を診断して終了します。

58.4.4 Outputs

すべてのリソースが正常に評価された後、出力セクションが処理され、このときにそれぞれの名前付き出力式が評価され、その値が出力されます。ブループリントおよび何が作成されたかを示すグラフィック・レポートが生成され(リクエストされた場合)、ブループリント処理のサマリーがユーザーに表示されます。

58.5 言語仕様

ブループリントは、作成される一連のクラウド・リソースを表したテキスト・ファイルです。このテキストは、YAML形式またはJSON形式です。YAMLとJSONは、いずれもリストおよび名前/値ペアのデータ構造を表す表記法で、ネストが可能です。ブループリントはこのような構造になっています。(簡潔な説明は、[YAML]および[JSON]を参照してください。)ブループリントにはJSONまたはYAML表記法を使用できますが、YAMLの使用をお薦めします。YAMLを使用すると、より簡潔で可読性に優れたブループリントを記述できます。YAMLでは、コメントを含めるなど、JSONにはない便利な機能が提供されます。このような理由から、以降の例ではYAMLの使用を選択しています。(付加的な情報ですが、YAMLにはJSON表記法を含めることができます。つまり、YAMLはJSONの上位セットです。)

58.6 ブループリントの内容の概要

ブループリントには、トップ・レベルで、次のいずれかの名前/値ペアが含まれている場合があり、これらは、ブループリント・セクション・タイプとして表示できます。

  • Inputs

  • Data

  • Macros

  • リソース

  • 出力

ブループリント内の表示順序は重要ではありません。その他のセクションは使用できず、各セクションは1回のみ出現可能です。ブループリントには厳密に必須のセクションはありませんが、ブループリントを使用してクラウド・リソースを作成する目的では、少なくともリソース定義を含むResourcesセクションを含める必要があります。1つのセクションは、ブループリント内で1回のみ出現可能です。

58.6.1 Inputsセクション

Inputsセクションは、入力パラメータの記述に使用されます。各パラメータは一意の名前と次の属性を持ちます。

  • Type: StringまたはNumber。Numberが指定された場合、入力値は数値である必要があります。(デフォルト: String。)

  • Prompt: ユーザーに入力を求める際に使用する文字列。(デフォルト: パラメータの名前。)

  • DefaultValue: ユーザーが入力要求に対して[Enter]を押して応答した場合に使用される値。(デフォルト: ""。)

  • Order: 値を入力する順序。指定されていない場合、順序は不定です。

  • Sensitive: TrueまたはFalse。Trueの場合、ユーザーがインタラクティブに入力した内容は画面に表示されません。(デフォルト: False。)

  • Value: ユーザーが入力した値(またはデフォルト値)を使用して、実行時に設定されます。

入力パラメータの処理は、コマンドラインで指定されたこれらの入力値を使用して開始されます。指定されていない値については、ユーザーは入力を要求されます。

58.6.1.1 例1

Inputs:
  UserId:
    DefaultValue: qa_user
    Prompt: User id
    Order: 1
  Password:
    Sensitive: True 
    Order: 2
...

このブループリント・スニペットでは、作成者は2つの入力パラメータを定義しています。どちらもタイプはStringです。デフォルトのユーザーIDが指定されていますが、ユーザーはパスワードを入力する必要があります。両方ともコマンドラインで指定されていない場合、Orderを使用することでUserIdが初めにリクエストされます。

58.6.1.2 例2

次の相互作用の場合

C:\work>bp_processor.py test2.yml -c https://... -u jon -p myPW -t 665

Blueprint Processor - Invocation Summary
----------------------------------------
   Cloud URI:                https://xyxy.example.com:15430/em/cloud
   User:                     ssa_user1
   Blueprint file:           xyzApp.yml
   Timeout:                  90 minutes, 0 seconds
   Refresh frequency:        15 seconds
   Inputs:
   Pause points:             Inputs
   Debug logging:            False
   Instance name:            default_instance_name
   Graphical report dir:     deployment_report
   Versions:
      Blueprint processor:   12.1.0.5, 10-Oct-2012
      Cloud protocol:        10001

16:19:18 INFO: Connecting to cloud: https://...
User id (qa_user):
Password:
...

ユーザーはコマンドラインの一部として入力パラメータを指定していないため、2つの値の入力が要求されます。ユーザーは、ユーザーIDに対して[Enter]を押して、デフォルトのqa_userをそのまま使用しています。また、ユーザーはパスワードを入力しましたが、その内容は画面に表示されていません。

58.6.1.3 例3

次の相互作用はほとんど同じですが、ユーザーIDがコマンドラインで指定されている点が異なります。

C:\work>bp_processor.py test2.yml -c https://... -u jon -p myPW -t 665 -i "UserId:joe"

Blueprint Processor - Invocation Summary
----------------------------------------
   Cloud URI:                https://xyxy.example.com:15430/em/cloud
   User:                     ssa_user1
   Blueprint file:           xyzApp.yml
   Timeout:                  90 minutes, 0 seconds
   Refresh frequency:        15 seconds
   Inputs:
   Pause points:             Inputs
   Debug logging:            False
   Instance name:            default_instance_name
   Graphical report dir:     deployment_report
   Versions:
      Blueprint processor:   12.1.0.5, 10-Oct-2012
      Cloud protocol:        10001

16:19:18 INFO: Connecting to cloud: https://...
16:19:19 WARNING: No Resources specified in blueprint.  Nothing will be created
16:19:19 INFO: Creating blueprint instance named default_instance_name
Password:
...

この場合、ユーザーはパスワードの入力のみを求められます。別の例が第58.6.7.1.4項「例3: クラウド検索を使用したデフォルトの入力パラメータ」であげられており、ここでは固有関数を使用してデフォルト値の実行時検索を行っています。

58.6.2 Resourcesセクション

Resourcesセクションは、作成するクラウド・リソースの記述に使用されます。各リソースの記述は、一意の名前と次の属性を持ちます。

  • Container: 親クラウド・リソースのURI。

  • Type: クラウド・リソース・モデルで定義されているリソースのメディア・タイプ(第46章「クラウドのリソース・モデル」を参照)。(指定されたContainerがServiceTemplateのサブタイプであるリソースの場合、この値はオプションであり、ServiceTemplateのデフォルト・タイプであるとみなされます。)

  • Properties: クラウドのリソース・モデルごとに求められる値の指定に使用される一連の名前/値ペア。

作成するリソースごとに、指定する必要があるタイプ、親およびプロパティを把握して、その特性を指定する必要があります。詳細は、第46章「クラウドのリソース・モデル」を参照してください。

たとえば、JavaPlatformInstanceでは、次を指定する必要があります。

  • JavaPlatformTemplateのURIで表すコンテナ・リソース。(ニーズに最も適合するインスタンスを作成するテンプレートを選択します。)

  • クラウドのリソース・モデルで必要なプロパティ。JavaPlatformInstanceで必要なプロパティは次のとおりです。

    • Name

    • Zone (ゾーンのURI)

    ブループリントでは、JavaPlatformInstanceのリソース記述は次のようになります。

    MyJavaServer1:
        Container: 
          f_getTemplateURI:
            - Small WLS 
            - jaas
        Properties:
          name: Foo
          zone:
            f_getZoneURI:
            - Zone1
            - jaas
    

前述の例ではTypeが指定されていませんが、これは、コンテナがServiceTemplateのサブタイプである場合、オプションであるためです。メディア・タイプを明示的に指定した場合は、次の記述となります。

MyJavaServer1:
    Type: application/oracle.com.cloud.jaas.JavaPlatformInstance
    Container: 
    ...

この例では、固有関数f_getTemplateURIおよびf_getZoneURIを使用して、必要なURIを検索しています。リソース定義では、第58.6.7項「固有関数」で説明されている様々な関数にアクセスできます。リソース定義では、第58.6.5項「Macrosセクション」で説明されているユーザー定義マクロも使用できます。

58.6.3 Outputsセクション

Outputsセクションは、ブループリントの一連の出力の記述に使用されます。このリリースでは、出力は、正常なデプロイメントの最後に表示される情報を指定するためにブループリント作成者が使用します。たとえば、ブループリント作成者はJavaPlatformInstanceにデプロイされたアプリケーションのURLを表示する出力を定義する場合があります。各出力の記述には一意の名前とValueという必須の属性が1つあります。この属性は、通常はブループリントをインスタンス化するユーザーが注目する値を導出するブループリント式を指定します。(各出力定義に対して、Description属性を含めることもできます。)

次のOutputsセクションでは、表示する1つの出力を指定しています。

Outputs:
  Application_URL:
    Description: URL of the deployed app
    Value:
      f_getResourceAttr:
        - MyApp
        - http_application_invocation_url

この例では、出力定義にf_getResourceAttr固有関数を使用して、新規作成されたApplicationInstanceDeploymentのhttp_application_invocation_url属性を取得します。(この属性の詳細は、第46章「クラウドのリソース・モデル」を参照してください。)

58.6.4 Dataセクション

Dataセクションには任意のYAMLテキストが含まれます。このセクションで定義されたデータは、固有関数よるアクセスが可能で、ブループリントのデプロイメントに際して様々な方法で使用されます。たとえば、ブループリント作成者は、名前付きリテラルの概念を使用してブループリントの可読性および管理性を向上させることができます。ブループリント作成者は、解読できないURIなどの長いリテラル値のかわりに、説明的で簡潔な名前を使用できます。また、ブループリントで使用される値の変更の必要性を予測することもでき、この場合、値はDataセクションで1回指定して、ブループリント全体で参照されるようにすることができます。

次のブループリントの抜粋は、データソース・リソース定義で後で参照される長いJDBC接続文字列である、db_conn_strという名前のアイテムを含むDataセクションを示しています。

Data:
  db_conn_str: 'jdbc:oracle:thin:sysman/sysman@hostname.zzz.com:15044:smay16'
Resources:
  ...
  MyDatasource:
    Type: application/oracle.com.cloud.jaas.DataSource
    ...
    Properties:
      name: jbTest
      jdbc_driver: oracle.jdbc.OracleDriver
      database_type: Oracle
      database_connect_string: 
        f_path: 
          - Data.db_conn_str
      ...

58.6.5 Macrosセクション

ブループリントで使用される表記は冗長になる場合があります。繰り返し実行する構成メンバーの順序がある場合、マクロ展開を使用してブループリントの可読性を改善できます。Macrosを使用すると、ロジックのカプセル化も可能になり、セクション内の1箇所の変更をドキュメント全体に反映できます。Macrosセクションは、ブループリント内の別の場所から呼び出されて展開されるマクロの定義に使用します。マクロの呼出しは、関数の呼出しが可能な場所であればどこでも可能で、実際に表記は同一であり、呼び出されるのが固有関数であるかマクロであるかは判別できません。(このように、マクロを使用して固有関数を上書きできます。また、一部のオラクル社提供の固有関数はマクロとして実装されています。)

各マクロ定義は一意の名前を持ち、この定義により次の2つの値が指定されます。

  • 使用される引数の数。

  • マクロ展開のテキスト表現。

マクロが呼び出されると、そのテキスト表現がかわりに実行されます。テキスト表現でarg_<integer>の値が指定されている場合、その引数の値がかわりに使用されます。

次のブループリント(若干現実的ではありませんが)について考えます。

Macros:
  # Return a string that describes a resource being created 
  # The one argument is a 'name' string
  f_myDescriptiveName:
    - 1
    - f_concat:
      - "Resource "
      - arg_1
      - " created for blueprint instance "
      - f_path:
        - "Info.instance_name"
      - " on "
      - f_path:
        - "Info.date"
Resources:
  MyJavaServer:
    Container: 
      f_getTemplateURI:
        - Small WLS 
        - jaas
    Properties:
      name: 
        f_myDescriptiveName:
          - MyFirstJavaServer
      zone:
        f_getZoneURI:
        - Zone1
        - jaas
Outputs:
  NameOfServer:
    Value: 
      f_path:
        - "Resources.MyJavaServer.Properties.name"

Macrosセクションでは、f_myDescriptiveNameという1つのマクロが定義されおり、このマクロは1つの文字列引数を持ち、説明的な情報を付加することでより長い文字列を構成します。このマクロは、MyJavaServerリソース定義の一部として呼び出されます。これはMyFirstJavaServerという値を使用して呼び出され、nameプロパティ値がResource MyFirstJavaServer created for blueprint instance myQAInstance on 5/9/2012であるリソースが作成されます。

Blueprint Processor - Invocation Summary
----------------------------------------
   Cloud URI:                https://...
   User:                     sysman
...
13:32:22 INFO:
13:32:22 INFO: Output values specified: 1
13:32:22 INFO:    Value of NameOfServer: Resource MyFirstJavaServer created for
 blueprint instance myQAInstance on 5/9/2012
...

58.6.6

ブループリントは、式を使用してデプロイ時に値を計算します。多くの場合、式は単純なリテラル文字列値で、user_name属性(値はapp_user)などが相当します。その他の場合、値はユーザー定義マクロ(第58.6.5項「Macrosセクション」を参照)および固有関数(第58.6.7項「固有関数」を参照)により導かれます。

2つの固有関数f_pathおよびf_evalが、次の2つのタイプの式文字列を評価するために提供されています。

  • パス式

  • eval (またはブループリント)式

これらの式タイプについて、以降で説明します。これらは、f_pathおよびf_evalのコールに使用できるだけではなく、ブループリント・デバッガでも使用できます。

58.6.6.1 パス式

パス式は、JSONPath [JSONpath]およびXPath式と類似しており、ブループリントやクラウドからの値の抽出や、他のリソースにリンクするURIのトラバースに使用されます。パス式評価の開始点は、通常はインメモリーのブループリントです。これには、ブループリントのすべての情報に加え次の属性が含まれていることを再確認してください。

  • Cloud: 第46章「クラウドのリソース・モデル」で定義されているクラウド・リソースであり、クラウド全体を表す属性およびその他のすべての(アクセス権を持つ)クラウド・リソースへのトラバースを可能にする属性を持ちます。

  • Info: 実行時に参照する情報が含まれるセクションで、ブループリントの処理が開始されたときに指定されたインスタンス名、現在の日付などの情報、およびその他のブループリント・プロセッサにより計算された値(エンド・ユーザーが指定した入力パラメータや、リソースが作成されたときのそのリソースのURIなど)が含まれます。

これらのすべての情報には、パス式を使用してアクセスできます。この項の以降では、構文およびセマンティックの概要を示し、例をあげて説明します。前述の項でも説明しましたが、f_path固有関数はパス式を評価する1つの手段を提供します。後続の例では、別のメカニズムであるブループリント・デバッガを使用しています(詳細は第58.9項「ブループリント・プロセッサを使用したデバッグ」を参照)。後で説明しますが、これを使用してブループリントの実行時データの内容を調査できるだけでなく、クラウドの内容も調査できます。以降の説明では、<doc>は演算子が機能するYAMLデータ構造を指します。

次の例について説明します。Cloud.zones.elements[0]

実行時のブループリントのCloud属性値が最初の<doc>です。.zonesのドット演算子がその<doc>に適用され、新しい<doc>が生成され、その値は最初の<doc>のzones属性の値となります。多くの例をあげて、演算子の使用方法を示します。

58.6.6.2 演算子の概要

  • ドット演算子(メンバーを指定): <doc>.<name>:前述の例で説明されているように、ドット演算子はドキュメントから値を選択します。<doc>に<name>という属性が存在する場合、<name>の値が返されます。それ以外の場合、式の評価は失敗します。

  • 角カッコ(リストの索引付け): <doc>[<integer>]: <doc>が値のリストである場合、<integer>番目の要素の値が返されます。それ以外の場合、式の評価は失敗します。索引付けはゼロが基点です(最初の要素は<doc>[0]と指定されます)。

  • ドル記号(リテラル文字列接頭辞): <doc> $ <string>: 文字列リテラルを使用してパス式を開始するには、$接頭辞を使用します。次に例を示します。

    $"/em/cloud/jaas/zone/A1B44A4EBCC4563125D9D0A3AAE4FD51" ->

    前述の例では、特定リソースのURIが既知であり、矢印演算子を使用してその内容を表示します。

    この構文は、パス式の開始部分でのみ有用ですが、全体のパス表記と一貫性を保つために、$演算子はパス式の任意の場所に配置できます。その他のパス式演算子は、左側の<doc>で動作します。$演算子は、単に左側の値を右側のリテラル文字列で置き換えます。

    つまり、$演算子はリテラル文字列値を返します。右側のオペランドがリテラル文字列ではない場合、式の評価は失敗します。

  • 矢印(URIトラバース): <doc> ->: <doc>がURIである場合、識別されたリソースにトラバースして、そのドキュメントを返します。つまり、<doc>で指定されたURI上でGETを実行します。<doc>がURIではない場合や、GETが失敗した場合、式の評価は失敗します。

    たとえば、次のパス式があるとします。

    Cloud.zones.elements[0].uri->

    矢印演算子の左側の式は、ゾーンのURIを返します。矢印演算子は、ゾーンへのトラバースに使用され、URI上でGETを実行して内容を表示します。

    context_id: A1B44A4EBCC4563125D9D0A3AAE4FD51
    description: Zone for Physical Pool
    media_type: application/oracle.com.cloud.jaas.Zone+json
    name: Zone1
    resource_state:
      state: READY
    service_family_type: jaas
    service_instances:
      elements: []
      media_type: application/oracle.com.cloud.common.ServiceInstance+json
      total: '0'
    uri: /em/cloud/jaas/zone/A1B44A4EBCC4563125D9D0A3AAE4FD51
    

    ほとんどの場合、トラバース演算子だけで十分ですが、トラバース修飾子の指定も可能です。具体的には、メディア・タイプやリクエスト・パラメータを指定できます。これらはオプションであり、角カッコで囲みます。複数の修飾子をカンマで区切って指定できます。メディア・タイプを指定するには、文字列を使用します(一重引用符または二重引用符で囲む)。

  • リクエスト・パラメータを指定するための次の2つのスタイルがあります。

    • Identifier

    • Identifier = quotedValue

    全体では、トラバース修飾子には次の3つの種類があります。

    • quotedValue:

      メディア・タイプ

    • Identifier:

      値を持たないリクエスト・パラメータ

    • Identifier = quotedValue

      値を持つリクエスト・パラメータ

たとえば、次のパス式はURIをトラバースし、3つの修飾子(メディア・タイプおよび2つのリクエスト・パラメータ)を指定しています。

Cloud.uri->
["application/oracle.com.cloud.common.ServiceTemplateFinds+json", filters='{"filters": {"service_family_type":"jaas"}', name]

最初のパラメータは、第46章「クラウドのリソース・モデル」で説明されているクラウドによるフィルタ/問合せ処理のリクエストに使用するメディア・タイプです。残りの2つは、第46章「クラウドのリソース・モデル」で説明されているリクエスト・パラメータです。2番目はfiltersという名前で、実行するフィルタ処理を指定する値を持ちます(JSON文字列として表現)。最後はnameという名前で、値は持ちません。これは、name属性を返すことを指定しています。

58.6.6.3 例: Infoのすべての値の表示

前述のように、Infoセクションには、ブループリントの構成に役立つ環境情報が含まれています。この例は、現在Infoセクションで利用可能な値を表示する方法を示しています。一意の名前を構成するために使用可能な値を見つけるとします。ブループリント・プロセッサを実行して、デバッグ・モードに入ります。(このことは、コマンドライン上で-Iを指定することによって実行できます。)

C:\Users\jabauer\Dropbox\Code\blueprints>bp_processor.py helloWorld.yml

-c https://xyxy.example.com:15430/em/cloud -u sysman -p sysman -I ...

Blueprint Processor - Invocation Summary
----------------------------------------
   Cloud URI:                https://xyxy.example.com:15430/em/cloud
   User:                     sysman
   Blueprint file:           helloWorld.yml
...

...Pause point, prior to Input processing...
For command info, enter (h)elp

Paused: Info
date: 1/11/2013
date_suffix: '1_11_2013'
instance_name: default_instance_name
time: '16:47:7'
time_suffix: '16_47_7'
uuid: 81dcaf6895fa4fb881e82d1c16ef7025

ここで、Infoセクションに6個の値が格納されていることがわかります。uuidという名前の値は、一意の16進文字列です。time_suffixは十分に一意であり、より可読性が高いため、これを使用すると役立つ場合があります。このドキュメントの記述時点からブループリント・プロセッサの出荷までの間に、より多くの値が追加される可能性があるため、この手法を使用して、使用しているバージョンで利用可能な値を確認できます。

58.6.6.4 例: ブループリント値の表示

次で始まるブループリントがあるとします。

Inputs:
  DbPassword:
    Type: String
    DefaultValue: welcome1
    Prompt: Password to use for db
    Sensitive: True

ブループリント・プロセッサを実行し、-RIなどのコマンドライン・オプションを指定して、InputsおよびResourcesセクションの処理の前に一時停止するとします。

...Pause point, prior to Input processing...
For command info, enter (h)elp

Paused: Inputs.DbPassword
DefaultValue: welcome1
Prompt: Password to use for db
Sensitive: true
Type: String

前述の最初の一時停止ポイントで、式Inputs.DbPasswordを入力して、ブループリントで指定した属性があることを確認します。これには、DefaultValue、PromptおよびSensitiveが含まれています。入力処理がまだ実行されていないため、Valueという名前の属性は含まれていなことに注意してください。

Paused: c
...continuing...

Input Parameter Value Entry
---------------------------
   Password to use for db (welcome1):

...Pause point, prior to processing Resources section...
For command info, enter (h)elp

Paused: Inputs.DbPassword.Value
welcome1

Paused: Inputs.DbPassword
DefaultValue: welcome1
Prompt: Password to use for db
Sensitive: true
Type: String
Value: welcome1

次に、cを入力して続行し、パスワードの入力が求められます。パスワードを入力しますが、Sensitiveを指定しているため、その内容は画面に表示されません。次に2番目(Resourcesセクションを処理する前)の一時停止ポイントに到達します。Inputs.DbPassword.Valueと入力してパスワードの値を確認し、次にInputs.DbPasswordと入力して、DbPassword入力パラメータのすべての属性の値を確認します。

58.6.6.5 例: クラウドの参照

パス式により、クラウド内のリソースの内容およびその属性を表示する簡単な方法も提供されます。その理由は、ブループリント処理の最初で、クラウド・リソース(第46章「クラウドのリソース・モデル」で定義)が読み取られ、インメモリーのブループリント構造に配置されるためです。パス式をCloudから開始することによって、Cloudリソースの属性を参照でき、URIを介してアクセス権を持つ他の任意のリソースに移動できます。

初めに、接続しているクラウドのdescriptionを表示します。

Paused: Cloud.description
This represents the Cloud resource of the Oracle Enterprise Manager Cloud Management solution
Paused

ここで、クラウドのzones属性など、より有用な情報を表示します。

Paused: Cloud.zones
elements:
- media_type: application/oracle.com.cloud.jaas.Zone+json
  name: Zone1
  service_family_type: jaas
  uri: /em/cloud/jaas/zone/A1B44A4EBCC4563125D9D0A3AAE4FD51
- description: Zone for Physical Pool
  media_type: application/oracle.com.cloud.common.DbZone+json
  name: Zone1  type: self_service_zone
  uri: /em/cloud/dbaas/zone/A1B44A4EBCC4563125D9D0A3AAE4FD51
- media_type: application/oracle.com.cloud.opc.OpcZone+json
  name: OPC Zone
  service_family_type: opc
  type: opc
  uri: /em/cloud/opc/opczone
media_type: application/oracle.com.cloud.common.Zone+json
total: '3'

ここで、zones属性には、elements、media_typeおよびtotalの3つの属性が含まれていることがわかります。これらの意味は、第46章「クラウドのリソース・モデル」で説明されています。

リストされている最初のzoneに注目するために、角カッコ(リストの索引付け)構文を使用します。

Paused: Cloud.zones.elements[0]
media_type: application/oracle.com.cloud.jaas.Zone+json
name: Zone1
service_family_type: jaas
uri: /em/cloud/jaas/zone/A1B44A4EBCC4563125D9D0A3AAE4FD51

別のドット演算子を追加して、uri属性に注目するようにさらに詳細に指定できます。

Paused: Cloud.zones.elements[0].uri
/em/cloud/jaas/zone/A1B44A4EBCC4563125D9D0A3AAE4FD51 

URI参照先のリソースを表示するために、矢印(トラバース)演算子を追加します。

Paused: Cloud.zones.elements[0].uri->
context_id: A1B44A4EBCC4563125D9D0A3AAE4FD51
description: Zone for Physical Pool
media_type: application/oracle.com.cloud.jaas.Zone+json
name: Zone1
resource_state:
  state: READY
service_family_type: jaas
service_instances:
  elements: []
  media_type: application/oracle.com.cloud.common.ServiceInstance+json
  total: '0'
uri: /em/cloud/jaas/zone/A1B44A4EBCC4563125D9D0A3AAE4FD51

期待どおり、パス式を追加し続けることができ、たとえばマルチホップ式を記述して、次の例のように複数のURIをトラバースできます。

Paused: Cloud.service_templates.elements[0].uri->zones.elements[0].name
Zone1

Paused: Cloud.service_templates.elements[0].uri->zones.elements[0].uri->
context_id: A1B44A4EBCC4563125D9D0A3AAE4FD51
description: Zone for Physical Pool
media_type: application/oracle.com.cloud.jaas.Zone+json
name: Zone1
resource_state:
  state: READY
service_family_type: jaas
service_instances:
  elements: []
  media_type: application/oracle.com.cloud.common.ServiceInstance+json
  total: '0'
uri: /em/cloud/jaas/zone/A1B44A4EBCC4563125D9D0A3AAE4FD51

Paused: 

前述の例では、Cloudのservice_templates属性を使用して、最初のサービス・テンプレートを特定しています。次に、そのURIをトラバースしてテンプレートに到達し、そのサポートされているzoneのリストから最初のzoneを特定します。次に、そのURIをトラバースしてzoneの完全な定義に到達します。多くの場合、トラバース演算子だけで十分ですが、URIに対してデフォルトのメディア・タイプが定義されていない場合、第46章「クラウドのリソース・モデル」で指定されている、取得するメディア・タイプの指定が必要となる場合があります。次の例では、必須ではないものの、メディア・タイプを指定しています。

Paused: Cloud.service_templates.elements[0].uri->
["application/oracle.com.cloud.jaas.JavaPlatformTemplate"]

context_id: D2520A0CFFE348BCE040F20A4C1B2D8F
created: '2013-01-02 09:35:52.0'
default_instance_media_type:
application/oracle.com.cloud.jaas.JavaPlatformInstance+json
...

同様に、トラバース修飾子構文を使用して、第46章「クラウドのリソース・モデル」で定義されているリクエスト・パラメータを指定できます。たとえば、次のようになります。

Paused: Cloud.service_templates.elements[0].uri->[created, resource_state]
created: '2013-01-02 09:35:52.0'
resource_state:
  state: READY 

58.6.6.6 eval式またはブループリント式

eval (またはブループリント)式とは、ブループリントに含めることができる任意の式です。

例: 単純な固有関数評価

eval式は、eまたはevalコマンドを使用して、デバッガ内で評価されます。コマンドの入力後、式を構成する行を入力して、続いて空白行を入力します。f_concat固有関数を使用した実験を行うとします。

Paused: e
  Eval: f_concat:
  Eval:  - xxx
  Eval:  - yyy
  Eval:
xxxyyy
Paused:

f_concatのコール(3行)を入力すると、空白行を使用して式を終了させた後に値が出力されます。

次に別のコールをネストします。

Paused: e
  Eval: f_concat:
  Eval:  - xxx
  Eval:  - f_path:
  Eval:    - 'Inputs.DbPassword.Value'
  Eval:  - yyy
  Eval:
xxxmySecretyyy
Paused:

これは、ブループリントのスニペットで実験する方法を提供しています。

例: 検索固有関数

この例で、ブループリント内でf_getTemplateURIを使用して、テンプレートURIを検索するとします。

Resources:
  MyDB:
    Container: 
      f_getTemplateURI:
        - Small DB
        - dbaas 

誤ったURIが返されていると考えられる場合、次のようにチェックできます。

Paused: e
  Eval:       f_getTemplateURI:
  Eval:         - template1
  Eval:         - jaas
  Eval:
/em/cloud/jaas/javaplatformtemplate/BFAB458D36BDA87EE040E50A038F6D45
Paused: 

これは、入力した引数を使用したf_getTemplateURIにより返されたURIの値を示しています。

58.6.7 固有関数

固有関数は、必要な情報を計算するため、または返すためにブループリントで使用できる関数です。たとえば、f_concat関数は、その文字列引数の連結を返し、f_getZoneURI関数は、ゾーンのURIを検索して返します。固有関数は、通常はResourcesおよびOutputsセクションの一部として必要な値を提供するために使用しますが、リテラル値が許容されている任意の場所への配置が可能です。たとえば、固有関数を使用して、入力パラメータで使用するDefaultValueを導出できます。

この項では、現在使用可能な固有関数について説明します。

58.6.7.1 評価固有関数

次の2つの固有関数は、様々なタイプの式の評価に使用し、1つの値を返します。

58.6.7.1.1 f_path(pathExpr)

pathExpr文字列をブループリント・ドキュメントに適用して、指定した値を返します。

パラメータ

  • pathExpr: 例: member.subMember…

    トラバースしてドキュメントから情報を抽出する方法を示すパス式。第58.6.6.1項「パス式」を参照してください。

58.6.7.1.2 例: Dataセクションの値

ブループリントのDataセクションで定義されているリテラル値を使用してリソースのプロパティ値を指定するには、次のようにします。

...
  params: 
    MasterUser:
      f_deref:
        - "Data.QADBCreds.user"
...
58.6.7.1.3 例2: Inputsセクションの値

入力パラメータ値のみを使用して前述の操作と同じ操作を行うには、次のようにします。

...
  params: 
    MasterUser:
      f_deref:
        - "Inputs.my_param.value"
...
58.6.7.1.4 例3: クラウド検索によるデフォルトの入力パラメータ値

固有関数は、Resourcesセクション以外のセクションにも配置できます。たとえば、このブループリントは、Inputsセクションでのf_pathの使用を示しています。

Inputs:
  JavaSvcZone:
    DefaultValue: 
      f_path:
        - 'Cloud.zones.elements[0].name'
    Type: String
    Prompt: Enter the name of a jaas zone
...

ブループリント作成者は、ここで不定のデフォルト・ゾーン名を提供しようとしており、パス式はクラウドのzones属性の最初のゾーンを選択しています。デフォルト値(プロンプトで表示)は、実行時に計算されます。

Input Parameter Value Entry
---------------------------
   Enter the name of a jaas zone (east_coast_zone):
58.6.7.1.5 f_eval(blueprintExpr)

blueprintExprを評価して、指定された値を返します。ブループリント式の詳細は、第58.6.6.6項「eval式またはブループリント式」を参照してください。

パラメータ

blueprintExpr: ブループリント内で出現する場合と同じ、評価対象のYAMLテキスト

58.6.7.1.6 例(現実的でない)

f_eval固有関数は、ブループリント・プロセッサにより内部的に使用されますが、その使用が必要な場合はほとんどありません。(ブループリント式を直接使用します。)この関数を使用する1つの理由は、その値がYAML文字列形式のブループリント式である変数が存在する場合があるためです。

Data:
  demoOfYamlMultilineText: |
    This is a multi-
    line text string which is
    carefully indented. :-)
  myBlueprintExpressionText: |
    f_concat:
      - 'Mister '
      - 'Mxyzptlk'
Outputs:
  demoOfYamlMultilineText:
    Value:
      f_path: 
        - 'Data.demoOfYamlMultilineText'
  myBlueprintExpressionText:
    Value:
      f_path: 
        - 'Data.myBlueprintExpressionText'
  useOfEvalonExpressionText:
    Value:
      f_eval: 
        - f_path: 
          - 'Data.myBlueprintExpressionText'

これは、次の出力となります。

18:49:58 INFO: Output Processing
18:49:58 INFO: -----------------
18:49:58 INFO:
18:49:58 INFO: Output values specified: 3
18:49:58 INFO:    Value of demoOfYamlMultilineText: This is a multi-
line text string which is
carefully indented. :-)
18:49:58 INFO:    Value of myBlueprintExpressionText: f_concat:
  - 'Mister '
  - 'Mxyzptlk'
18:49:58 INFO:    Value of useOfEvalonExpressionText: Mister Mxyzptlk

58.6.7.2 リソース・アクセス固有関数

次の固有関数は、リソースの属性にアクセスするために使用します。これらの動作の一部として、f_pathとは異なり、リソースがREADY状態であることが確認され、必要な場合は待機します。

58.6.7.2.1 f_getResourceAttr(bpResName, pathExpr)

クラウド・リソースの状態がREADYになった後に、その属性を取得します。

パラメータ

  • bpResName: リソース名(ブループリントで指定)

  • pathExpr: f_derefで使用されている場合と同じセマンティックで、bpResNameにより識別されたクラウド・リソースのドキュメントに対してのみ使用します。

  • 戻り値: リソースが作成され、そのresource_stateがREADYになった場合の、リソースのpathExprの評価結果。

例1

MWプラットフォームにアプリケーションを追加するために、アプリケーション・リソースはこのContainer句を使用できます。

Container: 
  f_getResourceAttr: 
    - myJavaPlatform
    - uri

例2

MWプラットフォームが作成されたゾーンの名前にアクセスするために、次のように記述できます。

f_getResourceAttr: 
  - myPlatform
  - zone.name
58.6.7.2.2 f_getResourceURI(bpResName)

ブループリントで定義されたリソースのURIを取得します。これは、f_getResourceAttrの使用の簡略表現であり、指定される属性はuriです。

パラメータ

  • bpResName: ブループリント・リソース定義で使用されている名前。

  • 戻り値: URI

ブループリント内のいずれかの場所で作成されたJavaPlatformInstanceリソースに含めるデータソース・リソースを定義するには、次のようにします。

  MyDatasource:
    Type: Datasource
    Container: 
      f_getResourceURI:
        - MyJavaServer

58.6.7.3 検索固有関数

次の固有関数は、テンプレート、ゾーンまたはアプリケーション・コンポーネントを検索して、そのURIを返します。

58.6.7.3.1 f_getTemplateURI(name, type)

名前およびタイプに基づいて、テンプレートのURIを取得します。

パラメータ

  • name: テンプレートの名前

  • type: サービス・タイプ名。現在使用可能な値は、iaas、jaasおよびdbaasです。

  • 戻り値: URI

テンプレートsimpleDbを使用してデータベースを作成するためのブループリント・リソースは、次のように記述されます。

Container: 
  f_getTemplateURI:
    - simpleDb
    - dbaas
58.6.7.3.2 f_getZoneURI(name, type)

名前およびタイプに基づいて、ゾーンのURIを取得します。

パラメータ

  • name: ゾーンの名前

  • type: サービス・タイプ名。現在使用可能な値は、iaas、jaasおよびdbaasです。

  • 戻り値: URI

ゾーンEMEA_db_zoneのURIを取得するには、次のようにします。

  f_getZoneURI:
    - EMEA_db_zone
    - dbaas
58.6.7.3.3 f_getAppCompURI(name, owner, version) …

名前、所有者およびバージョンに基づいて、アプリケーション・コンポーネントのURIを取得します。

パラメータ

  • name: アプリケーション・コンポーネント名

  • owner: アプリケーション・コンポーネントの所有者

  • version: アプリケーション・コンポーネントのバージョン。空白の場合、最新のバージョンが使用されます。

  • 戻り値: URI

SSA_USER1が所有する最新バージョンのアプリケーション・コンポーネントjbcomponentのURIを取得するには、次のようにします。

  f_getAppCompURI:
    - jbcomponent
    - SSA_USER1
    -

3番目の引数は必須であることに注意してください。

58.6.7.4 デバッグ固有関数

次の固有関数は、ブレークポイントまたは出力ポイントの作成に使用します。

58.6.7.4.1

f_break(expression, [breakpointMessage])

ブループリントの評価を一時停止して、オプションのメッセージを出力し、ブループリント・デバッガに入ります。

パラメータ

  • expression: 任意のブループリント式

  • breakpointMessage: この固有関数が呼び出され、デバッガに入る前に出力されるメッセージ。

  • 戻り値: 式の値。これは、continueコマンドが入力されたときに計算されます。

注意: ブレークポイントを使用してブループリントのデバッグを支援する方法の例や詳細は、第58.9項「ブループリント・プロセッサを使用したデバッグ」を参照してください。

58.6.7.4.2 f_print(expression, [printpointMessage])

式の値を表示する行を出力します。ブループリントの評価を一時停止して、オプションのメッセージを出力し、ブループリント・デバッガに入ります。

パラメータ

  • expression: 任意のブループリント式

  • printpointMessage: この固有関数が呼び出され、デバッガに入る直前に出力されるメッセージ。

  • 戻り値: 式の値。

注意: 行は次のように出力されます。

>>> Printpoint [<printpoint message>]:

Value = <expression>

ブレークポイントを使用してブループリントのデバッグを支援する方法の例や詳細は、第58.9項「ブループリント・プロセッサを使用したデバッグ」を参照してください。

58.6.7.5 その他の固有関数

f_concat(string1, … stringN):

文字列引数を連結して返します。

パラメータ

string*: その他の文字列引数と連結する文字列

JavaPlatformInstanceの記述をCreated by blueprint FOO on <current date>に設定するには、次のようにします。

Resources:
  MyJavaServer:
    ...
    Properties:
      description: 
        f_concat:
          - "Created by blueprint FOO on "
          - f_path:
            - "Info.date"
    ...

58.7 エラーの処理

この項では、発生する可能性がある様々なタイプのエラーについて説明し、問題の解釈や解決の方法について説明します。

58.7.1 YAML構文エラー

YAMLパーサーにより検出されたすべての構文エラーは、パーサーにより診断されます。次のコード・スニペットについて考えてみます。

# Example of YAML syntax error
Data:
   userId: Lex
  password: changeMe
...

前述の例では、YAMLパーサーはインデント・エラーを検出し、次のように診断します。

18:55:59 ERROR: Error loading blueprint YAML:
while parsing a block mapping
  in "<string>", line 2, column 1:
    Data:
    ^
expected <block end>, but found '<block mapping start>'
  in "<string>", line 4, column 3:
      password: changeMe
      ^

通常、診断の後半のexpected部分が最も役立ちます。この場合、エラーがトークンpasswordで検出されたことを通知し、期待される内容と検出された内容が示されます。回避すべきよくあるエラーの1つは、YAMLファイル内でのタブの使用です。YAMLでは、タブ文字は使用できません。

58.7.2 プロトコル・バージョンの不一致

次のように診断されます。

Blueprint Processor - Invocation Summary
----------------------------------------
   Cloud URI:              http://xyxy.example.com:4473/em
   User:                   sysman
   Blueprint file:         examples/evalintrinsic.yml
   Timeout:                90 minutes, 0 seconds
   Refresh frequency:      15 seconds
   Inputs:
   Pause points:           Inputs, Termination
   Debug logging:          False
   Instance name:          default_instance_name
   Versions:
      Blueprint processor: 12.1.0.4 May 25
      Cloud protocol:      10001

19:05:06 INFO: Connecting to cloud: http://xyxy.example.com:4473/em
19:05:07 ERROR: Cloud protocol version mismatch.  Expected 10001.  Found None.

診断の太字部分は、ブループリント・プロセッサはサイトに接続できるが、期待されるレスポンスを得られなかったことを示しています。具体的には、サイトはHTTPレスポンスの一部としてのx-specification-version値を返しませんでした。これは、クラウドURIを誤って指定した場合に発生します。たとえば、前述の例では、URIが次の形式になっていません。

https://host:port/em/cloud

よくあるミスの1つが、/cloudの欠落です。また、httpではなくhttpsを使用することも忘れないでください。診断が、期待されるものより低いプロトコルのバージョンが検出されたことを示している場合、使用しているブループリント・プロセッサのバージョンは、より新しいバージョンのEnterprise Managerを必要としている可能性があること示しています。

58.7.3 式評価エラー

ブループリント処理の一環として、式を評価しようとしてエラーが発生する場合があります。次にエラーの例を示します。

  • 固有関数に渡しているパラメータの数が正しくない

  • 存在しない固有関数を参照している

  • 存在しないクラウド・リソース(ゾーンやテンプレートなど)を参照している

式評価のエラーが発生した場合、問題が診断されて式が表示されます。たとえば、次のブループリント(現実的ではありませんが)について考えます。

Outputs:
  ExampleValue:
    Value:
      f_concat:
        - MyApp

例を簡潔にするために、ブループリントにはOutputsセクションと、f_concatのコールである1つの式のみが含まれています。f_concatには少なくとも2つのパラメータが必要であるが、1つのみ指定されていることに注意してください。このブループリントに対してブループリント・プロセッサを実行すると、次が表示されます。

15:26:25  INFO: Output Processing
15:26:25  INFO: -----------------
15:26:25  INFO:
15:26:25  INFO: Output values specified: 1
15:26:25 ERROR:    Value of ExampleValue: Expression could not be evaluated. 
Error is...
15:26:25 ERROR: Function/macro concat requires parameter count between 2 and 99,
not 1
15:26:25 ERROR: Expression being evaluated at the time:
15:26:25 ERROR:    {'f_concat': ['MyApp']}
15:26:25  INFO:

ブループリント・プロセッサは、エラーの発生時にExampleErrorの値を出力しようとします。診断の表示後に、エラー発生時に評価された式が表示されます(JSON表記法を使用)。式は、通常はネストされており、サブ式内でエラーが発生する可能性があります。この場合、診断には式スタックが含まれ、エラーが発生した特定の式に加え、外側のコンテキストも確認できます。たとえば、次のブループリント(現実的ではありませんが)について考えます。

Outputs:
  ExampleValue:
    Value:
      f_concat:
        - aaa 
        - bbb
        - f_concat:
          - ccc

この式ではf_concatを2回使用していることに注意してください。外側は正しく使用されていますが、内側の使用に誤りがあります。このブループリントに対してブループリント・プロセッサを実行すると、次が表示されます。

15:42:50  INFO: Output Processing
15:42:50  INFO: -----------------
15:42:50  INFO:
15:42:50  INFO: Output values specified: 1
15:42:50 ERROR:    Value of ExampleValue: Expression could not be evaluated. 
Error is...
15:42:50 ERROR: Function/macro concat requires parameter count between 2 and 99,
not 1
15:42:50 ERROR: Expression evaluation stack follows (with failed expression at
bottom) ...
15:42:50 ERROR: -----
15:42:50 ERROR: |   Expr: {'f_concat': ['aaa', 'bbb', {'f_concat': ['ccc']}]}
15:42:50 ERROR: |   Expr: {'f_concat': ['ccc']}
15:42:50 ERROR: -----
15:42:50  INFO:

式評価スタックでは、上部に外側の式が表示され、下部に誤りがある式が表示されています。このスタックのレベルは2つのみですが、一般的には多くのレベルがあり、各レベルの評価が表示されます。(次の例は、複数レベルの式評価スタックを示しています。)マクロの評価時には、その定義が展開され、この展開が式評価スタックに表示されます。たとえば、次のブループリント(現実的ではありませんが)について考えます。

Outputs:
  ExampleValue:
    Value:
      f_getZoneURI:
        - myZone
        - jaas

この場合、式はf_getZoneURIのコールであり、ゾーンmyZoneが存在しないことがエラーになっています。このブループリントに対してブループリント・プロセッサを実行すると、次が表示されます。

15:57:17  INFO: Output Processing
15:57:17  INFO: -----------------
15:57:17  INFO:
15:57:17  INFO: Output values specified: 1
15:57:18 ERROR:    Value of ExampleValue: Expression could not be evaluated. 
Error is...
15:57:18 ERROR: Name not found: myZone
15:57:18 ERROR: find_one for predicate {'f_EQ': [{'f_pathc': ['name']}, 'myZone']}
failed
15:57:18 ERROR: Expression evaluation stack follows (with failed expression at
bottom) ...
15:57:18 ERROR: -----
15:57:18 ERROR: |   Expr: {'f_getZoneURI': ['myZone', 'jaas']}
15:57:18 ERROR: |   Expr: {'f_pathc': [{'f_findByName': [{'f_pathc': [{'
f_findByName': [{'f_path': ['Cloud.service_family_types.elements']}, 'jaas']},
 '.uri-.zones.elements']}, 'myZone']}, '.uri']}
15:57:18 ERROR: |   Expr: {'f_findByName': [{'f_pathc': [{'f_findByName': [{'
f_path': ['Cloud.service_family_types.elements']}, 'jaas']},
 '.uri->.zones.elements']}, 'myZone']}
15:57:18 ERROR: |   Expr: {'f_findOne': [{'f_pathc': [{'f_findByName': [{'f_path':
 ['Cloud.service_family_types.elements']}, 'jaas']}, '.uri->.zones.elements']},
 {'f_EQ': [{'f_pathc': ['name']}, 'myZone']}, {'f_concat': ['Name not found: ',
 'myZone']}]}
15:57:18 ERROR: -----
15:57:18  INFO:

エラーが検出されると、診断にName not found: myZoneと表示されます。この場合は、明白なエラーであるため、さらに読み進める必要はありません。

ただし、式評価スタックでマクロの展開や複数レベルでネストされた式がどのように示されるかを説明するために、引き続きこの例を順を追って検討します。スタックの1行目には、外側の式が示されていますが、これは、ブループリントでValueの式として指定されたものです。f_getZoneURI固有関数はマクロとして実装されているため、式評価スタックの2行目にはマクロの展開後の式が表示されています。(これは長いため、行の折り返しが必要です。)

3行目には、エラー発生時に評価された2行目のサブセットが表示され、4行目にはf_findByNameマクロが展開された後の同じ式が示されています。


注意:

固有関数マクロではいくつかの内部関数が使用されているため、f_pathcなどの名前が表示されています。

58.7.4 クラウド・リソース作成エラー

前述の例では、リソース作成の失敗は、リクエストが受け入れられてから、一定時間の経過後に検出されています。場合によっては、作成リクエストがただちに失敗することがあります。リソース作成の試行時にエラーが発生した場合、リソース、エラー・コードおよびいくつかの診断テキストが特定された診断が表示されます。 次の例では、MyJavaPfという名前のリソース作成の試行が、HTTPコード500で失敗しています。さらに読み進めると、"cannot process request for …"、"Unable to start the Instance deployment"および"stack_trace_cause" : "java.lang.IllegalArgumentException: Unable to service executable from service template…"などの診断テキストを確認できます。

14:43:37 INFO:          MyJavaPf
14:43:37 INFO:         /
14:43:37 INFO:        /    MyDatasource
14:43:37 INFO:       /    /
14:43:37 INFO:   -----------
14:43:37 INFO:   | e  |    |
14:43:38 INFO:   | es |    |
14:43:42 ERROR: Failure creating resource MyJavaPf: 500
{
  "messages" :
  [
      {
        "date" : "2012-05-22T18:43:42+0000" ,
        "text" : "cannot process request for
 oracle.sysman.emInternalSDK.ssa.cloudapi.ResourceInteraction@767d6a37 on
 /em/cloud/jaas/
javaplatformtemplate/C086733BCCF2A4F3E040F10A716049A8" ,
        "hint" : " Unable to start the Instance deployment" ,
        "stack_trace_cause" : "java.lang.IllegalArgumentException: Unable to
 service executable from service template : C086733BCCF2A
4F3E040F10A716049A8\n\tat
 oracle.sysman.ssa.mwaas.model.util.remoteop.DPSubmissionHelper.
_createRequestMWaasSetup(DPSubmissionHelper.
java:359)\n\tat oracle.sysman.ssa.mwaas.model.util.remoteop.DPSubmissionHelper.
_submitMWaasSetupServiceRequest(DPSubmissionHelper.
java:616)\n\tat
oracle.sysman.ssa.mwaas.model.util.remoteop.DPSubmissionHelper.submitMWaasSetupSe
rviceRequest(DPSubmissionHelper.
java:712)\n\tat
oracle.sysman.ssa.cloudapi.jaas.JavaPlatformInstance.GenerateJavaPlatformInstance
(JavaPlatformInstance.java:369)\n\tat 
oracle.sysman.ssa.cloudapi.jaas.JavaPlatformTemplate.processRequest(JavaPlatformTemplate.java:128)\n\tat oracle.sysman.ssa.cloudapi.jaas.J
aasServiceProvider.processRequest(JaasServiceProvider.java:520)\n\tat
 oracle.sysman.emInternalSDK.ssa.cloudapi.EMCloudServlet.perform
(EMCloudServlet.java:226)\n\tat
oracle.sysman.emInternalSDK.ssa.cloudapi.EMCloudServlet.performPost
(EMCloudServlet.j" ,
        "stack_trace" :
 "oracle.sysman.emInternalSDK.ssa.cloudapi.CloudServiceException:  Unable to start
 the Instance deployment\n\t
at
oracle.sysman.ssa.cloudapi.jaas.JavaPlatformInstance.GenerateJavaPlatformInstance
(JavaPlatformInstance.java:373)\n\tat oracle.sysm
an.ssa.cloudapi.jaas.JavaPlatformTemplate.processRequest(JavaPlatformTemplate.
java:128)\n\tat oracle.sysman.ssa.cloudapi.jaas.JaasSer
viceProvider.processRequest(JaasServiceProvider.java:520)\n\tat
 oracle.sysman.emInternalSDK.ssa.cloudapi.EMCloudServlet.
perform(EMCloudServlet.java:226)\n\tat
oracle.sysman.emInternalSDK.ssa.cloudapi.EMCloudServlet.performPost
EMCloudServlet.java:363)\n\tat oracle.
sysman.emInternalSDK.ssa.cloudapi.rest.AbstractRestServlet.doPost(AbstractRestServ
let.java:134)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:727)\n\tat
 javax.servlet.http.HttpServlet.service(HttpServlet.java:820)\n\tat
 weblogic.servlet.internal.
StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)\n\tat
 weblogic.servlet.internal.StubSecurityHe"
      }
  ]
}

14:43:42 INFO:   | CF |    |
14:43:42 INFO:   -----------
14:43:42 INFO:
14:43:42 ERROR: Create of resource MyJavaPf failed

この例では、HTTPコードは500です。5で始まるすべてのコードは、クラウド・サーバーで予期しない例外が発生したことを示しています。これは、環境の問題またはサーバー・ソフトウェアのバグが原因と考えられます。5xxコードはサーバー・エラーを示しているため、セルフ・サービスの管理者に連絡する必要があります。その他に、4xxエラー・コードが表示される場合があり、これはクライアントでエラーが発生している可能性があるときに返されます。このような場合、hintおよびmessage情報をチェックして、問題の発生箇所に関する手掛かりを得ると、発生したエラーを修正できる可能性があります。ブループリント・プロセッサは、受信した診断情報をリスト表示しますが、セキュリティ上の理由から、クラウド・サーバーは問題を診断するための十分な情報を提供しない場合があります。この場合、セルフ・サービスの管理者に連絡すると、管理者はそれを受けて、クラウド・リクエストのログ・ファイルを確認して問題を診断できます。

58.8 シミュレーション・モード

ブループリント・プロセッサのシミュレーション・モードは、ブループリントの作成やテストを支援するために使用されます。このモードでは、通常はクラウド・サーバーに送信されるリクエストがシミュレーションされ、サーバーから返される結果もシミュレーションされます。その他の点では、ブループリントの処理ロジックは変わりません。ブループリント・プロセッサをこのモードで実行するには、クラウドURIを指定しないようにします(つまり、コマンドラインで-cオプションを使用しません)。

シミュレーション・モードの利点の1つは、ブループリントを実行してバリエーションを試す速度にあります。ブループリントの通常の実行では、クラウド・リクエストが必要ですが、この処理にかなりの時間を要する場合があります。シミュレーション・モードのデフォルト動作は、各リソースの作成リクエストに2秒を費やしてから成功します。もう1つの利点は、様々な可能性をテストできることです。リソースごとに、シミュレーションされる処理時間を指定し、リクエストが成功するか失敗するかも指定できます。所定のリソースでこれを実行するには、リソースの定義時にSimulation属性を使用します。たとえば、次のようになります。

  MyJavaServer1:
    Container: 
      f_getTemplateURI:
        - Small WLS 
        - jaas
    Properties:
      destination_zone:
        f_getZoneURI:
        - MyZone
        - jaas
      params: 
        user: app_user
        password: pw_you_should_change
    Simulation: 
       delay: 3
       result: f

前述の例では、MyJavaServer1の作成は3秒後に失敗します。

58.9 ブループリント・プロセッサを使用したデバッグ

ブループリントをデプロイして完了するためのブループリント・プロセッサの実行に加え、ブループリントをデバッグするために使用できるメカニズムがあります。これらは、他のアプリケーションのデバッグに使用していたメカニズムと同種のものであり、print文やデバッガを使用したアプリケーションで使用される値のインタラクティブな表示などがあります。実行の特定のポイントでデバッガに入るために、次の2つのメカニズムのいずれかを使用できます。単純な方法では、処理フェーズ間で実行の一時停止を引き起こすコマンドライン・オプションを使用しますが、通常はこれで十分です。これらは一時停止ポイントと呼ばれ、後述します。もう1つの方法は、特定のリソースのプロパティの式評価の直前など、具体的なポイントで中断できるようにすることです。これを行うには、ブループリントを編集してブレークポイントを含めます。一時停止ポイントまたはブレークポイントのいずれかに達すると、制御がデバッガに移されます。デバッガでは、様々なコマンドを入力して、ブループリントの内容や接続先クラウドの内容を表示します。

58.9.1 中間結果の出力

ブループリント処理の本質は、式を評価することと、必要なすべての式を評価した後にリソースを作成することです。式評価の任意のポイントでいくつかの中間結果を表示して、値が期待どおりであることを確認できます。これを行うには、固有関数f_printを使用します。

ブループリント内の式が出現する任意のポイントで、これを出力のコール内でネストします。2番目のテキスト・メッセージ引数を含めることもできます。出力時には、テキスト・メッセージと式の値が出力されます。

この(現実的でない)例では、f_getTemplateURIのコールに使用するテンプレート名にアクセスするために、参照表の使用をどのように計画するかを示しています。

Data:
  MyTemplates:
  - {name: DbTemplate, type: dbaas}
  - {name: MWTemplate, type: jaas}
...
Resources:
  MyDB:
    Container: 
      f_getTemplateURI:
        - f_path: 
           - 'Data.MyTemplates[0].name'
        - dbaas
    Properties:
...

コードが意図したとおりに動作していないため、名前をf_ getTemplateURIに渡す前の中間結果が表示されるようにするとします。次のように、f_printのコール内に式をラップします。

Data:
  MyTemplates:
  - {name: DbTemplate, type: dbaas}
  - {name: MWTemplate, type: jaas}
...
Resources:
  MyDB:
    Container: 
      f_getTemplateURI:
        - f_print: 
          - f_path:
             - 'Data.MyTemplates[0].name'
        - dbaas
    Properties:
...

At runtime, the value of the expression is printed:16:52:05  INFO:
16:52:05  INFO: Resource State Timeline
16:52:05  INFO: -----------------------
...
16:52:05  INFO:
16:52:05  INFO:        MyDB
16:52:05  INFO:       /
16:52:05  INFO:   ------
16:52:05  INFO:   | e  |
>>> Print-point:
    Value = DbTemplate
...

出力ポイント・メッセージを指定することもでき、このことは、ブループリント内に複数の出力ポイントがある場合に便利です。

Data:
  MyTemplates:
  - {name: DbTemplate, type: dbaas}
  - {name: MWTemplate, type: jaas}
...
Resources:
  MyDB:
    Container: 
      f_getTemplateURI:
        - f_print: 
          - f_path:
             - 'Data.MyTemplates[0].name'
          - My printpoint for template name
        - dbaas
    Properties:
...

実行時に、式の値が次のように出力されます。

16:52:05  INFO:
16:52:05  INFO: Resource State Timeline
16:52:05  INFO: -----------------------
...
16:52:05  INFO:
16:52:05  INFO:        MyDB
16:52:05  INFO:       /
16:52:05  INFO:   ------
16:52:05  INFO:   | e  |
>>> Print-point: My printpoint for template name
    Value = DbTemplate
...

58.9.2 一時停止ポイント

一時停止ポイントの使用は、デバッガに入るポイントを指定する最も簡単な方法です。これらは、第58.3項「ブループリント・プロセッサの実行」で説明されているコマンドライン・オプションを使用して指定します。次のすべてのポイントで、ブループリント・プロセッサが一時停止してデバッガに入るように指定できます。

  • Inputセクションの評価および入力パラメータの入力要求の前

  • Resourcesセクションの評価前

  • Outputセクションの評価前

  • 終了前、ただし出力処理後または処理を終了させるエラーの検出後

  • エラーが発生した場合、終了の直前

デバッガに入ったら、後述の第58.9.4項「デバッガ・コマンド」で説明されているコマンドを使用できます。ブループリントの実行を続行するには、continueコマンドを実行します。

Example1

サーバーのクラウド・リソースを参照するとします。–Iオプションを指定すると、ブループリント処理が試行される前にデバッガに入ります。

例2

-E (または—error_debug)オプションを指定すると、エラーの発生時にデバッガに入るため、多くの場合便利です。(それ以外の場合、実行は単純に終了します。)

58.9.3 ブレークポイント

ブレークポイントは、第58.6.7.4項「デバッグ固有関数」で説明されているf_breakpoint固有関数を使用して定義されます。評価中にf_breakpointが呼び出された場合は、オプションのテキスト文字列パラメータ値が出力され、デバッガに入ります。

58.9.4 デバッガ・コマンド

デバッガに入ると、Pausedプロンプトが表示されます。このプロンプトで、helpやhなど、数種類のコマンドを使用できます。たとえば、次のようになります。

Paused: h
Commands are...
   p[ath] <path expression>: evaluate path expr
   e[val]:                   read & evaluate blueprint expression
   c[ontinue]:               continue blueprint instantiation
   x[it]:                    exit blueprint processor
   h[elp]:                   (this command)
If first token isn't a command, the line is treated as a path expression
Paused:

58.9.4.1 pathコマンド

pathコマンドは、前述の第58.6.6.1項「パス式」で説明されている任意のパス式の評価に使用します。(その他のデバッガ・コマンドとは異なり、pまたはpathキーワードは不要です。)

例: ブループリント内の値の表示

入力パラメータの値など、ブループリント内の値を表示できます。

C:\bp> bp_processor.py -c https://...:15430/em/cloud -u sysman -p sysman -R
xyzApp.yml ...Blueprint Processor - Invocation Summary
----------------------------------------
   Cloud URI:                https://xyxy.example.com:15430/em/cloud
   User:                     sysman
   Blueprint file:           xyzApp.yml
   Timeout:                  90 minutes, 0 seconds
   Refresh frequency:        15 seconds
   Inputs:
   Pause points:             Resources
   Debug logging:            False
   Instance name:            default_instance_name
   Graphical report dir:
   Versions:
      Blueprint processor:   12.1.0.5, 10-Oct-2012
      Cloud protocol:        10001

18:28:14  INFO: Connecting to cloud: https://xyxy.example.com:15430/em/cloud

Input Parameter Value Entry
---------------------------
   Zone to use for db (Zone1):
   Password to use for db (welcome1):

...Pause point, prior to processing Resources section...
For command info, enter (h)elp

Paused: path Inputs
DbPassword:
  DefaultValue: welcome1
  Prompt: Password to use for db
  Sensitive: true
  Type: String
  Value: mySecret
DbZone:
  DefaultValue: Zone1
  Prompt: Zone to use for db
  Type: String
  Value: Zone1

Paused: Inputs.DbPassword.Value
mySecret

Paused:

前述の例では、単純なテスト用ブループリントで2つの入力パラメータ、DbZoneとDbPasswordが指定されています。

  • 入力を要求されたら、[Enter]を押して最初のパラメータのデフォルトをそのまま使用します。2番目については、自分のパスワードを入力します。

  • コマンドライン・オプションには-Rが含まれていることに注意してください(このコマンドは、ブループリント・プロセッサがブループリントのResourcesセクションの評価前に一時停止するように指示します)。Pausedプロンプトが表示され、pathコマンドおよびパス式Inputsを入力します。ブループリントのInputsセクションの値、つまり2つの入力パラメータとその値が出力されます。値には、ブループリントで指定されているものと、現在の実行時の値の両方が含まれています(この場合はZone1mySecret)。

  • 次に、パス式のみを入力します。コマンドが明示的に入力されていない場合、pathコマンドが想定されます。

58.9.4.2 continueコマンド

continueコマンドは、ブループリント処理の再開に使用します。例

前述の例を続けて使用します。

Paused: Inputs.MyNum
{Sensitive: true, Type: Number, Value: '123'}

Paused: continue

58.9.4.3 exitコマンド

exitコマンドは、ブループリント・プロセッサを終了します。

58.9.4.4 evalコマンド

evalコマンドは、ブループリントに含めることができる任意の式の評価に使用します。

ブループリントのデバッグを行っており、名前によるテンプレートの検索時に失敗している可能性があるとします。evalコマンドを使用して、ブループリント内に出現する式を評価できます。初めに、対象の式をブループリントに表示されているとおりに実行してみます。

Paused: e
  Eval: f_getTemplateURI:
  Eval:   - JaaS Template
  Eval:   - jaas
  Eval:
18:05:01 ERROR: Name not found: JaaS Template
Expression evaluation stack follows (with failed expression & diagnostic at
bottom) ...
-----
|   Expr: {'f_getTemplateURI': ['JaaS Template', 'jaas']}
|   Expr: {'f_path': [{'f_findByName': [{'f_path': [{'f_findByName': [{'f_path':
['Cloud.service_types.elements']}, 'jaas']}, '.uri->
.service_templates.elements']}, 'JaaS Template']}, '.uri']}
|   Expr: {'f_findByName': [{'f_path': [{'f_findByName': [{'f_path':
['Cloud.service_types.elements']}, 'jaas']}, '.uri->.service
_templates.elements']}, 'JaaS Template']}
|   Expr: {'f_findOne': [{'f_path': [{'f_findByName': [{'f_path': ['Cloud.service
_types.elements']}, 'jaas']}, '.uri->.service_
templates.elements']}, {'f_EQ': [{'f_path': ['name']}, 'JaaS Template']}, 
{'f_concat': ['Name not found: ', 'JaaS Template']}]}
| End of stack for error message: Name not found: JaaS Template
-----
Paused: 

前述の例では、初めにevalまたはeコマンドを入力します。次に、式を入力します。YAMLでは常にインデントが重要であることに注意してください。ブループリントを処理したときに得られた診断と同じ診断が表示されますが、ここでは他の値を使用して実験できます。最終的に、テンプレートはその名前に2つのスペースを使用して作成されたことがわかりました。その名前で試してみます。正しく動作して、式評価の結果(この場合はURI)が表示されます。

Paused: e
  Eval: f_getTemplateURI:
  Eval:   - JaaS  Template 
  Eval:   - jaas
  Eval:
/em/cloud/jaas/javaplatformtemplate/C086733BCCF2A4F3E040F10A716049A8
Paused:

58.10 アドバイスとヒント

この項では、ブループリントを使用するときに役立ついくつかのアドバイスやヒントを示します。

58.10.1 YAMLの編集: Notepad ++の例

YAMLドキュメントではインデントを使用して包含セマンティックを表します。これは、エディタまたは編集オプションの選択に影響を与えます。たとえば、YAMLではタブを使用できないため、自動タブ挿入の原因となるすべてのエディタ・オプションを無効にする必要があります。たとえば、Notepad++ (http://notepad-plus-plus.org)を使用するとします。スペースで置換する設定を、「環境設定」→「言語メニュー/タブ設定」から行います。Notepad++がさらに優れている点は、ファイルの接尾辞が.ymlである場合、YAMLに適切なオプションが自動的に設定されることです。たとえば、YAML構文に基づいて、テキストが色付けされます。.ymlを使用しない場合は、手動で言語をYAMLに設定できます。(「設定」→「環境設定」→「言語メニュー」→…)

58.10.2 YAML重複と名前/値ペア

YAMLでは、同じレベルの名前/値ペアで一意の名前を使用する必要があります。重複した場合、先に出現している方が上書きされます。たとえば、次の2つのブループリントは同等です。

Data:
  Password: doNotChangeMe
  UserId: QA_user
  Password: changeMe
Resources:
  ...

Data:
  UserId: QA_user
  Password: changeMe
Resources
  ...

58.10.3 明示的な依存関係

ブループリントで2つのリソース、XとYを定義するとします。Xの作成がYの正常な作成に依存している場合、2つの間には通常はデータの依存関係が生じます。ただし、これに該当しない場合、リソースXの定義の任意の場所に次のような式を含めることができます。

f_getResourceAttr:
- ResourceY
- uri

58.10.4 ヒント: -Tオプションの使用

ブループリントを作成およびテストするときは、-Tコマンドライン・オプションの使用をお薦めします。これは、ブループリント・プロセッサに、いかなる理由であっても終了する前にデバッガに入るように指示します。予期しない結果が生じた場合、それが明白なエラーであっても、単なる予期しない出力であっても、デバッガを使用して調査できます。

58.10.5 ヘルプ・フォーラム

その他の疑問がある場合、それらをhttps://forums.oracle.com/forums/forum.jspa?forumID=220に投稿してください。