Enable passing optional first-boot user-data
Currently all the OS::Nova::Server resource created don't pass any user-data. It's possible to pass user-data as well as using heat SoftwareConfig/SoftwareDeployment resources, and this can be useful when you have simple "first boot" tasks which are possible either via cloud-init, or via simple run-once scripts. This enables passing such data by implementing a new provider resource OS::TripleO::NodeUserData, which defaults to passing an empty mime archive (thus it's a no-op). An example of non no-op usage is also provided. Change-Id: Id0caba69768630e3a10439ba1fc2547a609c0cfe
This commit is contained in:
parent
1781c64bfc
commit
723db1317c
@ -36,9 +36,14 @@ resources:
|
|||||||
{get_param: Image}
|
{get_param: Image}
|
||||||
flavor: {get_param: OvercloudCephStorageFlavor}
|
flavor: {get_param: OvercloudCephStorageFlavor}
|
||||||
key_name: {get_param: KeyName}
|
key_name: {get_param: KeyName}
|
||||||
user_data_format: SOFTWARE_CONFIG
|
|
||||||
networks:
|
networks:
|
||||||
- network: ctlplane
|
- network: ctlplane
|
||||||
|
user_data_format: SOFTWARE_CONFIG
|
||||||
|
user_data: {get_resource: NodeUserData}
|
||||||
|
|
||||||
|
NodeUserData:
|
||||||
|
type: OS::TripleO::NodeUserData
|
||||||
|
|
||||||
CephStorageDeployment:
|
CephStorageDeployment:
|
||||||
type: OS::Heat::StructuredDeployment
|
type: OS::Heat::StructuredDeployment
|
||||||
properties:
|
properties:
|
||||||
|
@ -103,9 +103,14 @@ resources:
|
|||||||
{get_param: Image}
|
{get_param: Image}
|
||||||
flavor: {get_param: Flavor}
|
flavor: {get_param: Flavor}
|
||||||
key_name: {get_param: KeyName}
|
key_name: {get_param: KeyName}
|
||||||
user_data_format: SOFTWARE_CONFIG
|
|
||||||
networks:
|
networks:
|
||||||
- network: ctlplane
|
- network: ctlplane
|
||||||
|
user_data_format: SOFTWARE_CONFIG
|
||||||
|
user_data: {get_resource: NodeUserData}
|
||||||
|
|
||||||
|
NodeUserData:
|
||||||
|
type: OS::TripleO::NodeUserData
|
||||||
|
|
||||||
BlockStorageDeployment:
|
BlockStorageDeployment:
|
||||||
type: OS::Heat::StructuredDeployment
|
type: OS::Heat::StructuredDeployment
|
||||||
properties:
|
properties:
|
||||||
|
@ -259,6 +259,10 @@ resources:
|
|||||||
networks:
|
networks:
|
||||||
- network: ctlplane
|
- network: ctlplane
|
||||||
user_data_format: SOFTWARE_CONFIG
|
user_data_format: SOFTWARE_CONFIG
|
||||||
|
user_data: {get_resource: NodeUserData}
|
||||||
|
|
||||||
|
NodeUserData:
|
||||||
|
type: OS::TripleO::NodeUserData
|
||||||
|
|
||||||
NetworkConfig:
|
NetworkConfig:
|
||||||
type: OS::TripleO::Net::SoftwareConfig
|
type: OS::TripleO::Net::SoftwareConfig
|
||||||
|
@ -418,6 +418,10 @@ resources:
|
|||||||
networks:
|
networks:
|
||||||
- network: ctlplane
|
- network: ctlplane
|
||||||
user_data_format: SOFTWARE_CONFIG
|
user_data_format: SOFTWARE_CONFIG
|
||||||
|
user_data: {get_resource: NodeUserData}
|
||||||
|
|
||||||
|
NodeUserData:
|
||||||
|
type: OS::TripleO::NodeUserData
|
||||||
|
|
||||||
NetworkConfig:
|
NetworkConfig:
|
||||||
type: OS::TripleO::Net::SoftwareConfig
|
type: OS::TripleO::Net::SoftwareConfig
|
||||||
|
20
firstboot/userdata_default.yaml
Normal file
20
firstboot/userdata_default.yaml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
heat_template_version: 2014-10-16
|
||||||
|
|
||||||
|
description: >
|
||||||
|
This is a default no-op template which provides empty user-data
|
||||||
|
which can be passed to the OS::Nova::Server resources.
|
||||||
|
This template can be replaced with a different implementation via
|
||||||
|
the resource registry, such that deployers may customize their
|
||||||
|
first-boot configuration.
|
||||||
|
|
||||||
|
resources:
|
||||||
|
userdata:
|
||||||
|
type: OS::Heat::MultipartMime
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
# This means get_resource from the parent template will get the userdata, see:
|
||||||
|
# http://docs.openstack.org/developer/heat/template_guide/composition.html#making-your-template-resource-more-transparent
|
||||||
|
# Note this is new-for-kilo, an alternative is returning a value then using
|
||||||
|
# get_attr in the parent template instead.
|
||||||
|
OS::stack_id:
|
||||||
|
value: {get_resource: userdata}
|
60
firstboot/userdata_example.yaml
Normal file
60
firstboot/userdata_example.yaml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
heat_template_version: 2014-10-16
|
||||||
|
|
||||||
|
# NOTE: You don't need to pass the parameter explicitly from the
|
||||||
|
# parent template, it can be specified via the parameter_defaults
|
||||||
|
# in the resource_registry instead, if you want to override the default
|
||||||
|
# and/or share values with other templates in the tree.
|
||||||
|
parameters:
|
||||||
|
extra_username:
|
||||||
|
type: string
|
||||||
|
default: extrauser
|
||||||
|
|
||||||
|
description: >
|
||||||
|
This is an example showing how you can do firstboot configuration
|
||||||
|
of the nodes via cloud-init. To enable this, replace the default
|
||||||
|
mapping of OS::TripleO::NodeUserData in ../overcloud_resource_registry*
|
||||||
|
|
||||||
|
resources:
|
||||||
|
userdata:
|
||||||
|
type: OS::Heat::MultipartMime
|
||||||
|
properties:
|
||||||
|
parts:
|
||||||
|
- config: {get_resource: user_config}
|
||||||
|
- config: {get_resource: ssh_config}
|
||||||
|
|
||||||
|
# Get cloud-init to create an extra user, in addition to the default for the
|
||||||
|
# distro. Note there are various options, including configuring ssh keys,
|
||||||
|
# but atm I can only see how to specify the keys explicitly, not via metadata
|
||||||
|
user_config:
|
||||||
|
type: OS::Heat::CloudConfig
|
||||||
|
properties:
|
||||||
|
cloud_config:
|
||||||
|
users:
|
||||||
|
- default
|
||||||
|
- name: {get_param: extra_username}
|
||||||
|
|
||||||
|
# Setup ssh key for the extra user to match the key installed for the default
|
||||||
|
# user, e.g that provided via the nova keypair on instance boot
|
||||||
|
ssh_config:
|
||||||
|
type: OS::Heat::SoftwareConfig
|
||||||
|
properties:
|
||||||
|
config:
|
||||||
|
str_replace:
|
||||||
|
template: |
|
||||||
|
#!/bin/bash
|
||||||
|
curl http://169.254.169.254/openstack/2012-08-10/meta_data.json -o /root/meta_data.json
|
||||||
|
mkdir -p /home/$user/.ssh
|
||||||
|
chmod 700 /home/$user/.ssh
|
||||||
|
cat /root/meta_data.json | jq -r ".keys[0].data" > /home/$user/.ssh/authorized_keys
|
||||||
|
chmod 600 /home/$user/.ssh/authorized_keys
|
||||||
|
chown -R $user:$user /home/$user/.ssh
|
||||||
|
params:
|
||||||
|
$user: {get_param: extra_username}
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
# This means get_resource from the parent template will get the userdata, see:
|
||||||
|
# http://docs.openstack.org/developer/heat/template_guide/composition.html#making-your-template-resource-more-transparent
|
||||||
|
# Note this is new-for-kilo, an alternative is returning a value then using
|
||||||
|
# get_attr in the parent template instead.
|
||||||
|
OS::stack_id:
|
||||||
|
value: {get_resource: userdata}
|
@ -105,10 +105,15 @@ resources:
|
|||||||
flavor: { get_param: flavor }
|
flavor: { get_param: flavor }
|
||||||
image: { get_param: image }
|
image: { get_param: image }
|
||||||
key_name: { get_param: key_name }
|
key_name: { get_param: key_name }
|
||||||
user_data_format: SOFTWARE_CONFIG
|
|
||||||
networks:
|
networks:
|
||||||
- network: { get_param: server_network }
|
- network: { get_param: server_network }
|
||||||
port: { get_resource: nagios_net_port }
|
port: { get_resource: nagios_net_port }
|
||||||
|
user_data_format: SOFTWARE_CONFIG
|
||||||
|
user_data: {get_resource: NodeUserData}
|
||||||
|
|
||||||
|
NodeUserData:
|
||||||
|
type: OS::TripleO::NodeUserData
|
||||||
|
|
||||||
nagios_floating_ip:
|
nagios_floating_ip:
|
||||||
type: OS::Neutron::FloatingIP
|
type: OS::Neutron::FloatingIP
|
||||||
properties:
|
properties:
|
||||||
|
@ -15,6 +15,7 @@ resource_registry:
|
|||||||
OS::TripleO::CephClusterConfig::SoftwareConfig: puppet/ceph-cluster-config.yaml
|
OS::TripleO::CephClusterConfig::SoftwareConfig: puppet/ceph-cluster-config.yaml
|
||||||
OS::TripleO::AllNodes::SoftwareConfig: puppet/all-nodes-config.yaml
|
OS::TripleO::AllNodes::SoftwareConfig: puppet/all-nodes-config.yaml
|
||||||
OS::TripleO::BootstrapNode::SoftwareConfig: puppet/bootstrap-config.yaml
|
OS::TripleO::BootstrapNode::SoftwareConfig: puppet/bootstrap-config.yaml
|
||||||
|
OS::TripleO::NodeUserData: firstboot/userdata_default.yaml
|
||||||
|
|
||||||
parameter_defaults:
|
parameter_defaults:
|
||||||
EnablePackageInstall: false
|
EnablePackageInstall: false
|
||||||
|
@ -15,3 +15,4 @@ resource_registry:
|
|||||||
OS::TripleO::CephClusterConfig::SoftwareConfig: ceph-cluster-config.yaml
|
OS::TripleO::CephClusterConfig::SoftwareConfig: ceph-cluster-config.yaml
|
||||||
OS::TripleO::AllNodes::SoftwareConfig: all-nodes-config.yaml
|
OS::TripleO::AllNodes::SoftwareConfig: all-nodes-config.yaml
|
||||||
OS::TripleO::BootstrapNode::SoftwareConfig: bootstrap-config.yaml
|
OS::TripleO::BootstrapNode::SoftwareConfig: bootstrap-config.yaml
|
||||||
|
OS::TripleO::NodeUserData: firstboot/userdata_default.yaml
|
||||||
|
@ -40,6 +40,11 @@ resources:
|
|||||||
networks:
|
networks:
|
||||||
- network: ctlplane
|
- network: ctlplane
|
||||||
user_data_format: SOFTWARE_CONFIG
|
user_data_format: SOFTWARE_CONFIG
|
||||||
|
user_data: {get_resource: NodeUserData}
|
||||||
|
|
||||||
|
NodeUserData:
|
||||||
|
type: OS::TripleO::NodeUserData
|
||||||
|
|
||||||
CephStorageDeployment:
|
CephStorageDeployment:
|
||||||
type: OS::Heat::StructuredDeployment
|
type: OS::Heat::StructuredDeployment
|
||||||
properties:
|
properties:
|
||||||
|
@ -115,9 +115,13 @@ resources:
|
|||||||
{get_param: Image}
|
{get_param: Image}
|
||||||
flavor: {get_param: Flavor}
|
flavor: {get_param: Flavor}
|
||||||
key_name: {get_param: KeyName}
|
key_name: {get_param: KeyName}
|
||||||
user_data_format: SOFTWARE_CONFIG
|
|
||||||
networks:
|
networks:
|
||||||
- network: ctlplane
|
- network: ctlplane
|
||||||
|
user_data_format: SOFTWARE_CONFIG
|
||||||
|
user_data: {get_resource: NodeUserData}
|
||||||
|
|
||||||
|
NodeUserData:
|
||||||
|
type: OS::TripleO::NodeUserData
|
||||||
|
|
||||||
BlockStorageDeployment:
|
BlockStorageDeployment:
|
||||||
type: OS::Heat::StructuredDeployment
|
type: OS::Heat::StructuredDeployment
|
||||||
|
@ -262,6 +262,10 @@ resources:
|
|||||||
networks:
|
networks:
|
||||||
- network: ctlplane
|
- network: ctlplane
|
||||||
user_data_format: SOFTWARE_CONFIG
|
user_data_format: SOFTWARE_CONFIG
|
||||||
|
user_data: {get_resource: NodeUserData}
|
||||||
|
|
||||||
|
NodeUserData:
|
||||||
|
type: OS::TripleO::NodeUserData
|
||||||
|
|
||||||
NetworkConfig:
|
NetworkConfig:
|
||||||
type: OS::TripleO::Net::SoftwareConfig
|
type: OS::TripleO::Net::SoftwareConfig
|
||||||
|
@ -425,6 +425,10 @@ resources:
|
|||||||
networks:
|
networks:
|
||||||
- network: ctlplane
|
- network: ctlplane
|
||||||
user_data_format: SOFTWARE_CONFIG
|
user_data_format: SOFTWARE_CONFIG
|
||||||
|
user_data: {get_resource: NodeUserData}
|
||||||
|
|
||||||
|
NodeUserData:
|
||||||
|
type: OS::TripleO::NodeUserData
|
||||||
|
|
||||||
NetworkConfig:
|
NetworkConfig:
|
||||||
type: OS::TripleO::Net::SoftwareConfig
|
type: OS::TripleO::Net::SoftwareConfig
|
||||||
|
@ -60,9 +60,13 @@ resources:
|
|||||||
image: {get_param: Image}
|
image: {get_param: Image}
|
||||||
flavor: {get_param: Flavor}
|
flavor: {get_param: Flavor}
|
||||||
key_name: {get_param: KeyName}
|
key_name: {get_param: KeyName}
|
||||||
user_data_format: SOFTWARE_CONFIG
|
|
||||||
networks:
|
networks:
|
||||||
- network: ctlplane
|
- network: ctlplane
|
||||||
|
user_data_format: SOFTWARE_CONFIG
|
||||||
|
user_data: {get_resource: NodeUserData}
|
||||||
|
|
||||||
|
NodeUserData:
|
||||||
|
type: OS::TripleO::NodeUserData
|
||||||
|
|
||||||
SwiftStorageHieraConfig:
|
SwiftStorageHieraConfig:
|
||||||
type: OS::Heat::StructuredConfig
|
type: OS::Heat::StructuredConfig
|
||||||
|
@ -108,9 +108,14 @@ resources:
|
|||||||
image: {get_param: Image}
|
image: {get_param: Image}
|
||||||
flavor: {get_param: Flavor}
|
flavor: {get_param: Flavor}
|
||||||
key_name: {get_param: KeyName}
|
key_name: {get_param: KeyName}
|
||||||
user_data_format: SOFTWARE_CONFIG
|
|
||||||
networks:
|
networks:
|
||||||
- network: ctlplane
|
- network: ctlplane
|
||||||
|
user_data_format: SOFTWARE_CONFIG
|
||||||
|
user_data: {get_resource: NodeUserData}
|
||||||
|
|
||||||
|
NodeUserData:
|
||||||
|
type: OS::TripleO::NodeUserData
|
||||||
|
|
||||||
SwiftStorageDeploy:
|
SwiftStorageDeploy:
|
||||||
type: OS::Heat::StructuredDeployment
|
type: OS::Heat::StructuredDeployment
|
||||||
properties:
|
properties:
|
||||||
|
Loading…
Reference in New Issue
Block a user