diff --git a/deployed-server/deployed-server-roles-data.yaml b/deployed-server/deployed-server-roles-data.yaml index 7623eda6ed..73dc9099d3 100644 --- a/deployed-server/deployed-server-roles-data.yaml +++ b/deployed-server/deployed-server-roles-data.yaml @@ -133,6 +133,7 @@ - OS::TripleO::Services::TripleoPackages - OS::TripleO::Services::TripleoFirewall - OS::TripleO::Services::NeutronSriovAgent + - OS::TripleO::Services::NeutronSriovHostConfig - OS::TripleO::Services::OpenDaylightOvs - OS::TripleO::Services::SensuClient - OS::TripleO::Services::FluentdClient diff --git a/docker/services/neutron-sriov-agent.yaml b/docker/services/neutron-sriov-agent.yaml new file mode 100644 index 0000000000..a9914987c8 --- /dev/null +++ b/docker/services/neutron-sriov-agent.yaml @@ -0,0 +1,108 @@ +heat_template_version: pike + +description: > + OpenStack Neutron SR-IOV service + +parameters: + DockerNeutronSriovImage: + description: The container image to use for the Neutron SR-IOV agent + type: string + DockerNeutronConfigImage: + description: The container image to use for the neutron config_volume + type: string + ServiceData: + default: {} + description: Dictionary packing service data + type: json + ServiceNetMap: + default: {} + description: Mapping of service_name -> network name. Typically set + via parameter_defaults in the resource registry. This + mapping overrides those in ServiceNetMapDefaults. + type: json + DefaultPasswords: + default: {} + type: json + RoleName: + default: '' + description: Role name on which the service is applied + type: string + RoleParameters: + default: {} + description: Parameters specific to the role + type: json + EndpointMap: + default: {} + description: Mapping of service endpoint -> protocol. Typically set + via parameter_defaults in the resource registry. + type: json + +resources: + + ContainersCommon: + type: ./containers-common.yaml + + NeutronSriovAgentBase: + type: ../../puppet/services/neutron-sriov-agent.yaml + properties: + EndpointMap: {get_param: EndpointMap} + ServiceData: {get_param: ServiceData} + ServiceNetMap: {get_param: ServiceNetMap} + DefaultPasswords: {get_param: DefaultPasswords} + RoleName: {get_param: RoleName} + RoleParameters: {get_param: RoleParameters} + +outputs: + role_data: + description: Role data for Neutron sriov service + value: + service_name: {get_attr: [NeutronSriovAgentBase, role_data, service_name]} + config_settings: {get_attr: [NeutronSriovAgentBase, role_data, config_settings]} + step_config: &step_config + get_attr: [NeutronSriovAgentBase, role_data, step_config] + puppet_config: + config_volume: neutron + puppet_tags: neutron_config,neutron_agent_sriov_numvfs,neutron_sriov_agent_config + step_config: *step_config + config_image: {get_param: DockerNeutronConfigImage} + kolla_config: + /var/lib/kolla/config_files/neutron_sriov_agent.json: + command: /usr/bin/neutron-sriov-nic-agent --config-file /usr/share/neutron/neutron-dist.conf --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/sriov_agent.ini --config-dir /etc/neutron/conf.d/common + config_files: + - source: "/var/lib/kolla/config_files/src/*" + dest: "/" + merge: true + preserve_properties: true + permissions: + - path: /var/log/neutron + owner: neutron:neutron + recurse: true + docker_config: + step_4: + neutron_sriov_agent: + image: {get_param: DockerNeutronSriovImage} + net: host + pid: host + privileged: true + restart: always + volumes: + list_concat: + - {get_attr: [ContainersCommon, volumes]} + - + - /var/lib/kolla/config_files/neutron_sriov_agent.json:/var/lib/kolla/config_files/config.json:ro + - /var/lib/config-data/puppet-generated/neutron/:/var/lib/kolla/config_files/src:ro + - /lib/modules:/lib/modules:ro + - /run:/run + - /var/log/containers/neutron:/var/log/neutron + - /sys/class/net:/sys/class/net:rw + environment: + - KOLLA_CONFIG_STRATEGY=COPY_ALWAYS + host_prep_tasks: + - name: create persistent logs directory + file: + path: /var/log/containers/neutron + state: directory + upgrade_tasks: + - name: Stop and disable neutron_sriov_agent service + tags: step2 + service: name=neutron-sriov-nic-agent state=stopped enabled=no diff --git a/environments/docker.yaml b/environments/docker.yaml index 67e8a496d8..06e3d3aba3 100644 --- a/environments/docker.yaml +++ b/environments/docker.yaml @@ -56,3 +56,7 @@ resource_registry: # OS::TripleO::Services::CinderScheduler: ../docker/services/cinder-scheduler.yaml # OS::TripleO::Services::CinderBackup: ../docker/services/cinder-backup.yaml # OS::TripleO::Services::CinderVolume: ../docker/services/cinder-volume.yaml + # + # If SR-IOV is enabled on the compute nodes, it will need the SR-IOV + # host configuration. + OS::TripleO::Services::NeutronSriovHostConfig: OS::Heat::None diff --git a/environments/hyperconverged-ceph.yaml b/environments/hyperconverged-ceph.yaml index f5bd0da657..2a28ac1849 100644 --- a/environments/hyperconverged-ceph.yaml +++ b/environments/hyperconverged-ceph.yaml @@ -30,6 +30,7 @@ parameter_defaults: - OS::TripleO::Services::TripleoFirewall - OS::TripleO::Services::Tuned - OS::TripleO::Services::NeutronSriovAgent + - OS::TripleO::Services::NeutronSriovHostConfig - OS::TripleO::Services::OpenDaylightOvs - OS::TripleO::Services::SensuClient - OS::TripleO::Services::FluentdClient diff --git a/environments/neutron-sriov.yaml b/environments/neutron-sriov.yaml index 591e22609a..26c28d28ee 100755 --- a/environments/neutron-sriov.yaml +++ b/environments/neutron-sriov.yaml @@ -4,16 +4,5 @@ resource_registry: parameter_defaults: NeutronMechanismDrivers: ['sriovnicswitch', 'openvswitch'] - - # Add PciPassthroughFilter to the scheduler default filters - #NovaSchedulerDefaultFilters: ['RetryFilter','AvailabilityZoneFilter','RamFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter'] - #NovaSchedulerAvailableFilters: ["nova.scheduler.filters.all_filters","nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter"] - - #NeutronPhysicalDevMappings: "datacentre:ens20f2" - - # Number of VFs that needs to be configured for a physical interface - #NeutronSriovNumVFs: "ens20f2:5" - - #NovaPCIPassthrough: - # - devname: "ens20f2" - # physical_network: "datacentre" + NovaSchedulerDefaultFilters: ['RetryFilter','AvailabilityZoneFilter','RamFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter'] + NovaSchedulerAvailableFilters: ["nova.scheduler.filters.all_filters","nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter"] diff --git a/environments/services-docker/neutron-sriov.yaml b/environments/services-docker/neutron-sriov.yaml new file mode 100644 index 0000000000..917258684b --- /dev/null +++ b/environments/services-docker/neutron-sriov.yaml @@ -0,0 +1,12 @@ +# EXPERIMENTAL: The configuration enabled by this environment is not considered +# production-ready. +# +# A Heat environment that can be used to enable SR-IOV support in neutron. +resource_registry: + OS::TripleO::Services::NeutronSriovAgent: ../../docker/services/neutron-sriov-agent.yaml + OS::TripleO::Services::NeutronSriovHostConfig: ../../puppet/services/neutron-sriov-host-config.yaml + +parameter_defaults: + NeutronMechanismDrivers: ['sriovnicswitch','openvswitch'] + NovaSchedulerDefaultFilters: ['RetryFilter','AvailabilityZoneFilter','RamFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter'] + NovaSchedulerAvailableFilters: ["nova.scheduler.filters.all_filters","nova.scheduler.filters.pci_passthrough_filter.PciPassthroughFilter"] diff --git a/overcloud-resource-registry-puppet.j2.yaml b/overcloud-resource-registry-puppet.j2.yaml index 5d5858ac04..6ead6841fc 100644 --- a/overcloud-resource-registry-puppet.j2.yaml +++ b/overcloud-resource-registry-puppet.j2.yaml @@ -170,6 +170,7 @@ resource_registry: OS::TripleO::Services::Pacemaker: OS::Heat::None OS::TripleO::Services::PacemakerRemote: OS::Heat::None OS::TripleO::Services::NeutronSriovAgent: OS::Heat::None + OS::TripleO::Services::NeutronSriovHostConfig: OS::Heat::None OS::TripleO::Services::RabbitMQ: puppet/services/rabbitmq.yaml OS::TripleO::Services::Qdr: OS::Heat::None OS::TripleO::Services::HAproxy: puppet/services/haproxy.yaml diff --git a/puppet/services/neutron-sriov-agent.yaml b/puppet/services/neutron-sriov-agent.yaml index 3c18209cb4..5c52ecfc0b 100644 --- a/puppet/services/neutron-sriov-agent.yaml +++ b/puppet/services/neutron-sriov-agent.yaml @@ -99,3 +99,17 @@ outputs: - get_attr: [RoleParametersValue, value] step_config: | include ::tripleo::profile::base::neutron::sriov + upgrade_tasks: + - name: Check if neutron_sriov_agent is deployed + command: systemctl is-enabled neutron-sriov-nic-agent + tags: common + ignore_errors: True + register: neutron_sriov_nic_agent_enabled + - name: "PreUpgrade step0,validation: Check service neutron-server is running" + shell: /usr/bin/systemctl show 'neutron-sriov-nic-agent' --property ActiveState | grep '\bactive\b' + when: neutron_sriov_nic_agent_enabled.rc == 0 + tags: step0,validation + - name: Stop neutron_sriov_nic_agent service + tags: step1 + when: neutron_sriov_nic_agent_enabled.rc == 0 + service: name=neutron-sriov-nic-agent state=stopped diff --git a/puppet/services/neutron-sriov-host-config.yaml b/puppet/services/neutron-sriov-host-config.yaml new file mode 100644 index 0000000000..987b96f953 --- /dev/null +++ b/puppet/services/neutron-sriov-host-config.yaml @@ -0,0 +1,78 @@ +heat_template_version: pike + +description: > + OpenStack Neutron SR-IOV host configuration + +parameters: + ServiceData: + default: {} + description: Dictionary packing service data + type: json + ServiceNetMap: + default: {} + description: > + Mapping of service_name -> network name. Typically set via + parameter_defaults in the resource registry. This mapping overrides those + in ServiceNetMapDefaults. + type: json + DefaultPasswords: + default: {} + type: json + RoleName: + default: '' + description: Role name on which the service is applied + type: string + RoleParameters: + default: {} + description: Parameters specific to the role + type: json + EndpointMap: + default: {} + description: Mapping of service endpoint -> protocol. Typically set + via parameter_defaults in the resource registry. + type: json + NeutronSriovNumVFs: + description: > + Provide the list of VFs to be reserved for each SR-IOV interface. + Format ":,:" + Example "eth1:4096,eth2:128" + type: comma_delimited_list + default: "" + +resources: + + NeutronBase: + type: ./neutron-base.yaml + properties: + ServiceData: {get_param: ServiceData} + ServiceNetMap: {get_param: ServiceNetMap} + DefaultPasswords: {get_param: DefaultPasswords} + EndpointMap: {get_param: EndpointMap} + RoleName: {get_param: RoleName} + RoleParameters: {get_param: RoleParameters} + + # Merging role-specific parameters (RoleParameters) with the default parameters. + # RoleParameters will have the precedence over the default parameters. + RoleParametersValue: + type: OS::Heat::Value + properties: + type: json + value: + map_replace: + - map_replace: + - tripleo::host::sriov::number_of_vfs: NeutronSriovNumVFs + - values: {get_param: [RoleParameters]} + - values: + NeutronSriovNumVFs: {get_param: NeutronSriovNumVFs} + +outputs: + role_data: + description: Role data for the Neutron SR-IOV nic agent service. + value: + service_name: neutron_sriov_host_config + config_settings: + map_merge: + - get_attr: [NeutronBase, role_data, config_settings] + - get_attr: [RoleParametersValue, value] + step_config: | + include ::tripleo::host::sriov diff --git a/roles/Compute.yaml b/roles/Compute.yaml index e46b4dbd7b..d0578eb6f1 100644 --- a/roles/Compute.yaml +++ b/roles/Compute.yaml @@ -40,6 +40,7 @@ - OS::TripleO::Services::NeutronBgpVpnBagpipe - OS::TripleO::Services::NeutronLinuxbridgeAgent - OS::TripleO::Services::NeutronSriovAgent + - OS::TripleO::Services::NeutronSriovHostConfig - OS::TripleO::Services::NeutronVppAgent - OS::TripleO::Services::NovaCompute - OS::TripleO::Services::NovaLibvirt diff --git a/roles/ComputeHCI.yaml b/roles/ComputeHCI.yaml index 0f53c2ea58..eed9b5a732 100644 --- a/roles/ComputeHCI.yaml +++ b/roles/ComputeHCI.yaml @@ -31,6 +31,7 @@ - OS::TripleO::Services::NeutronBgpVpnBagpipe - OS::TripleO::Services::NeutronLinuxbridgeAgent - OS::TripleO::Services::NeutronSriovAgent + - OS::TripleO::Services::NeutronSriovHostConfig - OS::TripleO::Services::NeutronVppAgent - OS::TripleO::Services::NovaCompute - OS::TripleO::Services::NovaLibvirt diff --git a/roles_data.yaml b/roles_data.yaml index ad6729130c..fe2d27f99c 100644 --- a/roles_data.yaml +++ b/roles_data.yaml @@ -190,6 +190,7 @@ - OS::TripleO::Services::NeutronBgpVpnBagpipe - OS::TripleO::Services::NeutronLinuxbridgeAgent - OS::TripleO::Services::NeutronSriovAgent + - OS::TripleO::Services::NeutronSriovHostConfig - OS::TripleO::Services::NeutronVppAgent - OS::TripleO::Services::NovaCompute - OS::TripleO::Services::NovaLibvirt