Merge "Fix vncproxy_host for IPv6"
[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         # Remove brackets that may come if the IP address is IPv6.
580         # For DNS names and IPv4, this will just get the NovaVNCProxyPublic value
581         nova_vncproxy_host:
582           str_replace:
583             template: {get_param: [EndpointMap, NovaVNCProxyPublic, host]}
584             params:
585               '[': ''
586               ']': ''
587         nova_vncproxy_port: {get_param: [EndpointMap, NovaVNCProxyPublic, port]}
588         nova_ovs_bridge: {get_param: NovaOVSBridge}
589         nova_security_group_api: {get_param: NovaSecurityGroupAPI}
590         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
591         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
592         ceilometer_password: {get_param: CeilometerPassword}
593         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
594         ceilometer_agent_auth_url: {get_param: [EndpointMap, KeystoneInternal, uri]}
595         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
596         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
597         glance_api_servers: {get_param: [EndpointMap, GlanceInternal, uri]}
598         neutron_flat_networks:
599           str_replace:
600             template: NETWORKS
601             params:
602               NETWORKS: {get_param: NeutronFlatNetworks}
603         neutron_host: {get_param: NeutronHost}
604         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
605         neutron_tunnel_id_ranges:
606           str_replace:
607             template: RANGES
608             params:
609               RANGES: {get_param: NeutronTunnelIdRanges}
610         neutron_vni_ranges:
611           str_replace:
612             template: RANGES
613             params:
614               RANGES: {get_param: NeutronVniRanges}
615         neutron_tenant_network_types:
616           str_replace:
617             template: TYPES
618             params:
619               TYPES: {get_param: NeutronNetworkType}
620         neutron_tunnel_types:
621           str_replace:
622             template: TYPES
623             params:
624               TYPES: {get_param: NeutronTunnelTypes}
625         neutron_network_vlan_ranges:
626           str_replace:
627             template: RANGES
628             params:
629               RANGES: {get_param: NeutronNetworkVLANRanges}
630         neutron_bridge_mappings:
631           str_replace:
632             template: MAPPINGS
633             params:
634               MAPPINGS: {get_param: NeutronBridgeMappings}
635         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
636         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
637         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
638         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
639         neutron_public_interface: {get_param: NeutronPublicInterface}
640         neutron_password: {get_param: NeutronPassword}
641         neutron_agent_mode: {get_param: NeutronAgentMode}
642         neutron_router_distributed: {get_param: NeutronDVR}
643         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
644         neutron_core_plugin: {get_param: NeutronCorePlugin}
645         neutron_service_plugins:
646           str_replace:
647             template: PLUGINS
648             params:
649               PLUGINS: {get_param: NeutronServicePlugins}
650         neutron_type_drivers:
651           str_replace:
652             template: DRIVERS
653             params:
654               DRIVERS: {get_param: NeutronTypeDrivers}
655         neutron_mechanism_drivers:
656           str_replace:
657             template: MECHANISMS
658             params:
659               MECHANISMS: {get_param: NeutronMechanismDrivers}
660         neutron_agent_extensions:
661           str_replace:
662             template: AGENT_EXTENSIONS
663             params:
664               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
665         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
666         neutron_internal_url: {get_param: [EndpointMap, NeutronInternal, uri]}
667         neutron_auth_url: {get_param: [EndpointMap, KeystoneV3Admin, uri]}
668         keystone_vip: {get_param: KeystonePublicApiVirtualIP}
669         admin_password: {get_param: AdminPassword}
670         rabbit_username: {get_param: RabbitUserName}
671         rabbit_password: {get_param: RabbitPassword}
672         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
673         rabbit_client_port: {get_param: RabbitClientPort}
674         ntp_servers: {get_param: NtpServer}
675         timezone: {get_param: TimeZone}
676         enable_package_install: {get_param: EnablePackageInstall}
677         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
678
679   # Resource for site-specific injection of root certificate
680   NodeTLSCAData:
681     depends_on: NovaComputeDeployment
682     type: OS::TripleO::NodeTLSCAData
683     properties:
684       server: {get_resource: NovaCompute}
685
686   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
687   ComputeExtraConfigPre:
688     depends_on: NovaComputeDeployment
689     type: OS::TripleO::ComputeExtraConfigPre
690     properties:
691         server: {get_resource: NovaCompute}
692
693   # Hook for site-specific additional pre-deployment config,
694   # applying to all nodes, e.g node registration/unregistration
695   NodeExtraConfig:
696     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
697     type: OS::TripleO::NodeExtraConfig
698     properties:
699         server: {get_resource: NovaCompute}
700
701   UpdateConfig:
702     type: OS::TripleO::Tasks::PackageUpdate
703
704   UpdateDeployment:
705     type: OS::Heat::SoftwareDeployment
706     properties:
707       name: UpdateDeployment
708       config: {get_resource: UpdateConfig}
709       server: {get_resource: NovaCompute}
710       input_values:
711         update_identifier:
712           get_param: UpdateIdentifier
713
714 outputs:
715   ip_address:
716     description: IP address of the server in the ctlplane network
717     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
718   external_ip_address:
719     description: IP address of the server in the external network
720     value: {get_attr: [ExternalPort, ip_address]}
721   internal_api_ip_address:
722     description: IP address of the server in the internal_api network
723     value: {get_attr: [InternalApiPort, ip_address]}
724   storage_ip_address:
725     description: IP address of the server in the storage network
726     value: {get_attr: [StoragePort, ip_address]}
727   storage_mgmt_ip_address:
728     description: IP address of the server in the storage_mgmt network
729     value: {get_attr: [StorageMgmtPort, ip_address]}
730   tenant_ip_address:
731     description: IP address of the server in the tenant network
732     value: {get_attr: [TenantPort, ip_address]}
733   management_ip_address:
734     description: IP address of the server in the management network
735     value: {get_attr: [ManagementPort, ip_address]}
736   hostname:
737     description: Hostname of the server
738     value: {get_attr: [NovaCompute, name]}
739   hosts_entry:
740     description: >
741       Server's IP address and hostname in the /etc/hosts format
742     value:
743       str_replace:
744         template: |
745           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
746           EXTERNALIP EXTERNALHOST
747           INTERNAL_APIIP INTERNAL_APIHOST
748           STORAGEIP STORAGEHOST
749           STORAGE_MGMTIP STORAGE_MGMTHOST
750           TENANTIP TENANTHOST
751           MANAGEMENTIP MANAGEMENTHOST
752         params:
753           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
754           DOMAIN: {get_param: CloudDomain}
755           PRIMARYHOST: {get_attr: [NovaCompute, name]}
756           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
757           EXTERNALHOST:
758             list_join:
759             - '-'
760             - - {get_attr: [NovaCompute, name]}
761               - external
762           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
763           INTERNAL_APIHOST:
764             list_join:
765             - '-'
766             - - {get_attr: [NovaCompute, name]}
767               - internalapi
768           STORAGEIP: {get_attr: [StoragePort, ip_address]}
769           STORAGEHOST:
770             list_join:
771             - '-'
772             - - {get_attr: [NovaCompute, name]}
773               - storage
774           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
775           STORAGE_MGMTHOST:
776             list_join:
777             - '-'
778             - - {get_attr: [NovaCompute, name]}
779               - storagemgmt
780           TENANTIP: {get_attr: [TenantPort, ip_address]}
781           TENANTHOST:
782             list_join:
783             - '-'
784             - - {get_attr: [NovaCompute, name]}
785               - tenant
786           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
787           MANAGEMENTHOST:
788             list_join:
789             - '-'
790             - - {get_attr: [NovaCompute, name]}
791               - management
792   nova_server_resource:
793     description: Heat resource handle for the Nova compute server
794     value:
795       {get_resource: NovaCompute}
796   config_identifier:
797     description: identifier which changes if the node configuration may need re-applying
798     value:
799       list_join:
800       - ','
801       - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
802         - {get_attr: [NodeTLSCAData, deploy_stdout]}
803         - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
804         - {get_param: UpdateIdentifier}