From: David Galloway Date: Tue, 19 Dec 2017 00:59:47 +0000 (-0500) Subject: testnode: Support for configuring a second NIC X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=e495246f91b9a632c1a7cee34bfd422791bee154;p=ceph-cm-ansible.git testnode: Support for configuring a second NIC Signed-off-by: David Galloway --- diff --git a/roles/testnode/README.rst b/roles/testnode/README.rst index 5d4b92a..d62a570 100644 --- a/roles/testnode/README.rst +++ b/roles/testnode/README.rst @@ -162,6 +162,11 @@ The latter is only done if ``lab_domain`` is defined:: lab_domain: '' +Up until recently, testnodes only had one uplink. Definining ``secondary_nic_mac`` as a hostvar will configure the corresponding NIC to use DHCP. This +assumes you've configured a static IP definition on your DHCP server and only supports one additional NIC at this time:: + + secondary_nic_mac: '' + A dictionary of drives/devices you want to partition. ``scratch_devs`` is not required. All other values are self-explanatory given this example:: # Example: @@ -264,6 +269,9 @@ remove-ceph repos Perform all repo related tasks. Creates and manages our custom repo files. +secondary-nic + Configure secondary NIC if ``secondary_nic_mac`` is defined. + selinux Configure selinux on yum systems. diff --git a/roles/testnode/tasks/main.yml b/roles/testnode/tasks/main.yml index 0645700..6bde9c2 100644 --- a/roles/testnode/tasks/main.yml +++ b/roles/testnode/tasks/main.yml @@ -108,6 +108,12 @@ tags: - resolvconf +- name: include secondary NIC config tasks + import_tasks: secondary_nic.yml + when: secondary_nic_mac is defined + tags: + - secondary-nic + # http://tracker.ceph.com/issues/20623 - name: List any leftover Ceph artifacts from previous jobs shell: 'find {{ item }} -name "*ceph*"' diff --git a/roles/testnode/tasks/secondary_nic.yml b/roles/testnode/tasks/secondary_nic.yml new file mode 100644 index 0000000..6fbb96b --- /dev/null +++ b/roles/testnode/tasks/secondary_nic.yml @@ -0,0 +1,80 @@ +--- +- name: Make sure ethtool is installed + package: + name: ethtool + state: latest + +- name: grep ethtool for secondary NIC MAC address + shell: "ethtool -P {{ item }} | awk '{ print $3 }' | grep -q -i '{{ secondary_nic_mac }}'" + register: ethtool_grep_output + with_items: "{{ ansible_interfaces }}" + failed_when: false + changed_when: false + +- name: Define net_to_configure var + set_fact: + nic_to_configure: "{{ item.item }}" + with_items: "{{ ethtool_grep_output.results }}" + when: item.rc == 0 + +# Default to 1500 +- set_fact: mtu=1500 + +- name: "Check if {{ nic_to_configure }} is 10Gb" + shell: "ethtool {{ nic_to_configure }} | grep Speed | awk '{ print $2 }'" + register: nic_to_configure_speed + changed_when: false + +# Assume jumbo frames if 10Gb +- name: Set MTU to 9000 if 10Gb + set_fact: mtu=9000 + when: + - nic_to_configure_speed is defined + - nic_to_configure_speed.stdout == '10000Mb/s' + +- name: "Write Ubuntu network config for {{ nic_to_configure }}" + blockinfile: + path: /etc/network/interfaces + block: | + auto {{ nic_to_configure }} + iface {{ nic_to_configure }} inet dhcp + register: wrote_network_config + when: + - nic_to_configure is defined + - ansible_os_family == 'Debian' + +# Can't set MTU for DHCP interfaces on Ubuntu in /etc/network/interfaces +- name: Set MTU on Ubuntu + shell: "ifconfig {{ nic_to_configure }} mtu {{ mtu }}" + when: ansible_os_family == 'Debian' + +- name: "Bounce {{ nic_to_configure }}" + shell: "ifdown {{ nic_to_configure }} && ifup {{ nic_to_configure }}" + when: + - wrote_network_config|changed + - ansible_os_family == 'Debian' + +- name: "Write RHEL/CentOS network config for {{ nic_to_configure }}" + lineinfile: + path: "/etc/sysconfig/network-scripts/ifcfg-{{ nic_to_configure }}" + create: yes + owner: root + group: root + mode: 0644 + regexp: "{{ item.regexp }}" + line: "{{ item.line }}" + register: wrote_network_config + with_items: + - { regexp: '^DEVICE=', line: 'DEVICE={{ nic_to_configure }}' } + - { regexp: '^BOOTPROTO=', line: 'BOOTPROTO=dhcp' } + - { regexp: '^ONBOOT=', line: 'ONBOOT=yes' } + - { regexp: '^MTU=', line: 'MTU={{ mtu }}' } + when: + - nic_to_configure is defined + - ansible_os_family == 'RedHat' + +- name: "Bounce {{ nic_to_configure }}" + shell: "ifdown {{ nic_to_configure }} && ifup {{ nic_to_configure }}" + when: + - wrote_network_config|changed + - ansible_os_family == 'RedHat'