예제 #1
0
파일: main.go 프로젝트: cilium-team/cilium
func verifyAllowedSlice(slice []string) error {
	for i, v := range slice {
		if _, err := strconv.ParseUint(v, 10, 32); err != nil {
			// can fail which means it needs to be a label
			labels.ParseLabel(v)
		} else if i != 0 {
			return fmt.Errorf("value %q: must be only one unsigned "+
				"number or label(s) in format of SOURCE:KEY[=VALUE]", v)
		}
	}
	return nil
}
예제 #2
0
파일: main.go 프로젝트: cilium-team/cilium
func parseAllowedSlice(slice []string) ([]labels.Label, error) {
	inLabels := []labels.Label{}
	id := uint32(0)

	for _, v := range slice {
		if n, err := strconv.ParseUint(v, 10, 32); err != nil {
			// can fail which means it needs to be a label
			lbl := labels.ParseLabel(v)
			inLabels = append(inLabels, *lbl)
		} else {
			if id != 0 {
				return nil, fmt.Errorf("More than one security ID provided")
			}

			id = uint32(n)
		}
	}

	if id != 0 {
		if len(inLabels) > 0 {
			return nil, fmt.Errorf("You can only specify either ID or labels")
		}

		ctx, err := client.GetLabels(id)
		if err != nil {
			return nil, fmt.Errorf("Unable to retrieve labels for ID %d: %s", id, err)
		}
		if ctx == nil {
			return nil, fmt.Errorf("ID %d not found", id)
		}

		return ctx.Labels.ToSlice(), nil
	} else {
		if len(inLabels) == 0 {
			return nil, fmt.Errorf("No label or security ID provided")
		}

		return inLabels, nil
	}
}