Merge "Add a ceph-storage node upgrade script for the upgrade workflow"
[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   NovaPassword:
222     description: The password for the nova service account, used by nova-api.
223     type: string
224     hidden: true
225   NovaPublicIP:
226     type: string
227     default: ''  # Has to be here because of the ignored empty value bug
228   NovaOVSBridge:
229     default: 'br-int'
230     description: Name of integration bridge used by Open vSwitch
231     type: string
232   NovaSecurityGroupAPI:
233     default: 'neutron'
234     description: The full class name of the security API class
235     type: string
236   NtpServer:
237     default: ''
238     description: Comma-separated list of ntp servers
239     type: comma_delimited_list
240   RabbitHost:
241     type: string
242     default: ''  # Has to be here because of the ignored empty value bug
243   RabbitPassword:
244     default: guest
245     description: The password for RabbitMQ
246     type: string
247     hidden: true
248   RabbitUserName:
249     default: guest
250     description: The username for RabbitMQ
251     type: string
252   RabbitClientUseSSL:
253     default: false
254     description: >
255         Rabbit client subscriber parameter to specify
256         an SSL connection to the RabbitMQ host.
257     type: string
258   RabbitClientPort:
259     default: 5672
260     description: Set rabbit subscriber port, change this if using SSL
261     type: number
262   SnmpdReadonlyUserName:
263     default: ro_snmp_user
264     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
265     type: string
266   SnmpdReadonlyUserPassword:
267     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
268     type: string
269     hidden: true
270   UpgradeLevelNovaCompute:
271     type: string
272     description: Nova Compute upgrade level
273     default: ''
274   EnablePackageInstall:
275     default: 'false'
276     description: Set to true to enable package installation via Puppet
277     type: boolean
278   ServiceNetMap:
279     default: {}
280     description: Mapping of service_name -> network name. Typically set
281                  via parameter_defaults in the resource registry.
282     type: json
283   EndpointMap:
284     default: {}
285     description: Mapping of service endpoint -> protocol. Typically set
286                  via parameter_defaults in the resource registry.
287     type: json
288   TimeZone:
289     default: 'UTC'
290     description: The timezone to be set on compute nodes.
291     type: string
292   UpdateIdentifier:
293     default: ''
294     type: string
295     description: >
296       Setting to a previously unused value during stack-update will trigger
297       package update on all nodes
298   Hostname:
299     type: string
300     default: '' # Defaults to Heat created hostname
301   HostnameMap:
302     type: json
303     default: {}
304     description: Optional mapping to override hostnames
305   NetworkDeploymentActions:
306     type: comma_delimited_list
307     description: >
308       Heat action when to apply network configuration changes
309     default: ['CREATE']
310   SoftwareConfigTransport:
311     default: POLL_SERVER_CFN
312     description: |
313       How the server should receive the metadata required for software configuration.
314     type: string
315     constraints:
316     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
317   CloudDomain:
318     default: ''
319     type: string
320     description: >
321       The DNS domain used for the hosts. This should match the dhcp_domain
322       configured in the Undercloud neutron. Defaults to localdomain.
323   ServerMetadata:
324     default: {}
325     description: >
326       Extra properties or metadata passed to Nova for the created nodes in
327       the overcloud. It's accessible via the Nova metadata API.
328     type: json
329   SchedulerHints:
330     type: json
331     description: Optional scheduler hints to pass to nova
332     default: {}
333
334 resources:
335
336   NovaCompute:
337     type: OS::Nova::Server
338     properties:
339       image:
340         {get_param: Image}
341       image_update_policy:
342         get_param: ImageUpdatePolicy
343       flavor: {get_param: Flavor}
344       key_name: {get_param: KeyName}
345       networks:
346         - network: ctlplane
347       user_data_format: SOFTWARE_CONFIG
348       user_data: {get_resource: UserData}
349       name:
350         str_replace:
351             template: {get_param: Hostname}
352             params: {get_param: HostnameMap}
353       software_config_transport: {get_param: SoftwareConfigTransport}
354       metadata: {get_param: ServerMetadata}
355       scheduler_hints: {get_param: SchedulerHints}
356
357   # Combine the NodeAdminUserData and NodeUserData mime archives
358   UserData:
359     type: OS::Heat::MultipartMime
360     properties:
361       parts:
362       - config: {get_resource: NodeAdminUserData}
363         type: multipart
364       - config: {get_resource: NodeUserData}
365         type: multipart
366
367   # Creates the "heat-admin" user if configured via the environment
368   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
369   NodeAdminUserData:
370     type: OS::TripleO::NodeAdminUserData
371
372   # For optional operator additional userdata
373   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
374   NodeUserData:
375     type: OS::TripleO::NodeUserData
376
377   ExternalPort:
378     type: OS::TripleO::Compute::Ports::ExternalPort
379     properties:
380       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
381
382   InternalApiPort:
383     type: OS::TripleO::Compute::Ports::InternalApiPort
384     properties:
385       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
386
387   StoragePort:
388     type: OS::TripleO::Compute::Ports::StoragePort
389     properties:
390       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
391
392   StorageMgmtPort:
393     type: OS::TripleO::Compute::Ports::StorageMgmtPort
394     properties:
395       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
396
397   TenantPort:
398     type: OS::TripleO::Compute::Ports::TenantPort
399     properties:
400       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
401
402   ManagementPort:
403     type: OS::TripleO::Compute::Ports::ManagementPort
404     properties:
405       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
406
407   NetIpMap:
408     type: OS::TripleO::Network::Ports::NetIpMap
409     properties:
410       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
411       ExternalIp: {get_attr: [ExternalPort, ip_address]}
412       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
413       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
414       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
415       StorageIp: {get_attr: [StoragePort, ip_address]}
416       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
417       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
418       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
419       TenantIp: {get_attr: [TenantPort, ip_address]}
420       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
421       ManagementIp: {get_attr: [ManagementPort, ip_address]}
422       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
423
424   NetworkConfig:
425     type: OS::TripleO::Compute::Net::SoftwareConfig
426     properties:
427       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
428       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
429       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
430       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
431       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
432       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
433       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
434
435   NetworkDeployment:
436     type: OS::TripleO::SoftwareDeployment
437     properties:
438       name: NetworkDeployment
439       config: {get_resource: NetworkConfig}
440       server: {get_resource: NovaCompute}
441       actions: {get_param: NetworkDeploymentActions}
442       input_values:
443         bridge_name: {get_param: NeutronPhysicalBridge}
444         interface_name: {get_param: NeutronPublicInterface}
445
446   NovaComputeConfig:
447     type: OS::Heat::StructuredConfig
448     properties:
449       group: os-apply-config
450       config:
451         hiera:
452           hierarchy:
453             - '"%{::uuid}"'
454             - heat_config_%{::deploy_config_name}
455             - compute_extraconfig
456             - extraconfig
457             - compute
458             - ceph_cluster # provided by CephClusterConfig
459             - ceph
460             - all_nodes # provided by allNodesConfig
461             - '"%{::osfamily}"'
462             - common
463             - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
464             - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
465             - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
466             - midonet_data # Optionally provided by AllNodesExtraConfig
467             - neutron_opencontrail_data  # Optionally provided by ComputeExtraConfigPre
468           datafiles:
469             compute_extraconfig:
470               mapped_data: {get_param: NovaComputeExtraConfig}
471             extraconfig:
472               mapped_data: {get_param: ExtraConfig}
473             common:
474               raw_data: {get_file: hieradata/common.yaml}
475             ceph:
476               raw_data: {get_file: hieradata/ceph.yaml}
477             compute:
478               raw_data: {get_file: hieradata/compute.yaml}
479               mapped_data:
480                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
481                 nova::debug: {get_input: debug}
482                 nova::rabbit_userid: {get_input: rabbit_username}
483                 nova::rabbit_password: {get_input: rabbit_password}
484                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
485                 nova::rabbit_port: {get_input: rabbit_client_port}
486                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
487                 nova_compute_driver: {get_input: nova_compute_driver}
488                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
489                 nova::compute::neutron::libvirt_vif_driver: {get_input: nova_compute_libvirt_vif_driver}
490                 nova_api_host: {get_input: nova_api_host}
491                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
492                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
493                 rbd_persistent_storage: {get_input: cinder_enable_rbd_backend}
494                 nova_password: {get_input: nova_password}
495                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
496                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
497                 nova::vncproxy::common::vncproxy_protocol: {get_input: nova_vncproxy_protocol}
498                 nova::vncproxy::common::vncproxy_host: {get_input: nova_vncproxy_host}
499                 nova::vncproxy::common::vncproxy_port: {get_input: nova_vncproxy_port}
500                 nova::network::neutron::neutron_ovs_bridge: {get_input: nova_ovs_bridge}
501                 nova::network::neutron::security_group_api: {get_input: nova_security_group_api}
502                 ceilometer::debug: {get_input: debug}
503                 ceilometer::rabbit_userid: {get_input: rabbit_username}
504                 ceilometer::rabbit_password: {get_input: rabbit_password}
505                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
506                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
507                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
508                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
509                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
510                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
511                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
512                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
513                 nova::glance_api_servers: {get_input: glance_api_servers}
514                 neutron::debug: {get_input: debug}
515                 neutron::rabbit_password: {get_input: rabbit_password}
516                 neutron::rabbit_user: {get_input: rabbit_username}
517                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
518                 neutron::rabbit_port: {get_input: rabbit_client_port}
519                 neutron::plugins::ml2::flat_networks: {get_input: neutron_flat_networks}
520                 neutron_host: {get_input: neutron_host}
521                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
522
523                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
524                 neutron::plugins::ml2::tenant_network_types: {get_input: neutron_tenant_network_types}
525                 neutron::agents::ml2::ovs::tunnel_types: {get_input: neutron_tunnel_types}
526                 neutron::agents::ml2::ovs::extensions: {get_input: neutron_agent_extensions}
527                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
528                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
529                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
530                 neutron::agents::ml2::ovs::bridge_mappings: {get_input: neutron_bridge_mappings}
531                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
532                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
533                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
534                 neutron_public_interface: {get_input: neutron_public_interface}
535                 nova::network::neutron::neutron_password: {get_input: neutron_password}
536                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
537                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
538                 neutron_router_distributed: {get_input: neutron_router_distributed}
539                 neutron_agent_mode: {get_input: neutron_agent_mode}
540                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
541                 neutron::core_plugin: {get_input: neutron_core_plugin}
542                 neutron::service_plugins: {get_input: neutron_service_plugins}
543                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
544                 neutron::plugins::ml2::mechanism_drivers: {get_input: neutron_mechanism_drivers}
545                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
546                 keystone_public_api_virtual_ip: {get_input: keystone_vip}
547                 admin_password: {get_input: admin_password}
548                 ntp::servers: {get_input: ntp_servers}
549                 timezone::timezone: {get_input: timezone}
550                 tripleo::packages::enable_install: {get_input: enable_package_install}
551                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
552
553   NovaComputeDeployment:
554     type: OS::TripleO::SoftwareDeployment
555     depends_on: NetworkDeployment
556     properties:
557       name: NovaComputeDeployment
558       config: {get_resource: NovaComputeConfig}
559       server: {get_resource: NovaCompute}
560       input_values:
561         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
562         debug: {get_param: Debug}
563         nova_compute_driver: {get_param: NovaComputeDriver}
564         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
565         nova_compute_libvirt_vif_driver: {get_param: NovaComputeLibvirtVifDriver}
566         nova_public_ip: {get_param: NovaPublicIP}
567         nova_api_host: {get_param: NovaApiHost}
568         nova_password: {get_param: NovaPassword}
569         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
570         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
571         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
572         nova_vncproxy_protocol: {get_param: [EndpointMap, NovaVNCProxyPublic, protocol]}
573         nova_vncproxy_host: {get_param: [EndpointMap, NovaVNCProxyPublic, host]}
574         nova_vncproxy_port: {get_param: [EndpointMap, NovaVNCProxyPublic, port]}
575         nova_ovs_bridge: {get_param: NovaOVSBridge}
576         nova_security_group_api: {get_param: NovaSecurityGroupAPI}
577         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
578         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
579         ceilometer_password: {get_param: CeilometerPassword}
580         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
581         ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri]}
582         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
583         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
584         glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
585         neutron_flat_networks:
586           str_replace:
587             template: NETWORKS
588             params:
589               NETWORKS: {get_param: NeutronFlatNetworks}
590         neutron_host: {get_param: NeutronHost}
591         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
592         neutron_tunnel_id_ranges:
593           str_replace:
594             template: RANGES
595             params:
596               RANGES: {get_param: NeutronTunnelIdRanges}
597         neutron_vni_ranges:
598           str_replace:
599             template: RANGES
600             params:
601               RANGES: {get_param: NeutronVniRanges}
602         neutron_tenant_network_types:
603           str_replace:
604             template: TYPES
605             params:
606               TYPES: {get_param: NeutronNetworkType}
607         neutron_tunnel_types:
608           str_replace:
609             template: TYPES
610             params:
611               TYPES: {get_param: NeutronTunnelTypes}
612         neutron_network_vlan_ranges:
613           str_replace:
614             template: RANGES
615             params:
616               RANGES: {get_param: NeutronNetworkVLANRanges}
617         neutron_bridge_mappings:
618           str_replace:
619             template: MAPPINGS
620             params:
621               MAPPINGS: {get_param: NeutronBridgeMappings}
622         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
623         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
624         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
625         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
626         neutron_public_interface: {get_param: NeutronPublicInterface}
627         neutron_password: {get_param: NeutronPassword}
628         neutron_agent_mode: {get_param: NeutronAgentMode}
629         neutron_router_distributed: {get_param: NeutronDVR}
630         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
631         neutron_core_plugin: {get_param: NeutronCorePlugin}
632         neutron_service_plugins:
633           str_replace:
634             template: PLUGINS
635             params:
636               PLUGINS: {get_param: NeutronServicePlugins}
637         neutron_type_drivers:
638           str_replace:
639             template: DRIVERS
640             params:
641               DRIVERS: {get_param: NeutronTypeDrivers}
642         neutron_mechanism_drivers:
643           str_replace:
644             template: MECHANISMS
645             params:
646               MECHANISMS: {get_param: NeutronMechanismDrivers}
647         neutron_agent_extensions:
648           str_replace:
649             template: AGENT_EXTENSIONS
650             params:
651               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
652         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
653         neutron_internal_url: {get_param: [EndpointMap, NeutronInternal, uri]}
654         neutron_auth_url: {get_param: [EndpointMap, KeystoneV3Admin, uri]}
655         keystone_vip: {get_param: KeystonePublicApiVirtualIP}
656         admin_password: {get_param: AdminPassword}
657         rabbit_username: {get_param: RabbitUserName}
658         rabbit_password: {get_param: RabbitPassword}
659         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
660         rabbit_client_port: {get_param: RabbitClientPort}
661         ntp_servers: {get_param: NtpServer}
662         timezone: {get_param: TimeZone}
663         enable_package_install: {get_param: EnablePackageInstall}
664         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
665
666   # Resource for site-specific injection of root certificate
667   NodeTLSCAData:
668     depends_on: NovaComputeDeployment
669     type: OS::TripleO::NodeTLSCAData
670     properties:
671       server: {get_resource: NovaCompute}
672
673   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
674   ComputeExtraConfigPre:
675     depends_on: NovaComputeDeployment
676     type: OS::TripleO::ComputeExtraConfigPre
677     properties:
678         server: {get_resource: NovaCompute}
679
680   # Hook for site-specific additional pre-deployment config,
681   # applying to all nodes, e.g node registration/unregistration
682   NodeExtraConfig:
683     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
684     type: OS::TripleO::NodeExtraConfig
685     properties:
686         server: {get_resource: NovaCompute}
687
688   UpdateConfig:
689     type: OS::TripleO::Tasks::PackageUpdate
690
691   UpdateDeployment:
692     type: OS::Heat::SoftwareDeployment
693     properties:
694       name: UpdateDeployment
695       config: {get_resource: UpdateConfig}
696       server: {get_resource: NovaCompute}
697       input_values:
698         update_identifier:
699           get_param: UpdateIdentifier
700
701 outputs:
702   ip_address:
703     description: IP address of the server in the ctlplane network
704     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
705   external_ip_address:
706     description: IP address of the server in the external network
707     value: {get_attr: [ExternalPort, ip_address]}
708   internal_api_ip_address:
709     description: IP address of the server in the internal_api network
710     value: {get_attr: [InternalApiPort, ip_address]}
711   storage_ip_address:
712     description: IP address of the server in the storage network
713     value: {get_attr: [StoragePort, ip_address]}
714   storage_mgmt_ip_address:
715     description: IP address of the server in the storage_mgmt network
716     value: {get_attr: [StorageMgmtPort, ip_address]}
717   tenant_ip_address:
718     description: IP address of the server in the tenant network
719     value: {get_attr: [TenantPort, ip_address]}
720   management_ip_address:
721     description: IP address of the server in the management network
722     value: {get_attr: [ManagementPort, ip_address]}
723   hostname:
724     description: Hostname of the server
725     value: {get_attr: [NovaCompute, name]}
726   hosts_entry:
727     description: >
728       Server's IP address and hostname in the /etc/hosts format
729     value:
730       str_replace:
731         template: |
732           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
733           EXTERNALIP EXTERNALHOST
734           INTERNAL_APIIP INTERNAL_APIHOST
735           STORAGEIP STORAGEHOST
736           STORAGE_MGMTIP STORAGE_MGMTHOST
737           TENANTIP TENANTHOST
738           MANAGEMENTIP MANAGEMENTHOST
739         params:
740           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
741           DOMAIN: {get_param: CloudDomain}
742           PRIMARYHOST: {get_attr: [NovaCompute, name]}
743           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
744           EXTERNALHOST:
745             list_join:
746             - '-'
747             - - {get_attr: [NovaCompute, name]}
748               - external
749           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
750           INTERNAL_APIHOST:
751             list_join:
752             - '-'
753             - - {get_attr: [NovaCompute, name]}
754               - internalapi
755           STORAGEIP: {get_attr: [StoragePort, ip_address]}
756           STORAGEHOST:
757             list_join:
758             - '-'
759             - - {get_attr: [NovaCompute, name]}
760               - storage
761           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
762           STORAGE_MGMTHOST:
763             list_join:
764             - '-'
765             - - {get_attr: [NovaCompute, name]}
766               - storagemgmt
767           TENANTIP: {get_attr: [TenantPort, ip_address]}
768           TENANTHOST:
769             list_join:
770             - '-'
771             - - {get_attr: [NovaCompute, name]}
772               - tenant
773           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
774           MANAGEMENTHOST:
775             list_join:
776             - '-'
777             - - {get_attr: [NovaCompute, name]}
778               - management
779   nova_server_resource:
780     description: Heat resource handle for the Nova compute server
781     value:
782       {get_resource: NovaCompute}
783   config_identifier:
784     description: identifier which changes if the node configuration may need re-applying
785     value:
786       list_join:
787       - ','
788       - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
789         - {get_attr: [NodeTLSCAData, deploy_stdout]}
790         - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
791         - {get_param: UpdateIdentifier}