191 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			191 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# vim: tabstop=4 shiftwidth=4 softtabstop=4
 | 
						|
 | 
						|
#    Copyright (C) 2012 Yahoo! Inc. 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.
 | 
						|
 | 
						|
import tempfile
 | 
						|
 | 
						|
from devstack import cfg
 | 
						|
from devstack import exceptions as excp
 | 
						|
from devstack import settings
 | 
						|
from devstack import shell as sh
 | 
						|
 | 
						|
from devstack.components import db
 | 
						|
from devstack.components import glance
 | 
						|
from devstack.components import horizon
 | 
						|
from devstack.components import keystone
 | 
						|
from devstack.components import keystone_client
 | 
						|
from devstack.components import melange
 | 
						|
from devstack.components import melange_client
 | 
						|
from devstack.components import nova
 | 
						|
from devstack.components import nova_client
 | 
						|
from devstack.components import novnc
 | 
						|
from devstack.components import quantum
 | 
						|
from devstack.components import quantum_client
 | 
						|
from devstack.components import rabbit
 | 
						|
from devstack.components import swift
 | 
						|
 | 
						|
from devstack.packaging import apt
 | 
						|
from devstack.packaging import yum
 | 
						|
 | 
						|
# This determines what classes to use to install/uninstall/...
 | 
						|
# ACTION_CLASSES = {
 | 
						|
#     settings.INSTALL: {
 | 
						|
#         settings.DB: db.DBInstaller,
 | 
						|
#         settings.GLANCE: glance.GlanceInstaller,
 | 
						|
#         settings.HORIZON: horizon.HorizonInstaller,
 | 
						|
#         settings.KEYSTONE: keystone.KeystoneInstaller,
 | 
						|
#         settings.KEYSTONE_CLIENT: keystone_client.KeyStoneClientInstaller,
 | 
						|
#         settings.MELANGE: melange.MelangeInstaller,
 | 
						|
#         settings.MELANGE_CLIENT: melange_client.MelangeClientInstaller,
 | 
						|
#         settings.NOVA: nova.NovaInstaller,
 | 
						|
#         settings.NOVA_CLIENT: nova_client.NovaClientInstaller,
 | 
						|
#         settings.NOVNC: novnc.NoVNCInstaller,
 | 
						|
#         settings.QUANTUM: quantum.QuantumInstaller,
 | 
						|
#         settings.QUANTUM_CLIENT: quantum_client.QuantumClientInstaller,
 | 
						|
#         settings.RABBIT: rabbit.RabbitInstaller,
 | 
						|
#         settings.SWIFT: swift.SwiftInstaller,
 | 
						|
#     },
 | 
						|
#     settings.UNINSTALL: {
 | 
						|
#         settings.DB: db.DBUninstaller,
 | 
						|
#         settings.GLANCE: glance.GlanceUninstaller,
 | 
						|
#         settings.HORIZON: horizon.HorizonUninstaller,
 | 
						|
#         settings.KEYSTONE: keystone.KeystoneUninstaller,
 | 
						|
#         settings.KEYSTONE_CLIENT: keystone_client.KeyStoneClientUninstaller,
 | 
						|
#         settings.MELANGE: melange.MelangeUninstaller,
 | 
						|
#         settings.MELANGE_CLIENT: melange_client.MelangeClientUninstaller,
 | 
						|
#         settings.NOVA: nova.NovaUninstaller,
 | 
						|
#         settings.NOVA_CLIENT: nova_client.NovaClientUninstaller,
 | 
						|
#         settings.NOVNC: novnc.NoVNCUninstaller,
 | 
						|
#         settings.QUANTUM: quantum.QuantumUninstaller,
 | 
						|
#         settings.QUANTUM_CLIENT: quantum_client.QuantumClientUninstaller,
 | 
						|
#         settings.RABBIT: rabbit.RabbitUninstaller,
 | 
						|
#         settings.SWIFT: swift.SwiftUninstaller,
 | 
						|
#     },
 | 
						|
#     settings.START: {
 | 
						|
#         settings.DB: db.DBRuntime,
 | 
						|
#         settings.GLANCE: glance.GlanceRuntime,
 | 
						|
#         settings.HORIZON: horizon.HorizonRuntime,
 | 
						|
#         settings.KEYSTONE: keystone.KeystoneRuntime,
 | 
						|
#         settings.KEYSTONE_CLIENT: keystone_client.KeyStoneClientRuntime,
 | 
						|
#         settings.MELANGE: melange.MelangeRuntime,
 | 
						|
#         settings.MELANGE_CLIENT: melange_client.MelangeClientRuntime,
 | 
						|
#         settings.NOVA: nova.NovaRuntime,
 | 
						|
#         settings.NOVA_CLIENT: nova_client.NovaClientRuntime,
 | 
						|
#         settings.NOVNC: novnc.NoVNCRuntime,
 | 
						|
#         settings.QUANTUM: quantum.QuantumRuntime,
 | 
						|
