Allow the vnc server to bind on IPv6 address on computes
[apex-tripleo-heat-templates.git] / puppet / compute.yaml
1 heat_template_version: 2015-10-15
2
3 description: >
4   OpenStack hypervisor node configured via Puppet.
5
6 parameters:
7   AdminPassword:
8     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
9     type: string
10     hidden: true
11   CeilometerComputeAgent:
12     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
13     type: string
14     default: ''
15     constraints:
16     - allowed_values: ['', Present]
17   CeilometerMeteringSecret:
18     description: Secret shared by the ceilometer services.
19     type: string
20     hidden: true
21   CeilometerPassword:
22     description: The password for the ceilometer service account.
23     type: string
24     hidden: true
25   CinderEnableNfsBackend:
26     default: false
27     description: Whether to enable or not the NFS backend for Cinder
28     type: boolean
29   CinderEnableRbdBackend:
30     default: false
31     description: Whether to enable or not the Rbd backend for Cinder
32     type: boolean
33   Debug:
34     default: ''
35     description: Set to True to enable debugging on all services.
36     type: string
37   ExtraConfig:
38     default: {}
39     description: |
40       Additional hiera configuration to inject into the cluster. Note
41       that NovaComputeExtraConfig takes precedence over ExtraConfig.
42     type: json
43   Flavor:
44     description: Flavor for the nova compute node
45     type: string
46     constraints:
47       - custom_constraint: nova.flavor
48   GlanceHost:
49     type: string
50     default: ''  # Has to be here because of the ignored empty value bug
51   Image:
52     type: string
53     default: overcloud-compute
54     constraints:
55       - custom_constraint: glance.image
56   ImageUpdatePolicy:
57     default: 'REBUILD_PRESERVE_EPHEMERAL'
58     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
59     type: string
60   KeyName:
61     description: Name of an existing Nova key pair to enable SSH access to the instances
62     type: string
63     default: default
64     constraints:
65       - custom_constraint: nova.keypair
66   KeystoneAdminApiVirtualIP:
67     type: string
68     default: ''
69   KeystonePublicApiVirtualIP:
70      type: string
71      default: ''
72   NeutronBridgeMappings:
73     description: >
74       The OVS logical->physical bridge mappings to use. See the Neutron
75       documentation for details. Defaults to mapping br-ex - the external
76       bridge on hosts - to a physical name 'datacentre' which can be used
77       to create provider networks (and we use this for the default floating
78       network) - if changing this either use different post-install network
79       scripts or be sure to keep 'datacentre' as a mapping network name.
80     type: comma_delimited_list
81     default: "datacentre:br-ex"
82   NeutronEnableTunnelling:
83     type: string
84     default: "True"
85   NeutronEnableL2Pop:
86     type: string
87     description: >
88         Enable/disable the L2 population feature in the Neutron agents.
89     default: "False"
90   NeutronFlatNetworks:
91     type: comma_delimited_list
92     default: 'datacentre'
93     description: >
94       If set, flat networks to configure in neutron plugins.
95   NeutronHost:
96     type: string
97     default: ''  # Has to be here because of the ignored empty value bug
98   NeutronNetworkType:
99     type: comma_delimited_list
100     description: The tenant network type for Neutron.
101     default: 'vxlan'
102   NeutronNetworkVLANRanges:
103     default: 'datacentre:1:1000'
104     description: >
105       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
106       Neutron documentation for permitted values. Defaults to permitting any
107       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
108     type: comma_delimited_list
109   NeutronPassword:
110     description: The password for the neutron service account, used by neutron agents.
111     type: string
112     hidden: true
113   NeutronPhysicalBridge:
114     default: 'br-ex'
115     description: An OVS bridge to create for accessing external networks.
116     type: string
117   NeutronPublicInterface:
118     default: nic1
119     description: A port to add to the NeutronPhysicalBridge.
120     type: string
121   NeutronTenantMtu:
122     description: >
123       The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
124       be at least 50 bytes smaller than the MTU on the physical network. This
125       value will be used to set the MTU on the virtual Ethernet device.
126       This number is related to the value of NeutronDnsmasqOptions, since that
127       will determine the MTU that is assigned to the VM host through DHCP.
128     default: 1400
129     type: number
130   NeutronTunnelTypes:
131     type: comma_delimited_list
132     description: |
133         The tunnel types for the Neutron tenant network.
134     default: 'vxlan'
135   NeutronTunnelIdRanges:
136     description: |
137         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
138         of GRE tunnel IDs that are available for tenant network allocation
139     default: ["1:4094", ]
140     type: comma_delimited_list
141   NeutronVniRanges:
142     description: |
143         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
144         of VXLAN VNI IDs that are available for tenant network allocation
145     default: ["1:4094", ]
146     type: comma_delimited_list
147   NeutronPublicInterfaceRawDevice:
148     default: ''
149     type: string
150   NeutronDVR:
151     default: 'False'
152     type: string
153   NeutronMetadataProxySharedSecret:
154     description: Shared secret to prevent spoofing
155     type: string
156     hidden: true
157   NeutronCorePlugin:
158     default: 'ml2'
159     description: |
160         The core plugin for Neutron. The value should be the entrypoint to be loaded
161         from neutron.core_plugins namespace.
162     type: string
163   NeutronServicePlugins:
164     default: "router,qos"
165     description: |
166         Comma-separated list of service plugin entrypoints to be loaded from the
167         neutron.service_plugins namespace.
168     type: comma_delimited_list
169   NeutronTypeDrivers:
170     default: "vxlan,vlan,flat,gre"
171     description: |
172         Comma-separated list of network type driver entrypoints to be loaded.
173     type: comma_delimited_list
174   NeutronMechanismDrivers:
175     default: 'openvswitch'
176     description: |
177         The mechanism drivers for the Neutron tenant network.
178     type: comma_delimited_list
179   NeutronAgentExtensions:
180     default: "qos"
181     description: |
182         Comma-separated list of extensions enabled for the Neutron agents.
183     type: comma_delimited_list
184   # Not relevant for Computes, should be removed
185   NeutronAllowL3AgentFailover:
186     default: 'True'
187     description: Allow automatic l3-agent failover
188     type: string
189   # Not relevant for Computes, should be removed
190   NeutronL3HA:
191     default: 'False'
192     description: Whether to enable l3-agent HA
193     type: string
194   NeutronAgentMode:
195     default: 'dvr_snat'
196     description: Agent mode for the neutron-l3-agent on the controller hosts
197     type: string
198   NovaApiHost:
199     type: string
200     default: ''  # Has to be here because of the ignored empty value bug
201   NovaComputeDriver:
202     type: string
203     default: libvirt.LibvirtDriver
204   NovaComputeExtraConfig:
205     default: {}
206     description: |
207       NovaCompute specific configuration to inject into the cluster. Same
208       structure as ExtraConfig.
209     type: json
210   NovaComputeLibvirtType:
211     type: string
212     default: kvm
213   NovaComputeLibvirtVifDriver:
214     default: ''
215     description: Libvirt VIF driver configuration for the network
216     type: string
217   NovaEnableRbdBackend:
218     default: false
219     description: Whether to enable or not the Rbd backend for Nova
220     type: boolean
221   NovaIPv6:
222     default: false
223     description: Enable IPv6 features in Nova
224     type: boolean
225   NovaPassword:
226     description: The password for the nova service account, used by nova-api.
227     type: string
228     hidden: true
229   NovaPublicIP:
230     type: string
231     default: ''  # Has to be here because of the ignored empty value bug
232   NovaOVSBridge:
233     default: 'br-int'
234     description: Name of integration bridge used by Open vSwitch
235     type: string
236   NovaSecurityGroupAPI:
237     default: 'neutron'
238     description: The full class name of the security API class
239     type: string
240   NtpServer:
241     default: ''
242     description: Comma-separated list of ntp servers
243     type: comma_delimited_list
244   RabbitHost:
245     type: string
246     default: ''  # Has to be here because of the ignored empty value bug
247   RabbitPassword:
248     default: guest
249     description: The password for RabbitMQ
250     type: string
251     hidden: true
252   RabbitUserName:
253     default: guest
254     description: The username for RabbitMQ
255     type: string
256   RabbitClientUseSSL:
257     default: false
258     description: >
259         Rabbit client subscriber parameter to specify
260         an SSL connection to the RabbitMQ host.
261     type: string
262   RabbitClientPort:
263     default: 5672
264     description: Set rabbit subscriber port, change this if using SSL
265     type: number
266   SnmpdReadonlyUserName:
267     default: ro_snmp_user
268     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
269     type: string
270   SnmpdReadonlyUserPassword:
271     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
272     type: string
273     hidden: true
274   UpgradeLevelNovaCompute:
275     type: string
276     description: Nova Compute upgrade level
277     default: ''
278   EnablePackageInstall:
279     default: 'false'
280     description: Set to true to enable package installation via Puppet
281     type: boolean
282   ServiceNetMap:
283     default: {}
284     description: Mapping of service_name -> network name. Typically set
285                  via parameter_defaults in the resource registry.
286     type: json
287   EndpointMap:
288     default: {}
289     description: Mapping of service endpoint -> protocol. Typically set
290                  via parameter_defaults in the resource registry.
291     type: json
292   TimeZone:
293     default: 'UTC'
294     description: The timezone to be set on compute nodes.
295     type: string
296   UpdateIdentifier:
297     default: ''
298     type: string
299     description: >
300       Setting to a previously unused value during stack-update will trigger
301       package update on all nodes
302   Hostname:
303     type: string
304     default: '' # Defaults to Heat created hostname
305   HostnameMap:
306     type: json
307     default: {}
308     description: Optional mapping to override hostnames
309   NetworkDeploymentActions:
310     type: comma_delimited_list
311     description: >
312       Heat action when to apply network configuration changes
313     default: ['CREATE']
314   SoftwareConfigTransport:
315     default: POLL_SERVER_CFN
316     description: |
317       How the server should receive the metadata required for software configuration.
318     type: string
319     constraints:
320     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
321   CloudDomain:
322     default: ''
323     type: string
324     description: >
325       The DNS domain used for the hosts. This should match the dhcp_domain
326       configured in the Undercloud neutron. Defaults to localdomain.
327   ServerMetadata:
328     default: {}
329     description: >
330       Extra properties or metadata passed to Nova for the created nodes in
331       the overcloud. It's accessible via the Nova metadata API.
332     type: json
333   SchedulerHints:
334     type: json
335     description: Optional scheduler hints to pass to nova
336     default: {}
337
338 resources:
339
340   NovaCompute:
341     type: OS::Nova::Server
342     properties:
343       image:
344         {get_param: Image}
345       image_update_policy:
346         get_param: ImageUpdatePolicy
347       flavor: {get_param: Flavor}
348       key_name: {get_param: KeyName}
349       networks:
350         - network: ctlplane
351       user_data_format: SOFTWARE_CONFIG
352       user_data: {get_resource: UserData}
353       name:
354         str_replace:
355             template: {get_param: Hostname}
356             params: {get_param: HostnameMap}
357       software_config_transport: {get_param: SoftwareConfigTransport}
358       metadata: {get_param: ServerMetadata}
359       scheduler_hints: {get_param: SchedulerHints}
360
361   # Combine the NodeAdminUserData and NodeUserData mime archives
362   UserData:
363     type: OS::Heat::MultipartMime
364     properties:
365       parts:
366       - config: {get_resource: NodeAdminUserData}
367         type: multipart
368       - config: {get_resource: NodeUserData}
369         type: multipart
370
371   # Creates the "heat-admin" user if configured via the environment
372   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
373   NodeAdminUserData:
374     type: OS::TripleO::NodeAdminUserData
375
376   # For optional operator additional userdata
377   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
378   NodeUserData:
379     type: OS::TripleO::NodeUserData
380
381   ExternalPort:
382     type: OS::TripleO::Compute::Ports::ExternalPort
383     properties:
384       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
385
386   InternalApiPort:
387     type: OS::TripleO::Compute::Ports::InternalApiPort
388     properties:
389       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
390
391   StoragePort:
392     type: OS::TripleO::Compute::Ports::StoragePort
393     properties:
394       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
395
396   StorageMgmtPort:
397     type: OS::TripleO::Compute::Ports::StorageMgmtPort
398     properties:
399       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
400
401   TenantPort:
402     type: OS::TripleO::Compute::Ports::TenantPort
403     properties:
404       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
405
406   ManagementPort:
407     type: OS::TripleO::Compute::Ports::ManagementPort
408     properties:
409       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
410
411   NetIpMap:
412     type: OS::TripleO::Network::Ports::NetIpMap
413     properties:
414       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
415       ExternalIp: {get_attr: [ExternalPort, ip_address]}
416       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
417       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
418       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
419       StorageIp: {get_attr: [StoragePort, ip_address]}
420       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
421       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
422       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
423       TenantIp: {get_attr: [TenantPort, ip_address]}
424       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
425       ManagementIp: {get_attr: [ManagementPort, ip_address]}
426       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
427
428   NetworkConfig:
429     type: OS::TripleO::Compute::Net::SoftwareConfig
430     properties:
431       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
432       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
433       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
434       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
435       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
436       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
437       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
438
439   NetworkDeployment:
440     type: OS::TripleO::SoftwareDeployment
441     properties:
442       name: NetworkDeployment
443       config: {get_resource: NetworkConfig}
444       server: {get_resource: NovaCompute}
445       actions: {get_param: NetworkDeploymentActions}
446       input_values:
447         bridge_name: {get_param: NeutronPhysicalBridge}
448         interface_name: {get_param: NeutronPublicInterface}
449
450   NovaComputeConfig:
451     type: OS::Heat::StructuredConfig
452     properties:
453       group: os-apply-config
454       config:
455         hiera:
456           hierarchy:
457             - '"%{::uuid}"'
458             - heat_config_%{::deploy_config_name}
459             - compute_extraconfig
460             - extraconfig
461             - compute
462             - ceph_cluster # provided by CephClusterConfig
463             - ceph
464             - all_nodes # provided by allNodesConfig
465             - '"%{::osfamily}"'
466             - common
467             - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
468             - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
469             - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
470             - midonet_data # Optionally provided by AllNodesExtraConfig
471             - neutron_opencontrail_data  # Optionally provided by ComputeExtraConfigPre
472           datafiles:
473             compute_extraconfig:
474               mapped_data: {get_param: NovaComputeExtraConfig}
475             extraconfig:
476               mapped_data: {get_param: ExtraConfig}
477             common:
478               raw_data: {get_file: hieradata/common.yaml}
479             ceph:
480               raw_data: {get_file: hieradata/ceph.yaml}
481             compute:
482               raw_data: {get_file: hieradata/compute.yaml}
483               mapped_data:
484                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
485                 nova::use_ipv6: {get_input: nova_ipv6}
486                 nova::debug: {get_input: debug}
487                 nova::rabbit_userid: {get_input: rabbit_username}
488                 nova::rabbit_password: {get_input: rabbit_password}
489                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
490                 nova::rabbit_port: {get_input: rabbit_client_port}
491                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
492                 nova_compute_driver: {get_input: nova_compute_driver}
493                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
494                 nova::compute::neutron::libvirt_vif_driver: {get_input: nova_compute_libvirt_vif_driver}
495                 nova_api_host: {get_input: nova_api_host}
496                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
497                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
498                 rbd_persistent_storage: {get_input: cinder_enable_rbd_backend}
499                 nova_password: {get_input: nova_password}
500                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
501                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
502                 nova::vncproxy::common::vncproxy_protocol: {get_input: nova_vncproxy_protocol}
503                 nova::vncproxy::common::vncproxy_host: {get_input: nova_vncproxy_host}
504                 nova::vncproxy::common::vncproxy_port: {get_input: nova_vncproxy_port}
505                 nova::network::neutron::neutron_ovs_bridge: {get_input: nova_ovs_bridge}
506                 nova::network::neutron::security_group_api: {get_input: nova_security_group_api}
507                 ceilometer::debug: {get_input: debug}
508                 ceilometer::rabbit_userid: {get_input: rabbit_username}
509                 ceilometer::rabbit_password: {get_input: rabbit_password}
510                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
511                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
512                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
513                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
514                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
515                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
516                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
517                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
518                 nova::glance_api_servers: {get_input: glance_api_servers}
519                 neutron::debug: {get_input: debug}
520                 neutron::rabbit_password: {get_input: rabbit_password}
521                 neutron::rabbit_user: {get_input: rabbit_username}
522                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
523                 neutron::rabbit_port: {get_input: rabbit_client_port}
524                 neutron::plugins::ml2::flat_networks: {get_input: neutron_flat_networks}
525                 neutron_host: {get_input: neutron_host}
526                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
527
528                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
529                 neutron::plugins::ml2::tenant_network_types: {get_input: neutron_tenant_network_types}
530                 neutron::agents::ml2::ovs::tunnel_types: {get_input: neutron_tunnel_types}
531                 neutron::agents::ml2::ovs::extensions: {get_input: neutron_agent_extensions}
532                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
533                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
534                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
535                 neutron::agents::ml2::ovs::bridge_mappings: {get_input: neutron_bridge_mappings}
536                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
537                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
538                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
539                 neutron_public_interface: {get_input: neutron_public_interface}
540                 nova::network::neutron::neutron_password: {get_input: neutron_password}
541                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
542                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
543                 neutron_router_distributed: {get_input: neutron_router_distributed}
544                 neutron_agent_mode: {get_input: neutron_agent_mode}
545                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
546                 neutron::core_plugin: {get_input: neutron_core_plugin}
547                 neutron::service_plugins: {get_input: neutron_service_plugins}
548                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
549                 neutron::plugins::ml2::mechanism_drivers: {get_input: neutron_mechanism_drivers}
550                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
551                 keystone_public_api_virtual_ip: {get_input: keystone_vip}
552                 admin_password: {get_input: admin_password}
553                 ntp::servers: {get_input: ntp_servers}
554                 timezone::timezone: {get_input: timezone}
555                 tripleo::packages::enable_install: {get_input: enable_package_install}
556                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
557
558   NovaComputeDeployment:
559     type: OS::TripleO::SoftwareDeployment
560     depends_on: NetworkDeployment
561     properties:
562       name: NovaComputeDeployment
563       config: {get_resource: NovaComputeConfig}
564       server: {get_resource: NovaCompute}
565       input_values:
566         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
567         debug: {get_param: Debug}
568         nova_compute_driver: {get_param: NovaComputeDriver}
569         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
570         nova_compute_libvirt_vif_driver: {get_param: NovaComputeLibvirtVifDriver}
571         nova_public_ip: {get_param: NovaPublicIP}
572         nova_api_host: {get_param: NovaApiHost}
573         nova_password: {get_param: NovaPassword}
574         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
575         nova_ipv6: {get_param: NovaIPv6}
576         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
577         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
578         nova_vncproxy_protocol: {get_param: [EndpointMap, NovaVNCProxyPublic, protocol]}
579         nova_vncproxy_host: {get_param: [EndpointMap, NovaVNCProxyPublic, host]}
580         nova_vncproxy_port: {get_param: [EndpointMap, NovaVNCProxyPublic, port]}
581         nova_ovs_bridge: {get_param: NovaOVSBridge}
582         nova_security_group_api: {get_param: NovaSecurityGroupAPI}
583         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
584         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
585         ceilometer_password: {get_param: CeilometerPassword}
586         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
587         ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri]}
588         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
589         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
590         glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
591         neutron_flat_networks:
592           str_replace:
593             template: NETWORKS
594             params:
595               NETWORKS: {get_param: NeutronFlatNetworks}
596         neutron_host: {get_param: NeutronHost}
597         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
598         neutron_tunnel_id_ranges:
599           str_replace:
600             template: RANGES
601             params:
602               RANGES: {get_param: NeutronTunnelIdRanges}
603         neutron_vni_ranges:
604           str_replace:
605             template: RANGES
606             params:
607               RANGES: {get_param: NeutronVniRanges}
608         neutron_tenant_network_types:
609           str_replace:
610             template: TYPES
611             params:
612               TYPES: {get_param: NeutronNetworkType}
613         neutron_tunnel_types:
614           str_replace:
615             template: TYPES
616             params:
617               TYPES: {get_param: NeutronTunnelTypes}
618         neutron_network_vlan_ranges:
619           str_replace:
620             template: RANGES
621             params:
622               RANGES: {get_param: NeutronNetworkVLANRanges}
623         neutron_bridge_mappings:
624           str_replace:
625             template: MAPPINGS
626             params:
627               MAPPINGS: {get_param: NeutronBridgeMappings}
628         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
629         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
630         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
631         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
632         neutron_public_interface: {get_param: NeutronPublicInterface}
633         neutron_password: {get_param: NeutronPassword}
634         neutron_agent_mode: {get_param: NeutronAgentMode}
635         neutron_router_distributed: {get_param: NeutronDVR}
636         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
637         neutron_core_plugin: {get_param: NeutronCorePlugin}
638         neutron_service_plugins:
639           str_replace:
640             template: PLUGINS
641             params:
642               PLUGINS: {get_param: NeutronServicePlugins}
643         neutron_type_drivers:
644           str_replace:
645             template: DRIVERS
646             params:
647               DRIVERS: {get_param: NeutronTypeDrivers}
648         neutron_mechanism_drivers:
649           str_replace:
650             template: MECHANISMS
651             params:
652               MECHANISMS: {get_param: NeutronMechanismDrivers}
653         neutron_agent_extensions:
654           str_replace:
655             template: AGENT_EXTENSIONS
656             params:
657               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
658         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
659         neutron_internal_url: {get_param: [EndpointMap, NeutronInternal, uri]}
660         neutron_auth_url: {get_param: [EndpointMap, KeystoneV3Admin, uri]}
661         keystone_vip: {get_param: KeystonePublicApiVirtualIP}
662         admin_password: {get_param: AdminPassword}
663         rabbit_username: {get_param: RabbitUserName}
664         rabbit_password: {get_param: RabbitPassword}
665         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
666         rabbit_client_port: {get_param: RabbitClientPort}
667         ntp_servers: {get_param: NtpServer}
668         timezone: {get_param: TimeZone}
669         enable_package_install: {get_param: EnablePackageInstall}
670         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
671
672   # Resource for site-specific injection of root certificate
673   NodeTLSCAData:
674     depends_on: NovaComputeDeployment
675     type: OS::TripleO::NodeTLSCAData
676     properties:
677       server: {get_resource: NovaCompute}
678
679   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
680   ComputeExtraConfigPre:
681     depends_on: NovaComputeDeployment
682     type: OS::TripleO::ComputeExtraConfigPre
683     properties:
684         server: {get_resource: NovaCompute}
685
686   # Hook for site-specific additional pre-deployment config,
687   # applying to all nodes, e.g node registration/unregistration
688   NodeExtraConfig:
689     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
690     type: OS::TripleO::NodeExtraConfig
691     properties:
692         server: {get_resource: NovaCompute}
693
694   UpdateConfig:
695     type: OS::TripleO::Tasks::PackageUpdate
696
697   UpdateDeployment:
698     type: OS::Heat::SoftwareDeployment
699     properties:
700       name: UpdateDeployment
701       config: {get_resource: UpdateConfig}
702       server: {get_resource: NovaCompute}
703       input_values:
704         update_identifier:
705           get_param: UpdateIdentifier
706
707 outputs:
708   ip_address:
709     description: IP address of the server in the ctlplane network
710     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
711   external_ip_address:
712     description: IP address of the server in the external network
713     value: {get_attr: [ExternalPort, ip_address]}
714   internal_api_ip_address:
715     description: IP address of the server in the internal_api network
716     value: {get_attr: [InternalApiPort, ip_address]}
717   storage_ip_address:
718     description: IP address of the server in the storage network
719     value: {get_attr: [StoragePort, ip_address]}
720   storage_mgmt_ip_address:
721     description: IP address of the server in the storage_mgmt network
722     value: {get_attr: [StorageMgmtPort, ip_address]}
723   tenant_ip_address:
724     description: IP address of the server in the tenant network
725     value: {get_attr: [TenantPort, ip_address]}
726   management_ip_address:
727     description: IP address of the server in the management network
728     value: {get_attr: [ManagementPort, ip_address]}
729   hostname:
730     description: Hostname of the server
731     value: {get_attr: [NovaCompute, name]}
732   hosts_entry:
733     description: >
734       Server's IP address and hostname in the /etc/hosts format
735     value:
736       str_replace:
737         template: |
738           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
739           EXTERNALIP EXTERNALHOST
740           INTERNAL_APIIP INTERNAL_APIHOST
741           STORAGEIP STORAGEHOST
742           STORAGE_MGMTIP STORAGE_MGMTHOST
743           TENANTIP TENANTHOST
744           MANAGEMENTIP MANAGEMENTHOST
745         params:
746           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
747           DOMAIN: {get_param: CloudDomain}
748           PRIMARYHOST: {get_attr: [NovaCompute, name]}
749           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
750           EXTERNALHOST:
751             list_join:
752             - '-'
753             - - {get_attr: [NovaCompute, name]}
754               - external
755           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
756           INTERNAL_APIHOST:
757             list_join:
758             - '-'
759             - - {get_attr: [NovaCompute, name]}
760               - internalapi
761           STORAGEIP: {get_attr: [StoragePort, ip_address]}
762           STORAGEHOST:
763             list_join:
764             - '-'
765             - - {get_attr: [NovaCompute, name]}
766               - storage
767           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
768           STORAGE_MGMTHOST:
769             list_join:
770             - '-'
771             - - {get_attr: [NovaCompute, name]}
772               - storagemgmt
773           TENANTIP: {get_attr: [TenantPort, ip_address]}
774           TENANTHOST:
775             list_join:
776             - '-'
777             - - {get_attr: [NovaCompute, name]}
778               - tenant
779           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
780           MANAGEMENTHOST:
781             list_join:
782             - '-'
783             - - {get_attr: [NovaCompute, name]}
784               - management
785   nova_server_resource:
786     description: Heat resource handle for the Nova compute server
787     value:
788       {get_resource: NovaCompute}
789   config_identifier:
790     description: identifier which changes if the node configuration may need re-applying
791     value:
792       list_join:
793       - ','
794       - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
795         - {get_attr: [NodeTLSCAData, deploy_stdout]}
796         - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
797         - {get_param: UpdateIdentifier}