func()

in cmd/gke-identity-service-migrator/main.go [209:275]


func (c *RewriteCRBCommand) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus {
	if c.userIncludeSuffix == "" {
		log.Printf("Error: --user-email-suffix must be specified.")
		return subcommands.ExitFailure
	}
	if c.workforcePoolName == "" {
		log.Printf("Error: --workforce-pool-name must be specified.")
		return subcommands.ExitFailure
	}

	rec := &subjectRecognizer{
		userIncludePrefix:   c.userIncludePrefix,
		userIncludeSuffix:   c.userIncludeSuffix,
		groupsIncludePrefix: c.groupsIncludePrefix,
		groupsExcludeSuffix: c.groupsExcludeSuffix,
		workforcePoolName:   c.workforcePoolName,
	}

	inputCRBs := rbacv1.ClusterRoleBindingList{}
	builder := resource.NewLocalBuilder()
	_ = builder.
		WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...).
		DefaultNamespace().
		FilenameParam(
			false,
			&resource.FilenameOptions{Filenames: []string{"-"}}, // Read from stdin
		).
		Do().
		Visit(func(info *resource.Info, _ error) error {
			crbList, ok := info.Object.(*rbacv1.ClusterRoleBindingList)
			if !ok {
				return fmt.Errorf("%v is not a ClusterRoleBindingList", info.Object)
			}
			inputCRBs = *crbList
			return nil
		})

	rewrittenCRBs := &rbacv1.ClusterRoleBindingList{}
	for _, crbIn := range inputCRBs.Items {
		crbOut := crbIn.DeepCopy()

		// Blank out some fields that we don't want to copy over.
		delete(crbOut.ObjectMeta.Annotations, "kubectl.kubernetes.io/last-applied-configuration")
		crbOut.ObjectMeta.CreationTimestamp.Reset()
		crbOut.ObjectMeta.ManagedFields = []metav1.ManagedFieldsEntry{}
		crbOut.ObjectMeta.ResourceVersion = ""
		crbOut.ObjectMeta.UID = types.UID("")

		// Give the object a new name.
		crbOut.ObjectMeta.Name = crbIn.ObjectMeta.Name + "-wfidf"

		crbOut.Subjects = []rbacv1.Subject{}
		for _, sub := range crbIn.Subjects {
			crbOut.Subjects = append(crbOut.Subjects, rec.MigrateSubject(sub))
		}

		rewrittenCRBs.Items = append(rewrittenCRBs.Items, *crbOut)
	}

	printr := printers.NewTypeSetter(scheme.Scheme).ToPrinter(&printers.YAMLPrinter{})
	if err := printr.PrintObj(rewrittenCRBs, os.Stdout); err != nil {
		log.Printf("Error while printing rewritten ClusterRoleBindings: %v", err)
		return subcommands.ExitFailure
	}

	return subcommands.ExitSuccess
}