# Remove Operator

Simply Deleting/Removing an imported cluster in the Web Console (i.e. Controller) does not automatically remove all artifacts associated with the Kubernetes Mgmt Operator on imported clusters. We provide a tool that can be used to force remove/delete all remaining resources provisioned on imported clusters.

**Important**  
This utility will not delete user deployed resources because these are managed by the customer.  
This utility uses kubectl, helm cli to remove the operator on the cluster.

---

## Usage  
Run the utility provided below with the imported cluster's "bootstrap yaml" that was generated by the controller during the import process.

```
./import-cluster-cleanup.sh my-cluster-bootstrap.yaml
```

---

## Force Remove Script  
```
#!/bin/bash
if [ $# -lt 1 ]; then
    echo "please specify the cluster bootstrap file location as an argument"
    echo  "Usage: ./import-cluster-cleanup.sh my-cluster-bootstrap.yaml" && exit -1
fi
kubectl delete ValidatingWebhookConfiguration rafay-drift-validate
kubectl delete ValidatingWebhookConfiguration rafay-drift-validate-v3
kubectl scale deployment rafay-connector -n rafay-system --replicas=0
kubectl scale deployment rafay-connector-v3 -n rafay-system --replicas=0
kubectl delete rt v1-debug-infra -n rafay-system --timeout=10s
kubectl delete rt v1-logging-infra -n rafay-infra --timeout=10s
kubectl delete rt v2-prometheus -n rafay-infra --timeout=10s
kubectl delete rt v2-alertmanager -n rafay-infra --timeout=10s
kubectl delete rt v1-edge-client -n rafay-system --timeout=10s
kubectl delete rt v2-ingress -n rafay-system --timeout=10s
kubectl delete rt v2-relay-agent -n rafay-system --timeout=10s
kubectl delete rt rafay-restricted-psp -n rafay-system --timeout=10s
kubectl delete rt rafay-privileged-psp -n rafay-system --timeout=10s
kubectl delete rt v2-infra -n rafay-system --timeout=10s
kubectl delete rtl v2-infra -n rafay-system --timeout=10s
helm delete rafay-prometheus -n rafay-infra
helm delete v2-alertmanager -n rafay-infra
helm delete v2-ingress-infra -n rafay-system
helm delete v2-edge-client -n rafay-system
helm delete v2-infra -n rafay-system
kubectl proxy &
for TASK in v1-logging-infra v2-alertmanager v2-prometheus
do
kubectl get rt $TASK -n rafay-infra -o json |jq '.metadata.finalizers = []' > temp.json
curl -ks -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/apis/cluster.rafay.dev/v2/namespaces/rafay-infra/tasks/$TASK/ > /dev/null 2>&1
done
for TASK in v2-ingress v2-infra v2-relay-agent
do
kubectl get rt $TASK -n rafay-system -o json |jq '.metadata.finalizers = []' > temp.json
curl -ks -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/apis/cluster.rafay.dev/v2/namespaces/rafay-system/tasks/$TASK/ > /dev/null 2>&1
done
for TASKLET in v1-logging-infra v2-alertmanager v2-prometheus
do
kubectl get rtl $TASKLET -n rafay-infra -o json |jq '.metadata.finalizers = []' > temp.json
curl -ks -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/apis/cluster.rafay.dev/v2/namespaces/rafay-infra/tasklets/$TASKLET/ > /dev/null 2>&1
done
for TASKLET in v2-ingress v2-infra v2-relay-agent
do
kubectl get rtl $TASKLET -n rafay-system -o json |jq '.metadata.finalizers = []' > temp.json
curl -ks -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/apis/cluster.rafay.dev/v2/namespaces/rafay-system/tasklets/$TASKLET/ > /dev/null 2>&1
done
echo "Waiting for 30 seconds"
sleep 30
kubectl delete rns rafay-infra --timeout=10s
kubectl delete rns rafay-system --timeout=10s
for NAMESPACE in rafay-system rafay-infra
do
kubectl get rns $NAMESPACE -o json |jq '.metadata.finalizers = []' > temp.json
curl -ks -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/apis/cluster.rafay.dev/v2/namespaces/default/namespaces/$NAMESPACE/ > /dev/null 2>&1
done
kubectl delete namespace rafay-infra --timeout=10s
kubectl delete namespace rafay-system --timeout=10s
for NAMESPACE in rafay-system rafay-infra
do
kubectl get namespace $NAMESPACE -o json |jq '.spec = {"finalizers":[]}' > temp.json
curl -ks -H "Content-Type: application/json" -X PUT --data-binary @temp.json 127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize > /dev/null 2>&1
done
echo "Waiting for 30 seconds"
sleep 30
kubectl delete -f $1
killall -9 kubectl
```

---
