132 lines
4.4 KiB
Python
132 lines
4.4 KiB
Python
|
# 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.
|
||
|
|
||
|
import time
|
||
|
|
||
|
from openstack.clustering.v1 import cluster
|
||
|
from openstack.tests.functional import base
|
||
|
from openstack.tests.functional.network.v2 import test_network
|
||
|
|
||
|
|
||
|
class TestCluster(base.BaseFunctionalTest):
|
||
|
_wait_for_timeout_key = 'OPENSTACKSDK_FUNC_TEST_TIMEOUT_CLUSTER'
|
||
|
|
||
|
def setUp(self):
|
||
|
super(TestCluster, self).setUp()
|
||
|
self.require_service('clustering')
|
||
|
|
||
|
self.cidr = '10.99.99.0/16'
|
||
|
|
||
|
self.network, self.subnet = test_network.create_network(
|
||
|
self.conn, self.getUniqueString(), self.cidr
|
||
|
)
|
||
|
self.assertIsNotNone(self.network)
|
||
|
|
||
|
profile_attrs = {
|
||
|
'name': self.getUniqueString(),
|
||
|
'spec': {
|
||
|
'type': 'os.nova.server',
|
||
|
'version': 1.0,
|
||
|
'properties': {
|
||
|
'name': self.getUniqueString(),
|
||
|
'flavor': self.flavor.name,
|
||
|
'image': self.image.name,
|
||
|
'networks': [{'network': self.network.id}],
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
self.profile = self.conn.clustering.create_profile(**profile_attrs)
|
||
|
self.assertIsNotNone(self.profile)
|
||
|
|
||
|
self.cluster_name = self.getUniqueString()
|
||
|
cluster_spec = {
|
||
|
"name": self.cluster_name,
|
||
|
"profile_id": self.profile.name,
|
||
|
"min_size": 0,
|
||
|
"max_size": -1,
|
||
|
"desired_capacity": 0,
|
||
|
}
|
||
|
|
||
|
self.cluster = self.conn.clustering.create_cluster(**cluster_spec)
|
||
|
self.conn.clustering.wait_for_status(
|
||
|
self.cluster, 'ACTIVE', wait=self._wait_for_timeout
|
||
|
)
|
||
|
assert isinstance(self.cluster, cluster.Cluster)
|
||
|
|
||
|
def tearDown(self):
|
||
|
if self.cluster:
|
||
|
self.conn.clustering.delete_cluster(self.cluster.id)
|
||
|
self.conn.clustering.wait_for_delete(
|
||
|
self.cluster, wait=self._wait_for_timeout
|
||
|
)
|
||
|
|
||
|
test_network.delete_network(self.conn, self.network, self.subnet)
|
||
|
|
||
|
self.conn.clustering.delete_profile(self.profile)
|
||
|
|
||
|
super(TestCluster, self).tearDown()
|
||
|
|
||
|
def test_find(self):
|
||
|
sot = self.conn.clustering.find_cluster(self.cluster.id)
|
||
|
self.assertEqual(self.cluster.id, sot.id)
|
||
|
|
||
|
def test_get(self):
|
||
|
sot = self.conn.clustering.get_cluster(self.cluster)
|
||
|
self.assertEqual(self.cluster.id, sot.id)
|
||
|
|
||
|
def test_list(self):
|
||
|
names = [o.name for o in self.conn.clustering.clusters()]
|
||
|
self.assertIn(self.cluster_name, names)
|
||
|
|
||
|
def test_update(self):
|
||
|
new_cluster_name = self.getUniqueString()
|
||
|
sot = self.conn.clustering.update_cluster(
|
||
|
self.cluster, name=new_cluster_name, profile_only=False
|
||
|
)
|
||
|
|
||
|
time.sleep(2)
|
||
|
sot = self.conn.clustering.get_cluster(self.cluster)
|
||
|
self.assertEqual(new_cluster_name, sot.name)
|
||
|
|
||
|
def test_delete(self):
|
||
|
cluster_delete_action = self.conn.clustering.delete_cluster(
|
||
|
self.cluster.id
|
||
|
)
|
||
|
|
||
|
self.conn.clustering.wait_for_delete(
|
||
|
self.cluster, wait=self._wait_for_timeout
|
||
|
)
|
||
|
|
||
|
action = self.conn.clustering.get_action(cluster_delete_action.id)
|
||
|
self.assertEqual(action.target_id, self.cluster.id)
|
||
|
self.assertEqual(action.action, 'CLUSTER_DELETE')
|
||
|
self.assertEqual(action.status, 'SUCCEEDED')
|
||
|
|
||
|
self.cluster = None
|
||
|
|
||
|
def test_force_delete(self):
|
||
|
cluster_delete_action = self.conn.clustering.delete_cluster(
|
||
|
self.cluster.id, False, True
|
||
|
)
|
||
|
|
||
|
self.conn.clustering.wait_for_delete(
|
||
|
self.cluster, wait=self._wait_for_timeout
|
||
|
)
|
||
|
|
||
|
action = self.conn.clustering.get_action(cluster_delete_action.id)
|
||
|
self.assertEqual(action.target_id, self.cluster.id)
|
||
|
self.assertEqual(action.action, 'CLUSTER_DELETE')
|
||
|
self.assertEqual(action.status, 'SUCCEEDED')
|
||
|
|
||
|
self.cluster = None
|