]> git.apps.os.sepia.ceph.com Git - ceph-cm-ansible.git/commitdiff
testnode: Support for configuring a second NIC 366/head
authorDavid Galloway <dgallowa@redhat.com>
Tue, 19 Dec 2017 00:59:47 +0000 (19:59 -0500)
committerDavid Galloway <dgallowa@redhat.com>
Tue, 19 Dec 2017 14:29:15 +0000 (09:29 -0500)
Signed-off-by: David Galloway <dgallowa@redhat.com>
roles/testnode/README.rst
roles/testnode/tasks/main.yml
roles/testnode/tasks/secondary_nic.yml [new file with mode: 0644]

index 5d4b92a12b9a8b43e3b6773ea43791a08543c917..d62a57051faa951753bc9209df5ea3e876e05843 100644 (file)
@@ -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.    
 
index 0645700003ee97f781448f2729ccec16ce4cfc4f..6bde9c2bc9cd293c35ea71bea65e059d810c8cf0 100644 (file)
   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 (file)
index 0000000..6fbb96b
--- /dev/null
@@ -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'