Andrey Kurilin be373d9ff8 [plugins] Introduce plugins as python-packages
Rally supports plugins for everything. You can write plugin for
scenario, context, runner, sla, reports and so on.
Current implementation is designed via python module. To make Rally
find those plugins, you need to specify the path for them. It is ok,
but has places for improvement:

1) providing the path to plugin eche time you launch Rally or configure
   it via Rally config. This is a place which rally plugins as pything
   packages can improve. Rally plugins can be easily auto-discovered by
   the right entry-point. No redundant pathes anymore
2) managing dependency. Python module doesn't have dependencies, package
   has. It means that delivering rally plugins via python package allows
   you to manage your dependencies separately from Rally. Also it allows
   to specify rally releases for which it was designed.

Change-Id: I60a946c26a96e4777552f43bd44a306766f3c275
2017-05-13 16:32:39 -07:00

46 lines
1.3 KiB
Python

# Copyright 2015: Mirantis 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 os
import decorator
from rally.common.plugin import discover
PLUGINS_LOADED = False
def load():
global PLUGINS_LOADED
if not PLUGINS_LOADED:
discover.import_modules_from_package("rally.deployment.engines")
discover.import_modules_from_package("rally.deployment.serverprovider")
discover.import_modules_from_package("rally.plugins")
discover.import_modules_by_entry_point()
discover.load_plugins("/opt/rally/plugins/")
discover.load_plugins(os.path.expanduser("~/.rally/plugins/"))
PLUGINS_LOADED = True
@decorator.decorator
def ensure_plugins_are_loaded(f, *args, **kwargs):
load()
return f(*args, **kwargs)