第5章 カタログとサービス

5.1. カタログとサービスについて

カタログを採用することにより、Red Hat CloudForms は、ハイブリッド環境全体に渡って複数の層に分かれたワークロードをデプロイするための 多層のサービスプロビジョニングを提供します。カスタマイズされたダイアログを作成することができるので、サービスの使用者は数パラメーターを入力し、全サービスをプロビジョニングすることができます。

5.2. 用語

用語

カタログ一式
テンプレートのグループ
カタログ項目
単一のテンプレートまたはテンプレートのグループ (カタログ一式)
ダイアログタブ
サービスダイアログの一部
要素
ダイアログ内のタブの 1 項目。ボタン、チェックボックス、ドロップダウンリスト、ラジオボタン、タグコントロール、テキストエリアボックス、テキストボックスなどがあります。
プロビジョニングダイアログ
ホストのプロビジョニング、仮想マシンの移行、仮想マシンのプロビジョニング用に作成されるダイアログ。処理されるようにするには、ダイアログメインを適切なプロビジョニングインスタンスに追加する必要があります。
サービスカタログ
プロビジョニングに利用可能なカタログの項目またはカタログ一式
サービスダイアログ
サービスのプロビジョニングに使用するための完全にカスタマイズされたタブ、項目、値で構成されます。
テンプレート
テンプレートとは、事前設定済みの仮想マシンのコピーのことで、オリジナルの仮想マシンのインストール済みソフトウェアおよびその設定に加えて、ハードウェア設定がキャプチャーされるように設計されています。

5.3. カタログ

カタログは、プロビジョニングする仮想マシンまたはインスタンスのグループを作成するのに使用します。たとえば、データベースサーバーの完全なパッケージや、特定のソフトウェアがインストール済みのデスクトップ、ファイアウォールなどがあります。サービスカタログの作成およびプロビジョニングを行うには、以下のステップを完了する必要があります。

  1. サービスの一部となる仮想マシンまたはインスタンス用の カタログ項目 を作成します。
  2. サービス ダイアログを作成します。たとえば、小、中、大の 3 つのオプションのあるドロップダウンを作成します。
  3. サービスダイアログ用のメソッドを作成します。このメソッドは、各オプションが、そのサービスの個別の仮想マシンまたはクラウドインスタンスに対してどのような意味があるかを定義します。 このメソッドは、Automate モデル内のサービスプロビジョニングインスタンスから呼び出されます。
  4. そのメソッドを呼び出す DOMAIN/Service/Provisioning/StateMachines/ServiceProvision_Templateクラスでインスタンスを作成します。

    注記

    DOMAIN は、ロックされた ManageIQ ドメインではなく、ユーザー定義のドメインである必要があります。必要な場合には、ManageIQ ドメインからカスタムドメインにクラスをコピーすることができます。

  5. メソッドを自動化インスタンスに関連付けます。
  6. カタログ一式 を作成し、カタログ項目を追加します。作成した サービスダイアログ を選択します。DOMAIN/Service/Provisioning/StateMachines/ServiceProvision_Template クラスで作成したインスタンスを エントリーポイント として使用します。カタログ内に表示 のボックスにチェックを付けます。
  7. サービスをプロビジョニングします。

5.3.1. カタログ項目の作成

サービスの一部となる各仮想マシンまたはクラウドインスタンスにカタログ項目を作成します。

  1. サービスカタログ に移動します。
  2. カタログ項目 のアコーディオンをクリックします。
  3. 1847 (構成) をクリックして 1862 ( 新規カタログ項目の追加) を選択します。
  4. 追加する カタログ項目タイプ を選択します。表示されるダイアログは、選択したプロバイダーのタイプによってフィルタリングされます。たとえば、カタログ項目タイプRedhat の場合には、Red Hat プロバイダーにあるテンプレートのみが表示されます。 2357
  5. 基本情報 のサブタブで、

    1. 名前と説明 を入力します。
    2. カタログ内に表示 にチェックを付けて、 カタログダイアログエントリーポイント (名前空間/クラス/インスタンス) オプションを編集します。

      1. プロビジョニングのエントリーポイント (名前空間/クラス/インスタンス) では、プロビジョニング時に実行する自動化インスタンスを選択する必要があります。
      2. リタイアのエントリーポイント (名前空間/クラス/インスタンス) では、リタイア時に実行する自動化インスタンスを選択する必要があります。 Catalogitem statemachine

        注記

        プロビジョニングのエントリーポイント の一覧は、フィルタリングされて、ステートマシンクラスのインスタンスのみを表示するので、エントリーポイントは、ステートマシンにする必要があります。プロビジョニングのエントリーポイント のフィールドでは、他のエントリーポイントは利用できません。

        注記

        作成済みのカタログとダイアログからしか選択することはできません。まだ作成していない場合には、値を空白にして、後ほど編集してください。

  6. 詳細 のサブタブでカタログ項目の 詳細な説明 を記入します。
  7. 要求情報 のサブタブで、選択したプロバイダーに該当するプロビジョニングのオプションを選択します。詳しくは、仮想マシンのプロビジョニングとインスタンスのプロビジョニングのセクションを参照してください。
  8. 追加 をクリックします。

