def action_attach(args, cfg):
    if cfg.is_attached:
        print("This machine is already attached to '{}'.".format(
            cfg.accounts[0]["name"]))
        return 0
    if os.getuid() != 0:
        raise exceptions.NonRootUserError()
    contract_token = args.token
    if not contract_token:
        print("No valid contract token available")
        return 1
    try:
        contract.request_updated_contract(cfg,
                                          contract_token,
                                          allow_enable=args.auto_enable)
    except util.UrlError as exc:
        with util.disable_log_to_console():
            logging.exception(exc.msg)
        print(
            ua_status.MESSAGE_ATTACH_FAILURE_TMPL.format(url=cfg.contract_url))
        return 1
    except exceptions.UserFacingError as exc:
        logging.warning(exc.msg)
        action_status(args=None, cfg=cfg)
        return 1
    contract_name = cfg.machine_token["machineTokenInfo"]["contractInfo"][
        "name"]
    print(
        ua_status.MESSAGE_ATTACH_SUCCESS_TMPL.format(
            contract_name=contract_name))

    action_status(args=None, cfg=cfg)
    return 0
Esempio n. 2
0
def action_attach(args, cfg):
    if cfg.is_attached:
        print("This machine is already attached to '%s'." %
              cfg.accounts[0]['name'])
        return 0
    if os.getuid() != 0:
        raise exceptions.NonRootUserError()
    contract_client = contract.UAContractClient(cfg)
    if not args.token:
        with util.disable_log_to_console():
            bound_macaroon_bytes = sso.discharge_root_macaroon(contract_client)
        if bound_macaroon_bytes is None:
            print('Could not attach machine. Unable to obtain authenticated'
                  ' user token')
            return 1
        bound_macaroon = bound_macaroon_bytes.decode('utf-8')
        cfg.write_cache('bound-macaroon', bound_macaroon)
        try:
            contract_client.request_accounts(macaroon_token=bound_macaroon)
            contract_token = contract.get_contract_token_for_account(
                contract_client, bound_macaroon, cfg.accounts[0]['id'])
        except (sso.SSOAuthError, util.UrlError) as e:
            logging.error(str(e))
            print('Could not attach machine. Unable to obtain authenticated'
                  ' contract token')
            return 1
    else:
        contract_token = args.token
    if not contract_token:
        print('No valid contract token available')
        return 1
    if not contract.request_updated_contract(
            cfg, contract_token, allow_enable=args.auto_enable):
        print(
            ua_status.MESSAGE_ATTACH_FAILURE_TMPL.format(url=cfg.contract_url))
        return 1
    contract_name = (
        cfg.machine_token['machineTokenInfo']['contractInfo']['name'])
    print(
        ua_status.MESSAGE_ATTACH_SUCCESS_TMPL.format(
            contract_name=contract_name))

    action_status(args=None, cfg=cfg)
    return 0
Esempio n. 3
0
 def new_f(*args, **kwargs):
     if os.getuid() != 0:
         raise exceptions.NonRootUserError()
     return f(*args, **kwargs)
Esempio n. 4
0
 def wrapper(args, cfg):
     if os.getuid() != 0:
         raise exceptions.NonRootUserError()
     if not cfg.is_attached:
         raise exceptions.UnattachedError()
     return func(args, cfg)