blob: ccb85c4a954a2c46654b6a6b718286a306502397 [file] [log] [blame]
Mitsuhiko Yamazaki74f07072013-04-02 11:52:31 +09001# Copyright 2013 NEC Corporation.
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
16import json
17
Haiwei Xu88173c82014-03-20 03:15:13 +090018from tempest.api_schema.compute import aggregates as schema
Haiwei Xuab924622014-03-05 04:33:51 +090019from tempest.common import rest_client
Matthew Treinish684d8992014-01-30 16:27:40 +000020from tempest import config
Mitsuhiko Yamazaki74f07072013-04-02 11:52:31 +090021from tempest import exceptions
22
Matthew Treinish684d8992014-01-30 16:27:40 +000023CONF = config.CONF
24
Mitsuhiko Yamazaki74f07072013-04-02 11:52:31 +090025
Haiwei Xuab924622014-03-05 04:33:51 +090026class AggregatesClientJSON(rest_client.RestClient):
Mitsuhiko Yamazaki74f07072013-04-02 11:52:31 +090027
Andrea Frittoli8bbdb162014-01-06 11:06:13 +000028 def __init__(self, auth_provider):
29 super(AggregatesClientJSON, self).__init__(auth_provider)
Matthew Treinish684d8992014-01-30 16:27:40 +000030 self.service = CONF.compute.catalog_type
Mitsuhiko Yamazaki74f07072013-04-02 11:52:31 +090031
32 def list_aggregates(self):
33 """Get aggregate list."""
34 resp, body = self.get("os-aggregates")
35 body = json.loads(body)
Haiwei Xu88173c82014-03-20 03:15:13 +090036 self.validate_response(schema.list_aggregates, resp, body)
Mitsuhiko Yamazaki74f07072013-04-02 11:52:31 +090037 return resp, body['aggregates']
38
39 def get_aggregate(self, aggregate_id):
40 """Get details of the given aggregate."""
41 resp, body = self.get("os-aggregates/%s" % str(aggregate_id))
42 body = json.loads(body)
43 return resp, body['aggregate']
44
Yuiko Takadaf93d2482014-01-30 16:25:08 +000045 def create_aggregate(self, **kwargs):
Mitsuhiko Yamazaki74f07072013-04-02 11:52:31 +090046 """Creates a new aggregate."""
Yuiko Takadaf93d2482014-01-30 16:25:08 +000047 post_body = json.dumps({'aggregate': kwargs})
vponomaryovf4c27f92014-02-18 10:56:42 +020048 resp, body = self.post('os-aggregates', post_body)
Mitsuhiko Yamazaki74f07072013-04-02 11:52:31 +090049
50 body = json.loads(body)
51 return resp, body['aggregate']
52
Zhu Zhu7b5f6292013-09-22 15:47:54 +080053 def update_aggregate(self, aggregate_id, name, availability_zone=None):
54 """Update a aggregate."""
55 put_body = {
56 'name': name,
57 'availability_zone': availability_zone
58 }
59 put_body = json.dumps({'aggregate': put_body})
vponomaryovf4c27f92014-02-18 10:56:42 +020060 resp, body = self.put('os-aggregates/%s' % str(aggregate_id), put_body)
Zhu Zhu7b5f6292013-09-22 15:47:54 +080061
62 body = json.loads(body)
63 return resp, body['aggregate']
64
Mitsuhiko Yamazaki74f07072013-04-02 11:52:31 +090065 def delete_aggregate(self, aggregate_id):
66 """Deletes the given aggregate."""
67 return self.delete("os-aggregates/%s" % str(aggregate_id))
68
69 def is_resource_deleted(self, id):
70 try:
71 self.get_aggregate(id)
72 except exceptions.NotFound:
73 return True
74 return False
75
76 def add_host(self, aggregate_id, host):
77 """Adds a host to the given aggregate."""
78 post_body = {
79 'host': host,
80 }
81 post_body = json.dumps({'add_host': post_body})
82 resp, body = self.post('os-aggregates/%s/action' % aggregate_id,
vponomaryovf4c27f92014-02-18 10:56:42 +020083 post_body)
Mitsuhiko Yamazaki74f07072013-04-02 11:52:31 +090084 body = json.loads(body)
85 return resp, body['aggregate']
86
87 def remove_host(self, aggregate_id, host):
88 """Removes a host from the given aggregate."""
89 post_body = {
90 'host': host,
91 }
92 post_body = json.dumps({'remove_host': post_body})
93 resp, body = self.post('os-aggregates/%s/action' % aggregate_id,
vponomaryovf4c27f92014-02-18 10:56:42 +020094 post_body)
Mitsuhiko Yamazaki74f07072013-04-02 11:52:31 +090095 body = json.loads(body)
96 return resp, body['aggregate']
ivan-zhu35e1f8e2013-10-18 15:51:16 +080097
98 def set_metadata(self, aggregate_id, meta):
99 """Replaces the aggregate's existing metadata with new metadata."""
100 post_body = {
101 'metadata': meta,
102 }
103 post_body = json.dumps({'set_metadata': post_body})
104 resp, body = self.post('os-aggregates/%s/action' % aggregate_id,
vponomaryovf4c27f92014-02-18 10:56:42 +0200105 post_body)
ivan-zhu35e1f8e2013-10-18 15:51:16 +0800106 body = json.loads(body)
107 return resp, body['aggregate']