SEBA-207 Generate switch port alarms;
Add kind field to switch port;
Add managementAddress and pull step
Change-Id: I17ec83d3ae9e82c8c3f99151115a35e299ee0d60
diff --git a/xos/synchronizer/pull_steps/pull_onos_devices.py b/xos/synchronizer/pull_steps/pull_onos_devices.py
new file mode 100644
index 0000000..427b02a
--- /dev/null
+++ b/xos/synchronizer/pull_steps/pull_onos_devices.py
@@ -0,0 +1,78 @@
+# 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.
+
+from xossynchronizer.pull_steps.pullstep import PullStep
+
+from xosconfig import Config
+from multistructlog import create_logger
+
+import requests
+from requests import ConnectionError
+from requests.auth import HTTPBasicAuth
+from requests.models import InvalidURL
+
+import os, sys
+sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
+
+from helpers import Helpers
+
+log = create_logger(Config().get('logging'))
+
+class ONOSDevicePullStep(PullStep):
+ def __init__(self, model_accessor):
+ super(ONOSDevicePullStep, self).__init__(model_accessor=model_accessor)
+
+ def get_onos_fabric_service(self):
+ # FIXME do not select by name but follow ServiceDependency
+ fabric_service = self.model_accessor.Service.objects.get(name="fabric")
+ onos_fabric_service = fabric_service.provider_services[0].leaf_model
+ return onos_fabric_service
+
+ def pull_records(self):
+ log.debug("[ONOS device pull step] pulling devices from ONOS")
+
+ onos = self.get_onos_fabric_service()
+
+ url = 'http://%s:%s/onos/v1/devices/' % (onos.rest_hostname, onos.rest_port)
+
+ r = requests.get(url, auth=HTTPBasicAuth(onos.rest_username, onos.rest_password))
+
+ if r.status_code != 200:
+ log.error(r.text)
+ raise Exception("Failed to get onos devices")
+ else:
+ try:
+ log.info("Get devices response", json=r.json())
+ except Exception:
+ log.info("Get devices exception response", text=r.text)
+
+ for device in r.json()["devices"]:
+ if device["type"] != "SWITCH":
+ continue
+
+ xos_devices = self.model_accessor.Switch.objects.filter(ofId = device["id"])
+ if not xos_devices:
+ continue
+
+ xos_device = xos_devices[0]
+ changed = False
+
+ managementAddress = device.get("annotations", {}).get("managementAddress")
+ if (xos_device.managementAddress != managementAddress):
+ log.info("Setting managementAddress on switch %s to %s" % (xos_device.id, managementAddress))
+ xos_device.managementAddress = managementAddress
+ changed = True
+
+ if changed:
+ xos_device.save_changed_fields()