Example #1
0
def switch_app_package(billing_driver, pod_id, plan_id):
    owner = KubeUtils.get_current_user()

    transaction = db.session.begin_nested()
    with atomic():
        old_pod = PodCollection(owner).get(pod_id, as_json=True)
        AppInstance(pod_id).update_plan(plan_id, async=False, dry_run=True)
        pod = PodCollection(owner).get(pod_id, as_json=True)
    transaction.rollback()

    data = KubeUtils._get_params()
    data['pod'] = pod
    data['oldPod'] = old_pod
    data['referer'] = data.get('referer') or ''
    return billing_driver.orderswitchapppackage(**data)
Example #2
0
def on_app_error(e):
    try:
        current_user = KubeUtils.get_current_user()
    except AttributeError:
        current_user = None

    if isinstance(e, InternalAPIError):
        current_app.logger.error(e.message, exc_info=e.exc_info)

        if current_user and current_user.is_administrator():
            return _jsonify_api_error(e)
        else:
            send_event_to_role('notify:error', {'message': e.message}, 'Admin')
            return _jsonify_api_error(
                APIError(e.response_message or 'Unknown error', 500))

    elif isinstance(e, APIError):
        return _jsonify_api_error(e)

    else:  # unexpected error
        current_app.logger.exception(e.message)
        if current_user and current_user.is_administrator():
            return _jsonify_api_error(APIError(repr(e), 500))
        else:
            send_event_to_role('notify:error',
                               {'message': 'Unexpected error: ' + repr(e)},
                               'Admin')
            _jsonify_api_error(
                APIError('Internal error, please contact administrator', 500))
Example #3
0
def create_host():
    user = KubeUtils.get_current_user()
    if not user.is_administrator():
        raise APIError('Insufficient permissions level', 403,
                       type='PermissionDenied')
    ip = request.environ.get('REMOTE_ADDR')
    return register_host(ip)
Example #4
0
def _check_if_pod_exists(pod_id):
    user = KubeUtils.get_current_user()
    try:
        pod = Pod.filter(Pod.owner_id == user.id, Pod.id == pod_id).first()
        if pod is None:
            raise PodNotFound
    except DataError:
        # pod_id is not uuid
        raise PodNotFound
Example #5
0
def order_edit(billing_driver):
    data = KubeUtils._get_params()
    data['pod'] = json.dumps(data['pod'])
    data['referer'] = data['referer'] if 'referer' in data else ''
    response = billing_driver.orderpodedit(**data)
    if isinstance(response, basestring):
        raise BillingExc.InternalBillingError(details={'message': response})
    if response.get('result') == 'error':
        raise APIError(response.get('message'))
    return response
Example #6
0
def check_owner(owner=None):
    current_user = KubeUtils.get_current_user()
    owner = owner or current_user

    check_permission('own', 'pods', user=owner).check()
    if owner == current_user:
        check_permission('create', 'yaml_pods').check()
    else:
        check_permission('create_non_owned', 'yaml_pods').check()
    return owner
Example #7
0
def switch_pod_plan(pod_id, plan_id, **params):
    async = params.get('async', True)
    dry_run = params.get('dry-run', False)
    current_user = KubeUtils.get_current_user()
    app = AppInstance(pod_id, current_user)
    if plan_id.isdigit():  # plan_id specified with index (e.g. 0)
        plan_id = int(plan_id)
        func = app.update_plan
    else:  # plan_id specified with name ('M', 'XXL')
        func = app.update_plan_by_name
    return func(plan_id, async=async, dry_run=dry_run)
Example #8
0
def order_app(billing_driver, template_id, plan_id):
    data = KubeUtils._get_params()
    app = PredefinedApp.get(template_id)

    start_pod_from_yaml(app.get_filled_template_for_plan(plan_id, data),
                        dry_run=True)

    filled = app.get_filled_template_for_plan(plan_id, data, as_yaml=True)
    pkgid = app._get_package().id

    return billing_driver.orderapp(pkgid=pkgid,
                                   yaml=filled,
                                   referer=request.referrer)
Example #9
0
def order_product(billing_driver):
    data = KubeUtils._get_params()
    if data.get('pod'):
        data['referer'] = data['referer'] if 'referer' in data else ''
        return billing_driver.orderpod(**data)
    return billing_driver.orderproduct(**data)
Example #10
0
def get_billing_info(billing_driver):
    data = KubeUtils._get_params()
    if billing_driver is None:
        return no_billing_data()
    return billing_driver.getkuberdockinfo(**data)
Example #11
0
def order_kubes(billing_driver):
    data = KubeUtils._get_params()
    data['referer'] = data['referer'] if 'referer' in data else ''
    return billing_driver.orderkubes(**data)