'Returns an OpenStack client manager
Returns an OpenStack client manager based on either credential_type
or a list of roles. If neither is specified, it defaults to
credential_type \'primary\'
:param credential_type: string - primary, alt or admin
:param roles: list of roles
:returns: the created client manager
:raises skipException: if the requested credentials are not available'

@classmethod
def get_client_manager(cls, credential_type=None, roles=None, force_new=None):

    if all([roles, credential_type]):
        msg = 'Cannot    get    credentials    by    type    and    roles    at    the    same    time'
        raise ValueError(msg)
    if (not any([roles, credential_type])):
        credential_type = 'primary'
    cred_provider = cls._get_credentials_provider()
    if roles:
        for role in roles:
            if (not cred_provider.is_role_available(role)):
                skip_msg = ('%s    skipped    because    the    configured    credential    provider    is    not    able    to    provide    credentials    with    the    %s    role    assigned.' % (cls.__name__, role))
                raise cls.skipException(skip_msg)
        params = dict(roles=roles)
        if (force_new is not None):
            params.update(force_new=force_new)
        creds = cred_provider.get_creds_by_roles(**params)
    else:
        credentials_method = ('get_%s_creds' % credential_type)
        if hasattr(cred_provider, credentials_method):
            creds = getattr(cred_provider, credentials_method)()
        else:
            raise lib_exc.InvalidCredentials(('Invalid    credentials    type    %s' % credential_type))
    manager = cls.client_manager(credentials=creds.credentials)
    manager.auth_provider.set_auth()
    return manager
