Refactoring switch provisioning: moving Accton to new ONL and OFDPA. Introducing support for OLTs provisioning

Change-Id: I6500be973b25510df5346d9140985f6487f2031d
diff --git a/roles/fabric-switch/defaults/main.yml b/roles/fabric-switch/defaults/main.yml
index 9b7ebc1..6d528ce 100644
--- a/roles/fabric-switch/defaults/main.yml
+++ b/roles/fabric-switch/defaults/main.yml
@@ -17,14 +17,25 @@
 pub_ssh_key_file_location: "{{ pub_ssh_key_location | default ('/etc/maas/.ssh') }}"
 pub_ssh_key: "{{ lookup('file', pub_ssh_key_file_location+'/cord_rsa.pub') }}"
 
-switch_ouis:
-  accton:
-    - "cc37ab"
-    - "7072cf"
-    - "c4393a"
-    - "8cea1b"
-    - "a82bb5"
-    - "480fcf"
-  qct:
-    - "2c600c"
-    - "54ab3a"
+deb_tmp_inst_dir: "/tmp/"
+
+platforms:
+  accton_olts:
+    file_url: "http://onos-fabric/voltha-bal.deb"
+    file_name: "voltha-bal.deb"
+    names:
+      - "x86-64-accton-asxvolt16-r0"
+  accton_switches:
+    file_url: "https://github.com/onfsdn/atrium-docs/blob/master/16A/ONOS/builds/ofdpa_3.0.5.5%2Baccton1.7-1_amd64.deb?raw=true"
+    file_name: "ofdpa_3.0.5.5+accton1.7-1_amd64.deb"
+    checksum: "sha256:db228b6e79fb15f77497b59689235606b60abc157e72fc3356071bcc8dc4c01f"
+    names:
+      - "x86-64-accton-as5712-32x-r0"
+      - "x86-64-accton-as5812-32x-r0"
+      - "x86-64-accton-as6712-32x-r0"
+  quanta_switches:
+    file_url: "https://github.com/onfsdn/atrium-docs/blob/master/16A/ONOS/builds/ofdpa-ly8_0.3.0.5.0-EA5-qct-01.01_amd64.deb?raw=true"
+    file_name: "ofdpa-ly8_0.3.0.5.0-EA5-qct-01.01_amd64.deb"
+    checksum: "sha256:f8201530b1452145c1a0956ea1d3c0402c3568d090553d0d7b3c91a79137da9e"
+    names:
+      - "x86-64-quanta-ly8-rangeley-r0"
diff --git a/roles/fabric-switch/tasks/main.yml b/roles/fabric-switch/tasks/main.yml
index 818828c..03cd283 100644
--- a/roles/fabric-switch/tasks/main.yml
+++ b/roles/fabric-switch/tasks/main.yml
@@ -1,4 +1,4 @@
-
+---
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,51 +13,22 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
----
-- name: Generate DPID
-  shell: ifconfig | grep HWaddr | head -1 | awk '{ print "0x0000"$5 }' | sed s/://g
-  register: dpid
-  changed_when: false
+- name: Get platform type
+  slurp:
+    src: /etc/onl/platform
+  register: etc_onl_platform
 
-- name: Get switch OUI
-  shell: ifconfig | grep HWaddr | head -1 | awk '{ print $5 }' | sed s/://g | cut -c1-6
-  register: oui
-  changed_when: false
-
-- name: Ensure OFDPA Config
+- name: Set platform var
   set_fact:
-    switch_id: "{{ dpid.stdout }}"
-    controller_ip: "onos-fabric"
+    platform: "{{ etc_onl_platform.content | b64decode | trim }}"
 
-- name: Verify Openflow Agent
-  shell: which ofagentapp | wc -w
-  register: ofdpa_exists
-  changed_when: false
+- name: Manage OFDPA
+  include: ofdpa.yml platform="{{ platform }}"
+  when: platform in platforms.accton_switches.names or platform in platforms.quanta_switches.names
 
