第4章 設定フック
設定フックは、オーバークラウドのデプロイメントプロセスに独自の設定関数を挿入する手段を提供します。これには、メインのオーバークラウドサービスの設定の前後にカスタム設定を挿入するためのフックや、Puppet ベースの設定を変更/追加するためのフックが含まれます。
4.1. 初回起動: 初回起動時の設定のカスタマイズ
director は、オーバークラウドの初期設定時に全ノードに設定を行うメカニズムを提供し、cloud-init
でこの設定をアーカイブします。アーカイブした内容は、OS::TripleO::NodeUserData
リソース種別を使用して呼び出すことが可能です。
以下の例では、全ノード上でカスタム IP アドレスを使用してネームサーバーを更新します。まず基本的な Heat テンプレート (/home/stack/templates/nameserver.yaml
) を作成する必要があります。このテンプレートは、固有のネームサーバーが指定された各ノードの resolv.conf
を追加するスクリプトを実行します。OS::TripleO::MultipartMime
リソース種別を使用して、この設定スクリプトを送信することができます。
heat_template_version: 2014-10-16 description: > Extra hostname configuration resources: userdata: type: OS::Heat::MultipartMime properties: parts: - config: {get_resource: nameserver_config} nameserver_config: type: OS::Heat::SoftwareConfig properties: config: | #!/bin/bash echo "nameserver 192.168.1.1" >> /etc/resolv.conf outputs: OS::stack_id: value: {get_resource: userdata}
次に、Heat テンプレートを登録する環境ファイル (/home/stack/templates/firstboot.yaml
) を OS::TripleO::NodeUserData
リソース種別として作成します。
resource_registry: OS::TripleO::NodeUserData: /home/stack/templates/nameserver.yaml
初回起動の設定を追加するには、最初にオーバークラウドを作成する際に、この環境ファイルをスタックに追加します。たとえば、以下のコマンドを実行します。
$ openstack overcloud deploy --templates -e /home/stack/templates/firstboot.yaml
-e
は、オーバークラウドのスタックに環境ファイルを適用します。
これにより、初回作成/起動時に、全ノードに設定が追加されます。オーバークラウドのスタックの更新など、これらのテンプレートを後で追加しても、このスクリプトは実行されません。
OS::TripleO::NodeUserData
は、1 つの Heat テンプレートに対してのみ登録することが可能です。それ以外に使用すると、以前の Heat テンプレートの内容が上書きされてしまいます。
4.2. 事前設定: 特定のオーバークラウドロールのカスタマイズ
本ガイドの以前のバージョンでは、OS::TripleO::Tasks::*PreConfig
リソースで、ロールごとに事前設定フックを指定していましたが、director の Heat テンプレートコレクションにはこれらのフックを専用で使用する必要があるため、カスタムには使用すべきではありません。このリソースの代わりに、以下に記載する OS::TripleO::*ExtraConfigPre
フックを使用してください。
オーバークラウドは、OpenStackコンポーネントのコア設定に Puppet を使用します。director は、初回のブートが完了してコア設定が開始する前に、特定のノードロール向けのカスタム設定を指定するフックのセットを提供します。これには、以下のフックが含まれます。
- OS::TripleO::ControllerExtraConfigPre
- Puppet のコア設定前にコントローラーノードに適用される追加の設定
- OS::TripleO::ComputeExtraConfigPre
- Puppet のコア設定前にコンピュートノードに適用される追加の設定
- OS::TripleO::CephStorageExtraConfigPre
- Puppet のコア設定前に Ceph Storage ノードに適用される追加の設定
- OS::TripleO::ObjectStorageExtraConfigPre
- Puppet のコア設定前に Object Storage ノードに適用される追加の設定
- OS::TripleO::BlockStorageExtraConfigPre
- Puppet のコア設定前に Block Storage ノードに適用される追加の設定
- OS::TripleO::[ROLE]ExtraConfigPre
-
Puppet のコア設定前にカスタムノードに適用する追加の設定。
[ROLE]
はコンポーザブルロール名に置き換えます。
以下の例では、まず基本的な Heat テンプレート (/home/stack/templates/nameserver.yaml
) を作成します。このテンプレートは、ノードの resolv.conf
に変数のネームサーバーを書き込むスクリプトを実行します。
heat_template_version: 2014-10-16 description: > Extra hostname configuration parameters: server: type: json 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
script
を定義しており、Heat は_NAMESERVER_IP_
をnameserver_ip
パラメーターに保存されている値に置き換えます。 - CustomExtraDeploymentPre
これは、
CustomExtraConfigPre
リソースのソフトウェア設定で指定されているソフトウェアの設定を実行します。次の点に注意してください。-
config
パラメーターは、CustomExtraConfigPre
リソースへの参照を作成して、適用する設定を Heat が認識するようにします。 -
server
パラメーターはオーバークラウドノードのマップを取得します。このパラメーターは親テンプレートにより提供され、このフックを使用するテンプレートでは必須です。 -
actions
パラメーターは、設定を適用するタイミングを定義します。この場合は、オーバークラウドが作成された時にのみ設定を適用します。実行可能なアクションはCREATE
、UPDATE
、DELETE
、SUSPEND
およびRESUME
です。 -
input_values
にはdeploy_identifier
と呼ばれるパラメーターが含まれます。これは、親テンプレートからのDeployIdentifier
を保存します。このパラメーターは、デプロイメントが更新される度にリソースにタイムスタンプを付けます。これにより、そのリソースは以降のオーバークラウドの更新に再度適用されるようになります。
-
次に、Heat テンプレートをロールベースのリソース種別に登録する環境ファイル (/home/stack/templates/pre_config.yaml
) を作成します。たとえば、コントローラーノードのみに適用するには、ControllerExtraConfigPre
フックを使用します。
resource_registry: OS::TripleO::ControllerExtraConfigPre: /home/stack/templates/nameserver.yaml parameter_defaults: nameserver_ip: 192.168.1.1
この設定を適用するには、オーバークラウドの作成時または更新時にスタックにこの環境ファイルを追加します。たとえば、以下のコマンドを実行します。
$ openstack overcloud deploy --templates -e /home/stack/templates/pre_config.yaml
これにより、オーバークラウドの初回作成またはその後の更新時にコア設定が開始する前に、カスタム設定が全コントローラーノードに適用されます。
各リソースは、1 フックあたり 1 つの Heat テンプレートにしか登録できません。その後に別の Heat テンプレートを使用すると、最初に登録した Heat テンプレートは上書きされます。
4.3. 事前設定: 全オーバークラウドロールのカスタマイズ
オーバークラウドは、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
script
を定義しており、Heat は_NAMESERVER_IP_
をnameserver_ip
パラメーターに保存されている値に置き換えます。 - CustomExtraDeploymentPre
これは、
CustomExtraConfigPre
リソースのソフトウェア設定で指定されているソフトウェアの設定を実行します。次の点に注意してください。-
config
パラメーターは、CustomExtraConfigPre
リソースへの参照を作成して、適用する設定を Heat が認識するようにします。 -
server
パラメーターはオーバークラウドノードのマップを取得します。このパラメーターは親テンプレートにより提供され、このフックを使用するテンプレートでは必須です。 -
actions
パラメーターは、設定を適用するタイミングを定義します。この場合は、オーバークラウドが作成された時にのみ設定を適用します。実行可能なアクションはCREATE
、UPDATE
、DELETE
、SUSPEND
および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 テンプレートは上書きされます。
4.4. 設定後: 全オーバークラウドロールのカスタマイズ
本ガイドの以前のバージョンでは、OS::TripleO::Tasks::*PostConfig
リソースで、ロールごとに設定後のフックを指定していましたが、director の Heat テンプレートコレクションにはこれらのフックを専用で使用する必要があるため、カスタムには使用すべきではありません。このリソースの代わりに、以下に記載する OS::TripleO::NodeExtraConfigPost
フックを使用してください。
オーバークラウドの作成完了後に、最初に作成したオーバークラウドまたは次回の更新で、追加設定を全ロールに追加する必要がある状況が発生する可能性があります。そのような場合には、以下のような設定後のフックを使用します。
- OS::TripleO::NodeExtraConfigPost
- Puppet のコア設定後に全ノードに適用される追加の設定
以下の例では、まず基本的な Heat テンプレート (/home/stack/templates/nameserver.yaml
) を作成します。このテンプレートは、各ノードの resolv.conf
に変数のネームサーバーを追加するスクリプトを実行します。
heat_template_version: 2014-10-16 description: > Extra hostname configuration parameters: servers: type: json nameserver_ip: type: string DeployIdentifier: type: string resources: CustomExtraConfig: 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} CustomExtraDeployments: type: OS::Heat::SoftwareDeploymentGroup properties: servers: {get_param: servers} config: {get_resource: CustomExtraConfig} actions: ['CREATE','UPDATE'] input_values: deploy_identifier: {get_param: DeployIdentifier}
この例では、resources
セクションに以下が含まれています。
- CustomExtraConfig
-
これは、ソフトウェアの設定を定義します。上記の例では、Bash
script
を定義しており、Heat は_NAMESERVER_IP_
をnameserver_ip
パラメーターに保存されている値に置き換えます。 - CustomExtraDeployments
これは、
CustomExtraConfig
リソースのソフトウェア設定で指定されているソフトウェアの設定を実行します。次の点に注意してください。-
config
パラメーターは、CustomExtraConfig
リソースへの参照を作成して、適用する設定を Heat が認識するようにします。 -
servers
パラメーターはオーバークラウドノードのマップを取得します。このパラメーターは親テンプレートにより提供され、このフックを使用するテンプレートでは必須です。 -
actions
パラメーターは、設定を適用するタイミングを定義します。この場合は、オーバークラウドが作成された時にのみ設定を適用します。実行可能なアクションはCREATE
、UPDATE
、DELETE
、SUSPEND
およびRESUME
です。 -
input_values
にはdeploy_identifier
と呼ばれるパラメーターが含まれます。これは、親テンプレートからのDeployIdentifier
を保存します。このパラメーターは、デプロイメントが更新される度にリソースにタイムスタンプを付けます。これにより、そのリソースは以降のオーバークラウドの更新に再度適用されるようになります。
-
次に、OS::TripleO::NodeExtraConfigPost:
リソース種別として Heat テンプレートを登録する環境ファイル (/home/stack/templates/post_config.yaml
) を作成します。
resource_registry: OS::TripleO::NodeExtraConfigPost: /home/stack/templates/nameserver.yaml parameter_defaults: nameserver_ip: 192.168.1.1
この設定を適用するには、オーバークラウドの作成時または更新時にスタックにこの環境ファイルを追加します。たとえば、以下のコマンドを実行します。
$ openstack overcloud deploy --templates -e /home/stack/templates/post_config.yaml
このコマンドにより、オーバークラウドの初期作成またはその後の更新時にコア設定が完了した後に、全ノードに設定が適用されます。
OS::TripleO::NodeExtraConfigPost
は、1 つの Heat テンプレートに対してのみ登録することが可能です。複数で使用すると、使用する Heat テンプレートが上書きされます。
4.5. Puppet: ロール用の Hieradata のカスタマイズ
Heat テンプレートコレクションには、追加の設定を特定のノードタイプに渡すためのパラメーターセットが含まれています。これらのパラメーターは、ノードの Puppet の設定用 hieradata として設定を保存します。これには、以下のパラメーターが含まれます。
- ControllerExtraConfig
- コントローラーノードに追加する設定
- NovaComputeExtraConfig
- コンピュートノードに追加する設定
- BlockStorageExtraConfig
- Block Storage ノードに追加する設定
- ObjectStorageExtraConfig
- Object Storage ノードに追加する設定
- CephStorageExtraConfig
- Ceph Storage ノードに追加する設定
- [ROLE]ExtraConfig
-
コンポーザブルロールに追加する設定。
[ROLE]
はコンポーザブルロール名に置き換えます。 - ExtraConfig
- 全ノードに追加する設定
デプロイ後の設定プロセスに設定を追加するには、parameter_defaults
セクションにこれらのパラメーターが記載された環境ファイルを作成します。たとえば、コンピュートホストに確保するメモリーを 1024 MB に増やして、VNC キーマップを日本語に設定するには、以下のように設定します。
parameter_defaults: NovaComputeExtraConfig: nova::compute::reserved_host_memory: 1024 nova::compute::vnc_keymap: ja
openstack overcloud deploy
を実行する際に、この環境ファイルを含めます。
各パラメーターは 1 回のみ定義することが可能です。その後に使用すると、以前の値が上書きされます。
4.6. Puppet: 個別のノードの Hieradata のカスタマイズ
Heat テンプレートコレクションを使用して、個別のノードの Puppet hieradata を設定することができます。そのためには、ノードのイントロスペクションデータの一部として保存されているシステム UUID を取得する必要があります。
$ openstack baremetal introspection data save 9dcc87ae-4c6d-4ede-81a5-9b20d7dc4a14 | jq .extra.system.product.uuid
このコマンドは、システム UUID を出力します。以下に例を示します。
"F5055C6C-477F-47FB-AFE5-95C6928C407F"
このシステム UUID は、ノード固有の hieradata を定義して per_node.yaml
テンプレートを事前設定フックに登録する環境ファイルで使用します。以下に例を示します。
resource_registry: OS::TripleO::ComputeExtraConfigPre: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/pre_deploy/per_node.yaml parameter_defaults: NodeDataLookup: '{"F5055C6C-477F-47FB-AFE5-95C6928C407F": {"nova::compute::vcpu_pin_set": [ "2", "3" ]}}'
openstack overcloud deploy
を実行する際に、この環境ファイルを含めます。
per_node.yaml
テンプレートは、各システム UUID に対応するノード上に heiradata ファイルのセットを生成して、定義した hieradata を含めます。UUID が定義されていない場合には、生成される hieradata ファイルは空になります。上記の例では、per_node.yaml
テンプレートは (OS::TripleO::ComputeExtraConfigPre
フックに従って) 全コンピュートノード上で実行されますが、システム UUID が F5055C6C-477F-47FB-AFE5-95C6928C407F
のコンピュートノードのみが hieradata を受け取ります。
これにより、特定の要件に応じて各ノードを調整する方法が提供されます。
4.7. Puppet: カスタムのマニフェストの適用
特定の状況では、追加のコンポーネントをオーバークラウドノードにインストールして設定する必要がある場合があります。これには、カスタムの Puppet マニフェストを使用して、主要な設定が完了してからノードに適用します。基本的な例として、各ノードに motd
をインストールするとします。そのためにはまず、Puppet 設定を起動する Heat テンプレート (/home/stack/templates/custom_puppet_config.yaml
) を作成します。
heat_template_version: 2014-10-16 description: > Run Puppet extra configuration to set new MOTD parameters: servers: type: json resources: ExtraPuppetConfig: type: OS::Heat::SoftwareConfig properties: config: {get_file: motd.pp} group: puppet options: enable_hiera: True enable_facter: False ExtraPuppetDeployments: type: OS::Heat::SoftwareDeploymentGroup properties: config: {get_resource: ExtraPuppetConfig} servers: {get_param: servers}
これは、テンプレート内に /home/stack/templates/motd.pp
を追加し、設定するノードに渡します。motd.pp
ファイル自体には、motd
のインストールと設定を行うための Puppet クラスが含まれています。
次に、OS::TripleO::NodeExtraConfigPost:
リソース種別として Heat テンプレートを登録する環境ファイル (/home/stack/templates/puppet_post_config.yaml
) を作成します。
resource_registry: OS::TripleO::NodeExtraConfigPost: /home/stack/templates/custom_puppet_config.yaml
最後に、オーバークラウドのスタックが作成または更新されたら、この環境ファイルを含めます。
$ openstack overcloud deploy --templates -e /home/stack/templates/puppet_post_config.yaml
これにより、motd.pp
からの設定がオーバークラウド内の全ノードに適用されます。