Openstack instance deployment using HOT {Heat Orchestration Template} Part-I
HOT is a new template format meant to orchestrate the Openstack platform as its reliable and templates are defined in YAML and follow the structure outlined below:
Important keywords to write a HOT {Heat Orchestration Template} templates are as :
heat_template_version:
This key with value 2015-10-15 (or a later date) indicates that the YAML document is a HOT template of the specified version.
description:
This optional key allows for giving a description of the template, or the workload that can be deployed using the template.
parameter_groups:
This section allows for specifying how the input parameters should be grouped and the order to provide the parameters in. This section is optional and can be omitted when necessary.
parameters:
This section allows for specifying input parameters that have to be provided when instantiating the template. The section is optional and can be omitted when no input is required.
resources:
This section contains the declaration of the single resources of the template. This section with at least one resource should be defined in any HOT template, or the template would not really do anything when being instantiated.
outputs:
This section allows for specifying output parameters available to users once the template has been instantiated. This section is optional and can be omitted when no output values are required.
conditions:
This optional section includes statements which can be used to restrict when a resource is created or when a property is defined. They can be associated with resources and resource properties in the resources section, also can be associated with outputs in the outputs sections of a template.
NOTE: There is no need to use all the above in every template. by using few of them also its possible to create a hot template.
Lets write a hot template to deploy an instance:
NOTE: Make sure to replace the following parameters correctly as per your infrastructure:
heat_template_version: 2015-10-15
description:
# a description of the template
parameter_groups:
# a declaration of input parameter groups
and order
parameters:
# declaration of input parameters
resources:
# declaration of template resources
outputs:
# declaration of output parameters
conditions:
# declaration of conditions
|
Important keywords to write a HOT {Heat Orchestration Template} templates are as :
- heat_template_version
- description
- parameter_groups
- parameters
- resources
- outputs
- conditions
heat_template_version:
This key with value 2015-10-15 (or a later date) indicates that the YAML document is a HOT template of the specified version.
description:
This optional key allows for giving a description of the template, or the workload that can be deployed using the template.
parameter_groups:
This section allows for specifying how the input parameters should be grouped and the order to provide the parameters in. This section is optional and can be omitted when necessary.
parameters:
This section allows for specifying input parameters that have to be provided when instantiating the template. The section is optional and can be omitted when no input is required.
resources:
This section contains the declaration of the single resources of the template. This section with at least one resource should be defined in any HOT template, or the template would not really do anything when being instantiated.
outputs:
This section allows for specifying output parameters available to users once the template has been instantiated. This section is optional and can be omitted when no output values are required.
conditions:
This optional section includes statements which can be used to restrict when a resource is created or when a property is defined. They can be associated with resources and resource properties in the resources section, also can be associated with outputs in the outputs sections of a template.
NOTE: There is no need to use all the above in every template. by using few of them also its possible to create a hot template.
Lets write a hot template to deploy an instance:
heat_template_version:
2015-10-15
description: Deploy Ubuntu
16.04 LTS Cloud image through HOT
parameters:
key_name:
type: string
label: Keypair Name
description: Name of the key pair to be
used for the compute instance
default: loginkey
image_ID1:
type: string
label: instance0
description: Define an image ID
default: Ubuntu 16.04 LTS Cloud Image
fixed_net:
type: string
label: Private Network ID
description: Network to be used for the
compute instance
default:
e37521f5-4b86-4678-8f61-0cf8423469de
fixed_subnet:
type: string
label: Subnet ID
description: Subnet to be used for the
compute instance
default:
98b51ded-547d-48d4-8a21-c520d3ba36fd
external_net:
type: string
label: Public Network ID
description: Floating IP network to be
used for compute instance
default:
4fec620d-e61b-4c76-be22-a0de0a92bd41
availability_zone:
type: string
description: The Availability Zone to
launch the instance.
default: nova
resources:
secgrp_id:
type: OS::Neutron::SecurityGroup
properties:
name: "Ubuntu16.04 SecGrp"
rules:
- remote_ip_prefix: 0.0.0.0/0
protocol: icmp
- remote_ip_prefix: 0.0.0.0/0
protocol: tcp
port_range_min: 1
port_range_max: 65535
public_port1:
type: OS::Neutron::Port
properties:
network_id: { get_param: fixed_net }
fixed_ips:
- subnet_id: { get_param: fixed_subnet
}
security_groups:
- {get_resource: secgrp_id}
floating_ip1:
type: OS::Neutron::FloatingIP
properties:
floating_network_id: { get_param:
external_net }
port_id: { get_resource: public_port1 }
Ubuntu1604_instance:
type: OS::Nova::Server
properties:
availability_zone: { get_param:
availability_zone }
name: "Ubuntu 16.04 LTS
Server"
key_name: { get_param: key_name }
block_device_mapping: [{ device_name:
"vda", volume_id : { get_resource
: Ubuntu16.04_Disk }, delete_on_termination : "true" }]
flavor: "m1.small"
networks:
- port: { get_resource: public_port1
}
Ubuntu16.04_Disk:
type: OS::Cinder::Volume
properties:
name: "U16.04 Disk"
image: { get_param: image_ID1 }
size: 20
|
NOTE: Make sure to replace the following parameters correctly as per your infrastructure:
- flavour
- keypair
- image_ID
- fixed_net ID
- fixed_subnet ID
- external_net ID
Mirantis openstack is having an option to load the stack from horizon and deploy the instance and in this example I am using Mirantis Openstack's dashboard. But the same can be done from command line as well:
1. Login to openstack horizon using your credentials and go to Orchestration -> Stack:
2. Click on "Launch Stack" and select "Direct Input" option in Template Source:
3. Add the heat template and click on "Next". Give a name to your stack and provide the password to the user from which you are trying to deploy the template. It should show you all the variable that you have added as per your environment.
4. Wait for 2/3 mins and the instance creation should be completed. The deployment time depends on the size of the HDD.
5. Go to the instance tab to see the newly created instance. Now to access the instance:
- get the floating IP from the console
- use the available keypair and do ssh to the instance
6. Once utilization is over, you can "Suspend Stacks" the instance from "Orchestration -> Stacks" tab and for next requirement you can "Resume Stacks" it:
NOTE: This deployment is not fully automated. You need to add few parameters manually in the template based on your setup.
Comments
Post a Comment