def _set_subscriptions(self, new_subscriptions, merge=True, secondary_key_name=None): def _get_key_name(account, secondary_key_name): return (account[_SUBSCRIPTION_ID] if secondary_key_name is None else '{}-{}'.format(account[_SUBSCRIPTION_ID], account[secondary_key_name])) def _match_account(account, subscription_id, secondary_key_name, secondary_key_val): return (account[_SUBSCRIPTION_ID] == subscription_id and (secondary_key_val is None or account[secondary_key_name] == secondary_key_val)) existing_ones = self.load_cached_subscriptions(all_clouds=True) active_one = next( (x for x in existing_ones if x.get(_IS_DEFAULT_SUBSCRIPTION)), None) active_subscription_id = active_one[ _SUBSCRIPTION_ID] if active_one else None active_secondary_key_val = active_one[secondary_key_name] if ( active_one and secondary_key_name) else None active_cloud = self.cli_ctx.cloud default_sub_id = None # merge with existing ones if merge: dic = collections.OrderedDict( (_get_key_name(x, secondary_key_name), x) for x in existing_ones) else: dic = collections.OrderedDict() dic.update((_get_key_name(x, secondary_key_name), x) for x in new_subscriptions) subscriptions = list(dic.values()) if subscriptions: if active_one: new_active_one = next( (x for x in new_subscriptions if _match_account( x, active_subscription_id, secondary_key_name, active_secondary_key_val)), None) for s in subscriptions: s[_IS_DEFAULT_SUBSCRIPTION] = False if not new_active_one: new_active_one = Profile._pick_working_subscription( new_subscriptions) else: new_active_one = Profile._pick_working_subscription( new_subscriptions) new_active_one[_IS_DEFAULT_SUBSCRIPTION] = True default_sub_id = new_active_one[_SUBSCRIPTION_ID] set_cloud_subscription(self.cli_ctx, active_cloud.name, default_sub_id) self._storage[_SUBSCRIPTIONS] = subscriptions
def _set_subscriptions(self, new_subscriptions): existing_ones = self.load_cached_subscriptions(all_clouds=True) active_one = next( (x for x in existing_ones if x.get(_IS_DEFAULT_SUBSCRIPTION)), None) active_subscription_id = active_one[ _SUBSCRIPTION_ID] if active_one else None active_cloud = get_active_cloud() default_sub_id = None # merge with existing ones dic = collections.OrderedDict( (x[_SUBSCRIPTION_ID], x) for x in existing_ones) dic.update((x[_SUBSCRIPTION_ID], x) for x in new_subscriptions) subscriptions = list(dic.values()) if active_one: new_active_one = next( (x for x in new_subscriptions if x[_SUBSCRIPTION_ID] == active_subscription_id), None) for s in subscriptions: s[_IS_DEFAULT_SUBSCRIPTION] = False if not new_active_one: new_active_one = new_subscriptions[0] new_active_one[_IS_DEFAULT_SUBSCRIPTION] = True default_sub_id = new_active_one[_SUBSCRIPTION_ID] else: new_subscriptions[0][_IS_DEFAULT_SUBSCRIPTION] = True default_sub_id = new_subscriptions[0][_SUBSCRIPTION_ID] set_cloud_subscription(active_cloud.name, default_sub_id) self._storage[_SUBSCRIPTIONS] = subscriptions
def _set_subscriptions(self, new_subscriptions): existing_ones = self.load_cached_subscriptions(all_clouds=True) active_one = next((x for x in existing_ones if x.get(_IS_DEFAULT_SUBSCRIPTION)), None) active_subscription_id = active_one[_SUBSCRIPTION_ID] if active_one else None active_cloud = get_active_cloud() default_sub_id = None # merge with existing ones dic = collections.OrderedDict((x[_SUBSCRIPTION_ID], x) for x in existing_ones) dic.update((x[_SUBSCRIPTION_ID], x) for x in new_subscriptions) subscriptions = list(dic.values()) if active_one: new_active_one = next( (x for x in new_subscriptions if x[_SUBSCRIPTION_ID] == active_subscription_id), None) for s in subscriptions: s[_IS_DEFAULT_SUBSCRIPTION] = False if not new_active_one: new_active_one = Profile._pick_working_subscription(new_subscriptions) else: new_active_one = Profile._pick_working_subscription(new_subscriptions) new_active_one[_IS_DEFAULT_SUBSCRIPTION] = True default_sub_id = new_active_one[_SUBSCRIPTION_ID] set_cloud_subscription(active_cloud.name, default_sub_id) self._storage[_SUBSCRIPTIONS] = subscriptions
def _set_subscriptions(self, new_subscriptions, merge=True, secondary_key_name=None): def _get_key_name(account, secondary_key_name): return (account[_SUBSCRIPTION_ID] if secondary_key_name is None else '{}-{}'.format(account[_SUBSCRIPTION_ID], account[secondary_key_name])) def _match_account(account, subscription_id, secondary_key_name, secondary_key_val): return (account[_SUBSCRIPTION_ID] == subscription_id and (secondary_key_val is None or account[secondary_key_name] == secondary_key_val)) existing_ones = self.load_cached_subscriptions(all_clouds=True) active_one = next((x for x in existing_ones if x.get(_IS_DEFAULT_SUBSCRIPTION)), None) active_subscription_id = active_one[_SUBSCRIPTION_ID] if active_one else None active_secondary_key_val = active_one[secondary_key_name] if (active_one and secondary_key_name) else None active_cloud = self.cli_ctx.cloud default_sub_id = None # merge with existing ones if merge: dic = collections.OrderedDict((_get_key_name(x, secondary_key_name), x) for x in existing_ones) else: dic = collections.OrderedDict() dic.update((_get_key_name(x, secondary_key_name), x) for x in new_subscriptions) subscriptions = list(dic.values()) if subscriptions: if active_one: new_active_one = next( (x for x in new_subscriptions if _match_account(x, active_subscription_id, secondary_key_name, active_secondary_key_val)), None) for s in subscriptions: s[_IS_DEFAULT_SUBSCRIPTION] = False if not new_active_one: new_active_one = Profile._pick_working_subscription(new_subscriptions) else: new_active_one = Profile._pick_working_subscription(new_subscriptions) new_active_one[_IS_DEFAULT_SUBSCRIPTION] = True default_sub_id = new_active_one[_SUBSCRIPTION_ID] set_cloud_subscription(self.cli_ctx, active_cloud.name, default_sub_id) self._storage[_SUBSCRIPTIONS] = subscriptions
def set_active_subscription(self, subscription): # take id or name subscriptions = self.load_cached_subscriptions(all_clouds=True) active_cloud = get_active_cloud() subscription = subscription.lower() result = [x for x in subscriptions if subscription in [x[_SUBSCRIPTION_ID].lower(), x[_SUBSCRIPTION_NAME].lower()] and x[_ENVIRONMENT_NAME] == active_cloud.name] if len(result) != 1: raise CLIError("The subscription of '{}' does not exist or has more than" " one match in cloud '{}'.".format(subscription, active_cloud.name)) for s in subscriptions: s[_IS_DEFAULT_SUBSCRIPTION] = False result[0][_IS_DEFAULT_SUBSCRIPTION] = True set_cloud_subscription(active_cloud.name, result[0][_SUBSCRIPTION_ID]) self._storage[_SUBSCRIPTIONS] = subscriptions
def set_active_subscription(self, subscription): # take id or name subscriptions = self.load_cached_subscriptions(all_clouds=True) active_cloud = self.cli_ctx.cloud subscription = subscription.lower() result = [x for x in subscriptions if subscription in [x[_SUBSCRIPTION_ID].lower(), x[_SUBSCRIPTION_NAME].lower()] and x[_ENVIRONMENT_NAME] == active_cloud.name] if len(result) != 1: raise CLIError("The subscription of '{}' {} in cloud '{}'.".format( subscription, "doesn't exist" if not result else 'has more than one match', active_cloud.name)) for s in subscriptions: s[_IS_DEFAULT_SUBSCRIPTION] = False result[0][_IS_DEFAULT_SUBSCRIPTION] = True set_cloud_subscription(self.cli_ctx, active_cloud.name, result[0][_SUBSCRIPTION_ID]) self._storage[_SUBSCRIPTIONS] = subscriptions
def _set_subscriptions(self, new_subscriptions, merge=True, key_name=_SUBSCRIPTION_ID): existing_ones = self.load_cached_subscriptions(all_clouds=True) active_one = next( (x for x in existing_ones if x.get(_IS_DEFAULT_SUBSCRIPTION)), None) active_subscription_id = active_one[key_name] if active_one else None active_cloud = self.cli_ctx.cloud default_sub_id = None # merge with existing ones if merge: dic = collections.OrderedDict( (x[key_name], x) for x in existing_ones) else: dic = collections.OrderedDict() dic.update((x[key_name], x) for x in new_subscriptions) subscriptions = list(dic.values()) if subscriptions: if active_one: new_active_one = next( (x for x in new_subscriptions if x[key_name] == active_subscription_id), None) for s in subscriptions: s[_IS_DEFAULT_SUBSCRIPTION] = False if not new_active_one: new_active_one = Profile._pick_working_subscription( new_subscriptions) else: new_active_one = Profile._pick_working_subscription( new_subscriptions) new_active_one[_IS_DEFAULT_SUBSCRIPTION] = True default_sub_id = new_active_one[_SUBSCRIPTION_ID] set_cloud_subscription(self.cli_ctx, active_cloud.name, default_sub_id) self._storage[_SUBSCRIPTIONS] = subscriptions