octavia/octavia/compute/compute_base.py

134 lines
5.0 KiB
Python

# Copyright 2011-2014 OpenStack Foundation
#
# 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 abc
class ComputeBase(object, metaclass=abc.ABCMeta):
@abc.abstractmethod
def build(self, name="amphora_name", amphora_flavor=None,
image_tag=None, image_owner=None, key_name=None, sec_groups=None,
network_ids=None, config_drive_files=None, user_data=None,
server_group_id=None, availability_zone=None):
"""Build a new amphora.
:param name: Optional name for Amphora
:param amphora_flavor: Optionally specify a flavor
:param image_tag: tag of the base image for the amphora instance
:param key_name: Optionally specify a keypair
:param sec_groups: Optionally specify list of security groups
:param network_ids: A list of network IDs to attach to the amphora
:param config_drive_files: An optional dict of files to overwrite on
the server upon boot. Keys are file names
(i.e. /etc/passwd) and values are the
file contents (either as a string or as
a file-like object). A maximum of five
entries is allowed, and each file must be
10k or less.
:param user_data: Optional user data to pass to be exposed by the
metadata server this can be a file type object as
well or a string
:param server_group_id: Optional server group id(uuid) which is used
for anti_affinity feature
:param availability_zone: Name of the compute availability zone.
:raises ComputeBuildException: if compute failed to build amphora
:returns: UUID of amphora
"""
@abc.abstractmethod
def delete(self, compute_id):
"""Delete the specified amphora
:param compute_id: The id of the amphora to delete
"""
@abc.abstractmethod
def status(self, compute_id):
"""Check whether the specified amphora is up
:param compute_id: the ID of the desired amphora
:returns: The compute "status" response ("ONLINE" or "OFFLINE")
"""
@abc.abstractmethod
def get_amphora(self, compute_id, management_network_id=None):
"""Retrieve an amphora object
:param compute_id: the compute id of the desired amphora
:param management_network_id: ID of the management network
:returns: the amphora object
:returns: fault message or None
"""
@abc.abstractmethod
def create_server_group(self, name, policy):
"""Create a server group object
:param name: the name of the server group
:param policy: the policy of the server group
:returns: the server group object
"""
@abc.abstractmethod
def delete_server_group(self, server_group_id):
"""Delete a server group object
:param server_group_id: the uuid of a server group
"""
@abc.abstractmethod
def attach_network_or_port(self, compute_id, network_id=None,
ip_address=None, port_id=None):
"""Connects an existing amphora to an existing network.
:param compute_id: id of an amphora in the compute service
:param network_id: id of a network
:param ip_address: ip address to attempt to be assigned to interface
:param port_id: id of the neutron port
:return: nova interface
:raises: Exception
"""
@abc.abstractmethod
def detach_port(self, compute_id, port_id):
"""Disconnects an existing amphora from an existing port.
:param compute_id: id of an amphora in the compute service
:param port_id: id of the port
:return: None
:raises: Exception
"""
@abc.abstractmethod
def validate_flavor(self, flavor_id):
"""Validates that a compute flavor exists.
:param flavor_id: ID of the compute flavor.
:return: None
:raises: NotFound
:raises: NotImplementedError
"""
@abc.abstractmethod
def validate_availability_zone(self, availability_zone):
"""Validates that a compute availability zone exists.
:param availability_zone: Name of the compute availability zone.
:return: None
:raises: NotFound
:raises: NotImplementedError
"""