pkg/cmd/serviceaccount/phases/delete/serviceaccount.go (70 lines of code) (raw):

package phases import ( "context" "github.com/pkg/errors" apierrors "k8s.io/apimachinery/pkg/api/errors" "monis.app/mlog" "sigs.k8s.io/controller-runtime/pkg/client" "github.com/Azure/azure-workload-identity/pkg/cmd/serviceaccount/options" "github.com/Azure/azure-workload-identity/pkg/cmd/serviceaccount/phases/workflow" "github.com/Azure/azure-workload-identity/pkg/kuberneteshelper" ) const ( serviceAccountPhaseName = "service-account" ) type serviceAccountPhase struct { kubeClient client.Client } // NewServiceAccountPhase creates a new phase to delete the Kubernetes service account func NewServiceAccountPhase() workflow.Phase { p := &serviceAccountPhase{} return workflow.Phase{ Name: serviceAccountPhaseName, Aliases: []string{"sa"}, Description: "Delete the Kubernetes service account in the current KUBECONFIG context", PreRun: p.prerun, Run: p.run, Flags: []string{ options.ServiceAccountNamespace.Flag, options.ServiceAccountName.Flag, }, } } func (p *serviceAccountPhase) prerun(data workflow.RunData) error { deleteData, ok := data.(DeleteData) if !ok { return errors.Errorf("invalid data type %T", data) } if deleteData.ServiceAccountNamespace() == "" { return options.FlagIsRequiredError(options.ServiceAccountNamespace.Flag) } if deleteData.ServiceAccountName() == "" { return options.FlagIsRequiredError(options.ServiceAccountName.Flag) } var err error if p.kubeClient, err = deleteData.KubeClient(); err != nil { return errors.Wrap(err, "failed to get Kubernetes client") } return nil } func (p *serviceAccountPhase) run(ctx context.Context, data workflow.RunData) error { deleteData := data.(DeleteData) l := mlog.WithValues( "namespace", deleteData.ServiceAccountNamespace(), "name", deleteData.ServiceAccountName(), ).WithName(serviceAccountPhaseName) err := kuberneteshelper.DeleteServiceAccount( ctx, p.kubeClient, deleteData.ServiceAccountNamespace(), deleteData.ServiceAccountName(), ) if err != nil { if !apierrors.IsNotFound(err) { return errors.Wrap(err, "failed to delete service account") } l.Warning("service account not found") } else { l.Info("deleted service account") } return nil }