Compare commits

...

No commits in common. "8016aec966ea46b2f442d4134a4ba0e851c5c8e9" and "4c01378119dd38c922784e48deeafe0cde2934f7" have entirely different histories.

36 changed files with 356 additions and 190 deletions

View File

@ -1,2 +0,0 @@
# ansible-networkconfig
This repo is intended to be used as an ansible role

17
files/ovsovn.service Normal file
View File

@ -0,0 +1,17 @@
[Unit]
Description=OpenVSwitch and OVN Controller service
After=network-pre.target systemd-udev-settle.service
Before=networking.service
StartLimitIntervalSec=0
[Service]
Type=oneshot
RestartSec=5
RemainAfterExit=true
ExecStart=/usr/sbin/ovsovn-service-manager.sh START
ExecStop=/usr/sbin/ovsovn-service-manager.sh STOP
[Install]
WantedBy=multi-user.target

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +1,3 @@
--- ---
- name: restart ovsovn.service
- name: restart frr-docker action: service name=ovsovn enabled=yes state=restarted
action: service name=frr-docker enabled=yes state=restarted

View File

@ -1,58 +1,94 @@
- name: Install required system packages #OVS Version 2.13.0 \ Ubuntu 18
apt: name={{ item }} state=present update_cache=yes #ovsdb_server_md5_value: "f0a820cb40824c3a9f87f57644037d64"
loop: [ #OVN Version 20.06.0 \ Ubuntu 18
'ifupdown', #ovn_nbctl_md5_value: "4310864bd9676925a49909013071cbec"
'ifenslave',
]
tags: interfaces
- name: Configure /etc/network/interfaces #OVS Version 2.14.0 \ Ubuntu 18
#ovsdb_server_md5_value: "ffd9ba2a6b3da6108d7eb97c70e51761"
#OVN Version 20.09.0 \ Ubuntu 18
#ovn_nbctl_md5_value: "031e770fd969617c221b156726c2f1dc"
#OVS Version 2.14.0 \ Ubuntu 20
#ovsdb_server_md5_value: "2183d20b8df5b5cb790aa238f6e1432e"
#OVN Version 20.09.0 \ Ubuntu 20
#ovn_nbctl_md5_value: "6007bc53bf30b8d4b4c0fab039ee576b"
- name: "Checking presense of OpenVsitch and comparing MD5 hash value"
stat:
path: /usr/sbin/ovsdb-server
checksum_algorithm: md5
register: ovsdb_server_exists
# This will ensure that all OpenvSwitch binaries are running the desired version, based on the MD5 value stored in the variables file
# When releasing a new version of ovs, update this md5 an update the copy and install tasks below
- name: "Set fact to False"
set_fact:
force_new_ovs_download: False
- name: "Checking presense of OVN and comparing MD5 hash value"
stat:
path: /usr/bin/ovn-nbctl
checksum_algorithm: md5
register: ovn_nbctl_exists
# This will ensure that all OVN binaries are running the desired version, based on the MD5 value stored in the variables file
# When releasing a new version of OVN, update this md5 an update the copy and install tasks below
- name: "Set fact to False"
set_fact:
force_new_ovn_download: False
- name: Include tasks based on OS being Ubuntu 18
include_tasks: ubuntu18.yml
when:
- ansible_distribution_major_version=="18"
- ansible_distribution == "Ubuntu"
tags: ceph
- name: Include tasks based on OS being Ubuntu 20
include_tasks: ubuntu20.yml
when:
- ansible_distribution_major_version=="20"
- ansible_distribution == "Ubuntu"
tags: ceph
#Install the custom service to start OVS and OVN as required
- name: "Copy /usr/sbin/ovsovn-service-manager.sh file"
template: template:
src: templates/interfaces.j2 src: ovsovn-service-manager.sh.j2
dest: /etc/network/interfaces dest: "/usr/sbin/ovsovn-service-manager.sh"
backup: yes mode: +x
tags: interfaces notify:
- restart ovsovn.service
tags: service
- name: Remove /etc/network/interfaces.d/eth0 - name: "Configure ovsovn.service"
file: action: template src=files/ovsovn.service dest=/etc/systemd/system/ovsovn.service backup=no
path: /etc/network/interfaces.d/eth0 notify:
state: absent - restart ovsovn.service
tags: interfaces tags: service
- name: Remove /etc/netplan/01-netcfg.yaml - name: "Reload systemctl then enable & start ovsovn service"
file: systemd:
path: /etc/netplan/01-netcfg.yaml state: started
state: absent enabled: True
tags: interfaces daemon_reload: yes
name: ovsovn.service
- name: Remove /etc/netplan/50-cloud-init.yaml tags: service
file:
path: /etc/netplan/50-cloud-init.yaml
state: absent
tags: interfaces
- name: Add the bonding module
modprobe:
name: bonding
state: present
tags: interfaces
- name: Add the 8021q module
modprobe:
name: 8021q
state: present
tags: interfaces
- name: Make sure 8021q\dot1q makes it into /etc/modules for loading at boot time
lineinfile:
path: /etc/modules
state: present
line: '8021q'
tags: interfaces
- name: Make sure bonding makes it into /etc/modules for loading at boot time
lineinfile:
path: /etc/modules
state: present
line: 'bonding'
tags: interfaces

