Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

6.2. ユーザー定義のコンポーザブルサービスの作成

本項では、ユーザー定義のコンポーザブルサービスの作成方法を考察し、その日のメッセージ (motd: message of the day) サービスの実装に重点を置いて説明します。以下の例では、設定フックを使用するか、オーバークラウドイメージを編集して、そのイメージにカスタムの motd Puppet モジュールが読み込まれています。詳細は、3章オーバークラウドイメージに関する操作 を参照してください。

独自のサービスを作成する場合は、サービスの heat テンプレートで次の項目を定義する必要があります。

parameters

以下のパラメーターは、サービステンプレートに追加する必要のある必須パラメーターです。

  • ServiceNetMap: サービスからネットワークへのマッピング。このパラメーターは、親の Heat テンプレートからの値で上書きされるので、空のハッシュ ({}) を default 値として使用します。
  • DefaultPasswords: デフォルトパスワードの一覧。このパラメーターは、親の Heat テンプレートからの値で上書きされるので、空のハッシュ ({}) を default 値として使用します。
  • EndpointMap: OpenStack サービスエンドポイントからプロトコルへのマッピングの一覧。このパラメーターは、親の Heat テンプレートからの値で上書きされるので、空のハッシュ ({}) を default 値として使用します。

作成するサービスが必要とする追加のパラメーターを定義してください。

outputs
以下の出力パラメーターは、ホスト上でのサービス設定を定義します。詳細は、付録A コンポーザブルサービスのパラメーター を参照してください。

以下は、motd サービス用の heat テンプレート (service.yaml) の一例です。

heat_template_version: 2016-04-08

description: >
  Message of the day service configured with Puppet

parameters:
  ServiceNetMap:
    default: {}
    type: json
  DefaultPasswords:
    default: {}
    type: json
  EndpointMap:
    default: {}
    type: json
  MotdMessage: 1
    default: |
      Welcome to my Red Hat OpenStack Platform environment!

    type: string
    description: The message to include in the motd

outputs:
  role_data:
    description: Motd role using composable services.
    value:
      service_name: motd
      config_settings: 2
        motd::content: {get_param: MotdMessage}
      step_config: | 3
        if hiera('step') >= 2 {
          include ::motd
        }
1
このテンプレートには、その日のメッセージを定義する MotdMessage パラメーターが含まれています。このパラメーターにはデフォルトのメッセージが含まれていますが、カスタムの環境ファイルで同じパラメーターを使用して上書きすることができます。
2
outputs セクションは、config_settings 内の一部のサービスの hieradata を定義します。motd::content hieradata には、MotdMessage パラメーターからのコンテンツが保管されます。motd Puppet クラスは、最終的にこの hieradata を読み取り、ユーザー定義のメッセージを /etc/motd ファイルに渡します。
3
outputs セクションの step_config には、Puppet マニフェストのスニペットが記載されています。このスニペットは、設定がステップ 2 に達したかどうかをチェックし、達している場合には、motd Puppet クラスを実行します。