# Pastebin y6BCt56Y heat_template_version: 2013-05-23 description: > [... Paste] parameters: key_name: type: string description: Name of keypair to assign to servers tier1_image: type: string description: Name of image to use for tier1 server tier1_flavor: type: string description: Flavor to use for tier1 server tier1_vol_size: type: number description: The size of the Cinder volume for tier1 server tier1_vol_type: type: string description: The volume type of the Cinder volume for tier1 server tier2_image: type: string description: Name of image to use for tier2 server tier2_flavor: type: string description: Flavor to use for tier2 server tier2_vol_size: type: number description: The size of the Cinder volume for tier2 server tier2_vol_type: type: string description: The volume type of the Cinder volume for tier1 server public_net_id: type: string description: > ID of public network for which floating IP addresses will be allocated private_net_id: type: string description: ID of private network into which servers get deployed private_subnet_id: type: string description: ID of private sub network into which servers get deployed resources: ########## # TIER 1 # ########## Tier1_Server: type: OS::Nova::Server depends_on: Tier1_root_vol properties: block_device_mapping: [{ device_name: "vda", volume_id : { get_resource : Tier1_root_vol }, delete_on_termination : "true" }] flavor: { get_param: tier1_flavor } key_name: { get_param: key_name } networks: - port: { get_resource: Tier1_port } user_data_format: RAW user_data: get_resource: Tier1_UserData Tier1_UserData: type: OS::Heat::CloudConfig properties: cloud_config: preserve_hostname: true manage_etc_hosts: false write_files: [... Paste] bootcmd: [... Paste] runcmd: [... Paste] Tier1_port: type: OS::Neutron::Port properties: network_id: { get_param: private_net_id } fixed_ips: - subnet_id: { get_param: private_subnet_id } security_groups: [{ get_resource: Tier1_security_group }] Tier1_floating_ip: type: OS::Neutron::FloatingIP properties: floating_network_id: { get_param: public_net_id } port_id: { get_resource: Tier1_port } Tier1_security_group: type: OS::Neutron::SecurityGroup properties: description: Add security group rules for server 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 Tier1_root_vol: type: OS::Cinder::Volume ################## BUG WAITCONDITION : Attendre la creation du tier2 depends_on: Tier2_Server properties: size: { get_param: tier1_vol_size } image: { get_param: tier1_image } volume_type: { get_param: tier1_vol_type } ########## # TIER 2 # ########## Tier2_Server: type: OS::Nova::Server depends_on: Tier2_root_vol properties: block_device_mapping: [{ device_name: "vda", volume_id : { get_resource : Tier2_root_vol }, delete_on_termination : "true" }] flavor: { get_param: tier2_flavor } key_name: { get_param: key_name } networks: - port: { get_resource: Tier2_port } user_data_format: RAW user_data: get_resource: Tier2_UserData Tier2_UserData: type: OS::Heat::CloudConfig properties: cloud_config: [... Paste] Tier2_port: type: OS::Neutron::Port properties: network_id: { get_param: private_net_id } fixed_ips: - subnet_id: { get_param: private_subnet_id } security_groups: [{ get_resource: Tier2_security_group }] #### BUG PAS DE RESEAU AU BOOT SI PAS DE FIP. NE DOIT PAS RESTER Tier2_floating_ip: type: OS::Neutron::FloatingIP properties: floating_network_id: { get_param: public_net_id } port_id: { get_resource: Tier2_port } Tier2_security_group: type: OS::Neutron::SecurityGroup properties: description: Add security group rules for server rules: - remote_group_id: { get_resource: Tier1_security_group } direction: ingress protocol: udp port_range_max: 65535 port_range_min: 1 ethertype: IPv4 remote_mode: remote_group_id - remote_group_id: { get_resource: Tier1_security_group } direction: ingress protocol: tcp port_range_max: 65535 port_range_min: 1 ethertype: "IPv4" remote_mode: remote_group_id - remote_group_id: { get_resource: Tier1_security_group } direction: ingress protocol: icmp ethertype: IPv4 remote_mode: remote_group_id Tier2_root_vol: type: OS::Cinder::Volume properties: size: { get_param: tier2_vol_size } image: { get_param: tier2_image } volume_type: { get_param: tier2_vol_type } SwiftContainer: type: OS::Swift::Container Generic_UserData: type: OS::Heat::CloudConfig properties: cloud_config: [... Paste] outputs: Tier1_private_ip: description: Tier1 private IP address value: { get_attr: [ Tier1_Server, first_address ] } Tier1_public_ip: description: Tier1 public IP address value: { get_attr: [ Tier1_floating_ip, floating_ip_address ] } Tier1_Server_id: description: Tier1 nova ressource id value: { get_resource: Tier1_Server } Tier1_port_id: description: Tier1 port id value: { get_resource: Tier1_port } Tier1_security_group_id: description: Tier1 security id value: { get_resource: Tier1_security_group } Tier1_root_vol_id: description: Tier1 cinder volume id value: { get_resource: Tier1_root_vol } Tier1_floating_ip_id: description: Tier1 cinder volume id value: { get_resource: Tier1_floating_ip } Tier2_private_ip: description: Tier2 private IP address value: { get_attr: [ Tier2_Server, first_address ] } Tier2_public_ip: description: Tier2 public IP address value: { get_attr: [ Tier2_floating_ip, floating_ip_address ] } Tier2_Server_id: description: Tier2 nova ressource id value: { get_resource: Tier2_Server } Tier2_port_id: description: Tier2 port id value: { get_resource: Tier2_port } Tier2_security_group_id: description: Tier2 security id value: { get_resource: Tier2_security_group } Tier2_root_vol_id: description: Tier2 cinder volume id value: { get_resource: Tier2_root_vol } Tier2_floating_ip_id: description: Tier2 cinder volume id value: { get_resource: Tier2_floating_ip } Bucket_domain: description: "Domain of Swift host" value: { get_attr: [SwiftContainer, DomainName] }