heat_template_version: ocata # 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}