diff --git a/environments/compute-real-time-example.yaml b/environments/compute-real-time-example.yaml new file mode 100644 index 0000000000..47bbc24a81 --- /dev/null +++ b/environments/compute-real-time-example.yaml @@ -0,0 +1,33 @@ +# A Heat environment that can be used to deploy a real-time compute node +# Deploying a real-time compute node requires enabling hugepages for the +# overcloud nodes, which is done by default for the ComputeRealTime role. +# However, the CPU pinnings (IsolCpusList and NovaVcpuPinSet) need to be set in +# an environment file like this, according to the hardware used for the +# real-time compute nodes. +# Also the hugepages parameters in KernelArgs should be set accordingly +# the memory of the real-time compute nodes. +# It's also possible to overwrite the default values for other parameters like +# TunedProfileName and ComputeRealTimeImage here. + +parameter_defaults: + + ## Only uncomment this line to overwrite the default image name + #ComputeRealTimeImage: "overcloud-realtime-compute" + + ComputeRealTimeParameters: + ## Host configuration Parameters + + ## You must change these values accordingly to your hardware + IsolCpusList: "2,3" # Logical CPUs list to be isolated from the host process (applied via cpu-partitioning tuned). + # It is mandatory to provide isolated cpus for tuned to achive optimal performance. + # Example: "3-8,12-15,18" + NovaVcpuPinSet: "2,3" # Cores to pin Nova instances to. For maximum performance, select cores + # on the same NUMA node(s) selected for previous settings. + + ## Space separated kernel args to configure hugepage. Deploying real-time + ## requires enabling hugepages for the overcloud compute nodes. + ## Adapt the hugepages according to the memory of the real-time compute nodes. + KernelArgs: "default_hugepagesz=1G hugepagesz=1G hugepages=16" + + ## Only uncomment these lines to overwrite the defaults + #TunedProfileName: "realtime-virtual-host" diff --git a/roles/ComputeRealTime.yaml b/roles/ComputeRealTime.yaml new file mode 100644 index 0000000000..17339a1961 --- /dev/null +++ b/roles/ComputeRealTime.yaml @@ -0,0 +1,64 @@ +############################################################################### +# Role: ComputeRealTime # +############################################################################### +- name: ComputeRealTime + description: | + Compute role that is optimized for real-time behaviour. When using this role + it is mandatory that an overcloud-realtime-compute image is available and + the role specific parameters IsolCpusList and NovaVcpuPinSet are set + accordingly to the hardware of the real-time compute nodes. + CountDefault: 1 + networks: + - InternalApi + - Tenant + - Storage + HostnameFormatDefault: '%stackname%-computerealtime-%index%' + disable_upgrade_deployment: True + ImageDefault: overcloud-realtime-compute + RoleParametersDefault: + TunedProfileName: "realtime-virtual-host" + KernelArgs: "" # these must be set in an environment file or similar + IsolCpusList: "" # according to the hardware of real-time nodes + NovaVcpuPinSet: "" # + ServicesDefault: + - OS::TripleO::Services::Aide + - OS::TripleO::Services::AuditD + - OS::TripleO::Services::CACerts + - OS::TripleO::Services::CephClient + - OS::TripleO::Services::CephExternal + - OS::TripleO::Services::CertmongerUser + - OS::TripleO::Services::Collectd + - OS::TripleO::Services::ComputeCeilometerAgent + - OS::TripleO::Services::ComputeNeutronCorePlugin + - OS::TripleO::Services::ComputeNeutronL3Agent + - OS::TripleO::Services::ComputeNeutronMetadataAgent + - OS::TripleO::Services::ComputeNeutronOvsAgent + - OS::TripleO::Services::Docker + - OS::TripleO::Services::Fluentd + - OS::TripleO::Services::Ipsec + - OS::TripleO::Services::Iscsid + - OS::TripleO::Services::Kernel + - OS::TripleO::Services::LoginDefs + - OS::TripleO::Services::MySQLClient + - OS::TripleO::Services::NeutronBgpVpnBagpipe + - OS::TripleO::Services::NeutronLinuxbridgeAgent + - OS::TripleO::Services::NeutronVppAgent + - OS::TripleO::Services::NovaCompute + - OS::TripleO::Services::NovaLibvirt + - OS::TripleO::Services::NovaMigrationTarget + - OS::TripleO::Services::Ntp + - OS::TripleO::Services::ContainersLogrotateCrond + - OS::TripleO::Services::OpenDaylightOvs + - OS::TripleO::Services::Rhsm + - OS::TripleO::Services::RsyslogSidecar + - OS::TripleO::Services::Securetty + - OS::TripleO::Services::SensuClient + - OS::TripleO::Services::SkydiveAgent + - OS::TripleO::Services::Snmp + - OS::TripleO::Services::Sshd + - OS::TripleO::Services::Timezone + - OS::TripleO::Services::TripleoFirewall + - OS::TripleO::Services::TripleoPackages + - OS::TripleO::Services::Vpp + - OS::TripleO::Services::OVNController + - OS::TripleO::Services::OVNMetadataAgent diff --git a/tools/yaml-validate.py b/tools/yaml-validate.py index a00eed251b..4470db6808 100755 --- a/tools/yaml-validate.py +++ b/tools/yaml-validate.py @@ -682,6 +682,12 @@ def validate(filename, param_map): 'OS::TripleO::Services::NeutronLinuxbridgeAgent'] retval = validate_with_compute_role_services(filename, tpl, exclude) + if filename.startswith('./roles/ComputeRealTime.yaml'): + exclude = [ + 'OS::TripleO::Services::Tuned', + ] + retval = validate_with_compute_role_services(filename, tpl, exclude) + if filename.startswith('./roles/Hci'): retval = validate_hci_role(filename, tpl)