5.5. 事前設定: 全オーバークラウドロールのカスタマイズ
オーバークラウドは、OpenStack コンポーネントのコア設定に Puppet を使用します。director にはフックが用意されており、初回起動が完了してコア設定が開始する前に、すべてのノード種別が設定されます。
- OS::TripleO::NodeExtraConfig
- Puppet のコア設定前に全ノードに適用される追加の設定
以下の例では、各ノードの resolv.conf
に変数のネームサーバーを追加するスクリプトを実行するために、基本的な Heat テンプレート (/home/stack/templates/nameserver.yaml
) を作成します。
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]}
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
パラメーターは、設定を適用するタイミングを定義します。上記の例では、オーバークラウドが作成または更新された時にのみ設定を適用します。設定可能なアクションは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
resource_registry:
OS::TripleO::NodeExtraConfig: /home/stack/templates/nameserver.yaml
parameter_defaults:
nameserver_ip: 192.168.1.1
この設定を適用するには、オーバークラウドの作成時または更新時に、その他の環境ファイルと共にこの環境ファイルをスタックに追加します。以下に例を示します。
openstack overcloud deploy --templates \ ...
$ openstack overcloud deploy --templates \
...
-e /home/stack/templates/pre_config.yaml \
...
これにより、オーバークラウドの初回作成またはそれ以降の更新において、コア設定前にすべてのノードに設定が適用されます。
OS::TripleO::NodeExtraConfig
を登録することができるのは 1 つの Heat テンプレートだけです。別の Heat テンプレートに登録すると、使用する Heat テンプレートがそのテンプレートに変わります。
これにより、以下の操作が実行されます。
-
OS::TripleO::NodeExtraConfig
は、Heat テンプレートコレクション内の設定テンプレートで使用する director ベースの Heat リソースです。このリソースは、各ノードに設定を渡します。デフォルトのNodeExtraConfig
は、空の値 (puppet/extraconfig/pre_deploy/default.yaml
) を指定する Heat テンプレートを参照します。この例では、pre_config.yaml
環境ファイルは、このデフォルトを独自のnameserver.yaml
ファイルへの参照に置き換えます。 -
環境ファイルは、この環境の
parameter_default
の値としてnameserver_ip
を渡します。これは、ネームサーバーの IP アドレスを保存するパラメーターです。nameserver.yaml
の Heat テンプレートは、parameters
セクションで定義したように、このパラメーターを受け入れます。 -
このテンプレートは、
OS::Heat::SoftwareConfig
を使用して設定リソースとしてCustomExtraConfigPre
を定義します。group: script
プロパティーに注意してください。group
は、使用するソフトウェア設定ツールを定義します。このソフトウェア設定ツールは Heat のフックセットで入手できます。この場合は、script
フックは、SoftwareConfig
リソースでconfig
プロパティーとして定義される実行可能なスクリプトを実行します。 このスクリプト自体は、
/etc/resolve.conf
にネームサーバーの IP アドレスを追加します。str_replace
の属性に注意してください。これにより、template
セクションの変数をparams
セクションのパラメーターに置き換えることが可能となります。この場合は、NAMESERVER_IP をネームサーバーの IP アドレスに設定します。スクリプト内の同じ変数はこの IP アドレスに置き換えられます。その結果、スクリプトは以下のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow #!/bin/sh echo "nameserver 192.168.1.1" >> /etc/resolve.conf
#!/bin/sh echo "nameserver 192.168.1.1" >> /etc/resolve.conf
この例は、コアの設定の前に OS::Heat::SoftwareConfig
と OS::Heat::SoftwareDeployments
で設定を定義してデプロイする Heat テンプレートの作成方法を示します。また、環境ファイルでパラメーターを定義して、設定でテンプレートを渡す方法も示します。