-- name: Openflow Agent Version
-  command: ofagentapp --version
-  register: ofdpa_version
-  changed_when: false
-  when: ofdpa_exists.stdout != "0"
-
-- name: Install OFDPA commons steps
-  include: ofdpa.yml
-  when: ofdpa_exists.stdout == "0" or
-        (ofdpa_version.stdout.find('3.0.4.0') == -1 and ofdpa_version.stdout.find('3.0.5.0') == -1)
-
-- name: Install OFDPA for Accton switches
-  include: ofdpa-accton.yml lsb_stat="{{ lsb_stat }}" dist="{{ dist }}"
-  when:
-    - ofdpa_exists.stdout == "0" or ofdpa_version.stderr.find('3.0.4.0') == -1
-    # Accton related OUIs
-    - oui.stdout in switch_ouis['accton']
-
-- name: Install OFDPA for QCT switches
-  include: ofdpa-qct.yml lsb_stat="{{ lsb_stat }}" dist="{{ dist }}"
-  when:
-    - ofdpa_exists.stdout == "0" or ofdpa_version.stderr.find('3.0.5.0') == -1
-    # QCT related OUIs
-    - oui.stdout in switch_ouis['qct']
+- name: Manage Accton OLT
+  include: olt-accton.yml
+  when: platform in platforms.accton_olts.names
 
 - name: Authorize SSH Key
   become: yes
diff --git a/roles/fabric-switch/tasks/ofdpa-accton.yml b/roles/fabric-switch/tasks/ofdpa-accton.yml
index 598adcb..b569d94 100644
--- a/roles/fabric-switch/tasks/ofdpa-accton.yml
+++ b/roles/fabric-switch/tasks/ofdpa-accton.yml
@@ -1,4 +1,4 @@
-
+---
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,14 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
----
-- name: Openflow Accton Agent Debian Archive
+- name: Copy Accton OFDPA Debian Archive
   get_url:
-    url: https://github.com/onfsdn/atrium-docs/blob/master/16A/ONOS/builds/ofdpa_3.0.4.0+accton1.0~1-1_amd64.deb?raw=true
+    url: "{{ platforms.accton_switches.file_url }}"
     validate_certs: false
-    checksum: "sha256:e0b10051b2032454132c6634a0896883e1548e0c39b847ff10933e559b95a729"
-    dest: /mnt/onl/data/ofdpa_3.0.4.0+accton1.0~1-1_amd64.deb
+    checksum: "{{ platforms.accton_switches.checksum }}"
+    dest: "{{ deb_tmp_inst_dir }}{{ platforms.accton_switches.file_name }}"
 
-- name: Openflow Agent Installed
-  apt: deb="/mnt/onl/data/ofdpa_3.0.4.0+accton1.0~1-1_amd64.deb" force=true
-  when: not lsb_stat.stat.exists or dist.stdout == "0"
+- name: Install Accton OFDPA
+  apt: deb="{{ deb_tmp_inst_dir }}{{ platforms.accton_switches.file_name }}" force=true
diff --git a/roles/fabric-switch/tasks/ofdpa-qct.yml b/roles/fabric-switch/tasks/ofdpa-qct.yml
deleted file mode 100644
index b25c62e..0000000
--- a/roles/fabric-switch/tasks/ofdpa-qct.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-# Copyright 2017-present Open Networking Foundation
-#
-# 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.
-
----
-- name: Openflow Quanta Agent Debian Archive
-  get_url:
-    url: https://github.com/onfsdn/atrium-docs/blob/master/16A/ONOS/builds/ofdpa-ly8_0.3.0.5.0-EA5-qct-01.01_amd64.deb?raw=true
-    validate_certs: false
-    checksum: "sha256:f8201530b1452145c1a0956ea1d3c0402c3568d090553d0d7b3c91a79137da9e"
-    dest: /mnt/onl/data/ofdpa-ly8_0.3.0.5.0-EA5-qct-01.01_amd64.deb
-
-- name: Openflow Agent Installed
-  apt: deb="/mnt/onl/data/ofdpa-ly8_0.3.0.5.0-EA5-qct-01.01_amd64.deb" force=true
-  when: not lsb_stat.stat.exists or dist.stdout == "0"
diff --git a/roles/fabric-switch/tasks/ofdpa-quanta.yml b/roles/fabric-switch/tasks/ofdpa-quanta.yml
new file mode 100644
index 0000000..9df9446
--- /dev/null
+++ b/roles/fabric-switch/tasks/ofdpa-quanta.yml
@@ -0,0 +1,24 @@
+---
+# Copyright 2017-present Open Networking Foundation
+#
+# 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.
+
+- name: Copy Quanta OFDPA Debian Archive
+  get_url:
+    url: "{{ platforms.quanta_switches.file_url }}"
+    validate_certs: false
+    checksum: "{{ platforms.quanta_switches.checksum }}"
+    dest: "{{ deb_tmp_inst_dir }}{{ platforms.quanta_switches.file_name }}"
+
+- name: Install Quanta OFDPA
+  apt: deb="{{ deb_tmp_inst_dir }}{{ platforms.quanta_switches.file_name }}" force=true
diff --git a/roles/fabric-switch/tasks/ofdpa.yml b/roles/fabric-switch/tasks/ofdpa.yml
index 9d8fb43..c367e18 100644
--- a/roles/fabric-switch/tasks/ofdpa.yml
+++ b/roles/fabric-switch/tasks/ofdpa.yml
@@ -1,4 +1,4 @@
-
+---
 # Copyright 2017-present Open Networking Foundation
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,50 +13,34 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
----
-# We want to kill old agents and stop the old OFDPA service before removing
-- name: OpenFlow Agent Is Not Running
-  command: killall ofagentapp
-  failed_when: false
+- name: Verify Openflow Agent
+  shell: which ofagentapp | wc -w
+  register: ofdpa_exists
   tags:
