in cmd/gke-identity-service-migrator/main.go [427:493]
func (c *RewriteRBCommand) 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,
}
inputRBs := rbacv1.RoleBindingList{}
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 {
rbList, ok := info.Object.(*rbacv1.RoleBindingList)
if !ok {
return fmt.Errorf("%v is not a RoleBindingList", info.Object)
}
inputRBs = *rbList
return nil
})
rewrittenRBs := &rbacv1.RoleBindingList{}
for _, rbIn := range inputRBs.Items {
rbOut := rbIn.DeepCopy()
// Blank out some fields that we don't want to copy over.
delete(rbOut.ObjectMeta.Annotations, "kubectl.kubernetes.io/last-applied-configuration")
rbOut.ObjectMeta.CreationTimestamp.Reset()
rbOut.ObjectMeta.ManagedFields = []metav1.ManagedFieldsEntry{}
rbOut.ObjectMeta.ResourceVersion = ""
rbOut.ObjectMeta.UID = types.UID("")
// Give the object a new name.
rbOut.ObjectMeta.Name = rbIn.ObjectMeta.Name + "-wfidf"
rbOut.Subjects = []rbacv1.Subject{}
for _, sub := range rbIn.Subjects {
rbOut.Subjects = append(rbOut.Subjects, rec.MigrateSubject(sub))
}
rewrittenRBs.Items = append(rewrittenRBs.Items, *rbOut)
}
printr := printers.NewTypeSetter(scheme.Scheme).ToPrinter(&printers.YAMLPrinter{})
if err := printr.PrintObj(rewrittenRBs, os.Stdout); err != nil {
log.Printf("Error while printing rewritten RoleBindings: %v", err)
return subcommands.ExitFailure
}
return subcommands.ExitSuccess
}