Source code for kollacli.api.service
# Copyright(c) 2016, Oracle and/or its affiliates. All Rights Reserved.
#
# 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 copy import copy
import kollacli.i18n as u
from kollacli.common.inventory import Inventory
from kollacli.common.utils import check_arg
from kollacli.common.utils import safe_decode
[docs]class ServiceApi(object):
[docs] def service_get_all(self):
# type: () -> List[Service]
"""Get all services in the inventory
:return: services
:rtype: List of Service objects
"""
return self._get_services(None, get_all=True)
[docs] def service_get(self, servicenames):
# type: (List[str]) -> List[Service]
"""Get selected services in the inventory
:param servicenames: names of services to be read
:type servicenames: list of strings
:return: services
:rtype: list of Service objects
"""
check_arg(servicenames, u._('Service names'), list)
servicenames = safe_decode(servicenames)
return self._get_services(servicenames)
def _get_services(self, servicenames, get_all=False):
# type: (List[str], bool) -> List[Service]
services = []
inventory = Inventory.load()
if get_all:
inv_services = inventory.get_services(client_filter=True)
for inv_service in inv_services:
service = Service(inv_service.name,
inv_service.get_parentnames(),
inv_service.get_childnames(),
inv_service.get_groupnames())
services.append(service)
else:
inventory.validate_servicenames(servicenames, client_filter=True)
for servicename in servicenames:
inv_service = inventory.get_service(servicename,
client_filter=True)
if inv_service:
service = Service(inv_service.name,
inv_service.get_parentnames(),
inv_service.get_childnames(),
inv_service.get_groupnames())
services.append(service)
return services
[docs]class Service(object):
"""Service
A service is one of the services available in openstack-kolla-ansible.
For example, this would be how the murano services would be
represented:
- murano
- parentnames: []
- childnames: [murano-api, murano-engine]
- murano-api
- parentnames: [murano]
- childnames: []
- murano-engine
- parentnames: [murano]
- childnames: []
"""
def __init__(self, servicename, parentnames=[],
childnames=[], groupnames=[]):
# type: (str, str, List[str], List[str]) -> None
self.name = servicename
self._parentnames = parentnames
self._childnames = childnames
self._groupnames = groupnames
[docs] def get_name(self):
# type: () -> str
"""Get name
:return: service name
:rtype: string
"""
return self.name
[docs] def get_parents(self):
# type: () -> str
"""Get name of parent services
:return: parent service names
:rtype: string
"""
return copy(self._parentnames)
[docs] def get_children(self):
# type: () -> List[str]
"""Get names of the child services
:return: child names
:rtype: list of strings
"""
return copy(self._childnames)
[docs] def get_groups(self):
# type: () -> List[str]
"""Get names of the groups
:return: group names
:rtype: list of strings
Note: If the groups associated with this service change after this
service is fetched, the service must be re-fetched to reflect those
changes.
"""
return copy(self._groupnames)