############################################################################## # Copyright (c) 2017 Cable Television Laboratories, Inc. ("CableLabs") # and others. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. ############################################################################## heat_template_version: 2015-04-30 description: > Sample template with two VMs instantiated against different images and flavors on the same network and the first one has a floating IP parameters: image1_name: type: string label: Image ID for first VM description: Image name to be used for first instance default: image_1 image2_name: type: string label: Image ID for second VM description: Image name to be used for second instance default: image_2 flavor1_name: type: string label: Instance Flavor for first VM description: Flavor name for the first instance default: m1.small flavor2_name: type: string label: Instance Flavor for second VM description: Flavor name for the second instance default: m1.med net_name: type: string label: Test network name description: The name of the stack's network default: test_net subnet_name: type: string label: Test subnet name description: The name of the stack's subnet default: test_subnet router_name: type: string label: Test router name description: The name of the stack's router default: mgmt_router keypair_name: type: string label: Keypair name description: The name of the stack's keypair default: keypair_name security_group_name: type: string label: Security Group name description: The name of the stack's security group default: security_group_name inst1_name: type: string label: First VM name description: The name of the first VM to be spawned default: test_vm1 inst2_name: type: string label: Second VM name description: The name of the second VM to be spawned default: test_vm2 external_net_name: type: string description: Name of the external network which management network will connect to default: external resources: flavor1: type: OS::Nova::Flavor properties: ram: 1024 vcpus: 2 disk: 2 flavor2: type: OS::Nova::Flavor properties: ram: 1024 vcpus: 2 disk: 2 network: type: OS::Neutron::Net properties: name: { get_param: net_name } subnet: type: OS::Neutron::Subnet properties: name: { get_param: subnet_name } ip_version: 4 cidr: 10.1.2.0/24 network: { get_resource: network } management_router: type: OS::Neutron::Router properties: name: { get_param: router_name } external_gateway_info: network: { get_param: external_net_name } management_router_interface: type: OS::Neutron::RouterInterface properties: router: { get_resource: management_router } subnet: { get_resource: subnet } server_security_group: type: OS::Neutron::SecurityGroup properties: description: Add security group rules for server name: { get_param: security_group_name } rules: - remote_ip_prefix: 0.0.0.0/0 protocol: tcp port_range_min: 22 port_range_max: 22 - remote_ip_prefix: 0.0.0.0/0 protocol: icmp floating_ip: type: OS::Neutron::FloatingIP properties: floating_network: { get_param: external_net_name } floating_ip_association: type: OS::Nova::FloatingIPAssociation properties: floating_ip: { get_resource: floating_ip } server_id: {get_resource: vm1} keypair: type: OS::Nova::KeyPair properties: name: { get_param: keypair_name } save_private_key: True vm1: type: OS::Nova::Server depends_on: [subnet, keypair, flavor1] properties: name: { get_param: inst1_name } image: { get_param: image1_name } flavor: { get_resource: flavor1 } key_name: {get_resource: keypair} security_groups: [{ get_resource: server_security_group }] networks: - network: { get_resource: network } vm2: type: OS::Nova::Server depends_on: [subnet, flavor2] properties: name: { get_param: inst2_name } image: { get_param: image2_name } flavor: { get_resource: flavor2 } key_name: {get_resource: keypair} networks: - network: { get_resource: network } outputs: private_key: description: "SSH Private Key" value: { get_attr: [ keypair, private_key ]}