Menu Close

Red Hat Training

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

5.5. 事前設定: 全オーバークラウドロールのカスタマイズ

オーバークラウドは、OpenStack コンポーネントのコア設定に Puppet を使用します。director にはフックが用意されており、初回のブートが完了してコア設定が開始する前に、すべてのノード種別が設定されます。

OS::TripleO::NodeExtraConfig
Puppet のコア設定前に全ノードロールに適用される追加の設定

以下の例では、まず基本的な heat テンプレート (/home/stack/templates/nameserver.yaml) を作成します。このテンプレートは、各ノードの resolv.conf に変数のネームサーバーを追加するスクリプトを実行します。

heat_template_version: 2014-10-16

description: >
  Extra hostname configuration

parameters:
  server:
    type: string
  nameserver_ip:
    type: string
  DeployIdentifier:
    type: string

resources:
  CustomExtraConfigPre:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config:
        str_replace:
          template: |
            #!/bin/sh
            echo "nameserver _NAMESERVER_IP_" >> /etc/resolv.conf
          params:
            _NAMESERVER_IP_: {get_param: nameserver_ip}

  CustomExtraDeploymentPre:
    type: OS::Heat::SoftwareDeployment
    properties:
      server: {get_param: server}
      config: {get_resource: CustomExtraConfigPre}
      actions: ['CREATE','UPDATE']
      input_values:
        deploy_identifier: {get_param: DeployIdentifier}

outputs:
  deploy_stdout:
    description: Deployment reference, used to trigger pre-deploy on changes
    value: {get_attr: [CustomExtraDeploymentPre, deploy_stdout]}

上記の例では、resources セクションには以下のパラメーターが含まれます。

CustomExtraConfigPre
ここでは、ソフトウェア設定を定義します。上記の例では、Bash スクリプト を定義し、Heat が _NAMESERVER_IP_nameserver_ip パラメーターに保管された値に置き換えます。
CustomExtraDeploymentPre

この設定により、CustomExtraConfigPre リソースで定義したソフトウェア設定を実行します。以下の点に注意してください。

  • config パラメーターは、適用する設定を Heat が理解できるように CustomExtraConfigPre リソースを参照します。
  • server パラメーターは、オーバークラウドノードのマッピングを取得します。これは親テンプレートにより提供されるパラメーターで、このフックのテンプレートには必須です。
  • actions パラメーターは、設定を適用するタイミングを定義します。上記の例では、オーバークラウドの作成または更新時にのみ設定を適用します。設定可能なアクションは CREATEUPDATEDELETESUSPEND、および RESUME です。
  • input_values パラメーターでは deploy_identifier というサブパラメーターを定義し、親テンプレートからの DeployIdentifier を格納します。このパラメーターにより、各デプロイメント更新のリソースにタイムスタンプが提供されます。これにより、それ以降のオーバークラウド更新に必ずリソースが再度適用されます。

次に、OS::TripleO::NodeExtraConfig リソース種別として Heat テンプレートを登録する環境ファイル (/home/stack/templates/pre_config.yaml) を作成します。

resource_registry:
  OS::TripleO::NodeExtraConfig: /home/stack/templates/nameserver.yaml

parameter_defaults:
  nameserver_ip: 192.168.1.1

この設定を適用するには、オーバークラウドの作成時または更新時に、その他の環境ファイルと共にこの環境ファイルをスタックに追加します。以下に例を示します。

$ openstack overcloud deploy --templates \
    ...
    -e /home/stack/templates/pre_config.yaml \
    ...

これにより、オーバークラウドの初回作成またはそれ以降の更新において、コア設定前にすべてのノードに設定が適用されます。

重要

OS::TripleO::NodeExtraConfig を登録することができるのは 1 つの Heat テンプレートだけです。別の Heat テンプレートに登録すると、使用する Heat テンプレートがそのテンプレートに変わります。

これにより、以下の操作が実行されます。

  1. OS::TripleO::NodeExtraConfig は、Heat テンプレートコレクション内の設定テンプレートで使用する director ベースの Heat リソースです。このリソースは、各ノードに設定を渡します。デフォルトの NodeExtraConfig は、空の値 (puppet/extraconfig/pre_deploy/default.yaml) を指定する heat テンプレートを参照します。この例では、pre_config.yaml 環境ファイルは、このデフォルトを独自の nameserver.yaml ファイルへの参照に置き換えます。
  2. 環境ファイルは、この環境の parameter_default の値として nameserver_ip を渡します。これは、ネームサーバーの IP アドレスを保存するパラメーターです。nameserver.yaml の Heat テンプレートは、parameters セクションで定義したように、このパラメーターを受け入れます。
  3. このテンプレートは、 OS::Heat::SoftwareConfig を使用して設定リソースとして CustomExtraConfigPre を定義します。group: script プロパティーに注意してください。group は、使用するソフトウェア設定ツールを定義します。この場合は、script フックは、SoftwareConfig リソースで config プロパティーとして定義される実行可能なスクリプトを実行します。
  4. このスクリプト自体は、/etc/resolve.conf にネームサーバーの IP アドレスを追加します。str_replace の属性に注意してください。この場合は、NAMESERVER_IP をネームサーバーの IP アドレスに設定します。スクリプト内の同じ変数はこの IP アドレスに置き換えられます。その結果、スクリプトは以下のようになります。

    #!/bin/sh
    echo "nameserver 192.168.1.1" >> /etc/resolve.conf

この例は、コアの設定の前に OS::Heat::SoftwareConfigOS::Heat::SoftwareDeployments で設定を定義してデプロイする heat テンプレートの作成方法を示します。また、環境ファイルでパラメーターを定義して、設定でテンプレートを渡す方法も示します。