diff options
author | Ross Brattain <ross.b.brattain@intel.com> | 2017-08-30 00:52:07 -0700 |
---|---|---|
committer | Maciej Skrocki <maciej.skrocki@intel.com> | 2017-09-28 14:45:43 -0700 |
commit | 619acb7a3e0e2d33699a25cc0e5ffda78c4c4f8c (patch) | |
tree | 1ba6450bbec6c4361fbd624c2dcb274de4c0d91a /ansible/roles/install_dpdk_shared | |
parent | 6ecb9a6d50345277645633b1bed4d255dc434222 (diff) |
add collectd ansible
required DPDK fixes to enable building collectd with dpdkstats
need /usr/lib/dpdk-pmd symlinks
Compiling all this code requies more space than the default ubuntu
cloud-image, so we need to resize the cloud image somehow
Change-Id: Ib39fc94ba8101ca1aebc7d2a710be88b0338f7c3
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
Signed-off-by: Maciej Skrocki <maciej.skrocki@intel.com>
Diffstat (limited to 'ansible/roles/install_dpdk_shared')
-rw-r--r-- | ansible/roles/install_dpdk_shared/defaults/main.yml | 2 | ||||
-rwxr-xr-x | ansible/roles/install_dpdk_shared/tasks/Debian.yml | 22 | ||||
-rw-r--r-- | ansible/roles/install_dpdk_shared/tasks/RedHat.yml | 29 | ||||
-rw-r--r-- | ansible/roles/install_dpdk_shared/tasks/main.yml | 121 | ||||
-rw-r--r-- | ansible/roles/install_dpdk_shared/vars/main.yml | 9 |
5 files changed, 183 insertions, 0 deletions
diff --git a/ansible/roles/install_dpdk_shared/defaults/main.yml b/ansible/roles/install_dpdk_shared/defaults/main.yml new file mode 100644 index 000000000..fe2172401 --- /dev/null +++ b/ansible/roles/install_dpdk_shared/defaults/main.yml @@ -0,0 +1,2 @@ +--- +INSTALL_BIN_PATH: "/opt/nsb_bin"
\ No newline at end of file diff --git a/ansible/roles/install_dpdk_shared/tasks/Debian.yml b/ansible/roles/install_dpdk_shared/tasks/Debian.yml new file mode 100755 index 000000000..c77e4f96a --- /dev/null +++ b/ansible/roles/install_dpdk_shared/tasks/Debian.yml @@ -0,0 +1,22 @@ +# Copyright (c) 2017 Intel Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +- name: Install DPDK build dependencies + action: "{{ ansible_pkg_mgr }} name={{ item }} state=present" + with_items: + - libpcap-dev + +- name: Install kernel headers + action: "{{ ansible_pkg_mgr }} name=linux-headers-{{ dpdk_kernel }} state=present" + diff --git a/ansible/roles/install_dpdk_shared/tasks/RedHat.yml b/ansible/roles/install_dpdk_shared/tasks/RedHat.yml new file mode 100644 index 000000000..ae66faa04 --- /dev/null +++ b/ansible/roles/install_dpdk_shared/tasks/RedHat.yml @@ -0,0 +1,29 @@ +# Copyright (c) 2017 Intel Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +- name: Install DPDK build dependencies + action: "{{ ansible_pkg_mgr }} name={{ item }} state=present" + with_items: + - libpcap-devel + +# Do this before installing kernel headers +# example: +# kernel-headers-3.10.0-514.2.2.el7.x86_64 for kernel 3.10.0-514.el7.x86_64 +- name: Adjust dpdk_kernel to be match an RPM, remove el7.x86_64 + set_fact: + rpm_kernel: "{{ dpdk_kernel|regex_replace('[.]el\\d+\\.x86_64', '') }}" + +- name: Install kernel headers +# use rpm wildcard + action: "{{ ansible_pkg_mgr }} name=kernel-headers-{{ rpm_kernel }}* state=present" diff --git a/ansible/roles/install_dpdk_shared/tasks/main.yml b/ansible/roles/install_dpdk_shared/tasks/main.yml new file mode 100644 index 000000000..6ed9f3bfc --- /dev/null +++ b/ansible/roles/install_dpdk_shared/tasks/main.yml @@ -0,0 +1,121 @@ +# Copyright (c) 2017 Intel Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +--- +#- patch: src="{{ item }}" basedir="{{ dpdk_path }}" strip=0 +# with_fileglob: +# - "{{ local_nsb_path }}/patches/dpdk_custom_patch/rte_pipeline.patch" +# +#- patch: src="{{ item }}" basedir="{{ dpdk_path }}" strip=1 +# with_fileglob: +# - "{{ local_nsb_path }}/patches/dpdk_custom_patch/0*.patch" + +- name: set DPDK shared dir + set_fact: + dpdk_shared_path: "{{ dpdk_path }}-shared" + +- command: "cp -a {{ dpdk_path }} {{ dpdk_shared_path }}" + +- name: find kernel for image, (including chroot) + find_kernel: + kernel: "{{ ansible_kernel }}" + register: found_kernel + +# Do this before installing kernel headers +- name: Set dpdk_kernel to be the kernel we found + set_fact: + dpdk_kernel: "{{ found_kernel.kernel }}" + +- include: "{{ ansible_os_family }}.yml" + +- name: set RTE_KERNELDIR to point to found kernel + set_fact: + RTE_KERNELDIR: "/lib/modules/{{ dpdk_kernel }}/build" + +- my_make: + chdir: "{{ dpdk_shared_path }}" + target: config + params: + T: "{{ dpdk_make_arch }}" + O: "{{ dpdk_make_arch }}" + extra_args: "-j {{ ansible_processor_vcpus }}" + environment: + RTE_KERNELDIR: "{{ RTE_KERNELDIR }}" + +- name: enable RTE_PORT_STATS_COLLECT + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_PORT_STATS_COLLECT=n' + line: 'CONFIG_RTE_PORT_STATS_COLLECT=y' + +- name: enable DPDK RTE_PORT_PCAP + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_PORT_PCAP=n' + line: 'CONFIG_RTE_PORT_PCAP=y' + +- name: enable DPDK RTE_TABLE_STATS_COLLECT + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_TABLE_STATS_COLLECT=n' + line: 'CONFIG_RTE_TABLE_STATS_COLLECT=y' + +- name: enable DPDK RTE_PIPELINE_STATS_COLLECT + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_PIPELINE_STATS_COLLECT=n' + line: 'CONFIG_RTE_PIPELINE_STATS_COLLECT=y' + +# This is requied for collectd but VNFs can't use shared DPDK +- name: enable CONFIG_RTE_BUILD_SHARED_LIB + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_BUILD_SHARED_LIB=n' + line: 'CONFIG_RTE_BUILD_SHARED_LIB=y' + +- name: enable DPDK CONFIG_RTE_EAL_PMD_PATH + lineinfile: + dest: "{{ dpdk_shared_path }}/{{ dpdk_make_arch }}/.config" + regexp: '^CONFIG_RTE_EAL_PMD_PATH=""' + line: 'CONFIG_RTE_EAL_PMD_PATH="{{ dpdk_pmd_path }}"' + +- my_make: + chdir: "{{ dpdk_shared_path }}" + target: clean + params: + # no T= target for clean + O: "{{ dpdk_make_arch }}" + extra_args: "-j {{ ansible_processor_vcpus }}" + environment: + RTE_KERNELDIR: "{{ RTE_KERNELDIR }}" + +# TODO: disable ASLR + +- my_make: + chdir: "{{ dpdk_shared_path }}/{{ dpdk_make_arch}}" + extra_args: "-j {{ ansible_processor_vcpus }}" + environment: + RTE_KERNELDIR: "{{ RTE_KERNELDIR }}" + +#- name: make install DPDK into /usr for collectd and other programs +# my_make: +# chdir: "{{ dpdk_shared_path }}/{{ dpdk_make_arch}}" +# target: install +# params: "T={{ RTE_TARGET }}" +## params: "prefix={{ usr_prefix }}" +# environment: +# RTE_KERNELDIR: "{{ RTE_KERNELDIR }}" +# become: yes + +# don't install module or copy dpdk-devbind + diff --git a/ansible/roles/install_dpdk_shared/vars/main.yml b/ansible/roles/install_dpdk_shared/vars/main.yml new file mode 100644 index 000000000..45bcc339b --- /dev/null +++ b/ansible/roles/install_dpdk_shared/vars/main.yml @@ -0,0 +1,9 @@ +--- +dpdk_make_arch: x86_64-native-linuxapp-gcc +dpdk_module_dir: "/lib/modules/{{ dpdk_kernel }}/extra" +hugetable_mount: /mnt/huge +dpdk_devbind: + "16.07": "{{ dpdk_path }}/tools/dpdk-devbind.py" + "17.02": "{{ dpdk_path }}/usertools/dpdk-devbind.py" + "17.04": "{{ dpdk_path }}/usertools/dpdk-devbind.py" +dpdk_pmd_path: /usr/lib/dpdk-pmd/ |