Merge "Add host aggregate missing functions"
This commit is contained in:
commit
46cbbfd372
@ -187,6 +187,47 @@ class Proxy(proxy.Proxy):
|
||||
self._delete(_aggregate.Aggregate, aggregate,
|
||||
ignore_missing=ignore_missing)
|
||||
|
||||
def add_host_to_aggregate(self, aggregate, host):
|
||||
"""Adds a host to an aggregate
|
||||
|
||||
:param aggregate: Either the ID of a aggregate or a
|
||||
:class:`~openstack.compute.v2.aggregate.Aggregate`
|
||||
instance.
|
||||
:param str host: The host to add to the aggregate
|
||||
|
||||
:returns: One :class:`~openstack.compute.v2.aggregate.Aggregate`
|
||||
"""
|
||||
aggregate = self._get_resource(_aggregate.Aggregate, aggregate)
|
||||
return aggregate.add_host(self, host)
|
||||
|
||||
def remove_host_from_aggregate(self, aggregate, host):
|
||||
"""Removes a host from an aggregate
|
||||
|
||||
:param aggregate: Either the ID of a aggregate or a
|
||||
:class:`~openstack.compute.v2.aggregate.Aggregate`
|
||||
instance.
|
||||
:param str host: The host to remove from the aggregate
|
||||
|
||||
:returns: One :class:`~openstack.compute.v2.aggregate.Aggregate`
|
||||
"""
|
||||
aggregate = self._get_resource(_aggregate.Aggregate, aggregate)
|
||||
return aggregate.remove_host(self, host)
|
||||
|
||||
def set_aggregate_metadata(self, aggregate, metadata):
|
||||
"""Creates or replaces metadata for an aggregate
|
||||
|
||||
:param aggregate: Either the ID of a aggregate or a
|
||||
:class:`~openstack.compute.v2.aggregate.Aggregate`
|
||||
instance.
|
||||
:param dict metadata: Metadata key and value pairs. The maximum
|
||||
size for each metadata key and value pair
|
||||
is 255 bytes.
|
||||
|
||||
:returns: One :class:`~openstack.compute.v2.aggregate.Aggregate`
|
||||
"""
|
||||
aggregate = self._get_resource(_aggregate.Aggregate, aggregate)
|
||||
return aggregate.set_metadata(self, metadata)
|
||||
|
||||
def delete_image(self, image, ignore_missing=True):
|
||||
"""Delete an image
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
|
||||
from openstack import resource
|
||||
from openstack import utils
|
||||
|
||||
|
||||
class Aggregate(resource.Resource):
|
||||
@ -36,3 +37,28 @@ class Aggregate(resource.Resource):
|
||||
hosts = resource.Body('hosts')
|
||||
#: Metadata
|
||||
metadata = resource.Body('metadata')
|
||||
|
||||
def _action(self, session, body, microversion=None):
|
||||
"""Preform aggregate actions given the message body."""
|
||||
url = utils.urljoin(self.base_path, self.id, 'action')
|
||||
headers = {'Accept': ''}
|
||||
response = session.post(
|
||||
url, json=body, headers=headers, microversion=microversion)
|
||||
aggregate = Aggregate()
|
||||
aggregate._translate_response(response=response)
|
||||
return aggregate
|
||||
|
||||
def add_host(self, session, host):
|
||||
"""Adds a host to an aggregate."""
|
||||
body = {'add_host': {'host': host}}
|
||||
return self._action(session, body)
|
||||
|
||||
def remove_host(self, session, host):
|
||||
"""Removes a host from an aggregate."""
|
||||
body = {'remove_host': {'host': host}}
|
||||
return self._action(session, body)
|
||||
|
||||
def set_metadata(self, session, metadata):
|
||||
"""Creates or replaces metadata for an aggregate."""
|
||||
body = {'set_metadata': {'metadata': metadata}}
|
||||
return self._action(session, body)
|
||||
|
@ -10,6 +10,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import mock
|
||||
from openstack.tests.unit import base
|
||||
|
||||
from openstack.compute.v2 import aggregate
|
||||
@ -29,6 +30,16 @@ EXAMPLE = {
|
||||
|
||||
class TestAggregate(base.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestAggregate, self).setUp()
|
||||
self.resp = mock.Mock()
|
||||
self.resp.body = EXAMPLE.copy()
|
||||
self.resp.json = mock.Mock(return_value=self.resp.body)
|
||||
self.resp.status_code = 200
|
||||
self.resp.headers = {'Accept': ''}
|
||||
self.sess = mock.Mock()
|
||||
self.sess.post = mock.Mock(return_value=self.resp)
|
||||
|
||||
def test_basic(self):
|
||||
sot = aggregate.Aggregate()
|
||||
self.assertEqual('aggregate', sot.resource_key)
|
||||
@ -48,3 +59,36 @@ class TestAggregate(base.TestCase):
|
||||
self.assertEqual(EXAMPLE['hosts'], sot.hosts)
|
||||
self.assertEqual(EXAMPLE['id'], sot.id)
|
||||
self.assertDictEqual(EXAMPLE['metadata'], sot.metadata)
|
||||
|
||||
def test_add_host(self):
|
||||
sot = aggregate.Aggregate(**EXAMPLE)
|
||||
|
||||
sot.add_host(self.sess, 'host1')
|
||||
|
||||
url = 'os-aggregates/4/action'
|
||||
body = {"add_host": {"host": "host1"}}
|
||||
headers = {'Accept': ''}
|
||||
self.sess.post.assert_called_with(
|
||||
url, json=body, headers=headers, microversion=None)
|
||||
|
||||
def test_remove_host(self):
|
||||
sot = aggregate.Aggregate(**EXAMPLE)
|
||||
|
||||
sot.remove_host(self.sess, 'host1')
|
||||
|
||||
url = 'os-aggregates/4/action'
|
||||
body = {"remove_host": {"host": "host1"}}
|
||||
headers = {'Accept': ''}
|
||||
self.sess.post.assert_called_with(
|
||||
url, json=body, headers=headers, microversion=None)
|
||||
|
||||
def test_set_metadata(self):
|
||||
sot = aggregate.Aggregate(**EXAMPLE)
|
||||
|
||||
sot.set_metadata(self.sess, {"key: value"})
|
||||
|
||||
url = 'os-aggregates/4/action'
|
||||
body = {"set_metadata": {"metadata": {"key: value"}}}
|
||||
headers = {'Accept': ''}
|
||||
self.sess.post.assert_called_with(
|
||||
url, json=body, headers=headers, microversion=None)
|
||||
|
Loading…
x
Reference in New Issue
Block a user