You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by an...@apache.org on 2018/12/13 11:26:13 UTC

[04/45] libcloud git commit: Added abstract Driver class in drs/drivers/nttcis

Added abstract Driver class in drs/drivers/nttcis


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/adcf3bdb
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/adcf3bdb
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/adcf3bdb

Branch: refs/heads/trunk
Commit: adcf3bdb938bc9093a0a0772cd71b02adfedb10c
Parents: 15ce000
Author: mitch <mi...@itaas.dimensiondata.com>
Authored: Fri Oct 26 16:08:44 2018 -0400
Committer: mitch <mi...@itaas.dimensiondata.com>
Committed: Fri Oct 26 16:08:44 2018 -0400

----------------------------------------------------------------------
 .gitignore                       |   2 +-
 libcloud/drs/__init__.py         |   0
 libcloud/drs/base.py             | 194 ++++++++++++++++++++++++++++++++++
 libcloud/drs/drivers/__init__.py |  18 ++++
 libcloud/drs/drivers/nttcis.py   |  39 +++++++
 libcloud/drs/providers.py        |  41 +++++++
 libcloud/drs/types.py            |  43 ++++++++
 7 files changed, 336 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/adcf3bdb/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 28c95d5..7b71b9b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -32,4 +32,4 @@ pip-selfcheck.json
 report.html
 .pytest_cache
 tests/
-drs/
+

