CORD-2964 Implement new openstack models and steps
Change-Id: I32ac438e799f563b721e19ad7ebc8a033796c88e
diff --git a/xos/synchronizer/steps/newopenstacksyncstep.py b/xos/synchronizer/steps/newopenstacksyncstep.py
new file mode 100644
index 0000000..1e16b49
--- /dev/null
+++ b/xos/synchronizer/steps/newopenstacksyncstep.py
@@ -0,0 +1,69 @@
+
+# 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 distutils.version import LooseVersion
+from synchronizers.new_base.syncstep import SyncStep
+
+class NewOpenStackSyncStep(SyncStep):
+ """ XOS Sync step for copying data to OpenStack
+ """
+
+ def __init__(self, *args, **kwargs):
+ # super() does not work here...
+ SyncStep.__init__(self, *args, **kwargs)
+
+ def connect_openstack_admin(self, service, required_version=None):
+ import openstack
+
+ if required_version:
+ if LooseVersion(openstack.version.__version__) < LooseVersion(required_version):
+ raise Exception("Insufficient OpenStack library version",
+ installed_version=openstack.version__version__,
+ required_version=required_version)
+
+ conn = openstack.connect(auth_url=service.auth_url,
+ project_name="admin",
+ username=service.admin_user,
+ password=service.admin_password,
+ user_domain_name="Default",
+ project_domain_name="Default")
+ return conn
+
+ def connect_openstack_slice(self, slice, required_version=None):
+ import openstack
+
+ trust_domain = slice.trust_domain
+ service = trust_domain.owner.leaf_model
+
+ if required_version:
+ if LooseVersion(openstack.version.__version__) < LooseVersion(required_version):
+ raise Exception("Insufficient OpenStack library version",
+ installed_version=openstack.version__version__,
+ required_version=required_version)
+
+ # This is not working yet...
+
+ conn = openstack.connect(auth_url=service.auth_url,
+ project_name=slice.name,
+ username=service.admin_user,
+ password=service.admin_password,
+ user_domain_name="Default",
+ project_domain_name=trust_domain.name)
+ return conn
+
+ # TODO(smbaker): This should be explained.
+ def __call__(self, **args):
+ return self.call(**args)