5.3.1.1. Ansible プレイブックのサービスカタログ項目の作成

Ansible プレイブックを使用してバックアップするカタログ項目の作成

注記

Ansible サービスの作成前に、最低でもリポジトリー、プレイブック、認証情報がそれぞれ 1 つずつ、Red Hat CloudForms インベントリーに存在している必要があります。インベントリーを確認して適切なリソースを追加してから、Ansible サービスを作成するようにしてください。詳しい情報は『Managing Providers』「Automation Management Providers」を参照してください。

  1. サービスカタログ に移動します。
  2. カタログ項目 アコーディオンで、すべてのカタログ項目 をクリックします。
  3. 1847 (構成) をクリックして 1862 (新規カタログ項目の追加) を選択します。
  4. カタログ項目タイプ ドロップダウンリストから Ansible Playbook を選択します。
  5. 新規サービスカタログ項目の 名前 および 説明 を入力します。
  6. カタログ内に表示 をクリックします。
  7. ドロップダウンリストから適切な カタログ を選択します。
  8. プロビジョニング タブでは、サービス項目をバックするプレイブックを設定して、使用するカタログ項目にパラメーターを設定します。

    1. ドロップダウンリストから リポジトリー を選択します。
    2. 使用する Ansible Playbook を選択します。
    3. ドロップダウンリストから適切な マシンの認証情報 を割り当てます。
    4. ドロップダウンリストから クラウド または ネットワーク認証情報 を追加します。
    5. サービス項目を実行する ホスト を選択します。
    6. Escalate Privilege の切り替えスイッチを使用して、プレイブックの実行中に認証情報が呼び出された場合にユーザーの権限昇格ができるようにします。
    7. 変数 のキー値ペアと、対応する デフォルト値 を追加します。
    8. ダイアログ オプションで、既存ダイアログの使用 ドロップダウンリストから既存のダイアログを選択するか、新規作成 を選択して新規ダイアログを追加します。
  9. リタイア タブで、以下の値を選択して、使用するカタログ項目にパラメーターを設定します。

    1. ドロップダウンリストから リポジトリー を選択します。
    2. 使用する Ansible Playbook を選択します。
    3. ドロップダウンリストから適切な マシンの認証情報 を割り当てます。
    4. ドロップダウンリストから クラウド または ネットワーク認証情報 を追加します。
    5. サービス項目を実行する ホスト を選択します。
    6. Escalate Privilege の切り替えスイッチを使用して、プレイブックの実行中に認証情報が呼び出された場合にユーザーの権限昇格ができるようにします。
    7. 変数 のキー値ペアと、対応する デフォルト値 を追加します。
    8. ダイアログ オプションで、既存ダイアログの使用 ドロップダウンリストから既存のダイアログを選択するか、新規作成 を選択して新規ダイアログを追加します。
  10. 追加 をクリックします。

5.3.1.2. Ansible Tower サービスカタログ項目の作成

Red Hat CloudForms で Ansible Tower プレイブックを実行するために使用可能な Ansible Tower テンプレートからサービスカタログ項目を作成します。

重要

まず、Ansible Tower で Job テンプレートを作成する必要があります。作成したテンプレートは、Ansible Tower プロバイダーのインベントリーを更新すると、CloudForms によって自動的に検出されます。

