This commit is contained in:
Cory Hawkless 2020-07-30 17:08:37 +09:30
commit 1aacd141ff
18 changed files with 200 additions and 0 deletions

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.

14
files/ovsovn.service Normal file
View File

@ -0,0 +1,14 @@
[Unit]
Description=ACS2 OpenVSwitch and OVN Controller service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=forking
RestartSec=5
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.

3
handlers/main.yml Normal file
View File

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

132
tasks/main.yml Normal file
View File

@ -0,0 +1,132 @@
- 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: "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 == True
- name: "Set fact to true if the source file does not exist"
set_fact:
force_new_ovs_download: True
when: ovsdb_server_exists.stat.exists == False
- debug: msg="Installing OpenVSwitch"
when: force_new_ovs_download == True
- debug: msg="NOT Installing OpenVSwitch, MD5 sum matches"
when: force_new_ovs_download == False
- name: "Copy OVN binaries"
copy:
src: "{{item}}"
dest: "/tmp/{{item}}"
with_items:
- libopenvswitch_2.13.0-1_amd64.deb
- openvswitch-common_2.13.0-1_amd64.deb
- openvswitch-switch_2.13.0-1_amd64.deb
when: force_new_ovs_download == True
- name: "Install packages"
apt:
deb: "{{ item }}"
with_items:
- "/tmp/libopenvswitch_2.13.0-1_amd64.deb"
- "/tmp/openvswitch-common_2.13.0-1_amd64.deb"
- "/tmp/openvswitch-switch_2.13.0-1_amd64.deb"
when: force_new_ovs_download == True
- 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: "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 == True
#- 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: ovn_nbctl_exists.stat.exists == False
- debug: msg="Installing OVN"
when: force_new_ovn_download == True
- debug: msg="NOT Installing OVN, MD5 sum matches"
when: force_new_ovn_download == False
- name: "Copy OVN binaries"
copy:
src: "{{item}}"
dest: "/tmp/{{item}}"
with_items:
- ovn_20.06.0-1_amd64.deb
when: force_new_ovn_download == True
- name: "Install packages"
apt:
deb: "{{ item }}"
with_items:
- "/tmp/ovn_20.06.0-1_amd64.deb"
when: force_new_ovn_download == True
#Install the custom service to start OVS and OVN as required
- name: "Copy /usr/sbin/ovsovn-service-manager.sh file"
template:
src: ovsovn-service-manager.sh.j2
dest: "/usr/sbin/ovsovn-service-manager.sh"
mode: +x
notify:
- restart ovsovn.service
tags: service
- name: "Configure ovsovn.service"
action: template src=files/ovsovn.service dest=/etc/systemd/system/ovsovn.service backup=no
notify:
- restart ovsovn.service
tags: service
- name: "Reload systemctl then enable & start ovsovn service"
systemd:
state: started
enabled: True
daemon_reload: yes
name: ovsovn.service
tags: service

View File

@ -0,0 +1,51 @@
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "Illegal number of parameters"
exit 1
fi
echo "ZZZ $1"
START(){
hostname=$(hostname)
loopbackIP={{LAN_IP}}
controllerIP={{OVN_VIP}}
echo "Starting OpenVSwitch and OVN on $hostname with $loopbackIP and pointing to OVN controller $controllerIP"
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
#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 set open . external-ids:ovn-bridge=br-int
ovs-vsctl set open . external-ids:ovn-remote=tcp:$controllerIP:6642
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"
{% if ansible_fqdn in groups['compute-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() {
echo "Stopping OpenVSwitch and OVN"
/usr/share/ovn/scripts/ovn-ctl stop_controller
/usr/share/ovn/scripts/ovn-ctl stop_ovsdb
/usr/share/openvswitch/scripts/ovs-ctl stop
echo "OpenVSwitch and OVN Stopped"
}
case $1 in
START|STOP) "$1" ;;
esac