1 heat_template_version: pike
4 All configurations which require reboot should be initiated via PreNetworkConfig. After
5 this configuration is completed, the corresponding node will be rebooted.
12 description: Role Specific parameters
15 type: comma_delimited_list
19 description: List of cores to be isolated by tuned
22 - allowed_pattern: "[0-9,-]+"
25 description: Whether or not to configure enable DPDK in OVS
29 List of cores to be used for DPDK lcore threads. Note, these threads
30 are used by the OVS control path for validator and handling functions.
33 - allowed_pattern: "[0-9,-]*"
35 OvsDpdkMemoryChannels:
36 description: Number of memory channels per socket to be used for DPDK
39 - allowed_pattern: "[0-9]*"
44 Sets the amount of hugepage memory to assign per NUMA node. It is
45 recommended to use the socket closest to the PCIe slot used for the
46 desired DPDK NIC. The format should be in "<socket 0 mem>, <socket 1
47 mem>, <socket n mem>", where the value is specified in MB. For example:
53 DPDK Driver type. Ensure the Overcloud NIC to be used for DPDK supports
58 A list or range of CPU cores for PMD threads to be pinned to. Note, NIC
59 location to cores on socket, number of hyper-threaded logical cores, and
60 desired number of PMD threads can all play a role in configuring this
61 setting. These cores should be on the same socket where
62 OvsDpdkSocketMemory is assigned. If using hyperthreading then specify
63 both logical cores that would equal the physical core. Also, specifying
64 more than one core will trigger multiple PMD threads to be spawned which
65 may improve dataplane performance.
67 - allowed_pattern: "[0-9,-]*"
70 # DEPRECATED: the following options are deprecated and are currently maintained
71 # for backwards compatibility. They will be removed in the Queens cycle.
73 description: List of cores to be used for host process
76 - allowed_pattern: "[0-9,-]+"
79 description: List of cores to be used for DPDK Poll Mode Driver
82 - allowed_pattern: "[0-9,-]*"
84 NeutronDpdkMemoryChannels:
85 description: Number of memory channels to be used for DPDK
88 - allowed_pattern: "[0-9]*"
90 NeutronDpdkSocketMemory:
92 description: Memory allocated for each socket
94 NeutronDpdkDriverType:
96 description: DPDK Driver type
99 default: ['CREATE', 'UPDATE']
100 type: comma_delimited_list
102 List of stack actions that will trigger any deployments in this
103 templates. The actions will be an empty list of the server is in the
104 toplevel DeploymentServerBlacklist parameter's value.
107 is_host_config_required: {not: {equals: [{get_param: [RoleParameters, KernelArgs]}, ""]}}
108 # YAQL is enabled in conditions with https://review.openstack.org/#/c/467506/
109 is_dpdk_config_required:
112 expression: $.data.service_names.contains('neutron_ovs_dpdk_agent')
114 service_names: {get_param: ServiceNames}
115 - {get_param: OvsEnableDpdk}
116 - {get_param: [RoleParameters, OvsEnableDpdk]}
117 is_reboot_config_required:
119 - is_host_config_required
120 - is_dpdk_config_required
121 l_cores_empty: {equals: [{get_param: OvsDpdkCoreList}, '']}
122 pmd_cores_empty: {equals: [{get_param: OvsPmdCoreList}, '']}
123 mem_channels_empty: {equals: [{get_param: OvsDpdkMemoryChannels}, '']}
124 socket_mem_empty: {equals: [{get_param: OvsDpdkSocketMemory}, '']}
125 driver_not_set: {equals: [{get_param: OvsDpdkDriverType}, 'vfio-pci']}
126 isol_cpus_empty: {equals: [{get_param: IsolCpusList}, '0']}
127 deployment_actions_empty:
129 - {get_param: deployment_actions}
134 type: OS::Heat::Value
140 - IsolCpusList: IsolCpusList
141 OvsDpdkCoreList: OvsDpdkCoreList
142 OvsDpdkMemoryChannels: OvsDpdkMemoryChannels
143 OvsDpdkSocketMemory: OvsDpdkSocketMemory
144 OvsDpdkDriverType: OvsDpdkDriverType
145 OvsPmdCoreList: OvsDpdkCoreList
146 - values: {get_param: [RoleParameters]}
148 IsolCpusList: {if: [isol_cpus_empty, {get_param: HostCpusList}, {get_param: IsolCpusList}]}
149 OvsDpdkCoreList: {if: [l_cores_empty, {get_param: HostCpusList}, {get_param: OvsDpdkCoreList}]}
150 OvsDpdkMemoryChannels: {if: [mem_channels_empty, {get_param: NeutronDpdkMemoryChannels}, {get_param: OvsDpdkMemoryChannels}]}
151 OvsDpdkSocketMemory: {if: [socket_mem_empty, {get_param: NeutronDpdkSocketMemory}, {get_param: OvsDpdkSocketMemory}]}
152 OvsDpdkDriverType: {if: [driver_not_set, {get_param: NeutronDpdkDriverType}, {get_param: OvsDpdkDriverType}]}
153 OvsPmdCoreList: {if: [pmd_cores_empty, {get_param: NeutronDpdkCoreList}, {get_param: OvsPmdCoreList}]}
155 HostParametersConfig:
156 type: OS::Heat::SoftwareConfig
157 condition: is_host_config_required
161 - name: _KERNEL_ARGS_
162 - name: _TUNED_PROFILE_NAME_
163 - name: _TUNED_CORES_
167 get_file: ansible_host_config.yaml
169 HostParametersDeployment:
170 type: OS::Heat::SoftwareDeployment
171 condition: is_host_config_required
173 name: HostParametersDeployment
174 server: {get_param: server}
175 config: {get_resource: HostParametersConfig}
178 - deployment_actions_empty
180 - ['CREATE'] # Only do this on CREATE
182 _KERNEL_ARGS_: {get_param: [RoleParameters, KernelArgs]}
183 _TUNED_PROFILE_NAME_: {get_param: [RoleParameters, TunedProfileName]}
184 _TUNED_CORES_: {get_param: [RoleParameters, IsolCpusList]}
187 type: OS::Heat::SoftwareConfig
188 condition: is_dpdk_config_required
196 # DO NOT use --detailed-exitcodes
197 puppet apply --logdest console \
198 --modulepath /etc/puppet/modules:/opt/stack/puppet-modules:/usr/share/openstack-puppet/modules \
200 class {"vswitch::dpdk":
201 host_core_list => "$HOST_CORES",
202 pmd_core_list => "$PMD_CORES",
203 memory_channels => "$MEMORY_CHANNELS",
204 socket_mem => "$SOCKET_MEMORY",
208 $HOST_CORES: {get_attr: [RoleParametersValue, value, OvsDpdkCoreList]}
209 $PMD_CORES: {get_attr: [RoleParametersValue, value, OvsPmdCoreList]}
210 $MEMORY_CHANNELS: {get_attr: [RoleParametersValue, value, OvsDpdkMemoryChannels]}
211 $SOCKET_MEMORY: {get_attr: [RoleParametersValue, value, OvsDpdkSocketMemory]}
213 EnableDpdkDeployment:
214 type: OS::Heat::SoftwareDeployment
215 condition: is_dpdk_config_required
217 name: EnableDpdkDeployment
218 server: {get_param: server}
219 config: {get_resource: EnableDpdkConfig}
220 actions: ['CREATE'] # Only do this on CREATE
223 type: OS::Heat::SoftwareConfig
224 condition: is_reboot_config_required
229 # Stop os-collect-config to avoid any race collecting another
230 # deployment before reboot happens
231 systemctl stop os-collect-config.service
235 type: OS::Heat::SoftwareDeployment
236 depends_on: HostParametersDeployment
237 condition: is_reboot_config_required
239 name: RebootDeployment
240 server: {get_param: server}
241 config: {get_resource: RebootConfig}
244 - deployment_actions_empty
246 - ['CREATE'] # Only do this on CREATE
247 signal_transport: NO_SIGNAL
251 condition: is_host_config_required
253 get_attr: [HostParametersDeployment, result]
255 condition: is_host_config_required
257 get_attr: [HostParametersDeployment, deploy_stdout]
259 condition: is_host_config_required
261 get_attr: [HostParametersDeployment, deploy_stderr]
263 condition: is_host_config_required
265 get_attr: [HostParametersDeployment, deploy_status_code]