最初にカタログを作成します。

  1. サービスカタログ に移動します。
  2. Configuration (構成) をクリックして、 Add a New Catalog (新規カタログの追加) を選択します。
  3. カタログの 名前説明 を入力します。
  4. 追加 をクリックします。

次に Ansible Tower サービスカタログ項目を作成します。

  1. 自動化Ansible Towerジョブ の順に移動します。
  2. Ansible Tower ジョブテンプレート をクリックして Ansible Tower Job テンプレートを選択します。
  3. Configuration (構成) をクリックして、 Create Service Dialog from this Job Template (このジョブテンプレートからサービスダイアログを作成する) を選択します。
  4. サービスダイアログ名 (例: ansible_tower_job など) を入力して 保存 をクリックします。
  5. サービスカタログ に移動して、カタログ項目 をクリックします。
  6. Configuration (構成) をクリックして Add a New Catalog Item (新規カタログ項目の追加) を選択し、少なくとも以下の情報を指定して新規カタログ項目を作成します。

    • カタログ項目タイプ には Ansible Tower を選択します。
    • サービスカタログ項目の 名前 を入力します。
    • カタログ内に表示 を選択します。
    • カタログ で、以前に作成したカタログを選択します。
    • ダイアログ で以前に作成したサービスダイアログ (この例では ansible_tower_job) を選択します。プレイブックにユーザーからの追加のパラメーターが必要ない場合には、ダイアログなし を選択することが可能です。タスク実行時にユーザーに追加の情報の入力を要求するには、サービスダイアログ を選択する必要があります。
    • プロバイダー でお使いの Ansible Tower プロバイダーを選択すると、Ansible Tower ジョブ テンプレート オプションが表示され、プロビジョニングのエントリーポイントのステートマシン が自動的に設定されます。
    • 該当する場合には エントリーポイントの再設定 および リタイアのエントリーポイント の設定情報を追加します。
    • 一覧から必要な Ansible Tower ジョブテンプレート を選択します。通常、これにはサービスダイアログの作成に使用した Ansible Tower ジョブテンプレートを選択します。
  7. 追加 をクリックします。作成したカタログ項目が すべてのサービスカタログ項目 の一覧に表示されます。

5.3.2. サービスダイアログ

サービスをプロビジョニングする際には、要求者による入力が必要です。サービスダイアログ は、ユーザーによる入力に使用します。この入力は、ユーザーによる入力をプロビジョニング要求に変換する方法を定義する Automate モデル内のメソッドにつながっています。サービスダイアログ を作成する前には、ユーザーの入力が必要な項目を計画しておくようにしてください。

5.3.2.1. サービスダイアログの追加

重要