http://git-wip-us.apache.org/repos/asf/libcloud/blob/adcf3bdb/libcloud/drs/__init__.py
----------------------------------------------------------------------
diff --git a/libcloud/drs/__init__.py b/libcloud/drs/__init__.py
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/libcloud/blob/adcf3bdb/libcloud/drs/base.py
----------------------------------------------------------------------
diff --git a/libcloud/drs/base.py b/libcloud/drs/base.py
new file mode 100644
index 0000000..157fe5a
--- /dev/null
+++ b/libcloud/drs/base.py
@@ -0,0 +1,194 @@
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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 libcloud.common.base import ConnectionKey, BaseDriver
+from libcloud.common.types import LibcloudError
+
+
+class DRSConsistencyGroup(object):
+    """
+    Provide a common interface for handling DRS.
+    """
+
+    def __init__(self, id, name, description, journalSizeGB,  serverPairSourceServerId, serverPairtargetServerId,
+                 driver, extra=None):
+        """
+        :param id: Load balancer ID.
+        :type id: ``str``
+
+        :param name: Load balancer name.
+        :type name: ``str``
+
+        :param state: State this loadbalancer is in.
+        :type state: :class:`libcloud.loadbalancer.types.State`
+
+        :param ip: IP address of this loadbalancer.
+        :type ip: ``str``
+
+        :param port: Port of this loadbalancer.
+        :type port: ``int``
+
+        :param driver: Driver this loadbalancer belongs to.
+        :type driver: :class:`.Driver`
+
+        :param extra: Provider specific attributes. (optional)
+        :type extra: ``dict``
+        """
+        self.id = str(id) if id else None
+        self.name = name
+        self.description = description
+        self.journalSizeGB = journalSizeGB
+
+        self.serverPairSourceServerId = serverPairSourceServerId
+        self.serverPairtargetServerId = serverPairtargetServerId
+        self.driver = driver
+        self.extra = extra or {}
+
+
+class Driver(BaseDriver):
+    """
+    A base Driver class to derive from
+
+    This class is always subclassed by a specific driver.
+    """
+
+    name = None
+    website = None
+
+    connectionCls = ConnectionKey
+
+    def __init__(self, key, secret=None, secure=True, host=None,
+                 port=None, **kwargs):
+        super(Driver, self).__init__(key=key, secret=secret, secure=secure,
+                                     host=host, port=port, **kwargs)
+
+    def create_consistency_group(self, name, journal_sz_gb,
+                                 source_server_id, target_server_id):
+        """
+        :param name: Name of the consistency group to create
+        :type name: ``str``
+        :param journal_sz_gb: Size in 10 Gb increments of the consistency
+                              group's journal
+        :type journal_sz_gb: ``str``
+        :param source_server_id: The id of the server to copy from
+        :type source_server_id: ``str``
+        :param target_server_id: The id of the server to copy to
+        :type target_server_id: ``str``
+        :return: :class: `ConsistencyGroup`
+        """
+        raise NotImplementedError(
+            'create_consistency_group not implemented for this driver')
+
+    def list_consistency_groups(self):
+        """
+        List all consistency groups
+
+        :rtype: ``list`` of :class:`ConsistencyGroup`
+        """
+        raise NotImplementedError(
+            'list_consistency_groups not implemented for this driver')
+
+    def get_consistency_group(self, consistency_group_id):
+        """
+        Return a :class:`ConsistencyGroup` object.
+
+        :param consistency_group_id: id of a consistency group you want to fetch
+        :type  consistency_group_id: ``str``
+
+        :rtype: :class:`ConsistencyGroup`
+        """
+
+        raise NotImplementedError(
+            'get_consistency_group not implemented for this driver')
+
+    def delete_consistency_group(self, consistency_group_id):
+        """
+        Delete a consistency group
+
+        :param consistency_group_id: Id of consistency group to delete
+        :type  consistency_group_id: ``str``
+
+        :return: ``True`` For successful deletion, otherwise ``False``.
+        :rtype: ``bool``
+        """
+
+        raise NotImplementedError(
+            'delete_consistency_group not implemented for this driver')
+
+    def list_consistency_group_snapshots(self, consistency_group_id):
+        """
+        Return a list of consistency group snapshots.
+
+        :param consistency_group_id: id of a consistency group to fetch
+                                     snapshots from.
+        :type  consistency_group_id: ``str``
+        :rtype: ``list``
+        """
+
+        raise NotImplementedError(
+            'list_consistency_group_snapshots not implemented for this driver')
+
+    def expand_journal(self, consistency_group_id, size_gb):
+        """
+        :param consistency_group_id: consistency group's id with journal
+                                     to expand
+        :type consistency_group_id: ``str``
+        :param size_gb: Size in increments of 10 Gb to expand journal.
+        :return: ``True`` For successful deletion, otherwise ``False``.
+        :rtype: ``bool``
+        """
+
+        raise NotImplementedError(
+            'expand_journal not implemented for this driver')
+
+    def start_failover_preview(self, consistency_group_id, snapshot_id):
+        """
+        :param consistency_group_id: consistency group's id with journal
+                                     to expand
+        :type consistency_group_id: ``str ``
+        :param snapshot_id: Snapshot Id to bring into preview mode.
+        :type snapshot_id: ``str``
+        :return: ``True`` For successful deletion, otherwise ``False``.
+        :rtype: ``bool``
+        """
+
+        raise NotImplementedError(
+            'start_failover_preview not implemented for this driver')
+
+    def stop_failover_preview(self, consistency_group_id):
+        """
+        :param consistency_group_id: Consistency group id of consistency
+                                     group to brought out of
+                                     PREVIEWING_SNAHSHOT and into DRS_MODE.
+        :type consistency_group_id: ``str``
+        :return: ``True`` For successful deletion, otherwise ``False``.
+        :rtype: ``bool``
+        """
+
+        raise NotImplementedError(
+            'stop_failover_preview not implemented for this driver')
+
+    def initiate_failover(self, consistency_group_id):
+        """
+        :param consistency_group_id: Consistency group id of consistency
+                                     group on which to initiate failover.
+        :type consistency_group_id: ``str``
+        :return: ``True`` For successful deletion, otherwise ``False``.
+        :rtype: ``bool``
+        """
+
+        raise NotImplementedError(
+            'initiate_failover not implemented for this driver')
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/adcf3bdb/libcloud/drs/drivers/__init__.py
----------------------------------------------------------------------
diff --git a/libcloud/drs/drivers/__init__.py b/libcloud/drs/drivers/__init__.py
new file mode 100644
index 0000000..f2f9f29
--- /dev/null
+++ b/libcloud/drs/drivers/__init__.py
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+__all__ = [
+    'nttcis'
+]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/adcf3bdb/libcloud/drs/drivers/nttcis.py
----------------------------------------------------------------------
diff --git a/libcloud/drs/drivers/nttcis.py b/libcloud/drs/drivers/nttcis.py
new file mode 100644
index 0000000..3467277
--- /dev/null
+++ b/libcloud/drs/drivers/nttcis.py
@@ -0,0 +1,39 @@
+from libcloud.utils.py3 import ET
+from libcloud.common.nttcis import NttCisConnection
+from libcloud.common.nttcis import API_ENDPOINTS
+from libcloud.common.nttcis import DEFAULT_REGION
+from libcloud.drs.types import Provider
+from libcloud.drs.base import Driver
+from libcloud.common.types import LibcloudError
+
+
+class NttCisDRSDriver(Driver):
+    """
+    NttCis node driver.
+    """
+
+    selected_region = None
+    connectionCls = NttCisConnection
+    name = 'NTTC-CIS DRS Consistencty Groups'
+    website = 'https://cloud.nttcis.com/'
+    type = Provider.NTTCIS
+    api_version = 1.0
+
+    network_domain_id = None
+
+    def __init__(self, key, secret=None, secure=True, host=None, port=None,
+                 api_version=None, region=DEFAULT_REGION, **kwargs):
+
+        if region not in API_ENDPOINTS and host is None:
+            raise ValueError(
+                'Invalid region: %s, no host specified' % (region))
+        if region is not None:
+            self.selected_region = API_ENDPOINTS[region]
+
+        super(NttCisDRSDriver, self).__init__(key=key,
+                                              secret=secret,
+                                              secure=secure, host=host,
+                                              port=port,
+                                              api_version=api_version,
+                                              region=region,
+                                              **kwargs)

