VOL-2642 Add a Makefile, tests, and virtualenv

Convert common python and robot into a CORDRobot python module that can
be installed via standard python tools (pip) and from PyPI

Uses a fork of https://github.com/rasjani/robotframework-importresource,
which has been backported to Python 3.5 (used in Ubuntu 16.04
executors).

Reformatted and moved keywords so resource files are scoped to a
specific topic.

Added tox tests for library consistency

- flake8
- pylint
- robotframework-lint
- Ran robot against installed library to verify it can be loaded and
  used

Added basic lint and tests to whole repo

Removed old tests:

- CORD <6.x era: SanityPhyPOD.robot, and onosUtils.py

Change-Id: I61265a9fb04034a086e20be1f7236a8793a218aa
diff --git a/cord-robot/CORDRobot/rf-resources/ONOS.resource b/cord-robot/CORDRobot/rf-resources/ONOS.resource
new file mode 100644
index 0000000..dfe519b
--- /dev/null
+++ b/cord-robot/CORDRobot/rf-resources/ONOS.resource
@@ -0,0 +1,118 @@
+# 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.
+# onos common functions
+
+*** Settings ***
+Documentation     Library for ONOS Functions
+Library           SSHLibrary
+
+*** Keywords ***
+Execute ONOS CLI Command
+    [Documentation]    Establishes an ssh connection to ONOS contoller and executes a command
+    [Arguments]    ${host}    ${port}    ${cmd}    ${user}=karaf    ${pass}=karaf
+    ${conn_id}=    SSHLibrary.Open Connection    ${host}    port=${port}    timeout=300s
+    SSHLibrary.Login    ${user}    ${pass}
+    @{result_values}    SSHLibrary.Execute Command    ${cmd}    return_rc=True
+    ...    return_stderr=True    return_stdout=True
+    ${output}    Set Variable    @{result_values}[0]
+    Log    ${output}
+    Should Be Empty    @{result_values}[1]
+    Should Be Equal As Integers    @{result_values}[2]    0
+    SSHLibrary.Close Connection
+    [Return]    ${output}
+
+Validate XConnect in ONOS
+    [Documentation]    Check if Fabric Crossconnnect matches exists value
+    [Arguments]    ${server_ip}    ${stag}    ${exists}=True    ${port}=30120
+    # FIXME: use Robot-based JSON manipulation, shorten line
+    ${rc}=    Run And Return RC
+    ...    http -a karaf:karaf GET http://${server_ip}:${port}/onos/segmentrouting/xconnect|jq -r '.xconnects[].vlanId'|grep ${stag}
+    Run Keyword If    '${exists}' == 'True'
+    ...    Should Be Equal As Integers    ${rc}    0
+    ...    ELSE
+    ...    Should Be Equal As Integers    ${rc}    1
+
+Get ONOS Status
+    [Documentation]    Obtain and log output of ONOS diagnostic commands
+    [Arguments]    ${server_ip}=${None}    ${server_port}=30115
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_apps.log    apps -a -s
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_apps}    Get Binary File    /tmp/onos_apps.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_devices.log    devices
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_devices}    Get Binary File    /tmp/onos_devices.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_ports.log    ports
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_ports}    Get Binary File    /tmp/onos_ports.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_flows.log    flows -s
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_flows}    Get Binary File    /tmp/onos_flows.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_meters.log    meters
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_meters}    Get Binary File    /tmp/onos_meters.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_volt_prog_subscribers.log    volt-programmed-subscribers
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_volt_prog_subscribers}    Get Binary File    /tmp/onos_volt_prog_subscribers.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_volt_prog_meters.log    volt-programmed-meters
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_volt_prog_meters}    Get Binary File    /tmp/onos_volt_prog_meters.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_volt_bp_meters.log    volt-bpmeter-mappings
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_volt_bp_meters}    Get Binary File    /tmp/onos_volt_bp_meters.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_dhcpl2.log    dhcpl2relay-allocations
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_dhcpl2}    Get Binary File    /tmp/onos_dhcpl2.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_aaa_users.log    aaa-users
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_aaa_users}    Get Binary File    /tmp/onos_aaa_users.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_netcfg.log    netcfg
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_netcfg}    Get Binary File    /tmp/onos_netcfg.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_groups.log    groups
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_groups}    Get Binary File    /tmp/onos_groups.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_hosts.log    hosts
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_hosts}    Get Binary File    /tmp/onos_hosts.log
+    CORDRobot.write_log_of_onos_cli_command    /tmp
+    ...    onos_links.log    links
+    ...    host=${server_ip}    port=${server_port}
+    ${onos_links}    Get Binary File    /tmp/onos_links.log
+    Log    ${onos_apps}
+    Log    ${onos_devices}
+    Log    ${onos_ports}
+    Log    ${onos_flows}
+    Log    ${onos_meters}
+    Log    ${onos_aaa_users}
+    Log    ${onos_volt_prog_subscribers}
+    Log    ${onos_volt_prog_meters}
+    Log    ${onos_volt_bp_meters}
+    Log    ${onos_hosts}
+    Log    ${onos_dhcpl2}
+    Log    ${onos_netcfg}
+    Log    ${onos_groups}
+    Log    ${onos_links}