91
tasks/ubuntu18.yml Normal file
View File

@ -0,0 +1,91 @@
- name: set ovsdb_server_md5_value fact
set_fact:
ovsdb_server_md5_value: "ffd9ba2a6b3da6108d7eb97c70e51761"
- name: set ovn_nbctl_md5_value fact
set_fact:
ovn_nbctl_md5_value: "031e770fd969617c221b156726c2f1dc"
- name: "Set fact to true if the source file exists but the MD5 sum does not match"
set_fact:
force_new_ovs_download: "{{ ovsdb_server_exists.stat.checksum != ovsdb_server_md5_value }}"
when: ovsdb_server_exists.stat.exists
- name: "Set fact to true if the source file does not exist"
set_fact:
force_new_ovs_download: True
when: not ovsdb_server_exists.stat.exists
- name: Debug out force_new_ovs_download
debug: msg="Installing OpenVSwitch"
when: force_new_ovs_download
- name: Debug out force_new_ovs_download
debug: msg="NOT Installing OpenVSwitch, MD5 sum matches"
when: not force_new_ovs_download
- name: "Copy OVN binaries"
copy:
src: "ubuntu18/{{ item }}"
dest: "/tmp/{{ item }}"
with_items:
- libopenvswitch_2.14.0-1_amd64.deb
- openvswitch-common_2.14.0-1_amd64.deb
- openvswitch-switch_2.14.0-1_amd64.deb
when: force_new_ovs_download
- name: "Install packages"
apt:
deb: "{{ item }}"
with_items:
- "/tmp/libopenvswitch_2.14.0-1_amd64.deb"
- "/tmp/openvswitch-common_2.14.0-1_amd64.deb"
- "/tmp/openvswitch-switch_2.14.0-1_amd64.deb"
when: force_new_ovs_download
- name: "Set fact to true if the source file exists but the MD5 sum does not match"
set_fact:
force_new_ovn_download: "{{ ovn_nbctl_exists.stat.checksum != ovn_nbctl_md5_value }}"
when: ovn_nbctl_exists.stat.exists
#- debug: msg={{ovn_nbctl_md5_value}}
#- debug: msg={{ovn_nbctl_exists}}
- name: "Set fact to true if the source file does not exist"
set_fact:
force_new_ovn_download: True
when: not ovn_nbctl_exists.stat.exists
- debug: msg="Installing OVN"
when: force_new_ovn_download
- debug: msg="NOT Installing OVN, MD5 sum matches"
when: not force_new_ovn_download
- name: "Copy OVN binaries"
copy:
src: "ubuntu18/{{ item }}"
dest: "/tmp/{{ item }}"
with_items:
- ovn_20.09.0-1_amd64.deb
when: force_new_ovn_download
- name: "Install packages"
apt:
deb: "{{ item }}"
with_items:
- "/tmp/ovn_20.09.0-1_amd64.deb"
when: force_new_ovn_download

89
tasks/ubuntu20.yml Normal file
View File

