diff options
Diffstat (limited to 'playbooks/roles/configure-vms/tasks/main.yaml')
-rw-r--r-- | playbooks/roles/configure-vms/tasks/main.yaml | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/playbooks/roles/configure-vms/tasks/main.yaml b/playbooks/roles/configure-vms/tasks/main.yaml new file mode 100644 index 0000000..ee90782 --- /dev/null +++ b/playbooks/roles/configure-vms/tasks/main.yaml @@ -0,0 +1,91 @@ +--- +# ============LICENSE_START======================================================= +# Copyright (C) 2019 The Nordix Foundation. All rights reserved. +# ================================================================================ +# 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. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +- name: Get node names from IDF + set_fact: + node_name: "{{ item.key }}" + with_dict: "{{ idf.kubespray.hostnames }}" + when: item.value == inventory_hostname + +- name: Set facts for the nodes + set_fact: + node: "{{ nodes | selectattr('name', 'equalto', node_name) | first }}" + +- name: Configure modules + lineinfile: + dest: /etc/modules + state: present + create: true + line: "8021q" + +- name: Add modules + modprobe: + name: 8021q + state: present + +- name: Ensure interfaces.d folder is empty + file: + state: "{{ item }}" + path: "/etc/network/interfaces.d" + with_items: + - absent + - directory + +- name: Ensure /etc/interfaces can source additional files + copy: + content: | + auto lo + iface lo inet loopback + source /etc/network/interfaces.d/*.cfg + dest: "/etc/network/interfaces" + +- name: Compute mapping dict from mac address to device name + set_fact: + device_mac_dict: "{{ (device_mac_dict | default({})) | combine({item.macaddress: item.device}) }}" + loop: |- + {{ ansible_interfaces | map('regex_replace', '-', '_') | map('regex_replace', '^', 'ansible_') | + map('extract', hostvars[inventory_hostname]) | selectattr('macaddress','defined') | list }} + when: "'.' not in item.device" + +- name: Filter to include only configured ethernet interfaces + set_fact: + if_mac_dict: "{{ ( if_mac_dict | default({}) ) | combine({item.mac_address: device_mac_dict[item.mac_address]}) }}" + loop: "{{ node.interfaces }}" + +- name: Configure networking for host + template: + src: "Debian.interface.j2" + dest: "/etc/network/interfaces.d/{{ item.value }}.cfg" + loop: "{{ if_mac_dict | dict2items }}" + +- name: Reboot the machine + shell: "sleep 5 && reboot" + async: 1 + poll: 0 + changed_when: false + +- name: Wait for host to come back to life + wait_for_connection: + connect_timeout: 10 + sleep: 5 + delay: 120 + timeout: 300 + register: result + until: result is succeeded + retries: 3 |