219 lines
8.4 KiB
Python
219 lines
8.4 KiB
Python
|
# Copyright(c) 2018 Nippon Telegraph and Telephone Corporation
|
||
|
#
|
||
|
# 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.instance_ha.v1 import host as _host
|
||
|
from openstack.instance_ha.v1 import notification as _notification
|
||
|
from openstack.instance_ha.v1 import segment as _segment
|
||
|
from openstack import proxy
|
||
|
from openstack import resource
|
||
|
|
||
|
|
||
|
class Proxy(proxy.Proxy):
|
||
|
"""Proxy class for ha resource handling.
|
||
|
|
||
|
Create method for each action of each API.
|
||
|
"""
|
||
|
|
||
|
_resource_registry = {
|
||
|
"host": _host.Host,
|
||
|
"notification": _notification.Notification,
|
||
|
"segment": _segment.Segment,
|
||
|
}
|
||
|
|
||
|
def notifications(self, **query):
|
||
|
"""Return a generator of notifications.
|
||
|
|
||
|
:param kwargs query: Optional query parameters to be sent to
|
||
|
limit the notifications being returned.
|
||
|
:returns: A generator of notifications
|
||
|
"""
|
||
|
return self._list(_notification.Notification, **query)
|
||
|
|
||
|
def get_notification(self, notification):
|
||
|
"""Get a single notification.
|
||
|
|
||
|
:param notification: The value can be the ID of a notification or a
|
||
|
:class:`~masakariclient.sdk.ha.v1.notification.Notification`
|
||
|
instance.
|
||
|
:returns: One
|
||
|
:class:`~masakariclient.sdk.ha.v1.notification.Notification`
|
||
|
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
||
|
when no resource can be found.
|
||
|
"""
|
||
|
return self._get(_notification.Notification, notification)
|
||
|
|
||
|
def create_notification(self, **attrs):
|
||
|
"""Create a new notification.
|
||
|
|
||
|
:param dict attrs: Keyword arguments which will be used to create
|
||
|
a :class:`masakariclient.sdk.ha.v1.notification.Notification`,
|
||
|
comprised of the propoerties on the Notification class.
|
||
|
:returns: The result of notification creation
|
||
|
:rtype: :class:`masakariclient.sdk.ha.v1.notification.Notification`
|
||
|
"""
|
||
|
return self._create(_notification.Notification, **attrs)
|
||
|
|
||
|
def segments(self, **query):
|
||
|
"""Return a generator of segments.
|
||
|
|
||
|
:param kwargs query: Optional query parameters to be sent to
|
||
|
limit the segments being returned.
|
||
|
:returns: A generator of segments
|
||
|
"""
|
||
|
return self._list(_segment.Segment, **query)
|
||
|
|
||
|
def get_segment(self, segment):
|
||
|
"""Get a single segment.
|
||
|
|
||
|
:param segment: The value can be the ID of a segment or a
|
||
|
:class:`~masakariclient.sdk.ha.v1.segment.Segment` instance.
|
||
|
:returns: One :class:`~masakariclient.sdk.ha.v1.segment.Segment`
|
||
|
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
||
|
when no resource can be found.
|
||
|
"""
|
||
|
return self._get(_segment.Segment, segment)
|
||
|
|
||
|
def create_segment(self, **attrs):
|
||
|
"""Create a new segment.
|
||
|
|
||
|
:param dict attrs: Keyword arguments which will be used to create
|
||
|
a :class:`masakariclient.sdk.ha.v1.segment.Segment`,
|
||
|
comprised of the propoerties on the Segment class.
|
||
|
:returns: The result of segment creation
|
||
|
:rtype: :class:`masakariclient.sdk.ha.v1.segment.Segment`
|
||
|
"""
|
||
|
return self._create(_segment.Segment, **attrs)
|
||
|
|
||
|
def update_segment(self, segment, **attrs):
|
||
|
"""Update a segment.
|
||
|
|
||
|
:param segment: The value can be the ID of a segment or a
|
||
|
:class:`~masakariclient.sdk.ha.v1.segment.Segment` instance.
|
||
|
:param dict attrs: Keyword arguments which will be used to update
|
||
|
a :class:`masakariclient.sdk.ha.v1.segment.Segment`,
|
||
|
comprised of the propoerties on the Segment class.
|
||
|
:returns: The updated segment.
|
||
|
:rtype: :class:`masakariclient.sdk.ha.v1.segment.Segment`
|
||
|
"""
|
||
|
return self._update(_segment.Segment, segment, **attrs)
|
||
|
|
||
|
def delete_segment(self, segment, ignore_missing=True):
|
||
|
"""Delete a segment.
|
||
|
|
||
|
:param segment:
|
||
|
The value can be either the ID of a segment or a
|
||
|
:class:`~masakariclient.sdk.ha.v1.segment.Segment` instance.
|
||
|
:param bool ignore_missing: When set to ``False``
|
||
|
:class:`~openstack.exceptions.ResourceNotFound` will be
|
||
|
raised when the segment does not exist.
|
||
|
When set to ``True``, no exception will be set when
|
||
|
attempting to delete a nonexistent segment.
|
||
|
:returns: ``None``
|
||
|
"""
|
||
|
return self._delete(
|
||
|
_segment.Segment, segment, ignore_missing=ignore_missing
|
||
|
)
|
||
|
|
||
|
def hosts(self, segment_id, **query):
|
||
|
"""Return a generator of hosts.
|
||
|
|
||
|
:param segment_id: The ID of a failover segment.
|
||
|
:param kwargs query: Optional query parameters to be sent to
|
||
|
limit the hosts being returned.
|
||
|
|
||
|
:returns: A generator of hosts
|
||
|
"""
|
||
|
return self._list(_host.Host, segment_id=segment_id, **query)
|
||
|
|
||
|
def create_host(self, segment_id, **attrs):
|
||
|
"""Create a new host.
|
||
|
|
||
|
:param segment_id: The ID of a failover segment.
|
||
|
:param dict attrs: Keyword arguments which will be used to create
|
||
|
a :class:`masakariclient.sdk.ha.v1.host.Host`,
|
||
|
comprised of the propoerties on the Host class.
|
||
|
|
||
|
:returns: The results of host creation
|
||
|
"""
|
||
|
return self._create(_host.Host, segment_id=segment_id, **attrs)
|
||
|
|
||
|
def get_host(self, host, segment_id=None):
|
||
|
"""Get a single host.
|
||
|
|
||
|
:param segment_id: The ID of a failover segment.
|
||
|
:param host: The value can be the ID of a host or a :class:
|
||
|
`~masakariclient.sdk.ha.v1.host.Host` instance.
|
||
|
|
||
|
:returns: One :class:`~masakariclient.sdk.ha.v1.host.Host`
|
||
|
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
||
|
when no resource can be found.
|
||
|
:raises: :class:`~openstack.exceptions.InvalidRequest`
|
||
|
when segment_id is None.
|
||
|
"""
|
||
|
if segment_id is None:
|
||
|
raise exceptions.InvalidRequest("'segment_id' must be specified.")
|
||
|
|
||
|
host_id = resource.Resource._get_id(host)
|
||
|
return self._get(_host.Host, host_id, segment_id=segment_id)
|
||
|
|
||
|
def update_host(self, host, segment_id, **attrs):
|
||
|
"""Update the host.
|
||
|
|
||
|
:param segment_id: The ID of a failover segment.
|
||
|
:param host: The value can be the ID of a host or a :class:
|
||
|
`~masakariclient.sdk.ha.v1.host.Host` instance.
|
||
|
:param dict attrs: The attributes to update on the host represented.
|
||
|
|
||
|
:returns: The updated host
|
||
|
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
||
|
when no resource can be found.
|
||
|
:raises: :class:`~openstack.exceptions.InvalidRequest`
|
||
|
when segment_id is None.
|
||
|
"""
|
||
|
host_id = resource.Resource._get_id(host)
|
||
|
return self._update(
|
||
|
_host.Host, host_id, segment_id=segment_id, **attrs
|
||
|
)
|
||
|
|
||
|
def delete_host(self, host, segment_id=None, ignore_missing=True):
|
||
|
"""Delete the host.
|
||
|
|
||
|
:param segment_id: The ID of a failover segment.
|
||
|
:param host: The value can be the ID of a host or a :class:
|
||
|
`~masakariclient.sdk.ha.v1.host.Host` instance.
|
||
|
:param bool ignore_missing: When set to ``False``
|
||
|
:class:`~openstack.exceptions.ResourceNotFound` will be
|
||
|
raised when the host does not exist.
|
||
|
When set to ``True``, no exception will be set when
|
||
|
attempting to delete a nonexistent host.
|
||
|
|
||
|
:returns: ``None``
|
||
|
:raises: :class:`~openstack.exceptions.ResourceNotFound`
|
||
|
when no resource can be found.
|
||
|
:raises: :class:`~openstack.exceptions.InvalidRequest`
|
||
|
when segment_id is None.
|
||
|
|
||
|
"""
|
||
|
if segment_id is None:
|
||
|
raise exceptions.InvalidRequest("'segment_id' must be specified.")
|
||
|
|
||
|
host_id = resource.Resource._get_id(host)
|
||
|
return self._delete(
|
||
|
_host.Host,
|
||
|
host_id,
|
||
|
segment_id=segment_id,
|
||
|
ignore_missing=ignore_missing,
|
||
|
)
|