Ansible プレイブックのカタログ項目で使用するサービスダイアログを作成する際には、変数要素に param_ を使用して値を割り当てる必要があります。たとえば、key1 とう名前の新しい変数は param_key1 という値に設定します。

  1. 自動化カスタマイズ に移動します。
  2. サービスダイアログ のアコーディオンをクリックします。
  3. 1847 (構成) をクリックして 1862 (新規ダイアログの追加) を選択します。
  4. ダイアログ情報 には、ラベル説明 を入力します。ダイアログのフォームの最下部に表示するボタンのボックスにチェックを付けます。説明は、マウスオーバーで表示されます。

    ダイアログの ラベル に入力すると、その内容が左側にある ダイアログ ペインに表示されるはずです。

    1. 1862 (追加) をクリックして 1862 (新規タブのこのダイアログへの追加) を選択します。
    2. このタブの ラベル説明 を入力します。

      タブの ラベル に入力を行うと、作成しているダイアログ下の左側にある ダイアログ ペインにその内容が表示されます。

    3. 1862 (追加) をクリックして 1862 (新規ボックスのこのタブへの追加) を選択します。
    4. このボックスの ラベル説明 を入力します。

      ボックスの ラベル に入力を行うと、作成しているタブの左側にある ダイアログ ペインにその内容が表示されます。

  5. このボックスに要素を追加します。要素は、入力を受け入れるためのコントロールです。

    1. 1862 (追加) をクリックして 1862 (新規要素のこのボックスへの追加) を選択します。
    2. この要素の ラベル名前、および 説明 を入力します。

      重要

      名前 には、アルファベット、数字、アンダースコアを使用して、スペースは入れないようにしてください。この名前は、ダイアログとともに使用するメソッドでこの要素の値を取得するのにも使用されるので、dialog_service_type から始まる必要があります。

    3. 要素のタイプに Type を選択します。タイプ オプションにはすべて RequiredDefault Value のフィールドがあります。操作を続行するためにその要素が必須の場合には、Required にチェックを付けるか、Requiredtrue に設定します。デフォルト値を設定することも可能です。残りのオプションは、選択した要素に基づいて表示されます。

      要素のタイプ追加情報

      チェックボックス

      このチェックボックスがデフォルトで選択されるようにするには、Default Value にチェックを付けます。

      日付コントロール

      日付コントロール を使用して、ユーザーが日付を選択できるフィールドを作成します。ユーザーが日付と時刻を選択できるようにする場合には、日付/時間コントロール オプションを使用してください。

      日付/時間コントロール

      日付/時間コントロール を使用して、ユーザーが日付と時刻を選択できるフィールドを作成します。1 つのダイアログで表示できるのは、日付コントロール または 日付/時間コントロール のいずれか 1 つの要素のみです。

      動的なドロップダウンリスト

      自動化メソッドを使用してリストのオプションが作成されるようにするには、動的なドロップダウンリスト を使用します。エントリーポイント (名前空間/クラス/インスタンス) を使用して、自動化インスタンスを選択します。ユーザーがリストのオプションを手動でリフレッシュできるようにするには、更新ボタンの表示 にチェックを付けます。

      ラジオボタン

      この要素タイプは、ドロップダウンリストと同じ目的を果たしますが、オプションがラジオボタンで表示されます。

      タグの制御

      このサービスダイアログに関連付けられている仮想マシンに割り当てるタグの カテゴリー を選択します。1 つのタグのみを選択可能とする場合には、単一選択 にチェックを付けます。

      テキスト領域ボックス

      ユーザーがテキストを入力するためのテキスト領域を提供します。デフォルト値 のフィオールドにテキストを入力して、ユーザー向けにメッセージが表示されるようにするか、空欄のままにすることができます。

      テキストボックス

      この要素タイプは、テキスト領域ボックス と同じ目的を果たします。オプションに 保護 にチェックを付けて、入力するテキストがプレーンテキストではなくアステリスク (*) として表示されるようにするオプションがあります。

  6. 必要なダイアログアイテムを引き続き追加します。ダイアログ、タブ、ボックス、および要素の切り替えは、左側にある ダイアログ ペインからそれぞれのラベルを選択して実行します。
  7. Add をクリックします。ダイアログは、Service Dialogs アコーディオンに表示されます。

5.3.2.2. サービスダイアログのインポート

インポート/エクスポート機能を使用すると、複数のアプライアンス間でサービスダイアログを共有することができます。

  1. 自動化カスタマイズ に移動します。
  2. インポート/エクスポート のアコーディオンで、サービスダイアログのインポート/エクスポート をクリックします。
  3. インポート のセクションで ファイルの選択 をクリックして、インポートするファイルを選択します。
  4. アップロード をクリックします。

5.3.2.3. サービスダイアログのエクスポート

インポート/エクスポート機能を使用すると、複数のアプライアンス間でサービスダイアログを共有することができます。

  1. 自動化 → カスタマイズ に移動します。
  2. インポート/エクスポート のアコーディオンで、サービスダイアログのインポート/エクスポート をクリックします。
  3. エクスポート のセクションで、エクスポートするサービスダイアログを選択します。
  4. エクスポート をクリックします。

5.3.3. メソッド

5.3.3.1. ダイアログに関連付けるメソッドの作成

ダイアログの値をプロビジョニング要求に結びつけるためのメソッドを作成する必要があります。メソッドは、Automate モデルの DOMAIN/Service/Provisioning/StateMachines/ServiceProvision_Template クラスに作成する必要があります。

注記

DOMAIN は、ロックされた ManageIQ ドメインではなく、ユーザー定義のドメインである必要があります。必要な場合には、ManageIQ ドメインからカスタムドメインにクラスをコピーすることができます。