http://git-wip-us.apache.org/repos/asf/libcloud/blob/adcf3bdb/libcloud/drs/providers.py
----------------------------------------------------------------------
diff --git a/libcloud/drs/providers.py b/libcloud/drs/providers.py
new file mode 100644
index 0000000..d214d17
--- /dev/null
+++ b/libcloud/drs/providers.py
@@ -0,0 +1,41 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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 libcloud.loadbalancer.types import Provider
+from libcloud.loadbalancer.types import OLD_CONSTANT_TO_NEW_MAPPING
+from libcloud.common.providers import get_driver as _get_provider_driver
+from libcloud.common.providers import set_driver as _set_provider_driver
+
+__all__ = [
+    "Provider",
+    "DRIVERS",
+    "get_driver",
+]
+
+DRIVERS = {
+    Provider.NTTCIS:
+    ('libcloud.drs.drivers.nttcis', 'NttCisDRSDriver'),
+}
+
+
+def get_driver(provider):
+    deprecated_constants = OLD_CONSTANT_TO_NEW_MAPPING
+    return _get_provider_driver(drivers=DRIVERS, provider=provider,
+                                deprecated_constants=deprecated_constants)
+
+
+def set_driver(provider, module, klass):
+    return _set_provider_driver(drivers=DRIVERS, provider=provider,
+                                module=module, klass=klass)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/adcf3bdb/libcloud/drs/types.py
----------------------------------------------------------------------
diff --git a/libcloud/drs/types.py b/libcloud/drs/types.py
new file mode 100644
index 0000000..b902f74
--- /dev/null
+++ b/libcloud/drs/types.py
@@ -0,0 +1,43 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+__all__ = [
+    "Provider",
+    "LibcloudDRSError",
+    "LibcloudDRSImmutableError",
+
+]
+
+from libcloud.common.types import LibcloudError
+
+
+class LibcloudDRSError(LibcloudError):
+    pass
+
+
+class LibcloudDRSImmutableError(LibcloudDRSError):
+    pass
+
+
+class Provider(object):
+    """
+    Defines for each of the supported providers
+
+    Non-Dummy drivers are sorted in alphabetical order. Please preserve this
+    ordering when adding new drivers.
+
+    :cvar ALIYUN_SLB: Aliyun SLB loadbalancer driver
+    """
+    NTTCIS = 'nttcis'