Merge "Correction to SRIOV THT Examples"
[apex-tripleo-heat-templates.git] / puppet / compute-role.yaml
1 heat_template_version: 2016-10-14
2
3 description: >
4   OpenStack hypervisor node configured via Puppet.
5
6 parameters:
7   ExtraConfig:
8     default: {}
9     description: |
10       Additional hiera configuration to inject into the cluster. Note
11       that NovaComputeExtraConfig takes precedence over ExtraConfig.
12     type: json
13   OvercloudComputeFlavor:
14     description: Flavor for the nova compute node
15     default: baremetal
16     type: string
17     constraints:
18       - custom_constraint: nova.flavor
19   NovaImage:
20     type: string
21     default: overcloud-full
22     constraints:
23       - custom_constraint: glance.image
24   ImageUpdatePolicy:
25     default: 'REBUILD_PRESERVE_EPHEMERAL'
26     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
27     type: string
28   KeyName:
29     description: Name of an existing Nova key pair to enable SSH access to the instances
30     type: string
31     default: default
32     constraints:
33       - custom_constraint: nova.keypair
34   NeutronPhysicalBridge:
35     default: 'br-ex'
36     description: An OVS bridge to create for accessing external networks.
37     type: string
38   NeutronPublicInterface:
39     default: nic1
40     description: A port to add to the NeutronPhysicalBridge.
41     type: string
42   NodeIndex:
43     type: number
44     default: 0
45   NovaComputeExtraConfig:
46     default: {}
47     description: |
48       NovaCompute specific configuration to inject into the cluster. Same
49       structure as ExtraConfig.
50     type: json
51   NovaComputeIPs:
52     default: {}
53     type: json
54   ServiceNetMap:
55     default: {}
56     description: Mapping of service_name -> network name. Typically set
57                  via parameter_defaults in the resource registry.
58     type: json
59   EndpointMap:
60     default: {}
61     description: Mapping of service endpoint -> protocol. Typically set
62                  via parameter_defaults in the resource registry.
63     type: json
64   UpdateIdentifier:
65     default: ''
66     type: string
67     description: >
68       Setting to a previously unused value during stack-update will trigger
69       package update on all nodes
70   Hostname:
71     type: string
72     default: '' # Defaults to Heat created hostname
73   HostnameMap:
74     type: json
75     default: {}
76     description: Optional mapping to override hostnames
77   NetworkDeploymentActions:
78     type: comma_delimited_list
79     description: >
80       Heat action when to apply network configuration changes
81     default: ['CREATE']
82   SoftwareConfigTransport:
83     default: POLL_SERVER_CFN
84     description: |
85       How the server should receive the metadata required for software configuration.
86     type: string
87     constraints:
88     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
89   CloudDomain:
90     default: 'localdomain'
91     type: string
92     description: >
93       The DNS domain used for the hosts. This should match the dhcp_domain
94       configured in the Undercloud neutron. Defaults to localdomain.
95   NovaComputeServerMetadata:
96     default: {}
97     description: >
98       Extra properties or metadata passed to Nova for the created nodes in
99       the overcloud. It's accessible via the Nova metadata API. This option is
100       role-specific and is merged with the values given to the ServerMetadata
101       parameter.
102     type: json
103   ServerMetadata:
104     default: {}
105     description: >
106       Extra properties or metadata passed to Nova for the created nodes in
107       the overcloud. It's accessible via the Nova metadata API. This applies to
108       all roles and is merged with a role-specific metadata parameter.
109     type: json
110   NovaComputeSchedulerHints:
111     type: json
112     description: Optional scheduler hints to pass to nova
113     default: {}
114   ServiceConfigSettings:
115     type: json
116     default: {}
117   ServiceNames:
118     type: comma_delimited_list
119     default: []
120   MonitoringSubscriptions:
121     type: comma_delimited_list
122     default: []
123   ConfigCommand:
124     type: string
125     description: Command which will be run whenever configuration data changes
126     default: os-refresh-config --timeout 14400
127
128 resources:
129
130   NovaCompute:
131     type: OS::TripleO::Server
132     metadata:
133       os-collect-config:
134         command: {get_param: ConfigCommand}
135     properties:
136       image: {get_param: NovaImage}
137       image_update_policy:
138         get_param: ImageUpdatePolicy
139       flavor: {get_param: OvercloudComputeFlavor}
140       key_name: {get_param: KeyName}
141       networks:
142         - network: ctlplane
143       user_data_format: SOFTWARE_CONFIG
144       user_data: {get_resource: UserData}
145       name:
146         str_replace:
147             template: {get_param: Hostname}
148             params: {get_param: HostnameMap}
149       software_config_transport: {get_param: SoftwareConfigTransport}
150       metadata:
151         map_merge:
152           - {get_param: ServerMetadata}
153           - {get_param: NovaComputeServerMetadata}
154       scheduler_hints: {get_param: NovaComputeSchedulerHints}
155
156   # Combine the NodeAdminUserData and NodeUserData mime archives
157   UserData:
158     type: OS::Heat::MultipartMime
159     properties:
160       parts:
161       - config: {get_resource: NodeAdminUserData}
162         type: multipart
163       - config: {get_resource: NodeUserData}
164         type: multipart
165
166   # Creates the "heat-admin" user if configured via the environment
167   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
168   NodeAdminUserData:
169     type: OS::TripleO::NodeAdminUserData
170
171   # For optional operator additional userdata
172   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
173   NodeUserData:
174     type: OS::TripleO::NodeUserData
175
176   ExternalPort:
177     type: OS::TripleO::Compute::Ports::ExternalPort
178     properties:
179       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
180       IPPool: {get_param: NovaComputeIPs}
181       NodeIndex: {get_param: NodeIndex}
182
183   InternalApiPort:
184     type: OS::TripleO::Compute::Ports::InternalApiPort
185     properties:
186       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
187       IPPool: {get_param: NovaComputeIPs}
188       NodeIndex: {get_param: NodeIndex}
189
190   StoragePort:
191     type: OS::TripleO::Compute::Ports::StoragePort
192     properties:
193       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
194       IPPool: {get_param: NovaComputeIPs}
195       NodeIndex: {get_param: NodeIndex}
196
197   StorageMgmtPort:
198     type: OS::TripleO::Compute::Ports::StorageMgmtPort
199     properties:
200       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
201       IPPool: {get_param: NovaComputeIPs}
202       NodeIndex: {get_param: NodeIndex}
203
204   TenantPort:
205     type: OS::TripleO::Compute::Ports::TenantPort
206     properties:
207       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
208       IPPool: {get_param: NovaComputeIPs}
209       NodeIndex: {get_param: NodeIndex}
210
211   ManagementPort:
212     type: OS::TripleO::Compute::Ports::ManagementPort
213     properties:
214       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
215       IPPool: {get_param: NovaComputeIPs}
216       NodeIndex: {get_param: NodeIndex}
217
218   NetIpMap:
219     type: OS::TripleO::Network::Ports::NetIpMap
220     properties:
221       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
222       ExternalIp: {get_attr: [ExternalPort, ip_address]}
223       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
224       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
225       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
226       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
227       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
228       StorageIp: {get_attr: [StoragePort, ip_address]}
229       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
230       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
231       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
232       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
233       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
234       TenantIp: {get_attr: [TenantPort, ip_address]}
235       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
236       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
237       ManagementIp: {get_attr: [ManagementPort, ip_address]}
238       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
239       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
240
241   NetHostMap:
242     type: OS::Heat::Value
243     properties:
244       type: json
245       value:
246         external:
247           fqdn:
248             list_join:
249             - '.'
250             - - {get_attr: [NovaCompute, name]}
251               - external
252               - {get_param: CloudDomain}
253           short:
254             list_join:
255             - '.'
256             - - {get_attr: [NovaCompute, name]}
257               - external
258         internal_api:
259           fqdn:
260             list_join:
261             - '.'
262             - - {get_attr: [NovaCompute, name]}
263               - internalapi
264               - {get_param: CloudDomain}
265           short:
266             list_join:
267             - '.'
268             - - {get_attr: [NovaCompute, name]}
269               - internalapi
270         storage:
271           fqdn:
272             list_join:
273             - '.'
274             - - {get_attr: [NovaCompute, name]}
275               - storage
276               - {get_param: CloudDomain}
277           short:
278             list_join:
279             - '.'
280             - - {get_attr: [NovaCompute, name]}
281               - storage
282         storage_mgmt:
283           fqdn:
284             list_join:
285             - '.'
286             - - {get_attr: [NovaCompute, name]}
287               - storagemgmt
288               - {get_param: CloudDomain}
289           short:
290             list_join:
291             - '.'
292             - - {get_attr: [NovaCompute, name]}
293               - storagemgmt
294         tenant:
295           fqdn:
296             list_join:
297             - '.'
298             - - {get_attr: [NovaCompute, name]}
299               - tenant
300               - {get_param: CloudDomain}
301           short:
302             list_join:
303             - '.'
304             - - {get_attr: [NovaCompute, name]}
305               - tenant
306         management:
307           fqdn:
308             list_join:
309             - '.'
310             - - {get_attr: [NovaCompute, name]}
311               - management
312               - {get_param: CloudDomain}
313           short:
314             list_join:
315             - '.'
316             - - {get_attr: [NovaCompute, name]}
317               - management
318         ctlplane:
319           fqdn:
320             list_join:
321             - '.'
322             - - {get_attr: [NovaCompute, name]}
323               - ctlplane
324               - {get_param: CloudDomain}
325           short:
326             list_join:
327             - '.'
328             - - {get_attr: [NovaCompute, name]}
329               - ctlplane
330
331   NetworkConfig:
332     type: OS::TripleO::Compute::Net::SoftwareConfig
333     properties:
334       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
335       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
336       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
337       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
338       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
339       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
340       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
341
342   NetworkDeployment:
343     type: OS::TripleO::SoftwareDeployment
344     properties:
345       name: NetworkDeployment
346       config: {get_resource: NetworkConfig}
347       server: {get_resource: NovaCompute}
348       actions: {get_param: NetworkDeploymentActions}
349       input_values:
350         bridge_name: {get_param: NeutronPhysicalBridge}
351         interface_name: {get_param: NeutronPublicInterface}
352
353   NovaComputeConfig:
354     type: OS::Heat::StructuredConfig
355     properties:
356       group: hiera
357       config:
358         hierarchy:
359           - '"%{::uuid}"'
360           - heat_config_%{::deploy_config_name}
361           - compute_extraconfig
362           - extraconfig
363           - service_names
364           - service_configs
365           - compute
366           - bootstrap_node # provided by allNodesConfig
367           - all_nodes # provided by allNodesConfig
368           - vip_data # provided by allNodesConfig
369           - '"%{::osfamily}"'
370           - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
371           - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
372           - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
373           - midonet_data # Optionally provided by AllNodesExtraConfig
374           - neutron_opencontrail_data  # Optionally provided by ComputeExtraConfigPre
375           - cisco_aci_data # Optionally provided by ComputeExtraConfigPre
376         merge_behavior: deeper
377         datafiles:
378           service_names:
379             service_names: {get_param: ServiceNames}
380             sensu::subscriptions: {get_param: MonitoringSubscriptions}
381           service_configs:
382             map_replace:
383               - {get_param: ServiceConfigSettings}
384               - values: {get_attr: [NetIpMap, net_ip_map]}
385           compute_extraconfig: {get_param: NovaComputeExtraConfig}
386           extraconfig: {get_param: ExtraConfig}
387           compute:
388             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
389             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
390             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
391             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
392             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
393             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
394             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
395
396   NovaComputeDeployment:
397     type: OS::TripleO::SoftwareDeployment
398     depends_on: NetworkDeployment
399     properties:
400       name: NovaComputeDeployment
401       config: {get_resource: NovaComputeConfig}
402       server: {get_resource: NovaCompute}
403       input_values:
404         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
405
406   # Resource for site-specific injection of root certificate
407   NodeTLSCAData:
408     depends_on: NovaComputeDeployment
409     type: OS::TripleO::NodeTLSCAData
410     properties:
411       server: {get_resource: NovaCompute}
412
413   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
414   ComputeExtraConfigPre:
415     depends_on: NovaComputeDeployment
416     type: OS::TripleO::ComputeExtraConfigPre
417     properties:
418         server: {get_resource: NovaCompute}
419
420   # Hook for site-specific additional pre-deployment config,
421   # applying to all nodes, e.g node registration/unregistration
422   NodeExtraConfig:
423     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
424     type: OS::TripleO::NodeExtraConfig
425     properties:
426         server: {get_resource: NovaCompute}
427
428   UpdateConfig:
429     type: OS::TripleO::Tasks::PackageUpdate
430
431   UpdateDeployment:
432     type: OS::Heat::SoftwareDeployment
433     properties:
434       name: UpdateDeployment
435       config: {get_resource: UpdateConfig}
436       server: {get_resource: NovaCompute}
437       input_values:
438         update_identifier:
439           get_param: UpdateIdentifier
440
441 outputs:
442   ip_address:
443     description: IP address of the server in the ctlplane network
444     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
445   external_ip_address:
446     description: IP address of the server in the external network
447     value: {get_attr: [ExternalPort, ip_address]}
448   internal_api_ip_address:
449     description: IP address of the server in the internal_api network
450     value: {get_attr: [InternalApiPort, ip_address]}
451   storage_ip_address:
452     description: IP address of the server in the storage network
453     value: {get_attr: [StoragePort, ip_address]}
454   storage_mgmt_ip_address:
455     description: IP address of the server in the storage_mgmt network
456     value: {get_attr: [StorageMgmtPort, ip_address]}
457   tenant_ip_address:
458     description: IP address of the server in the tenant network
459     value: {get_attr: [TenantPort, ip_address]}
460   management_ip_address:
461     description: IP address of the server in the management network
462     value: {get_attr: [ManagementPort, ip_address]}
463   hostname:
464     description: Hostname of the server
465     value: {get_attr: [NovaCompute, name]}
466   hostname_map:
467     description: Mapping of network names to hostnames
468     value:
469       external: {get_attr: [NetHostMap, value, external, fqdn]}
470       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
471       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
472       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
473       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
474       management: {get_attr: [NetHostMap, value, management, fqdn]}
475       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
476   hosts_entry:
477     description: >
478       Server's IP address and hostname in the /etc/hosts format
479     value:
480       str_replace:
481         template: |
482           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
483           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
484           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
485           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
486           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
487           TENANTIP TENANTHOST.DOMAIN TENANTHOST
488           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
489           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
490         params:
491           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
492           DOMAIN: {get_param: CloudDomain}
493           PRIMARYHOST: {get_attr: [NovaCompute, name]}
494           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
495           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
496           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
497           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
498           STORAGEIP: {get_attr: [StoragePort, ip_address]}
499           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
500           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
501           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
502           TENANTIP: {get_attr: [TenantPort, ip_address]}
503           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
504           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
505           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
506           CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
507           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
508   nova_server_resource:
509     description: Heat resource handle for the Nova compute server
510     value:
511       {get_resource: NovaCompute}