heat_template_version: 2015-04-30 description: Create new Tenant network and add a subnet to the network. Create 2 VMs and place the VMs in 2 unique compute nodes. Ensure each VM has a floating IP. User that runs this MUST be in the openstack admin role parameters: demo_net_name: type: string default: demo-net description: Name for demo network demo_net_cidr: type: string default: 192.168.10.0/24 description: CIDR for demo network demo_net_pool_start: type: string default: 192.168.10.10 description: network pool start. typically .10 of whatever /24 is defined demo_net_pool_end: type: string default: 192.168.10.200 description: network pool end. typically .100 of whatever /24 is defined demo_ext_net_name: type: string default: ext-net description: external net name. use neutron net-list to figure it out. demo_key_name: type: string description: ssh key required for server creation demo_image_name: type: string description: image to use to for the server demo_flavor_name: type: string default: m1.medium description: openstack server flavor name use openstack flavor list to see options demo_server1_name: type: string description: name of the first server created. resources: demo_net: type: OS::Neutron::Net properties: name: { get_param: demo_net_name } demo_subnet: type: OS::Neutron::Subnet properties: network_id: { get_resource: demo_net } cidr: { get_param: demo_net_cidr } dns_nameservers: [8.8.8.8] allocation_pools: - start: { get_param: demo_net_pool_start } end: { get_param: demo_net_pool_end } demo_router: type: OS::Neutron::Router properties: external_gateway_info: network: { get_param: demo_ext_net_name } router_interface: type: OS::Neutron::RouterInterface properties: router_id: { get_resource: demo_router } subnet_id: { get_resource: demo_subnet } webserver_security_group: type: OS::Neutron::SecurityGroup properties: description: Port 22 and 80 open for webserver. name: webserver-security-group 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: tcp, port_range_min: 80, port_range_max: 80}, {remote_ip_prefix: 0.0.0.0/0, protocol: icmp}] web-server-deploy: type: OS::Heat::WaitCondition properties: handle: { get_resource: wait_handle } count: 1 timeout: 1200 wait_handle: type: OS::Heat::WaitConditionHandle server1: type: OS::Nova::Server properties: name: { get_param: demo_server1_name } image: { get_param: demo_image_name } flavor: { get_param: demo_flavor_name } key_name: { get_param: demo_key_name } networks: - port: { get_resource: server1_port } user_data_format: RAW user_data: str_replace: params: wc_notify: { get_attr: ['wait_handle', 'curl_cli'] } template: | #!/bin/bash echo "141.250.2.227 openstack.fisica.unipg.it controller" >> /etc/hosts apt-get update apt-get dist-upgrade -y apt-get install nginx -y wget https://github.com/Cloud-PG/Handson-Openstack/raw/master/web-server.tar.gz tar -zxvf web-server.tar.gz -C /var/www service nginx restart wc_notify --data-binary '{"status": "SUCCESS"}' server1_port: type: OS::Neutron::Port properties: network_id: { get_resource: demo_net } fixed_ips: - subnet_id: { get_resource: demo_subnet } security_groups: [{ get_resource: webserver_security_group }] server1_floating_ip: type: OS::Neutron::FloatingIP properties: floating_network: { get_param: demo_ext_net_name } port_id: { get_resource: server1_port }