Пример #1
0
def gcp_set_account(account):
    """
  Call gcloud to set current account
  :param account: gcloud account
  :return: True if successful otherwise False
  """

    _logger.debug('setting authentication login to {0}'.format(account))

    if not account:
        _logger.error('no GCP account given, aborting...')
        return False

    prog = which('gcloud')
    args = shlex.split('{0} auth login {1}'.format(prog, account))

    # pylint: disable=W0612
    pcode, so, se = run_external_program(args)

    if pcode != 0:
        _logger.error(
            'failed to set gcp auth login account. ({0}: {1})'.format(
                pcode, so))
        return False

    _logger.debug('successfully set gcp auth login account')

    return True
Пример #2
0
def gcp_gsutil_command(cmd, args, flags=None):
    """
  Run a gsutil command
  :param cmd: gsutil command name
  :param args: command arguments
  :param flags: additional flags to pass to gsutil executable
  :return: (exit code, stdout, stderr)
  """
    if not cmd or not args or not isinstance(args, str):
        _logger.error('invalid parameters passed to gcp_gsutil_command.')
        return False

    prog = which('gsutil')
    args = shlex.split('{0} {1} {2} {3}'.format(prog, flags if flags else '',
                                                cmd, args))

    return run_external_program(args)
Пример #3
0
def gcp_gcloud_command(group, args, flags=None):
    """
  Run a gcloud command
  :param group: group name
  :param args: command arguments
  :param flags: additional flags to pass to gcloud executable
  :return: (exit code, stdout, stderr)
  """
    if not group or not args or not isinstance(args, str):
        _logger.error('invalid parameters passed to gcp_gcloud_command.')
        return False

    prog = which('gcloud')
    args = shlex.split('{0} {1} {2} {3}'.format(prog, group, args,
                                                flags if flags else ''))

    return run_external_program(args)
Пример #4
0
def gcp_create_iam_service_creds(account, creds_account=None):
    """
  # Note: Untested
  :param account:
  :param creds_account:
  :return: reference key
  """

    # make sure key store directory exists
    if not os.path.exists(GCP_SERVICE_KEY_STORE):
        os.makedirs(GCP_SERVICE_KEY_STORE)

    # make sure we never duplicate an existing key
    while True:
        service_key = '{0}.json'.format(''.join(
            choice('0123456789ABCDEF') for _ in xrange(6)))
        service_key_file = os.path.join(GCP_SERVICE_KEY_STORE, service_key)

        if not os.path.exists(
                os.path.join(GCP_SERVICE_KEY_STORE, service_key_file)):
            break

    if creds_account is None:
        creds_account = account

    prog = which('gcloud')
    args = shlex.split(
        '{0} iam service-accounts keys create "{1}" --iam-account={2} --account={3}'
        .format(prog, service_key_file, account, creds_account))

    # pylint: disable=W0612
    pcode, so, se = run_external_program(args)

    if pcode != 0:
        _logger.error(
            'failed to create iam service account key. ({0}: {1})'.format(
                pcode, so))
        return False

    _logger.debug('successfully created iam service account key ({0})'.format(
        service_key))

    return service_key
Пример #5
0
def gcp_delete_iam_service_creds(service_key, account, creds_account=None):
    """
  # Note: Untested
  :param service_key:
  :param project:
  :param account:
  :param creds_account:
  :return:
  """

    srv_key_file = os.path.join(GCP_SERVICE_KEY_STORE, service_key)

    if not os.path.exists(srv_key_file):
        _logger.error('specified iam service key does not exist ({0})'.format(
            service_key))
        return False

    if creds_account is None:
        creds_account = account

    prog = which('gcloud')
    args = shlex.split(
        '{0} iam service-accounts keys delete "{1}" --iam-account={2} --account={3}'
        .format(prog, srv_key_file, account, creds_account))

    # pylint: disable=W0612
    pcode, so, se = run_external_program(args)

    if pcode != 0:
        _logger.error(
            'failed to delete iam service account key. ({0}: {1})'.format(
                pcode, so))
        return False

    _logger.debug('successfully deleted iam service account key ({0})'.format(
        service_key))

    return service_key
Пример #6
0
def gcp_bq_command(cmd,
                   args,
                   global_flags=None,
                   command_flags=None,
                   headless=True):
    """
  Run a bq command
  :param cmd: bq command name
  :param args: command arguments
  :param global_flags: global flags to pass to bq executable
  :param command_flags: command flags to pass to bq executable
  :param headless: run the 'bq' command in headless mode
  :return: (exit code, stdout, stderr)
  """
    if not cmd or not args or not isinstance(args, str):
        _logger.error('invalid parameters passed to gcp_bq_command.')
        return False

    p_args = shlex.split('{0} {1} {2} {3} {4} {5}'.format(
        which('bq'), '--headless' if headless else '',
        global_flags if global_flags else '', cmd,
        command_flags if command_flags else '', args))

    return run_external_program(p_args)