その下に提供されるメソッドは、以下のシナリオで作成されています。

  • web、app、DB を含む 3 階層のサービスをプロビジョニングする必要があります。これらの仮想マシン (またはクラウドインスタンス) はそれぞれ Service カテゴリー下に適切な値でタグ付けされ、さらにカタログ項目として追加され、カタログバンドルに統合されます。
  • サービスダイアログ は、service_type と呼ばれるドロップダウンに、小、中、大のアプリケーションをキャプチャーします。ダイアログ内の要素にキャプチャーされた値を参照する場合には、要素の名前に dialog_ のプレフィックスを付ける必要があります。たとえば、service_type をメソッド内で使用する場合には dialog_service_type となります。
  • メソッドは、service_type セクションに基づいて各カタログ項目のメモリーサイズを設定します。
#            Automate Method
#
$evm.log("info", "Automate Method ConfigureChildDialog Started")
#
#            Method Code Goes here
#
$evm.log("info", "===========================================")
$evm.log("info", "Listing ROOT Attributes:")
$evm.root.attributes.sort.each { |k, v| $evm.log("info", "\t#{k}: #{v}")}
$evm.log("info", "===========================================")

stp_task = $evm.root["service_template_provision_task"]
$evm.log("info", "===========================================")
$evm.log("info", "Listing task Attributes:")
stp_task.attributes.sort.each { |k, v| $evm.log("info", "\t#{k}: #{v}")}
$evm.log("info", "===========================================")

#############################################################
#### This is how the method would look for dialog variables
#############################################################
dialog_service_type = $evm.root['dialog_service_type']
$evm.log("info","User selected Dialog option = [#{dialog_service_type}]")

stp_miq_request_task = stp_task.miq_request_task
#$evm.log("info","(parent) miq_request_task:  = [#{stp_miq_request_task}]")

#############################################################
#### This is how you get the catalog items for the catalog bundle
#############################################################

stp_miq_request_tasks = stp_task.miq_request_tasks
#$evm.log("info","(children) miq_request_tasks count:  = [#{stp_miq_request_tasks.count}]")

#############################################################
#### By going through the children, you can set the dialog variable for each of the children (we based our values on the childrens service tags)
#############################################################

stp_miq_request_tasks.each do |t|

  $evm.log("info"," Setting dialog for: #{t.description}")
  service = t.source
  service_resource = t.service_resource
  #$evm.log("info"," Child service resource name: #{service_resource.resource_name}")
  #$evm.log("info"," Child service resource description: #{service_resource.resource_description}")

  service_tag_array = service.tags(:app_tier)
  service_tag = service_tag_array.first.to_s

  memory_size = nil

#############################################################
#### The dialog_service_type is the attribute set on the service dialog
#### We use the service_tag to decide what child gets what dialog
#############################################################

  case dialog_service_type
  when "Small"
    case service_tag
    when "app"
      memory_size = 1024
    when "web"
      memory_size = 1024
    when "db"
      memory_size = 4096
    else
      $evm.log("info","Unknown Dialog type")
    end
  when "Large"
    case service_tag
    when "app"
      memory_size = 4096
    when "web"
      memory_size = 4096
    when "db"
      memory_size = 8192
    else
      $evm.log("info","Unknown Dialog type")
    end
  else
    $evm.log("info","Unknown Dialog type - setting Dialog options here")
  end

#############################################################
#### set_dialog_option sets the dialog for the child
#############################################################

  t.set_dialog_option('memory',memory_size) unless memory_size.nil?
  $evm.log("info","Set dialog for selection: [#{dialog_service_type}]  Service_Tier: [#{service_tag}] Memory size: [#{memory_size}]")

end
#
#
#
$evm.log("info", "Automate Method ConfigureChildDialog Ended")
exit MIQ_OK

5.3.3.2. サービスクラス内でのメソッドの作成

サービスメソッドは、目的別に分割されています。

  1. 自動化エクスプローラー に移動します。
  2. サービスクラスは、DOMAINServiceProvisioningStateMachinesMethods および DOMAINServiceRetirementStateMachinesMethods にあります。

    注記

    DOMAIN は、ロックされた ManageIQ ドメインではなく、ユーザー定義のドメインである必要があります。必要な場合には、ManageIQ ドメインからカスタムドメインにクラスをコピーすることができます。

  3. メソッド タブをクリックします。
  4. 1847 (構成) をクリックして 1862 (新規メソッドの追加) を選択します。
  5. 名前表示名 を入力します。
  6. データのフィールドで、メソッドのコンテンツを入力します。
  7. 検証 をクリックし、データエントリーが正常に検証されるのを待ちます。
  8. 追加 をクリックします。 6297