-   - skip_ansible_lint # there's no harm to run killall if process is not running
+    - skip_ansible_lint # We're just gathering info
 
-- name: Old OFDPA Is Not Running
-  command: killall -9 brcm-indigo-ofdpa-ofagent
-  failed_when: false
+- name: Install OFDPA for Accton switches
+  include: ofdpa-accton.yml
+  when:
+    - platform in platforms.accton_switches.names
+    - ofdpa_exists.stdout == "0"
+
+- name: Install OFDPA for Quanta switches
+  include: ofdpa-quanta.yml
+  when:
+    - platform in platforms.quanta_switches.names
+    - ofdpa_exists.stdout == "0"
+
+- name: Generate DPID
+  shell: ifconfig | grep HWaddr | head -1 | awk '{ print "0x0000"$5 }' | sed s/://g
+  register: dpid
   tags:
-   - skip_ansible_lint # there's no harm to run killall if process is not running
+    - skip_ansible_lint # We're just gathering info
 
-- name: Verify Service Exists
-  stat:
-    path: /etc/init.d/ofdpa
-  register: ofdpa_stat
-  changed_when: false
-  failed_when: false
-
-- name: OpenFlow Agent Stopped
-  service: name=ofdpa state=stopped
-  when: ofdpa_stat.stat.exists
-
-- name: OFDPA 3.0 EA0 Is Not Present
-  apt:
-    name: ofdpa-3.0-ea0
-    state: absent
-    force: yes
-    purge: yes
-
-- name: Verify Distribution Release File
-  stat:
-    path: /etc/lsb-release
-  register: lsb_stat
-  changed_when: false
-  failed_when: false
-
-- name: Verify Distribute Release Name
-  shell: grep -i ubuntu /etc/lsb-release | wc -l
-  register: dist
-  changed_when: false
-  failed_when: false
+- name: Ensure OFDPA Config
+  set_fact:
+    switch_id: "{{ dpid.stdout }}"
+    controller_ip: "onos-fabric"
 
 - name: Utilities Scripts
   template:
diff --git a/roles/fabric-switch/tasks/olt-accton.yml b/roles/fabric-switch/tasks/olt-accton.yml
new file mode 100644
index 0000000..f663ed1
--- /dev/null
+++ b/roles/fabric-switch/tasks/olt-accton.yml
@@ -0,0 +1,40 @@
+---
+# Copyright 2017-present Open Networking Foundation
+#
+# 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.
+
+- name: Check that Voltha BAL driver Debian Archive exists
+  stat:
+    path: "{{ platforms.accton_olts.file_url }}"
+  register: bal_driver_on_server
+
+- name: Verify Voltha BAL Driver presence
+  command: dpkg --list | grep asfvolt16
+  register: bal
+  when:
+    - bal_driver_on_server.stat.exists
+
+- name: Copy Voltha BAL Driver Debian Archive
+  get_url:
+    url: "{{ platforms.accton_olts.file_url }}"
+    validate_certs: false
+    dest: "{{ deb_tmp_inst_dir }}{{ platforms.accton_olts.file_name }}"
+  when:
+    - bal.stdout.find('asfvolt16') == -1
+    - bal_driver_on_server.stat.exists
+
+- name: Install Voltha BAL Driver
+  apt: deb="{{ deb_tmp_inst_dir }}{{ platforms.accton_olts.file_name }}" force=true
+  when:
+    - bal.stdout.find('asfvolt16') == -1
+    - bal_driver_on_server.stat.exists