Skip to content

Commit 83ee3bd

Browse files
authored
Merge pull request #83 from svt-hchaudhari/feature/unregister_ext_store
Add support for the unregister of the external store
2 parents 007c48a + 4dc4f48 commit 83ee3bd

5 files changed

Lines changed: 59 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2929
- endpoint support for /datastore/{datastoreId}/unshare <POST>
3030
- endpoint support for /external_stores <GET>
3131
- endpoint support for /external_stores <POST>
32+
- endpoint support for /external_stores/unregister <POST>
3233
- endpoint support for /external_stores/update_credentials <POST>
3334
- endpoint support for /hosts/{hostId}/capacity <GET>
3435
- endpoint support for /hosts/{hostId}/cancel_virtual_controller_shutdown <POST>

endpoints-support.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Refer SimpliVity REST API doc for the resource endpoints documentation [HPE Simp
3333
| **External Stores**
3434
|<sub>/external_stores</sub> |GET |
3535
|<sub>/external_stores</sub> |POST |
36+
|<sub>/external_stores/unregister</sub> |POST |
3637
|<sub>/external_stores/update_credentials</sub> |POST |
3738
| **Hosts**
3839
|<sub>/hosts</sub> |GET |

examples/external_stores.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,7 @@
8383
print("\n\nupdate external store access credential")
8484
# We can provide the updated credential to access the external store
8585
external_stores.update_credentials(external_store_name, username, password)
86+
87+
print("\n\nunregister external store")
88+
cluster_obj = clusters.get_by_name(cluster_name)
89+
external_store_obj.unregister_external_store(cluster_obj)

simplivity/resources/external_stores.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,25 @@ def __init__(self, connection, resource_client, data):
141141
self.data = data
142142
self._connection = connection
143143
self._client = resource_client
144+
145+
def unregister_external_store(self, cluster, timeout=-1):
146+
""" Removes the external store as a backup destination for the cluster.
147+
Backups remain on the external store,but they can no longer be managed by HPE SimpliVity.
148+
Args:
149+
cluster: Destination OmnistackCluster object/name.
150+
timeout: Time out for the request in seconds.
151+
152+
Returns:
153+
None
154+
"""
155+
156+
resource_uri = "{}/unregister".format(URL)
157+
data = {'name': self.data["name"]}
158+
if not isinstance(cluster, omnistack_clusters.OmnistackCluster):
159+
# if passed name of the cluster
160+
clusters_obj = omnistack_clusters.OmnistackClusters(self._connection)
161+
cluster = clusters_obj.get_by_name(cluster)
162+
163+
data['omnistack_cluster_id'] = cluster.data['id']
164+
custom_headers = {'Content-type': 'application/vnd.simplivity.v1.15+json'}
165+
self._client.do_post(resource_uri, data, timeout, custom_headers)

tests/unit/resources/test_external_stores.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,37 @@ def test_update_credential(self, mock_post):
121121
mock_post.assert_called_once_with('/external_stores/update_credentials', data,
122122
custom_headers={'Content-type': 'application/vnd.simplivity.v1.15+json'})
123123

124+
@mock.patch.object(Connection, "post")
125+
@mock.patch.object(Connection, "get")
126+
def test_unregister_external_store_cluster_name(self, mock_get, mock_post):
127+
cluster_data = {'name': 'cluster1', 'id': '12345'}
128+
mock_post.return_value = None, [{'object_id': '12345'}]
129+
mock_get.return_value = {clusters.DATA_FIELD: [cluster_data]}
130+
resource_data = {'name': 'storeonce_cat1'}
131+
132+
external_store_obj = self.external_stores.get_by_data(resource_data)
133+
external_store_obj.unregister_external_store('cluster1')
134+
135+
data = {'name': 'storeonce_cat1', 'omnistack_cluster_id': '12345'}
136+
mock_post.assert_called_once_with('/external_stores/unregister', data,
137+
custom_headers={'Content-type': 'application/vnd.simplivity.v1.15+json'})
138+
139+
@mock.patch.object(Connection, "post")
140+
@mock.patch.object(Connection, "get")
141+
def test_unregister_external_store_cluster_obj(self, mock_get, mock_post):
142+
cluster_data = {'name': 'cluster1', 'id': '12345'}
143+
cluster_obj = self.clusters.get_by_data(cluster_data)
144+
mock_post.return_value = None, [{'object_id': '12345'}]
145+
mock_get.return_value = {clusters.DATA_FIELD: [cluster_data]}
146+
resource_data = {'name': 'storeonce_cat1'}
147+
148+
external_store_obj = self.external_stores.get_by_data(resource_data)
149+
external_store_obj.unregister_external_store(cluster_obj)
150+
151+
data = {'name': 'storeonce_cat1', 'omnistack_cluster_id': '12345'}
152+
mock_post.assert_called_once_with('/external_stores/unregister', data,
153+
custom_headers={'Content-type': 'application/vnd.simplivity.v1.15+json'})
154+
124155

125156
if __name__ == '__main__':
126157
unittest.main()

0 commit comments

Comments
 (0)