Puppet / Compute: allow to run Ephemeral only storage with RBD
[apex-tripleo-heat-templates.git] / puppet / compute.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   OpenStack hypervisor node configured via Puppet.
5
6 parameters:
7   AdminPassword:
8     default: unset
9     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
10     type: string
11     hidden: true
12   CeilometerComputeAgent:
13     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
14     type: string
15     default: ''
16     constraints:
17     - allowed_values: ['', Present]
18   CeilometerMeteringSecret:
19     default: unset
20     description: Secret shared by the ceilometer services.
21     type: string
22     hidden: true
23   CeilometerPassword:
24     default: unset
25     description: The password for the ceilometer service account.
26     type: string
27     hidden: true
28   CinderEnableNfsBackend:
29     default: false
30     description: Whether to enable or not the NFS backend for Cinder
31     type: boolean
32   CinderEnableRbdBackend:
33     default: false
34     description: Whether to enable or not the Rbd backend for Cinder
35     type: boolean
36   Debug:
37     default: ''
38     description: Set to True to enable debugging on all services.
39     type: string
40   ExtraConfig:
41     default: {}
42     description: |
43       Additional hiera configuration to inject into the cluster. Note
44       that NovaComputeExtraConfig takes precedence over ExtraConfig.
45     type: json
46   Flavor:
47     description: Flavor for the nova compute node
48     type: string
49     constraints:
50       - custom_constraint: nova.flavor
51   GlanceHost:
52     type: string
53     default: ''  # Has to be here because of the ignored empty value bug
54   GlancePort:
55     default: "9292"
56     description: Glance port.
57     type: string
58   GlanceProtocol:
59     default: http
60     description: Protocol to use when connecting to glance, set to https for SSL.
61     type: string
62   Image:
63     type: string
64     default: overcloud-compute
65     constraints:
66       - custom_constraint: glance.image
67   ImageUpdatePolicy:
68     default: 'REBUILD_PRESERVE_EPHEMERAL'
69     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
70     type: string
71   KeyName:
72     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
73     type: string
74     default: default
75     constraints:
76       - custom_constraint: nova.keypair
77   KeystoneAdminApiVirtualIP:
78     type: string
79     default: ''
80   KeystonePublicApiVirtualIP:
81      type: string
82      default: ''
83   NeutronBridgeMappings:
84     description: >
85       The OVS logical->physical bridge mappings to use. See the Neutron
86       documentation for details. Defaults to mapping br-ex - the external
87       bridge on hosts - to a physical name 'datacentre' which can be used
88       to create provider networks (and we use this for the default floating
89       network) - if changing this either use different post-install network
90       scripts or be sure to keep 'datacentre' as a mapping network name.
91     type: string
92     default: "datacentre:br-ex"
93   NeutronEnableTunnelling:
94     type: string
95     default: "True"
96   NeutronFlatNetworks:
97     type: string
98     default: 'datacentre'
99     description: >
100       If set, flat networks to configure in neutron plugins.
101   NeutronHost:
102     type: string
103     default: ''  # Has to be here because of the ignored empty value bug
104   NeutronNetworkType:
105     type: string
106     description: The tenant network type for Neutron, either gre or vxlan.
107     default: 'vxlan'
108   NeutronNetworkVLANRanges:
109     default: 'datacentre'
110     description: >
111       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
112       Neutron documentation for permitted values. Defaults to permitting any
113       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
114     type: comma_delimited_list
115   NeutronPassword:
116     default: unset
117     description: The password for the neutron service account, used by neutron agents.
118     type: string
119     hidden: true
120   NeutronPhysicalBridge:
121     default: 'br-ex'
122     description: An OVS bridge to create for accessing external networks.
123     type: string
124   NeutronPublicInterface:
125     default: nic1
126     description: A port to add to the NeutronPhysicalBridge.
127     type: string
128   NeutronTunnelTypes:
129     type: string
130     description: |
131         The tunnel types for the Neutron tenant network. To specify multiple
132         values, use a comma separated string, like so: 'gre,vxlan'
133     default: 'vxlan'
134   NeutronTunnelIdRanges:
135     description: |
136         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
137         of GRE tunnel IDs that are available for tenant network allocation
138     default: ["1:1000", ]
139     type: comma_delimited_list
140   NeutronVniRanges:
141     description: |
142         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
143         of VXLAN VNI IDs that are available for tenant network allocation
144     default: ["1:1000", ]
145     type: comma_delimited_list
146   NeutronPublicInterfaceRawDevice:
147     default: ''
148     type: string
149   NeutronDVR:
150     default: 'False'
151     type: string
152   NeutronMetadataProxySharedSecret:
153     default: 'unset'
154     description: Shared secret to prevent spoofing
155     type: string
156   NeutronCorePlugin:
157     default: 'ml2'
158     description: |
159         The core plugin for Neutron. The value should be the entrypoint to be loaded
160         from neutron.core_plugins namespace.
161     type: string
162   NeutronServicePlugins:
163     default: "router"
164     description: |
165         Comma-separated list of service plugin entrypoints to be loaded from the
166         neutron.service_plugins namespace.
167     type: comma_delimited_list
168   NeutronTypeDrivers:
169     default: "vxlan,vlan,flat,gre"
170     description: |
171         Comma-separated list of network type driver entrypoints to be loaded.
172     type: comma_delimited_list
173   NeutronMechanismDrivers:
174     default: 'openvswitch'
175     description: |
176         The mechanism drivers for the Neutron tenant network. To specify multiple
177         values, use a comma separated string, like so: 'openvswitch,l2_population'
178     type: string
179   # Not relevant for Computes, should be removed
180   NeutronAllowL3AgentFailover:
181     default: 'True'
182     description: Allow automatic l3-agent failover
183     type: string
184   # Not relevant for Computes, should be removed
185   NeutronL3HA:
186     default: 'False'
187     description: Whether to enable l3-agent HA
188     type: string
189   NeutronAgentMode:
190     default: 'dvr_snat'
191     description: Agent mode for the neutron-l3-agent on the controller hosts
192     type: string
193   NovaApiHost:
194     type: string
195     default: ''  # Has to be here because of the ignored empty value bug
196   NovaComputeDriver:
197     type: string
198     default: libvirt.LibvirtDriver
199   NovaComputeExtraConfig:
200     default: {}
201     description: |
202       NovaCompute specific configuration to inject into the cluster. Same
203       structure as ExtraConfig.
204     type: json
205   NovaComputeLibvirtType:
206     type: string
207     default: ''
208   NovaEnableRbdBackend:
209     default: false
210     description: Whether to enable or not the Rbd backend for Nova
211     type: boolean
212   NovaPassword:
213     default: unset
214     description: The password for the nova service account, used by nova-api.
215     type: string
216     hidden: true
217   NovaPublicIP:
218     type: string
219     default: ''  # Has to be here because of the ignored empty value bug
220   NtpServer:
221     type: string
222     default: ''
223   RabbitHost:
224     type: string
225     default: ''  # Has to be here because of the ignored empty value bug
226   RabbitPassword:
227     default: guest
228     description: The password for RabbitMQ
229     type: string
230     hidden: true
231   RabbitUserName:
232     default: guest
233     description: The username for RabbitMQ
234     type: string
235   RabbitClientUseSSL:
236     default: false
237     description: >
238         Rabbit client subscriber parameter to specify
239         an SSL connection to the RabbitMQ host.
240     type: string
241   RabbitClientPort:
242     default: 5672
243     description: Set rabbit subscriber port, change this if using SSL
244     type: number
245   SnmpdReadonlyUserName:
246     default: ro_snmp_user
247     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
248     type: string
249   SnmpdReadonlyUserPassword:
250     default: unset
251     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
252     type: string
253     hidden: true
254   EnablePackageInstall:
255     default: 'false'
256     description: Set to true to enable package installation via Puppet
257     type: boolean
258   ServiceNetMap:
259     default: {}
260     description: Mapping of service_name -> network name. Typically set
261                  via parameter_defaults in the resource registry.
262     type: json
263   UpdateIdentifier:
264     default: ''
265     type: string
266     description: >
267       Setting to a previously unused value during stack-update will trigger
268       package update on all nodes
269   Hostname:
270     type: string
271     default: '' # Defaults to Heat created hostname
272
273 resources:
274
275   NovaCompute:
276     type: OS::Nova::Server
277     properties:
278       image:
279         {get_param: Image}
280       image_update_policy:
281         get_param: ImageUpdatePolicy
282       flavor: {get_param: Flavor}
283       key_name: {get_param: KeyName}
284       networks:
285         - network: ctlplane
286       user_data_format: SOFTWARE_CONFIG
287       user_data: {get_resource: UserData}
288       name: {get_param: Hostname}
289
290   # Combine the NodeAdminUserData and NodeUserData mime archives
291   UserData:
292     type: OS::Heat::MultipartMime
293     properties:
294       parts:
295       - config: {get_resource: NodeAdminUserData}
296         type: multipart
297       - config: {get_resource: NodeUserData}
298         type: multipart
299
300   # Creates the "heat-admin" user if configured via the environment
301   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
302   NodeAdminUserData:
303     type: OS::TripleO::NodeAdminUserData
304
305   # For optional operator additional userdata
306   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
307   NodeUserData:
308     type: OS::TripleO::NodeUserData
309
310   InternalApiPort:
311     type: OS::TripleO::Compute::Ports::InternalApiPort
312     properties:
313       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
314
315   StoragePort:
316     type: OS::TripleO::Compute::Ports::StoragePort
317     properties:
318       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
319
320   TenantPort:
321     type: OS::TripleO::Compute::Ports::TenantPort
322     properties:
323       ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
324
325   NetIpMap:
326     type: OS::TripleO::Network::Ports::NetIpMap
327     properties:
328       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
329       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
330       StorageIp: {get_attr: [StoragePort, ip_address]}
331       TenantIp: {get_attr: [TenantPort, ip_address]}
332
333   NetworkConfig:
334     type: OS::TripleO::Compute::Net::SoftwareConfig
335     properties:
336       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
337       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
338       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
339       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
340
341   NetworkDeployment:
342     type: OS::TripleO::SoftwareDeployment
343     properties:
344       config: {get_resource: NetworkConfig}
345       server: {get_resource: NovaCompute}
346       input_values:
347         bridge_name: {get_param: NeutronPhysicalBridge}
348         interface_name: {get_param: NeutronPublicInterface}
349
350   NovaComputeConfig:
351     type: OS::Heat::StructuredConfig
352     properties:
353       group: os-apply-config
354       config:
355         hiera:
356           hierarchy:
357             - '"%{::uuid}"'
358             - heat_config_%{::deploy_config_name}
359             - compute_extraconfig
360             - extraconfig
361             - compute
362             - ceph_cluster # provided by CephClusterConfig
363             - ceph
364             - all_nodes # provided by allNodesConfig
365             - '"%{::osfamily}"'
366             - common
367             - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
368           datafiles:
369             compute_extraconfig:
370               mapped_data: {get_param: NovaComputeExtraConfig}
371             extraconfig:
372               mapped_data: {get_param: ExtraConfig}
373             common:
374               raw_data: {get_file: hieradata/common.yaml}
375             ceph:
376               raw_data: {get_file: hieradata/ceph.yaml}
377             compute:
378               raw_data: {get_file: hieradata/compute.yaml}
379               mapped_data:
380                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
381                 nova::debug: {get_input: debug}
382                 nova::rabbit_userid: {get_input: rabbit_username}
383                 nova::rabbit_password: {get_input: rabbit_password}
384                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
385                 nova::rabbit_port: {get_input: rabbit_client_port}
386                 nova_compute_driver: {get_input: nova_compute_driver}
387                 nova::compute::libvirt::libvirt_virt_type: {get_input: nova_compute_libvirt_type}
388                 nova_api_host: {get_input: nova_api_host}
389                 nova::compute::vncproxy_host: {get_input: nova_public_ip}
390                 nova::compute::rbd::ephemeral_storage: {get_input: nova_enable_rbd_backend}
391                 rbd_persistent_storage: {get_input: cinder_enable_rbd_backend}
392                 nova_password: {get_input: nova_password}
393                 nova::compute::vncserver_proxyclient_address: {get_input: nova_vnc_proxyclient_address}
394                 ceilometer::debug: {get_input: debug}
395                 ceilometer::rabbit_userid: {get_input: rabbit_username}
396                 ceilometer::rabbit_password: {get_input: rabbit_password}
397                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
398                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
399                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
400                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
401                 ceilometer::agent::auth::auth_url: {get_input: ceilometer_agent_auth_url}
402                 ceilometer_compute_agent: {get_input: ceilometer_compute_agent}
403                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
404                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
405                 nova::glance_api_servers: {get_input: glance_api_servers}
406                 neutron::debug: {get_input: debug}
407                 neutron::rabbit_password: {get_input: rabbit_password}
408                 neutron::rabbit_user: {get_input: rabbit_user}
409                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
410                 neutron::rabbit_port: {get_input: rabbit_client_port}
411                 neutron_flat_networks: {get_input: neutron_flat_networks}
412                 neutron_host: {get_input: neutron_host}
413                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
414
415                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
416                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
417                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
418                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
419                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
420                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
421                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
422                 neutron_physical_bridge: {get_input: neutron_physical_bridge}
423                 neutron_public_interface: {get_input: neutron_public_interface}
424                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
425                 nova::network::neutron::neutron_url: {get_input: neutron_url}
426                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
427                 neutron_router_distributed: {get_input: neutron_router_distributed}
428                 neutron_agent_mode: {get_input: neutron_agent_mode}
429                 neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
430                 neutron::core_plugin: {get_input: neutron_core_plugin}
431                 neutron::service_plugins: {get_input: neutron_service_plugins}
432                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
433                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
434                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
435                 admin_password: {get_input: admin_password}
436                 ntp::servers: {get_input: ntp_servers}
437                 tripleo::packages::enable_install: {get_input: enable_package_install}
438                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
439
440   NovaComputeDeployment:
441     type: OS::TripleO::SoftwareDeployment
442     depends_on: NetworkDeployment
443     properties:
444       config: {get_resource: NovaComputeConfig}
445       server: {get_resource: NovaCompute}
446       input_values:
447         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
448         debug: {get_param: Debug}
449         nova_compute_driver: {get_param: NovaComputeDriver}
450         nova_compute_libvirt_type: {get_param: NovaComputeLibvirtType}
451         nova_public_ip: {get_param: NovaPublicIP}
452         nova_api_host: {get_param: NovaApiHost}
453         nova_password: {get_param: NovaPassword}
454         nova_enable_rbd_backend: {get_param: NovaEnableRbdBackend}
455         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
456         nova_vnc_proxyclient_address: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaVncProxyNetwork]}]}
457         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
458         ceilometer_password: {get_param: CeilometerPassword}
459         ceilometer_compute_agent: {get_param: CeilometerComputeAgent}
460         ceilometer_agent_auth_url:
461           list_join:
462             - ''
463             - - 'http://'
464               - {get_param: KeystonePublicApiVirtualIP}
465               - ':5000/v2.0'
466         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
467         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
468         glance_api_servers:
469           list_join:
470             - ''
471             - - {get_param: GlanceProtocol}
472               - '://'
473               - {get_param: GlanceHost}
474               - ':'
475               - {get_param: GlancePort}
476         neutron_flat_networks: {get_param: NeutronFlatNetworks}
477         neutron_host: {get_param: NeutronHost}
478         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
479         neutron_tenant_network_type: {get_param: NeutronNetworkType}
480         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
481         neutron_tunnel_id_ranges:
482           str_replace:
483             template: "['RANGES']"
484             params:
485               RANGES:
486                 list_join:
487                 - "','"
488                 - {get_param: NeutronTunnelIdRanges}
489         neutron_vni_ranges:
490           str_replace:
491             template: "['RANGES']"
492             params:
493               RANGES:
494                 list_join:
495                 - "','"
496                 - {get_param: NeutronVniRanges}
497         neutron_network_vlan_ranges:
498           str_replace:
499             template: "['RANGES']"
500             params:
501               RANGES:
502                 list_join:
503                 - "','"
504                 - {get_param: NeutronNetworkVLANRanges}
505         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
506         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
507         neutron_physical_bridge: {get_param: NeutronPhysicalBridge}
508         neutron_public_interface: {get_param: NeutronPublicInterface}
509         neutron_password: {get_param: NeutronPassword}
510         neutron_agent_mode: {get_param: NeutronAgentMode}
511         neutron_router_distributed: {get_param: NeutronDVR}
512         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
513         neutron_core_plugin: {get_param: NeutronCorePlugin}
514         neutron_service_plugins:
515           str_replace:
516             template: "['PLUGINS']"
517             params:
518               PLUGINS:
519                 list_join:
520                 - "','"
521                 - {get_param: NeutronServicePlugins}
522         neutron_type_drivers:
523           str_replace:
524             template: "['DRIVERS']"
525             params:
526               DRIVERS:
527                 list_join:
528                 - "','"
529                 - {get_param: NeutronTypeDrivers}
530         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
531         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
532         neutron_url:
533           list_join:
534             - ''
535             - - 'http://'
536               - {get_param: NeutronHost}
537               - ':9696'
538         neutron_admin_auth_url:
539           list_join:
540             - ''
541             - - 'http://'
542               - {get_param: KeystoneAdminApiVirtualIP}
543               - ':35357/v2.0'
544         admin_password: {get_param: AdminPassword}
545         rabbit_username: {get_param: RabbitUserName}
546         rabbit_password: {get_param: RabbitPassword}
547         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
548         rabbit_client_port: {get_param: RabbitClientPort}
549         ntp_servers:
550           str_replace:
551             template: '["server"]'
552             params:
553               server: {get_param: NtpServer}
554         enable_package_install: {get_param: EnablePackageInstall}
555         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
556
557   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
558   ComputeExtraConfigPre:
559     depends_on: NovaComputeDeployment
560     type: OS::TripleO::ComputeExtraConfigPre
561     properties:
562         server: {get_resource: NovaCompute}
563
564   # Hook for site-specific additional pre-deployment config,
565   # applying to all nodes, e.g node registration/unregistration
566   NodeExtraConfig:
567     depends_on: ComputeExtraConfigPre
568     type: OS::TripleO::NodeExtraConfig
569     properties:
570         server: {get_resource: NovaCompute}
571
572   UpdateConfig:
573     type: OS::TripleO::Tasks::PackageUpdate
574
575   UpdateDeployment:
576     type: OS::Heat::SoftwareDeployment
577     properties:
578       config: {get_resource: UpdateConfig}
579       server: {get_resource: NovaCompute}
580       input_values:
581         update_identifier:
582           get_param: UpdateIdentifier
583
584 outputs:
585   ip_address:
586     description: IP address of the server in the ctlplane network
587     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
588   internal_api_ip_address:
589     description: IP address of the server in the internal_api network
590     value: {get_attr: [InternalApiPort, ip_address]}
591   storage_ip_address:
592     description: IP address of the server in the storage network
593     value: {get_attr: [StoragePort, ip_address]}
594   tenant_ip_address:
595     description: IP address of the server in the tenant network
596     value: {get_attr: [TenantPort, ip_address]}
597   hostname:
598     description: Hostname of the server
599     value: {get_attr: [NovaCompute, name]}
600   hosts_entry:
601     description: >
602       Server's IP address and hostname in the /etc/hosts format
603     value:
604       str_replace:
605         template: "IP HOST.localdomain HOST"
606         params:
607           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
608           HOST: {get_attr: [NovaCompute, name]}
609   nova_server_resource:
610     description: Heat resource handle for the Nova compute server
611     value:
612       {get_resource: NovaCompute}
613   config_identifier:
614     description: identifier which changes if the node configuration may need re-applying
615     value:
616       list_join:
617       - ','
618       - - {get_attr: [NovaComputeDeployment, deploy_stdout]}
619         - {get_attr: [ComputeExtraConfigPre, deploy_stdout]}
620         - {get_param: UpdateIdentifier}