예제 #1
0
def ParseAdvertisements(messages, resource_class, args):
    """Parses and validates a completed advertisement configuration from flags.

  Args:
    messages: API messages holder.
    resource_class: RouterBgp or RouterBgpPeer class type to parse for.
    args: Flag arguments to generate configuration from.

  Returns:
    The validated tuple of mode, groups and prefixes.  If mode is DEFAULT,
    validates that no custom advertisements were specified and returns empty
    lists for each.

  Raises:
    CustomWithDefaultError: If custom advertisements were specified at the same
    time as DEFAULT mode.
  """

    mode = None
    if args.advertisement_mode is not None:
        mode = routers_utils.ParseMode(resource_class, args.advertisement_mode)
    groups = None
    if args.set_advertisement_groups is not None:
        groups = routers_utils.ParseGroups(resource_class,
                                           args.set_advertisement_groups)
    prefixes = None
    if args.set_advertisement_ranges is not None:
        prefixes = routers_utils.ParseIpRanges(messages,
                                               args.set_advertisement_ranges)

    if (mode is not None
            and mode is resource_class.AdvertiseModeValueValuesEnum.DEFAULT):
        if groups or prefixes:
            raise CustomWithDefaultError(messages, resource_class)
        else:
            # Switching to default mode clears out any existing custom advertisements
            return mode, [], []
    else:
        return mode, groups, prefixes
 def RunSubTest(self, resource_class, arg_mode):
     return routers_utils.ParseMode(resource_class, arg_mode)