Add share network subnet resource to shared file system
Introduce Share Network Subnet Class with basic methods including list, get, create and delete to shared file system storage service. Co-Authored-By: Reynaldo Bontje <rey.bontje80@gmail.com> Change-Id: I781eb8d19c6af8097c9de4293bb975361e524344
This commit is contained in:
parent
aab0235065
commit
7f87b6dd95
@ -101,6 +101,7 @@ Create and manipulate Share Networks with the Shared File Systems service.
|
|||||||
:members: share_networks, get_share_network, delete_share_network,
|
:members: share_networks, get_share_network, delete_share_network,
|
||||||
update_share_network, create_share_network
|
update_share_network, create_share_network
|
||||||
|
|
||||||
|
|
||||||
Shared File System Share Instances
|
Shared File System Share Instances
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
@ -113,3 +114,15 @@ Systems Service.
|
|||||||
:members: share_instances, get_share_instance,
|
:members: share_instances, get_share_instance,
|
||||||
reset_share_instance_status,
|
reset_share_instance_status,
|
||||||
delete_share_instance
|
delete_share_instance
|
||||||
|
|
||||||
|
|
||||||
|
Shared File System Share Network Subnets
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Create and manipulate Share Network Subnets with the Shared File Systems
|
||||||
|
service.
|
||||||
|
|
||||||
|
.. autoclass:: openstack.shared_file_system.v2._proxy.Proxy
|
||||||
|
:noindex:
|
||||||
|
:members: share_network_subnets, get_share_network_subnet,
|
||||||
|
create_share_network_subnet, delete_share_network_subnet
|
||||||
|
@ -9,6 +9,7 @@ Shared File System service resources
|
|||||||
v2/limit
|
v2/limit
|
||||||
v2/share
|
v2/share
|
||||||
v2/share_instance
|
v2/share_instance
|
||||||
|
v2/share_network_subnet
|
||||||
v2/share_snapshot
|
v2/share_snapshot
|
||||||
v2/share_snapshot_instance
|
v2/share_snapshot_instance
|
||||||
v2/share_network
|
v2/share_network
|
||||||
|
@ -0,0 +1,13 @@
|
|||||||
|
openstack.shared_file_system.v2.share_network_subnet
|
||||||
|
====================================================
|
||||||
|
|
||||||
|
.. automodule:: openstack.shared_file_system.v2.share_network_subnet
|
||||||
|
|
||||||
|
The ShareNetworkSubnet Class
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
The ``ShareNetworkSubnet`` class inherits from
|
||||||
|
:class:`~openstack.resource.Resource`.
|
||||||
|
|
||||||
|
.. autoclass:: openstack.shared_file_system.v2.share_network_subnet.ShareNetworkSubnet
|
||||||
|
:members:
|
@ -20,6 +20,9 @@ from openstack.shared_file_system.v2 import (
|
|||||||
from openstack.shared_file_system.v2 import (
|
from openstack.shared_file_system.v2 import (
|
||||||
share_network as _share_network
|
share_network as _share_network
|
||||||
)
|
)
|
||||||
|
from openstack.shared_file_system.v2 import (
|
||||||
|
share_network_subnet as _share_network_subnet
|
||||||
|
)
|
||||||
from openstack.shared_file_system.v2 import (
|
from openstack.shared_file_system.v2 import (
|
||||||
share_snapshot as _share_snapshot
|
share_snapshot as _share_snapshot
|
||||||
)
|
)
|
||||||
@ -46,6 +49,7 @@ class Proxy(proxy.Proxy):
|
|||||||
"limit": _limit.Limit,
|
"limit": _limit.Limit,
|
||||||
"share": _share.Share,
|
"share": _share.Share,
|
||||||
"share_network": _share_network.ShareNetwork,
|
"share_network": _share_network.ShareNetwork,
|
||||||
|
"share_network_subnet": _share_network_subnet.ShareNetworkSubnet,
|
||||||
"share_snapshot_instance":
|
"share_snapshot_instance":
|
||||||
_share_snapshot_instance.ShareSnapshotInstance,
|
_share_snapshot_instance.ShareSnapshotInstance,
|
||||||
"share_instance": _share_instance.ShareInstance,
|
"share_instance": _share_instance.ShareInstance,
|
||||||
@ -316,8 +320,8 @@ class Proxy(proxy.Proxy):
|
|||||||
* project_id: The ID of the user or service making the API request.
|
* project_id: The ID of the user or service making the API request.
|
||||||
|
|
||||||
:returns: A generator of manila share snapshot resources
|
:returns: A generator of manila share snapshot resources
|
||||||
:rtype: :class:`~openstack.shared_file_system.v2.
|
:rtype:
|
||||||
share_snapshot.ShareSnapshot`
|
:class:`~openstack.shared_file_system.v2.share_snapshot.ShareSnapshot`
|
||||||
"""
|
"""
|
||||||
base_path = '/snapshots/detail' if details else None
|
base_path = '/snapshots/detail' if details else None
|
||||||
return self._list(
|
return self._list(
|
||||||
@ -328,8 +332,8 @@ class Proxy(proxy.Proxy):
|
|||||||
|
|
||||||
:param snapshot_id: The ID of the snapshot to get
|
:param snapshot_id: The ID of the snapshot to get
|
||||||
:returns: Details of the identified share snapshot
|
:returns: Details of the identified share snapshot
|
||||||
:rtype: :class:`~openstack.shared_file_system.v2.
|
:rtype:
|
||||||
share_snapshot.ShareSnapshot`
|
:class:`~openstack.shared_file_system.v2.share_snapshot.ShareSnapshot`
|
||||||
"""
|
"""
|
||||||
return self._get(_share_snapshot.ShareSnapshot, snapshot_id)
|
return self._get(_share_snapshot.ShareSnapshot, snapshot_id)
|
||||||
|
|
||||||
@ -337,8 +341,8 @@ class Proxy(proxy.Proxy):
|
|||||||
"""Creates a share snapshot from attributes
|
"""Creates a share snapshot from attributes
|
||||||
|
|
||||||
:returns: Details of the new share snapshot
|
:returns: Details of the new share snapshot
|
||||||
:rtype: :class:`~openstack.shared_file_system.v2.
|
:rtype:
|
||||||
share_snapshot.ShareSnapshot`
|
:class:`~openstack.shared_file_system.v2.share_snapshot.ShareSnapshot`
|
||||||
"""
|
"""
|
||||||
return self._create(_share_snapshot.ShareSnapshot, **attrs)
|
return self._create(_share_snapshot.ShareSnapshot, **attrs)
|
||||||
|
|
||||||
@ -348,8 +352,8 @@ class Proxy(proxy.Proxy):
|
|||||||
:param snapshot_id: The ID of the snapshot to update
|
:param snapshot_id: The ID of the snapshot to update
|
||||||
:pram dict attrs: The attributes to update on the snapshot
|
:pram dict attrs: The attributes to update on the snapshot
|
||||||
:returns: the updated share snapshot
|
:returns: the updated share snapshot
|
||||||
:rtype: :class:`~openstack.shared_file_system.v2.
|
:rtype:
|
||||||
share_snapshot.ShareSnapshot`
|
:class:`~openstack.shared_file_system.v2.share_snapshot.ShareSnapshot`
|
||||||
"""
|
"""
|
||||||
return self._update(_share_snapshot.ShareSnapshot, snapshot_id,
|
return self._update(_share_snapshot.ShareSnapshot, snapshot_id,
|
||||||
**attrs)
|
**attrs)
|
||||||
@ -364,8 +368,77 @@ class Proxy(proxy.Proxy):
|
|||||||
self._delete(_share_snapshot.ShareSnapshot, snapshot_id,
|
self._delete(_share_snapshot.ShareSnapshot, snapshot_id,
|
||||||
ignore_missing=ignore_missing)
|
ignore_missing=ignore_missing)
|
||||||
|
|
||||||
|
# ========= Network Subnets ==========
|
||||||
|
def share_network_subnets(self, share_network_id):
|
||||||
|
"""Lists all share network subnets with details.
|
||||||
|
|
||||||
|
:param share_network_id: The id of the share network for which
|
||||||
|
Share Network Subnets should be listed.
|
||||||
|
:returns: A generator of manila share network subnets
|
||||||
|
:rtype:
|
||||||
|
:class:`~openstack.shared_file_system.v2.share_network_subnet.ShareNetworkSubnet`
|
||||||
|
"""
|
||||||
|
return self._list(
|
||||||
|
_share_network_subnet.ShareNetworkSubnet,
|
||||||
|
share_network_id=share_network_id)
|
||||||
|
|
||||||
|
def get_share_network_subnet(
|
||||||
|
self, share_network_id, share_network_subnet_id,
|
||||||
|
):
|
||||||
|
"""Lists details of a single share network subnet.
|
||||||
|
|
||||||
|
:param share_network_id: The id of the share network associated
|
||||||
|
with the Share Network Subnet.
|
||||||
|
:param share_network_subnet_id: The id of the Share Network Subnet
|
||||||
|
to retrieve.
|
||||||
|
:returns: Details of the identified share network subnet
|
||||||
|
:rtype:
|
||||||
|
:class:`~openstack.shared_file_system.v2.share_network_subnet.ShareNetworkSubnet`
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self._get(
|
||||||
|
_share_network_subnet.ShareNetworkSubnet,
|
||||||
|
share_network_subnet_id,
|
||||||
|
share_network_id=share_network_id)
|
||||||
|
|
||||||
|
def create_share_network_subnet(self, share_network_id, **attrs):
|
||||||
|
"""Creates a share network subnet from attributes
|
||||||
|
|
||||||
|
:param share_network_id: The id of the share network wthin which the
|
||||||
|
the Share Network Subnet should be created.
|
||||||
|
:param dict attrs: Attributes which will be used to create
|
||||||
|
a share network subnet.
|
||||||
|
:returns: Details of the new share network subnet.
|
||||||
|
:rtype:
|
||||||
|
:class:`~openstack.shared_file_system.v2.share_network_subnet.ShareNetworkSubnet`
|
||||||
|
"""
|
||||||
|
return self._create(
|
||||||
|
_share_network_subnet.ShareNetworkSubnet,
|
||||||
|
**attrs,
|
||||||
|
share_network_id=share_network_id)
|
||||||
|
|
||||||
|
def delete_share_network_subnet(
|
||||||
|
self, share_network_id, share_network_subnet, ignore_missing=True
|
||||||
|
):
|
||||||
|
"""Deletes a share network subnet.
|
||||||
|
|
||||||
|
:param share_network_id: The id of the Share Network associated with
|
||||||
|
the Share Network Subnet.
|
||||||
|
:param share_network_subnet: The id of the Share Network Subnet
|
||||||
|
which should be deleted.
|
||||||
|
:returns: Result of the ``delete``
|
||||||
|
:rtype: None
|
||||||
|
"""
|
||||||
|
|
||||||
|
self._delete(
|
||||||
|
_share_network_subnet.ShareNetworkSubnet,
|
||||||
|
share_network_subnet,
|
||||||
|
share_network_id=share_network_id,
|
||||||
|
ignore_missing=ignore_missing)
|
||||||
|
|
||||||
def wait_for_delete(self, res, interval=2, wait=120):
|
def wait_for_delete(self, res, interval=2, wait=120):
|
||||||
"""Wait for a resource to be deleted.
|
"""Wait for a resource to be deleted.
|
||||||
|
|
||||||
:param res: The resource to wait on to be deleted.
|
:param res: The resource to wait on to be deleted.
|
||||||
:type resource: A :class:`~openstack.resource.Resource` object.
|
:type resource: A :class:`~openstack.resource.Resource` object.
|
||||||
:param interval: Number of seconds to wait before to consecutive
|
:param interval: Number of seconds to wait before to consecutive
|
||||||
|
62
openstack/shared_file_system/v2/share_network_subnet.py
Normal file
62
openstack/shared_file_system/v2/share_network_subnet.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# 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 openstack import resource
|
||||||
|
|
||||||
|
|
||||||
|
class ShareNetworkSubnet(resource.Resource):
|
||||||
|
resource_key = "share_network_subnet"
|
||||||
|
resources_key = "share_network_subnets"
|
||||||
|
base_path = "/share-networks/%(share_network_id)s/subnets"
|
||||||
|
|
||||||
|
# capabilities
|
||||||
|
allow_create = True
|
||||||
|
allow_fetch = True
|
||||||
|
allow_commit = False
|
||||||
|
allow_delete = True
|
||||||
|
allow_list = True
|
||||||
|
|
||||||
|
#: Properties
|
||||||
|
#: The share nerwork ID, part of the URI for share network subnets.
|
||||||
|
share_network_id = resource.URI("share_network_id", type=str)
|
||||||
|
|
||||||
|
#: The name of the availability zone that the share network
|
||||||
|
#: subnet belongs to.
|
||||||
|
availability_zone = resource.Body("availability_zone", type=str)
|
||||||
|
#: The IP block from which to allocate the network, in CIDR notation.
|
||||||
|
cidr = resource.Body("cidr", type=str)
|
||||||
|
#: Date and time the share network subnet was created at.
|
||||||
|
created_at = resource.Body("created_at")
|
||||||
|
#: The gateway of a share network subnet.
|
||||||
|
gateway = resource.Body("gateway", type=str)
|
||||||
|
#: The IP version of the network.
|
||||||
|
ip_version = resource.Body("ip_version", type=int)
|
||||||
|
#: The MTU of a share network subnet.
|
||||||
|
mtu = resource.Body("mtu", type=str)
|
||||||
|
#: The network type. A valid value is VLAN, VXLAN, GRE, or flat
|
||||||
|
network_type = resource.Body("network_type", type=str)
|
||||||
|
#: The name of the neutron network.
|
||||||
|
neutron_net_id = resource.Body("neutron_net_id", type=str)
|
||||||
|
#: The ID of the neitron subnet.
|
||||||
|
neutron_subnet_id = resource.Body("neutron_subnet_id", type=str)
|
||||||
|
#: The segmentation ID.
|
||||||
|
segmentation_id = resource.Body('segmentation_id', type=int)
|
||||||
|
#: The name of the share network that the share network subnet belongs to.
|
||||||
|
share_network_name = resource.Body("share_network_name", type=str)
|
||||||
|
#: Date and time the share network subnet was last updated at.
|
||||||
|
updated_at = resource.Body("updated_at", type=str)
|
||||||
|
|
||||||
|
def create(self, session, **kwargs):
|
||||||
|
return super().\
|
||||||
|
create(session,
|
||||||
|
resource_request_key='share-network-subnet',
|
||||||
|
**kwargs)
|
@ -0,0 +1,75 @@
|
|||||||
|
# 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 openstack.shared_file_system.v2 import (
|
||||||
|
share_network_subnet as _share_network_subnet
|
||||||
|
)
|
||||||
|
from openstack.tests.functional.shared_file_system import base
|
||||||
|
|
||||||
|
|
||||||
|
class ShareNetworkSubnetTest(base.BaseSharedFileSystemTest):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
zones = self.user_cloud.shared_file_system.\
|
||||||
|
availability_zones()
|
||||||
|
first_zone = next(zones)
|
||||||
|
|
||||||
|
self.SHARE_NETWORK_NAME = self.getUniqueString()
|
||||||
|
snt = self.user_cloud.shared_file_system.create_share_network(
|
||||||
|
name=self.SHARE_NETWORK_NAME)
|
||||||
|
self.assertIsNotNone(snt)
|
||||||
|
self.assertIsNotNone(snt.id)
|
||||||
|
self.SHARE_NETWORK_ID = snt.id
|
||||||
|
snsb = self.user_cloud.shared_file_system.\
|
||||||
|
create_share_network_subnet(self.SHARE_NETWORK_ID,
|
||||||
|
availability_zone=first_zone.name)
|
||||||
|
self.assertIsNotNone(snsb)
|
||||||
|
self.assertIsNotNone(snsb.id)
|
||||||
|
self.SHARE_NETWORK_SUBNET_ID = snsb.id
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
subnet = self.user_cloud.shared_file_system.\
|
||||||
|
get_share_network_subnet(self.SHARE_NETWORK_ID,
|
||||||
|
self.SHARE_NETWORK_SUBNET_ID)
|
||||||
|
fdel = self.user_cloud.shared_file_system.\
|
||||||
|
delete_share_network_subnet(self.SHARE_NETWORK_ID,
|
||||||
|
self.SHARE_NETWORK_SUBNET_ID,
|
||||||
|
ignore_missing=True)
|
||||||
|
self.assertIsNone(fdel)
|
||||||
|
self.user_cloud.shared_file_system.\
|
||||||
|
wait_for_delete(subnet)
|
||||||
|
sot = self.user_cloud.shared_file_system.\
|
||||||
|
delete_share_network(self.SHARE_NETWORK_ID,
|
||||||
|
ignore_missing=True)
|
||||||
|
self.assertIsNone(sot)
|
||||||
|
super().tearDown()
|
||||||
|
|
||||||
|
def test_get(self):
|
||||||
|
sub = self.user_cloud.shared_file_system.\
|
||||||
|
get_share_network_subnet(self.SHARE_NETWORK_ID,
|
||||||
|
self.SHARE_NETWORK_SUBNET_ID)
|
||||||
|
assert isinstance(sub, _share_network_subnet.ShareNetworkSubnet)
|
||||||
|
|
||||||
|
def test_list(self):
|
||||||
|
subs = self.user_cloud.shared_file_system.share_network_subnets(
|
||||||
|
self.SHARE_NETWORK_ID)
|
||||||
|
self.assertGreater(len(list(subs)), 0)
|
||||||
|
for sub in subs:
|
||||||
|
for attribute in ('id', 'name', 'created_at', 'updated_at',
|
||||||
|
'share_network_id', 'availability_zone',
|
||||||
|
'cidr', 'gateway', 'ip_version', 'mtu',
|
||||||
|
'network_type', 'neutron_net_id',
|
||||||
|
'neutron_subnet_id', 'segmentation_id',
|
||||||
|
'share_network_name'):
|
||||||
|
self.assertTrue(hasattr(sub, attribute))
|
@ -17,6 +17,7 @@ from openstack.shared_file_system.v2 import limit
|
|||||||
from openstack.shared_file_system.v2 import share
|
from openstack.shared_file_system.v2 import share
|
||||||
from openstack.shared_file_system.v2 import share_instance
|
from openstack.shared_file_system.v2 import share_instance
|
||||||
from openstack.shared_file_system.v2 import share_network
|
from openstack.shared_file_system.v2 import share_network
|
||||||
|
from openstack.shared_file_system.v2 import share_network_subnet
|
||||||
from openstack.shared_file_system.v2 import share_snapshot
|
from openstack.shared_file_system.v2 import share_snapshot
|
||||||
from openstack.shared_file_system.v2 import share_snapshot_instance
|
from openstack.shared_file_system.v2 import share_snapshot_instance
|
||||||
from openstack.shared_file_system.v2 import storage_pool
|
from openstack.shared_file_system.v2 import storage_pool
|
||||||
@ -299,3 +300,46 @@ class TestShareNetworkResource(test_proxy_base.TestProxyBase):
|
|||||||
def test_share_network_update(self):
|
def test_share_network_update(self):
|
||||||
self.verify_update(
|
self.verify_update(
|
||||||
self.proxy.update_share_network, share_network.ShareNetwork)
|
self.proxy.update_share_network, share_network.ShareNetwork)
|
||||||
|
|
||||||
|
|
||||||
|
class TestShareNetworkSubnetResource(test_proxy_base.TestProxyBase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestShareNetworkSubnetResource, self).setUp()
|
||||||
|
self.proxy = _proxy.Proxy(self.session)
|
||||||
|
|
||||||
|
def test_share_network_subnets(self):
|
||||||
|
self.verify_list(
|
||||||
|
self.proxy.share_network_subnets,
|
||||||
|
share_network_subnet.ShareNetworkSubnet,
|
||||||
|
method_args=["test_share"],
|
||||||
|
expected_args=[],
|
||||||
|
expected_kwargs={"share_network_id": "test_share"})
|
||||||
|
|
||||||
|
def test_share_network_subnet_get(self):
|
||||||
|
self.verify_get(
|
||||||
|
self.proxy.get_share_network_subnet,
|
||||||
|
share_network_subnet.ShareNetworkSubnet,
|
||||||
|
method_args=["fake_network_id", "fake_sub_network_id"],
|
||||||
|
expected_args=['fake_sub_network_id'],
|
||||||
|
expected_kwargs={'share_network_id': 'fake_network_id'})
|
||||||
|
|
||||||
|
def test_share_network_subnet_create(self):
|
||||||
|
self.verify_create(
|
||||||
|
self.proxy.create_share_network_subnet,
|
||||||
|
share_network_subnet.ShareNetworkSubnet,
|
||||||
|
method_args=["fake_network_id"],
|
||||||
|
method_kwargs={"p1": "v1"},
|
||||||
|
expected_args=[],
|
||||||
|
expected_kwargs={
|
||||||
|
"share_network_id": "fake_network_id",
|
||||||
|
"p1": "v1"})
|
||||||
|
|
||||||
|
def test_share_network_subnet_delete(self):
|
||||||
|
self.verify_delete(
|
||||||
|
self.proxy.delete_share_network_subnet,
|
||||||
|
share_network_subnet.ShareNetworkSubnet,
|
||||||
|
False,
|
||||||
|
method_args=["fake_network_id", "fake_sub_network_id"],
|
||||||
|
expected_args=["fake_sub_network_id"],
|
||||||
|
expected_kwargs={'share_network_id': 'fake_network_id'})
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
# 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 openstack.shared_file_system.v2 import share_network_subnet as SNS
|
||||||
|
from openstack.tests.unit import base
|
||||||
|
|
||||||
|
IDENTIFIER = '9cd5a59f-4d22-496f-8b1a-ea4860c24d39'
|
||||||
|
EXAMPLE = {
|
||||||
|
"id": IDENTIFIER,
|
||||||
|
"availability_zone": None,
|
||||||
|
"share_network_id": "652ef887-b805-4328-b65a-b88c64cb69ec",
|
||||||
|
"share_network_name": None,
|
||||||
|
"created_at": "2021-02-24T02:45:59.000000",
|
||||||
|
"segmentation_id": None,
|
||||||
|
"neutron_subnet_id": None,
|
||||||
|
"updated_at": None,
|
||||||
|
"neutron_net_id": None,
|
||||||
|
"ip_version": None,
|
||||||
|
"cidr": None,
|
||||||
|
"network_type": None,
|
||||||
|
"mtu": None,
|
||||||
|
"gateway": None
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class TestShareNetworkSubnet(base.TestCase):
|
||||||
|
|
||||||
|
def test_basic(self):
|
||||||
|
SNS_resource = SNS.ShareNetworkSubnet()
|
||||||
|
self.assertEqual('share_network_subnets', SNS_resource.resources_key)
|
||||||
|
self.assertEqual('/share-networks/%(share_network_id)s/subnets',
|
||||||
|
SNS_resource.base_path)
|
||||||
|
self.assertTrue(SNS_resource.allow_list)
|
||||||
|
|
||||||
|
def test_make_share_network_subnet(self):
|
||||||
|
SNS_resource = SNS.ShareNetworkSubnet(**EXAMPLE)
|
||||||
|
self.assertEqual(EXAMPLE['id'], SNS_resource.id)
|
||||||
|
self.assertEqual(EXAMPLE['availability_zone'],
|
||||||
|
SNS_resource.availability_zone)
|
||||||
|
self.assertEqual(EXAMPLE['share_network_id'],
|
||||||
|
SNS_resource.share_network_id)
|
||||||
|
self.assertEqual(EXAMPLE['share_network_name'],
|
||||||
|
SNS_resource.share_network_name)
|
||||||
|
self.assertEqual(EXAMPLE['created_at'], SNS_resource.created_at)
|
||||||
|
self.assertEqual(EXAMPLE['segmentation_id'],
|
||||||
|
SNS_resource.segmentation_id)
|
||||||
|
self.assertEqual(EXAMPLE['neutron_subnet_id'],
|
||||||
|
SNS_resource.neutron_subnet_id)
|
||||||
|
self.assertEqual(EXAMPLE['updated_at'], SNS_resource.updated_at)
|
||||||
|
self.assertEqual(EXAMPLE['neutron_net_id'],
|
||||||
|
SNS_resource.neutron_net_id)
|
||||||
|
self.assertEqual(EXAMPLE['ip_version'], SNS_resource.ip_version)
|
||||||
|
self.assertEqual(EXAMPLE['cidr'], SNS_resource.cidr)
|
||||||
|
self.assertEqual(EXAMPLE['network_type'], SNS_resource.network_type)
|
||||||
|
self.assertEqual(EXAMPLE['mtu'], SNS_resource.mtu)
|
||||||
|
self.assertEqual(EXAMPLE['gateway'], SNS_resource.gateway)
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Added support to create, list, get, and delete share network
|
||||||
|
subnets on the shared file system service.
|
Loading…
x
Reference in New Issue
Block a user