85 lines
3.0 KiB
Python
85 lines
3.0 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.
|
|
|
|
from openstack import exceptions
|
|
from openstack import resource
|
|
from openstack import utils
|
|
|
|
|
|
class Aggregate(resource.Resource):
|
|
resource_key = 'aggregate'
|
|
resources_key = 'aggregates'
|
|
base_path = '/os-aggregates'
|
|
|
|
# capabilities
|
|
allow_create = True
|
|
allow_fetch = True
|
|
allow_delete = True
|
|
allow_list = True
|
|
allow_commit = True
|
|
|
|
# Properties
|
|
#: Availability zone of aggregate
|
|
availability_zone = resource.Body('availability_zone')
|
|
#: The date and time when the resource was created.
|
|
created_at = resource.Body('created_at')
|
|
#: The date and time when the resource was deleted.
|
|
deleted_at = resource.Body('deleted_at')
|
|
#: Deleted?
|
|
is_deleted = resource.Body('deleted', type=bool)
|
|
#: Name of aggregate
|
|
name = resource.Body('name')
|
|
#: Hosts
|
|
hosts = resource.Body('hosts', type=list)
|
|
#: Metadata
|
|
metadata = resource.Body('metadata', type=dict)
|
|
#: The date and time when the resource was updated
|
|
updated_at = resource.Body('updated_at')
|
|
#: UUID
|
|
uuid = resource.Body('uuid')
|
|
# Image pre-caching introduced in 2.81
|
|
_max_microversion = '2.81'
|
|
|
|
def _action(self, session, body, microversion=None):
|
|
"""Preform aggregate actions given the message body."""
|
|
url = utils.urljoin(self.base_path, self.id, 'action')
|
|
response = session.post(url, json=body, microversion=microversion)
|
|
exceptions.raise_from_response(response)
|
|
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)
|
|
|
|
def precache_images(self, session, images):
|
|
"""Requests image pre-caching"""
|
|
body = {'cache': images}
|
|
url = utils.urljoin(self.base_path, self.id, 'images')
|
|
response = session.post(
|
|
url, json=body, microversion=self._max_microversion
|
|
)
|
|
exceptions.raise_from_response(response)
|
|
# This API has no result
|