heat_template_version: 2013-05-23 ################################# # # Changes in v0.2: # - Unique availability zone for each VM # - LAN8 and SLAN networks removed according to latest Prod/Type I diagram # - 2 DB VMs added # - Images corrected # - VM start-up order: SMP->DB->BE->FE (no error handling yet) # - Provisioning scripts placeholders # ################################# description: ASC Template parameters: # availability_zone_smp0: # type: string # default: nova # availability_zone_smp1: # type: string # default: nova # availability_zone_fe0: # type: string # default: nova # availability_zone_fe1: # type: string # default: nova # availability_zone_db0: # type: string # default: nova # availability_zone_db1: # type: string # default: nova # availability_zone_be0: # type: string # default: nova # availability_zone_be1: # type: string # default: nova # availability_zone_be2: # type: string # default: nova # availability_zone_be3: # type: string # default: nova # availability_zone_be4: # type: string # default: nova vnf_name: type: string description: Unique name for this VNF instance default: This_is_the_SCP_name vnf_id: type: string description: Unique ID for this VNF instance default: This_is_ths_SCP_id flavor_scp_be_id: type: string description: flavor type default: a1.Small flavor_scp_fe_id: type: string description: flavor type default: a1.Small flavor_smp_id: type: string description: flavor type default: a1.Small flavor_db_id: type: string description: flavor type default: a1.Small image_scp_be_id: type: string description: Image use to boot a server default: asc_base_image_be image_scp_fe_id: type: string description: Image use to boot a server default: asc_base_image_fe image_smp_id: type: string description: Image use to boot a server default: asc_base_image_smp image_db_id: type: string description: Image use to boot a server default: asc_base_image_db int_vscp_fe_cluster_net_id: type: string description: LAN2 FE Cluster/KA int_vscp_fe_cluster_cidr: type: string description: Private Network2 Address (CIDR notation) int_vscp_cluster_net_id: type: string description: LAN3 Cluster int_vscp_cluster_cidr: type: string description: Private Network3 Address (CIDR notation) int_vscp_db_network_net_id: type: string description: LAN4 DB int_vscp_db_network_cidr: type: string description: Private Network4 Address (CIDR notation) SIGNET_vrf_A1_direct_net_id: type: string description: Network name for SIGTRAN_A SIGNET_vrf_B1_direct_net_id: type: string description: Network name for SIGTRAN_B Cricket_OCS_protected_net_id: type: string description: Network name for CRICKET_OCS OAM_direct_net_id: type: string description: Network name for OAM be0_Cricket_OCS_protected_ips: type: string label: be0 port 5 OAM ip address description: be0 port 5 OAM ip address be1_Cricket_OCS_protected_ips: type: string label: be1 port 5 OAM ip address description: be1 port 5 OAM ip address be2_Cricket_OCS_protected_ips: type: string label: be2 port 5 OAM ip address description: be2 port 5 OAM ip address be3_Cricket_OCS_protected_ips: type: string label: be3 port 5 OAM ip address description: be3 port 5 OAM ip address be4_Cricket_OCS_protected_ips: type: string label: be4 port 5 OAM ip address description: be4 port 5 OAM ip address be0_OAM_direct_ips: type: string label: be0 port 7 OAM ip address description: be0 port 7 OAM ip address be1_OAM_direct_ips: type: string label: be1 port 7 OAM ip address description: be1 port 7 OAM ip address be2_OAM_direct_ips: type: string label: be2 port 7 OAM ip address description: be2 port 7 OAM ip address be3_OAM_direct_ips: type: string label: be3 port 7 OAM ip address description: be3 port 7 OAM ip address be4_OAM_direct_ips: type: string label: be4 port 7 OAM ip address description: be4 port 7 OAM ip address fe0_SIGNET_vrf_A1_direct_ips: type: string label: fe0 port 0 SIGTRAN ip address description: fe0 port 0 SIGTRAN ip address fe0_OAM_direct_ips: type: string label: fe0 port 7 OAM ip address description: fe0 port 7 OAM ip address fe1_SIGNET_vrf_B1_direct_ips: type: string label: fe1 port 1 SIGTRAN ip address description: fe1 port 1 SIGTRAN ip address fe1_OAM_direct_ips: type: string label: fe1 port 7 OAM ip address description: fe1 port 7 OAM ip address smp0_OAM_direct_ips: type: string label: smp0 port 7 OAM ip address description: smp0 port 7 OAM ip address smp1_OAM_direct_ips: type: string label: smp1 port 7 OAM ip address description: smp1 port 7 OAM ip address db0_OAM_direct_ips: type: string label: db0 port 7 OAM ip address description: smp0 port 7 OAM ip address db1_OAM_direct_ips: type: string label: smp1 port 7 OAM ip address description: db1 port 7 OAM ip address vm_scp_be0_name: type: string default: vSCP_BE0 description: name of VM vm_scp_be1_name: type: string default: vSCP_BE1 description: name of VM vm_scp_be2_name: type: string default: vSCP_BE2 description: name of VM vm_scp_be3_name: type: string default: vSCP_BE3 description: name of VM vm_scp_be4_name: type: string default: vSCP_BE4 description: name of VM vm_scp_fe0_name: type: string default: vSCP_FE0 description: name of VM vm_scp_fe1_name: type: string default: vSCP_FE1 description: name of VM vm_smp0_name: type: string default: vSMP0 description: name of VM vm_smp1_name: type: string default: vSMP1 description: name of VM vm_db0_name: type: string default: vDB0 description: name of VM vm_db1_name: type: string default: vDB1 description: name of VM resources: # scp_be_wait_condition: # type: OS::Heat::WaitCondition # properties: # handle: { get_resource: scp_be_wait_handle } # count: 5 # timeout: 300 # scp_be_wait_handle: # type: OS::Heat::WaitConditionHandle # # scp_fe_wait_condition: # type: OS::Heat::WaitCondition # properties: # handle: { get_resource: scp_fe_wait_handle } # count: 2 # timeout: 300 # scp_fe_wait_handle: # type: OS::Heat::WaitConditionHandle # # smp_wait_condition: # type: OS::Heat::WaitCondition # properties: # handle: { get_resource: smp_wait_handle } # count: 2 # timeout: 300 # smp_wait_handle: # type: OS::Heat::WaitConditionHandle # # db_wait_condition: # type: OS::Heat::WaitCondition # properties: # handle: { get_resource: db_wait_handle } # count: 2 # timeout: 300 # db_wait_handle: # type: OS::Heat::WaitConditionHandle FE_Affinity: type: OS::Nova::ServerGroup properties: policies: ["anti-affinity"] BE_Affinity: type: OS::Nova::ServerGroup properties: policies: ["anti-affinity"] SMP_Affinity: type: OS::Nova::ServerGroup properties: policies: ["anti-affinity"] DB_Affinity: type: OS::Nova::ServerGroup properties: policies: ["anti-affinity"] FE_Clustering_KA: type: OS::Contrail::VirtualNetwork properties: name: { get_param: int_vscp_fe_cluster_net_id } FE_Clustering_subnet: type: OS::Neutron::Subnet properties: network_id: { get_resource: FE_Clustering_KA } cidr: { get_param: int_vscp_fe_cluster_cidr } Clustering_Network: type: OS::Contrail::VirtualNetwork properties: name: { get_param: int_vscp_cluster_net_id } Clustering_Network_subnet: type: OS::Neutron::Subnet properties: network_id: { get_resource: Clustering_Network } cidr: { get_param: int_vscp_cluster_cidr } DB_Network: type: OS::Contrail::VirtualNetwork properties: name: { get_param: int_vscp_db_network_net_id } DB_Network_subnet: type: OS::Neutron::Subnet properties: network_id: { get_resource: DB_Network } cidr: { get_param: int_vscp_db_network_cidr } server_scp_be0: type: OS::Nova::Server # depends on: db_wait_condition properties: name: { get_param: vm_scp_be0_name } image: { get_param: image_scp_be_id } # availability_zone: { get_param: availability_zone_be0 } flavor: { get_param: flavor_scp_be_id } scheduler_hints: { group: { get_resource: BE_Affinity } } networks: - port: { get_resource: be0_port_3 } - port: { get_resource: be0_port_4 } - port: { get_resource: be0_port_5 } - port: { get_resource: be0_port_7 } metadata: vnf_id: { get_param: vnf_id } user_data: str_replace: template: | #!/bin/bash #todo: provision $vm_name wc_notify --data-binary '{"status": "SUCCESS"}' params: $vm_name: {get_param: vm_scp_be0_name} # wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] } be0_port_3: type: OS::Neutron::Port properties: network_id: { get_resource: Clustering_Network } be0_port_4: type: OS::Neutron::Port properties: network_id: { get_resource: DB_Network } be0_port_5: type: OS::Neutron::Port properties: network: { get_param: Cricket_OCS_protected_net_id } fixed_ips: [{"ip_address": {get_param: be0_Cricket_OCS_protected_ips}}] be0_port_7: type: OS::Neutron::Port properties: network: { get_param: OAM_direct_net_id } fixed_ips: [{"ip_address": {get_param: be0_OAM_direct_ips}}] server_scp_be1: type: OS::Nova::Server # depends on: db_wait_condition properties: name: { get_param: vm_scp_be1_name } image: { get_param: image_scp_be_id } # availability_zone: { get_param: availability_zone_be1 } flavor: { get_param: flavor_scp_be_id } scheduler_hints: { group: { get_resource: BE_Affinity } } networks: - port: { get_resource: be1_port_3 } - port: { get_resource: be1_port_4 } - port: { get_resource: be1_port_5 } - port: { get_resource: be1_port_7 } metadata: vnf_id: { get_param: vnf_id } user_data: str_replace: template: | #!/bin/bash #todo: provision $vm_name wc_notify --data-binary '{"status": "SUCCESS"}' params: $vm_name: {get_param: vm_scp_be1_name} # wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] } be1_port_3: type: OS::Neutron::Port properties: network_id: { get_resource: Clustering_Network } be1_port_4: type: OS::Neutron::Port properties: network_id: { get_resource: DB_Network } be1_port_5: type: OS::Neutron::Port properties: network: { get_param: Cricket_OCS_protected_net_id } fixed_ips: [{"ip_address": {get_param: be1_Cricket_OCS_protected_ips}}] be1_port_7: type: OS::Neutron::Port properties: network: { get_param: OAM_direct_net_id } fixed_ips: [{"ip_address": {get_param: be1_OAM_direct_ips}}] server_scp_be2: type: OS::Nova::Server # depends on: db_wait_condition properties: name: { get_param: vm_scp_be2_name } image: { get_param: image_scp_be_id } # availability_zone: { get_param: availability_zone_be2 } flavor: { get_param: flavor_scp_be_id } scheduler_hints: { group: { get_resource: BE_Affinity } } networks: - port: { get_resource: be2_port_3 } - port: { get_resource: be2_port_4 } - port: { get_resource: be2_port_5 } - port: { get_resource: be2_port_7 } metadata: vnf_id: { get_param: vnf_id } user_data: str_replace: template: | #!/bin/bash #todo: provision $vm_name wc_notify --data-binary '{"status": "SUCCESS"}' params: $vm_name: {get_param: vm_scp_be2_name} # wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] } be2_port_3: type: OS::Neutron::Port properties: network_id: { get_resource: Clustering_Network } be2_port_4: type: OS::Neutron::Port properties: network_id: { get_resource: DB_Network } be2_port_5: type: OS::Neutron::Port properties: network: { get_param: Cricket_OCS_protected_net_id } fixed_ips: [{"ip_address": {get_param: be2_Cricket_OCS_protected_ips}}] be2_port_7: type: OS::Neutron::Port properties: network: { get_param: OAM_direct_net_id } fixed_ips: [{"ip_address": {get_param: be2_OAM_direct_ips}}] server_scp_be3: type: OS::Nova::Server # depends on: db_wait_condition properties: name: { get_param: vm_scp_be3_name } image: { get_param: image_scp_be_id } # availability_zone: { get_param: availability_zone_be3 } flavor: { get_param: flavor_scp_be_id } scheduler_hints: { group: { get_resource: BE_Affinity } } networks: - port: { get_resource: be3_port_3 } - port: { get_resource: be3_port_4 } - port: { get_resource: be3_port_5 } - port: { get_resource: be3_port_7 } metadata: vnf_id: { get_param: vnf_id } user_data: str_replace: template: | #!/bin/bash #todo: provision $vm_name wc_notify --data-binary '{"status": "SUCCESS"}' params: $vm_name: {get_param: vm_scp_be3_name} # wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] } be3_port_3: type: OS::Neutron::Port properties: network_id: { get_resource: Clustering_Network } be3_port_4: type: OS::Neutron::Port properties: network_id: { get_resource: DB_Network } be3_port_5: type: OS::Neutron::Port properties: network: { get_param: Cricket_OCS_protected_net_id } fixed_ips: [{"ip_address": {get_param: be3_Cricket_OCS_protected_ips}}] be3_port_7: type: OS::Neutron::Port properties: network: { get_param: OAM_direct_net_id } fixed_ips: [{"ip_address": {get_param: be3_OAM_direct_ips}}] server_scp_be4: type: OS::Nova::Server # depends on: db_wait_condition properties: name: { get_param: vm_scp_be4_name } image: { get_param: image_scp_be_id } # availability_zone: { get_param: availability_zone_be4 } flavor: { get_param: flavor_scp_be_id } scheduler_hints: { group: { get_resource: BE_Affinity } } networks: - port: { get_resource: be4_port_3 } - port: { get_resource: be4_port_4 } - port: { get_resource: be4_port_5 } - port: { get_resource: be4_port_7 } metadata: vnf_id: { get_param: vnf_id } user_data: str_replace: template: | #!/bin/bash #todo: provision $vm_name wc_notify --data-binary '{"status": "SUCCESS"}' params: $vm_name: {get_param: vm_scp_be4_name} # wc_notify: { get_attr: ['scp_be_wait_handle', 'curl_cli'] } be4_port_3: type: OS::Neutron::Port properties: network_id: { get_resource: Clustering_Network } be4_port_4: type: OS::Neutron::Port properties: network_id: { get_resource: DB_Network } be4_port_5: type: OS::Neutron::Port properties: network: { get_param: Cricket_OCS_protected_net_id } fixed_ips: [{"ip_address": {get_param: be4_Cricket_OCS_protected_ips}}] be4_port_7: type: OS::Neutron::Port properties: network: { get_param: OAM_direct_net_id } fixed_ips: [{"ip_address": {get_param: be4_OAM_direct_ips}}] server_scp_fe0: type: OS::Nova::Server # depends on: scp_be_wait_condition properties: name: { get_param: vm_scp_fe0_name } image: { get_param: image_scp_fe_id } # availability_zone: { get_param: availability_zone_fe0 } flavor: { get_param: flavor_scp_fe_id } scheduler_hints: { group: { get_resource: FE_Affinity } } networks: - port: { get_resource: fe0_port_0 } - port: { get_resource: fe0_port_2 } - port: { get_resource: fe0_port_3 } - port: { get_resource: fe0_port_7 } metadata: vnf_id: { get_param: vnf_id } user_data: str_replace: template: | #!/bin/bash #todo: provision $vm_name wc_notify --data-binary '{"status": "SUCCESS"}' params: $vm_name: {get_param: vm_scp_fe0_name} # wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] } fe0_port_0: type: OS::Neutron::Port properties: network: { get_param: SIGNET_vrf_A1_direct_net_id } fixed_ips: [{"ip_address": {get_param: fe0_SIGNET_vrf_A1_direct_ips}}] fe0_port_2: type: OS::Neutron::Port properties: network_id: { get_resource: FE_Clustering_KA } fe0_port_3: type: OS::Neutron::Port properties: network_id: { get_resource: Clustering_Network } fe0_port_7: type: OS::Neutron::Port properties: network: { get_param: OAM_direct_net_id } fixed_ips: [{"ip_address": {get_param: fe0_OAM_direct_ips}}] server_scp_fe1: type: OS::Nova::Server # depends on: scp_be_wait_condition properties: name: { get_param: vm_scp_fe1_name } image: { get_param: image_scp_fe_id } # availability_zone: { get_param: availability_zone_fe1 } flavor: { get_param: flavor_scp_fe_id } scheduler_hints: { group: { get_resource: FE_Affinity } } networks: - port: { get_resource: fe1_port_1 } - port: { get_resource: fe1_port_2 } - port: { get_resource: fe1_port_3 } - port: { get_resource: fe1_port_7 } metadata: vnf_id: { get_param: vnf_id } user_data: str_replace: template: | #!/bin/bash #todo: provision $vm_name wc_notify --data-binary '{"status": "SUCCESS"}' params: $vm_name: {get_param: vm_scp_fe1_name} # wc_notify: { get_attr: ['scp_fe_wait_handle', 'curl_cli'] } fe1_port_1: type: OS::Neutron::Port properties: network: { get_param: SIGNET_vrf_B1_direct_net_id } fixed_ips: [{"ip_address": {get_param: fe1_SIGNET_vrf_B1_direct_ips}}] fe1_port_2: type: OS::Neutron::Port properties: network_id: { get_resource: FE_Clustering_KA } fe1_port_3: type: OS::Neutron::Port properties: network_id: { get_resource: Clustering_Network } fe1_port_7: type: OS::Neutron::Port properties: network: { get_param: OAM_direct_net_id } fixed_ips: [{"ip_address": {get_param: fe1_OAM_direct_ips}}] server_smp0: type: OS::Nova::Server properties: name: { get_param: vm_smp0_name } image: { get_param: image_smp_id } # availability_zone: { get_param: availability_zone_smp0 } flavor: { get_param: flavor_smp_id } scheduler_hints: { group: { get_resource: SMP_Affinity } } networks: - port: { get_resource: smp0_port_7 } metadata: vnf_id: { get_param: vnf_id } user_data: str_replace: template: | #!/bin/bash #todo: provision $vm_name wc_notify --data-binary '{"status": "SUCCESS"}' params: $vm_name: {get_param: vm_smp0_name} # wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] } smp0_port_7: type: OS::Neutron::Port properties: network: { get_param: OAM_direct_net_id } fixed_ips: [{"ip_address": {get_param: smp0_OAM_direct_ips}}] server_smp1: type: OS::Nova::Server properties: name: { get_param: vm_smp1_name } image: { get_param: image_smp_id } # availability_zone: { get_param: availability_zone_smp1 } flavor: { get_param: flavor_smp_id } scheduler_hints: { group: { get_resource: SMP_Affinity } } networks: - port: { get_resource: smp1_port_7 } metadata: vnf_id: { get_param: vnf_id } user_data: str_replace: template: | #!/bin/bash #todo: provision $vm_name wc_notify --data-binary '{"status": "SUCCESS"}' params: $vm_name: {get_param: vm_smp1_name} # wc_notify: { get_attr: ['smp_wait_handle', 'curl_cli'] } smp1_port_7: type: OS::Neutron::Port properties: network: { get_param: OAM_direct_net_id } fixed_ips: [{"ip_address": {get_param: smp1_OAM_direct_ips}}] server_db0: type: OS::Nova::Server # depends_on: smp_wait_condition properties: name: { get_param: vm_db0_name } image: { get_param: image_db_id } # availability_zone: { get_param: availability_zone_db0 } flavor: { get_param: flavor_db_id } scheduler_hints: { group: { get_resource: DB_Affinity } } networks: - port: { get_resource: db0_port_4 } - port: { get_resource: db0_port_7 } metadata: vnf_id: { get_param: vnf_id } user_data: str_replace: template: | #!/bin/bash #todo: provision $vm_name wc_notify --data-binary '{"status": "SUCCESS"}' params: $vm_name: {get_param: vm_db0_name} # wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] } db0_port_4: type: OS::Neutron::Port properties: network_id: { get_resource: DB_Network } db0_port_7: type: OS::Neutron::Port properties: network: { get_param: OAM_direct_net_id } fixed_ips: [{"ip_address": {get_param: db0_OAM_direct_ips}}] server_db1: type: OS::Nova::Server # depends_on: smp_wait_condition properties: name: { get_param: vm_db1_name } image: { get_param: image_db_id } # availability_zone: { get_param: availability_zone_db1 } flavor: { get_param: flavor_db_id } scheduler_hints: { group: { get_resource: DB_Affinity } } networks: - port: { get_resource: db1_port_4 } - port: { get_resource: db1_port_7 } metadata: vnf_id: { get_param: vnf_id } user_data: str_replace: template: | #!/bin/bash #todo: provision $vm_name wc_notify --data-binary '{"status": "SUCCESS"}' params: $vm_name: {get_param: vm_db1_name} # wc_notify: { get_attr: ['db_wait_handle', 'curl_cli'] } db1_port_4: type: OS::Neutron::Port properties: network_id: { get_resource: DB_Network } db1_port_7: type: OS::Neutron::Port properties: network: { get_param: OAM_direct_net_id } fixed_ips: [{"ip_address": {get_param: db1_OAM_direct_ips}}]