#         settings.QUANTUM_CLIENT: quantum_client.QuantumClientRuntime,
 | 
						|
#         settings.RABBIT: rabbit.RabbitRuntime,
 | 
						|
#         settings.SWIFT: swift.SwiftRuntime,
 | 
						|
#     },
 | 
						|
# }
 | 
						|
 | 
						|
# # Just a copy
 | 
						|
# ACTION_CLASSES[settings.STOP] = ACTION_CLASSES[settings.START]
 | 
						|
 | 
						|
# Used only for figuring out deps
 | 
						|
_FAKE_ROOT_DIR = tempfile.gettempdir()
 | 
						|
 | 
						|
# This map controls which distro has
 | 
						|
# which package management class
 | 
						|
_PKGR_MAP = {
 | 
						|
    settings.UBUNTU11: apt.AptPackager,
 | 
						|
    settings.RHEL6: yum.YumPackager,
 | 
						|
    settings.FEDORA16: yum.YumPackager,
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
def get_default_components():
 | 
						|
    def_components = dict()
 | 
						|
    def_components[settings.GLANCE] = [
 | 
						|
                                         glance.GAPI,
 | 
						|
                                         glance.GREG,
 | 
						|
                                      ]
 | 
						|
    def_components[settings.KEYSTONE] = []
 | 
						|
    def_components[settings.NOVA] = [
 | 
						|
                                     nova.NAPI,
 | 
						|
                                     nova.NCAUTH,
 | 
						|
                                     nova.NCERT,
 | 
						|
                                     nova.NCPU,
 | 
						|
                                     nova.NNET,
 | 
						|
                                     nova.NOBJ,
 | 
						|
                                     nova.NSCHED,
 | 
						|
                                     nova.NXVNC,
 | 
						|
                                     nova.NVOL,
 | 
						|
                                    ]
 | 
						|
    def_components[settings.NOVNC] = []
 | 
						|
    def_components[settings.HORIZON] = []
 | 
						|
    def_components[settings.DB] = []
 | 
						|
    def_components[settings.RABBIT] = []
 | 
						|
    return def_components
 | 
						|
 | 
						|
 | 
						|
def format_secs_taken(secs):
 | 
						|
    output = "%.03f seconds" % (secs)
 | 
						|
    output += " or %.02f minutes" % (secs / 60.0)
 | 
						|
    return output
 | 
						|
 | 
						|
 | 
						|
# def get_action_cls(action_name, component_name, distro=None):
 | 
						|
#     action_cls_map = ACTION_CLASSES.get(action_name)
 | 
						|
#     if not action_cls_map:
 | 
						|
#         raise excp.StackException("Action %s has no component to class mapping" % (action_name))
 | 
						|
#     cls = action_cls_map.get(component_name)
 | 
						|
#     if not cls:
 | 
						|
#         raise excp.StackException("Action %s has no class entry for component %s" % (action_name, component_name))
 | 
						|
#     return cls
 | 
						|
 | 
						|
 | 
						|
def get_packager(distro, keep_packages):
 | 
						|
    cls = _PKGR_MAP.get(distro)
 | 
						|
    if not cls:
 | 
						|
        msg = "No package manager found for distro %s!" % (distro)
 | 
						|
        raise excp.StackException(msg)
 | 
						|
    return cls(distro, keep_packages)
 | 
						|
 | 
						|
 | 
						|
def get_config(cfg_fn=None):
 | 
						|
    if not cfg_fn:
 | 
						|
        cfg_fn = sh.canon_path(settings.STACK_CONFIG_LOCATION)
 | 
						|
    config_instance = cfg.StackConfigParser()
 | 
						|
    config_instance.read(cfg_fn)
 | 
						|
    return config_instance
 | 
						|
 | 
						|
 | 
						|
# def get_components_deps(runner,
 | 
						|
#                         action_name,
 | 
						|
#                         base_components,
 | 
						|
#                         root_dir=None,
 | 
						|
#                         distro=None,
 | 
						|
#                         ):
 | 
						|
#     all_components = dict()
 | 
						|
#     active_names = list(base_components)
 | 
						|
#     root_dir = root_dir or _FAKE_ROOT_DIR
 | 
						|
#     while len(active_names):
 | 
						|
#         component = active_names.pop()
 | 
						|
#         component_opts = base_components.get(component) or list()
 | 
						|
#         cls = get_action_cls(action_name, component, distro)
 | 
						|
#         instance = cls(instances=list(),
 | 
						|
#                        runner=runner,
 | 
						|
#                        root_dir=root_dir,
 | 
						|
#                        component_options=component_opts,
 | 
						|
#                        keep_old=False
 | 
						|
#                        )
 | 
						|
#         deps = instance.get_dependencies() or set()
 | 
						|
#         all_components[component] = set(deps)
 | 
						|
#         for d in deps:
 | 
						|
#             if d not in all_components and d not in active_names:
 | 
						|
#                 active_names.append(d)
 | 
						|
#     return all_components
 |