@ -0,0 +1,89 @@
- name: set ovsdb_server_md5_value fact
set_fact:
ovsdb_server_md5_value: "2183d20b8df5b5cb790aa238f6e1432e"
- name: set ovn_nbctl_md5_value fact
set_fact:
ovn_nbctl_md5_value: "6007bc53bf30b8d4b4c0fab039ee576b"
- name: "Set fact to true if the source file exists but the MD5 sum does not match"
set_fact:
force_new_ovs_download: "{{ ovsdb_server_exists.stat.checksum != ovsdb_server_md5_value }}"
when: ovsdb_server_exists.stat.exists
- name: "Set fact to true if the source file does not exist"
set_fact:
force_new_ovs_download: True
when: not ovsdb_server_exists.stat.exists
- name: Debug out force_new_ovs_download
debug: msg="Installing OpenVSwitch"
when: force_new_ovs_download
- name: Debug out force_new_ovs_download
debug: msg="NOT Installing OpenVSwitch, MD5 sum matches"
when: not force_new_ovs_download
- name: "Copy OVN binaries"
copy:
src: "ubuntu20/{{ item }}"
dest: "/tmp/{{ item }}"
with_items:
- libopenvswitch_2.14.0-1_amd64.deb
- openvswitch-common_2.14.0-1_amd64.deb
- openvswitch-switch_2.14.0-1_amd64.deb
when: force_new_ovs_download
- name: "Install packages"
apt:
deb: "{{ item }}"
with_items:
- "/tmp/libopenvswitch_2.14.0-1_amd64.deb"
- "/tmp/openvswitch-common_2.14.0-1_amd64.deb"
- "/tmp/openvswitch-switch_2.14.0-1_amd64.deb"
when: force_new_ovs_download
- name: "Set fact to true if the source file exists but the MD5 sum does not match"
set_fact:
force_new_ovn_download: "{{ ovn_nbctl_exists.stat.checksum != ovn_nbctl_md5_value }}"
when: ovn_nbctl_exists.stat.exists and use_ovn
#- debug: msg={{ovn_nbctl_md5_value}}
#- debug: msg={{ovn_nbctl_exists}}
- name: "Set fact to true if the source file does not exist"
set_fact:
force_new_ovn_download: True
when: not ovn_nbctl_exists.stat.exists and use_ovn
- debug: msg="Installing OVN"
when: force_new_ovn_download and use_ovn
- debug: msg="NOT Installing OVN, MD5 sum matches"
when: not force_new_ovn_download and use_ovn
- name: "Copy OVN binaries"
copy:
src: "ubuntu20/{{ item }}"
dest: "/tmp/{{ item }}"
with_items:
- ovn_20.06.0-1_amd64.deb
when: force_new_ovn_download and use_ovn
- name: "Install packages"
apt:
deb: "{{ item }}"
with_items:
- "/tmp/ovn_20.06.0-1_amd64.deb"
when: force_new_ovn_download and use_ovn

View File

