Skip to content

Commit

Permalink
pkg/tasks: Update resource creation and deletion
Browse files Browse the repository at this point in the history
Signed-off-by: Jayapriya Pai <janantha@redhat.com>
  • Loading branch information
slashpai committed Jul 4, 2023
1 parent 2c7a395 commit 8a7f3a3
Show file tree
Hide file tree
Showing 3 changed files with 223 additions and 56 deletions.
9 changes: 0 additions & 9 deletions pkg/client/client.go
Expand Up @@ -772,15 +772,6 @@ func (c *Client) DeletePodDisruptionBudget(ctx context.Context, pdb *policyv1.Po
return err
}

func (c *Client) DeleteAPIService(ctx context.Context, apiService *apiregistrationv1.APIService) error {
err := c.aggclient.ApiregistrationV1().APIServices().Delete(ctx, apiService.GetName(), metav1.DeleteOptions{})
if apierrors.IsNotFound(err) {
return nil
}

return err
}

func (c *Client) DeletePrometheus(ctx context.Context, p *monv1.Prometheus) error {
pclient := c.mclient.MonitoringV1().Prometheuses(p.GetNamespace())

Expand Down
59 changes: 16 additions & 43 deletions pkg/tasks/metricsserver.go
Expand Up @@ -6,8 +6,6 @@ import (
"github.com/openshift/cluster-monitoring-operator/pkg/client"
"github.com/openshift/cluster-monitoring-operator/pkg/manifests"
"github.com/pkg/errors"
appsv1 "k8s.io/api/apps/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type MetricsServerTask struct {
Expand All @@ -32,7 +30,6 @@ func (t *MetricsServerTask) Run(ctx context.Context) error {
if t.config.ClusterMonitoringConfiguration.MetricsServerConfig != nil && *t.config.ClusterMonitoringConfiguration.MetricsServerConfig.Enabled {
return t.create(ctx)
}
// TODO Call adapter resources to recreate and then delete metrics server
return t.destroy(ctx)
}

Expand Down Expand Up @@ -162,7 +159,13 @@ func (t *MetricsServerTask) create(ctx context.Context) error {
}
}

return t.removePrometheusAdapterResources()
{
pa := NewPrometheusAdapterTask(ctx, t.namespace, t.client, t.factory, t.config)
if err := pa.destroy(ctx); err != nil {
return errors.Wrap(err, "deleting Prometheus Adapter resources failed")
}
}
return t.destroy(ctx)
}

func (t *MetricsServerTask) destroy(ctx context.Context) error {
Expand All @@ -179,17 +182,6 @@ func (t *MetricsServerTask) destroy(ctx context.Context) error {
}
}
}
{
dep, err := t.factory.MetricsServerDeployment()
if err != nil {
return errors.Wrap(err, "initializing MetricsServer Deployment failed")
}

err = t.client.DeleteDeployment(ctx, dep)
if err != nil {
return errors.Wrap(err, "deleting MetricsServer Deployment failed")
}
}
{
cr, err := t.factory.MetricsServerClusterRole()
if err != nil {
Expand Down Expand Up @@ -245,19 +237,6 @@ func (t *MetricsServerTask) destroy(ctx context.Context) error {
return errors.Wrap(err, "deleting metrics-server-auth-reader RoleBinding failed")
}
}
// TODO: check if anything needed before delete, pa up?
// May be this should be deleted different than other resources, add check in pa run
{
apiService, err := t.factory.MetricsServerAPIService()
if err != nil {
return errors.Wrap(err, "initializing MetricsServer APIService failed")
}

err = t.client.DeleteAPIService(t.ctx, apiService)
if err != nil {
return errors.Wrap(err, "deleting MetricsServer APIService failed")
}
}
{
sm, err := t.factory.MetricsServerServiceMonitor()
if err != nil {
Expand All @@ -280,22 +259,16 @@ func (t *MetricsServerTask) destroy(ctx context.Context) error {
return errors.Wrap(err, "deleting MetricsServer Service failed")
}
}
return nil
}
{
dep, err := t.factory.MetricsServerDeployment()
if err != nil {
return errors.Wrap(err, "initializing MetricsServer Deployment failed")
}

func (t *MetricsServerTask) removePrometheusAdapterResources() error {
d := &appsv1.Deployment{
ObjectMeta: metav1.ObjectMeta{
Name: "prometheus-adapter",
Namespace: "openshift-monitoring",
},
}
err := t.client.DeleteDeployment(t.ctx, d)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter Deployment failed")
err = t.client.DeleteDeployment(ctx, dep)
if err != nil {
return errors.Wrap(err, "deleting MetricsServer Deployment failed")
}
}

// TODO Add steps to remove other resources

return nil
}
211 changes: 207 additions & 4 deletions pkg/tasks/prometheusadapter.go
Expand Up @@ -30,10 +30,8 @@ func NewPrometheusAdapterTask(ctx context.Context, namespace string, client *cli
}

func (t *PrometheusAdapterTask) Run(ctx context.Context) error {
if t.config.ClusterMonitoringConfiguration.MetricsServerConfig != nil {
if !*t.config.ClusterMonitoringConfiguration.MetricsServerConfig.Enabled {
t.create(ctx)
}
if !t.config.TechPreview {
t.create(ctx)
}

return nil
Expand Down Expand Up @@ -288,3 +286,208 @@ func (t *PrometheusAdapterTask) deleteOldPrometheusAdapterSecrets(newHash string

return nil
}

func (t *PrometheusAdapterTask) destroy(ctx context.Context) error {
{
pdb, err := t.factory.PrometheusAdapterPodDisruptionBudget()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter PodDisruptionBudget failed")
}

if pdb != nil {
err = t.client.DeletePodDisruptionBudget(ctx, pdb)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter PodDisruptionBudget failed")
}
}
}
{
sms, err := t.factory.PrometheusAdapterServiceMonitors()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter ServiceMonitors failed")
}

for _, sm := range sms {
err = t.client.DeleteServiceMonitor(ctx, sm)
if err != nil {
return errors.Wrapf(err, "deleting %s/%s ServiceMonitor failed", sm.Namespace, sm.Name)
}
}
}
{
cr, err := t.factory.PrometheusAdapterClusterRole()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter ClusterRole failed")
}

err = t.client.DeleteClusterRole(ctx, cr)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter ClusterRole failed")
}
}
{
cr, err := t.factory.PrometheusAdapterClusterRoleServerResources()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter ClusterRole for server resources failed")
}

