Ejemplo n.º 1
0
def find_provider(env, resource, class_path=None):
    if not class_path:
        providers = [PROVIDERS, LIBRARY_PROVIDERS]

        for provider in providers:

            if env.system.os_family in provider:
                os_family_provider = provider[env.system.os_family]
            else:
                # take care of os extensions
                for family in provider:
                    if OSCheck.is_in_family(env.system.os_family, family):
                        os_family_provider = provider[family]

            if resource in os_family_provider:
                class_path = os_family_provider[resource]
                break
            if resource in provider["default"]:
                class_path = provider["default"][resource]
                break

    try:
        mod_path, class_name = class_path.rsplit('.', 1)
    except ValueError:
        raise Fail("Unable to find provider for %s as %s" %
                   (resource, class_path))
    mod = __import__(mod_path, {}, {}, [class_name])
    return getattr(mod, class_name)
Ejemplo n.º 2
0
def get_provider(resource_type):
    """
  Looking for {resource_type} provider implementation for current os and returning ready to use instance

  :param resource_type existing provider type, case sensitive
  :type resource_type str

  :raise Fail
  :return Provider instance
  """
    os_family = OSCheck.get_os_family()
    providers = [PROVIDERS, LIBRARY_PROVIDERS]
    os_family_provider = None
    class_path = None

    for provider in providers:
        if os_family in provider:
            os_family_provider = provider[os_family]
        else:
            # take care of os extensions
            for family in provider:
                if OSCheck.is_in_family(os_family, family):
                    os_family_provider = provider[family]

        if os_family_provider and resource_type in os_family_provider:
            class_path = os_family_provider[resource_type]
            break
        if resource_type in provider["default"]:
            class_path = provider["default"][resource_type]
            break

    try:
        mod_path, class_name = class_path.rsplit('.', 1)
    except ValueError:
        raise Fail("Unable to find provider for %s as %s" %
                   (resource_type, class_path))
    mod = __import__(mod_path, {}, {}, [class_name])
    return getattr(mod, class_name)(None)