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
}