Esempio n. 1
0
def fzf_subscription(cmd, fzf_filter=None, no_default=False):
    """
    Use fzf to quickly filter and select your current subscription.
    """
    from azure.cli.core._profile import Profile
    from azure.cli.core.api import load_subscriptions

    subscriptions = load_subscriptions(cmd.cli_ctx,
                                       all_clouds=False,
                                       refresh=False)

    if not subscriptions:
        raise CLIError('No subscriptions found.'
                       'If you are logged in, make sure subscriptions exist'
                       'and you have access to them. If you are not logged'
                       'in, please run "az login" to access your account.')
    headers = ["Name", "State", "ID"]
    subs_sorted = sorted(subscriptions, key=lambda i: i["name"])
    subs_list = [[sub["name"], sub["state"], sub["id"]] for sub in subs_sorted]
    result = _fzf(_fzf_table(subs_list, headers),
                  header_lines=2,
                  fzf_filter=fzf_filter)

    if result:
        subscription = result.split('|')[-2].strip()
        if not no_default:
            LOGGER.info('setting default subscription')
            Profile(cli_ctx=cmd.cli_ctx).set_active_subscription(subscription)
        return next((s for s in subscriptions if s["id"] == subscription))

    return None
Esempio n. 2
0
def list_subscriptions(cmd, all=False, refresh=False):  # pylint: disable=redefined-builtin
    """List the imported subscriptions."""
    from azure.cli.core.api import load_subscriptions

    subscriptions = load_subscriptions(cmd.cli_ctx, all_clouds=all, refresh=refresh)
    if not subscriptions:
        logger.warning('Please run "az login" to access your accounts.')
    for sub in subscriptions:
        sub['cloudName'] = sub.pop('environmentName', None)
    if not all:
        enabled_ones = [s for s in subscriptions if s.get('state') == 'Enabled']
        if len(enabled_ones) != len(subscriptions):
            logger.warning("A few accounts are skipped as they don't have 'Enabled' state. "
                           "Use '--all' to display them.")
            subscriptions = enabled_ones
    return subscriptions
Esempio n. 3
0
def list_subscriptions(cmd, all=False, refresh=False):  # pylint: disable=redefined-builtin
    """List the imported subscriptions."""
    from azure.cli.core.api import load_subscriptions

    subscriptions = load_subscriptions(cmd.cli_ctx, all_clouds=all, refresh=refresh)
    if not subscriptions:
        logger.warning('Please run "az login" to access your accounts.')
    for sub in subscriptions:
        sub['cloudName'] = sub.pop('environmentName', None)
    if not all:
        enabled_ones = [s for s in subscriptions if s.get('state') == 'Enabled']
        if len(enabled_ones) != len(subscriptions):
            logger.warning("A few accounts are skipped as they don't have 'Enabled' state. "
                           "Use '--all' to display them.")
            subscriptions = enabled_ones
    return subscriptions
Esempio n. 4
0
def fzf_customer(cmd, fzf_filter=None, no_default=False):
    """
    Use fzf to quickly filter and select your current customer.
    """
    from azure.cli.core._profile import Profile
    from azure.cli.core.api import load_subscriptions

    subscriptions = load_subscriptions(cmd.cli_ctx,
                                       all_clouds=False,
                                       refresh=False)
    if "AZ_FZF_CUSTOMER_SUBSCRIPTIONS" not in os.environ:
        raise CLIError('Specify the path to subscriptions.yml in '
                       'AZ_FZF_CUSTOMER_SUBSCRIPTIONS environment variable')

    subscriptions_yml_path = os.environ['AZ_FZF_CUSTOMER_SUBSCRIPTIONS']
    if not os.path.isfile(subscriptions_yml_path):
        raise CLIError('"%s" is not a file' % subscriptions_yml_path)

    customer_subscriptions = {}
    try:
        with open(subscriptions_yml_path) as subscriptions_yml:
            customer_subscriptions = yaml.safe_load(subscriptions_yml)
    except yaml.YAMLError as exc:
        error_msg = ""
        if hasattr(exc, 'problem_mark'):
            if exc.context != None:
                error_msg = ('  parser says\n' + str(exc.problem_mark) +
                             '\n  ' + str(exc.problem) + ' ' +
                             str(exc.context) +
                             '\nPlease correct data and retry.')
            else:
                error_msg = ('  parser says\n' + str(exc.problem_mark) +
                             '\n  ' + str(exc.problem) +
                             '\nPlease correct data and retry.')
        else:
            error_msg = ("Something went wrong while parsing yaml file")
        raise CLIError('Error parsing %s\n%s' %
                       (subscriptions_yml_path, error_msg))

    except OSError as exc:
        print()
        raise CLIError('Something went wrong while opening "%s": %s' %
                       (subscriptions_yml_path, exc))

    if not customer_subscriptions:
        raise CLIError('No subscriptions found in subscriptions.yml')

    headers = ["Customer", "Name", "ID"]
    subs_sorted = sorted(customer_subscriptions, key=lambda i: i["customer"])
    subs_list = [[sub["customer"], sub["name"], sub["id"]]
                 for sub in subs_sorted]
    result = _fzf(_fzf_table(subs_list, headers),
                  header_lines=2,
                  fzf_filter=fzf_filter)

    if result:
        subscription = result.split('|')[-2].strip()
        if not no_default:
            LOGGER.info('setting default customer')
            Profile(cli_ctx=cmd.cli_ctx).set_active_subscription(subscription)
        return next((s for s in subscriptions if s["id"] == subscription))

    return None