@ -1,127 +0,0 @@
auto lo
iface lo inet loopback
{% if host_loopback_IP is defined %}
auto lo:1
iface lo:1 inet static
address {{host_loopback_IP}}/32
{% endif %}
{% if OOBNET_NIC is defined %}
auto {{OOBNET_NIC}}
allow-hotplug {{OOBNET_NIC}}
iface {{OOBNET_NIC}} inet static
address {{OOBNET_IP}}/{{OOBNET_Netmask}}
{% if OOBNET_GW is defined %}gateway {{OOBNET_GW}}{% endif %}
{% endif %}
{% if autobgp_interfaces is defined %}
{% for item in autobgp_interfaces %}
auto {{ item['name'] }}
allow-hotplug {{ item['name'] }}
iface {{ item['name'] }} inet static
address {{host_loopback_IP}}/32
{% if item['mtu'] is defined %}
mtu {{ item['mtu'] }}
{% endif %}
{% if item['force10G'] is defined and item['force10G']|lower == "true" %}
#Force speed to 10G
post-up sudo ethtool -s {{ item['name'] }} autoneg off
post-up sudo ethtool -s {{ item['name'] }} speed 10000
{% endif %}
{% if item['force40G'] is defined and item['force40G']|lower == "true" %}
#Force speed to 40G
pre-up sudo ethtool -s {{ item['name'] }} autoneg off
pre-up sudo ethtool -s {{ item['name'] }} speed 40000
{% endif %}
{% if item['auto40G'] is defined and item['auto40G']|lower == "true" %}
#Auto speed
pre-up sudo /bin/ip link set down {{ item['name'] }} && sleep 1
pre-up sudo ethtool -s {{ item['name'] }} speed 40000 duplex full autoneg on
post-up sudo /bin/ip link set up {{ item['name'] }}
{% endif %}
{% endfor %}
{% endif %}
{% if addressed_interfaces is defined and addressed_interfaces != [] %}
{% for item in addressed_interfaces %}
auto {{ item['name'] }}
allow-hotplug {{ item['name'] }}
iface {{ item['name'] }} inet static
address {{item['ip_address']}}/{{item['ip_netmask']}}
{% if item['mtu'] is defined %}
mtu {{ item['mtu'] }}
{% endif %}
{% if item['ip_gateway'] is defined %}
gateway {{item['ip_gateway']}}
{% endif %}
{% if item['force10G'] is defined and item['force10G']|lower == "true" %}
post-up sudo ethtool -s {{ item['name'] }} autoneg off
post-up sudo ethtool -s {{ item['name'] }} speed 10000
{% endif %}
{% endfor %}
{% endif %}
{% if bond_interfaces is defined and bond_interfaces != [] %}
{% for item in bond_interfaces %}
{% for slave in item['slaves'] %}
auto {{slave['name']}}
iface {{slave['name']}} inet manual
bond-master {{ item['name'] }}
{% endfor %}
auto {{ item['name'] }}
{% if item['ip_address'] is defined %}
iface {{ item['name'] }} inet static
address {{item['ip_address']}}/{{item['ip_netmask']}}
{% else %}
iface {{ item['name'] }} inet manual
{% endif %}
{% if item['ip_gateway'] is defined %}
gateway {{item['ip_gateway']}}
{% endif %}
{% if item['mtu'] is defined %}
mtu {{ item['mtu'] }}
{% endif %}
bond-mode active-backup
bond-miimon 100
bond-slaves none
{% endfor %}
{% endif %}
{% if vlan_interfaces is defined and vlan_interfaces != [] %}
{% for item in vlan_interfaces %}
auto {{ item['name'] }}
{% if item['ip_address'] is defined %}
iface {{ item['name'] }} inet static
address {{item['ip_address']}}/{{item['ip_netmask']}}
{% else %}
iface {{ item['name'] }} inet manual
{% endif %}
{% if item['ip_gateway'] is defined %}
gateway {{item['ip_gateway']}}
{% endif %}
{% if item['mtu'] is defined %}
mtu {{ item['mtu'] }}
{% endif %}
vlan-raw-device {{ item['vlan-raw-device'] }}
{% endfor %}
{% endif %}
{% if unused_interfaces is defined and unused_interfaces != [] %}
{% for item in unused_interfaces %}
allow-hotplug {{ item['name'] }}
iface {{ item['name'] }} inet manual
{% endfor %}
{% endif %}

View File

@ -0,0 +1,63 @@
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
exit 1
fi
echo "Command recieved: $1"
START(){
hostname=$(hostname)
loopbackIP={{host_loopback_IP}}
DIR="/var/run/openvswitch/db.sock"
if [ -d "$DIR" ]; then
rm -rf $DIR
echo "Removed extraneous dir $DIR"
fi
/usr/share/openvswitch/scripts/ovs-ctl start --system-id=$hostname
echo "OVS started"
#Instruct OVSDB to listen on 127.0.0.2:6640 so the ovs-vsctl command from within a container can access OpenVswitch
ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640
#ovs-vsctl del-br br-int
{% if use_ovn is defined and use_ovn == true %}
echo "Starting OpenVSwitch and OVN on $hostname with $loopbackIP and pointing to OVN controller {{OVN_SB_Connection}}"
ovs-vsctl set open . external-ids:ovn-bridge=br-int
ovs-vsctl set open . external-ids:ovn-remote={{OVN_SB_Connection}}
ovs-vsctl set open . external-ids:ovn-encap-type=geneve
ovs-vsctl set open . external-ids:ovn-encap-ip=$loopbackIP
/usr/share/ovn/scripts/ovn-ctl start_controller
echo "OVS and OVN started"
{% else %}
{% endif %}
{% if ansible_fqdn in groups['br_provider_nodes'] %}
echo "Bringing online br-provider for WAN1"
ovs-vsctl --may-exist add-br br-provider
ovs-vsctl set open . external-ids:ovn-bridge-mappings=WAN1:br-provider
ovs-vsctl --may-exist add-port br-provider bond0.11
{% endif %}
}
STOP() {
{% if use_ovn is defined and use_ovn == true %}
echo "Stopping OVN"
/usr/share/ovn/scripts/ovn-ctl stop_controller
/usr/share/ovn/scripts/ovn-ctl stop_ovsdb
echo "OpenVSwitch and OVN Stopped"
{% else %}
echo "Stopping OpenVSwitch"
/usr/share/openvswitch/scripts/ovs-ctl stop
echo "OpenVSwitch Stopped"
{% endif %}
}
case $1 in
START|STOP) "$1" ;;
esac