err = t.client.DeleteClusterRole(ctx, cr)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter ClusterRole for server resources failed")
}
}
{
cr, err := t.factory.PrometheusAdapterClusterRoleAggregatedMetricsReader()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter ClusterRole aggregating resource metrics read permissions failed")
}

err = t.client.DeleteClusterRole(ctx, cr)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter ClusterRole aggregating resource metrics read permissions failed")
}
}
{
crb, err := t.factory.PrometheusAdapterClusterRoleBinding()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter ClusterRoleBinding failed")
}

err = t.client.DeleteClusterRoleBinding(ctx, crb)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter ClusterRoleBinding failed")
}
}
{
crb, err := t.factory.PrometheusAdapterClusterRoleBindingDelegator()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter ClusterRoleBinding for delegator failed")
}

err = t.client.DeleteClusterRoleBinding(ctx, crb)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter ClusterRoleBinding for delegator failed")
}
}
{
crb, err := t.factory.PrometheusAdapterClusterRoleBindingView()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter ClusterRoleBinding for view failed")
}

err = t.client.DeleteClusterRoleBinding(ctx, crb)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter ClusterRoleBinding for view failed")
}
}
{
rb, err := t.factory.PrometheusAdapterRoleBindingAuthReader()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter RoleBinding for auth-reader failed")
}

err = t.client.DeleteRoleBinding(ctx, rb)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter RoleBinding for auth-reader failed")
}
}
{
sa, err := t.factory.PrometheusAdapterServiceAccount()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter ServiceAccount failed")
}

err = t.client.DeleteServiceAccount(ctx, sa)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter ServiceAccount failed")
}
}
{
cm, err := t.factory.PrometheusAdapterConfigMapAuditPolicy()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter AuditPolicy ConfigMap failed")
}

err = t.client.DeleteConfigMap(ctx, cm)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter AuditPolicy ConfigMap failed")
}
}
{
cm, err := t.factory.PrometheusAdapterConfigMapPrometheus()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter ConfigMap for Prometheus failed")
}

err = t.client.DeleteConfigMap(ctx, cm)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter ConfigMap for Prometheus failed")
}
}
{
s, err := t.factory.PrometheusAdapterService()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter Service failed")
}

err = t.client.DeleteService(ctx, s)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter Service failed")
}
}
// Intermediate variable to hold on to the config map name that the
// prometheus-adapter deployment should target.
var cmName string
{
cmD, err := t.factory.PrometheusAdapterConfigMapDedicated()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter ConfigMap for dedicated ServiceMonitors failed")
}
cm, err := t.factory.PrometheusAdapterConfigMap()
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter ConfigMap failed")
}
if t.config.ClusterMonitoringConfiguration.K8sPrometheusAdapter.DedicatedServiceMonitors.Enabled {
err = t.client.DeleteConfigMap(ctx, cmD)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter ConfigMap for dedicated ServiceMonitors failed")
}
err = t.client.DeleteConfigMap(ctx, cm)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter ConfigMap failed")
}
cmName = cmD.Name
}

tlsSecret, err := t.client.WaitForSecretByNsName(ctx, types.NamespacedName{Namespace: t.namespace, Name: "prometheus-adapter-tls"})
if err != nil {
return errors.Wrap(err, "failed to wait for prometheus-adapter-tls secret")
}

apiAuthConfigmap, err := t.client.WaitForConfigMapByNsName(ctx, types.NamespacedName{Namespace: "kube-system", Name: "extension-apiserver-authentication"})
if err != nil {
return errors.Wrap(err, "failed to wait for kube-system/extension-apiserver-authentication configmap")
}

secret, err := t.factory.PrometheusAdapterSecret(tlsSecret, apiAuthConfigmap)
if err != nil {
return errors.Wrap(err, "failed to get prometheus adapter secret")
}

err = t.client.DeleteSecret(ctx, secret)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter Secret failed")
}

dep, err := t.factory.PrometheusAdapterDeployment(secret.Name, apiAuthConfigmap.Data, cmName)
if err != nil {
return errors.Wrap(err, "initializing PrometheusAdapter Deployment failed")
}

err = t.client.DeleteDeployment(ctx, dep)
if err != nil {
return errors.Wrap(err, "deleting PrometheusAdapter Deployment failed")
}
}
return nil
}

0 comments on commit 8a7f3a3

Please sign in to comment.