5.3.3.3. サービスクラス内でのインスタンスの作成

  1. 自動化エクスプローラー に移動します。
  2. サービスクラスは、DOMAINServiceProvisioningStateMachinesMethods および DOMAINServiceRetirementStateMachinesMethods にあります。

    注記

    DOMAIN は、ロックされた ManageIQ ドメインではなく、ユーザー定義のドメインである必要があります。必要な場合には、ManageIQ ドメインからカスタムドメインにクラスをコピーすることができます。

  3. インスタンス タブをクリックします。
  4. 1847 (構成) をクリックして 1862 (新規インスタンスの追加) を選択します。
  5. 名前表示名 を入力します。
  6. フィールド のセクションで、メソッドの名前を に入力します。
  7. 追加 をクリックします。

インスタンスが作成され、ServiceProvision クラスから呼び出せるようになります。

6298

注記

メソッドが作成された後には、DOMAIN/Service/Service/Provisioning/StateMachines クラス内のインスタンスにマッピングする必要があります。インスタンス名は、エントリーポイント として指定する必要があります。このメソッドは、プロビジョニングのジョブが開始する前に呼び出す必要があります。

5.3.3.4. メソッドを自動化インスタンスに関連付ける手順

サービスメソッドは、目的別に分割されています。

  1. 自動化エクスプローラー に移動します。
  2. アコーディオンから必要なサービスメソッドをクリックします。
  3. サービスクラスは、DOMAINServiceProvisioningStateMachinesMethods および DOMAINServiceRetirementStateMachinesMethods にあります。

    注記

    DOMAIN は、ロックされた ManageIQ ドメインではなく、ユーザー定義のドメインである必要があります。必要な場合には、ManageIQ ドメインからカスタムドメインにクラスをコピーすることができます。

  4. 新規インスタンスを作成するか、clone_to_service インスタンスを選択します。
  5. 1847 (構成) をクリックして 1851 (選択したインスタンスの編集) を選択します。
  6. configurechilddialog 値には、メソッドへのパスを入力します。
  7. 保存 をクリックします。新規インスタンスにこれを追加する場合には、追加 をクリックします。

これでカタログ項目、サービスダイアログ、ダイアログメソッド、サービスプロビジョニングインスタンスが作成されたので、カタログ一式を作成することができます。

5.3.4. カタログ一式の作成

  1. サービスカタログ に移動します。
  2. カタログ項目 のアコーディオンをクリックします。
  3. 1847 (構成) をクリックし、次に 1862 (新規カタログ一式の追加) をクリックします。
  4. 基本情報 で、名前と説明を入力します。 2362
  5. カタログ内に表示 をクリックします。
  6. 適切なダイアログ名を選択します。
  7. 適切な ServiceProvision インスタンスへのパスを選択します。
  8. リソース タブをクリックして、リソースの追加 のドロップダウンリストから一式に追加するカタログ項目を選択します。
  9. 追加 をクリックします。

カタログ一式が作成され、サービスカタログ のアコーディオンで表示されるようになります。

注記

一式の一部となる各カタログ項目には、DOMAIN/Service/Provisioning/StateMachines/Methods/CatalogBundle クラスでエントリーポイントを作成して指定しておくべきです。このステップを実行しなかった場合には、カタログ一式 の処理以外に、その一式内の各項目に対して、プロビジョニングの事前/事後プロセスを実行することになります。エントリーポイントを設定するには、カタログ項目カタログ内に表示 にチェックをつけると、エントリーポイント のフィールドが表示されるようになります。

5.3.4.1. サービスのプロビジョニング

  1. サービスカタログ に移動します。
  2. サービスカタログ のアコーディオンをクリックして、プロビジョニングするサービスを選択します。
  3. オーダー をクリックします。

パラメーターは、ダイアログ内での選択項目に関連付けられたメソッドに基づいて、子に渡されます。