Index: /branches/main/.reviewboardrc
===================================================================
--- /branches/main/.reviewboardrc	(nonexistent)
+++ /branches/main/.reviewboardrc	(working copy)
@@ -0,0 +1,3 @@
+REVIEWBOARD_URL = "https://reviewboard.arraynetworks.net"
+REPOSITORY = "Ingress_controller"
+REPOSITORY_TYPE = "svn"
Index: /branches/main/array-ingress-controller/admission/Dockerfile
===================================================================
--- /branches/main/array-ingress-controller/admission/Dockerfile	(revision 12)
+++ /branches/main/array-ingress-controller/admission/Dockerfile	(working copy)
@@ -9,8 +9,6 @@
 RUN go mod tidy
 RUN go build -o admission-controller .
 
-# Set the correct permissions for the schema file
-RUN chmod 644 /app/config/templates/ratelimit-schema.json
 
 # Production stage
 FROM alpine:latest
Index: /branches/main/array-ingress-controller/admission/README.md
===================================================================
--- /branches/main/array-ingress-controller/admission/README.md	(revision 12)
+++ /branches/main/array-ingress-controller/admission/README.md	(working copy)
@@ -34,10 +34,6 @@
   ```sh
   openssl x509 -req -in admission/tls/tls.csr -signkey admission/tls/tls.key -out admission/tls/tls.crt -days 365 -extfile admission/csr.conf -extensions v3_req
   ```
-- Move the generated key and certificate to the `tls/` folder:
-  ```sh
-  mv admission/tls/tls.key admission/tls/tls.crt admission/tls/
-  ```
 
 - Docker installed and running
 - Kubernetes cluster with `kubectl` configured
@@ -53,6 +49,9 @@
 
 2. **Create the TLS Secret**
    Encode `tls.crt` and `tls.key` in base64 and update `secret.yaml`:
+   ```sh
+   base64 -w0 tls.key or tls.crt
+   ```
    ```yaml
    apiVersion: v1
    kind: Secret
@@ -76,7 +75,7 @@
    kind: Service
    metadata:
      name: <service-name>
-     namespace: an-val
+     namespace: <namespace>
      labels:
        app: <app-name>
    spec:
@@ -111,13 +110,13 @@
    apiVersion: admissionregistration.k8s.io/v1
    kind: ValidatingWebhookConfiguration
    metadata:
-     name: annotation-validator-webhook
+     name: <validator-name>
    webhooks:
-     - name: validate.annotations.arraynetworks.com
+     - name: <webhook-name>
        clientConfig:
          service:
-           name: annotation-validator
-           namespace: an-val
+           name: <service_name>
+           namespace: <name>
            path: "/validate"
          caBundle: "<base64-encoded-tls.crt>"
        admissionReviewVersions: ["v1"]
@@ -140,45 +139,60 @@
 
 ## Admission Controller Validation Rules
 
-### Valid HealthCheck Annotation
+### Valid APV-HealthCheck Annotation
 ```yaml
 apv.arraynetworks.com/healthcheck: '{"type" : "http", "interval": 10, "timeout": 10,"retries":10}'
 ```
 
-### Invalid HealthCheck Annotation
+### Invalid APV-HealthCheck Annotation
 ```yaml
 apv.arraynetworks.com/healthcheck: '{"type" : "random", "interval": 10, "timeout": 10,"retries":10}'
 ```
 
-### Valid RateLimit Annotation
+### Valid APV-RateLimit Annotation
 ```yaml
 apv.arraynetworks.com/ratelimit: '{"max_cps": 5000, "soft_bandwidth": 1000, "hard_bandwidth": 500000}'
 ```
 
-### Invalid RateLimit Annotation
+### Invalid APV-RateLimit Annotation
 ```yaml
 apv.arraynetworks.com/ratelimit: '{"ingress_name": "my-ingress", "soft_bandwidth": 100000}'
 ```
 
+### Valid ASF-HealthCheck Annotation
+```yaml
+asf.arraynetworks.com/healthcheck: '{"hc_type" :"icmp","hc_up" : 30,"hc_down":40}'
+```
+
+### Invalid ASF-HealthCheck Annotation
+```yaml
+asf.arraynetworks.com/healthcheck: '{"type" :"icmp","hc_up" : random,"hc_down":40}'
+```
+
 ### Required Fields
-- **RateLimit:** `max_cps`, `soft_bandwidth`, `hard_bandwidth`
-- **HealthCheck:** `type`, `interval`, `timeout`, `retries`
+- **APV-RateLimit:** `max_cps`, `soft_bandwidth`, `hard_bandwidth`
+- **APV-HealthCheck:** `type`, `interval`, `timeout`, `retries`
+- **ASF-HealthCheck:**  `hc_type`, `hc_up`, `hc_down`
 
 ### Allowed Fields
-#### HealthCheck
-- `hc_name`
-- `service_name`
-- `type` (Allowed: `"http"`, `"tcp"`)
-- `hc_up`
-- `hc_down`
-- `ip.ipv4`
-- `port`
-- `interval`
-- `timeout`
-- `retries`
-
-#### RateLimit
-- `max_cps`
-- `soft_bandwidth`
-- `hard_bandwidth`
-
+#### APV-HealthCheck
+- `hc_name`: `string` 
+- `service_name`: `string`
+- `hc_type` (Allowed: `"http"`, `"https"`, `"http2"`, `"https2"`, `"tcp"`, `"tcps"`, `"udp"`, `"script-tcp"`, `"script-tcps"`, `"script-udp"`, `"icmp"`, `"dns"`, `"radius-auth"`, `"radius-acct"`, `"sip over tcp"`, `"sip over udp"`, `"rtsp over tcp"`, `"mysql db"`, `"mysql dbs"`, `"mssql db"`, `"mssql dbs"`, `"oracle db"`, `"ldap"`, `"ftp"`, `"pop3"`, `"smtp"`, `"snmp"`)
+- `hc_up`: `integer`
+- `hc_down`: `integer`
+- `ip.ipv4`: `IPV4 address`
+- `port`: `integer`
+- `interval`: `integer`
+- `timeout`: `integer`
+- `retries`: `integer` 
+
+#### APV-RateLimit
+- `max_cps`: `integer`
+- `soft_bandwidth`: `integer`
+- `hard_bandwidth`: `integer`
+
+### ASF-HealthCheck
+- `hc_type`: (Allowed: `"icmp"`, `"tcp"`, `"http"`,`"https"` )
+- `hc_up`: `integer`
+- `hc_down`: `integer`
Index: /branches/main/array-ingress-controller/admission/config/templates/apv-healthcheck-schema.json
===================================================================
--- /branches/main/array-ingress-controller/admission/config/templates/apv-healthcheck-schema.json	(nonexistent)
+++ /branches/main/array-ingress-controller/admission/config/templates/apv-healthcheck-schema.json	(working copy)
@@ -0,0 +1,55 @@
+{
+    "$schema": "http://json-schema.org/draft-07/schema",
+    "type": "object",
+    "required": [ "hc_type", "interval", "timeout","retries"],
+    "properties": {
+      "ingress_name": {
+        "type": "string"
+      },
+      "hc_name": {
+        "type": "string"
+      },
+      "service_name": {
+        "type": "string"
+      },
+      "hc_type": {
+        "type": "string",
+        "enum": ["http", "https", "http2", "https2", "tcp", "tcps", "udp", "script-tcp", "script-tcps", "script-udp", "icmp", "dns", "radius-auth", "radius-acct", "sip over tcp", "sip over udp", "rtsp over tcp", "mysql db", "mysql dbs", "mssql db", "mssql dbs", "oracle db", "ldap", "ftp", "pop3", "smtp", "snmp"]
+      },
+      "hc_up": {
+        "type": "integer",
+        "minimum": 1,
+        "maximum": 99999
+      },
+      "hc_down": {
+        "type": "integer",
+        "minimum": 1,
+        "maximum": 99999
+      },
+      "ip.ipv4": {
+        "type": "string",
+        "pattern": "^((25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$"
+      },
+      "port": {
+        "type": "integer",
+        "minimum": 1,
+        "maximum": 65535
+      },
+      "interval": {
+        "type": "integer",
+        "minimum": 1,
+        "maximum": 99999
+      },
+      "timeout": {
+        "type": "integer",
+        "minimum": 1,
+        "maximum": 99999
+      },
+      "retries": {
+        "type": "integer",
+        "minimum": 1,
+        "maximum": 99999
+      }
+    }
+  }
+  
\ No newline at end of file
Index: /branches/main/array-ingress-controller/admission/config/templates/apv-ratelimit-schema.json
===================================================================
--- /branches/main/array-ingress-controller/admission/config/templates/apv-ratelimit-schema.json	(nonexistent)
+++ /branches/main/array-ingress-controller/admission/config/templates/apv-ratelimit-schema.json	(working copy)
@@ -0,0 +1,26 @@
+{
+    "$schema": "http://json-schema.org/draft-07/schema",
+    "type": "object",
+    "required": ["max_cps", "soft_bandwidth", "hard_bandwidth"],
+    "properties": {
+      "ingress_name": {
+        "type": "string"
+      },
+      "max_cps": {
+        "type": "integer",
+        "minimum": 1,
+        "maximum": 10000
+      },
+      "soft_bandwidth": {
+        "type": "integer",
+        "minimum": 1,
+        "maximum": 1000000
+      },
+      "hard_bandwidth": {
+        "type": "integer",
+        "minimum": 1,
+        "maximum": 1000000
+      }
+    }
+  }
+  
\ No newline at end of file
Index: /branches/main/array-ingress-controller/admission/config/templates/asf-healthcheck-schema.json
===================================================================
--- /branches/main/array-ingress-controller/admission/config/templates/asf-healthcheck-schema.json	(nonexistent)
+++ /branches/main/array-ingress-controller/admission/config/templates/asf-healthcheck-schema.json	(working copy)
@@ -0,0 +1,23 @@
+{
+    "$schema": "http://json-schema.org/draft-07/schema",
+    "type": "object",
+    "required": [ "hc_type", "hc_up", "hc_down"],
+    "properties": {
+      "hc_type": {
+        "type": "string",
+        "enum": ["icmp", "tcp", "http","https"]
+      },
+      "hc_up": {
+        "type": "integer",
+        "minimum": 1,
+        "maximum": 99999
+      },
+      "hc_down": {
+        "type": "integer",
+        "minimum": 1,
+        "maximum": 99999
+      }
+    },
+    "additionalProperties": false
+  }
+  
\ No newline at end of file
Index: /branches/main/array-ingress-controller/admission/config/templates/asf-realservice-schema.json
===================================================================
--- /branches/main/array-ingress-controller/admission/config/templates/asf-realservice-schema.json	(nonexistent)
+++ /branches/main/array-ingress-controller/admission/config/templates/asf-realservice-schema.json	(working copy)
@@ -0,0 +1,12 @@
+{
+    "$schema": "http://json-schema.org/draft-07/schema",
+    "type": "object",
+    "properties": {
+      "service_type": {
+        "type": "string",
+        "enum": ["TCP", "UDP"]
+      },
+    "additionalProperties": false
+  }
+}
+  
\ No newline at end of file
Index: /branches/main/array-ingress-controller/admission/config/templates/healthcheck-schema.json
===================================================================
--- /branches/main/array-ingress-controller/admission/config/templates/healthcheck-schema.json	(revision 12)
+++ /branches/main/array-ingress-controller/admission/config/templates/healthcheck-schema.json	(nonexistent)
@@ -1,50 +0,0 @@
-{
-    "$schema": "http://json-schema.org/draft-07/schema",
-    "type": "object",
-    "required": [ "type", "interval", "timeout","retries"],
-    "properties": {
-      "ingress_name": {
-        "type": "string"
-      },
-      "hc_name": {
-        "type": "string"
-      },
-      "service_name": {
-        "type": "string"
-      },
-      "type": {
-        "type": "string",
-        "enum": ["http", "tcp"]
-      },
-      "hc_up": {
-        "type": "integer",
-        "minimum": 1
-      },
-      "hc_down": {
-        "type": "integer",
-        "minimum": 1
-      },
-      "ip.ipv4": {
-        "type": "string",
-        "pattern": "^((25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$"
-      },
-      "port": {
-        "type": "integer",
-        "minimum": 1,
-        "maximum": 65535
-      },
-      "interval": {
-        "type": "integer",
-        "minimum": 1
-      },
-      "timeout": {
-        "type": "integer",
-        "minimum": 1
-      },
-      "retries": {
-        "type": "integer",
-        "minimum": 1
-      }
-    }
-  }
-  
\ No newline at end of file
Index: /branches/main/array-ingress-controller/admission/config/templates/ratelimit-schema.json
===================================================================
--- /branches/main/array-ingress-controller/admission/config/templates/ratelimit-schema.json	(revision 12)
+++ /branches/main/array-ingress-controller/admission/config/templates/ratelimit-schema.json	(nonexistent)
@@ -1,26 +0,0 @@
-{
-    "$schema": "http://json-schema.org/draft-07/schema",
-    "type": "object",
-    "required": ["max_cps", "soft_bandwidth", "hard_bandwidth"],
-    "properties": {
-      "ingress_name": {
-        "type": "string"
-      },
-      "max_cps": {
-        "type": "integer",
-        "minimum": 1,
-        "maximum": 10000
-      },
-      "soft_bandwidth": {
-        "type": "integer",
-        "minimum": 1,
-        "maximum": 1000000
-      },
-      "hard_bandwidth": {
-        "type": "integer",
-        "minimum": 1,
-        "maximum": 1000000
-      }
-    }
-  }
-  
\ No newline at end of file
Index: /branches/main/array-ingress-controller/admission/controllers/admission/annotations/apv_healthcheck_validate.go
===================================================================
--- /branches/main/array-ingress-controller/admission/controllers/admission/annotations/apv_healthcheck_validate.go	(nonexistent)
+++ /branches/main/array-ingress-controller/admission/controllers/admission/annotations/apv_healthcheck_validate.go	(working copy)
@@ -0,0 +1,37 @@
+package annotations
+
+import (
+	"fmt"
+
+	"arraynetworks.com/admission-controller/logger"
+	"github.com/xeipuuv/gojsonschema"
+)
+
+var log = logger.GetLogger()
+
+// ValidateHealthCheck validates the health check annotation against a JSON schema.
+func ValidateHealthCheck(rawData string) error {
+	log.Infof("Starting HealthCheck validation...")
+
+	// Load the schema and the document
+	schemaLoader := gojsonschema.NewReferenceLoader("file://./config/templates/apv-healthcheck-schema.json")
+	documentLoader := gojsonschema.NewStringLoader(rawData)
+
+	log.Debugf("Loading HealthCheck schema...")
+	result, err := gojsonschema.Validate(schemaLoader, documentLoader)
+	if err != nil {
+		log.Errorf("Schema validation error: %v", err)
+		return fmt.Errorf("schema validation error: %v", err)
+	}
+
+	if !result.Valid() {
+		log.Warnf("HealthCheck data is invalid:")
+		for _, desc := range result.Errors() {
+			log.Errorf("Validation error: %s", desc)
+		}
+		return fmt.Errorf("invalid health check data: %v", result.Errors())
+	}
+
+	log.Infof("HealthCheck is valid.")
+	return nil
+}
Index: /branches/main/array-ingress-controller/admission/controllers/admission/annotations/apv_ratelimit_validate.go
===================================================================
--- /branches/main/array-ingress-controller/admission/controllers/admission/annotations/apv_ratelimit_validate.go	(nonexistent)
+++ /branches/main/array-ingress-controller/admission/controllers/admission/annotations/apv_ratelimit_validate.go	(working copy)
@@ -0,0 +1,34 @@
+package annotations
+
+import (
+	"fmt"
+
+	"github.com/xeipuuv/gojsonschema"
+)
+
+// ValidateRateLimit validates the rate limit annotation against a JSON schema.
+func ValidateRateLimit(rawData string) error {
+	log.Infof("Starting RateLimit validation...")
+
+	// Load schema and JSON document
+	schemaLoader := gojsonschema.NewReferenceLoader("file://./config/templates/apv-ratelimit-schema.json")
+	documentLoader := gojsonschema.NewStringLoader(rawData)
+
+	log.Debugf("Loading RateLimit schema...")
+	result, err := gojsonschema.Validate(schemaLoader, documentLoader)
+	if err != nil {
+		log.Errorf("Schema validation error: %v", err)
+		return fmt.Errorf("schema validation error: %v", err)
+	}
+
+	if !result.Valid() {
+		log.Warnf("RateLimit data is invalid:")
+		for _, desc := range result.Errors() {
+			log.Errorf("Validation error: %s", desc)
+		}
+		return fmt.Errorf("invalid rate limit data: %v", result.Errors())
+	}
+
+	log.Infof("RateLimit is valid.")
+	return nil
+}
Index: /branches/main/array-ingress-controller/admission/controllers/admission/annotations/asf_healthcheck_validate.go
===================================================================
--- /branches/main/array-ingress-controller/admission/controllers/admission/annotations/asf_healthcheck_validate.go	(nonexistent)
+++ /branches/main/array-ingress-controller/admission/controllers/admission/annotations/asf_healthcheck_validate.go	(working copy)
@@ -0,0 +1,33 @@
+package annotations
+
+import (
+	"fmt"
+
+	"github.com/xeipuuv/gojsonschema"
+)
+
+func ValidateASFHealthCheck(rawData string) error {
+	log.Infof("Starting ASFHealthCheck validation...")
+
+	// Load the schema and the data
+	schemaLoader := gojsonschema.NewReferenceLoader("file://./config/templates/asf-healthcheck-schema.json")
+	documentLoader := gojsonschema.NewStringLoader(rawData)
+
+	// Validate using the schema
+	result, err := gojsonschema.Validate(schemaLoader, documentLoader)
+	if err != nil {
+		log.Errorf("Schema validation error: %v", err)
+		return fmt.Errorf("schema validation error: %v", err)
+	}
+
+	if !result.Valid() {
+		log.Warnf("ASFHealthCheck data is invalid:")
+		for _, desc := range result.Errors() {
+			log.Errorf("Validation error: %s", desc)
+		}
+		return fmt.Errorf("invalid ASF health check data: %v", result.Errors())
+	}
+
+	log.Infof("ASFHealthCheck is valid and matches the schema.")
+	return nil
+}
Index: /branches/main/array-ingress-controller/admission/controllers/admission/annotations/asf_realservice_validate.go
===================================================================
--- /branches/main/array-ingress-controller/admission/controllers/admission/annotations/asf_realservice_validate.go	(nonexistent)
+++ /branches/main/array-ingress-controller/admission/controllers/admission/annotations/asf_realservice_validate.go	(working copy)
@@ -0,0 +1,33 @@
+package annotations
+
+import (
+	"fmt"
+
+	"github.com/xeipuuv/gojsonschema"
+)
+
+func ValidateASFRealService(rawData string) error {
+	log.Infof("Starting ASFRealService validation...")
+
+	// Load the schema and the data
+	schemaLoader := gojsonschema.NewReferenceLoader("file://./config/templates/asf-realservice-schema.json")
+	documentLoader := gojsonschema.NewStringLoader(rawData)
+
+	// Validate using the schema
+	result, err := gojsonschema.Validate(schemaLoader, documentLoader)
+	if err != nil {
+		log.Errorf("Schema validation error: %v", err)
+		return fmt.Errorf("schema validation error: %v", err)
+	}
+
+	if !result.Valid() {
+		log.Warnf("ASFRealService data is invalid:")
+		for _, desc := range result.Errors() {
+			log.Errorf("Validation error: %s", desc)
+		}
+		return fmt.Errorf("invalid ASFRealService data: %v", result.Errors())
+	}
+
+	log.Infof("ASFRealService is valid and matches the schema.")
+	return nil
+}
Index: /branches/main/array-ingress-controller/admission/controllers/admission/annotations/healthcheck_validate.go
===================================================================
--- /branches/main/array-ingress-controller/admission/controllers/admission/annotations/healthcheck_validate.go	(revision 12)
+++ /branches/main/array-ingress-controller/admission/controllers/admission/annotations/healthcheck_validate.go	(nonexistent)
@@ -1,112 +0,0 @@
-package annotations
-
-import (
-	"encoding/json"
-	"fmt"
-	"regexp"
-
-	"arraynetworks.com/admission-controller/logger"
-
-	"github.com/xeipuuv/gojsonschema"
-)
-
-// HealthCheck struct to hold parsed health check data.
-type HealthCheck struct {
-	IngressName   string `json:"ingress_name"`
-	HCName        string `json:"hc_name"`
-	ServiceName   string `json:"service_name"`
-	Type          string `json:"type"`
-	HCUp          int    `json:"hc_up"`
-	HCDown        int    `json:"hc_down"`
-	IPV4          string `json:"ip.ipv4"`
-	Port          int    `json:"port"`
-	SendInterval  int    `json:"interval"`
-	ServerTimeout int    `json:"timeout"`
-	retries       int    `json:"retries"`
-}
-
-// ValidateHealthCheck validates the health check annotation against a JSON schema.
-var log = logger.GetLogger()
-
-// ValidateHealthCheck validates the health check annotation against a JSON schema.
-func ValidateHealthCheck(rawData string) error {
-	log.Infof("Starting HealthCheck validation...")
-
-	// Load the schema for validation
-	schemaLoader := gojsonschema.NewReferenceLoader("file://./config/templates/healthcheck-schema.json")
-	documentLoader := gojsonschema.NewStringLoader(rawData)
-
-	log.Debugf("Loading HealthCheck schema...")
-	result, err := gojsonschema.Validate(schemaLoader, documentLoader)
-	if err != nil {
-		log.Errorf("Schema validation error: %v", err)
-		return fmt.Errorf("schema validation error: %v", err)
-	}
-
-	if !result.Valid() {
-		log.Warnf("HealthCheck data is invalid:")
-		for _, desc := range result.Errors() {
-			log.Errorf("Validation error: %s", desc)
-		}
-		return fmt.Errorf("invalid health check data: %v", result.Errors())
-	}
-
-	var healthCheckMap map[string]interface{}
-	if err := json.Unmarshal([]byte(rawData), &healthCheckMap); err != nil {
-		log.Errorf("Failed to parse HealthCheck: %v", err)
-		return fmt.Errorf("failed to parse health check: %v", err)
-	}
-
-	// Optional field validations (validate only if present)
-	validatePositiveNumber(healthCheckMap, "hc_up")
-	validatePositiveNumber(healthCheckMap, "hc_down")
-	validatePort(healthCheckMap, "port")
-	validateIPv4(healthCheckMap, "ip.ipv4")
-	validatePositiveNumber(healthCheckMap, "interval")
-	validatePositiveNumber(healthCheckMap, "timeout")
-	validatePositiveNumber(healthCheckMap, "retries")
-
-	log.Infof("HealthCheck is valid: %+v", healthCheckMap)
-	return nil
-}
-
-func validatePositiveNumber(data map[string]interface{}, key string) error {
-	if val, ok := data[key].(float64); ok {
-		if val <= 0 {
-			log.Errorf("Invalid %s value: %d", key, int(val))
-			return fmt.Errorf("invalid %s value: %d", key, int(val))
-		}
-	} else if data[key] != nil {
-		log.Errorf("Invalid %s value: %v", key, data[key])
-		return fmt.Errorf("invalid %s value: %v", key, data[key])
-	}
-	return nil
-}
-
-func validatePort(data map[string]interface{}, key string) error {
-	if val, ok := data[key].(float64); ok {
-		if val <= 0 || val > 65535 {
-			log.Errorf("Invalid %s value: %v", key, val)
-			return fmt.Errorf("invalid %s value: %v", key, val)
-		}
-	} else if data[key] != nil {
-		log.Errorf("Invalid %s value: %v", key, data[key])
-		return fmt.Errorf("invalid %s value: %v", key, data[key])
-	}
-	return nil
-}
-
-func validateIPv4(data map[string]interface{}, key string) error {
-	if ipv4, ok := data[key].(string); ok {
-		ipPattern := `^((25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$`
-		matched, _ := regexp.MatchString(ipPattern, ipv4)
-		if !matched {
-			log.Errorf("Invalid %s value: %s", key, ipv4)
-			return fmt.Errorf("invalid %s value: %s", key, ipv4)
-		}
-	} else if data[key] != nil {
-		log.Errorf("Invalid %s value: %v", key, data[key])
-		return fmt.Errorf("invalid %s value: %v", key, data[key])
-	}
-	return nil
-}
Index: /branches/main/array-ingress-controller/admission/controllers/admission/annotations/ratelimit_validate.go
===================================================================
--- /branches/main/array-ingress-controller/admission/controllers/admission/annotations/ratelimit_validate.go	(revision 12)
+++ /branches/main/array-ingress-controller/admission/controllers/admission/annotations/ratelimit_validate.go	(nonexistent)
@@ -1,86 +0,0 @@
-package annotations
-
-import (
-	"encoding/json"
-	"fmt"
-
-	"github.com/xeipuuv/gojsonschema"
-)
-
-// RateLimit struct to hold parsed rate limit data.
-type RateLimit struct {
-	IngressName   string `json:"ingress_name"`
-	MaxCPS        int    `json:"max_cps"`
-	SoftBandwidth int    `json:"soft_bandwidth"`
-	HardBandwidth int    `json:"hard_bandwidth"`
-}
-
-// ValidateRateLimit validates the rate limit annotation against a JSON schema.
-func ValidateRateLimit(rawData string) error {
-	log.Infof("Starting RateLimit validation...")
-
-	// Load the schema for validation
-	schemaLoader := gojsonschema.NewReferenceLoader("file://./config/templates/ratelimit-schema.json")
-	documentLoader := gojsonschema.NewStringLoader(rawData)
-
-	// Log schema loading
-	log.Debugf("Loading RateLimit schema...")
-	result, err := gojsonschema.Validate(schemaLoader, documentLoader)
-	if err != nil {
-		log.Errorf("Schema validation error: %v", err)
-		return fmt.Errorf("schema validation error: %v", err)
-	}
-
-	// Check if the schema is valid or not
-	if !result.Valid() {
-		log.Warnf("RateLimit data is invalid:")
-		for _, desc := range result.Errors() {
-			log.Errorf("Validation error: %s", desc)
-		}
-		return fmt.Errorf("invalid rate limit data: %v", result.Errors())
-	}
-
-	// Parse the raw data into a generic map to ensure correct types
-	var rateLimitMap map[string]interface{}
-	if err := json.Unmarshal([]byte(rawData), &rateLimitMap); err != nil {
-		log.Errorf("Failed to parse RateLimit: %v", err)
-		return fmt.Errorf("failed to parse rate limit: %v", err)
-	}
-
-	// Validate MaxCPS if present
-	if maxCPS, ok := rateLimitMap["max_cps"].(float64); ok {
-		if maxCPS != float64(int(maxCPS)) {
-			log.Errorf("MaxCPS is not an integer: %v", maxCPS)
-			return fmt.Errorf("max_cps must be an integer, got: %v", maxCPS)
-		}
-	} else if rateLimitMap["max_cps"] != nil {
-		log.Errorf("Invalid MaxCPS value: %v", rateLimitMap["max_cps"])
-		return fmt.Errorf("invalid max_cps value: %v", rateLimitMap["max_cps"])
-	}
-
-	// Validate SoftBandwidth if present
-	if softBandwidth, ok := rateLimitMap["soft_bandwidth"].(float64); ok {
-		if softBandwidth != float64(int(softBandwidth)) {
-			log.Errorf("SoftBandwidth is not an integer: %v", softBandwidth)
-			return fmt.Errorf("soft_bandwidth must be an integer, got: %v", softBandwidth)
-		}
-	} else if rateLimitMap["soft_bandwidth"] != nil {
-		log.Errorf("Invalid SoftBandwidth value: %v", rateLimitMap["soft_bandwidth"])
-		return fmt.Errorf("invalid soft_bandwidth value: %v", rateLimitMap["soft_bandwidth"])
-	}
-
-	// Validate HardBandwidth if present
-	if hardBandwidth, ok := rateLimitMap["hard_bandwidth"].(float64); ok {
-		if hardBandwidth != float64(int(hardBandwidth)) {
-			log.Errorf("HardBandwidth is not an integer: %v", hardBandwidth)
-			return fmt.Errorf("hard_bandwidth must be an integer, got: %v", hardBandwidth)
-		}
-	} else if rateLimitMap["hard_bandwidth"] != nil {
-		log.Errorf("Invalid HardBandwidth value: %v", rateLimitMap["hard_bandwidth"])
-		return fmt.Errorf("invalid hard_bandwidth value: %v", rateLimitMap["hard_bandwidth"])
-	}
-
-	// Log successful validation
-	log.Infof("RateLimit is valid and all values are correct.")
-	return nil
-}
Index: /branches/main/array-ingress-controller/admission/controllers/admission/validation/validate.go
===================================================================
--- /branches/main/array-ingress-controller/admission/controllers/admission/validation/validate.go	(revision 12)
+++ /branches/main/array-ingress-controller/admission/controllers/admission/validation/validate.go	(working copy)
@@ -17,7 +17,7 @@
 // allowedASFAnnotations - Allowed keys for ASF class
 var allowedASFAnnotations = map[string]bool{
 	"asf.arraynetworks.com/healthcheck": true,
-	"asf.arraynetworks.com/ratelimit":   true,
+	"asf.arraynetworks.com/realservice": true,
 }
 
 var log = logger.GetLogger()
@@ -79,25 +79,23 @@
 			}
 		}
 	}
-
+	// Validate RealService Annotation
+	if realService, ok := annotationsMap["asf.arraynetworks.com/realservice"]; ok {
+		log.Infof("Validating ASF realservice annotation...")
+		if err := annotations.ValidateASFRealService(realService); err != nil {
+			log.Errorf("Invalid ASF realservice annotation: %v", err)
+			return fmt.Errorf("invalid ASF realservice annotation: %v", err)
+		}
+	}
 	// Validate HealthCheck Annotation
 	if healthCheck, ok := annotationsMap["asf.arraynetworks.com/healthcheck"]; ok {
 		log.Infof("Validating ASF healthcheck annotation...")
-		if err := annotations.ValidateHealthCheck(healthCheck); err != nil {
+		if err := annotations.ValidateASFHealthCheck(healthCheck); err != nil {
 			log.Errorf("Invalid ASF healthcheck annotation: %v", err)
 			return fmt.Errorf("invalid ASF healthcheck annotation: %v", err)
 		}
 	}
 
-	// Validate RateLimit Annotation
-	if rateLimit, ok := annotationsMap["asf.arraynetworks.com/ratelimit"]; ok {
-		log.Infof("Validating ASF ratelimit annotation...")
-		if err := annotations.ValidateRateLimit(rateLimit); err != nil {
-			log.Errorf("Invalid ASF ratelimit annotation: %v", err)
-			return fmt.Errorf("invalid ASF ratelimit annotation: %v", err)
-		}
-	}
-
 	log.Infof("ASF annotations validated successfully.")
 	return nil
 }
Index: /branches/main/array-ingress-controller/admission/deployment.yaml
===================================================================
--- /branches/main/array-ingress-controller/admission/deployment.yaml	(revision 12)
+++ /branches/main/array-ingress-controller/admission/deployment.yaml	(working copy)
@@ -4,20 +4,20 @@
   name: <name>
   namespace: <namespace>
   labels:
-    app: annotation-validator
+    app: <app-name>
 spec:
   replicas: 1
   selector:
     matchLabels:
-      app: annotation-validator
+      app: <app-name>
   template:
     metadata:
       labels:
-        app: annotation-validator
+        app: <app-name>
     spec:
       containers:
         - name: validator
-          image:  <image-registry>/annotation-validator:latest
+          image:  <image-registry>/admission-controller:latest
           imagePullPolicy: Always
           securityContext:
             runAsNonRoot: true
Index: /branches/main/array-ingress-controller/admission/service.yaml
===================================================================
--- /branches/main/array-ingress-controller/admission/service.yaml	(revision 12)
+++ /branches/main/array-ingress-controller/admission/service.yaml	(working copy)
@@ -2,7 +2,7 @@
 kind: Service
 metadata:
   name: <service-name>
-  namespace: an-val
+  namespace: <namespace>
   labels:
     app: <app-name>
 spec:
Index: /branches/main/array-ingress-controller/admission/validating-webhook.yaml
===================================================================
--- /branches/main/array-ingress-controller/admission/validating-webhook.yaml	(revision 12)
+++ /branches/main/array-ingress-controller/admission/validating-webhook.yaml	(working copy)
@@ -1,13 +1,13 @@
 apiVersion: admissionregistration.k8s.io/v1
 kind: ValidatingWebhookConfiguration
 metadata:
-  name: annotation-validator-webhook
+  name: <validatior-name>
 webhooks:
-  - name: validate.annotations.arraynetworks.com
+  - name: <webhook-name>
     clientConfig:
       service:
-        name: annotation-validator
-        namespace: an-val
+        name: <name>
+        namespace: <namespace>
         path: "/validate"
       caBundle: "CABundle-CERT-HERE"
     admissionReviewVersions: ["v1"]
Index: /branches/main/array-ingress-controller/apvadapter/annotations/health/go.mod
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/annotations/health/go.mod	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/annotations/health/go.mod	(nonexistent)
@@ -1,27 +0,0 @@
-module arraynetworks.com/array-ingress-controller/apvadapter/health
-
-go 1.23.6
-
-replace (
-	arraynetworks.com/array-ingress-controller/apvclient => ../../apvclient
-	arraynetworks.com/array-ingress-controller/configstore => ../../../configstore
-	arraynetworks.com/array-ingress-controller/logger => ../../../logger
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/apvclient v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	gorm.io/gorm v1.25.12
-)
-
-require (
-	github.com/go-resty/resty/v2 v2.16.5 // indirect
-	github.com/jinzhu/inflection v1.0.0 // indirect
-	github.com/jinzhu/now v1.1.5 // indirect
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	golang.org/x/text v0.21.0 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-)
Index: /branches/main/array-ingress-controller/apvadapter/annotations/health/go.sum
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/annotations/health/go.sum	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/annotations/health/go.sum	(nonexistent)
@@ -1,50 +0,0 @@
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
-github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
-golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
Index: /branches/main/array-ingress-controller/apvadapter/annotations/health/health.go
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/annotations/health/health.go	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/annotations/health/health.go	(working copy)
@@ -100,11 +100,11 @@
 func (hc *HealthCheckConfig) CreateHealthCheck() error {
 	client := apvclient.GetAPVClient()
 	jsonData, err := json.Marshal(hc)
-	log.Infof("Creating health check with payload: %s", string(jsonData))
 	if err != nil {
 		log.Errorf("Error marshalling health check JSON: %v", err)
 		return err
 	}
+	log.Debugf("Creating health check with payload: %s", string(jsonData))
 	log.Infof("Creating health check: %s", hc.HCName)
 
 	annotationUrl := apvurlbuilder.GetAnnotationURL(apvurlbuilder.BaseURL["HealthCheck"])
@@ -114,8 +114,8 @@
 		return err
 	}
 	log.Infof("Health check created successfully: %s", hc.HCName)
-	log.Infof("Response Body: %s", resp.String())
-	log.Infof("Response Status Code: %v", resp.StatusCode())
+	log.Debugf("Response Body: %s", resp.String())
+	log.Debugf("Response Status Code: %v", resp.StatusCode())
 
 	return nil
 }
@@ -134,11 +134,11 @@
 		HCHttpResponse: hc.HCHttpResponse,
 	}
 	jsonData, err := json.Marshal(healthUpdatePayload)
-	log.Infof("Updating health check with payload: %s", string(jsonData))
 	if err != nil {
 		log.Errorf("Error marshalling health check update JSON: %v", err)
 		return err
 	}
+	log.Debugf("Updating health check with payload: %s", string(jsonData))
 	log.Infof("Updating health check: %s", hc.HCName)
 	annotationUrl := apvurlbuilder.GetAnnotationURL(apvurlbuilder.BaseURL["HealthCheck"], hc.HCName)
 
@@ -149,8 +149,8 @@
 		return err
 	}
 	log.Infof("Health check updated successfully: %s", hc.HCName)
-	log.Infof("Response Body: %s", resp.String())
-	log.Infof("Response Status Code: %v", resp.StatusCode())
+	log.Debugf("Response Body: %s", resp.String())
+	log.Debugf("Response Status Code: %v", resp.StatusCode())
 
 	return nil
 }
@@ -160,13 +160,14 @@
 	client := apvclient.GetAPVClient()
 	log.Infof("Deleting health check: %s", hc.HCName)
 	endpoint := apvurlbuilder.GetAnnotationURL(apvurlbuilder.BaseURL["RealService"], hc.RealService[0].ServiceName+"/health_checks/"+hc.HCName)
+	log.Debugf("Deleting health check with URL: %s", endpoint)
 	resp, err := client.Delete(endpoint)
 	if err != nil {
 		log.Errorf("Error deleting health check: %v", err)
 		return err
 	}
 	log.Infof("Health check deleted successfully: %s", hc.HCName)
-	log.Infof("Response Body: %s", resp.String())
-	log.Infof("Response Status Code: %v", resp.StatusCode())
+	log.Debugf("Response Body: %s", resp.String())
+	log.Debugf("Response Status Code: %v", resp.StatusCode())
 	return nil
 }
Index: /branches/main/array-ingress-controller/apvadapter/annotations/ratelimit/go.mod
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/annotations/ratelimit/go.mod	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/annotations/ratelimit/go.mod	(nonexistent)
@@ -1,23 +0,0 @@
-module arraynetworks.com/array-ingress-controller/apvclient/ratelimit
-
-go 1.23.6
-
-replace (
-	arraynetworks.com/array-ingress-controller/apvclient => ../../apvclient
-	arraynetworks.com/array-ingress-controller/configstore => ../../../configstore
-	arraynetworks.com/array-ingress-controller/logger => ../../../logger
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/apvclient v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-)
-
-require (
-	github.com/go-resty/resty/v2 v2.16.5 // indirect
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-)
Index: /branches/main/array-ingress-controller/apvadapter/annotations/ratelimit/go.sum
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/annotations/ratelimit/go.sum	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/annotations/ratelimit/go.sum	(nonexistent)
@@ -1,44 +0,0 @@
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
-github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
-golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Index: /branches/main/array-ingress-controller/apvadapter/annotations/ratelimit/ratelimit.go
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/annotations/ratelimit/ratelimit.go	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/annotations/ratelimit/ratelimit.go	(working copy)
@@ -77,20 +77,19 @@
 	}
 
 	jsonData, err := json.Marshal(ratelimitUpdatePayload)
-
 	if err != nil {
 		log.Errorf("Error marshalling rate limit JSON: %v", err)
 		return err
 	}
-
+	log.Debugf("Creating Rate limit with Payload: %s", string(jsonData))
 	annotationURL := apvurlbuilder.GetAnnotationURL(apvurlbuilder.BaseURL["RealService"], rl.ServiceName)
 	resp, err = client.Update(annotationURL, jsonData)
 	if err != nil {
 		log.Errorf("Error creating rate limit: %v", err)
 		return err
 	}
-	log.Infof("Response Body: %s", resp.String())
-	log.Infof("Response Status Code: %v", resp.StatusCode())
+	log.Debugf("Response Body: %s", resp.String())
+	log.Debugf("Response Status Code: %v", resp.StatusCode())
 	log.Infof("Ratelimit Created Successfully")
 
 	return nil
@@ -117,15 +116,15 @@
 		log.Errorf("Error marshalling rate limit JSON: %v", err)
 		return err
 	}
-
+	log.Debugf("Creating Rate limit with Payload: %s", string(jsonData))
 	annotationURL := apvurlbuilder.GetAnnotationURL(apvurlbuilder.BaseURL["RealService"], rl.ServiceName)
 	resp, err = client.Update(annotationURL, jsonData)
 	if err != nil {
 		log.Errorf("Error updating rate limit: %v", err)
 		return err
 	}
-	log.Infof("Response Body: %s", resp.String())
-	log.Infof("Response Status Code: %v", resp.StatusCode())
+	log.Debugf("Response Body: %s", resp.String())
+	log.Debugf("Response Status Code: %v", resp.StatusCode())
 	log.Infof("Ratelimit Updated Successfully")
 	return nil
 }
@@ -160,13 +159,14 @@
 	}
 
 	annotationURL := apvurlbuilder.GetAnnotationURL(apvurlbuilder.BaseURL["RealService"], rl.ServiceName)
+	log.Debugf("Deleting rate limit with URL: %s", annotationURL)
 	resp, err = client.Update(annotationURL, jsonData)
 	if err != nil {
 		log.Errorf("Error resetting rate limit: %v", err)
 		return err
 	}
-	log.Infof("Response Body: %s", resp.String())
-	log.Infof("Response Status Code: %v", resp.StatusCode())
+	log.Debugf("Response Body: %s", resp.String())
+	log.Debugf("Response Status Code: %v", resp.StatusCode())
 	log.Infof("Ratelimit Deleted Successfully")
 
 	return nil
Index: /branches/main/array-ingress-controller/apvadapter/apvclient/apvclient.go
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/apvclient/apvclient.go	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/apvclient/apvclient.go	(working copy)
@@ -15,6 +15,8 @@
 
 var apvInstance *APVClient
 
+// GetAPVClient returns a singleton instance of APVClient
+// and initializes it if it is not already created or if it is unhealthy.
 func GetAPVClient() *APVClient {
 	if apvInstance == nil || !apvInstance.IsHealthy("health-check-url") {
 		config := baseclient.LoadConfig("APV")
Index: /branches/main/array-ingress-controller/apvadapter/apvclient/go.mod
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/apvclient/go.mod	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/apvclient/go.mod	(nonexistent)
@@ -1,18 +0,0 @@
-module arraynetworks.com/array-ingress-controller/apvclient
-
-go 1.23.6
-
-replace arraynetworks.com/array-ingress-controller/logger => ../../logger
-
-require (
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	github.com/go-resty/resty/v2 v2.16.5
-)
-
-require (
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-)
Index: /branches/main/array-ingress-controller/apvadapter/apvclient/go.sum
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/apvclient/go.sum	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/apvclient/go.sum	(nonexistent)
@@ -1,44 +0,0 @@
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
-github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
-golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Index: /branches/main/array-ingress-controller/apvadapter/apvurlbuilder/go.mod
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/apvurlbuilder/go.mod	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/apvurlbuilder/go.mod	(nonexistent)
@@ -1,3 +0,0 @@
-module arraynetworks.com/array-ingress-controller/apvadapter/apvurlbuilder
-
-go 1.23.6
Index: /branches/main/array-ingress-controller/apvadapter/client_test.go
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/client_test.go	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/client_test.go	(nonexistent)
@@ -1,94 +0,0 @@
-//go:build !production
-// +build !production
-
-package apvadapter_test
-
-import (
-	"bytes"
-	"encoding/json"
-	"errors"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-
-	"array-ingress-ctrl/apvadapter"
-	"array-ingress-ctrl/mocks"
-	"github.com/golang/mock/gomock"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-	"github.com/go-resty/resty/v2"
-)
-
-func TestServiceClient(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "ServiceClient Suite")
-}
-
-var _ = Describe("ServiceClient", func() {
-	var (
-		mockCtrl    *gomock.Controller
-		mockClient  *mocks.MockHttpClient
-		serviceClient *apvadapter.ServiceClient
-		testServer  *httptest.Server
-	)
-
-	BeforeEach(func() {
-		mockCtrl = gomock.NewController(GinkgoT())
-		mockClient = mocks.NewMockHttpClient(mockCtrl)
-		testServer = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-			w.WriteHeader(http.StatusOK)
-			w.Write([]byte(`{"message": "success"}`))
-		}))
-
-		serviceClient = &apvadapter.ServiceClient{
-			Client: resty.New(),
-			Authenticator: &apvadapter.BasicAuthenticator{
-				Username: "test-user",
-				Password: "test-pass",
-			},
-		}
-	})
-
-	AfterEach(func() {
-		mockCtrl.Finish()
-		testServer.Close()
-	})
-
-	Context("Fetch", func() {
-		It("should return success response", func() {
-			err := serviceClient.Fetch(testServer.URL)
-			Expect(err).To(BeNil())
-		})
-
-		It("should return an error when request fails", func() {
-			testServer.Close()
-			err := serviceClient.Fetch(testServer.URL)
-			Expect(err).ToNot(BeNil())
-		})
-	})
-
-	Context("Create", func() {
-		It("should successfully send a POST request", func() {
-			payload := map[string]string{"key": "value"}
-			body, _ := json.Marshal(payload)
-			err := serviceClient.Create(testServer.URL, bytes.NewBuffer(body))
-			Expect(err).To(BeNil())
-		})
-	})
-
-	Context("Delete", func() {
-		It("should successfully send a DELETE request", func() {
-			payload := map[string]string{"key": "value"}
-			err := serviceClient.Delete(testServer.URL+"/%s", "test-service", payload)
-			Expect(err).To(BeNil())
-		})
-	})
-
-	Context("Patch", func() {
-		It("should successfully send a PATCH request", func() {
-			payload := map[string]string{"key": "value"}
-			err := serviceClient.Patch(testServer.URL+"/%s", "test-service", payload)
-			Expect(err).To(BeNil())
-		})
-	})
-})
\ No newline at end of file
Index: /branches/main/array-ingress-controller/apvadapter/cmd.go
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/cmd.go	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/cmd.go	(working copy)
@@ -26,7 +26,7 @@
 
 // FetchServices fetches all services with status = 'WAITING' from the database
 func FetchServices() []configstore.RealService {
-	log.Info("Fetching realservices...")
+	log.Info("Fetching APV-RealServices...")
 
 	var services []configstore.RealService
 	dbclient, err := configstore.Get()
@@ -38,16 +38,16 @@
 	// Fetch only services with status = 'WAITING'
 	err = dbclient.ReadByStatus("WAITING", &services)
 	if err != nil {
-		log.Errorf("Error fetching services: %v", err)
+		log.Errorf("Error fetching APV-RealServices: %v", err)
 		return nil
 	}
 
 	return services
 }
 
-// FetchHealthCheck fetches all healthchecks with status = 'WAITING' from the database
+// FetchHealthCheck fetches all APV-HealthChecks with status = 'WAITING' from the database
 func FetchHealthCheck() []configstore.HealthCheck {
-	log.Info("Fetching Healthchecks...")
+	log.Info("Fetching APV-HealthChecks...")
 
 	var healthchecks []configstore.HealthCheck
 	dbclient, err := configstore.Get()
@@ -56,10 +56,10 @@
 		return nil
 	}
 
-	// Fetch only healthchecks with status = 'WAITING'
+	// Fetch only APV-HealthChecks with status = 'WAITING'
 	err = dbclient.ReadByStatus("WAITING", &healthchecks)
 	if err != nil {
-		log.Errorf("Error fetching healthchecks: %v", err)
+		log.Errorf("Error fetching APV-HealthChecks: %v", err)
 		return nil
 	}
 
@@ -68,7 +68,7 @@
 
 // FetchRateLimit fetches all ratelimits with status = 'WAITING' from the database
 func FetchRateLimit() []configstore.RateLimit {
-	log.Info("Fetching RateLimits...")
+	log.Info("Fetching APV-RateLimits...")
 
 	var rateLimits []configstore.RateLimit
 	dbclient, err := configstore.Get()
@@ -80,14 +80,16 @@
 	// Fetch only ratelimits with status = 'WAITING'
 	err = dbclient.ReadByStatus("WAITING", &rateLimits)
 	if err != nil {
-		log.Errorf("Error fetching ratelimits: %v", err)
+		log.Errorf("Error fetching APV-RateLimits: %v", err)
 		return nil
 	}
 
 	return rateLimits
 }
 
-// ProcessService processes each service by calling realservice functions
+// ProcessService processes each service by callingAPV-Realservice functions
+// and updates the status in the database
+// It also handles the retry logic for creating, updating, or deleting services.
 func ProcessService(svc *configstore.RealService) {
 	dbclient, err := configstore.Get()
 	if dbclient == nil {
@@ -102,22 +104,22 @@
 		log.Info("TEST environment detected, setting APV availability to true")
 		available := true
 		if !available {
-			log.Error("APV is not available")
+			log.Error("APV is NOT Available")
 			return
 		} else {
-			log.Info("APV is available")
+			log.Info("APV is Available")
 		}
 	} else {
 		select {
 		case available := <-watchtower.GetDeviceStatusChan():
 			if !available {
-				log.Error("APV is not available")
+				log.Debug("APV is NOT Available")
 				return
 			} else {
-				log.Info("APV is available")
+				log.Debug("APV is Available")
 			}
 		case <-time.After(30 * time.Second):
-			log.Warn("APV status not received")
+			log.Warn("APV status NOT received")
 			return
 		}
 	}
@@ -129,11 +131,11 @@
 	}
 	svc.Status = "INPROGRESS"
 	if err = dbclient.Update(svc, conditions); err != nil {
-		log.Errorf("Failed to update status to INPROGRESS for service %s: %v", svc.ServiceName, err)
+		log.Errorf("Failed to update status to INPROGRESS for APV-Realservice %s: %v", svc.ServiceName, err)
 		return
 	}
 
-	// Create RealService instance from configstore.Service
+	// Create APV-Realservice instance from configstore.Service
 	rs := realservice.NewRealService(
 		svc.ServiceName,
 		svc.IPAddress,
@@ -152,7 +154,7 @@
 		case "DELETE":
 			err = rs.DeleteRealService()
 		default:
-			log.Errorf("Invalid operation %s for service %s", svc.CurrentOp, svc.ServiceName)
+			log.Errorf("Invalid operation %s for APV-Realservice %s", svc.CurrentOp, svc.ServiceName)
 			svc.Status = "FAILED"
 			_ = dbclient.Update(svc, conditions)
 			MarkLinkedResourcesAsFailed(svc.ServiceName)
@@ -163,26 +165,26 @@
 			// Success → Update status to COMPLETED
 			svc.Status = "COMPLETED"
 			if err := dbclient.Update(svc, conditions); err != nil {
-				log.Errorf("Failed to update status to COMPLETED for service %s: %v", svc.ServiceName, err)
+				log.Errorf("Failed to update status to COMPLETED for APV-Realservice %s: %v", svc.ServiceName, err)
 			}
 			if svc.CurrentOp == "DELETE" {
-				//When RealService is successfully deleted then the Ratelimit and HealthCheck
-				// which is associated with the RealService are deleted automatically by APV
-				// Hence there is no need to delete them individually after deleteing a Realservice
+				//When APV-Realservice is successfully deleted then the Ratelimit and APV-HealthCheck
+				// which is associated with the APV-Realservice are deleted automatically by APV
+				// Hence there is no need to delete them individually after deleteing a APV-Realservice
 
-				// Removes Associated Healthcheck with the RealService
+				// Removes Associated APV-HealthCheck with the APV-Realservice
 				removeAssociatedHealthChecks(svc.ServiceName)
-				// Removes Associated Ratelimit with the RealService
+				// Removes Associated Ratelimit with the APV-Realservice
 				removeAssociatedRateLimits(svc.ServiceName)
-				//Removes The realservice Entry by itself
+				//Removes The APV-Realservice Entry by itself
 				removeRealService(svc.ServiceName)
-				log.Infof("Deleted Associated resources for Realservice %s", svc.ServiceName)
+				log.Infof("Deleted Associated resources for APV-Realservice %s", svc.ServiceName)
 			}
 			return
 		}
 
 		// Log the error and retry
-		log.Errorf("Error processing service %s (attempt %d/%d): %v", svc.ServiceName, retryCount+1, MaxRetries, err)
+		log.Errorf("Error processing APV-Realservice %s (Attempt %d/%d): %v", svc.ServiceName, retryCount+1, MaxRetries, err)
 		retryCount++
 		time.Sleep(5 * time.Second)
 	}
@@ -190,14 +192,21 @@
 	// If we reach max retries → Mark as FAILED
 	svc.Status = "FAILED"
 	if err := dbclient.Update(svc, conditions); err != nil {
-		log.Errorf("Failed to update status to FAILED for service %s: %v", svc.ServiceName, err)
+		log.Errorf("Failed to update status to FAILED for APV-Realservice %s: %v", svc.ServiceName, err)
 	} else {
-		log.Errorf("Service %s failed after %d retries, marked as FAILED", svc.ServiceName, MaxRetries)
+		log.Errorf("RealService %s failed after %d retries, marked as FAILED", svc.ServiceName, MaxRetries)
+		// Mark linked APV-HealthChecks and RateLimits as FAILED
+		// This is to ensure that if the APV-Realservice fails, all associated resources are also marked as failed
+		// and can be retried or cleaned up later.
 		MarkLinkedResourcesAsFailed(svc.ServiceName)
 	}
 
 }
 
+// ProcessHealthCheck processes each health check by calling APV-HealthCheck functions
+// and updates the status in the database
+// It also handles the retry logic for creating, updating, or deleting health checks.
+// The function checks the availability of the APV device before proceeding with the operations.
 func ProcessHealthCheck(HChecks *configstore.HealthCheck) {
 	dbclient, err := configstore.Get()
 	if dbclient == nil {
@@ -212,22 +221,22 @@
 		log.Info("TEST environment detected, setting APV availability to true")
 		available := true
 		if !available {
-			log.Error("APV is not available")
+			log.Error("APV is NOT Available")
 			return
 		} else {
-			log.Info("APV is available")
+			log.Info("APV is Available")
 		}
 	} else {
 		select {
 		case available := <-watchtower.GetDeviceStatusChan():
 			if !available {
-				log.Error("APV is not available")
+				log.Debug("APV is NOT Available")
 				return
 			} else {
-				log.Info("APV is available")
+				log.Debug("APV is Available")
 			}
 		case <-time.After(30 * time.Second):
-			log.Warn("APV status not received")
+			log.Warn("APV status NOT received")
 			return
 		}
 	}
@@ -239,7 +248,7 @@
 		// Add more conditions as needed
 	}
 	if err = dbclient.Update(HChecks, conditions); err != nil {
-		log.Errorf("Failed to update status to INPROGRESS for healthcheck %s: %v", HChecks.HCName, err)
+		log.Errorf("Failed to update status to INPROGRESS for APV-HealthCheck %s: %v", HChecks.HCName, err)
 		return
 	}
 
@@ -265,7 +274,7 @@
 		case "DELETE":
 			err = hc.DeleteHealthCheck()
 		default:
-			log.Errorf("Invalid operation %s for healthcheck %s", HChecks.CurrentOp, HChecks.HCName)
+			log.Errorf("Invalid operation %s for APV-HealthCheck %s", HChecks.CurrentOp, HChecks.HCName)
 			HChecks.Status = "FAILED"
 			_ = dbclient.Update(HChecks, conditions)
 			return
@@ -275,18 +284,18 @@
 			// Success → Update status to COMPLETED
 			HChecks.Status = "COMPLETED"
 			if err := dbclient.Update(HChecks, conditions); err != nil {
-				log.Errorf("Failed to update status to COMPLETED for healthcheck %s: %v", HChecks.HCName, err)
+				log.Errorf("Failed to update status to COMPLETED for APV-HealthCheck %s: %v", HChecks.HCName, err)
 			}
 			if HChecks.CurrentOp == "DELETE" {
-				//Remove HealthCheck entry after deletion process
+				//Remove APV-HealthCheck entry after deletion process
 				removeHealthCheck(HChecks.ServiceName)
-				log.Infof("Deleted HealthCheck record after successful deletion %s", HChecks.ServiceName)
+				log.Infof("Deleted APV-HealthCheck record after successful deletion %s", HChecks.ServiceName)
 			}
 			return
 		}
 
 		// Log the error and retry
-		log.Errorf("Error processing healthcheck %s (attempt %d/%d): %v", HChecks.HCName, retryCount+1, MaxRetries, err)
+		log.Errorf("Error processing APV-HealthCheck %s (attempt %d/%d): %v", HChecks.HCName, retryCount+1, MaxRetries, err)
 		retryCount++
 		time.Sleep(5 * time.Second)
 	}
@@ -294,12 +303,15 @@
 	// If we reach max retries → Mark as FAILED
 	HChecks.Status = "FAILED"
 	if err := dbclient.Update(HChecks, conditions); err != nil {
-		log.Errorf("Failed to update status to FAILED for healthcheck %s: %v", HChecks.HCName, err)
+		log.Errorf("Failed to update status to FAILED for APV-HealthCheck %s: %v", HChecks.HCName, err)
 	} else {
-		log.Errorf("Healthcheck %s failed after %d retries, marked as FAILED", HChecks.HCName, MaxRetries)
+		log.Errorf("HealthCheck %s failed after %d retries, marked as FAILED", HChecks.HCName, MaxRetries)
 	}
 }
 
+// ProcessRateLimit processes each rate limit by calling ratelimit functions
+// and updates the status in the database
+// It also handles the retry logic for creating, updating, or deleting rate limits.
 func ProcessRateLimit(rl *configstore.RateLimit) {
 	dbclient, err := configstore.Get()
 	if err != nil {
@@ -314,6 +326,29 @@
 	const MaxRetries = 5
 	retryCount := 0
 
+	if os.Getenv("TEST") == "true" {
+		log.Info("TEST environment detected, setting APV availability to true")
+		available := true
+		if !available {
+			log.Error("APV is NOT Available")
+			return
+		} else {
+			log.Info("APV is Available")
+		}
+	} else {
+		select {
+		case available := <-watchtower.GetDeviceStatusChan():
+			if !available {
+				log.Debug("APV is NOT Available")
+				return
+			} else {
+				log.Debug("APV is Available")
+			}
+		case <-time.After(30 * time.Second):
+			log.Warn("APV status NOT received")
+			return
+		}
+	}
 	// Update status to INPROGRESS
 	rl.Status = "INPROGRESS"
 	conditions := map[string]interface{}{
@@ -321,7 +356,7 @@
 		// Add more conditions as needed
 	}
 	if err = dbclient.Update(rl, conditions); err != nil {
-		log.Errorf("Failed to update status to INPROGRESS for ratelimit %s: %v", rl.ServiceName, err)
+		log.Errorf("Failed to update status to INPROGRESS for RateLimit %s: %v", rl.ServiceName, err)
 		return
 	}
 
@@ -347,7 +382,7 @@
 		case "DELETE":
 			err = rl1.DeleteRateLimit()
 		default:
-			log.Errorf("Invalid operation %s for ratelimit %s", rl.CurrentOp, rl.ServiceName)
+			log.Errorf("Invalid operation %s for RateLimit %s", rl.CurrentOp, rl.ServiceName)
 			rl.Status = "FAILED"
 			_ = dbclient.Update(rl, conditions)
 			return
@@ -357,18 +392,18 @@
 			// Success → Update status to COMPLETED
 			rl.Status = "COMPLETED"
 			if err := dbclient.Update(rl, conditions); err != nil {
-				log.Errorf("Failed to update status to COMPLETED for ratelimit %s: %v", rl.ServiceName, err)
+				log.Errorf("Failed to update status to COMPLETED for RateLimit %s: %v", rl.ServiceName, err)
 			}
 			if rl.CurrentOp == "DELETE" {
 				//Remove Ratelimit entry after deletion process
 				removeRateLimit(rl.ServiceName)
-				log.Infof("Deleted Ratelimit record after successful deletion %s", rl.ServiceName)
+				log.Infof("Deleted RateLimit record after successful deletion %s", rl.ServiceName)
 			}
 			return
 		}
 
 		// Log the error and retry
-		log.Errorf("Error processing ratelimit %s (attempt %d/%d): %v", rl.ServiceName, retryCount+1, MaxRetries, err)
+		log.Errorf("Error processing RateLimit %s (attempt %d/%d): %v", rl.ServiceName, retryCount+1, MaxRetries, err)
 		retryCount++
 		time.Sleep(5 * time.Second)
 	}
@@ -376,42 +411,47 @@
 	// If we reach max retries → Mark as FAILED
 	rl.Status = "FAILED"
 	if err := dbclient.Update(rl, conditions); err != nil {
-		log.Errorf("Failed to update status to FAILED for ratelimit %s: %v", rl.ServiceName, err)
+		log.Errorf("Failed to update status to FAILED for RateLimit %s: %v", rl.ServiceName, err)
 	} else {
 		log.Errorf("Ratelimit %s failed after %d retries, marked as FAILED", rl.ServiceName, MaxRetries)
 	}
 }
 
 // StartReconcile continuously processes services in the queue
+// and updates their status in the database.
+// It fetches services, health checks, and rate limits from the database
+// and processes them in a loop with a sleep interval.
+// The function runs indefinitely until the program is terminated.
+// It also handles the retry logic for creating, updating, or deleting services.
 func StartReconcile() {
 	for {
 		log.Info("Reconciling....")
 
 		svcs := FetchServices()
 		if len(svcs) == 0 {
-			log.Info("No RealServices in db to process")
+			log.Info("No APV-Realservices in DB to Process")
 		} else {
 			for i := range svcs {
 				svc := &svcs[i]
-				log.Infof("Processing RealService: %s", svc.ServiceName)
+				log.Infof("Processing APV-Realservice: %s", svc.ServiceName)
 				ProcessService(svc)
 			}
 		}
 
 		hcs := FetchHealthCheck()
 		if len(hcs) == 0 {
-			log.Info("No HealthChecks")
+			log.Info("No APV-HealthChecks in DB to Process")
 		} else {
 			for i := range hcs {
 				hc := &hcs[i]
-				log.Infof("Processing HealthCheck: %s", hc.HCName)
+				log.Infof("Processing APV-HealthCheck: %s", hc.HCName)
 				ProcessHealthCheck(hc)
 			}
 		}
 
 		rls := FetchRateLimit()
 		if len(rls) == 0 {
-			log.Info("No RateLimits in db to process")
+			log.Info("No RateLimits in DB to Process")
 		} else {
 			for i := range rls {
 				rl := &rls[i]
@@ -424,8 +464,11 @@
 	}
 }
 
-//UTILS functions
-
+// UTILS functions
+// removeAssociatedHealthChecks deletes all health checks associated with the given service name.
+// This function is used when a service is deleted to ensure that all associated health checks are also removed.
+// It uses the ConfigStore's Delete method to remove the health checks from the database.
+// The function logs the success or failure of the operation.
 func removeAssociatedHealthChecks(serviceName string) {
 	dbclient, err := configstore.Get()
 	if err != nil {
@@ -437,7 +480,7 @@
 		return
 	}
 
-	log.Infof("Removing health checks associated with service %s", serviceName)
+	log.Infof("Removing APV-HealthChecks associated with service %s", serviceName)
 
 	// Define condition for deletion
 	conditions := map[string]interface{}{
@@ -446,12 +489,13 @@
 
 	// Call the structured delete function with retries
 	if deleteErr := dbclient.Delete(&configstore.HealthCheck{}, conditions); deleteErr != nil {
-		log.Errorf("Failed to remove health checks for service %s: %v", serviceName, deleteErr)
+		log.Errorf("Failed to remove APV-HealthChecks for service %s: %v", serviceName, deleteErr)
 	} else {
-		log.Infof("Successfully removed health checks for service %s", serviceName)
+		log.Infof("Successfully removed APV-HealthChecks for service %s", serviceName)
 	}
 }
 
+// removeAssociatedRateLimits deletes all rate limits associated with the given service name.
 func removeAssociatedRateLimits(serviceName string) {
 	dbclient, err := configstore.Get()
 	if err != nil {
@@ -463,7 +507,7 @@
 		return
 	}
 
-	log.Infof("Removing rate limits associated with service %s", serviceName)
+	log.Infof("Removing RateLimit associated with service %s", serviceName)
 
 	// Define deletion conditions based on service name
 	conditions := map[string]interface{}{
@@ -472,13 +516,13 @@
 
 	// Use your ConfigStore.Delete method with the provided model and conditions.
 	if delErr := dbclient.Delete(&configstore.RateLimit{}, conditions); delErr != nil {
-		log.Errorf("Failed to remove rate limits for service %s: %v", serviceName, delErr)
+		log.Errorf("Failed to remove RateLimits for service %s: %v", serviceName, delErr)
 	} else {
-		log.Infof("Successfully removed rate limits for service %s", serviceName)
+		log.Infof("Successfully removed Ratelimit for service %s", serviceName)
 	}
 }
 
-// Helper function to mark linked HealthChecks and RateLimits as FAILED
+// Helper function to mark linked APV-HealthChecks and RateLimits as FAILED
 func MarkLinkedResourcesAsFailed(serviceName string) {
 	dbclient, err := configstore.Get()
 	if dbclient == nil {
@@ -486,18 +530,18 @@
 		return
 	}
 
-	// Fetch and update linked HealthChecks
+	// Fetch and update linked APV-HealthChecks
 	var healthChecks []configstore.HealthCheck
 	err = dbclient.ReadByCondition(map[string]interface{}{"service_name": serviceName}, &healthChecks)
 	if err != nil {
-		log.Errorf("Failed to fetch linked HealthChecks for service %s: %v", serviceName, err)
+		log.Errorf("Failed to fetch linked APV-HealthChecks for service %s: %v", serviceName, err)
 	} else {
 		for _, hc := range healthChecks {
 			hc.Status = "FAILED"
 			if err := dbclient.Update(&hc, map[string]interface{}{"hc_name": hc.HCName}); err != nil {
-				log.Errorf("Failed to update status to FAILED for HealthCheck %s: %v", hc.HCName, err)
+				log.Errorf("Failed to update status to FAILED for APV-HealthCheck %s: %v", hc.HCName, err)
 			} else {
-				log.Infof("Marked HealthCheck %s as FAILED due to service %s failure", hc.HCName, serviceName)
+				log.Infof("Marked APV-HealthCheck %s as FAILED due to service %s failure", hc.HCName, serviceName)
 			}
 		}
 	}
@@ -531,16 +575,16 @@
 		return
 	}
 
-	log.Infof("Removing health checks associated with service %s", serviceName)
+	log.Infof("Removing APV-HealthChecks associated with service %s", serviceName)
 
 	conditions := map[string]interface{}{
 		"service_name": serviceName,
 	}
 
 	if deleteErr := dbclient.Delete(&configstore.HealthCheck{}, conditions); deleteErr != nil {
-		log.Errorf("Failed to remove health checks for service %s: %v", serviceName, deleteErr)
+		log.Errorf("Failed to remove APV-HealthChecks for service %s: %v", serviceName, deleteErr)
 	} else {
-		log.Infof("Successfully removed health checks for service %s", serviceName)
+		log.Infof("Successfully removed APV-HealthChecks for service %s", serviceName)
 	}
 }
 
@@ -556,16 +600,16 @@
 		return
 	}
 
-	log.Infof("Removing rate limits associated with service %s", serviceName)
+	log.Infof("Removing RateLimit associated with service %s", serviceName)
 
 	conditions := map[string]interface{}{
 		"service_name": serviceName,
 	}
 
 	if deleteErr := dbclient.Delete(&configstore.RateLimit{}, conditions); deleteErr != nil {
-		log.Errorf("Failed to remove rate limits for service %s: %v", serviceName, deleteErr)
+		log.Errorf("Failed to remove RateLimits for service %s: %v", serviceName, deleteErr)
 	} else {
-		log.Infof("Successfully removed rate limits for service %s", serviceName)
+		log.Infof("Successfully removed RateLimits for service %s", serviceName)
 	}
 }
 
@@ -581,15 +625,15 @@
 		return
 	}
 
-	log.Infof("Removing real services associated with service %s", serviceName)
+	log.Infof("Removing APV-Realservice associated with service %s", serviceName)
 
 	conditions := map[string]interface{}{
 		"service_name": serviceName,
 	}
 
 	if deleteErr := dbclient.Delete(&configstore.RealService{}, conditions); deleteErr != nil {
-		log.Errorf("Failed to remove real services for service %s: %v", serviceName, deleteErr)
+		log.Errorf("Failed to remove APV-Realservice for service %s: %v", serviceName, deleteErr)
 	} else {
-		log.Infof("Successfully removed real services for service %s", serviceName)
+		log.Infof("Successfully removed APV-Realservices for service %s", serviceName)
 	}
 }
Index: /branches/main/array-ingress-controller/apvadapter/go.mod
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/go.mod	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/go.mod	(nonexistent)
@@ -1,10 +0,0 @@
-module arraynetworks.com/array-ingress-controller/apvadapter
-
-go 1.23.6
-
-replace (
-	arraynetworks.com/array-ingress-controller/apvadapter/realservice => ./realservice
-	arraynetworks.com/array-ingress-controller/apvclient => ./apvclient
-	arraynetworks.com/array-ingress-controller/configstore => ../configstore
-	arraynetworks.com/array-ingress-controller/logger => ../logger
-)
Index: /branches/main/array-ingress-controller/apvadapter/go.sum
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/apvadapter/go.sum	(nonexistent)
@@ -1,113 +0,0 @@
-filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
-filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
-github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
-github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
-github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
-github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
-github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
-github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
-github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
-github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
-github.com/google/pprof v0.0.0-20250208200701-d0013a598941 h1:43XjGa6toxLpeksjcxs1jIoIyr+vUfOqY2c6HB4bpoc=
-github.com/google/pprof v0.0.0-20250208200701-d0013a598941/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
-github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
-github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
-github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
-github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
-github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
-github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
-github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA=
-github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
-golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/datatypes v1.2.5 h1:9UogU3jkydFVW1bIVVeoYsTpLRgwDVW3rHfJG6/Ek9I=
-gorm.io/datatypes v1.2.5/go.mod h1:I5FUdlKpLb5PMqeMQhm30CQ6jXP8Rj89xkTeCSAaAD4=
-gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
-gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
-gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U=
-gorm.io/driver/postgres v1.5.0/go.mod h1:FUZXzO+5Uqg5zzwzv4KK49R8lvGIyscBOqYrtI1Ce9A=
-gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
-gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
-gorm.io/driver/sqlserver v1.5.4 h1:xA+Y1KDNspv79q43bPyjDMUgHoYHLhXYmdFcYPobg8g=
-gorm.io/driver/sqlserver v1.5.4/go.mod h1:+frZ/qYmuna11zHPlh5oc2O6ZA/lS88Keb0XSH1Zh/g=
-gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
Index: /branches/main/array-ingress-controller/apvadapter/realservice/go.mod
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/realservice/go.mod	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/realservice/go.mod	(nonexistent)
@@ -1,27 +0,0 @@
-module arraynetworks.com/array-ingress-controller/apvadapter/realservice
-
-go 1.23.6
-
-replace (
-	arraynetworks.com/array-ingress-controller/apvclient => ../apvclient
-	arraynetworks.com/array-ingress-controller/configstore => ../../configstore
-	arraynetworks.com/array-ingress-controller/logger => ../../logger
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/apvclient v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	gorm.io/gorm v1.25.12
-)
-
-require (
-	github.com/go-resty/resty/v2 v2.16.5 // indirect
-	github.com/jinzhu/inflection v1.0.0 // indirect
-	github.com/jinzhu/now v1.1.5 // indirect
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	golang.org/x/text v0.21.0 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-)
Index: /branches/main/array-ingress-controller/apvadapter/realservice/go.sum
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/realservice/go.sum	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/realservice/go.sum	(nonexistent)
@@ -1,50 +0,0 @@
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-resty/resty/v2 v2.16.5 h1:hBKqmWrr7uRc3euHVqmh1HTHcKn99Smr7o5spptdhTM=
-github.com/go-resty/resty/v2 v2.16.5/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ07xAwp/fiA=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
-golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
Index: /branches/main/array-ingress-controller/apvadapter/realservice/realservice.go
===================================================================
--- /branches/main/array-ingress-controller/apvadapter/realservice/realservice.go	(revision 12)
+++ /branches/main/array-ingress-controller/apvadapter/realservice/realservice.go	(working copy)
@@ -63,6 +63,7 @@
 		log.Errorf("Error marshalling to JSON: %v", err)
 		return err
 	}
+	log.Debugf("Creating RealService With Payload: %s", string(jsonData))
 	log.Infof("Creating real service: %s", rs.ServiceName)
 	annotationUrl := apvurlbuilder.GetAnnotationURL(apvurlbuilder.BaseURL["RealService"], "")
 	resp, err = client.Create(annotationUrl, jsonData)
@@ -70,9 +71,9 @@
 		log.Errorf("Error creating real service: %v", err)
 		return err
 	}
-	log.Infof("Real service created successfully: %s", rs.ServiceName)
-	log.Infof("Response Body: %s", resp.String())
-	log.Infof("Response Status Code: %v", resp.StatusCode())
+	log.Infof("RealService created successfully: %s", rs.ServiceName)
+	log.Debugf("Response Body: %s", resp.String())
+	log.Debugf("Response Status Code: %v", resp.StatusCode())
 	return nil
 }
 
@@ -87,6 +88,7 @@
 		log.Errorf("Error marshalling to JSON: %v", err)
 		return err
 	}
+	log.Debugf("Update RealService With Payload: %s", string(jsonData))
 	log.Infof("Updating real service: %s", rs.ServiceName)
 	annotationUrl := apvurlbuilder.GetAnnotationURL(apvurlbuilder.BaseURL["RealService"], rs.ServiceName)
 	resp, err = client.Update(annotationUrl, jsonData)
@@ -94,9 +96,9 @@
 		log.Errorf("Error updating real service: %v", err)
 		return err
 	}
-	log.Infof("Real service updated successfully: %s", rs.ServiceName)
-	log.Infof("Response Body: %s", resp.String())
-	log.Infof("Response Status Code: %v", resp.StatusCode())
+	log.Infof("RealService updated successfully: %s", rs.ServiceName)
+	log.Debugf("Response Body: %s", resp.String())
+	log.Debugf("Response Status Code: %v", resp.StatusCode())
 	return nil
 }
 
@@ -104,13 +106,14 @@
 	client := apvclient.GetAPVClient()
 	log.Infof("Deleting real service: %s", rs.ServiceName)
 	annotationUrl := apvurlbuilder.GetAnnotationURL(apvurlbuilder.BaseURL["RealService"], rs.ServiceName)
+	log.Debugf("Deleting real service with URL: %s", annotationUrl)
 	resp, err := client.Delete(annotationUrl)
 	if err != nil {
 		log.Errorf("Error deleting real service: %v", err)
 		return err
 	}
-	log.Infof("Real service deleted successfully: %s", rs.ServiceName)
-	log.Infof("Response Body: %s", resp.String())
-	log.Infof("Response Status Code: %v", resp.StatusCode())
+	log.Infof("RealService deleted successfully: %s", rs.ServiceName)
+	log.Debugf("Response Body: %s", resp.String())
+	log.Debugf("Response Status Code: %v", resp.StatusCode())
 	return nil
 }
Index: /branches/main/array-ingress-controller/asfadapter/asfclient/asfclient.go
===================================================================
--- /branches/main/array-ingress-controller/asfadapter/asfclient/asfclient.go	(revision 12)
+++ /branches/main/array-ingress-controller/asfadapter/asfclient/asfclient.go	(working copy)
@@ -4,13 +4,16 @@
 	"arraynetworks.com/array-ingress-controller/common/baseclient"
 )
 
+// ASFClient is a struct that represents the client for interacting with the ASF API
 type ASFClient struct {
 	*baseclient.BaseClient
 	instType string
 }
 
+// GetASFClient initializes and returns a singleton instance of ASFClient
 var asfInstance *ASFClient
 
+// GetASFClient returns the singleton instance of ASFClient
 func GetASFClient() *ASFClient {
 	if asfInstance == nil || !asfInstance.IsHealthy("health-check-url") {
 		config := baseclient.LoadConfig("ASF")
Index: /branches/main/array-ingress-controller/asfadapter/asfurlbuilder/asfurlbuilder.go
===================================================================
--- /branches/main/array-ingress-controller/asfadapter/asfurlbuilder/asfurlbuilder.go	(revision 12)
+++ /branches/main/array-ingress-controller/asfadapter/asfurlbuilder/asfurlbuilder.go	(working copy)
@@ -14,9 +14,6 @@
 }
 
 // GetAnnotationURL generates a URL with the given base path and service name.
-func GetAnnotationURL(basePath, serviceName string) string {
-	if serviceName != "" {
-		return fmt.Sprintf("%s/%s", basePath, serviceName)
-	}
-	return basePath
+func GetAnnotationURL(basePath string) string {
+	return fmt.Sprintf("%s", basePath)
 }
\ No newline at end of file
Index: /branches/main/array-ingress-controller/asfadapter/asfurlbuilder/asfurlbuilder_test.go
===================================================================
--- /branches/main/array-ingress-controller/asfadapter/asfurlbuilder/asfurlbuilder_test.go	(revision 12)
+++ /branches/main/array-ingress-controller/asfadapter/asfurlbuilder/asfurlbuilder_test.go	(working copy)
@@ -38,7 +38,7 @@
 				basePath:    "",
 				serviceName: "service1",
 			},
-			want: "/service1",
+			want: "",
 		},
 		{
 			name: "Empty basePath and serviceName",
@@ -51,7 +51,7 @@
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			if got := GetAnnotationURL(tt.args.basePath, tt.args.serviceName); got != tt.want {
+			if got := GetAnnotationURL(tt.args.basePath); got != tt.want {
 				t.Errorf("GetAnnotationURL() = %v, want %v", got, tt.want)
 			}
 		})
Index: /branches/main/array-ingress-controller/asfadapter/cmd.go
===================================================================
--- /branches/main/array-ingress-controller/asfadapter/cmd.go	(revision 12)
+++ /branches/main/array-ingress-controller/asfadapter/cmd.go	(working copy)
@@ -1,19 +1,33 @@
+/*
+   Copyright 2025 Array Networks
+*/
+
 package asfadapter
 
 import (
-	"sync"
 	"time"
-
+	"os"
 	"arraynetworks.com/array-ingress-controller/asfadapter/realservice"
 	"arraynetworks.com/array-ingress-controller/configstore"
-	log "arraynetworks.com/array-ingress-controller/logger"
+	"arraynetworks.com/array-ingress-controller/logger"
 	"arraynetworks.com/array-ingress-controller/watchtower"
+	"arraynetworks.com/array-ingress-controller/asfadapter/health"
+
+)
+
+var (
+	log logger.Logger
 )
 
-// fetchAsfServices fetches all AsfRealServices with status = 'WAITING' from the database
-func fetchAsfServices() []configstore.AsfRealService {
+func init() {
+	log = logger.GetLogger()
+}
+
+// FetchAsfServices fetches all AsfRealServices with status = 'WAITING' from the database
+func FetchAsfServices() []configstore.AsfRealService {
 	log.Info("Fetching AsfRealServices...")
 
+	// Fetch only AsfRealServices with status = 'WAITING'
 	var services []configstore.AsfRealService
 	dbclient, err := configstore.Get()
 	if dbclient == nil {
@@ -21,6 +35,7 @@
 		return nil
 	}
 
+	// Fetch only services with status = 'WAITING'
 	err = dbclient.ReadByStatus("WAITING", &services)
 	if err != nil {
 		log.Errorf("Error fetching AsfRealServices: %v", err)
@@ -30,31 +45,61 @@
 	return services
 }
 
-// processService processes each AsfRealService
-func processService(svc *configstore.AsfRealService) {
+//fetchAsfHealthChecks fetches all health checks associated with the given service name
+func fetchAsfHealthChecks() []configstore.AsfHealthCheck {
+	log.Info("Fetching ASF Healthchecks...")
+	var healthchecks []configstore.AsfHealthCheck
+	dbclient, err := configstore.Get()
+	if dbclient == nil {
+		log.Error("DB Client is NIL")
+		return nil
+	}
+
+	// Fetch only healthchecks with status = 'WAITING'
+	err = dbclient.ReadByStatus("WAITING", &healthchecks)
+	if err != nil {
+		log.Errorf("Error fetching ASF HealthChecks: %v", err)
+		return nil
+	}
+	return healthchecks
+}
+
+// ProcessAsfService processes each AsfRealService
+func ProcessAsfService(svc *configstore.AsfRealService) {
 	dbclient, err := configstore.Get()
 	if dbclient == nil {
 		log.Error("DB Client is NIL")
 		return
 	}
 
-	const maxRetries = 5
+	const MaxRetries = 5
 	retryCount := 0
-
-	select {
-	case available := <-watchtower.GetDeviceStatusChan():
+	// Check if ASF is available
+	// If TEST environment is set, assume ASF is available
+	// Otherwise, check the status from the watchtower
+	if os.Getenv("TEST") == "true" {
+		log.Info("TEST environment detected, setting APV availability to true")
+		available := true
 		if !available {
 			log.Error("ASF is not available")
 			return
 		} else {
 			log.Info("ASF is available")
 		}
-	case <-time.After(30 * time.Second):
-		log.Warn("ASF status not received")
-		return
+	} else {
+		select {
+		case available := <-watchtower.GetDeviceStatusChan():
+			if !available {
+				log.Debugf("ASF is not available")
+				return
+			} else {
+				log.Debugf("ASF is available")
+			}
+		case <-time.After(30 * time.Second):
+			log.Warn("ASF status not received")
+			return
+		}
 	}
-	
-
 
 	// Update status to INPROGRESS
 	conditions := map[string]interface{}{
@@ -62,7 +107,7 @@
 	}
 	svc.Status = "INPROGRESS"
 	if err = dbclient.Update(svc, conditions); err != nil {
-		log.Errorf("Failed to update status to INPROGRESS for service %s: %v", svc.ServiceName, err)
+		log.Errorf("Failed to update status to INPROGRESS for ASF service %s: %v", svc.ServiceName, err)
 		return
 	}
 
@@ -70,13 +115,11 @@
 		svc.ServiceName,
 		svc.ServiceType,
 		svc.IPv4,
-		svc.CheckType,
 		svc.Port,
-		svc.HCUp,
-		svc.HCDown,
 	)
 
-	for retryCount < maxRetries {
+	// Retry loop for create, update, or delete
+	for retryCount < MaxRetries {
 		switch svc.CurrentOp {
 		case "CREATE":
 			err = rs.CreateRealService()
@@ -85,58 +128,264 @@
 		case "DELETE":
 			err = rs.DeleteRealService()
 		default:
-			log.Errorf("Invalid operation %s for service %s", svc.CurrentOp, svc.ServiceName)
+			log.Errorf("Invalid operation %s for ASF RealService %s", svc.CurrentOp, svc.ServiceName)
 			svc.Status = "FAILED"
 			_ = dbclient.Update(svc, conditions)
+			MarkLinkedResourcesAsFailed(svc.ServiceName)
 			return
 		}
 
 		if err == nil {
+			// Success → Update status to COMPLETED
 			svc.Status = "COMPLETED"
 			if err := dbclient.Update(svc, conditions); err != nil {
-				log.Errorf("Failed to update status to COMPLETED for service %s: %v", svc.ServiceName, err)
+				log.Errorf("Failed to update status to COMPLETED for ASF RealService %s: %v", svc.ServiceName, err)
+			}
+			if svc.CurrentOp == "DELETE" {
+				// Remove associated resources after successful deletion
+				removeAssociatedHealthChecks(svc.ServiceName)
+				removeRealService(svc.ServiceName)
+				log.Infof("Deleted associated resources for RealService %s", svc.ServiceName)
 			}
 			return
 		}
 
-		log.Errorf("Error processing service %s (attempt %d/%d): %v", svc.ServiceName, retryCount+1, maxRetries, err)
+		// Log the error and retry
+		log.Errorf("Error processing ASF RealService %s (attempt %d/%d): %v", svc.ServiceName, retryCount+1, MaxRetries, err)
 		retryCount++
 		time.Sleep(5 * time.Second)
 	}
 
-	// Mark as FAILED after max retries
+	// If we reach max retries → Mark as FAILED
 	svc.Status = "FAILED"
 	if err := dbclient.Update(svc, conditions); err != nil {
-		log.Errorf("Failed to update status to FAILED for service %s: %v", svc.ServiceName, err)
+		log.Errorf("Failed to update status to FAILED for ASF RealService %s: %v", svc.ServiceName, err)
+	} else {
+		log.Errorf("Service %s failed after %d retries, marked as FAILED", svc.ServiceName, MaxRetries)
+		MarkLinkedResourcesAsFailed(svc.ServiceName)
+	}
+}
+
+func ProcessAsfHealthCheck(HChecks *configstore.AsfHealthCheck) {
+	dbclient, err := configstore.Get()
+	if dbclient == nil {
+		log.Error("DB Client is NIL")
+		return
+	}
+	const MaxRetries = 5
+	retryCount := 0
+
+	// Check if ASF is available
+	// If TEST environment is set, assume ASF is available
+	// Otherwise, check the status from the watchtower
+	if os.Getenv("TEST") == "true" {
+		log.Info("TEST environment detected, setting APV availability to true")
+		available := true
+		if !available {
+			log.Error("ASF is not available")
+			return
+		} else {
+			log.Info("ASF is available")
+		}
+	} else {
+		select {
+		case available := <-watchtower.GetDeviceStatusChan():
+			if !available {
+				log.Debugf("ASF is not available")
+				return
+			} else {
+				log.Debugf("ASF is available")
+			}
+		case <-time.After(30 * time.Second):
+			log.Warn("ASF status not received")
+			return
+		}
+	}
+
+	// Update status to INPROGRESS
+	HChecks.Status = "INPROGRESS"
+	conditions := map[string]interface{}{
+		"service_name": HChecks.ServiceName,
+		// Add more conditions as needed
+	}
+	if err = dbclient.Update(HChecks, conditions); err != nil {
+		log.Errorf("Failed to update status to INPROGRESS for HealthCheck of ASF RealService %s: %v", HChecks.ServiceName, err)
+		return
+	}
+
+	// Create a new health check object
+
+	hc := health.NewAsfHealthCheck(
+		HChecks.ServiceName,
+		HChecks.ServiceType,
+		HChecks.CheckType,
+		HChecks.IPv4,
+		HChecks.Port,
+		HChecks.HCUp,
+		HChecks.HCDown,
+	)
+
+	// Retry loop for create, update, or delete
+	for retryCount < MaxRetries {
+		switch HChecks.CurrentOp {
+		case "CREATE":
+			err = hc.CreateHealthCheck()
+		case "UPDATE":
+			err = hc.UpdateHealthCheck()
+		case "DELETE":
+			err = hc.DeleteHealthCheck()
+		default:
+			log.Errorf("Invalid operation %s for HealthCheck on ASFRealService %s", HChecks.CurrentOp, HChecks.ServiceName)
+			HChecks.Status = "FAILED"
+			_ = dbclient.Update(HChecks, conditions)
+			return
+		}
+
+		if err == nil {
+			// Success → Update status to COMPLETED
+			HChecks.Status = "COMPLETED"
+			if err := dbclient.Update(HChecks, conditions); err != nil {
+				log.Errorf("Failed to update status to COMPLETED for HealthCheck of ASF RealService %s: %v", HChecks.ServiceName, err)
+			}
+			if HChecks.CurrentOp == "DELETE" {
+				//Remove HealthCheck entry after deletion process
+				removeAssociatedHealthChecks(HChecks.ServiceName)
+				log.Infof("Deleted HealthCheck record after successful deletion %s", HChecks.ServiceName)
+			}
+			return
+		}
+
+		// Log the error and retry
+		log.Errorf("Error processing HealthCheck of ASF RealService %s (attempt %d/%d): %v", HChecks.ServiceName, retryCount+1, MaxRetries, err)
+		retryCount++
+		time.Sleep(5 * time.Second)
+	}
+
+	// If we reach max retries → Mark as FAILED
+	HChecks.Status = "FAILED"
+	if err := dbclient.Update(HChecks, conditions); err != nil {
+		log.Errorf("Failed to update status to FAILED for healthcheck of service %s: %v", HChecks.ServiceName, err)
 	} else {
-		log.Errorf("Service %s failed after %d retries, marked as FAILED", svc.ServiceName, maxRetries)
+		log.Errorf("Healthcheck of %s failed after %d retries, marked as FAILED", HChecks.ServiceName, MaxRetries)
 	}
+
 }
 
 // StartReconcile continuously processes services in the queue
+// This function runs in a loop, fetching services and health checks from the database
+// and processing them
+// It sleeps for 120 seconds between each iteration
+
 func StartReconcile() {
 	for {
 		log.Info("Reconciling....")
-		svcs := fetchAsfServices()
-
+		svcs := FetchAsfServices()
+		// Check if there are any services to process
 		if len(svcs) == 0 {
 			log.Info("No AsfRealServices in DB to process")
-			time.Sleep(120 * time.Second)
-			continue
+		}else {
+			for i := range svcs {
+				svc := &svcs[i]
+				log.Infof("Processing RealService: %s", svc.ServiceName)
+				ProcessAsfService(svc)
+			}
+		}
+		//fetch all the health checks associated with the service
+		hcs := fetchAsfHealthChecks()
+		if len(hcs) == 0 {
+			log.Info("No HealthChecks")
+		} else {
+			for i := range hcs {
+				hc := &hcs[i]
+				log.Infof("Processing HealthCheck of service: %s", hc.ServiceName)
+				// Process each health check
+				ProcessAsfHealthCheck(hc)
+			}
 		}
+		
+		time.Sleep(120* time.Second)
+	}
+}
 
-		var wg sync.WaitGroup
 
-		for i := range svcs {
-			wg.Add(1)
-			go func(svc *configstore.AsfRealService) {
-				defer wg.Done()
-				log.Infof("Processing AsfRealService: %s", svc.ServiceName)
-				processService(svc)
-			}(&svcs[i])
-		}
+//UTILS functiions
+
+// removeAssociatedHealthChecks deletes all health checks associated with the given service name
+func removeAssociatedHealthChecks(serviceName string) {
+	dbclient, err := configstore.Get()
+	if err != nil {
+		log.Errorf("Error getting DB client: %v", err)
+		return
+	}
+	if dbclient == nil {
+		log.Error("DB Client is NIL")
+		return
+	}
 
-		wg.Wait()
-		time.Sleep(120 * time.Second)
+	log.Infof("Removing HealthChecks associated with ASF RealService %s", serviceName)
+
+	// Define the conditions for deletion
+	conditions := map[string]interface{}{
+		"service_name": serviceName,
+	}
+
+	// Delete the health checks
+	if deleteErr := dbclient.Delete(&configstore.AsfHealthCheck{}, conditions); deleteErr != nil {
+		log.Errorf("Failed to remove HealthChecks for ASF RealService %s: %v", serviceName, deleteErr)
+	} else {
+		log.Infof("Successfully removed healthChecks for ASF RealService %s", serviceName)
+	}
+}
+
+// removeRealService deletes the real service associated with the given service name
+func removeRealService(serviceName string) {
+	dbclient, err := configstore.Get()
+	if err != nil {
+		log.Errorf("Error getting DB client: %v", err)
+		return
+	}
+	if dbclient == nil {
+		log.Error("DB Client is NIL")
+		return
+	}
+
+	log.Infof("Removing ASF RealSservice %s", serviceName)
+
+	// Define the conditions for deletion
+	conditions := map[string]interface{}{
+		"service_name": serviceName,
+	}
+
+	// Delete the real service
+	if deleteErr := dbclient.Delete(&configstore.AsfRealService{}, conditions); deleteErr != nil {
+		log.Errorf("Failed to remove ASF RealService %s: %v", serviceName, deleteErr)
+	} else {
+		log.Infof("Successfully removed ASF RealService  %s", serviceName)
+	}
+}
+
+// MarkLinkedResourcesAsFailed marks all associated health checks as FAILED
+func MarkLinkedResourcesAsFailed(serviceName string) {
+	dbclient, err := configstore.Get()
+	if dbclient == nil {
+		log.Error("DB Client is NIL")
+		return
+	}
+
+	// Fetch and update linked HealthChecks
+	var healthChecks []configstore.AsfHealthCheck
+	err = dbclient.ReadByCondition(map[string]interface{}{"service_name": serviceName}, &healthChecks)
+	if err != nil {
+		log.Errorf("Failed to fetch linked HealthChecks for ASF RealService %s: %v", serviceName, err)
+	} else {
+		for _, hc := range healthChecks {
+			hc.Status = "FAILED"
+			if err := dbclient.Update(&hc, map[string]interface{}{"hc_name": hc.ServiceName}); err != nil {
+				log.Errorf("Failed to update status to FAILED for HealthCheck of ASF RealService %s: %v", hc.ServiceName, err)
+			} else {
+				log.Infof("Marked HealthCheck as FAILED due to ASF RealService %s failure", hc.ServiceName)
+			}
+		}
 	}
 }
+
Index: /branches/main/array-ingress-controller/asfadapter/cmd_test.go
===================================================================
--- /branches/main/array-ingress-controller/asfadapter/cmd_test.go	(revision 12)
+++ /branches/main/array-ingress-controller/asfadapter/cmd_test.go	(working copy)
@@ -33,7 +33,7 @@
 func addDummyData(db *gorm.DB) {
 	// Adding dummy AsfRealService data
 	asfServices := []configstore.AsfRealService{
-		{IngressName: "ingress1", ServiceName: "service1", ServiceType: "http", IPv4: "192.168.1.1", Port: 8080, CheckType: "ping", HCUp: 5, HCDown: 0, Status: "WAITING", CurrentOp: "CREATE"},
+		{IngressName: "ingress1", ServiceName: "service1", ServiceType: "http", IPv4: "192.168.1.1", Port: 8080, Status: "WAITING", CurrentOp: "CREATE"},
 	}
 
 	// Insert the AsfRealService data into the database
@@ -74,13 +74,13 @@
 		{
 			name: "Fetch AsfRealService Data",
 			want: []configstore.AsfRealService{
-				{IngressName: "ingress1", ServiceName: "service1", ServiceType: "http", IPv4: "192.168.1.1", Port: 8080, CheckType: "ping", HCUp: 5, HCDown: 0, Status: "WAITING", CurrentOp: "CREATE"},
+				{IngressName: "ingress1", ServiceName: "service1", ServiceType: "http", IPv4: "192.168.1.1", Port: 8080, Status: "WAITING", CurrentOp: "CREATE"},
 			},
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			got := fetchAsfServices()
+			got := FetchAsfServices()
 			logger.Info("Database contents while fetching service: ")
 			showDB()
 			if !reflect.DeepEqual(got, tt.want) {
@@ -102,14 +102,14 @@
 			name: "Process AsfRealService",
 			args: args{
 				svc: &configstore.AsfRealService{
-					IngressName: "ingress1", ServiceName: "service1", ServiceType: "http", IPv4: "192.168.1.1", Port: 8080, CheckType: "ping", HCUp: 5, HCDown: 0, Status: "WAITING", CurrentOp: "CREATE",
+					IngressName: "ingress1", ServiceName: "service1", ServiceType: "http", IPv4: "192.168.1.1", Port: 8080, Status: "WAITING", CurrentOp: "CREATE",
 				},
 			},
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			processService(tt.args.svc)
+			ProcessAsfService(tt.args.svc)
 			logger.Info("Database contents while processing service: ")
 			showDB()
 		})
Index: /branches/main/array-ingress-controller/asfadapter/health/health.go
===================================================================
--- /branches/main/array-ingress-controller/asfadapter/health/health.go	(nonexistent)
+++ /branches/main/array-ingress-controller/asfadapter/health/health.go	(working copy)
@@ -0,0 +1,180 @@
+/*
+	Copyright 2025 Array Networks
+*/
+
+package health
+
+import (
+	"encoding/json"
+	"fmt"
+	"regexp"
+	"strings"
+
+	"gorm.io/gorm"
+
+	"arraynetworks.com/array-ingress-controller/asfadapter/asfclient"
+	"arraynetworks.com/array-ingress-controller/asfadapter/asfurlbuilder"
+	"arraynetworks.com/array-ingress-controller/logger"
+	"github.com/go-resty/resty/v2"
+)
+
+var (
+	log  logger.Logger
+	resp *resty.Response
+)
+
+func init() {
+	log = logger.GetLogger()
+}
+
+type HealthUpdater interface {
+	CreateHealthCheck(db *gorm.DB) error
+	UpdateHealthCheck(db *gorm.DB) error
+	DeleteHealthCheck(db *gorm.DB) error
+}
+
+type AsfHealthCheck struct {
+	IngressName string
+	ServiceName string
+	ServiceType string
+	IPv4        string
+	Port        int
+	CheckType   string
+	HCUp        int
+	HCDown      int
+}
+
+// NewAsfHealthCheck constructs AsfHealthCheck - sync with models.go
+func NewAsfHealthCheck(serviceName, serviceType, checkType, ipv4 string, port, hcUp, hcDown int) *AsfHealthCheck {
+	return &AsfHealthCheck{
+		ServiceName: serviceName,
+		ServiceType: serviceType,
+		IPv4:        ipv4,
+		Port:        port,
+		CheckType:   checkType,
+		HCUp:        hcUp,
+		HCDown:      hcDown,
+	}
+}
+
+// GeneratePayload builds the CLI command
+// GeneratePayload creates the command payload for the ASF API request
+func (hc *AsfHealthCheck) GeneratePayload() ([]byte, error) {
+	// Replace special characters in ServiceName with an underscore
+	re := regexp.MustCompile(`[^a-zA-Z0-9]`)
+
+	//ASF does not allow real service names to contain special characters
+	// so we replace them with an underscore
+	sanitizedServiceName := re.ReplaceAllString(hc.ServiceName, "_")
+	sanitizedServiceType := strings.ToLower(hc.ServiceType)
+	cmd := fmt.Sprintf(
+		"security real service \"%s\" %s %s %d %s %d %d",
+		sanitizedServiceName,
+		sanitizedServiceType,
+		hc.IPv4,
+		hc.Port,
+		hc.CheckType,
+		hc.HCUp,
+		hc.HCDown,
+	)
+
+	// Create the command string as per payload
+	payload := map[string]string{
+		"cmd": cmd,
+	}
+
+	jsonData, err := json.Marshal(payload)
+	if err != nil {
+		log.Errorf("Error marshalling to JSON: %v", err)
+		return nil, err
+	}
+
+	return jsonData, nil
+}
+
+func (hc *AsfHealthCheck) CreateHealthCheck() error {
+	// Generate the payload
+	jsonData, err := hc.GeneratePayload()
+	if err != nil {
+		log.Errorf("Failed to generate payload: %v", err)
+		return err
+	}
+	log.Debugf("Generated payload: %v", jsonData)
+
+	// Build the URL for the ASF API
+	url := asfurlbuilder.GetAnnotationURL(asfurlbuilder.BaseURL["RealService"])
+
+	// Send the update request to the ASF API
+	client := asfclient.GetASFClient()
+	resp, err = client.Create(url, jsonData)
+	if err != nil {
+		log.Errorf("ASF API update failed: %v", err)
+		return err
+	}
+
+	// Log the response
+	log.Debugf("Updated health check for service: %s", hc.ServiceName)
+	log.Debugf("Response Code: %d, Body: %s", resp.StatusCode(), resp.String())
+
+	return nil
+}
+
+// UpdateHealthCheck modifies the health check params for a real service
+func (hc *AsfHealthCheck) UpdateHealthCheck() error {
+	// Generate the payload
+	jsonData, err := hc.GeneratePayload()
+	if err != nil {
+		log.Errorf("Failed to generate payload: %v", err)
+		return err
+	}
+	log.Infof("Generated payload: %v", jsonData)
+	
+	// Build the URL for the ASF API
+	url := asfurlbuilder.GetAnnotationURL(asfurlbuilder.BaseURL["RealService"])
+
+	// Send the update request to the ASF API
+	client := asfclient.GetASFClient()
+	resp, err = client.Create(url, jsonData)
+	if err != nil {
+		log.Errorf("ASF API update failed: %v", err)
+		return err
+	}
+
+	// Log the response
+	log.Infof("Updated health check for service: %s", hc.ServiceName)
+	log.Infof("Response Code: %d, Body: %s", resp.StatusCode(), resp.String())
+
+	return nil
+}
+
+func (hc *AsfHealthCheck) DeleteHealthCheck() error {
+	// Set default values
+	hc.CheckType = "tcp"
+	hc.HCUp = 3
+	hc.HCDown = 3
+
+	// Generate the payload
+	jsonData, err := hc.GeneratePayload()
+	if err != nil {
+		log.Errorf("Failed to generate payload: %v", err)
+		return err
+	}
+	log.Infof("Generated payload: %v", jsonData)
+
+	// Build the URL for the ASF API
+	url := asfurlbuilder.GetAnnotationURL(asfurlbuilder.BaseURL["RealService"])
+
+	// Send the delete request to the ASF API
+	client := asfclient.GetASFClient()
+	resp, err = client.Create(url, jsonData)
+	if err != nil {
+		log.Errorf("ASF API delete failed: %v", err)
+		return err
+	}
+
+	// Log the response
+	log.Infof("Deleted health check for service: %s", hc.ServiceName)
+	log.Infof("Response Code: %d, Body: %s", resp.StatusCode(), resp.String())
+
+	return nil
+}
Index: /branches/main/array-ingress-controller/asfadapter/health/health_test.go
===================================================================
--- /branches/main/array-ingress-controller/asfadapter/health/health_test.go	(nonexistent)
+++ /branches/main/array-ingress-controller/asfadapter/health/health_test.go	(working copy)
@@ -0,0 +1,142 @@
+/*
+   Copyright 2025 Array Networks
+*/
+
+package health
+
+import (
+	"encoding/json"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+// Test NewAsfHealthCheck
+func TestNewAsfHealthCheck(t *testing.T) {
+	tests := []struct {
+		name string
+		args struct {
+			serviceName string
+			serviceType string
+			checkType   string
+			ipv4        string
+			port        int
+			hcUp        int
+			hcDown      int
+		}
+		want *AsfHealthCheck
+	}{
+		{
+			name: "Valid HTTP HealthCheck",
+			args: struct {
+				serviceName string
+				serviceType string
+				checkType   string
+				ipv4        string
+				port        int
+				hcUp        int
+				hcDown      int
+			}{
+				serviceName: "test1",
+				serviceType: "http",
+				checkType:   "tcp",
+				ipv4:        "192.168.1.100",
+				port:        8080,
+				hcUp:        3,
+				hcDown:      3,
+			},
+			want: &AsfHealthCheck{
+				ServiceName: "test1",
+				ServiceType: "http",
+				CheckType:   "tcp",
+				IPv4:        "192.168.1.100",
+				Port:        8080,
+				HCUp:        3,
+				HCDown:      3,
+			},
+		},
+		{
+			name: "Valid HTTPS HealthCheck",
+			args: struct {
+				serviceName string
+				serviceType string
+				checkType   string
+				ipv4        string
+				port        int
+				hcUp        int
+				hcDown      int
+			}{
+				serviceName: "test2",
+				serviceType: "https",
+				checkType:   "http",
+				ipv4:        "192.168.1.101",
+				port:        443,
+				hcUp:        5,
+				hcDown:      2,
+			},
+			want: &AsfHealthCheck{
+				ServiceName: "test2",
+				ServiceType: "https",
+				CheckType:   "http",
+				IPv4:        "192.168.1.101",
+				Port:        443,
+				HCUp:        5,
+				HCDown:      2,
+			},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			got := NewAsfHealthCheck(tt.args.serviceName, tt.args.serviceType, tt.args.checkType, tt.args.ipv4, tt.args.port, tt.args.hcUp, tt.args.hcDown)
+			assert.Equal(t, tt.want, got)
+		})
+	}
+}
+
+// Test GeneratePayload
+func TestGeneratePayload(t *testing.T) {
+	hc := NewAsfHealthCheck("TestService", "HTTP", "tcp", "192.168.1.1", 8080, 3, 3)
+	payload, err := hc.GeneratePayload()
+
+	assert.NoError(t, err)
+
+	var payloadMap map[string]string
+	err = json.Unmarshal(payload, &payloadMap)
+	assert.NoError(t, err)
+
+	expectedCmd := "security real service \"TestService\" http 192.168.1.1 8080 tcp 3 3"
+	assert.Equal(t, expectedCmd, payloadMap["cmd"])
+}
+
+// Test CreateHealthCheck
+func TestAsfHealthCheck_CreateHealthCheck(t *testing.T) {
+	hc := NewAsfHealthCheck("TestService", "HTTP", "tcp", "192.168.1.1", 8080, 3, 3)
+
+	// Simulate the CreateHealthCheck method
+	err := hc.CreateHealthCheck()
+
+	// Validate that no error occurred
+	assert.NoError(t, err)
+}
+
+// Test UpdateHealthCheck
+func TestAsfHealthCheck_UpdateHealthCheck(t *testing.T) {
+	hc := NewAsfHealthCheck("TestService", "HTTP", "tcp", "192.168.1.1", 8080, 3, 3)
+
+	// Simulate the UpdateHealthCheck method
+	err := hc.UpdateHealthCheck()
+
+	// Validate that no error occurred
+	assert.NoError(t, err)
+}
+
+// Test DeleteHealthCheck
+func TestAsfHealthCheck_DeleteHealthCheck(t *testing.T) {
+	hc := NewAsfHealthCheck("TestService", "HTTP", "tcp", "192.168.1.1", 8080, 3, 3)
+
+	// Simulate the DeleteHealthCheck method
+	err := hc.DeleteHealthCheck()
+
+	// Validate that no error occurred
+	assert.NoError(t, err)
+}
Index: /branches/main/array-ingress-controller/asfadapter/realservice/realservice.go
===================================================================
--- /branches/main/array-ingress-controller/asfadapter/realservice/realservice.go	(revision 12)
+++ /branches/main/array-ingress-controller/asfadapter/realservice/realservice.go	(working copy)
@@ -7,14 +7,17 @@
 import (
 	"encoding/json"
 	"fmt"
-
+	"regexp"
+	"strings"
 	"arraynetworks.com/array-ingress-controller/asfadapter/asfclient"
 	"arraynetworks.com/array-ingress-controller/asfadapter/asfurlbuilder"
 	"arraynetworks.com/array-ingress-controller/logger"
+	"github.com/go-resty/resty/v2"
 )
 
 var (
-	log logger.Logger
+	log  logger.Logger
+	resp *resty.Response
 )
 
 func init() {
@@ -32,9 +35,6 @@
 	ServiceType string   `json:"service_type"`
 	IPDomain    IPDomain `json:"ip_domain"`
 	Port        int      `json:"port"`
-	CheckType   string   `json:"check_type"`
-	HCUp        int      `json:"hc_up"`
-	HCDown      int      `json:"hc_down"`
 	Enable      bool     `json:"enable"`
 }
 
@@ -43,29 +43,56 @@
 }
 
 // NewAsfRealService initializes and returns an AsfRealService instance
-func NewAsfRealService(serviceName, serviceType, serverIP, checkType string, serverPort, hcUp, hcDown int) *AsfRealService {
+func NewAsfRealService(serviceName, serviceType, serverIP string, serverPort int) *AsfRealService {
 	return &AsfRealService{
 		ServiceName: serviceName,
 		ServiceType: serviceType,
 		IPDomain:    IPDomain{IPv4: serverIP},
 		Port:        serverPort,
-		CheckType:   checkType,
-		HCUp:        hcUp,
-		HCDown:      hcDown,
 	}
 }
 
 // GeneratePayload creates the command payload for the ASF API request
 func (rs *AsfRealService) GeneratePayload() ([]byte, error) {
+	// Replace special characters in ServiceName with an underscore
+	re := regexp.MustCompile(`[^a-zA-Z0-9]`)
+
+	//ASF does not allow real service names to contain special characters
+	// so we replace them with an underscore
+	sanitizedServiceName := re.ReplaceAllString(rs.ServiceName, "_")
+	sanitizedServiceType := strings.ToLower(rs.ServiceType)
 	cmd := fmt.Sprintf(
-		"security real service \"%s\" %s %s %d %s %d %d",
-		rs.ServiceName,
-		rs.ServiceType,
+		"security real service \"%s\" %s %s %d",
+		sanitizedServiceName,
+		sanitizedServiceType,
 		rs.IPDomain.IPv4,
 		rs.Port,
-		rs.CheckType,
-		rs.HCUp,
-		rs.HCDown,
+	)
+
+	payload := map[string]string{
+		"cmd": cmd,
+	}
+
+	jsonData, err := json.Marshal(payload)
+	if err != nil {
+		log.Errorf("Error marshalling to JSON: %v", err)
+		return nil, err
+	}
+
+	return jsonData, nil
+}
+
+// GeneratePayload creates the command payload for the ASF API request
+func (rs *AsfRealService) GenerateDeletePayload() ([]byte, error) {
+	re := regexp.MustCompile(`[^a-zA-Z0-9]`)
+
+	//ASF does not allow real service names to contain special characters
+	// so we replace them with an underscore
+	sanitizedServiceName := re.ReplaceAllString(rs.ServiceName, "_")
+
+	cmd := fmt.Sprintf(
+		"no security real service \"%s\"",
+		sanitizedServiceName,
 	)
 
 	payload := map[string]string{
@@ -89,15 +116,29 @@
 		log.Errorf("Error generating payload: %v", err)
 		return err
 	}
+	log.Infof("Generated payload: %v", string(jsonData))
+
+	// Build the URL for the ASF API
+	// The URL is built using the GetAnnotationURL function from the asfurlbuilder package
+	annotationUrl := asfurlbuilder.GetAnnotationURL(asfurlbuilder.BaseURL["RealService"])
+	resp, err = client.Create(annotationUrl, jsonData)
 
-	annotationUrl := asfurlbuilder.GetAnnotationURL(asfurlbuilder.BaseURL["RealService"], "")
-	_, err = client.Create(annotationUrl, jsonData)
 	if err != nil {
 		log.Errorf("Error creating real service: %v", err)
 		return err
 	}
 
-	log.Infof("Successfully created real service: %s", rs.ServiceName)
+	log.Debugf("Successfully created real service: %s", rs.ServiceName)
+	log.Debugf("Response Body: %s", resp.String())
+
+	//Since ASF returns status 200 for even incorrect requests
+	//we need to check the response body for the word "Error"
+	//if the word "Error" is present in resp.String() return error
+	if regexp.MustCompile(`(?i)Error`).FindString(resp.String()) != "" {
+		log.Errorf("Error in response: %s", resp.String())
+		return err
+	}
+	log.Infof("Response Status Code: %v", resp.StatusCode())
 	return nil
 }
 
@@ -109,28 +150,47 @@
 		log.Errorf("Error generating payload: %v", err)
 		return err
 	}
+	log.Infof("Generated payload: %v", string(jsonData))
 
-	annotationUrl := asfurlbuilder.GetAnnotationURL(asfurlbuilder.BaseURL["RealService"], rs.ServiceName)
-	_, err = client.Update(annotationUrl, jsonData)
+	// Build the URL for the ASF API
+	// The URL is built using the GetAnnotationURL function from the asfurlbuilder package
+	annotationUrl := asfurlbuilder.GetAnnotationURL(asfurlbuilder.BaseURL["RealService"])
+
+	//Create function is used because POST method has been used for updating the ASF real service
+	//This has been done bbecause we are using CLI based commands to update the real service instead of actual API call
+	resp, err = client.Create(annotationUrl, jsonData) 
 	if err != nil {
 		log.Errorf("Error updating real service: %v", err)
 		return err
 	}
 
 	log.Infof("Successfully updated real service: %s", rs.ServiceName)
+	log.Infof("Response Body: %s", resp.String())
+	log.Infof("Response Status Code: %v", resp.StatusCode())
 	return nil
 }
 
-// DeleteRealService sends a DELETE request to remove the real service
+// DeleteRealService sends a POST request to remove the real service
 func (rs *AsfRealService) DeleteRealService() error {
 	client := asfclient.GetASFClient()
-	annotationUrl := asfurlbuilder.GetAnnotationURL(asfurlbuilder.BaseURL["RealService"], rs.ServiceName)
-	_, err := client.Delete(annotationUrl)
+	jsonData, err := rs.GenerateDeletePayload()
+	if err != nil {
+		log.Errorf("Error generating payload: %v", err)
+		return err
+	}
+
+	annotationUrl := asfurlbuilder.GetAnnotationURL(asfurlbuilder.BaseURL["RealService"])
+	
+	//Create function is used because POST method has been used for updating the ASF real service
+	//This has been done bbecause we are using CLI based commands to update the real service instead of actual API call
+	resp, err = client.Create(annotationUrl, jsonData)
 	if err != nil {
 		log.Errorf("Error deleting real service: %v", err)
 		return err
 	}
 
 	log.Infof("Successfully deleted real service: %s", rs.ServiceName)
+	log.Infof("Response Body: %s", resp.String())
+	log.Infof("Response Status Code: %v", resp.StatusCode())
 	return nil
 }
Index: /branches/main/array-ingress-controller/asfadapter/realservice/realservice_test.go
===================================================================
--- /branches/main/array-ingress-controller/asfadapter/realservice/realservice_test.go	(revision 12)
+++ /branches/main/array-ingress-controller/asfadapter/realservice/realservice_test.go	(working copy)
@@ -1,191 +1,136 @@
 /*
-    Copyright 2025 Array Networks
+   Copyright 2025 Array Networks
 */
 
 package realservice
 
 import (
-	"reflect"
+	"encoding/json"
 	"testing"
+
+	"github.com/stretchr/testify/assert"
 )
 
 // Test NewAsfRealService
 func TestNewAsfRealService(t *testing.T) {
-	type args struct {
-		serviceName string
-		serviceType string
-		serverIP    string
-		checkType   string
-		serverPort  int
-		hcUp        int
-		hcDown      int
-	}
 	tests := []struct {
 		name string
-		args args
+		args struct {
+			serviceName string
+			serviceType string
+			serverIP    string
+			serverPort  int
+		}
 		want *AsfRealService
 	}{
 		{
 			name: "Valid HTTP AsfRealService",
-			args: args{
+			args: struct {
+				serviceName string
+				serviceType string
+				serverIP    string
+				serverPort  int
+			}{
 				serviceName: "test1",
 				serviceType: "http",
 				serverIP:    "192.168.1.100",
-				checkType:   "tcp",
-				serverPort:  80,
-				hcUp:        2,
-				hcDown:      2,
+				serverPort:  8080,
 			},
 			want: &AsfRealService{
 				ServiceName: "test1",
 				ServiceType: "http",
 				IPDomain:    IPDomain{IPv4: "192.168.1.100"},
-				Port:        80,
-				CheckType:   "tcp",
-				HCUp:        2,
-				HCDown:      2,
-				Enable:      true,
+				Port:        8080,
 			},
 		},
 		{
 			name: "Valid HTTPS AsfRealService",
-			args: args{
+			args: struct {
+				serviceName string
+				serviceType string
+				serverIP    string
+				serverPort  int
+			}{
 				serviceName: "test2",
 				serviceType: "https",
 				serverIP:    "192.168.1.101",
-				checkType:   "tcp",
 				serverPort:  443,
-				hcUp:        3,
-				hcDown:      3,
 			},
 			want: &AsfRealService{
 				ServiceName: "test2",
 				ServiceType: "https",
 				IPDomain:    IPDomain{IPv4: "192.168.1.101"},
 				Port:        443,
-				CheckType:   "tcp",
-				HCUp:        3,
-				HCDown:      3,
-				Enable:      true,
 			},
 		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
-			got := NewAsfRealService(tt.args.serviceName, tt.args.serviceType, tt.args.serverIP, tt.args.checkType, tt.args.serverPort, tt.args.hcUp, tt.args.hcDown)
-			if !reflect.DeepEqual(got, tt.want) {
-				t.Errorf("NewAsfRealService() = %v, want %v", got, tt.want)
-			}
+			got := NewAsfRealService(tt.args.serviceName, tt.args.serviceType, tt.args.serverIP, tt.args.serverPort)
+			assert.Equal(t, tt.want, got)
 		})
 	}
 }
 
+// Test GeneratePayload
+func TestGeneratePayload(t *testing.T) {
+	rs := NewAsfRealService("TestService", "HTTP", "192.168.1.1", 8080)
+	payload, err := rs.GeneratePayload()
+
+	assert.NoError(t, err)
+
+	var payloadMap map[string]string
+	err = json.Unmarshal(payload, &payloadMap)
+	assert.NoError(t, err)
+
+	expectedCmd := "security real service \"TestService\" http 192.168.1.1 8080"
+	assert.Equal(t, expectedCmd, payloadMap["cmd"])
+}
+
+// Test GenerateDeletePayload
+func TestGenerateDeletePayload(t *testing.T) {
+	rs := NewAsfRealService("TestService", "HTTP", "192.168.1.1", 8080)
+	payload, err := rs.GenerateDeletePayload()
+
+	assert.NoError(t, err)
+
+	var payloadMap map[string]string
+	err = json.Unmarshal(payload, &payloadMap)
+	assert.NoError(t, err)
+
+	expectedCmd := "no security real service \"TestService\""
+	assert.Equal(t, expectedCmd, payloadMap["cmd"])
+}
+
 // Test CreateRealService
 func TestAsfRealService_CreateRealService(t *testing.T) {
-	tests := []struct {
-		name    string
-		service *AsfRealService
-		wantErr bool
-	}{
-		{
-			name: "Create valid HTTP service",
-			service: &AsfRealService{
-				ServiceName: "web-app-1",
-				IPDomain:    IPDomain{IPv4: "192.168.1.100"},
-				Port:        80,
-				ServiceType: "http",
-				CheckType:   "tcp",
-				HCUp:        2,
-				HCDown:      2,
-				Enable:      true,
-			},
-			wantErr: false,
-		},
-		{
-			name: "Create valid HTTPS service",
-			service: &AsfRealService{
-				ServiceName: "web-app-2",
-				IPDomain:    IPDomain{IPv4: "192.168.1.101"},
-				Port:        443,
-				ServiceType: "https",
-				CheckType:   "tcp",
-				HCUp:        3,
-				HCDown:      3,
-				Enable:      true,
-			},
-			wantErr: false,
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			err := tt.service.CreateRealService()
-			if (err != nil) != tt.wantErr {
-				t.Errorf("AsfRealService.CreateRealService() error = %v, wantErr %v", err, tt.wantErr)
-			}
-		})
-	}
+	rs := NewAsfRealService("TestService", "HTTP", "192.168.1.1", 8080)
+
+	// Simulate the CreateRealService method
+	err := rs.CreateRealService()
+
+	// Validate that no error occurred
+	assert.NoError(t, err)
 }
 
 // Test UpdateRealService
 func TestAsfRealService_UpdateRealService(t *testing.T) {
-	tests := []struct {
-		name    string
-		service *AsfRealService
-		wantErr bool
-	}{
-		{
-			name: "Update existing service",
-			service: &AsfRealService{
-				ServiceName: "web-app-1",
-				IPDomain:    IPDomain{IPv4: "192.168.1.100"},
-				Port:        80,
-				ServiceType: "http",
-				CheckType:   "tcp",
-				HCUp:        2,
-				HCDown:      2,
-				Enable:      true,
-			},
-			wantErr: false,
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			err := tt.service.UpdateRealService()
-			if (err != nil) != tt.wantErr {
-				t.Errorf("AsfRealService.UpdateRealService() error = %v, wantErr %v", err, tt.wantErr)
-			}
-		})
-	}
+	rs := NewAsfRealService("TestService", "HTTP", "192.168.1.1", 8080)
+
+	// Simulate the UpdateRealService method
+	err := rs.UpdateRealService()
+
+	// Validate that no error occurred
+	assert.NoError(t, err)
 }
 
 // Test DeleteRealService
 func TestAsfRealService_DeleteRealService(t *testing.T) {
-	tests := []struct {
-		name    string
-		service *AsfRealService
-		wantErr bool
-	}{
-		{
-			name: "Delete existing service",
-			service: &AsfRealService{
-				ServiceName: "web-app-1",
-				IPDomain:    IPDomain{IPv4: "192.168.1.100"},
-				Port:        80,
-				ServiceType: "http",
-				CheckType:   "tcp",
-				HCUp:        2,
-				HCDown:      2,
-				Enable:      true,
-			},
-			wantErr: false,
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			err := tt.service.DeleteRealService()
-			if (err != nil) != tt.wantErr {
-				t.Errorf("AsfRealService.DeleteRealService() error = %v, wantErr %v", err, tt.wantErr)
-			}
-		})
-	}
+	rs := NewAsfRealService("TestService", "HTTP", "192.168.1.1", 8080)
+
+	// Simulate the DeleteRealService method
+	err := rs.DeleteRealService()
+
+	// Validate that no error occurred
+	assert.NoError(t, err)
 }
Index: /branches/main/array-ingress-controller/common/baseclient/baseclient.go
===================================================================
--- /branches/main/array-ingress-controller/common/baseclient/baseclient.go	(revision 12)
+++ /branches/main/array-ingress-controller/common/baseclient/baseclient.go	(working copy)
@@ -38,16 +38,19 @@
 	authenticator Authenticator
 }
 
+// Authenticator holds authentication credentials.
 type Authenticator struct {
 	Username string
 	Password string
 }
 
+// Singleton instance of the logger
 var (
 	log  logger.Logger
 	once sync.Once
 )
 
+// init initializes the logger.
 func init() {
 	log = logger.GetLogger()
 }
@@ -63,7 +66,7 @@
 		log.Fatalf("Invalid value for %s_TIMEOUT: %v", prefix, err)
 	}
 	return Configuration{
-		Username:     os.Getenv(prefix + "_USERNAME"),
+		Username:     os.Getenv	(prefix + "_USERNAME"),
 		Password:     os.Getenv(prefix + "_PASSWORD"),
 		InsecureSkip: insecureSkip,
 		Timeout:      timeout,
@@ -92,7 +95,7 @@
 	}
 }
 
-// requestSetup sets up the request with authentication.
+// RequestSetup sets up the request with authentication.
 func (b *BaseClient) requestSetup() *resty.Request {
 	return b.client.R().SetBasicAuth(b.authenticator.Username, b.authenticator.Password)
 }
@@ -143,26 +146,33 @@
 }
 
 // Client methods implementing the interface.
+// Fetch, Create, Delete, Update
+
+// Fetch retrieves data from the specified URL.
 func (b *BaseClient) Fetch(annotationUrl string) (*resty.Response, error) {
 	url := b.constructUrl(b.instType, annotationUrl)
 	return b.sendRequest(http.MethodGet, url, nil)
 }
 
+// Create sends a POST request to create a resource.
 func (b *BaseClient) Create(annotationUrl string, body interface{}) (*resty.Response, error) {
 	url := b.constructUrl(b.instType, annotationUrl)
 	return b.sendRequest(http.MethodPost, url, body)
 }
 
+// Delete sends a DELETE request to remove a resource.
 func (b *BaseClient) Delete(annotationUrl string) (*resty.Response, error) {
 	url := b.constructUrl(b.instType, annotationUrl)
 	return b.sendRequest(http.MethodDelete, url, nil)
 }
 
+// Patch sends a PATCH request to update a resource.
 func (b *BaseClient) Update(annotationUrl string, body interface{}) (*resty.Response, error) {
 	url := b.constructUrl(b.instType, annotationUrl)
 	return b.sendRequest(http.MethodPut, url, body)
 }
 
+
 // Dynamically constructs url for API calls based on the instance type fetched from the client
 // Uses Environment variables to set
 func (b *BaseClient) constructUrl(instType, annotationUrl string) string {
Index: /branches/main/array-ingress-controller/common/go.mod
===================================================================
--- /branches/main/array-ingress-controller/common/go.mod	(revision 12)
+++ /branches/main/array-ingress-controller/common/go.mod	(nonexistent)
@@ -1,5 +0,0 @@
-module arraynetworks.com/array-ingress-controller/common
-
-go 1.23.6
-
-
Index: /branches/main/array-ingress-controller/configstore/configstore_test.go
===================================================================
--- /branches/main/array-ingress-controller/configstore/configstore_test.go	(revision 11)
+++ /branches/main/array-ingress-controller/configstore/configstore_test.go	(nonexistent)
@@ -1,84 +0,0 @@
-/*
-package configstore
-
-import (
-	"testing"
-	"arraynetworks.com/array-ingress-controller/configstore/mocks"
-	"arraynetworks.com/array-ingress-controller/configstore"
-	"github.com/golang/mock/gomock"
-	. "github.com/onsi/ginkgo/v2"
-	. "github.com/onsi/gomega"
-)
-
-func TestConfigStore(t *testing.T) {
-	RegisterFailHandler(Fail)
-	RunSpecs(t, "ConfigStore Suite")
-}
-
-var _ = Describe("ConfigStore", func() {
-	var (
-		ctrl        *gomock.Controller
-		mockDB      *mocks.MockDB
-		configStore *configstore.ConfigStore
-	)
-
-	BeforeEach(func() {
-		ctrl = gomock.NewController(GinkgoT())
-		mockDB = mocks.NewMockDB(ctrl)
-		configStore = configstore.NewConfigStore(mockDB)
-	})
-
-	AfterEach(func() {
-		ctrl.Finish()
-	})
-
-	Context("Service Operations", func() {
-		It("should create a service successfully", func() {
-			service := &configstore.Service{
-				ServiceName:   "TestService",
-				Protocol:      "TCP",
-				IPAddress:     "192.168.1.1",
-				IsIP6:         false,
-				Enable:        true,
-				Port:          8080,
-				MaxConn:       100,
-				CheckTypeHTTP: "GET",
-				HcUp:          5,
-				HcDown:        3,
-			}
-			mockDB.EXPECT().Create(service).Return(nil).Times(1)
-			err := configStore.CreateService(service)
-			Expect(err).To(BeNil())
-		})
-
-		It("should read all services", func() {
-			mockServices := []configstore.Service{
-				{ServiceName: "Service1", Protocol: "TCP", IPAddress: "192.168.1.1", Port: 8080},
-				{ServiceName: "Service2", Protocol: "UDP", IPAddress: "192.168.1.2", Port: 9090},
-			}
-			mockDB.EXPECT().ReadAll().Return(mockServices, nil).Times(1)
-			services, err := configStore.ReadAllServices()
-			Expect(err).To(BeNil())
-			Expect(services).To(Equal(mockServices))
-		})
-
-		It("should update a service successfully", func() {
-			service := &configstore.Service{
-				ServiceName: "TestService",
-				IPAddress:   "192.168.1.10",
-				Port:        9090,
-			}
-			mockDB.EXPECT().Update(service).Return(nil).Times(1)
-			err := configStore.UpdateService(service)
-			Expect(err).To(BeNil())
-		})
-
-		It("should delete a service successfully", func() {
-			service := &configstore.Service{ServiceName: "TestService"}
-			mockDB.EXPECT().Delete(service).Return(nil).Times(1)
-			err := configStore.DeleteService(service)
-			Expect(err).To(BeNil())
-		})
-	})
-})
-*/
\ No newline at end of file
Index: /branches/main/array-ingress-controller/configstore/db.go
===================================================================
--- /branches/main/array-ingress-controller/configstore/db.go	(revision 12)
+++ /branches/main/array-ingress-controller/configstore/db.go	(working copy)
@@ -68,6 +68,7 @@
 				&Group{},
 				&RateLimit{},
 				&AsfRealService{},
+				&AsfHealthCheck{},
 			); err != nil {
 				log.Errorf("AutoMigrate failed: %s", err)
 			}
@@ -86,13 +87,13 @@
         BEFORE INSERT ON real_services
         BEGIN
             SELECT 
-                RAISE(FAIL, 'Port and IP combination already exists with status = "waiting"')
+                RAISE(FAIL, 'Port and IP combination already exists with status = "WAITING"')
             WHERE EXISTS (
                 SELECT 1 
                 FROM real_services
                 WHERE ip_address = NEW.ip_address 
                 AND port = NEW.port 
-                AND status = 'waiting'
+                AND status = 'WAITING'
             );
         END;
         `,
@@ -102,13 +103,13 @@
         BEFORE UPDATE ON real_services
         BEGIN
             SELECT 
-                RAISE(FAIL, 'Port and IP combination already exists with status = "waiting"')
+                RAISE(FAIL, 'Port and IP combination already exists with status = "WAITING"')
             WHERE EXISTS (
                 SELECT 1 
                 FROM real_services
                 WHERE ip_address = NEW.ip_address 
                 AND port = NEW.port 
-                AND status = 'waiting'
+                AND status = 'WAITING'
                 AND rowid != NEW.rowid
             );
         END;
@@ -119,13 +120,13 @@
         BEFORE INSERT ON asf_real_services
         BEGIN
             SELECT 
-                RAISE(FAIL, 'Port and IPv4 combination already exists with status = "waiting"')
+                RAISE(FAIL, 'Port and IPv4 combination already exists with status = "WAITING"')
             WHERE EXISTS (
                 SELECT 1 
                 FROM asf_real_services
                 WHERE ipv4 = NEW.ipv4 
                 AND port = NEW.port 
-                AND status = 'waiting'
+                AND status = 'WAITING'
             );
         END;
         `,
@@ -135,13 +136,13 @@
         BEFORE UPDATE ON asf_real_services
         BEGIN
             SELECT 
-                RAISE(FAIL, 'Port and IPv4 combination already exists with status = "waiting"')
+                RAISE(FAIL, 'Port and IPv4 combination already exists with status = "WAITING"')
             WHERE EXISTS (
                 SELECT 1 
                 FROM asf_real_services
                 WHERE ipv4 = NEW.ipv4 
                 AND port = NEW.port 
-                AND status = 'waiting'
+                AND status = 'WAITING'
                 AND rowid != NEW.rowid
             );
         END;
Index: /branches/main/array-ingress-controller/configstore/go.mod
===================================================================
--- /branches/main/array-ingress-controller/configstore/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/configstore/go.mod	(nonexistent)
@@ -1,23 +0,0 @@
-module arraynetworks.com/array-ingress-controller/configstore
-
-go 1.23.6
-
-replace arraynetworks.com/array-ingress-controller/logger => ../logger
-
-require (
-	github.com/cenkalti/backoff/v4 v4.3.0
-	gorm.io/datatypes v1.2.5
-	gorm.io/driver/sqlite v1.5.7
-	gorm.io/gorm v1.25.12
-)
-
-require (
-	filippo.io/edwards25519 v1.1.0 // indirect
-	github.com/go-sql-driver/mysql v1.8.1 // indirect
-	github.com/google/uuid v1.6.0 // indirect
-	github.com/jinzhu/inflection v1.0.0 // indirect
-	github.com/jinzhu/now v1.1.5 // indirect
-	github.com/mattn/go-sqlite3 v1.14.22 // indirect
-	golang.org/x/text v0.14.0 // indirect
-	gorm.io/driver/mysql v1.5.6 // indirect
-)
Index: /branches/main/array-ingress-controller/configstore/models.go
===================================================================
--- /branches/main/array-ingress-controller/configstore/models.go	(revision 12)
+++ /branches/main/array-ingress-controller/configstore/models.go	(working copy)
@@ -22,6 +22,7 @@
 	CurrentOp   string `gorm:"column:current_op;not null"`
 }
 
+// HealthCheck represents the health check table structure
 type HealthCheck struct {
 	IngressName   string `gorm:"column:ingress_name;not null"`
 	HCName        string `gorm:"column:hc_name;not null" json:"hc_name"`
@@ -51,6 +52,7 @@
 	CurrentOp    string         `gorm:"column:current_op;not null"`
 }
 
+// RateLimit represents the rate limit table structure
 type RateLimit struct {
 	IngressName          string `gorm:"column:ingress_name;not null"`
 	ServiceName          string `gorm:"column:service_name;not null"`
@@ -66,13 +68,25 @@
 	CurrentOp            string `gorm:"column:current_op;not null"`
 }
 
+// AsfRealService represents the structure for storing ASF real service data in SQLite using GORM.
 type AsfRealService struct {
 	IngressName string `gorm:"column:ingress_name;not null"`
 	ServiceName string `gorm:"column:service_name;not null"`
 	ServiceType string `gorm:"column:service_type;not null"`
 	IPv4        string `gorm:"column:ipv4;not null"`
 	Port        int    `gorm:"column:port;not null"`
-	CheckType   string `gorm:"column:check_type;not null"`
+	Status      string `gorm:"column:status;not null"`
+	CurrentOp   string `gorm:"column:current_op;not null"`
+}
+
+// AsfHealthCheck represents the structure for storing ASF health check data in SQLite using GORM.
+type AsfHealthCheck struct {
+	IngressName string `gorm:"column:ingress_name;not null"`
+	ServiceName string `gorm:"column:service_name;not null"`
+	ServiceType string `gorm:"column:service_type;not null"`
+	IPv4        string `gorm:"column:ipv4;not null"`
+	Port        int    `gorm:"column:port;not null"`
+	CheckType   string `gorm:"column:hc_type;not null"`
 	HCUp        int    `gorm:"column:hc_up;not null"`
 	HCDown      int    `gorm:"column:hc_down;not null"`
 	Status      string `gorm:"column:status;not null"`
Index: /branches/main/array-ingress-controller/controller/go.mod
===================================================================
--- /branches/main/array-ingress-controller/controller/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/controller/go.mod	(nonexistent)
@@ -1,49 +0,0 @@
-module arraynetworks.com/array-ingress-controller/controller
-
-go 1.23.6
-
-require (
-	k8s.io/api v0.32.2
-	k8s.io/apimachinery v0.32.2
-	k8s.io/client-go v0.32.2
-	k8s.io/klog/v2 v2.130.1
-)
-
-require (
-	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
-	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
-	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
-	github.com/go-logr/logr v1.4.2 // indirect
-	github.com/go-openapi/jsonpointer v0.21.0 // indirect
-	github.com/go-openapi/jsonreference v0.20.2 // indirect
-	github.com/go-openapi/swag v0.23.0 // indirect
-	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/golang/protobuf v1.5.4 // indirect
-	github.com/google/gnostic-models v0.6.8 // indirect
-	github.com/google/go-cmp v0.6.0 // indirect
-	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/uuid v1.6.0 // indirect
-	github.com/josharian/intern v1.0.0 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-	github.com/pkg/errors v0.9.1 // indirect
-	github.com/x448/float16 v0.8.4 // indirect
-	golang.org/x/net v0.30.0 // indirect
-	golang.org/x/oauth2 v0.23.0 // indirect
-	golang.org/x/sys v0.26.0 // indirect
-	golang.org/x/term v0.25.0 // indirect
-	golang.org/x/text v0.19.0 // indirect
-	golang.org/x/time v0.7.0 // indirect
-	google.golang.org/protobuf v1.35.1 // indirect
-	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
-	gopkg.in/inf.v0 v0.9.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
-	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
-	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
-	sigs.k8s.io/yaml v1.4.0 // indirect
-)
Index: /branches/main/array-ingress-controller/controller/go.sum
===================================================================
--- /branches/main/array-ingress-controller/controller/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/controller/go.sum	(nonexistent)
@@ -1,154 +0,0 @@
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
-github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
-github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
-github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
-github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
-github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
-github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
-github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo=
-github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM=
-github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
-github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
-github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
-github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
-golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
-golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24=
-golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
-golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
-golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
-golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
-golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
-google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
-gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw=
-k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y=
-k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
-k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
-k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA=
-k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
Index: /branches/main/array-ingress-controller/controller/ha_leader_elect.go
===================================================================
--- /branches/main/array-ingress-controller/controller/ha_leader_elect.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/ha_leader_elect.go	(nonexistent)
@@ -1,52 +0,0 @@
-/*
-	Copyright 2025 Array Networks
-*/
-
-package controller
-
-import (
-	"context"
-	"os"
-	"time"
-
-	ctrl "sigs.k8s.io/controller-runtime"
-	"sigs.k8s.io/controller-runtime/pkg/manager"
-	"arraynetworks.com/array-ingress-controller/logger"
-)
-
-var (
-	LeaseDuration = 15 * time.Second
-	RenewDeadline = 10 * time.Second
-	RetryPeriod   = 5 * time.Second
-)
-
-func StartLeaderElection(ctx context.Context, leaderFunc func(context.Context)) {
-	logger.Info("Initializing Kubernetes Leader Election...")
-
-	namespace, exists := os.LookupEnv("CONTROLLER_NAMESPACE")
-	if !exists || namespace == "" {
-		logger.Fatalf("LEASE_NAMESPACE environment variable not set. Exiting...")
-	}
-
-	mgr, err := manager.New(ctrl.GetConfigOrDie(), manager.Options{
-		LeaderElection:          true,
-		LeaderElectionID:        LeaderElectionID,
-		LeaderElectionNamespace: namespace,
-		LeaseDuration:           &LeaseDuration,
-		RenewDeadline:           &RenewDeadline,
-		RetryPeriod:             &RetryPeriod,
-	})
-	if err != nil {
-		logger.Fatalf("Failed to create manager: %v", err)
-	}
-
-	go func() {
-		<-mgr.Elected()
-		logger.Info("This pod has been elected as the leader.")
-		leaderFunc(ctx)
-	}()
-
-	if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
-		logger.Fatalf("Manager failed: %v", err)
-	}
-}
Index: /branches/main/array-ingress-controller/controller/k8s-controller/admission/main.go
===================================================================
--- /branches/main/array-ingress-controller/controller/k8s-controller/admission/main.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/k8s-controller/admission/main.go	(nonexistent)
@@ -1,83 +0,0 @@
-package controller
-
-import (
-	"fmt"
-	"net/http"
-
-	admissionv1 "k8s.io/api/admission/v1"
-	networking "k8s.io/api/networking/v1"
-	apiequality "k8s.io/apimachinery/pkg/api/equality"
-	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/serializer/json"
-	"k8s.io/klog/v2"
-)
-
-var ingressResource = metav1.GroupVersionKind{
-	Group:   networking.GroupName,
-	Version: "v1",
-	Kind:    "Ingress",
-}
-
-// HandleAdmission populates the admission Response
-// with Allowed=false if the Object is an ingress that would prevent nginx to reload the configuration
-// with Allowed=true otherwise
-func (ia *IngressAdmission) HandleAdmission(obj runtime.Object) (runtime.Object, error) {
-	review, isV1 := obj.(*admissionv1.AdmissionReview)
-	if !isV1 {
-		return nil, fmt.Errorf("request is not of type AdmissionReview v1 or v1beta1")
-	}
-
-	if !apiequality.Semantic.DeepEqual(review.Request.Kind, ingressResource) {
-		return nil, fmt.Errorf("rejecting admission review because the request does not contain an Ingress resource but %s with name %s in namespace %s",
-			review.Request.Kind.String(), review.Request.Name, review.Request.Namespace)
-	}
-
-	status := &admissionv1.AdmissionResponse{}
-	status.UID = review.Request.UID
-
-	ingress := networking.Ingress{}
-
-	codec := json.NewSerializerWithOptions(json.DefaultMetaFactory, scheme, scheme, json.SerializerOptions{
-		Pretty: true,
-	})
-	_, _, err := codec.Decode(review.Request.Object.Raw, nil, &ingress)
-	if err != nil {
-		klog.ErrorS(err, "failed to decode ingress")
-		status.Allowed = false
-		status.Result = &metav1.Status{
-			Status: metav1.StatusFailure, Code: http.StatusBadRequest, Reason: metav1.StatusReasonBadRequest,
-			Message: err.Error(),
-		}
-
-		review.Response = status
-		return review, nil
-	}
-
-	// Adds the warnings regardless of operation being allowed or not
-	warning, err := ia.Checker.CheckWarning(&ingress)
-	if err != nil {
-		klog.ErrorS(err, "failed to get ingress warnings")
-	}
-	if len(warning) > 0 {
-		status.Warnings = warning
-	}
-
-	if err := ia.Checker.CheckIngress(&ingress); err != nil {
-		klog.ErrorS(err, "invalid ingress configuration", "ingress", fmt.Sprintf("%v/%v", review.Request.Namespace, review.Request.Name))
-		status.Allowed = false
-		status.Result = &metav1.Status{
-			Status: metav1.StatusFailure, Code: http.StatusBadRequest, Reason: metav1.StatusReasonBadRequest,
-			Message: err.Error(),
-		}
-
-		review.Response = status
-		return review, nil
-	}
-
-	klog.InfoS("successfully validated configuration, accepting", "ingress", fmt.Sprintf("%v/%v", review.Request.Namespace, review.Request.Name))
-	status.Allowed = true
-	review.Response = status
-
-	return review, nil
-}
Index: /branches/main/array-ingress-controller/controller/k8s-controller/admission/server.go
===================================================================
--- /branches/main/array-ingress-controller/controller/k8s-controller/admission/server.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/k8s-controller/admission/server.go	(nonexistent)
@@ -1,76 +0,0 @@
-package controller
-
-import (
-	"io"
-	"net/http"
-
-	admissionv1 "k8s.io/api/admission/v1"
-	"k8s.io/apimachinery/pkg/runtime"
-	"k8s.io/apimachinery/pkg/runtime/serializer/json"
-	"k8s.io/klog/v2"
-)
-
-var scheme = runtime.NewScheme()
-
-func init() {
-	if err := admissionv1.AddToScheme(scheme); err != nil {
-		klog.ErrorS(err, "Failed to add scheme")
-	}
-}
-
-// AdmissionController checks if an object
-// is allowed in the cluster
-type AdmissionController interface {
-	HandleAdmission(runtime.Object) (runtime.Object, error)
-}
-
-// AdmissionControllerServer implements an HTTP server
-// for kubernetes validating webhook
-// https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#validatingadmissionwebhook
-type AdmissionControllerServer struct {
-	AdmissionController AdmissionController
-}
-
-// NewAdmissionControllerServer instantiates an admission controller server with
-// a default codec
-func NewAdmissionControllerServer(ac AdmissionController) *AdmissionControllerServer {
-	return &AdmissionControllerServer{
-		AdmissionController: ac,
-	}
-}
-
-// ServeHTTP implements http.Server method
-func (acs *AdmissionControllerServer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
-	defer req.Body.Close()
-
-	data, err := io.ReadAll(req.Body)
-	if err != nil {
-		klog.ErrorS(err, "Failed to read request body")
-		w.WriteHeader(http.StatusBadRequest)
-		return
-	}
-
-	codec := json.NewSerializerWithOptions(json.DefaultMetaFactory, scheme, scheme, json.SerializerOptions{
-		Pretty: true,
-	})
-
-	obj, _, err := codec.Decode(data, nil, nil)
-	if err != nil {
-		klog.ErrorS(err, "Failed to decode request body")
-		w.WriteHeader(http.StatusBadRequest)
-		return
-	}
-
-	result, err := acs.AdmissionController.HandleAdmission(obj)
-	if err != nil {
-		klog.ErrorS(err, "failed to process webhook request")
-		w.WriteHeader(http.StatusInternalServerError)
-		return
-	}
-
-	if err := codec.Encode(result, w); err != nil {
-		klog.ErrorS(err, "failed to encode response body")
-		w.WriteHeader(http.StatusInternalServerError)
-		return
-	}
-}
Index: /branches/main/array-ingress-controller/controller/k8s-controller/admission/validate.go
===================================================================
--- /branches/main/array-ingress-controller/controller/k8s-controller/admission/validate.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/k8s-controller/admission/validate.go	(nonexistent)
@@ -1,73 +0,0 @@
-package controller
-
-import (
-	"fmt"
-	"strings"
-	"annotations"
-	"health"
-
-	networking "k8s.io/api/networking/v1"
-	"k8s.io/klog/v2"
-)
-
-// Checker must return an error if the ingress provided as argument
-// contains invalid instructions
-type Checker interface {
-	CheckIngress(ing *networking.Ingress) error
-}
-
-// IngressAdmission implements the AdmissionController interface
-// to handle Admission Reviews and deny requests that are not validated
-type IngressAdmission struct {
-	Checker   Checker
-	Namespace string
-}
-
-// CheckIngress returns an error in case the provided ingress, when added
-// to the current configuration, generates an invalid configuration
-func (n *IngressAdmission) CheckIngress(ing *networking.Ingress) error {
-
-	if ing == nil {
-		// no ingress to add, no state change
-		return nil
-	}
-
-	// Skip checks if the ingress is marked as deleted
-	if !ing.DeletionTimestamp.IsZero() {
-		return nil
-	}
-
-	/*
-		// Do not attempt to validate an ingress that's not meant to be controlled by the current instance of the controller.
-		if ingressClass, err := GetIngressClass(ing); ingressClass == "array" {
-			klog.Warningf("ignoring ingress %v in %v based on annotation %v: %v", ing.Name, ing.ObjectMeta.Namespace, ingressClass, err)
-			return nil
-		}
-
-		if n.Namespace != "" && ing.ObjectMeta.Namespace != n.cfg.Namespace {
-			fmt.Println("ignoring ingress %v in namespace %v different from the namespace watched %s", ing.Name, ing.ObjectMeta.Namespace, n.Namespace)
-			return nil
-		}
-	*/
-
-	annots := annotations.Extract(ing)
-
-	for key, annotationData := range annots {
-		var hlth_annots &health.HealthAnnotation
-		// Unmarshal the JSON data into the struct
-		if err := json.Unmarshal([]byte(annotationData), &hlth_annots); err != nil {
-			return errors.New("invalid JSON format")
-		}
-
-		parserInstance := hlth_annots.NewParser()
-		// Iterate over the Validators and call each function
-		for key, validator := range parserInstance.annotationConfig.Validators {
-			if err := validator(); err != nil {
-				fmt.Printf("Validation error for %s: %s\n", key, err)
-			} else {
-				fmt.Printf("Validation passed for %s\n", key)
-			}
-		}
-	}
-	return nil
-}
Index: /branches/main/array-ingress-controller/controller/k8s-controller/controller.go
===================================================================
--- /branches/main/array-ingress-controller/controller/k8s-controller/controller.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/k8s-controller/controller.go	(nonexistent)
@@ -1,150 +0,0 @@
-package controller
-
-import (
-	"fmt"
-	"time"
-
-	v1 "k8s.io/api/core/v1"
-	networkingv1 "k8s.io/api/networking/v1"
-	"k8s.io/apimachinery/pkg/labels"
-	"k8s.io/apimachinery/pkg/util/runtime"
-	"k8s.io/client-go/informers"
-	clientset "k8s.io/client-go/kubernetes"
-	"k8s.io/client-go/tools/cache"
-)
-
-// EventType type of event associated with an informer
-type EventType string
-
-const (
-	// CreateEvent event associated with new objects in an informer
-	CreateEvent EventType = "CREATE"
-	// UpdateEvent event associated with an object update in an informer
-	UpdateEvent EventType = "UPDATE"
-	// DeleteEvent event associated when an object is removed from an informer
-	DeleteEvent EventType = "DELETE"
-	// ConfigurationEvent event associated when a controller configuration object is created or updated
-	ConfigurationEvent EventType = "CONFIGURATION"
-)
-
-// Event holds the context of an event.
-type Event struct {
-	Type EventType
-	Obj  interface{}
-}
-
-// Informer defines the required SharedIndexInformers that interact with the API server.
-type Informer struct {
-	Ingress cache.SharedIndexInformer
-	Pod     cache.SharedIndexInformer
-	Service cache.SharedIndexInformer
-}
-
-// Run initiates the synchronization of the informers against the API server.
-func (i *Informer) Run(stopCh chan struct{}) {
-	go i.Pod.Run(stopCh)
-	go i.Service.Run(stopCh)
-
-	// wait for all involved caches to be synced before processing items
-	// from the queue
-	if !cache.WaitForCacheSync(stopCh,
-		i.Service.HasSynced,
-		i.Pod.HasSynced,
-	) {
-		runtime.HandleError(fmt.Errorf("timed out waiting for caches to sync"))
-	}
-
-	// in big clusters, deltas can keep arriving even after HasSynced
-	// functions have returned 'true'
-	time.Sleep(1 * time.Second)
-
-	// we can start syncing ingress objects only after other caches are
-	// ready, because ingress rules require content from other listers, and
-	// 'add' events get triggered in the handlers during caches population.
-	go i.Ingress.Run(stopCh)
-	if !cache.WaitForCacheSync(stopCh,
-		i.Ingress.HasSynced,
-	) {
-		runtime.HandleError(fmt.Errorf("timed out waiting for caches to sync"))
-	}
-}
-
-func New(
-	namespace string,
-	namespaceSelector labels.Selector,
-	resyncPeriod time.Duration,
-	client clientset.Interface,
-) {
-
-	// create informers factory, enable and assign required informers
-	infFactory := informers.NewSharedInformerFactoryWithOptions(client, resyncPeriod,
-		informers.WithNamespace(namespace),
-	)
-
-	// Create the SharedInformerFactory and Pod Informer
-	podsInformer := infFactory.Core().V1().Pods().Informer()
-
-	// Create the SharedInformerFactory and Ingress Informer
-	ingressInformer := infFactory.Networking().V1().Ingresses().Informer()
-
-	// Create the SharedInformerFactory and Service Informer
-	servicesInformer := infFactory.Core().V1().Services().Informer()
-
-	// Define an event handler for Pod events
-	podsInformer.AddEventHandler(
-		cache.ResourceEventHandlerFuncs{
-			AddFunc: func(obj interface{}) {
-				pod := obj.(*v1.Pod)
-				fmt.Printf("Pod added: %s\n", pod.Name)
-			},
-			UpdateFunc: func(oldObj, newObj interface{}) {
-				oldPod := oldObj.(*v1.Pod)
-				newPod := newObj.(*v1.Pod)
-				fmt.Printf("Pod updated: %s -> %s\n", oldPod.Name, newPod.Name)
-			},
-			DeleteFunc: func(obj interface{}) {
-				pod := obj.(*v1.Pod)
-				fmt.Printf("Pod deleted: %s\n", pod.Name)
-			},
-		},
-	)
-
-	// Define an event handler for Ingress events
-	ingressInformer.AddEventHandler(
-		cache.ResourceEventHandlerFuncs{
-			AddFunc: func(obj interface{}) {
-				ingress := obj.(*networkingv1.Ingress)
-				fmt.Printf("Ingress added: %s\n", ingress.Name)
-			},
-			UpdateFunc: func(oldObj, newObj interface{}) {
-				oldIngress := oldObj.(*networkingv1.Ingress)
-				newIngress := newObj.(*networkingv1.Ingress)
-				fmt.Printf("Ingress updated: %s -> %s\n", oldIngress.Name, newIngress.Name)
-			},
-			DeleteFunc: func(obj interface{}) {
-				ingress := obj.(*networkingv1.Ingress)
-				fmt.Printf("Ingress deleted: %s\n", ingress.Name)
-			},
-		},
-	)
-
-	// Define an event handler for Service events
-	servicesInformer.AddEventHandler(
-		cache.ResourceEventHandlerFuncs{
-			AddFunc: func(obj interface{}) {
-				service := obj.(*v1.Service)
-				fmt.Printf("Service added: %s\n", service.Name)
-			},
-			UpdateFunc: func(oldObj, newObj interface{}) {
-				oldService := oldObj.(*v1.Service)
-				newService := newObj.(*v1.Service)
-				fmt.Printf("Service updated: %s -> %s\n", oldService.Name, newService.Name)
-			},
-			DeleteFunc: func(obj interface{}) {
-				service := obj.(*v1.Service)
-				fmt.Printf("Service deleted: %s\n", service.Name)
-			},
-		},
-	)
-
-}
Index: /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/annotations.go
===================================================================
--- /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/annotations.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/annotations.go	(nonexistent)
@@ -1,45 +0,0 @@
-package annotations
-
-import (
-    "encoding/json"
-    "fmt"
-    "strings"
-    "reflect"
-)
-
-type Annotations struct {
-    Key   string
-    Value interface{}
-}
-
-// Extract extracts the annotations from an Ingress
-func Extract(ing *networking.Ingress) ([]Annotations, error) {
-	var annotations []Annotation
-    if ingress.Annotations != nil {
-        for key, value := range ingress.Annotations {
-            // Check if the annotation key starts with "virtual-server.arraynetworks"
-            if strings.HasPrefix(key, "virtual-server.arraynetworks") {
-                // Attempt to parse the value as JSON
-                var jsonValue interface{}
-                if err := json.Unmarshal([]byte(value), &jsonValue); err == nil {
-                    annotations = append(annotations, Annotation{Key: key, Value: jsonValue})
-                } else {
-                    // If not JSON, treat as a string or other literal
-                    annotations = append(annotations, Annotation{Key: key, Value: value})
-                }
-            }
-        }
-    }
-    return annotations, nil
-}
-
-func ExtractAnnotationValueType(value interface{}) string {
-    // Use reflection to get the type of the value
-    valueType := reflect.TypeOf(value)
-    // Check if the valueType is nil, which means the value is nil
-    if valueType == nil {
-        return "nil"
-    }
-    // Return the kind of the type as a string
-    return valueType.Kind().String()
-}
\ No newline at end of file
Index: /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/health/main.go
===================================================================
--- /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/health/main.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/health/main.go	(nonexistent)
@@ -1,72 +0,0 @@
-package healthcheck
-
-import (
-	"parser"
-	networking "k8s.io/api/networking/v1"
-)
-
-var validProtocols = []string{"auto_http", "http", "https", "grpc", "grpcs", "fcgi"}
-
-const (
-	http             = "HTTP"
-	healthAnnotation = "health"
-)
-
-// Health Annotation representation
-//apv.arraynetworks.com/health
-//{ "protocol": "string", "interval": int, "timeout": int, "retries": int }
-
-// HealthAnnotation represents the expected structure of the health annotation
-type HealthAnnotation struct {
-    Protocol string `json:"protocol"`
-    Interval int    `json:"interval"`
-    Timeout  int    `json:"timeout"`
-    Retries  int    `json:"retries"`
-}
-
-// Assuming parser.AnnotationConfig supports a slice of validators
-/*
-var healthConfig = parser.AnnotationConfig{
-    Validators: map[string]parser.AnnotationValidator{
-		"protocol": parser.ValidateOptions(validProtocols, false, true),
-		"interval": parser.ValidateOptions(validProtocols, false, true),
-		"timeout": parser.ValidateOptions(validProtocols, false, true),
-		"retries": parser.ValidateOptions(validProtocols, false, true),
-	}
-}
-*/
-
-
-type health struct {
-	annotationConfig parser.AnnotationConfig
-}
-
-// NewParser creates a new backend protocol annotation parser
-func (ha *HealthAnnotation) NewParser() *health{
-	return &health{
-		annotationConfig: parser.AnnotationConfig{
-			Validators: map[string]parser.AnnotationValidator{
-				"protocol": parser.ValidateOptions(ha.Protocol, validProtocols, false, true),
-				"interval": parser.ValidateInt(ha.Interval),
-				"timeout": parser.ValidateInt(ha.Timeout),
-				"retries": parser.ValidateInt(ha.Retries),
-			}
-		}
-	}
-}
-
-// ParseAnnotations parses the annotations contained in the ingress
-// rule used to indicate the health check.
-func (h health) Parse(ing *networking.Ingress) (interface{}, error) {
-	if ing.GetAnnotations() == nil {
-		return nil, nil
-	}
-	annots, err := parser.GetStringAnnotation(healthAnnotation, ing, h.annotationConfig.Annotations)
-	if err != nil {
-		if errors.IsValidationError(err) {
-			klog.Warningf("validation error %s. Using HTTP as protocol", err)
-		}
-		return nil, err
-	}
-	return annots, nil
-}
Index: /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/parser/main.go
===================================================================
--- /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/parser/main.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/parser/main.go	(nonexistent)
@@ -1,126 +0,0 @@
-package parser
-
-import (
-	"fmt"
-	"strconv"
-	"strings"
-
-	networking "k8s.io/api/networking/v1"
-)
-
-// DefaultAnnotationsPrefix defines the common prefix used in the nginx ingress controller
-const (
-	DefaultAnnotationsPrefix  = "apv.arraynetworks.com"
-)
-
-// AnnotationConfig defines the configuration that a single annotation field
-// has, with the Validator and the documentation of this field.
-type AnnotationConfig struct {
-	// Validator defines a function to validate the annotation value
-	Validators map[string]AnnotationValidator
-}
-
-type ingAnnotations map[string]string
-
-func (a ingAnnotations) parseBool(name string) (bool, error) {
-	val, ok := a[name]
-	if ok {
-		b, err := strconv.ParseBool(val)
-		if err != nil {
-			return false, errors.NewInvalidAnnotationContent(name, val)
-		}
-		return b, nil
-	}
-	return false, errors.ErrMissingAnnotations
-}
-
-func (a ingAnnotations) parseString(name string) (string, error) {
-	val, ok := a[name]
-	if ok {
-		s := normalizeString(val)
-		if s == "" {
-			return "", errors.NewInvalidAnnotationContent(name, val)
-		}
-
-		return s, nil
-	}
-	return "", errors.ErrMissingAnnotations
-}
-
-func (a ingAnnotations) parseInt(name string) (int, error) {
-	val, ok := a[name]
-	if ok {
-		i, err := strconv.Atoi(val)
-		if err != nil {
-			return 0, errors.NewInvalidAnnotationContent(name, val)
-		}
-		return i, nil
-	}
-	return 0, errors.ErrMissingAnnotations
-}
-
-func (a ingAnnotations) parseFloat32(name string) (float32, error) {
-	val, ok := a[name]
-	if ok {
-		i, err := strconv.ParseFloat(val, 32)
-		if err != nil {
-			return 0, errors.NewInvalidAnnotationContent(name, val)
-		}
-		return float32(i), nil
-	}
-	return 0, errors.ErrMissingAnnotations
-}
-
-// GetBoolAnnotation extracts a boolean from an Ingress annotation
-func GetBoolAnnotation(name string, ing *networking.Ingress, fields AnnotationFields) (bool, error) {
-	v, err := checkAnnotation(name, ing, fields)
-	if err != nil {
-		return false, err
-	}
-	return ingAnnotations(ing.GetAnnotations()).parseBool(v)
-}
-
-// GetStringAnnotation extracts a string from an Ingress annotation
-func GetStringAnnotation(name string, ing *networking.Ingress, fields AnnotationFields) (string, error) {
-	v, err := checkAnnotation(name, ing, fields)
-	if err != nil {
-		return "", err
-	}
-
-	return ingAnnotations(ing.GetAnnotations()).parseString(v)
-}
-
-// GetIntAnnotation extracts an int from an Ingress annotation
-func GetIntAnnotation(name string, ing *networking.Ingress, fields AnnotationFields) (int, error) {
-	v, err := checkAnnotation(name, ing, fields)
-	if err != nil {
-		return 0, err
-	}
-	return ingAnnotations(ing.GetAnnotations()).parseInt(v)
-}
-
-// GetFloatAnnotation extracts a float32 from an Ingress annotation
-func GetFloatAnnotation(name string, ing *networking.Ingress, fields AnnotationFields) (float32, error) {
-	v, err := checkAnnotation(name, ing, fields)
-	if err != nil {
-		return 0, err
-	}
-	return ingAnnotations(ing.GetAnnotations()).parseFloat32(v)
-}
-
-// GetAnnotationWithPrefix returns the prefix of ingress annotations
-func GetAnnotationWithPrefix(suffix string) string {
-	return fmt.Sprintf("%v/%v", DefaultAnnotationsPrefix, suffix)
-}
-
-func TrimAnnotationPrefix(annotation string) string {
-	return strings.TrimPrefix(annotation, DefaultAnnotationsPrefix+"/")
-}
-
-func normalizeString(input string) string {
-	trimmedContent := []string{}
-	for _, line := range strings.Split(input, "\n") {
-		trimmedContent = append(trimmedContent, strings.TrimSpace(line))
-	}
-	return strings.Join(trimmedContent, "\n")
-}
Index: /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/parser/validator.go
===================================================================
--- /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/parser/validator.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/parser/validator.go	(nonexistent)
@@ -1,107 +0,0 @@
-package parser
-
-import (
-	"fmt"
-	"regexp"
-	"strconv"
-	"strings"
-
-	machineryvalidation "k8s.io/apimachinery/pkg/api/validation"
-)
-
-type AnnotationValidator func(string) error
-
-var (
-	alphaNumericChars    = `\-\.\_\~a-zA-Z0-9\/:`
-	extendedAlphaNumeric = alphaNumericChars + ", "
-	regexEnabledChars    = regexp.QuoteMeta(`^$[](){}*+?|&=\`)
-	urlEnabledChars      = regexp.QuoteMeta(`,:?&=`)
-	// MaliciousRegex defines chars that are known to inject RCE
-	MaliciousRegex = regexp.MustCompile(`\r|\n`)
-	// IsValidRegex checks if the tested string can be used as a regex, but without any weird character.
-	// It includes regex characters for paths that may contain regexes
-	//
-	IsValidRegex = regexp.MustCompile("^[/" + alphaNumericChars + regexEnabledChars + "]*$")
-)
-
-// ValidateArrayOfServerName validates if all fields on a Server name annotation are
-// regexes. They can be *.something*, ~^www\d+\.example\.com$ but not fancy character
-func ValidateArrayOfServerName(value string) error {
-	for _, fqdn := range strings.Split(value, ",") {
-		if err := ValidateServerName(fqdn); err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-// ValidateServerName validates if the passed value is an acceptable server name. The server name
-// can contain regex characters, as those are accepted values on nginx configuration
-func ValidateServerName(value string) error {
-	value = strings.TrimSpace(value)
-	if !IsValidRegex.MatchString(value) {
-		return fmt.Errorf("value %s is invalid server name", value)
-	}
-	return nil
-}
-
-// ValidateRegex receives a regex as an argument and uses it to validate
-// the value of the field.
-// Annotation can define if the spaces should be trimmed before validating the value
-func ValidateRegex(s string, regex *regexp.Regexp, removeSpace bool) error {
-	if removeSpace {
-		s = strings.ReplaceAll(s, " ", "")
-	}
-	if !regex.MatchString(s) {
-		return fmt.Errorf("value %s is invalid", s)
-	}
-	if MaliciousRegex.MatchString(s) {
-		return fmt.Errorf("value %s contains malicious string", s)
-	}
-
-	return nil
-}
-
-// ValidateOptions receives an array of valid options that can be the value of annotation.
-// If no valid option is found, it will return an error
-func ValidateOptions(s string, options []string, caseSensitive, trimSpace bool) error {
-	if trimSpace {
-		s = strings.TrimSpace(s)
-	}
-	if !caseSensitive {
-		s = strings.ToLower(s)
-	}
-	for _, option := range options {
-		if s == option {
-			return nil
-		}
-	}
-	return fmt.Errorf("value does not match any valid option")
-}
-
-// ValidateBool validates if the specified value is a bool
-func ValidateBool(value string) error {
-	_, err := strconv.ParseBool(value)
-	return err
-}
-
-// ValidateInt validates if the specified value is an integer
-func ValidateInt(value string) error {
-	_, err := strconv.Atoi(value)
-	return err
-}
-
-// ValidateCIDRs validates if the specified value is an array of IPs and CIDRs
-func ValidateCIDRs(value string) error {
-	_, err := net.ParseCIDRs(value)
-	return err
-}
-
-// ValidateServiceName validates if a provided service name is a valid string
-func ValidateServiceName(value string) error {
-	errs := machineryvalidation.NameIsDNS1035Label(value, false)
-	if len(errs) != 0 {
-		return fmt.Errorf("annotation does not contain a valid service name: %+v", errs)
-	}
-	return nil
-}
Index: /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/whitelisting/main.go	(added)
===================================================================
--- /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/whitelisting/main.go	(revision 0)
+++ /branches/main/array-ingress-controller/controller/k8s-controller/ingress/annotation/whitelisting/main.go	(revision 0)
Index: /branches/main/array-ingress-controller/controller/k8s-controller/ingress/validator/validator.go	(added)
===================================================================
--- /branches/main/array-ingress-controller/controller/k8s-controller/ingress/validator/validator.go	(revision 0)
+++ /branches/main/array-ingress-controller/controller/k8s-controller/ingress/validator/validator.go	(revision 0)
Index: /branches/main/array-ingress-controller/controller/k8s-controller/main.go	(added)
===================================================================
--- /branches/main/array-ingress-controller/controller/k8s-controller/main.go	(revision 0)
+++ /branches/main/array-ingress-controller/controller/k8s-controller/main.go	(revision 0)
Index: /branches/main/array-ingress-controller/controller/openshift-controller/cmd.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/cmd.go	(revision 12)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/cmd.go	(working copy)
@@ -43,7 +43,7 @@
 	}
 
 	// Create shared informer factory
-	factory := informers.NewSharedInformerFactory(kubeClient, 1*time.Second)
+	factory := informers.NewSharedInformerFactory(kubeClient, 1*time.Minute)
 
 	// Create a channel to stop the informers
 	stopCh := make(chan struct{})
Index: /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/go.mod
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/go.mod	(nonexistent)
@@ -1,78 +0,0 @@
-module arraynetworks.com/array-ingress-controller/controller/openshift-controller/event-handlers
-
-go 1.23.6
-
-replace (
-	arraynetworks.com/array-ingress-controller/configstore => ../../../configstore
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils => ../utils
-	arraynetworks.com/array-ingress-controller/logger => ../../../logger
-	arraynetworks.com/array-ingress-controller/task-manager/openshift => ../../../task-manager/openshift
-	arraynetworks.com/array-ingress-controller/task-manager/task => ../../../task-manager/task
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/configstore v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/task-manager/openshift v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/task-manager/task v0.0.0-00010101000000-000000000000
-	github.com/openshift/api v0.0.0-20250226153854-e8e096a21cb3
-	gorm.io/gorm v1.25.12
-	k8s.io/api v0.32.2
-)
-
-require (
-	filippo.io/edwards25519 v1.1.0 // indirect
-	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
-	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
-	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
-	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
-	github.com/go-logr/logr v1.4.2 // indirect
-	github.com/go-openapi/jsonpointer v0.21.0 // indirect
-	github.com/go-openapi/jsonreference v0.20.2 // indirect
-	github.com/go-openapi/swag v0.23.0 // indirect
-	github.com/go-sql-driver/mysql v1.8.1 // indirect
-	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/golang/mock v1.6.0 // indirect
-	github.com/golang/protobuf v1.5.4 // indirect
-	github.com/google/gnostic-models v0.6.8 // indirect
-	github.com/google/go-cmp v0.6.0 // indirect
-	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/uuid v1.6.0 // indirect
-	github.com/jinzhu/inflection v1.0.0 // indirect
-	github.com/jinzhu/now v1.1.5 // indirect
-	github.com/josharian/intern v1.0.0 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/mattn/go-sqlite3 v1.14.22 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-	github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a // indirect
-	github.com/pkg/errors v0.9.1 // indirect
-	github.com/x448/float16 v0.8.4 // indirect
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.30.0 // indirect
-	golang.org/x/oauth2 v0.23.0 // indirect
-	golang.org/x/sys v0.26.0 // indirect
-	golang.org/x/term v0.25.0 // indirect
-	golang.org/x/text v0.19.0 // indirect
-	golang.org/x/time v0.7.0 // indirect
-	google.golang.org/protobuf v1.35.1 // indirect
-	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
-	gopkg.in/inf.v0 v0.9.1 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-	gorm.io/datatypes v1.2.5 // indirect
-	gorm.io/driver/mysql v1.5.6 // indirect
-	gorm.io/driver/sqlite v1.5.7 // indirect
-	k8s.io/apimachinery v0.32.2 // indirect
-	k8s.io/client-go v0.32.2 // indirect
-	k8s.io/klog/v2 v2.130.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
-	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
-	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
-	sigs.k8s.io/yaml v1.4.0 // indirect
-)
Index: /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/go.sum
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/go.sum	(nonexistent)
@@ -1,221 +0,0 @@
-filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
-filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
-github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
-github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
-github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
-github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
-github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
-github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
-github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
-github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
-github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
-github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
-github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
-github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
-github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo=
-github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
-github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
-github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
-github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
-github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
-github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
-github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
-github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA=
-github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM=
-github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
-github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
-github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
-github.com/openshift/api v0.0.0-20250226153854-e8e096a21cb3 h1:9w+RnW9hOlrtZbvHsBa3GWzWtRJb0XkUBDyQf3DkCGE=
-github.com/openshift/api v0.0.0-20250226153854-e8e096a21cb3/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a h1:duO3JMrUOqVx50QhzxvDeOYIwTNOB8/EEuRLPyvAMBg=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a/go.mod h1:Qw3ThpzVZ0bfTILpBNYg4LGyjtNxfyCiGh/uDLOOTP8=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
-github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
-golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
-golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
-golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo=
-golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24=
-golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
-golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
-golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
-golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
-golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
-google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
-gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/datatypes v1.2.5 h1:9UogU3jkydFVW1bIVVeoYsTpLRgwDVW3rHfJG6/Ek9I=
-gorm.io/datatypes v1.2.5/go.mod h1:I5FUdlKpLb5PMqeMQhm30CQ6jXP8Rj89xkTeCSAaAD4=
-gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
-gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
-gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U=
-gorm.io/driver/postgres v1.5.0/go.mod h1:FUZXzO+5Uqg5zzwzv4KK49R8lvGIyscBOqYrtI1Ce9A=
-gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
-gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
-gorm.io/driver/sqlserver v1.5.4 h1:xA+Y1KDNspv79q43bPyjDMUgHoYHLhXYmdFcYPobg8g=
-gorm.io/driver/sqlserver v1.5.4/go.mod h1:+frZ/qYmuna11zHPlh5oc2O6ZA/lS88Keb0XSH1Zh/g=
-gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
-k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw=
-k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y=
-k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
-k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
-k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA=
-k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
Index: /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/init.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/init.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/init.go	(nonexistent)
@@ -1,26 +0,0 @@
-/*
-	Copyright 2025 Array Networks
-*/
-
-package handlers
-
-import (
-	"arraynetworks.com/array-ingress-controller/configstore"
-	"arraynetworks.com/array-ingress-controller/logger"
-	"gorm.io/gorm"
-)
-
-type taskMap struct {
-	ingressName string
-	protocol    string
-	serviceName string
-	podIPs      []string
-}
-
-var (
-	log      logger.Logger
-)
-
-func init() {
-	log = logger.GetLogger()
-}
\ No newline at end of file
Index: /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/pod_event_handler.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/pod_event_handler.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/pod_event_handler.go	(nonexistent)
@@ -1,131 +0,0 @@
-/*
-	Copyright 2025 Array Networks
-*/
-
-package handlers
-
-import (
-	"context"
-	"arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils"
-	"arraynetworks.com/array-ingress-controller/task-manager/openshift"
-	"arraynetworks.com/array-ingress-controller/task-manager/task"
-	v1 "k8s.io/api/core/v1"
-)
-
-// PodAdded handles Pod addition events.
-func PodAdded(obj interface{}) {
-	pod := obj.(*v1.Pod)
-	log.Infof("Pod added: %s/%s\n", pod.Namespace, pod.Name)
-
-	// Fetch the associated Service by matching label selectors
-	assocSvc, err := utils.GetServiceForPod(pod.Namespace, pod.Labels)
-	if err != nil {
-		log.Errorf("Cannot find associated service for pod '%s' in namespace '%s'", pod.Name, pod.Namespace)
-		return
-	}
-
-	// Fetch the actual Service object
-	service, err := utils.GetServicefromName(pod.Namespace, assocSvc)
-	if err != nil {
-		log.Errorf("Cannot fetch service '%s' in namespace '%s'", assocSvc, pod.Namespace)
-		return
-	}
-
-	// Fetch the associated Route (should be a single route)
-	assocRoutes, err := utils.GetAssocRoutes(pod.Namespace, service)
-	if err != nil || len(assocRoutes) == 0 {
-		log.Errorf("Cannot find routes for pod '%s' in namespace '%s'", pod.Name, pod.Namespace)
-		return
-	}
-
-	// Select the first route (assuming a single route per service)
-	associatedRoute := &assocRoutes[0]
-
-	routeClass, err := utils.GetRouteClass(*associatedRoute)
-	if err != nil {
-		log.Errorf("cannot find class for route '%s'", associatedRoute.Name)
-	}
-
-	// Create OpenShift-specific handlers
-	osAPV := &openshift.OpenShiftAPV{}
-	osASF := &openshift.OpenShiftASF{}
-
-	// Initialize Task Manager Facade with OpenShift handlers
-	taskManager := task.NewTaskManager(osAPV, osASF)
-
-	// Create a new Task object with correct fields
-	newTask := &task.Task{
-		Route: associatedRoute,
-		Svc:   service,
-		Pods:  []*v1.Pod{pod},
-	}
-
-	ctx := context.WithValue(context.Background(), task.TaskTypeKey{}, "ADD")
-	ctx = context.WithValue(ctx, task.ResourceTypeKey{}, "POD")
-
-	// Prepare a task
-	if err := taskManager.PrepareTask(ctx, newTask, routeClass); err != nil {
-		log.Fatalf("Failed to prepare task: %v", err)
-	}
-
-	log.Println("Task prepared and executed successfully")
-}
-
-// PodDeleted handles Pod deletion events.
-func PodDeleted(obj interface{}) {
-	pod := obj.(*v1.Pod)
-	log.Infof("Pod deleted: %s/%s\n", pod.Namespace, pod.Name)
-
-	// Fetch the associated Service by matching label selectors
-	assocSvc, err := utils.GetServiceForPod(pod.Namespace, pod.Labels)
-	if err != nil {
-		log.Errorf("Cannot find associated service for deleted pod '%s' in namespace '%s'", pod.Name, pod.Namespace)
-		return
-	}
-
-	// Fetch the actual Service object
-	service, err := utils.GetServicefromName(pod.Namespace, assocSvc)
-	if err != nil {
-		log.Errorf("Cannot fetch service '%s' in namespace '%s'", assocSvc, pod.Namespace)
-		return
-	}
-
-	// Fetch the associated Route (should be a single route)
-	assocRoutes, err := utils.GetAssocRoutes(pod.Namespace, service)
-	if err != nil || len(assocRoutes) == 0 {
-		log.Errorf("Cannot find routes for deleted pod '%s' in namespace '%s'", pod.Name, pod.Namespace)
-		return
-	}
-
-	// Select the first route (assuming a single route per service)
-	associatedRoute := &assocRoutes[0]
-
-	routeClass, err := utils.GetRouteClass(*associatedRoute)
-	if err != nil {
-		log.Errorf("cannot find class for route '%s'", associatedRoute.Name)
-	}
-
-	// Create OpenShift-specific handlers
-	osAPV := &openshift.OpenShiftAPV{}
-	osASF := &openshift.OpenShiftASF{}
-
-	// Initialize Task Manager Facade with OpenShift handlers
-	taskManager := task.NewTaskManager(osAPV, osASF)
-
-	// Create a new Task object for pod deletion
-	newTask := &task.Task{
-		Route: associatedRoute,
-		Svc:   service,
-		Pods:  []*v1.Pod{pod},
-	}
-
-	ctx := context.WithValue(context.Background(), task.TaskTypeKey{}, "DELETE")
-	ctx = context.WithValue(ctx, task.ResourceTypeKey{}, "POD")
-
-	// Prepare a task for pod deletion
-	if err := taskManager.PrepareTask(ctx, newTask, routeClass); err != nil {
-		log.Fatalf("Failed to prepare deletion task: %v", err)
-	}
-
-	log.Println("Pod deletion task prepared and executed successfully")
-}
Index: /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/route_event_handler.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/route_event_handler.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/route_event_handler.go	(nonexistent)
@@ -1,174 +0,0 @@
-/*
-	Copyright 2025 Array Networks
-*/
-
-package handlers
-
-import (
-	"context"
-
-	"arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils"
-	"arraynetworks.com/array-ingress-controller/task-manager/openshift"
-	"arraynetworks.com/array-ingress-controller/task-manager/task"
-
-	routev1 "github.com/openshift/api/route/v1"
-)
-
-// RouteAdded handles Route addition events.
-func RouteAdded(obj interface{}) {
-	route := obj.(*routev1.Route)
-	log.Printf("Route Added: %s/%s\n", route.Namespace, route.Name)
-	assocSvc, err := utils.GetAssocSvc(route.Namespace, route.Name)
-	if err != nil {
-		log.Errorf("cannot find services for route '%s' in namespace '%s'", route.Name, route.Namespace)
-	}
-	// Fetch the actual Service object
-	service, err := utils.GetServicefromName(route.Namespace, assocSvc)
-	if err != nil {
-		log.Errorf("cannot fetch service '%s' in namespace '%s'", assocSvc, route.Namespace)
-		return
-	}
-	// get associated pods
-	assocPods, err := utils.GetAssocPods(route.Namespace, service.Spec.Selector)
-	if err != nil {
-		log.Errorf("cannot find pods for route '%s' in namespace '%s'", route.Name, route.Namespace)
-	}
-	routeClass, err := utils.GetRouteClass(*route)
-	if err != nil {
-		log.Errorf("cannot find class for route '%s'", route.Name)
-	}
-
-	// Create OpenShift-specific handlers
-	osAPV := &openshift.OpenShiftAPV{}
-	osASF := &openshift.OpenShiftASF{}
-
-	// Initialize Task Manager Facade with OpenShift handlers
-	taskManager := task.NewTaskManager(osAPV, osASF)
-
-	// Create a new task
-	newTask := &task.Task{
-		Route: route,
-		Svc:   service,
-		Pods:  utils.GetAssocPodPointers(assocPods),
-	}
-
-	ctx := context.WithValue(context.Background(), task.TaskTypeKey{}, "ADD")
-	ctx = context.WithValue(ctx, task.ResourceTypeKey{}, "ROUTE")
-
-	// Prepare a task
-	if err := taskManager.PrepareTask(ctx, newTask, routeClass); err != nil {
-		log.Fatalf("Failed to prepare task: %v", err)
-	}
-	log.Println("Task prepared and executed successfully")
-}
-
-// RouteUpdated handles Route update events.
-func RouteUpdated(oldObj, newObj interface{}) {
-	oldRoute := oldObj.(*routev1.Route)
-	newRoute := newObj.(*routev1.Route)
-
-	log.Printf("Route updated: %s/%s\n", newRoute.Namespace, oldRoute.Name)
-
-	// Get the associated service name
-	assocSvc, err := utils.GetAssocSvc(newRoute.Namespace, newRoute.Name)
-	if err != nil {
-		log.Errorf("cannot find services for old route '%s' in namespace '%s'", newRoute.Name, newRoute.Namespace)
-		return
-	}
-
-	// Fetch the actual Service object
-	service, err := utils.GetServicefromName(newRoute.Namespace, assocSvc)
-	if err != nil {
-		log.Errorf("cannot fetch service '%s' in namespace '%s'", assocSvc, newRoute.Namespace)
-		return
-	}
-
-	// Get associated pods
-	assocPods, err := utils.GetAssocPods(newRoute.Namespace, service.Spec.Selector)
-	if err != nil {
-		log.Errorf("cannot find pods for updated route '%s' in namespace '%s'", newRoute.Name, newRoute.Namespace)
-		return
-	}
-
-	// Retrieve route class
-	routeClass, err := utils.GetRouteClass(*newRoute)
-	if err != nil {
-		log.Errorf("cannot find class for updated route '%s'", newRoute.Name)
-		return
-	}
-
-	// Create OpenShift-specific handlers
-	osAPV := &openshift.OpenShiftAPV{}
-	osASF := &openshift.OpenShiftASF{}
-
-	// Initialize Task Manager Facade with OpenShift handlers
-	taskManager := task.NewTaskManager(osAPV, osASF)
-
-	// Create a new task
-	newTask := &task.Task{
-		Route: newRoute,
-		Svc:   service,
-		Pods:  utils.GetAssocPodPointers(assocPods),
-	}
-
-	ctx := context.WithValue(context.Background(), task.TaskTypeKey{}, "UPDATE")
-	ctx = context.WithValue(ctx, task.ResourceTypeKey{}, "ROUTE")
-
-	// Prepare and execute the update task
-	if err := taskManager.PrepareTask(ctx, newTask, routeClass); err != nil {
-		log.Fatalf("Failed to prepare update task: %v", err)
-	}
-
-	log.Println("Route update task prepared and executed successfully")
-}
-
-// RouteDeleted handles Route deletion events.
-func RouteDeleted(obj interface{}) {
-	route := obj.(*routev1.Route)
-	log.Printf("Route deleted: %s/%s\n", route.Namespace, route.Name)
-
-	// Get the associated service name
-	assocSvc, err := utils.GetAssocSvc(route.Namespace, route.Name)
-	if err != nil {
-		log.Errorf("cannot find services for deleted route '%s' in namespace '%s'", route.Name, route.Namespace)
-		return
-	}
-
-	// Fetch the actual Service object
-	service, err := utils.GetServicefromName(route.Namespace, assocSvc)
-	if err != nil {
-		log.Errorf("cannot fetch service '%s' in namespace '%s'", assocSvc, route.Namespace)
-		return
-	}
-
-	// Get associated pods
-	assocPods, err := utils.GetAssocPods(route.Namespace, service.Spec.Selector)
-	if err != nil {
-		log.Errorf("cannot find pods for deleted route '%s' in namespace '%s'", route.Name, route.Namespace)
-		return
-	}
-
-	// Create OpenShift-specific handlers
-	osAPV := &openshift.OpenShiftAPV{}
-	osASF := &openshift.OpenShiftASF{}
-
-	// Initialize Task Manager Facade with OpenShift handlers
-	taskManager := task.NewTaskManager(osAPV, osASF)
-
-	// Create a new task
-	deleteTask := &task.Task{
-		Route: route,
-		Svc:   service,
-		Pods:  utils.GetAssocPodPointers(assocPods),
-	}
-
-	ctx := context.WithValue(context.Background(), task.TaskTypeKey{}, "DELETE")
-	ctx = context.WithValue(ctx, task.ResourceTypeKey{}, "ROUTE")
-
-	// Prepare and execute the delete task
-	if err := taskManager.PrepareTask(ctx, deleteTask, ""); err != nil {
-		log.Fatalf("Failed to prepare delete task: %v", err)
-	}
-
-	log.Println("Route delete task prepared and executed successfully")
-}
Index: /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/service_event_handler.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/service_event_handler.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/event-handlers/service_event_handler.go	(nonexistent)
@@ -1,82 +0,0 @@
-/*
-	Copyright 2025 Array Networks
-*/
-
-package handlers
-
-import (
-	"context"
-
-	"arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils"
-	"arraynetworks.com/array-ingress-controller/task-manager/openshift"
-	"arraynetworks.com/array-ingress-controller/task-manager/task"
-	v1 "k8s.io/api/core/v1"
-)
-
-// ServiceUpdated handles Service update events.
-func ServiceUpdated(oldObj, newObj interface{}) {
-	oldService := oldObj.(*v1.Service)
-	newService := newObj.(*v1.Service)
-	log.Infof("Service updated: %s/%s\n", newService.Namespace, newService.Name)
-
-	// check if changes in service require changes in configstore
-	selectorChanged := !utils.AreSelectorsEqual(oldService.Spec.Selector, newService.Spec.Selector)
-	portsChanged := !utils.AreServicePortsEqual(oldService.Spec.Ports, newService.Spec.Ports)
-
-	// If nothing significant changed, skip processing
-	if !selectorChanged && !portsChanged {
-		log.Infof("Skipping service update for %s/%s, no relevant changes detected.", newService.Namespace, newService.Name)
-		return
-	}
-
-	// Fetch the associated Route for the updated service
-	assocRoutes, err := utils.GetAssocRoutes(newService.Namespace, newService)
-	if err != nil || len(assocRoutes) == 0 {
-		log.Errorf("Cannot find routes for updated service '%s' in namespace '%s'", newService.Name, newService.Namespace)
-		return
-	}
-
-	// Select the first route (assuming a single route per service)
-	associatedRoute := &assocRoutes[0]
-
-	routeClass, err := utils.GetRouteClass(*associatedRoute)
-	if err != nil {
-		log.Errorf("cannot find class for route '%s'", associatedRoute.Name)
-	}
-
-	var assocPods []*v1.Pod
-
-	if selectorChanged {
-		// Fetch the Pods that match the updated service selector
-		assocPods, err = utils.GetAssocPods(newService.Namespace, newService.Spec.Selector)
-		if err != nil {
-			log.Errorf("Cannot find pods for updated service '%s' in namespace '%s'", newService.Name, newService.Namespace)
-			return
-		}
-	} else {
-		log.Infof("Selector unchanged for service %s, using existing pod records.", newService.Name)
-	}
-
-	// Create OpenShift-specific handlers
-	osAPV := &openshift.OpenShiftAPV{}
-	osASF := &openshift.OpenShiftASF{}
-
-	// Initialize Task Manager Facade with OpenShift handlers
-	taskManager := task.NewTaskManager(osAPV, osASF)
-
-	// Create a new Task object for service update
-	newTask := &task.Task{
-		Route: &assocRoutes[0],
-		Svc:   newService,
-		Pods:  utils.GetAssocPodPointers(assocPods),
-	}
-	ctx := context.WithValue(context.Background(), task.TaskTypeKey{}, "UPDATE")
-	ctx = context.WithValue(ctx, task.ResourceTypeKey{}, "SERVICE")
-
-	// Prepare a task for service update
-	if err := taskManager.PrepareTask(ctx, newTask, routeClass); err != nil {
-		log.Fatalf("Failed to prepare update task: %v", err)
-	}
-
-	log.Println("Service update task prepared and executed successfully")
-}
Index: /branches/main/array-ingress-controller/controller/openshift-controller/go.mod
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/go.mod	(nonexistent)
@@ -1,83 +0,0 @@
-module arraynetworks.com/array-ingress-controller/controller/openshift
-
-go 1.23.6
-
-replace (
-	arraynetworks.com/array-ingress-controller/configstore => ../../configstore
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/handlers => ./handlers
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/informers => ./informers
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils => ./utils
-	arraynetworks.com/array-ingress-controller/logger => ../../logger
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/apv => ../../task-manager/openshift/apv
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/asf => ../../task-manager/openshift/asf
-	arraynetworks.com/array-ingress-controller/task-manager/task => ../../task-manager/task
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/informers v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	k8s.io/client-go v0.32.2
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/configstore v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/handlers v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/apv v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/asf v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/task-manager/task v0.0.0-00010101000000-000000000000 // indirect
-	filippo.io/edwards25519 v1.1.0 // indirect
-	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
-	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
-	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
-	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
-	github.com/go-logr/logr v1.4.2 // indirect
-	github.com/go-openapi/jsonpointer v0.21.0 // indirect
-	github.com/go-openapi/jsonreference v0.20.2 // indirect
-	github.com/go-openapi/swag v0.23.0 // indirect
-	github.com/go-sql-driver/mysql v1.8.1 // indirect
-	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/golang/protobuf v1.5.4 // indirect
-	github.com/google/gnostic-models v0.6.8 // indirect
-	github.com/google/go-cmp v0.6.0 // indirect
-	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/uuid v1.6.0 // indirect
-	github.com/jinzhu/inflection v1.0.0 // indirect
-	github.com/jinzhu/now v1.1.5 // indirect
-	github.com/josharian/intern v1.0.0 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/mattn/go-sqlite3 v1.14.22 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-	github.com/openshift/api v0.0.0-20250305225826-b8da3bfeaf77 // indirect
-	github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a // indirect
-	github.com/pkg/errors v0.9.1 // indirect
-	github.com/x448/float16 v0.8.4 // indirect
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	golang.org/x/oauth2 v0.23.0 // indirect
-	golang.org/x/sys v0.28.0 // indirect
-	golang.org/x/term v0.27.0 // indirect
-	golang.org/x/text v0.21.0 // indirect
-	golang.org/x/time v0.7.0 // indirect
-	google.golang.org/protobuf v1.35.1 // indirect
-	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
-	gopkg.in/inf.v0 v0.9.1 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-	gorm.io/datatypes v1.2.5 // indirect
-	gorm.io/driver/mysql v1.5.6 // indirect
-	gorm.io/driver/sqlite v1.5.7 // indirect
-	gorm.io/gorm v1.25.12 // indirect
-	k8s.io/api v0.32.2 // indirect
-	k8s.io/apimachinery v0.32.2 // indirect
-	k8s.io/klog/v2 v2.130.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
-	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
-	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
-	sigs.k8s.io/yaml v1.4.0 // indirect
-)
Index: /branches/main/array-ingress-controller/controller/openshift-controller/go.sum
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/go.sum	(nonexistent)
@@ -1,212 +0,0 @@
-filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
-filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
-github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
-github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
-github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
-github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
-github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
-github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
-github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
-github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
-github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
-github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
-github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
-github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
-github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
-github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
-github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
-github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
-github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
-github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
-github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
-github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA=
-github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/openshift/api v0.0.0-20250305225826-b8da3bfeaf77 h1:w6F0sEhlUB1K54Ev4EELsLo5w/xur9pFT19VtemlB4Y=
-github.com/openshift/api v0.0.0-20250305225826-b8da3bfeaf77/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a h1:duO3JMrUOqVx50QhzxvDeOYIwTNOB8/EEuRLPyvAMBg=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a/go.mod h1:Qw3ThpzVZ0bfTILpBNYg4LGyjtNxfyCiGh/uDLOOTP8=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
-github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
-golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
-golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
-google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
-gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/datatypes v1.2.5 h1:9UogU3jkydFVW1bIVVeoYsTpLRgwDVW3rHfJG6/Ek9I=
-gorm.io/datatypes v1.2.5/go.mod h1:I5FUdlKpLb5PMqeMQhm30CQ6jXP8Rj89xkTeCSAaAD4=
-gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
-gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
-gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U=
-gorm.io/driver/postgres v1.5.0/go.mod h1:FUZXzO+5Uqg5zzwzv4KK49R8lvGIyscBOqYrtI1Ce9A=
-gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
-gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
-gorm.io/driver/sqlserver v1.5.4 h1:xA+Y1KDNspv79q43bPyjDMUgHoYHLhXYmdFcYPobg8g=
-gorm.io/driver/sqlserver v1.5.4/go.mod h1:+frZ/qYmuna11zHPlh5oc2O6ZA/lS88Keb0XSH1Zh/g=
-gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
-k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw=
-k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y=
-k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
-k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
-k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA=
-k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
Index: /branches/main/array-ingress-controller/controller/openshift-controller/handlers/endpoint_event_handler.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/handlers/endpoint_event_handler.go	(revision 12)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/handlers/endpoint_event_handler.go	(working copy)
@@ -19,17 +19,19 @@
 	if err != nil || len(routes) == 0 {
 		return
 	}
-	log.Info("Inside endpoint add...")
-	// Create OpenShift-specific handlers
+
+	filteredRoutes := utils.FilterRoutesByController(routes)
+	if len(filteredRoutes) == 0 {
+		log.Infof("No routes matching '%s' for endpoint: %s", utils.GetExpectedRouteClass(), endpt.Name)
+		return
+	}
+
 	osAPV := &apv.OpenShiftAPV{}
 	osASF := &asf.OpenShiftASF{}
-
-	// Initialize Task Manager Facade with OpenShift handlers
 	taskManager := task.New(osAPV, osASF)
 
-	// Create a new task
 	addTask := &task.Task{
-		Route:  routes,
+		Route:  filteredRoutes,
 		Svc:    nil,
 		Pods:   nil,
 		EndPts: []*corev1.Endpoints{endpt},
@@ -38,35 +40,33 @@
 	ctx := context.WithValue(context.Background(), task.TaskTypeKey{}, "ADD")
 	ctx = context.WithValue(ctx, task.ResourceTypeKey{}, "ENDPOINT")
 
-	// Prepare and execute the delete task
-	if err := taskManager.PrepareTask(ctx, addTask, "ARRAY-APV"); err != nil {
-		log.Fatalf("Failed to prepare delete task: %v", err)
+	if err := taskManager.PrepareTask(ctx, addTask, utils.GetExpectedRouteClass()); err != nil {
+		log.Fatalf("Failed to prepare ADD task: %v", err)
 	}
 
-	log.Println("Route delete task prepared and executed successfully")
-
+	log.Info("Endpoint ADD task prepared and executed successfully")
 }
 
 func EndPointDeleted(obj interface{}) {
-
 	endpt := obj.(*corev1.Endpoints)
 
 	routes, err := utils.GetAssocRoutes(endpt.Namespace, endpt.Name)
-
 	if err != nil || len(routes) == 0 {
 		return
 	}
 
-	// Create OpenShift-specific handlers
+	filteredRoutes := utils.FilterRoutesByController(routes)
+	if len(filteredRoutes) == 0 {
+		log.Infof("No routes matching '%s' for endpoint: %s", utils.GetExpectedRouteClass(), endpt.Name)
+		return
+	}
+
 	osAPV := &apv.OpenShiftAPV{}
 	osASF := &asf.OpenShiftASF{}
-
-	// Initialize Task Manager Facade with OpenShift handlers
 	taskManager := task.New(osAPV, osASF)
 
-	// Create a new task
 	deleteTask := &task.Task{
-		Route:  routes,
+		Route:  filteredRoutes,
 		Svc:    nil,
 		Pods:   nil,
 		EndPts: []*corev1.Endpoints{endpt},
@@ -75,13 +75,11 @@
 	ctx := context.WithValue(context.Background(), task.TaskTypeKey{}, "DELETE")
 	ctx = context.WithValue(ctx, task.ResourceTypeKey{}, "ENDPOINT")
 
-	// Prepare and execute the delete task
-	if err := taskManager.PrepareTask(ctx, deleteTask, "ARRAY-APV"); err != nil {
-		log.Fatalf("Failed to prepare delete task: %v", err)
+	if err := taskManager.PrepareTask(ctx, deleteTask, utils.GetExpectedRouteClass()); err != nil {
+		log.Fatalf("Failed to prepare DELETE task: %v", err)
 	}
 
-	log.Println("Route delete task prepared and executed successfully")
-
+	log.Info("Endpoint DELETE task prepared and executed successfully")
 }
 
 func EndPointUpdated(oldObj, newObj interface{}) {
@@ -93,33 +91,27 @@
 		return
 	}
 
-	// Extract IP addresses from old and new Endpoints
+	filteredRoutes := utils.FilterRoutesByController(routes)
+	if len(filteredRoutes) == 0 {
+		log.Infof("No routes matching '%s' for endpoint: %s", utils.GetExpectedRouteClass(), newEndpt.Name)
+		return
+	}
+
 	oldIPs := utils.ExtractIPs(oldEndpt)
-	log.Info("Old IPs:", oldIPs)
 	newIPs := utils.ExtractIPs(newEndpt)
-	log.Info("Old IPs:", newIPs)
 
-	// Determine added and removed IPs
 	addedIPs, removedIPs := utils.CompareIPs(oldIPs, newIPs)
-
-	if len(addedIPs) > 0 || len(removedIPs) > 0 {
-		log.Info("IP addresses have changed.")
-		log.Infof("Added IPs: %v", addedIPs)
-		log.Infof("Removed IPs: %v", removedIPs)
-		// Add logic to handle added and removed IPs here
+	if len(addedIPs) == 0 && len(removedIPs) == 0 {
+		return
 	}
 
-	// Create OpenShift-specific handlers
 	osAPV := &apv.OpenShiftAPV{}
 	osASF := &asf.OpenShiftASF{}
-
-	// Initialize Task Manager Facade with OpenShift handlers
 	taskManager := task.New(osAPV, osASF)
 
-	// Handle removed IPs from EndPoints
 	if len(removedIPs) > 0 {
 		deleteTask := &task.Task{
-			Route:  routes,
+			Route:  filteredRoutes,
 			Svc:    nil,
 			Pods:   nil,
 			EndPts: utils.CreateEndpointsWithIPs(oldEndpt.Namespace, oldEndpt.Name, removedIPs),
@@ -128,16 +120,14 @@
 		ctx := context.WithValue(context.Background(), task.TaskTypeKey{}, "DELETE")
 		ctx = context.WithValue(ctx, task.ResourceTypeKey{}, "ENDPOINT")
 
-		// Prepare and execute the delete task
-		if err := taskManager.PrepareTask(ctx, deleteTask, "ARRAY-APV"); err != nil {
-			log.Fatalf("Failed to prepare delete task: %v", err)
+		if err := taskManager.PrepareTask(ctx, deleteTask, utils.GetExpectedRouteClass()); err != nil {
+			log.Fatalf("Failed to prepare DELETE task: %v", err)
 		}
 	}
 
-	// Handle added IPs from EndPoints
 	if len(addedIPs) > 0 {
 		addTask := &task.Task{
-			Route:  routes,
+			Route:  filteredRoutes,
 			Svc:    nil,
 			Pods:   nil,
 			EndPts: utils.CreateEndpointsWithIPs(newEndpt.Namespace, newEndpt.Name, addedIPs),
@@ -146,11 +136,10 @@
 		ctx := context.WithValue(context.Background(), task.TaskTypeKey{}, "ADD")
 		ctx = context.WithValue(ctx, task.ResourceTypeKey{}, "ENDPOINT")
 
-		// Prepare and execute the delete task
-		if err := taskManager.PrepareTask(ctx, addTask, "ARRAY-APV"); err != nil {
-			log.Fatalf("Failed to prepare delete task: %v", err)
+		if err := taskManager.PrepareTask(ctx, addTask, utils.GetExpectedRouteClass()); err != nil {
+			log.Fatalf("Failed to prepare ADD task: %v", err)
 		}
 	}
 
-	log.Info("Inside EndPoint update..")
+	log.Info("Endpoint UPDATE task prepared and executed successfully")
 }
Index: /branches/main/array-ingress-controller/controller/openshift-controller/handlers/go.mod
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/handlers/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/handlers/go.mod	(nonexistent)
@@ -1,79 +0,0 @@
-module arraynetworks.com/array-ingress-controller/controller/openshift-controller/handlers
-
-go 1.23.6
-
-replace (
-	arraynetworks.com/array-ingress-controller/configstore => ../../../configstore
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils => ../utils
-	arraynetworks.com/array-ingress-controller/logger => ../../../logger
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/apv => ../../../task-manager/openshift/apv
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/asf => ../../../task-manager/openshift/asf
-	arraynetworks.com/array-ingress-controller/task-manager/task => ../../../task-manager/task
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/apv v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/asf v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/task-manager/task v0.0.0-00010101000000-000000000000
-	github.com/openshift/api v0.0.0-20250305225826-b8da3bfeaf77
-	k8s.io/api v0.32.2
-	k8s.io/apimachinery v0.32.2
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/configstore v0.0.0-00010101000000-000000000000 // indirect
-	filippo.io/edwards25519 v1.1.0 // indirect
-	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
-	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
-	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
-	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
-	github.com/go-logr/logr v1.4.2 // indirect
-	github.com/go-openapi/jsonpointer v0.21.0 // indirect
-	github.com/go-openapi/jsonreference v0.20.2 // indirect
-	github.com/go-openapi/swag v0.23.0 // indirect
-	github.com/go-sql-driver/mysql v1.8.1 // indirect
-	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/golang/protobuf v1.5.4 // indirect
-	github.com/google/gnostic-models v0.6.8 // indirect
-	github.com/google/go-cmp v0.6.0 // indirect
-	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/uuid v1.6.0 // indirect
-	github.com/jinzhu/inflection v1.0.0 // indirect
-	github.com/jinzhu/now v1.1.5 // indirect
-	github.com/josharian/intern v1.0.0 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/mattn/go-sqlite3 v1.14.22 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-	github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a // indirect
-	github.com/pkg/errors v0.9.1 // indirect
-	github.com/x448/float16 v0.8.4 // indirect
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	golang.org/x/oauth2 v0.23.0 // indirect
-	golang.org/x/sys v0.28.0 // indirect
-	golang.org/x/term v0.27.0 // indirect
-	golang.org/x/text v0.21.0 // indirect
-	golang.org/x/time v0.7.0 // indirect
-	google.golang.org/protobuf v1.35.1 // indirect
-	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
-	gopkg.in/inf.v0 v0.9.1 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-	gorm.io/datatypes v1.2.5 // indirect
-	gorm.io/driver/mysql v1.5.6 // indirect
-	gorm.io/driver/sqlite v1.5.7 // indirect
-	gorm.io/gorm v1.25.12 // indirect
-	k8s.io/client-go v0.32.2 // indirect
-	k8s.io/klog/v2 v2.130.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
-	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
-	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
-	sigs.k8s.io/yaml v1.4.0 // indirect
-)
Index: /branches/main/array-ingress-controller/controller/openshift-controller/handlers/go.sum
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/handlers/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/handlers/go.sum	(nonexistent)
@@ -1,212 +0,0 @@
-filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
-filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
-github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
-github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
-github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
-github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
-github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
-github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
-github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
-github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
-github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
-github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
-github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
-github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
-github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
-github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
-github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
-github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
-github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
-github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
-github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
-github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA=
-github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/openshift/api v0.0.0-20250305225826-b8da3bfeaf77 h1:w6F0sEhlUB1K54Ev4EELsLo5w/xur9pFT19VtemlB4Y=
-github.com/openshift/api v0.0.0-20250305225826-b8da3bfeaf77/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a h1:duO3JMrUOqVx50QhzxvDeOYIwTNOB8/EEuRLPyvAMBg=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a/go.mod h1:Qw3ThpzVZ0bfTILpBNYg4LGyjtNxfyCiGh/uDLOOTP8=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
-github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
-golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
-golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
-google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
-gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/datatypes v1.2.5 h1:9UogU3jkydFVW1bIVVeoYsTpLRgwDVW3rHfJG6/Ek9I=
-gorm.io/datatypes v1.2.5/go.mod h1:I5FUdlKpLb5PMqeMQhm30CQ6jXP8Rj89xkTeCSAaAD4=
-gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
-gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
-gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U=
-gorm.io/driver/postgres v1.5.0/go.mod h1:FUZXzO+5Uqg5zzwzv4KK49R8lvGIyscBOqYrtI1Ce9A=
-gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
-gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
-gorm.io/driver/sqlserver v1.5.4 h1:xA+Y1KDNspv79q43bPyjDMUgHoYHLhXYmdFcYPobg8g=
-gorm.io/driver/sqlserver v1.5.4/go.mod h1:+frZ/qYmuna11zHPlh5oc2O6ZA/lS88Keb0XSH1Zh/g=
-gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
-k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw=
-k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y=
-k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
-k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
-k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA=
-k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
Index: /branches/main/array-ingress-controller/controller/openshift-controller/handlers/route_event_handler.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/handlers/route_event_handler.go	(revision 12)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/handlers/route_event_handler.go	(working copy)
@@ -18,8 +18,9 @@
 )
 
 const (
-	HealthCheckAnnotKey = "apv.arraynetworks.com/healthcheck"
-	RateLimitAnnotKey   = "apv.arraynetworks.com/ratelimit"
+	HealthCheckAnnotKey    = "apv.arraynetworks.com/healthcheck"
+	AsfHealthCheckAnnotKey = "asf.arraynetworks.com/healthcheck"
+	RateLimitAnnotKey      = "apv.arraynetworks.com/ratelimit"
 )
 
 // RouteAdded handles Route addition events.
@@ -41,14 +42,15 @@
 		log.Errorf("Cannot find service for route '%s' in namespace '%s'", route.Name, route.Namespace)
 		return
 	}
-	log.Infof("Associated realservice: %s", assocSvc)
+	log.Infof("Associated service: %s", assocSvc)
 	// Get endpoint using service name
 	endpoint, err := utils.GetAssocEndpt(assocSvc, route)
 	if err != nil {
 		log.Errorf("Cannot fetch endpoint '%s' in namespace '%s'", assocSvc, route.Namespace)
 		return
 	}
-	log.Infof("Associated endpoint: %s", endpoint)
+	log.Infof("Associated endpoint: %s", endpoint.Name)
+	log.Debugf("Endpoint details: %s\n", endpoint)
 
 	// Create OpenShift-specific handlers
 	osAPV := &apv.OpenShiftAPV{}
@@ -84,6 +86,7 @@
 		log.Debugf("Ignoring Route: %s/%s\n", oldRoute.Namespace, oldRoute.Name)
 		return
 	}
+
 	log.Infof("Route updated: %s/%s\n", newRoute.Namespace, oldRoute.Name)
 
 	// Get associated service name from route
@@ -92,14 +95,15 @@
 		log.Errorf("Cannot find service for route '%s' in namespace '%s'", newRoute.Name, newRoute.Namespace)
 		return
 	}
-	log.Infof("Associated realservice: %s", assocSvc)
+	log.Infof("Associated service: %s", assocSvc)
 	// Get endpoint using service name
 	endpoint, err := utils.GetAssocEndpt(assocSvc, newRoute)
 	if err != nil {
 		log.Errorf("Cannot fetch endpoint '%s' in namespace '%s'", assocSvc, newRoute.Namespace)
 		return
 	}
-	log.Infof("Associated endpoint: %s", endpoint)
+	log.Infof("Associated endpoint: %s", endpoint.Name)
+	log.Debugf("Endpoint details: %s\n", endpoint)
 
 	// Initialize the Task Manager Facade with OpenShift handlers
 	taskManager := task.New(&apv.OpenShiftAPV{}, &asf.OpenShiftASF{})
@@ -122,40 +126,53 @@
 		ctx = context.WithValue(ctx, "spec_updated", "True")
 	}
 
-	if utils.AnnotationExists(oldRoute, HealthCheckAnnotKey) {
+	var healthCheckKey string
+	var skipRateLimitCheck bool
+	switch utils.GetControllerType() {
+	case utils.APVControllerType:
+		healthCheckKey = HealthCheckAnnotKey
+		skipRateLimitCheck = false
+	case utils.ASFControllerType:
+		healthCheckKey = AsfHealthCheckAnnotKey
+		skipRateLimitCheck = true
+	}
+
+	if utils.AnnotationExists(oldRoute, healthCheckKey) {
 		ctx = context.WithValue(ctx, "health_in_old", "True")
 	} else {
 		ctx = context.WithValue(ctx, "health_in_old", "False")
 	}
 
-	if utils.AnnotationExists(newRoute, HealthCheckAnnotKey) {
+	if utils.AnnotationExists(newRoute, healthCheckKey) {
 		ctx = context.WithValue(ctx, "health_in_new", "True")
 	} else {
 		ctx = context.WithValue(ctx, "health_in_new", "False")
 	}
 
-	healthAnnotChange := utils.CompareJSONAnnotations(oldRoute, newRoute, HealthCheckAnnotKey)
+	healthAnnotChange := utils.CompareJSONAnnotations(oldRoute, newRoute, healthCheckKey)
 	if healthAnnotChange {
 		log.Infof("Health Check annotation updated for route %s in namespace %s", newRoute.Name, newRoute.Namespace)
 		ctx = context.WithValue(ctx, "health_check_updated", "True")
 	}
 
-	if utils.AnnotationExists(oldRoute, RateLimitAnnotKey) {
-		ctx = context.WithValue(ctx, "ratelimit_in_old", "True")
-	} else {
-		ctx = context.WithValue(ctx, "ratelimit_in_old", "False")
-	}
-
-	if utils.AnnotationExists(newRoute, RateLimitAnnotKey) {
-		ctx = context.WithValue(ctx, "ratelimit_in_new", "True")
-	} else {
-		ctx = context.WithValue(ctx, "ratelimit_in_new", "False")
-	}
-
-	ratelimitAnnotChang := utils.CompareJSONAnnotations(oldRoute, newRoute, RateLimitAnnotKey)
-	if ratelimitAnnotChang {
-		log.Infof("Health Check annotation updated for route %s in namespace %s", newRoute.Name, newRoute.Namespace)
-		ctx = context.WithValue(ctx, "ratelimit_updated", "True")
+	if !skipRateLimitCheck {
+		if utils.AnnotationExists(oldRoute, RateLimitAnnotKey) {
+			ctx = context.WithValue(ctx, "ratelimit_in_old", "True")
+		} else {
+			ctx = context.WithValue(ctx, "ratelimit_in_old", "False")
+		}
+
+		if utils.AnnotationExists(newRoute, RateLimitAnnotKey) {
+			ctx = context.WithValue(ctx, "ratelimit_in_new", "True")
+		} else {
+			ctx = context.WithValue(ctx, "ratelimit_in_new", "False")
+		}
+
+		ratelimitAnnotChang := utils.CompareJSONAnnotations(oldRoute, newRoute, RateLimitAnnotKey)
+		if ratelimitAnnotChang {
+			log.Infof("Health Check annotation updated for route %s in namespace %s", newRoute.Name, newRoute.Namespace)
+			ctx = context.WithValue(ctx, "ratelimit_updated", "True")
+		}
 	}
 
 	// Prepare and execute the update task
@@ -175,6 +192,7 @@
 		log.Debugf("Ignoring Route: %s/%s\n", route.Namespace, route.Name)
 		return
 	}
+
 	log.Infof("Route deleted: %s/%s\n", route.Namespace, route.Name)
 
 	// Extract associated service name directly before deletion
@@ -183,7 +201,7 @@
 		log.Errorf("Route '%s' in namespace '%s' has no associated service", route.Name, route.Namespace)
 		return
 	}
-	log.Infof("Associated realservice: %s", assocSvc)
+	log.Infof("Associated service: %s", assocSvc)
 
 	// Get endpoint using service name
 	endpoint, err := utils.GetAssocEndpt(assocSvc, route)
@@ -191,7 +209,8 @@
 		log.Errorf("Cannot fetch endpoint '%s' in namespace '%s'", assocSvc, route.Namespace)
 		return
 	}
-	log.Infof("Associated endpoint: %s", endpoint)
+	log.Infof("Associated endpoint: %s", endpoint.Name)
+	log.Debugf("Endpoint details: %s\n", endpoint)
 
 	// Create OpenShift-specific handlers
 	osAPV := &apv.OpenShiftAPV{}
@@ -218,4 +237,3 @@
 
 	log.Println("Route delete task prepared and executed successfully")
 }
-
Index: /branches/main/array-ingress-controller/controller/openshift-controller/handlers/service_event_handler.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/handlers/service_event_handler.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/handlers/service_event_handler.go	(nonexistent)
@@ -1,98 +0,0 @@
-/*
-	Copyright 2025 Array Networks
-
-	Licensed under the Apache License, Version 2.0 (the "License");
-	you may not use this file except in compliance with the License.
-	You may obtain a copy of the License at
-
-		http://www.apache.org/licenses/LICENSE-2.0
-
-	Unless required by applicable law or agreed to in writing, software
-	distributed under the License is distributed on an "AS IS" BASIS,
-	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-	See the License for the specific language governing permissions and
-	limitations under the License.
-
-*/
-
-package handlers
-
-/*
-import (
-	"context"
-
-	"arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils"
-	"arraynetworks.com/array-ingress-controller/task-manager/openshift"
-	"arraynetworks.com/array-ingress-controller/task-manager/task"
-	v1 "k8s.io/api/core/v1"
-)
-
-// ServiceUpdated handles Service update events.
-func ServiceUpdated(oldObj, newObj interface{}) {
-	oldService := oldObj.(*v1.Service)
-	newService := newObj.(*v1.Service)
-	log.Infof("Service updated: %s/%s\n", newService.Namespace, newService.Name)
-
-	// check if changes in service require changes in configstore
-	selectorChanged := !utils.AreSelectorsEqual(oldService.Spec.Selector, newService.Spec.Selector)
-	portsChanged := !utils.AreServicePortsEqual(oldService.Spec.Ports, newService.Spec.Ports)
-
-	// If nothing significant changed, skip processing
-	if !selectorChanged && !portsChanged {
-		log.Infof("Skipping service update for %s/%s, no relevant changes detected.", newService.Namespace, newService.Name)
-		return
-	}
-
-	// Fetch the associated Route for the updated service
-	assocRoutes, err := utils.GetAssocRoutes(newService.Namespace, newService)
-	if err != nil || len(assocRoutes) == 0 {
-		log.Errorf("Cannot find routes for updated service '%s' in namespace '%s'", newService.Name, newService.Namespace)
-		return
-	}
-
-	// Select the first route (assuming a single route per service)
-	associatedRoute := &assocRoutes[0]
-
-	routeClass, err := utils.GetRouteClass(*associatedRoute)
-	if err != nil {
-		log.Errorf("cannot find class for route '%s'", associatedRoute.Name)
-	}
-
-	var assocPods []*v1.Pod
-
-	if selectorChanged {
-		// Fetch the Pods that match the updated service selector
-		assocPods, err = utils.GetAssocPods(newService.Namespace, newService.Spec.Selector)
-		if err != nil {
-			log.Errorf("Cannot find pods for updated service '%s' in namespace '%s'", newService.Name, newService.Namespace)
-			return
-		}
-	} else {
-		log.Infof("Selector unchanged for service %s, using existing pod records.", newService.Name)
-	}
-
-	// Create OpenShift-specific handlers
-	osAPV := &apv.OpenShiftAPV{}
-	osASF := &asf.OpenShiftASF{}
-
-	// Initialize Task Manager Facade with OpenShift handlers
-	taskManager := task.New(osAPV, osASF)
-
-	// Create a new Task object for service update
-	newTask := &task.Task{
-		Route: &assocRoutes[0],
-		Svc:   newService,
-		Pods:  utils.GetAssocPodPointers(assocPods),
-		EndPts: nil,
-	}
-	ctx := context.WithValue(context.Background(), task.TaskTypeKey{}, "UPDATE")
-	ctx = context.WithValue(ctx, task.ResourceTypeKey{}, "SERVICE")
-
-	// Prepare a task for service update
-	if err := taskManager.PrepareTask(ctx, newTask, routeClass); err != nil {
-		log.Fatalf("Failed to prepare update task: %v", err)
-	}
-
-	log.Println("Service update task prepared and executed successfully")
-}
-	*/
Index: /branches/main/array-ingress-controller/controller/openshift-controller/informers/go.mod
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/informers/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/informers/go.mod	(nonexistent)
@@ -1,81 +0,0 @@
-module arraynetworks.com/array-ingress-controller/controller/openshift-controller/informers
-
-go 1.23.6
-
-replace (
-	arraynetworks.com/array-ingress-controller/configstore => ../../../configstore
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/handlers => ../handlers
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils => ../utils
-	arraynetworks.com/array-ingress-controller/logger => ../../../logger
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/apv => ../../../task-manager/openshift/apv
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/asf => ../../../task-manager/openshift/asf
-	arraynetworks.com/array-ingress-controller/task-manager/task => ../../../task-manager/task
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/handlers v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a
-	k8s.io/client-go v0.32.2
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/configstore v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/apv v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/task-manager/openshift/asf v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/task-manager/task v0.0.0-00010101000000-000000000000 // indirect
-	filippo.io/edwards25519 v1.1.0 // indirect
-	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
-	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
-	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
-	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
-	github.com/go-logr/logr v1.4.2 // indirect
-	github.com/go-openapi/jsonpointer v0.21.0 // indirect
-	github.com/go-openapi/jsonreference v0.20.2 // indirect
-	github.com/go-openapi/swag v0.23.0 // indirect
-	github.com/go-sql-driver/mysql v1.8.1 // indirect
-	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/golang/protobuf v1.5.4 // indirect
-	github.com/google/gnostic-models v0.6.8 // indirect
-	github.com/google/go-cmp v0.6.0 // indirect
-	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/uuid v1.6.0 // indirect
-	github.com/jinzhu/inflection v1.0.0 // indirect
-	github.com/jinzhu/now v1.1.5 // indirect
-	github.com/josharian/intern v1.0.0 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/mattn/go-sqlite3 v1.14.22 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-	github.com/openshift/api v0.0.0-20250305225826-b8da3bfeaf77 // indirect
-	github.com/pkg/errors v0.9.1 // indirect
-	github.com/x448/float16 v0.8.4 // indirect
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	golang.org/x/oauth2 v0.23.0 // indirect
-	golang.org/x/sys v0.28.0 // indirect
-	golang.org/x/term v0.27.0 // indirect
-	golang.org/x/text v0.21.0 // indirect
-	golang.org/x/time v0.7.0 // indirect
-	google.golang.org/protobuf v1.35.1 // indirect
-	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
-	gopkg.in/inf.v0 v0.9.1 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-	gorm.io/datatypes v1.2.5 // indirect
-	gorm.io/driver/mysql v1.5.6 // indirect
-	gorm.io/driver/sqlite v1.5.7 // indirect
-	gorm.io/gorm v1.25.12 // indirect
-	k8s.io/api v0.32.2 // indirect
-	k8s.io/apimachinery v0.32.2 // indirect
-	k8s.io/klog/v2 v2.130.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
-	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
-	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
-	sigs.k8s.io/yaml v1.4.0 // indirect
-)
Index: /branches/main/array-ingress-controller/controller/openshift-controller/informers/go.sum
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/informers/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/informers/go.sum	(nonexistent)
@@ -1,212 +0,0 @@
-filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
-filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
-github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
-github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
-github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
-github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
-github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
-github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
-github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
-github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
-github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
-github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
-github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
-github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
-github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
-github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
-github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
-github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
-github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
-github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
-github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
-github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA=
-github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/openshift/api v0.0.0-20250305225826-b8da3bfeaf77 h1:w6F0sEhlUB1K54Ev4EELsLo5w/xur9pFT19VtemlB4Y=
-github.com/openshift/api v0.0.0-20250305225826-b8da3bfeaf77/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a h1:duO3JMrUOqVx50QhzxvDeOYIwTNOB8/EEuRLPyvAMBg=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a/go.mod h1:Qw3ThpzVZ0bfTILpBNYg4LGyjtNxfyCiGh/uDLOOTP8=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
-github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
-golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
-golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
-google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
-gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/datatypes v1.2.5 h1:9UogU3jkydFVW1bIVVeoYsTpLRgwDVW3rHfJG6/Ek9I=
-gorm.io/datatypes v1.2.5/go.mod h1:I5FUdlKpLb5PMqeMQhm30CQ6jXP8Rj89xkTeCSAaAD4=
-gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
-gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
-gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U=
-gorm.io/driver/postgres v1.5.0/go.mod h1:FUZXzO+5Uqg5zzwzv4KK49R8lvGIyscBOqYrtI1Ce9A=
-gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
-gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
-gorm.io/driver/sqlserver v1.5.4 h1:xA+Y1KDNspv79q43bPyjDMUgHoYHLhXYmdFcYPobg8g=
-gorm.io/driver/sqlserver v1.5.4/go.mod h1:+frZ/qYmuna11zHPlh5oc2O6ZA/lS88Keb0XSH1Zh/g=
-gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
-k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw=
-k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y=
-k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
-k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
-k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA=
-k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
Index: /branches/main/array-ingress-controller/controller/openshift-controller/informers/pod_informer.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/informers/pod_informer.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/informers/pod_informer.go	(nonexistent)
@@ -1,30 +0,0 @@
-/*
-	Copyright 2025 Array Networks
-*/
-
-package informers
-
-import (
-    "arraynetworks.com/array-ingress-controller/controller/openshift-controller/event-handlers"
-    "k8s.io/client-go/informers"
-    "k8s.io/client-go/tools/cache"
-)
-
-// StartPodInformer sets up the Pod informer and ensures the cache is synced.
-func StartPodInformer(factory informers.SharedInformerFactory, stopCh chan struct{}) {
-    podInformer := factory.Core().V1().Pods().Informer()
-
-    podInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
-        AddFunc:    handlers.PodAdded,
-        UpdateFunc: handlers.PodUpdated,
-        DeleteFunc: handlers.PodDeleted,
-    })
-
-    go podInformer.Run(stopCh)
-
-    if !cache.WaitForCacheSync(stopCh, podInformer.HasSynced) {
-        log.Println("Pod informer cache sync failed")
-        return
-    }
-    log.Println("Pod informer cache synced successfully")
-}
\ No newline at end of file
Index: /branches/main/array-ingress-controller/controller/openshift-controller/informers/route_informer.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/informers/route_informer.go	(revision 12)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/informers/route_informer.go	(working copy)
@@ -15,7 +15,7 @@
 
 // StartRouteInformer sets up the Route informer and ensures the cache is synced.
 func StartRouteInformer(clientset *routev1.Clientset, stopCh chan struct{}) {
-	factory := routeinformers.NewSharedInformerFactory(clientset, 1*time.Second)
+	factory := routeinformers.NewSharedInformerFactory(clientset, 1*time.Minute)
 	routeInformer := factory.Route().V1().Routes().Informer()
 	log.Info("Starting route Informer")
 	routeInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
Index: /branches/main/array-ingress-controller/controller/openshift-controller/informers/service_informer.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/informers/service_informer.go	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/informers/service_informer.go	(nonexistent)
@@ -1,32 +0,0 @@
-/*
-	Copyright 2025 Array Networks
-*/
-
-package informers
-/*
-import (
-    "log"
-    "arraynetworks.com/array-ingress-controller/controller/openshift-controller/handlers"
-    "k8s.io/client-go/informers"
-    "k8s.io/client-go/tools/cache"
-)
-
-// StartServiceInformer sets up the Service informer and ensures the cache is synced.
-func StartServiceInformer(factory informers.SharedInformerFactory, stopCh chan struct{}) {
-    serviceInformer := factory.Core().V1().Services().Informer()
-
-    serviceInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
-        AddFunc:    handlers.ServiceAdded,
-        UpdateFunc: handlers.ServiceUpdated,
-        DeleteFunc: handlers.ServiceDeleted,
-    })
-
-    go serviceInformer.Run(stopCh)
-
-    if !cache.WaitForCacheSync(stopCh, serviceInformer.HasSynced) {
-        log.Println("Service informer cache sync failed")
-        return
-    }
-    log.Println("Service informer cache synced successfully")
-}
-    */
\ No newline at end of file
Index: /branches/main/array-ingress-controller/controller/openshift-controller/utils/go.mod
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/utils/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/utils/go.mod	(nonexistent)
@@ -1,57 +0,0 @@
-module arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils
-
-go 1.23.6
-
-replace arraynetworks.com/array-ingress-controller/logger => ../../../logger
-
-require (
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	github.com/openshift/api v0.0.0-20250228110707-635291d6fdf1
-	github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a
-	k8s.io/api v0.32.2
-	k8s.io/apimachinery v0.32.2
-	k8s.io/client-go v0.32.2
-)
-
-require (
-	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
-	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
-	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
-	github.com/go-logr/logr v1.4.2 // indirect
-	github.com/go-openapi/jsonpointer v0.21.0 // indirect
-	github.com/go-openapi/jsonreference v0.20.2 // indirect
-	github.com/go-openapi/swag v0.23.0 // indirect
-	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/golang/protobuf v1.5.4 // indirect
-	github.com/google/gnostic-models v0.6.8 // indirect
-	github.com/google/go-cmp v0.6.0 // indirect
-	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/uuid v1.6.0 // indirect
-	github.com/josharian/intern v1.0.0 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-	github.com/pkg/errors v0.9.1 // indirect
-	github.com/x448/float16 v0.8.4 // indirect
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	golang.org/x/oauth2 v0.23.0 // indirect
-	golang.org/x/sys v0.28.0 // indirect
-	golang.org/x/term v0.27.0 // indirect
-	golang.org/x/text v0.21.0 // indirect
-	golang.org/x/time v0.7.0 // indirect
-	google.golang.org/protobuf v1.35.1 // indirect
-	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
-	gopkg.in/inf.v0 v0.9.1 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-	k8s.io/klog/v2 v2.130.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
-	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
-	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
-	sigs.k8s.io/yaml v1.4.0 // indirect
-)
Index: /branches/main/array-ingress-controller/controller/openshift-controller/utils/go.sum
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/utils/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/utils/go.sum	(nonexistent)
@@ -1,168 +0,0 @@
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
-github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
-github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
-github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
-github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
-github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
-github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
-github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/openshift/api v0.0.0-20250228110707-635291d6fdf1 h1:EEiIitbWf/D7MXxpHZc7O0zigK2LNLkjQV91kcT0wHM=
-github.com/openshift/api v0.0.0-20250228110707-635291d6fdf1/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a h1:duO3JMrUOqVx50QhzxvDeOYIwTNOB8/EEuRLPyvAMBg=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a/go.mod h1:Qw3ThpzVZ0bfTILpBNYg4LGyjtNxfyCiGh/uDLOOTP8=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
-github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
-golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
-golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
-google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
-gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw=
-k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y=
-k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
-k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
-k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA=
-k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
Index: /branches/main/array-ingress-controller/controller/openshift-controller/utils/k8s_helper.go
===================================================================
--- /branches/main/array-ingress-controller/controller/openshift-controller/utils/k8s_helper.go	(revision 12)
+++ /branches/main/array-ingress-controller/controller/openshift-controller/utils/k8s_helper.go	(working copy)
@@ -9,20 +9,65 @@
 	"encoding/json"
 	"errors"
 	"fmt"
+	"os"
 	"reflect"
+	"strings"
 
 	routev1 "github.com/openshift/api/route/v1"
 	corev1 "k8s.io/api/core/v1"
 	v1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/client-go/kubernetes"
+)
 
-	"arraynetworks.com/array-ingress-controller/logger"
+const (
+	APVRouteClass           = "ARRAY-APV"
+	ASFRouteClass           = "ARRAY-ASF"
+	APVControllerType       = "APV"
+	ASFControllerType       = "ASF"
+	ControllerTypeEnvVar    = "CONTROLLER_TYPE"
+	RouteClassAnnotationKey = "arraynetworks.com/class"
 )
 
+var ControllerRouteClassMap = map[string]string{
+	APVControllerType: APVRouteClass,
+	ASFControllerType: ASFRouteClass,
+}
+
 // Export kubeClient for use in other packages
 var KubeClient *kubernetes.Clientset
 
+// get conroller type from env
+// This should be set in the environment where the controller is running
+// without controller type being set, the code will not reach here
+// hence no need to check for empty value
+func GetControllerType() string {
+	return strings.ToUpper(os.Getenv(ControllerTypeEnvVar))
+}
+
+func GetExpectedRouteClass() string {
+	controllerType := GetControllerType()
+	if class, ok := ControllerRouteClassMap[controllerType]; ok {
+		return class
+	}
+	return ""
+}
+
+func FilterRoutesByController(routes []*routev1.Route) []*routev1.Route {
+	var filtered []*routev1.Route
+	expectedClass := GetExpectedRouteClass()
+	if expectedClass == "" {
+		return filtered
+	}
+
+	for _, r := range routes {
+		if val, ok := r.Annotations[RouteClassAnnotationKey]; ok && strings.EqualFold(val, expectedClass) {
+			filtered = append(filtered, r)
+		}
+	}
+	return filtered
+}
+
 func AnnotationExists(route *routev1.Route, annotationKey string) bool {
 	// Retrieve the JSON string from the annotation
 	_, exists := route.Annotations[annotationKey]
@@ -34,7 +79,7 @@
 	// Retrieve the JSON string from the annotation
 	jsonString, exists := route.Annotations[annotationKey]
 	if !exists {
-		logger.Errorf("Annotation '%s' does not exist.\n", annotationKey)
+		log.Errorf("Annotation '%s' does not exist.\n", annotationKey)
 		return "", exists
 	}
 
@@ -46,12 +91,12 @@
 	newAnnotation, newExists := newRoute.Annotations[annotationKey]
 
 	if !oldExists && !newExists {
-		logger.Info("Annotation does not exist in either route.")
+		log.Info("Annotation does not exist in either route.")
 		return false
 	}
 
 	if oldAnnotation == newAnnotation {
-		logger.Info("No changes in the annotation.")
+		log.Info("No changes in the annotation.")
 		return false
 	}
 
@@ -59,21 +104,21 @@
 
 	if oldExists {
 		if err := json.Unmarshal([]byte(oldAnnotation), &oldData); err != nil {
-			logger.Errorf("Error parsing old annotation JSON:", err)
+			log.Errorf("Error parsing old annotation JSON:", err)
 			return false
 		}
 	}
 
 	if newExists {
 		if err := json.Unmarshal([]byte(newAnnotation), &newData); err != nil {
-			logger.Errorf("Error parsing new annotation JSON:", err)
+			log.Errorf("Error parsing new annotation JSON:", err)
 			return false
 		}
 	}
 
 	if oldExists && newExists {
 		if !reflect.DeepEqual(oldData, newData) {
-			logger.Info("Annotation fields have changed.")
+			log.Info("Annotation fields have changed.")
 			return true
 		}
 	}
@@ -152,22 +197,34 @@
 	return podPointers
 }
 
+// CheckRouteClass checks if the route has the expected class based on the controller type.
+// It returns the class if it matches, otherwise returns an empty string and false.
 func CheckRouteClass(route routev1.Route) (string, bool) {
 	// Fetch the annotation value.
-	annotationKey := "arraynetworks.com/class"
-	annotationValue, exists := route.Annotations[annotationKey]
-	if exists && annotationValue == "ARRAY-APV" {
+	annotationValue, exists := route.Annotations[RouteClassAnnotationKey]
+	if !exists {
+		return "", false
+	}
+
+	controllerType := GetControllerType()
+
+	expectedClass, ok := ControllerRouteClassMap[controllerType]
+	if !ok {
+		return "", false
+	}
+
+	if strings.EqualFold(annotationValue, expectedClass) {
 		return annotationValue, true
 	}
+
 	return "", false
 }
 
 func GetRouteClass(route routev1.Route) (string, error) {
 	// Fetch the annotation value.
-	annotationKey := "arraynetworks.com/class"
-	annotationValue, exists := route.Annotations[annotationKey]
+	annotationValue, exists := route.Annotations[RouteClassAnnotationKey]
 	if !exists {
-		return "", fmt.Errorf("Annotation %s not found in route %s\n", annotationKey, route.Name)
+		return "", fmt.Errorf("Annotation %s not found in route %s\n", RouteClassAnnotationKey, route.Name)
 	}
 	return annotationValue, nil
 }
@@ -200,7 +257,6 @@
 }
 
 // GetAssocRoutes finds routes that point to a given service in a namespace.
-
 func GetAssocRoutes(namespace string, serviceName string) ([]*routev1.Route, error) {
 	var err error
 	var route *routev1.RouteList
Index: /branches/main/array-ingress-controller/go.mod
===================================================================
--- /branches/main/array-ingress-controller/go.mod	(revision 12)
+++ /branches/main/array-ingress-controller/go.mod	(working copy)
@@ -1,54 +1,33 @@
-module arraynetworks.com/array-ingress-controller/main
+module arraynetworks.com/array-ingress-controller
 
 go 1.23.6
 
-replace (
-	arraynetworks.com/array-ingress-controller/apvadapter => ./apvadapter
-	arraynetworks.com/array-ingress-controller/apvadapter/annotations/health => ./apvadapter/annotations/health
-	arraynetworks.com/array-ingress-controller/apvadapter/annotations/ratelimit => ./apvadapter/annotations/ratelimit
-	arraynetworks.com/array-ingress-controller/apvadapter/annotations/whitelisting => ./apvadapter/annotations/whitelisting
-	arraynetworks.com/array-ingress-controller/apvadapter/apvurlbuilder => ./apvadapter/apvurlbuilder
-	arraynetworks.com/array-ingress-controller/apvadapter/realservice => ./apvadapter/realservice
-	arraynetworks.com/array-ingress-controller/apvclient => ./apvadapter/apvclient
-	arraynetworks.com/array-ingress-controller/common => ./common
-	arraynetworks.com/array-ingress-controller/configstore => ./configstore
-	arraynetworks.com/array-ingress-controller/controller => ./controller
-	arraynetworks.com/array-ingress-controller/controller/openshift => ./controller/openshift-controller
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/handlers => ./controller/openshift-controller/handlers
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/informers => ./controller/openshift-controller/informers
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils => ./controller/openshift-controller/utils
-	arraynetworks.com/array-ingress-controller/logger => ./logger
-	arraynetworks.com/array-ingress-controller/task-manager/openshift => ./task-manager/openshift
-	arraynetworks.com/array-ingress-controller/task-manager/task => ./task-manager/task
-	arraynetworks.com/array-ingress-controller/watchtower => ./watchtower
-)
+replace arraynetworks.com/array-ingress-controller => ./array-ingress
 
 require (
-	arraynetworks.com/array-ingress-controller/apvadapter v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/controller/openshift v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/watchtower v0.0.0-00010101000000-000000000000
-	k8s.io/api v0.32.2
-	k8s.io/apimachinery v0.32.2
-	k8s.io/client-go v0.32.2
-	k8s.io/klog/v2 v2.130.1
-	sigs.k8s.io/controller-runtime v0.20.2
+	github.com/cenkalti/backoff/v4 v4.3.0
+	github.com/go-resty/resty/v2 v2.16.5
+	github.com/golang/mock v1.6.0
+	github.com/onsi/ginkgo/v2 v2.23.3
+	github.com/onsi/gomega v1.36.3
+	github.com/openshift/api v0.0.0-20250325155304-0f14a211af33
+	github.com/openshift/client-go v0.0.0-20250324153519-f0faeb0f2f2e
+	github.com/stretchr/testify v1.9.0
+	go.uber.org/zap v1.27.0
+	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
+	gopkg.in/natefinch/lumberjack.v2 v2.2.1
+	gorm.io/datatypes v1.2.5
+	gorm.io/driver/sqlite v1.5.7
+	gorm.io/gorm v1.25.12
+	k8s.io/api v0.32.3
+	k8s.io/apimachinery v0.32.3
+	k8s.io/client-go v0.32.3
+	sigs.k8s.io/controller-runtime v0.20.4
 )
 
 require (
-	arraynetworks.com/array-ingress-controller/apvadapter/apvurlbuilder v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/apvadapter/realservice v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/apvclient v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/common v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/configstore v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/handlers v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/informers v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/task-manager/openshift v0.0.0-00010101000000-000000000000 // indirect
-	arraynetworks.com/array-ingress-controller/task-manager/task v0.0.0-00010101000000-000000000000 // indirect
 	filippo.io/edwards25519 v1.1.0 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
-	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
 	github.com/cespare/xxhash/v2 v2.3.0 // indirect
 	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
 	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
@@ -59,14 +38,15 @@
 	github.com/go-openapi/jsonpointer v0.21.0 // indirect
 	github.com/go-openapi/jsonreference v0.20.2 // indirect
 	github.com/go-openapi/swag v0.23.0 // indirect
-	github.com/go-resty/resty/v2 v2.16.5 // indirect
 	github.com/go-sql-driver/mysql v1.8.1 // indirect
+	github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/protobuf v1.5.4 // indirect
 	github.com/google/btree v1.1.3 // indirect
 	github.com/google/gnostic-models v0.6.8 // indirect
-	github.com/google/go-cmp v0.6.0 // indirect
+	github.com/google/go-cmp v0.7.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
+	github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect
 	github.com/google/uuid v1.6.0 // indirect
 	github.com/jinzhu/inflection v1.0.0 // indirect
 	github.com/jinzhu/now v1.1.5 // indirect
@@ -77,9 +57,8 @@
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-	github.com/openshift/api v0.0.0-20250228110707-635291d6fdf1 // indirect
-	github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a // indirect
 	github.com/pkg/errors v0.9.1 // indirect
+	github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
 	github.com/prometheus/client_golang v1.19.1 // indirect
 	github.com/prometheus/client_model v0.6.1 // indirect
 	github.com/prometheus/common v0.55.0 // indirect
@@ -87,34 +66,26 @@
 	github.com/spf13/pflag v1.0.5 // indirect
 	github.com/x448/float16 v0.8.4 // indirect
 	go.uber.org/multierr v1.11.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
+	golang.org/x/net v0.37.0 // indirect
 	golang.org/x/oauth2 v0.23.0 // indirect
-	golang.org/x/sync v0.10.0 // indirect
-	golang.org/x/sys v0.28.0 // indirect
-	golang.org/x/term v0.27.0 // indirect
-	golang.org/x/text v0.21.0 // indirect
+	golang.org/x/sync v0.12.0 // indirect
+	golang.org/x/sys v0.31.0 // indirect
+	golang.org/x/term v0.30.0 // indirect
+	golang.org/x/text v0.23.0 // indirect
 	golang.org/x/time v0.7.0 // indirect
+	golang.org/x/tools v0.30.0 // indirect
 	gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
-	google.golang.org/protobuf v1.35.1 // indirect
+	google.golang.org/protobuf v1.36.5 // indirect
 	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
 	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
-	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
-	gorm.io/datatypes v1.2.5 // indirect
 	gorm.io/driver/mysql v1.5.6 // indirect
-	gorm.io/driver/sqlite v1.5.7 // indirect
-	gorm.io/gorm v1.25.12 // indirect
-  k8s.io/apiextensions-apiserver v0.32.1 // indirect
-	k8s.io/api v0.32.2 // indirect
-	k8s.io/apimachinery v0.32.2 // indirect
-	k8s.io/client-go v0.32.2 // indirect
+	k8s.io/apiextensions-apiserver v0.32.1 // indirect
 	k8s.io/klog/v2 v2.130.1 // indirect
 	k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
-	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
-	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
+	k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect
+	sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
+	sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect
 	sigs.k8s.io/yaml v1.4.0 // indirect
 )
Index: /branches/main/array-ingress-controller/helmchart/array-ingress/templates/deployment.yaml
===================================================================
--- /branches/main/array-ingress-controller/helmchart/array-ingress/templates/deployment.yaml	(revision 12)
+++ /branches/main/array-ingress-controller/helmchart/array-ingress/templates/deployment.yaml	(working copy)
@@ -10,7 +10,7 @@
     chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
 spec:
   serviceName: {{ include "array-ingress.fullname" . }}-headless
-  replicas: 3
+  replicas: {{ .Values.replicaCount }}
   selector:
     matchLabels:
       app: {{ include "array-ingress.name" . }}
@@ -34,10 +34,21 @@
           env:
             - name: PLATFORM
               value: {{ .Values.platform }}
+            {{- if and .Values.apv.enabled .Values.asf.enabled }}
+            {{- fail "Both APV and ASF cannot be enabled at the same time" }}
+            {{- else if not (or .Values.apv.enabled .Values.asf.enabled) }}
+            {{- fail "Atlease One device (APV or ASF) must be enabled" }}
+            {{- end }}
+            {{- if .Values.apv.enabled }}
             - name: CONTROLLER_TYPE
-              value: {{ .Values.controller_type }}
+              value: APV
+            {{- else if .Values.asf.enabled }}
+            - name: CONTROLLER_TYPE
+              value: ASF
+            {{- end }}
             - name: CONTROLLER_NAMESPACE
               value: {{ .Values.namespace }}
+            {{- if .Values.apv.enabled }}
             - name: APV_IP
               value: {{ .Values.apv.ip }}
             - name: APV_USERNAME
@@ -48,6 +59,18 @@
               value: {{ .Values.apv.insecureskip | quote }}
             - name: APV_TIMEOUT
               value: {{ .Values.apv.timeout }}
+            {{- else if .Values.asf.enabled }}
+            - name: ASF_IP
+              value: {{ .Values.asf.ip }}
+            - name: ASF_USERNAME
+              value: {{ .Values.asf.username }}
+            - name: ASF_PASSWORD
+              value: {{ .Values.asf.password }}
+            - name: ASF_INSECURE_SKIP
+              value: {{ .Values.asf.insecureskip | quote }}
+            - name: ASF_TIMEOUT
+              value: {{ .Values.asf.timeout }}
+            {{- end }}
             - name: EMAIL_FROM
               value: {{ .Values.email.from }}
             - name: EMAIL_PASSWORD
@@ -56,6 +79,7 @@
               value: {{ .Values.email.recipients }}
             - name: EMAIL_CC
               value: {{ .Values.email.cc }}
+
           volumeMounts:
             - name: log-volume
               mountPath: {{ .Values.pvc.logMountPath }}
Index: /branches/main/array-ingress-controller/helmchart/array-ingress/templates/pvc.yaml
===================================================================
--- /branches/main/array-ingress-controller/helmchart/array-ingress/templates/pvc.yaml	(revision 11)
+++ /branches/main/array-ingress-controller/helmchart/array-ingress/templates/pvc.yaml	(nonexistent)
@@ -1,11 +0,0 @@
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
-  name: array-ingress-log-pvc
-spec:
-  accessModes:
-    - ReadWriteOnce
-  resources:
-    requests:
-      storage: 1Gi
-
Index: /branches/main/array-ingress-controller/helmchart/array-ingress/values.yaml
===================================================================
--- /branches/main/array-ingress-controller/helmchart/array-ingress/values.yaml	(revision 12)
+++ /branches/main/array-ingress-controller/helmchart/array-ingress/values.yaml	(working copy)
@@ -5,7 +5,6 @@
 replicaCount: 3
 
 namespace: array-ingress
-controller_type: APV
 platform: openshift
 
 image:
@@ -51,6 +50,15 @@
   password: "some_passowrd"
   insecureskip: "true"
   timeout: "5s"
+  enabled: true
+
+asf:
+  ip: "some_ip"
+  username: "some_username"
+  password: "some_passowrd"
+  insecureskip: "true"
+  timeout: "5s"
+  enabled: true
 
 email:
   from: "example@example.com"
Index: /branches/main/array-ingress-controller/logger/go.mod
===================================================================
--- /branches/main/array-ingress-controller/logger/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/logger/go.mod	(nonexistent)
@@ -1,24 +0,0 @@
-module arraynetworks.com/array-ingress-controller/logger
-
-go 1.23.6
-
-require (
-	github.com/golang/mock v1.6.0
-	github.com/onsi/ginkgo/v2 v2.22.2
-	github.com/onsi/gomega v1.36.2
-	go.uber.org/zap v1.27.0
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1
-	gopkg.in/yaml.v3 v3.0.1
-)
-
-require (
-	github.com/go-logr/logr v1.4.2 // indirect
-	github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
-	github.com/google/go-cmp v0.6.0 // indirect
-	github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect
-	go.uber.org/multierr v1.10.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	golang.org/x/sys v0.28.0 // indirect
-	golang.org/x/text v0.21.0 // indirect
-	golang.org/x/tools v0.28.0 // indirect
-)
Index: /branches/main/array-ingress-controller/logger/go.sum
===================================================================
--- /branches/main/array-ingress-controller/logger/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/logger/go.sum	(nonexistent)
@@ -1,65 +0,0 @@
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/gk=
-google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Index: /branches/main/array-ingress-controller/task-manager/go.mod
===================================================================
--- /branches/main/array-ingress-controller/task-manager/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/go.mod	(nonexistent)
@@ -1,3 +0,0 @@
-module arraynetworks.com/array-ingress-controller/taskmanager
-
-go 1.22.2
Index: /branches/main/array-ingress-controller/task-manager/kubernetes/apv.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/kubernetes/apv.go	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/kubernetes/apv.go	(nonexistent)
@@ -1,15 +0,0 @@
-package kubernetes
-
-import (
-    "taskmanager/pkg/task"
-    "fmt"
-)
-
-// KubernetesAPV implements the APVHandler interface for Kubernetes
-type KubernetesAPV struct{}
-
-func (k *KubernetesAPV) SetupAPV() error {
-    // Kubernetes-specific APV setup logic
-    fmt.Println("Setting up APV on Kubernetes")
-    return nil
-}
\ No newline at end of file
Index: /branches/main/array-ingress-controller/task-manager/kubernetes/asf.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/kubernetes/asf.go	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/kubernetes/asf.go	(nonexistent)
@@ -1,15 +0,0 @@
-package kubernetes
-
-import (
-    "taskmanager/pkg/task"
-    "fmt"
-)
-
-// KubernetesASF implements the ASFHandler interface for Kubernetes
-type KubernetesASF struct{}
-
-func (k *KubernetesASF) SetupASF() error {
-    // Kubernetes-specific ASF setup logic
-    fmt.Println("Setting up ASF on Kubernetes")
-    return nil
-}
\ No newline at end of file
Index: /branches/main/array-ingress-controller/task-manager/openshift/apv.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/apv.go	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/apv.go	(nonexistent)
@@ -1,242 +0,0 @@
-/*
-	Copyright 2025 Array Networks
-
-*/
-
-package openshift
-
-import (
-	"context"
-	"fmt"
-
-	"arraynetworks.com/array-ingress-controller/configstore"
-	taskManager "arraynetworks.com/array-ingress-controller/task-manager/task"
-)
-
-type SetUpFunc func(ctx context.Context, task taskManager.Task) error
-
-// OpenShiftAPV implements the APVHandler interface for OpenShift
-type OpenShiftAPV struct{}
-
-func (o *OpenShiftAPV) SetupAPV(ctx context.Context, task *taskManager.Task) error {
-	// OpenShift-specific APV setup logic
-	log.Info("Setting up APV on OpenShift")
-
-	taskType, _ := ctx.Value(taskManager.TaskTypeKey{}).(string)
-	resourceType, _ := ctx.Value(taskManager.ResourceTypeKey{}).(string)
-
-	key := resourceType + "_" + taskType
-
-	// Lookup the function in the map and execute it if found
-	if handlerFunc, found := apvFunctionMap[key]; found {
-		handlerFunc(ctx, task)
-	} else {
-		return fmt.Errorf("No handler found for: %v", key)
-	}
-	return nil
-}
-
-// Implementations of task handlers
-func handleRouteAdd(ctx context.Context, task taskManager.Task) {
-	log.Info("Handling Route Add with additional context data")
-	// Initialize the config store
-	configStore, err := configstore.Get()
-	if err != nil {
-		log.Error("Error initializing config store: %v", err)
-		return
-	}
-	// Create a service entry for each pod
-	for _, pod := range task.pods {
-		serviceName := fmt.Sprintf("%s_%s", pod.Name, pod.Namespace) // using format - pod-name_namespace
-		service := configstore.Service{
-			IngressName: task.route.Name,
-			ServiceName: serviceName,
-			Protocol:    string(task.svc.Spec.Ports[0].Protocol),
-			IPAddress:   pod.Status.PodIP,
-			IsIP6:       false,
-			Enable:      true,
-			Port:        int(task.svc.Spec.Ports[0].Port),
-			MaxConn:     DefaultMaxConn,
-			Status:      StatusWaiting,
-			CurrentOp:   OperationCreate,
-		}
-
-		log.Debugf("Adding Service for Pod: %s with IP: %s, Protocol: %s, Port: %d", serviceName, pod.Status.PodIP, string(task.svc.Spec.Ports[0].Protocol), int(task.svc.Spec.Ports[0].Port))
-
-		if err := configStore.db.Create(service); err != nil {
-			log.Errorf("Error creating service record for pod %s: %v", serviceName, err)
-		} else {
-			log.Infof("Service record created successfully for pod %s", serviceName)
-		}
-	}
-}
-
-func handleRouteUpdate(ctx context.Context, task taskManager.Task) {
-	log.Info("Handling Route Update with additional context data")
-
-	// Initialize the config store
-	configStore, err := configstore.Get()
-	if err != nil {
-		log.Errorf("Error initializing config store: %v", err)
-		return
-	}
-
-	// Retrieve existing service records
-	var realServices []configstore.Service
-	if err := configStore.ReadByRouteName(task.route.Name, &realServices); err != nil {
-		log.Errorf("Error retrieving service records for route %s: %v", task.route.Name, err)
-		return
-	}
-
-	// Update service records
-	for _, service := range realServices {
-		service.Status = StatusWaiting
-		service.CurrentOp = OperationUpdate
-		service.Protocol = string(task.svc.Spec.Ports[0].Protocol)
-		service.Port = int(task.svc.Spec.Ports[0].Port)
-
-		if err := configStore.db.Update(service); err != nil {
-			// todo: check how gorm update works
-
-			log.Errorf("Error updating service record for %s: %v", service.ServiceName, err)
-		} else {
-			log.Infof("Service record updated successfully for %s", service.ServiceName)
-		}
-	}
-}
-
-func handleRouteDelete(ctx context.Context, task taskManager.Task) {
-	log.Info("Handling Route Delete with additional context data")
-
-	// Initialize the config store
-	configStore, err := configstore.Get()
-	if err != nil {
-		log.Errorf("Error initializing config store: %v", err)
-		return
-	}
-
-	// Retrieve existing service records
-	var realServices []configstore.Service
-	if err := configStore.db.ReadByRouteName(task.route.Name, &realServices); err != nil {
-		log.Errorf("Error retrieving service records for route %s: %v", task.route.Name, err)
-		return
-	}
-
-	// Delete service records
-	for _, service := range realServices {
-		if err := configStore.db.Delete(service); err != nil {
-			log.Errorf("Error deleting service record for %s: %v", service.ServiceName, err)
-		} else {
-			log.Infof("Service record deleted successfully for %s", service.ServiceName)
-		}
-	}
-}
-
-func handlePodAdd(ctx context.Context, task taskManager.Task) {
-	log.Info("Handling Pod Add with additional context data")
-	// Initialize the config store
-	configStore, err := configstore.Get()
-	if err != nil {
-		log.Errorf("Error initializing config store: %v", err)
-		return
-	}
-	// Retrieve existing service records
-	var realServices []configstore.Service
-	if err := configStore.db.ReadByRouteName(task.route.Name, &realServices); err != nil {
-		log.Errorf("Error retrieving service records for route %s: %v", task.route.Name, err)
-		return
-	}
-	// Create a service entry for pod
-	serviceName := fmt.Sprintf("%s_%s", task.pods[0].Name, task.pods[0].Namespace) // use format - pod-name_namespace
-	service := configstore.Service{
-		IngressName: task.route.Name,
-		ServiceName: serviceName,
-		Protocol:    string(task.svc.Spec.Ports[0].Protocol),
-		IPAddress:   task.pods[0].Status.PodIP,
-		IsIP6:       false,
-		Enable:      true,
-		Port:        int(task.svc.Spec.Ports[0].Port),
-		MaxConn:     DefaultMaxConn,
-		Status:      StatusWaiting,
-		CurrentOp:   OperationCreate,
-	}
-	log.Debugf("Adding Service for Pod: %s with IP: %s, Protocol: %s, Port: %d", serviceName, task.pods[0].Status.PodIP, string(task.svc.Spec.Ports[0].Protocol), int(task.svc.Spec.Ports[0].Port))
-
-	if err := configStore.db.Create(service); err != nil {
-		log.Errorf("Error creating service record for pod %s: %v", serviceName, err)
-	} else {
-		log.Infof("Service record created successfully for pod %s", serviceName)
-	}
-}
-
-func handlePodDelete(ctx context.Context, task taskManager.Task) {
-	log.Info("Handling Pod Delete with additional context data")
-	// Initialize the config store
-	configStore, err := configstore.Get()
-	if err != nil {
-		log.Errorf("Error initializing config store: %v", err)
-		return
-	}
-	// Directly construct the service name
-	serviceName := fmt.Sprintf("%s_%s", task.pods[0].Name, task.pods[0].Namespace)
-
-	// Delete the specific service record
-	if err := configStore.db.Delete(configstore.Service{ServiceName: serviceName}); err != nil {
-		log.Errorf("Error deleting service record for %s: %v", serviceName, err)
-	} else {
-		log.Infof("Service record deleted successfully for pod %s", serviceName)
-	}
-}
-
-func handleServiceUpdate(ctx context.Context, task taskManager.Task) {
-	log.Info("Handling Service Update with additional context data")
-
-	// Initialize the config store
-	configStore, err := configstore.Get()
-	if err != nil {
-		log.Errorf("Error initializing config store: %v", err)
-		return
-	}
-
-	// Retrieve existing service records
-	var realServices []configstore.Service
-	if err := configStore.db.ReadByRouteName(task.route.Name, &realServices); err != nil {
-		log.Errorf("Error retrieving service records for route %s: %v", task.route.Name, err)
-		return
-	}
-
-	// Create a map of current Pod IPs for quick lookup
-	currentPodIPs := make(map[string]bool)
-	for _, pod := range task.pods {
-		currentPodIPs[pod.Status.PodIP] = true
-	}
-
-	// Update service records with new details from updated service
-	for _, service := range realServices {
-		if _, exists := currentPodIPs[service.IPAddress]; exists {
-			// Pod is still part of the service, update only if necessary
-			updatedProtocol := string(task.svc.Spec.Ports[0].Protocol)
-			updatedPort := int(task.svc.Spec.Ports[0].Port)
-
-			if service.Protocol != updatedProtocol || service.Port != updatedPort {
-				service.Protocol = updatedProtocol
-				service.Port = updatedPort
-				service.Status = StatusWaiting
-				service.CurrentOp = OperationUpdate
-
-				if err := configStore.db.Update(service); err != nil {
-					log.Errorf("Error updating service record for %s: %v", service.ServiceName, err)
-				} else {
-					log.Infof("Service record updated successfully for %s", service.ServiceName)
-				}
-			}
-		} else {
-			// Pod is no longer part of the service, delete directly
-			if err := configStore.db.Delete(service); err != nil {
-				log.Error("Error deleting outdated service record for %s: %v", service.ServiceName, err)
-			} else {
-				log.Info("Deleted outdated service record for %s", service.ServiceName)
-			}
-		}
-	}
-}
Index: /branches/main/array-ingress-controller/task-manager/openshift/apv/go.mod
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/apv/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/apv/go.mod	(nonexistent)
@@ -1,75 +0,0 @@
-module arraynetworks.com/array-ingress-controller/task-manager/openshift/apv
-
-go 1.23.6
-
-replace (
-	arraynetworks.com/array-ingress-controller/configstore => ../../../configstore
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils => ../../../controller/openshift-controller/utils
-	arraynetworks.com/array-ingress-controller/logger => ../../../logger
-	arraynetworks.com/array-ingress-controller/task-manager/task => ../../task
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/configstore v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/task-manager/task v0.0.0-00010101000000-000000000000
-)
-
-require (
-	filippo.io/edwards25519 v1.1.0 // indirect
-	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
-	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
-	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
-	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
-	github.com/go-logr/logr v1.4.2 // indirect
-	github.com/go-openapi/jsonpointer v0.21.0 // indirect
-	github.com/go-openapi/jsonreference v0.20.2 // indirect
-	github.com/go-openapi/swag v0.23.0 // indirect
-	github.com/go-sql-driver/mysql v1.8.1 // indirect
-	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/golang/protobuf v1.5.4 // indirect
-	github.com/google/gnostic-models v0.6.8 // indirect
-	github.com/google/go-cmp v0.6.0 // indirect
-	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/uuid v1.6.0 // indirect
-	github.com/jinzhu/inflection v1.0.0 // indirect
-	github.com/jinzhu/now v1.1.5 // indirect
-	github.com/josharian/intern v1.0.0 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/mattn/go-sqlite3 v1.14.22 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-	github.com/openshift/api v0.0.0-20250228110707-635291d6fdf1 // indirect
-	github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a // indirect
-	github.com/pkg/errors v0.9.1 // indirect
-	github.com/x448/float16 v0.8.4 // indirect
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	golang.org/x/oauth2 v0.23.0 // indirect
-	golang.org/x/sys v0.28.0 // indirect
-	golang.org/x/term v0.27.0 // indirect
-	golang.org/x/text v0.21.0 // indirect
-	golang.org/x/time v0.7.0 // indirect
-	google.golang.org/protobuf v1.35.1 // indirect
-	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
-	gopkg.in/inf.v0 v0.9.1 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-	gorm.io/datatypes v1.2.5 // indirect
-	gorm.io/driver/mysql v1.5.6 // indirect
-	gorm.io/driver/sqlite v1.5.7 // indirect
-	gorm.io/gorm v1.25.12 // indirect
-	k8s.io/api v0.32.2 // indirect
-	k8s.io/apimachinery v0.32.2 // indirect
-	k8s.io/client-go v0.32.2 // indirect
-	k8s.io/klog/v2 v2.130.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
-	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
-	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
-	sigs.k8s.io/yaml v1.4.0 // indirect
-)
Index: /branches/main/array-ingress-controller/task-manager/openshift/apv/go.sum
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/apv/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/apv/go.sum	(nonexistent)
@@ -1,212 +0,0 @@
-filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
-filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
-github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
-github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
-github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
-github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
-github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
-github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
-github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
-github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
-github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
-github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
-github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
-github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
-github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
-github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
-github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
-github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
-github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
-github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
-github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
-github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA=
-github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/openshift/api v0.0.0-20250228110707-635291d6fdf1 h1:EEiIitbWf/D7MXxpHZc7O0zigK2LNLkjQV91kcT0wHM=
-github.com/openshift/api v0.0.0-20250228110707-635291d6fdf1/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a h1:duO3JMrUOqVx50QhzxvDeOYIwTNOB8/EEuRLPyvAMBg=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a/go.mod h1:Qw3ThpzVZ0bfTILpBNYg4LGyjtNxfyCiGh/uDLOOTP8=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
-github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
-golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
-golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
-google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
-gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/datatypes v1.2.5 h1:9UogU3jkydFVW1bIVVeoYsTpLRgwDVW3rHfJG6/Ek9I=
-gorm.io/datatypes v1.2.5/go.mod h1:I5FUdlKpLb5PMqeMQhm30CQ6jXP8Rj89xkTeCSAaAD4=
-gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
-gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
-gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U=
-gorm.io/driver/postgres v1.5.0/go.mod h1:FUZXzO+5Uqg5zzwzv4KK49R8lvGIyscBOqYrtI1Ce9A=
-gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
-gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
-gorm.io/driver/sqlserver v1.5.4 h1:xA+Y1KDNspv79q43bPyjDMUgHoYHLhXYmdFcYPobg8g=
-gorm.io/driver/sqlserver v1.5.4/go.mod h1:+frZ/qYmuna11zHPlh5oc2O6ZA/lS88Keb0XSH1Zh/g=
-gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
-k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw=
-k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y=
-k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
-k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
-k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA=
-k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
Index: /branches/main/array-ingress-controller/task-manager/openshift/apv/health.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/apv/health.go	(revision 12)
+++ /branches/main/array-ingress-controller/task-manager/openshift/apv/health.go	(working copy)
@@ -15,7 +15,7 @@
 
 type healthCheckAnnotStruct struct {
 	Path         *string `json:"path,omitempty"`
-	Type         *string `json:"type,omitempty"`
+	Type         *string `json:"hc_type,omitempty"`
 	Method       *string `json:"method,omitempty"`
 	ExpectedCode *string `json:"expected Code,omitempty"`
 	Interval     *int    `json:"interval,omitempty"`
Index: /branches/main/array-ingress-controller/task-manager/openshift/apv/health_test.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/apv/health_test.go	(revision 12)
+++ /branches/main/array-ingress-controller/task-manager/openshift/apv/health_test.go	(working copy)
@@ -103,7 +103,7 @@
 					Name:      "test-route",
 					Namespace: "default",
 					Annotations: map[string]string{
-						HealthCheckAnnotKey: `{"type": "tcp", "interval": 7, "timeout": 12, "retries": 3}`,
+						HealthCheckAnnotKey: `{"hc_type": "tcp", "interval": 7, "timeout": 12, "retries": 3}`,
 					},
 				},
 				Spec: routev1.RouteSpec{
Index: /branches/main/array-ingress-controller/task-manager/openshift/apv/realservice.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/apv/realservice.go	(revision 12)
+++ /branches/main/array-ingress-controller/task-manager/openshift/apv/realservice.go	(working copy)
@@ -160,7 +160,6 @@
 		err = configStore.Update(&realService, conditions)
 
 		if err != nil {
-			// todo: check how gorm update works
 			log.Errorf("Error updating service record for %s: %v", realService.ServiceName, err)
 		} else {
 			log.Infof("Service record updated successfully for %s", realService.ServiceName)
Index: /branches/main/array-ingress-controller/task-manager/openshift/asf.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/asf.go	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/asf.go	(nonexistent)
@@ -1,21 +0,0 @@
-/*
-	Copyright 2025 Array Networks
- */
- 
-package openshift
-
-import (
-	"context"
-	"fmt"
-
-	"arraynetworks.com/array-ingress-controller/task-manager/task"
-)
-
-// OpenShiftASF implements the ASFHandler interface for OpenShift
-type OpenShiftASF struct{}
-
-func (o *OpenShiftASF) SetupASF(ctx context.Context, task *task.Task) error {
-	// OpenShift-specific ASF setup logic
-	fmt.Println("Setting up ASF on OpenShift")
-	return nil
-}
Index: /branches/main/array-ingress-controller/task-manager/openshift/asf/asf.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/asf/asf.go	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/asf/asf.go	(working copy)
@@ -8,7 +8,7 @@
 	"context"
 	"fmt"
 
-	"arraynetworks.com/array-ingress-controller/logger"
+	"arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils"
 	taskManager "arraynetworks.com/array-ingress-controller/task-manager/task"
 	routev1 "github.com/openshift/api/route/v1"
 )
@@ -20,7 +20,7 @@
 
 func (o *OpenShiftASF) SetupASF(ctx context.Context, task *taskManager.Task) error {
 	// OpenShift-specific ASF setup logic
-	logger.Info("Setting up ASF on OpenShift")
+	log.Info("Setting up ASF on OpenShift")
 
 	taskType, _ := ctx.Value(taskManager.TaskTypeKey{}).(string)
 	resourceType, _ := ctx.Value(taskManager.ResourceTypeKey{}).(string)
@@ -29,7 +29,11 @@
 
 	// Lookup the function in the map and execute it if found
 	if handlerFunc, found := asfFunctionMap[key]; found {
-		handlerFunc(ctx, task)
+		err := handlerFunc(ctx, task)
+		if err != nil {
+			log.Errorf("Error executing handler function for %s: %v", key, err)
+			return err
+		}
 	} else {
 		return fmt.Errorf("No handler found for: %v", key)
 	}
@@ -38,13 +42,21 @@
 
 // Implementations of task handlers
 func handleRouteAdd(ctx context.Context, task *taskManager.Task) error {
-	logger.Info("Handling Route Add with additional context data")
+	log.Info("Handling Route Add with additional context data")
 	var err error
 	//Handle RealService Creation
 	err = addRealService(task)
 	if err != nil {
 		return err
 	}
+	// Check if health check annotation exists
+	// If it does, add health check
+	if utils.AnnotationExists(task.Route[0], HealthCheckAnnotKey) {
+		err = addHealthCheck(task)
+		if err != nil {
+			return err
+		}
+	}
 	return nil
 }
 
@@ -57,17 +69,47 @@
 			return err
 		}
 	}
+	health_in_old, _ := ctx.Value("health_in_old").(string)
+	health_in_new, _ := ctx.Value("health_in_new").(string)
+	health_check_updated, _ := ctx.Value("health_check_updated").(string)
+
+	if health_in_old == "True" && health_in_new == "False" {
+		err := updateDeleteHealthCheck(task)
+		if err != nil {
+			return err
+		}
+	} else if health_in_old == "False" && health_in_new == "True" {
+		err := updateAddHealthCheck(task)
+		if err != nil {
+			return err
+		}
+	} else if health_check_updated == "True" {
+		err := updateAddHealthCheck(task)
+		if err != nil {
+			return err
+		}
+	} else {
+		log.Info("Health check not present in neither old nor new route, no update required")
+	}
 	return nil
 }
 
 func handleRouteDelete(ctx context.Context, task *taskManager.Task) error {
-	logger.Info("Handling Route Delete with additional context data")
+	log.Info("Handling Route Delete with additional context data")
 
 	//Handle RealService Deletion
 	err := deleteRealService(task)
 	if err != nil {
 		return err
 	}
+	// Check if health check annotation exists
+	// If it does, delete health check
+	if utils.AnnotationExists(task.Route[0], HealthCheckAnnotKey) {
+		err = deleteHealthCheck(task)
+		if err != nil {
+			return err
+		}
+	}
 	return nil
 }
 
@@ -81,7 +123,16 @@
 		if err != nil {
 			return err
 		}
+		// Check if health check annotation exists
+		// If it does, add health check
+		if utils.AnnotationExists(route, HealthCheckAnnotKey) {
+			err = addHealthCheck(task)
+			if err != nil {
+				return err
+			}
+		}
 	}
+
 	return nil
 }
 
@@ -94,6 +145,15 @@
 		if err != nil {
 			return err
 		}
+		// Check if health check annotation exists
+		// If it does, delete health check
+		if utils.AnnotationExists(route, HealthCheckAnnotKey) {
+			err = deleteHealthCheck(task)
+			if err != nil {
+				return err
+			}
+		}
 	}
+
 	return nil
 }
Index: /branches/main/array-ingress-controller/task-manager/openshift/asf/asf_test.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/asf/asf_test.go	(revision 12)
+++ /branches/main/array-ingress-controller/task-manager/openshift/asf/asf_test.go	(working copy)
@@ -2,6 +2,7 @@
 
 import (
 	"context"
+	"os"
 	"testing"
 
 	routev1 "github.com/openshift/api/route/v1"
@@ -15,6 +16,39 @@
 	taskManager "arraynetworks.com/array-ingress-controller/task-manager/task"
 )
 
+func TestMain(m *testing.M) {
+	log.Infof("Resetting DB for ASF RealService tests")
+	resetDatabase()
+	os.Exit(m.Run())
+}
+
+func resetDatabase() {
+	dbPath := "test_db.db"
+	_ = os.Remove(dbPath)
+
+	file, err := os.Create(dbPath)
+	if err != nil {
+		log.Errorf("Failed to create DB file: %v", err)
+		return
+	}
+	file.Close()
+
+	if err := os.Chmod(dbPath, 0644); err != nil {
+		log.Errorf("Failed to set DB permissions: %v", err)
+		return
+	}
+
+	db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
+	if err != nil {
+		log.Errorf("Failed to open DB: %v", err)
+		return
+	}
+
+	if err := db.AutoMigrate(&configstore.AsfRealService{}); err != nil {
+		log.Errorf("Failed to migrate schema: %v", err)
+	}
+}
+
 func seedASFRealService(t *testing.T) {
 	db, err := gorm.Open(sqlite.Open("test_db.db"), &gorm.Config{})
 	if err != nil {
@@ -27,9 +61,6 @@
 		ServiceType: "HTTP",
 		IPv4:        "10.0.0.1",
 		Port:        8080,
-		CheckType:   "PING",
-		HCUp:        3,
-		HCDown:      2,
 		Status:      StatusWaiting,
 		CurrentOp:   OperationCreate,
 	}).Error
@@ -46,7 +77,7 @@
 					Name:      "asf-route",
 					Namespace: "default",
 					Annotations: map[string]string{
-						AsfRealServiceAnnotKey: `{"service_type": "HTTP", "check_type": "PING", "hc_up": 3, "hc_down": 2}`,
+						HealthCheckAnnotKey: `{"hc_type": "http", "hc_up": 4, "hc_down": 2}`,
 					},
 				},
 				Spec: routev1.RouteSpec{
Index: /branches/main/array-ingress-controller/task-manager/openshift/asf/const.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/asf/const.go	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/asf/const.go	(working copy)
@@ -9,7 +9,6 @@
 	StatusInProgress = "INPROGRESS"
 	StatusCompleted  = "COMPLETED"
 	StatusFailed     = "FAILED"
-	StatusDeleted    = "DELETED"
 
 	// Operation types
 	OperationCreate = "CREATE"
@@ -18,11 +17,13 @@
 
 	//Default values
 	DefaultServiceType = "http"
-	DefaultHcUp   = 3
-	DefaultHcDown = 3
+	DefaultCheckType   = "tcp" // this is default value set at ASF's end when no check type is passed
+	DefaultHcUp        = 3     // this is default value set at ASF's end when no hc up count is passed
+	DefaultHcDown      = 3     // this is default value set at ASF's end when no hc down count is passed
 
-	AsfRealServiceAnnotKey = "arraynetworks.com/asfrealservice"
-	DefaultCheckType       = "http"
+	// annotations keys expected to be defined in route.yaml etc.
+	HealthCheckAnnotKey    = "asf.arraynetworks.com/healthcheck"
+	ASFRealServiceAnnotKey = "asf.arraynetworks.com/asf-realservice"
 )
 
 // Function map to handle different task/resource combinations
Index: /branches/main/array-ingress-controller/task-manager/openshift/asf/go.mod
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/asf/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/asf/go.mod	(nonexistent)
@@ -1,75 +0,0 @@
-module arraynetworks.com/array-ingress-controller/task-manager/openshift/asf
-
-go 1.23.6
-
-replace (
-	arraynetworks.com/array-ingress-controller/configstore => ../../../configstore
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils => ../../../controller/openshift-controller/utils
-	arraynetworks.com/array-ingress-controller/logger => ../../../logger
-	arraynetworks.com/array-ingress-controller/task-manager/task => ../../task
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/configstore v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/task-manager/task v0.0.0-00010101000000-000000000000
-	github.com/openshift/api v0.0.0-20250228110707-635291d6fdf1
-)
-
-require (
-	filippo.io/edwards25519 v1.1.0 // indirect
-	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
-	github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
-	github.com/emicklei/go-restful/v3 v3.11.0 // indirect
-	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
-	github.com/go-logr/logr v1.4.2 // indirect
-	github.com/go-openapi/jsonpointer v0.21.0 // indirect
-	github.com/go-openapi/jsonreference v0.20.2 // indirect
-	github.com/go-openapi/swag v0.23.0 // indirect
-	github.com/go-sql-driver/mysql v1.8.1 // indirect
-	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/golang/protobuf v1.5.4 // indirect
-	github.com/google/gnostic-models v0.6.8 // indirect
-	github.com/google/go-cmp v0.6.0 // indirect
-	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/uuid v1.6.0 // indirect
-	github.com/jinzhu/inflection v1.0.0 // indirect
-	github.com/jinzhu/now v1.1.5 // indirect
-	github.com/josharian/intern v1.0.0 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/mailru/easyjson v0.7.7 // indirect
-	github.com/mattn/go-sqlite3 v1.14.22 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-	github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a // indirect
-	github.com/pkg/errors v0.9.1 // indirect
-	github.com/x448/float16 v0.8.4 // indirect
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	golang.org/x/net v0.33.0 // indirect
-	golang.org/x/oauth2 v0.23.0 // indirect
-	golang.org/x/sys v0.28.0 // indirect
-	golang.org/x/term v0.27.0 // indirect
-	golang.org/x/text v0.21.0 // indirect
-	golang.org/x/time v0.7.0 // indirect
-	google.golang.org/protobuf v1.35.1 // indirect
-	gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
-	gopkg.in/inf.v0 v0.9.1 // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-	gopkg.in/yaml.v3 v3.0.1 // indirect
-	gorm.io/datatypes v1.2.5 // indirect
-	gorm.io/driver/mysql v1.5.6 // indirect
-	gorm.io/driver/sqlite v1.5.7 // indirect
-	gorm.io/gorm v1.25.12 // indirect
-	k8s.io/api v0.32.2 // indirect
-	k8s.io/apimachinery v0.32.2 // indirect
-	k8s.io/client-go v0.32.2 // indirect
-	k8s.io/klog/v2 v2.130.1 // indirect
-	k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
-	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
-	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
-	sigs.k8s.io/yaml v1.4.0 // indirect
-)
Index: /branches/main/array-ingress-controller/task-manager/openshift/asf/go.sum
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/asf/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/asf/go.sum	(nonexistent)
@@ -1,212 +0,0 @@
-filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
-filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
-github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
-github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
-github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
-github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
-github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
-github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
-github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
-github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
-github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
-github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
-github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
-github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
-github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
-github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
-github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
-github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
-github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
-github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
-github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
-github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
-github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA=
-github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
-github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/openshift/api v0.0.0-20250228110707-635291d6fdf1 h1:EEiIitbWf/D7MXxpHZc7O0zigK2LNLkjQV91kcT0wHM=
-github.com/openshift/api v0.0.0-20250228110707-635291d6fdf1/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a h1:duO3JMrUOqVx50QhzxvDeOYIwTNOB8/EEuRLPyvAMBg=
-github.com/openshift/client-go v0.0.0-20250131180035-f7ec47e2d87a/go.mod h1:Qw3ThpzVZ0bfTILpBNYg4LGyjtNxfyCiGh/uDLOOTP8=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
-github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
-golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
-golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q=
-golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
-golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA=
-google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
-gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/datatypes v1.2.5 h1:9UogU3jkydFVW1bIVVeoYsTpLRgwDVW3rHfJG6/Ek9I=
-gorm.io/datatypes v1.2.5/go.mod h1:I5FUdlKpLb5PMqeMQhm30CQ6jXP8Rj89xkTeCSAaAD4=
-gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
-gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
-gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U=
-gorm.io/driver/postgres v1.5.0/go.mod h1:FUZXzO+5Uqg5zzwzv4KK49R8lvGIyscBOqYrtI1Ce9A=
-gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
-gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
-gorm.io/driver/sqlserver v1.5.4 h1:xA+Y1KDNspv79q43bPyjDMUgHoYHLhXYmdFcYPobg8g=
-gorm.io/driver/sqlserver v1.5.4/go.mod h1:+frZ/qYmuna11zHPlh5oc2O6ZA/lS88Keb0XSH1Zh/g=
-gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
-k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw=
-k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y=
-k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
-k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
-k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA=
-k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y=
-k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
Index: /branches/main/array-ingress-controller/task-manager/openshift/asf/health.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/asf/health.go	(nonexistent)
+++ /branches/main/array-ingress-controller/task-manager/openshift/asf/health.go	(working copy)
@@ -0,0 +1,255 @@
+/*
+	Copyright 2025 Array Networks
+*/
+
+package asf
+
+import (
+	"encoding/json"
+	"fmt"
+
+	"arraynetworks.com/array-ingress-controller/configstore"
+	"arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils"
+	taskManager "arraynetworks.com/array-ingress-controller/task-manager/task"
+)
+
+type healthCheckAnnotStruct struct {
+	CheckType *string `json:"hc_type,omitempty"`
+	HCUp      *int    `json:"hc_up,omitempty"`
+	HCDown    *int    `json:"hc_down,omitempty"`
+}
+
+func addHealthCheck(task *taskManager.Task) error {
+	configStore, err := configstore.Get()
+	if err != nil {
+		log.Errorf("Error initializing config store: %v", err)
+		return err
+	}
+
+	annots, _ := utils.FetchJSONStringFromAnnotation(task.Route[0], HealthCheckAnnotKey)
+
+	// Unmarshal the JSON string into a HealthCheck struct
+	var healthCheckAnnot healthCheckAnnotStruct
+	err = json.Unmarshal([]byte(annots), &healthCheckAnnot)
+	if err != nil {
+		return fmt.Errorf("error unmarshaling JSON from annotation: %v", err)
+	}
+	if task.EndPts == nil || len(task.EndPts) == 0 || task.EndPts[0].Subsets == nil {
+		log.Warnf("No endpoint subsets found for route %s", task.Route[0].Name)
+		return nil
+	}
+
+	var serviceType string
+	// Check if the annotation exists and parse service_type from it
+	if annVal, ok := task.Route[0].Annotations[ASFRealServiceAnnotKey]; ok {
+		var parsed map[string]string
+		if err := json.Unmarshal([]byte(annVal), &parsed); err != nil {
+			log.Warnf("Failed to parse annotation %s: %v", ASFRealServiceAnnotKey, err)
+		} else {
+			serviceType = parsed["service_type"]
+		}
+	}
+
+	// Fallback to inferred protocol if not provided explicitly
+	if serviceType == "" {
+		serviceType = utils.GetRouteProtocol(task.Route[0])
+	}
+
+	// Create a service entry for each endpoint address
+	for _, subset := range task.EndPts[0].Subsets {
+		for _, address := range subset.Addresses {
+
+			realServiceName := fmt.Sprintf("%s_%s_%s", task.Route[0].Name, task.Route[0].Namespace, address.IP) // using format - routename_namespace_endptIP
+
+			// Retrieve existing healthcheck records
+			var healthchecks []configstore.AsfHealthCheck
+			if err = configStore.ReadByRealServiceName(realServiceName, &healthchecks); err != nil {
+				log.Errorf("Error retrieving HealthCheck records for service %s: %v", realServiceName, err)
+				return err
+			}
+			if len(healthchecks) > 0 {
+				log.Infof("HealthCheck for route: %s and realservice: %s already present with name %s", task.Route[0].Name, realServiceName, realServiceName)
+				return nil
+			}
+
+			healthCheck := configstore.AsfHealthCheck{
+				IngressName: task.Route[0].Name,
+				ServiceName: realServiceName,
+				ServiceType: serviceType,
+				IPv4:        address.IP,
+				Port:        int(task.Route[0].Spec.Port.TargetPort.IntValue()),
+				CheckType:   getStringValue(healthCheckAnnot.CheckType, DefaultCheckType),
+				HCUp:        getIntValue(healthCheckAnnot.HCUp, DefaultHcUp),
+				HCDown:      getIntValue(healthCheckAnnot.HCDown, DefaultHcDown),
+				Status:      StatusWaiting,
+				CurrentOp:   OperationCreate,
+			}
+			if err := configStore.Create(&healthCheck); err != nil {
+				log.Errorf("Error creating health check record for pod %s: %v", realServiceName, err)
+				return err
+			}
+			log.Infof("Health check record created successfully for pod %s", realServiceName)
+		}
+	}
+	return nil
+}
+
+func updateAddHealthCheck(task *taskManager.Task) error {
+	configStore, err := configstore.Get()
+	if err != nil {
+		log.Errorf("Error initializing config store: %v", err)
+		return err
+	}
+
+	annots, exists := utils.FetchJSONStringFromAnnotation(task.Route[0], HealthCheckAnnotKey)
+
+	if !exists {
+		return nil
+	}
+
+	// Unmarshal the JSON string into a HealthCheck struct
+	var healthCheckAnnot healthCheckAnnotStruct
+	err = json.Unmarshal([]byte(annots), &healthCheckAnnot)
+	if err != nil {
+		return fmt.Errorf("error unmarshaling JSON from annotation: %v", err)
+	}
+
+	// Retrieve existing service records
+	var realServices []configstore.AsfRealService
+	if err = configStore.ReadByRouteName(task.Route[0].Name, &realServices); err != nil {
+		log.Errorf("Error retrieving service records for Route %s: %v", task.Route[0].Name, err)
+		return err
+	}
+
+	// Set status to delete for each service record
+	for _, realService := range realServices {
+		// TODO: Update only the fields which are changed
+		healthCheck := configstore.AsfHealthCheck{
+			IngressName: realService.IngressName,
+			ServiceName: realService.ServiceName,
+			ServiceType: realService.ServiceType,
+			IPv4:        realService.IPv4,
+			Port:        realService.Port,
+			CheckType:   getStringValue(healthCheckAnnot.CheckType, DefaultCheckType),
+			HCUp:        getIntValue(healthCheckAnnot.HCUp, DefaultHcUp),
+			HCDown:      getIntValue(healthCheckAnnot.HCDown, DefaultHcDown),
+			Status:      StatusWaiting,
+			CurrentOp:   OperationUpdate,
+		}
+		conditions := map[string]interface{}{
+			"service_name": healthCheck.ServiceName,
+		}
+
+		if err := configStore.Update(&healthCheck, conditions); err != nil {
+			log.Errorf("Error updating health check record for realservice %s: %v", realService.ServiceName, err)
+			return err
+		}
+
+		log.Infof("Health check record updated successfully realservice %s", realService.ServiceName)
+
+	}
+
+	return nil
+
+}
+
+func updateDeleteHealthCheck(task *taskManager.Task) error {
+	configStore, err := configstore.Get()
+	if err != nil {
+		log.Errorf("Error initializing Configstore: %v", err)
+		return err
+	}
+
+	// Retrieve existing service records
+	var realServices []configstore.AsfRealService
+	if err = configStore.ReadByRouteName(task.Route[0].Name, &realServices); err != nil {
+		log.Errorf("Error retrieving service records for Route %s: %v", task.Route[0].Name, err)
+		return err
+	}
+
+	// Reset health check values to defaults
+	for _, realService := range realServices {
+		healthCheck := configstore.AsfHealthCheck{
+			IngressName: realService.IngressName,
+			ServiceName: realService.ServiceName,
+			ServiceType: realService.ServiceType,
+			IPv4:        realService.IPv4,
+			Port:        realService.Port,
+			CheckType:   DefaultCheckType,
+			HCUp:        DefaultHcUp,
+			HCDown:      DefaultHcDown,
+			Status:      StatusWaiting,
+			CurrentOp:   OperationDelete,
+		}
+		conditions := map[string]interface{}{
+			"service_name": healthCheck.ServiceName,
+		}
+
+		if err := configStore.Update(&healthCheck, conditions); err != nil {
+			log.Errorf("Error updating health check record for realservice %s: %v", realService.ServiceName, err)
+			return err
+		}
+
+		log.Infof("Health check record updated successfully for realservice %s", realService.ServiceName)
+
+	}
+
+	return nil
+}
+
+func deleteHealthCheck(task *taskManager.Task) error {
+	// Initialize the config store
+	configStore, err := configstore.Get()
+	if err != nil {
+		log.Errorf("Error initializing ConfigStore: %v", err)
+		return err
+	}
+
+	if task.EndPts == nil || len(task.EndPts) == 0 || task.EndPts[0].Subsets == nil {
+		log.Warnf("No endpoint subsets found for route %s", task.Route[0].Name)
+		return nil
+	}
+
+	for _, subset := range task.EndPts[0].Subsets {
+		for _, address := range subset.Addresses {
+			realServiceName := fmt.Sprintf("%s_%s_%s", task.Route[0].Name, task.Route[0].Namespace, address.IP) // routename_namespace_endptIP
+			// Retrieve existing health check records
+			var healthChecks []configstore.AsfHealthCheck
+			if err = configStore.ReadByRealServiceName(realServiceName, &healthChecks); err != nil {
+				log.Errorf("Error retrieving health check records for service %s: %v", realServiceName, err)
+				return err
+			}
+
+			if len(healthChecks) == 0 {
+				log.Infof("HealthCheck for route: %s and realservice: %s does not exists", task.Route[0].Name, realServiceName)
+				continue
+			}
+			healthCheck := healthChecks[0]
+			conditions := map[string]interface{}{
+				"service_name": healthCheck.ServiceName,
+			}
+			// If health check creation failed, delete it completely
+			if healthCheck.Status == StatusFailed && healthCheck.CurrentOp == OperationCreate || healthCheck.Status == StatusWaiting && healthCheck.CurrentOp == OperationCreate {
+				if err := configStore.Delete(&healthCheck, conditions); err != nil {
+					log.Errorf("Error deleting real service %s: %v", healthCheck.ServiceName, err)
+					return err
+				}
+				log.Infof("Real service %s deleted successfully", healthCheck.ServiceName)
+				continue
+			}
+			// Otherwise, mark health check for deletion
+			healthCheck.Status = StatusWaiting
+			healthCheck.CurrentOp = OperationDelete
+
+			if err = configStore.Update(&healthCheck, conditions); err != nil {
+				log.Errorf("Error updating healthcheck record for %s to status 'delete': %v", realServiceName, err)
+				return err
+			} else {
+				log.Infof("HealthCheck record status updated to 'delete' for %s", realServiceName)
+			}
+		}
+	}
+
+	return nil
+
+}
Index: /branches/main/array-ingress-controller/task-manager/openshift/asf/health_test.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/asf/health_test.go	(nonexistent)
+++ /branches/main/array-ingress-controller/task-manager/openshift/asf/health_test.go	(working copy)
@@ -0,0 +1,116 @@
+package asf
+
+import (
+	"testing"
+
+	routev1 "github.com/openshift/api/route/v1"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+	"k8s.io/apimachinery/pkg/util/intstr"
+
+	taskManager "arraynetworks.com/array-ingress-controller/task-manager/task"
+)
+
+func getHealthTestTask() *taskManager.Task {
+	return &taskManager.Task{
+		Route: []*routev1.Route{
+			{
+				ObjectMeta: metav1.ObjectMeta{
+					Name:      "asf-health",
+					Namespace: "default",
+					Annotations: map[string]string{
+						HealthCheckAnnotKey: `{"hc_type": "http", "hc_up": 2, "hc_down": 4}`,
+					},
+				},
+				Spec: routev1.RouteSpec{
+					Port: &routev1.RoutePort{
+						TargetPort: intstr.FromInt(8080),
+					},
+				},
+			},
+		},
+		EndPts: []*corev1.Endpoints{
+			{
+				Subsets: []corev1.EndpointSubset{
+					{
+						Addresses: []corev1.EndpointAddress{
+							{IP: "192.168.1.10"},
+						},
+					},
+				},
+			},
+		},
+	}
+}
+
+func Test_addHealthCheck(t *testing.T) {
+	task := getHealthTestTask()
+
+	// Add required real service first
+	err := addRealService(task)
+	if err != nil {
+		t.Fatalf("realService seed failed: %v", err)
+	}
+
+	err = addHealthCheck(task)
+	if err != nil {
+		t.Errorf("addHealthCheck failed: %v", err)
+	}
+}
+
+func Test_updateAddHealthCheck(t *testing.T) {
+	task := getHealthTestTask()
+
+	// Add real service & health check
+	if err := addRealService(task); err != nil {
+		t.Fatalf("realService seed failed: %v", err)
+	}
+	if err := addHealthCheck(task); err != nil {
+		t.Fatalf("initial health check seed failed: %v", err)
+	}
+
+	// Update route annotation
+	task.Route[0].Annotations[HealthCheckAnnotKey] = `{"hc_type": "tcp", "hc_up": 3, "hc_down": 2}`
+
+	err := updateAddHealthCheck(task)
+	if err != nil {
+		t.Errorf("updateAddHealthCheck failed: %v", err)
+	}
+}
+
+func Test_updateDeleteHealthCheck(t *testing.T) {
+	task := getHealthTestTask()
+
+	// Seed data
+	if err := addRealService(task); err != nil {
+		t.Fatalf("realService seed failed: %v", err)
+	}
+	if err := addHealthCheck(task); err != nil {
+		t.Fatalf("healthCheck seed failed: %v", err)
+	}
+
+	// Simulate annotation removal
+	task.Route[0].Annotations = map[string]string{}
+
+	err := updateDeleteHealthCheck(task)
+	if err != nil {
+		t.Errorf("updateDeleteHealthCheck failed: %v", err)
+	}
+}
+
+func Test_deleteHealthCheck(t *testing.T) {
+	task := getHealthTestTask()
+
+	// Seed data
+	if err := addRealService(task); err != nil {
+		t.Fatalf("realService seed failed: %v", err)
+	}
+	if err := addHealthCheck(task); err != nil {
+		t.Fatalf("healthCheck seed failed: %v", err)
+	}
+
+	err := deleteHealthCheck(task)
+	if err != nil {
+		t.Errorf("deleteHealthCheck failed: %v", err)
+	}
+}
Index: /branches/main/array-ingress-controller/task-manager/openshift/asf/init.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/asf/init.go	(nonexistent)
+++ /branches/main/array-ingress-controller/task-manager/openshift/asf/init.go	(working copy)
@@ -0,0 +1,17 @@
+/*
+	Copyright 2025 Array Networks
+*/
+
+package asf
+
+import (
+	"arraynetworks.com/array-ingress-controller/logger"
+)
+
+var (
+	log logger.Logger
+)
+
+func init() {
+	log = logger.GetLogger()
+}
Index: /branches/main/array-ingress-controller/task-manager/openshift/asf/realservice.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/asf/realservice.go	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/asf/realservice.go	(working copy)
@@ -6,38 +6,37 @@
 
 	"arraynetworks.com/array-ingress-controller/configstore"
 	"arraynetworks.com/array-ingress-controller/controller/openshift-controller/utils"
-	"arraynetworks.com/array-ingress-controller/logger"
 	taskManager "arraynetworks.com/array-ingress-controller/task-manager/task"
 )
 
-type AsfRealServiceAnnot struct {
-	ServiceType *string `json:"service_type,omitempty"`
-	CheckType   *string `json:"check_type,omitempty"`
-	HCUp        *int    `json:"hc_up,omitempty"`
-	HCDown      *int    `json:"hc_down,omitempty"`
-}
-
 func addRealService(task *taskManager.Task) error {
-	logger.Info("Handling Route Add with additional context data")
+	log.Info("Handling Route Add with additional context data")
 
 	// Initialize the config store
 	configStore, err := configstore.Get()
 	if err != nil {
-		logger.Error("Error initializing config store: %v", err)
+		log.Error("Error initializing config store: %v", err)
 		return err
 	}
+	if task.EndPts == nil || len(task.EndPts) == 0 || task.EndPts[0].Subsets == nil {
+		log.Warnf("No endpoint subsets found for route %s", task.Route[0].Name)
+		return nil
+	}
 
-	annots, exists := utils.FetchJSONStringFromAnnotation(task.Route[0], AsfRealServiceAnnotKey)
-
-	if !exists {
-		logger.Warnf("No ASF annotations found for route %s", task.Route[0].Name)
+	var serviceType string
+	// Check if the annotation exists and parse service_type from it
+	if annVal, ok := task.Route[0].Annotations[ASFRealServiceAnnotKey]; ok {
+		var parsed map[string]string
+		if err := json.Unmarshal([]byte(annVal), &parsed); err != nil {
+			log.Warnf("Failed to parse annotation %s: %v", ASFRealServiceAnnotKey, err)
+		} else {
+			serviceType = parsed["service_type"]
+		}
 	}
 
-	// Unmarshal the JSON string into a HealthCheck struct
-	var asfRealServAnnot AsfRealServiceAnnot
-	err = json.Unmarshal([]byte(annots), &asfRealServAnnot)
-	if err != nil {
-		return fmt.Errorf("error unmarshaling JSON from annotation: %v", err)
+	// Fallback to inferred protocol if not provided explicitly
+	if serviceType == "" {
+		serviceType = utils.GetRouteProtocol(task.Route[0])
 	}
 
 	// Create a service entry for each endpoint address
@@ -46,23 +45,32 @@
 
 			realServiceName := fmt.Sprintf("%s_%s_%s", task.Route[0].Name, task.Route[0].Namespace, address.IP) // using format - routename_namespace_endptIP
 
+			// Retrieve existing service records
+			var realServices []configstore.AsfRealService
+			if err = configStore.ReadByRealServiceName(realServiceName, &realServices); err != nil {
+				log.Errorf("Error retrieving service records for route %s: %v", task.Route[0].Name, err)
+				return err
+			}
+
+			if len(realServices) > 0 {
+				log.Infof("RealService for route: %s and ip: %s already present with name %s", task.Route[0].Name, address.IP, realServiceName)
+				return nil
+			}
+
 			realService := configstore.AsfRealService{
 				IngressName: task.Route[0].Name,
 				ServiceName: realServiceName,
-				ServiceType: getStringValue(asfRealServAnnot.ServiceType, DefaultServiceType),
+				ServiceType: serviceType,
 				IPv4:        address.IP,
 				Port:        int(task.Route[0].Spec.Port.TargetPort.IntValue()),
-				CheckType:   getStringValue(asfRealServAnnot.CheckType, DefaultCheckType),
-				HCUp:        getIntValue(asfRealServAnnot.HCUp, DefaultHcUp),
-				HCDown:      getIntValue(asfRealServAnnot.HCDown, DefaultHcDown),
 				Status:      StatusWaiting,
 				CurrentOp:   OperationCreate,
 			}
-			if err = configStore.Create(realService); err != nil {
-				logger.Errorf("Error creating service record for pod %s: %v", realServiceName, err)
+			if err = configStore.Create(&realService); err != nil {
+				log.Errorf("Error creating service record for pod %s: %v", realServiceName, err)
 				return err
 			} else {
-				logger.Infof("Service record created successfully for pod %s", realServiceName)
+				log.Infof("Service record created successfully for pod %s", realServiceName)
 			}
 		}
 	}
@@ -73,31 +81,62 @@
 	// Initialize the config store
 	configStore, err := configstore.Get()
 	if err != nil {
-		logger.Errorf("Error initializing config store: %v", err)
+		log.Errorf("Error initializing config store: %v", err)
 		return err
 	}
 	// Retrieve existing service records
 	var realServices []configstore.AsfRealService
 	if err = configStore.ReadByRouteName(task.Route[0].Name, &realServices); err != nil {
-		logger.Errorf("Error retrieving service records for route %s: %v", task.Route[0].Name, err)
+		log.Errorf("Error retrieving service records for route %s: %v", task.Route[0].Name, err)
 		return err
 	}
+	if task.EndPts == nil || len(task.EndPts) == 0 || task.EndPts[0].Subsets == nil {
+		log.Warnf("No endpoint subsets found for route %s", task.Route[0].Name)
+		return nil
+	}
 	// Set status to delete for each service record
-	for _, realService := range realServices {
-		realService.Status = StatusDeleted
+	for _, subset := range task.EndPts[0].Subsets {
+		for _, address := range subset.Addresses {
 
-		conditions := map[string]interface{}{
-			"service_name": realService.ServiceName,
-			// Add more conditions as needed
-		}
+			realServiceName := fmt.Sprintf("%s_%s_%s", task.Route[0].Name, task.Route[0].Namespace, address.IP) // using format - routename_namespace_endptIP
 
-		if err = configStore.Update(&realService, conditions); err != nil {
-			logger.Errorf("Error updating service record for %s to status '%s': %v", realService.ServiceName, StatusDeleted, err)
-			return err
-		} else {
-			logger.Infof("Service record status updated to '%s' for %s", StatusDeleted, realService.ServiceName)
+			// Retrieve existing service records
+			var realServices []configstore.AsfRealService
+			if err = configStore.ReadByRealServiceName(realServiceName, &realServices); err != nil {
+				log.Errorf("Error retrieving service records for route %s: %v", task.Route[0].Name, err)
+				return err
+			}
+			// Check if there is atleast one realservice
+			if len(realServices) == 0 {
+				log.Warnf("No real service found for %s", realServiceName)
+				continue
+			}
+			realService := realServices[0]
+			conditions := map[string]interface{}{
+				"service_name": realServiceName,
+			}
+			// If Realservice is in failed state and current operation is create, delete the record
+			if realService.Status == StatusFailed && realService.CurrentOp == OperationCreate || realService.Status == StatusWaiting && realService.CurrentOp == OperationCreate {
+				if err := configStore.Delete(&realService, conditions); err != nil {
+					log.Errorf("Error deleting real service %s: %v", realServiceName, err)
+					return err
+				}
+				log.Infof("Real service %s deleted successfully", realServiceName)
+				continue
+			}
+
+			realService.Status = StatusWaiting
+			realService.CurrentOp = OperationDelete
+
+			if err = configStore.Update(&realService, conditions); err != nil {
+				log.Errorf("Error updating service record for %s to status 'delete': %v", realService.ServiceName, err)
+				return err
+			} else {
+				log.Infof("Service record status updated to 'delete' for %s", realService.ServiceName)
+			}
 		}
 	}
+
 	return nil
 }
 
@@ -105,58 +144,36 @@
 	// Initialize the config store
 	configStore, err := configstore.Get()
 	if err != nil {
-		logger.Errorf("Error initializing config store: %v", err)
+		log.Errorf("Error initializing config store: %v", err)
 		return err
 	}
 
-	annots, exists := utils.FetchJSONStringFromAnnotation(task.Route[0], AsfRealServiceAnnotKey)
-
-	if !exists {
-		logger.Warnf("No ASF annotations found for route %s", task.Route[0].Name)
-	}
-
-	// Unmarshal the JSON string into a HealthCheck struct
-	var asfRealServAnnot AsfRealServiceAnnot
-	err = json.Unmarshal([]byte(annots), &asfRealServAnnot)
-	if err != nil {
-		return fmt.Errorf("error unmarshaling JSON from annotation: %v", err)
-	}
-
 	// Retrieve existing service records
 	var realServices []configstore.AsfRealService
 	if err = configStore.ReadByRouteName(task.Route[0].Name, &realServices); err != nil {
-		logger.Errorf("Error retrieving service records for route %s: %v", task.Route[0].Name, err)
+		log.Errorf("Error retrieving service records for route %s: %v", task.Route[0].Name, err)
 		return err
 	}
 
 	// Update service records
 	for _, realService := range realServices {
-		// TODO: Update only the fields which are changed
-		realService := configstore.AsfRealService{
-			IngressName: task.Route[0].Name,
-			ServiceName: realService.ServiceName,
-			ServiceType: getStringValue(asfRealServAnnot.ServiceType, DefaultServiceType),
-			IPv4:        realService.IPv4,
-			Port:        int(task.Route[0].Spec.Port.TargetPort.IntValue()),
-			CheckType:   getStringValue(asfRealServAnnot.CheckType, DefaultCheckType),
-			HCUp:        getIntValue(asfRealServAnnot.HCUp, DefaultHcUp),
-			HCDown:      getIntValue(asfRealServAnnot.HCDown, DefaultHcDown),
-			Status:      StatusWaiting,
-			CurrentOp:   OperationUpdate,
-		}
+		realService.Status = StatusWaiting
+		realService.CurrentOp = OperationUpdate
+		realService.Port = int(task.Route[0].Spec.Port.TargetPort.IntValue())
 
 		conditions := map[string]interface{}{
 			"service_name": realService.ServiceName,
-			// Add more conditions as needed
 		}
 
 		err = configStore.Update(&realService, conditions)
+
 		if err != nil {
-			logger.Errorf("Error updating service record for %s: %v", realService.ServiceName, err)
+			log.Errorf("Error updating service record for %s: %v", realService.ServiceName, err)
 		} else {
-			logger.Infof("Service record updated successfully for %s", realService.ServiceName)
+			log.Infof("Service record updated successfully for %s", realService.ServiceName)
 		}
 	}
-	return nil
 
+	return nil
+	
 }
Index: /branches/main/array-ingress-controller/task-manager/openshift/asf/realservice_test.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/asf/realservice_test.go	(revision 12)
+++ /branches/main/array-ingress-controller/task-manager/openshift/asf/realservice_test.go	(working copy)
@@ -1,56 +1,16 @@
 package asf
 
 import (
-	"os"
 	"testing"
 
 	routev1 "github.com/openshift/api/route/v1"
-	"gorm.io/driver/sqlite"
-	"gorm.io/gorm"
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/intstr"
 
-	"arraynetworks.com/array-ingress-controller/configstore"
-	"arraynetworks.com/array-ingress-controller/logger"
 	taskManager "arraynetworks.com/array-ingress-controller/task-manager/task"
 )
 
-var log = logger.GetLogger()
-
-func TestMain(m *testing.M) {
-	log.Infof("Resetting DB for ASF RealService tests")
-	resetDatabase()
-	os.Exit(m.Run())
-}
-
-func resetDatabase() {
-	dbPath := "test_db.db"
-	_ = os.Remove(dbPath)
-
-	file, err := os.Create(dbPath)
-	if err != nil {
-		log.Errorf("Failed to create DB file: %v", err)
-		return
-	}
-	file.Close()
-
-	if err := os.Chmod(dbPath, 0644); err != nil {
-		log.Errorf("Failed to set DB permissions: %v", err)
-		return
-	}
-
-	db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
-	if err != nil {
-		log.Errorf("Failed to open DB: %v", err)
-		return
-	}
-
-	if err := db.AutoMigrate(&configstore.AsfRealService{}); err != nil {
-		log.Errorf("Failed to migrate schema: %v", err)
-	}
-}
-
 func getTestTask() *taskManager.Task {
 	return &taskManager.Task{
 		Route: []*routev1.Route{
@@ -59,7 +19,7 @@
 					Name:      "asf-route",
 					Namespace: "default",
 					Annotations: map[string]string{
-						AsfRealServiceAnnotKey: `{"service_type": "HTTP", "check_type": "PING", "hc_up": 3, "hc_down": 2}`,
+						HealthCheckAnnotKey: `{"hc_type": "http", "hc_up": 2, "hc_down": 4}`,
 					},
 				},
 				Spec: routev1.RouteSpec{
@@ -100,7 +60,7 @@
 	}
 
 	// Then update
-	task.Route[0].Annotations[AsfRealServiceAnnotKey] = `{"service_type": "HTTPS", "check_type": "TCP", "hc_up": 5, "hc_down": 1}`
+	task.Route[0].Annotations[HealthCheckAnnotKey] = `{"hc_type": "tcp", "hc_up": 5, "hc_down": 1}`
 	task.Route[0].Spec.Port.TargetPort = intstr.FromInt(9090)
 
 	if err := updateRealService(task); err != nil {
Index: /branches/main/array-ingress-controller/task-manager/openshift/const.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/const.go	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/const.go	(nonexistent)
@@ -1,31 +0,0 @@
-package openshift
-
-// Function map to handle different task/resource combinations
-var apvFunctionMap = map[string]SetUpFunc{
-	"ROUTE_ADD":      handleRouteAdd,
-	"ROUTE_UPDATE":   handleRouteUpdate,
-	"ROUTE_DELETE":   handleRouteDelete,
-	"POD_ADD":        handlePodAdd,
-	"POD_DELETE":     handlePodDelete,
-	"SERVICE_UPDATE": handleServiceUpdate,
-}
-
-// Task statuses
-const (
-	StatusWaiting    = "WAITING"
-	StatusInProgress = "INPROGRESS"
-	StatusCompleted  = "COMPLETED"
-	StatusFailed     = "FAILED"
-)
-
-// Operation types
-const (
-	OperationCreate = "CREATE"
-	OperationUpdate = "UPDATE"
-	OperationDelete = "DELETE"
-)
-
-// Default values
-const (
-	DefaultMaxConn = 10
-)
Index: /branches/main/array-ingress-controller/task-manager/openshift/go.mod
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/go.mod	(nonexistent)
@@ -1,47 +0,0 @@
-module arraynetworks.com/array-ingress-controller/task-manager/openshift
-
-go 1.23.6
-
-replace (
-	arraynetworks.com/array-ingress-controller/configstore => ../../configstore
-	arraynetworks.com/array-ingress-controller/logger => ../../../logger
-	arraynetworks.com/array-ingress-controller/task-manager/task => ../task
-)
-
-require (
-	arraynetworks.com/array-ingress-controller/configstore v0.0.0-00010101000000-000000000000
-	arraynetworks.com/array-ingress-controller/task-manager/task v0.0.0-00010101000000-000000000000
-)
-
-require (
-	filippo.io/edwards25519 v1.1.0 // indirect
-	github.com/cenkalti/backoff/v4 v4.3.0 // indirect
-	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
-	github.com/go-logr/logr v1.4.2 // indirect
-	github.com/go-sql-driver/mysql v1.8.1 // indirect
-	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/google/uuid v1.6.0 // indirect
-	github.com/jinzhu/inflection v1.0.0 // indirect
-	github.com/jinzhu/now v1.1.5 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/mattn/go-sqlite3 v1.14.22 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/openshift/api v0.0.0-20250220025300-cfbda0b31000 // indirect
-	github.com/x448/float16 v0.8.4 // indirect
-	golang.org/x/net v0.30.0 // indirect
-	golang.org/x/text v0.19.0 // indirect
-	gopkg.in/inf.v0 v0.9.1 // indirect
-	gorm.io/datatypes v1.2.5 // indirect
-	gorm.io/driver/mysql v1.5.6 // indirect
-	gorm.io/driver/sqlite v1.5.7 // indirect
-	gorm.io/gorm v1.25.12 // indirect
-	k8s.io/api v0.32.2 // indirect
-	k8s.io/apimachinery v0.32.2 // indirect
-	k8s.io/klog/v2 v2.130.1 // indirect
-	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
-	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
-	sigs.k8s.io/yaml v1.4.0 // indirect
-)
Index: /branches/main/array-ingress-controller/task-manager/openshift/go.sum
===================================================================
--- /branches/main/array-ingress-controller/task-manager/openshift/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/openshift/go.sum	(nonexistent)
@@ -1,142 +0,0 @@
-filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
-filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
-github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
-github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
-github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
-github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
-github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
-github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
-github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
-github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
-github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9 h1:L0QtFUgDarD7Fpv9jeVMgy/+Ec0mtnmYuImjTz6dtDA=
-github.com/jackc/pgservicefile v0.0.0-20231201235250-de7065d80cb9/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
-github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
-github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
-github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
-github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
-github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
-github.com/microsoft/go-mssqldb v1.7.2 h1:CHkFJiObW7ItKTJfHo1QX7QBBD1iV+mn1eOyRP3b/PA=
-github.com/microsoft/go-mssqldb v1.7.2/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/openshift/api v0.0.0-20250220025300-cfbda0b31000 h1:JPGS3b3gkj8qlk75umjzdSRKFV56qOd0NhfEKhYCPU4=
-github.com/openshift/api v0.0.0-20250220025300-cfbda0b31000/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
-github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw=
-golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
-golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
-golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
-golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/datatypes v1.2.5 h1:9UogU3jkydFVW1bIVVeoYsTpLRgwDVW3rHfJG6/Ek9I=
-gorm.io/datatypes v1.2.5/go.mod h1:I5FUdlKpLb5PMqeMQhm30CQ6jXP8Rj89xkTeCSAaAD4=
-gorm.io/driver/mysql v1.5.6 h1:Ld4mkIickM+EliaQZQx3uOJDJHtrd70MxAUqWqlx3Y8=
-gorm.io/driver/mysql v1.5.6/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
-gorm.io/driver/postgres v1.5.0 h1:u2FXTy14l45qc3UeCJ7QaAXZmZfDDv0YrthvmRq1l0U=
-gorm.io/driver/postgres v1.5.0/go.mod h1:FUZXzO+5Uqg5zzwzv4KK49R8lvGIyscBOqYrtI1Ce9A=
-gorm.io/driver/sqlite v1.5.7 h1:8NvsrhP0ifM7LX9G4zPB97NwovUakUxc+2V2uuf3Z1I=
-gorm.io/driver/sqlite v1.5.7/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
-gorm.io/driver/sqlserver v1.5.4 h1:xA+Y1KDNspv79q43bPyjDMUgHoYHLhXYmdFcYPobg8g=
-gorm.io/driver/sqlserver v1.5.4/go.mod h1:+frZ/qYmuna11zHPlh5oc2O6ZA/lS88Keb0XSH1Zh/g=
-gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
-k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw=
-k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y=
-k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
-k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
Index: /branches/main/array-ingress-controller/task-manager/task/const.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/task/const.go	(nonexistent)
+++ /branches/main/array-ingress-controller/task-manager/task/const.go	(working copy)
@@ -0,0 +1,6 @@
+package task
+
+const (
+	isAPV = "ARRAY-APV"
+	isASF = "ARRAY-ASF"
+)
\ No newline at end of file
Index: /branches/main/array-ingress-controller/task-manager/task/go.mod
===================================================================
--- /branches/main/array-ingress-controller/task-manager/task/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/task/go.mod	(nonexistent)
@@ -1,34 +0,0 @@
-module arraynetworks.com/array-ingress-controller/task-manager/task
-
-go 1.23.0
-
-toolchain go1.23.6
-
-require (
-	github.com/openshift/api v0.0.0-20250220025300-cfbda0b31000
-	gorm.io/gorm v1.25.12
-	k8s.io/api v0.32.2
-)
-
-require (
-	github.com/fxamacker/cbor/v2 v2.7.0 // indirect
-	github.com/go-logr/logr v1.4.2 // indirect
-	github.com/gogo/protobuf v1.3.2 // indirect
-	github.com/google/gofuzz v1.2.0 // indirect
-	github.com/jinzhu/inflection v1.0.0 // indirect
-	github.com/jinzhu/now v1.1.5 // indirect
-	github.com/json-iterator/go v1.1.12 // indirect
-	github.com/kr/text v0.2.0 // indirect
-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-	github.com/modern-go/reflect2 v1.0.2 // indirect
-	github.com/x448/float16 v0.8.4 // indirect
-	golang.org/x/net v0.30.0 // indirect
-	golang.org/x/text v0.19.0 // indirect
-	gopkg.in/inf.v0 v0.9.1 // indirect
-	k8s.io/apimachinery v0.32.2 // indirect
-	k8s.io/klog/v2 v2.130.1 // indirect
-	k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
-	sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
-	sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect
-	sigs.k8s.io/yaml v1.4.0 // indirect
-)
Index: /branches/main/array-ingress-controller/task-manager/task/go.sum
===================================================================
--- /branches/main/array-ingress-controller/task-manager/task/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/task/go.sum	(nonexistent)
@@ -1,103 +0,0 @@
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
-github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
-github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
-github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
-github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
-github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
-github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/openshift/api v0.0.0-20250220025300-cfbda0b31000 h1:JPGS3b3gkj8qlk75umjzdSRKFV56qOd0NhfEKhYCPU4=
-github.com/openshift/api v0.0.0-20250220025300-cfbda0b31000/go.mod h1:yk60tHAmHhtVpJQo3TwVYq2zpuP70iJIFDCmeKMIzPw=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
-github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
-github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
-github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
-github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
-github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4=
-golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM=
-golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
-gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
-gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
-k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw=
-k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y=
-k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
-k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
-k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
-sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA=
-sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
-sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
-sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
Index: /branches/main/array-ingress-controller/task-manager/task/task.go
===================================================================
--- /branches/main/array-ingress-controller/task-manager/task/task.go	(revision 11)
+++ /branches/main/array-ingress-controller/task-manager/task/task.go	(working copy)
@@ -7,19 +7,26 @@
 import (
 	"context"
 	"fmt"
-	"log"
-
-	"gorm.io/gorm"
 
+	"arraynetworks.com/array-ingress-controller/logger"
 	routev1 "github.com/openshift/api/route/v1"
+	"gorm.io/gorm"
 	corev1 "k8s.io/api/core/v1"
 )
 
+var (
+	log logger.Logger
+)
+
+func init() {
+	log = logger.GetLogger()
+}
+
 // Task represents a unit of work with its associated data
 type Task struct {
-	Route []*routev1.Route
-	Svc   []*corev1.Service
-	Pods  []*corev1.Pod
+	Route  []*routev1.Route
+	Svc    []*corev1.Service
+	Pods   []*corev1.Pod
 	EndPts []*corev1.Endpoints
 }
 
@@ -46,23 +53,25 @@
 func (t *TaskManagerImpl) PrepareTask(ctx context.Context, task *Task, routeClass string) error {
 	var err error
 	switch routeClass {
-		case "ARRAY-APV":
-			if err = t.apvHandler.SetupAPV(ctx, task); err != nil {
-				fmt.Printf("failed to setup APV: %v\n", err)
-				return err
-			}
-		case "ARRAY-ASF":
-			if err = t.asfHandler.SetupASF(ctx, task); err != nil {
-				fmt.Printf("failed to setup ASF: %v\n", err)
-				return err
-			}
-		default:
-			log.Println("Unknown task")
+	case isAPV:
+		log.Infof("Setting up APV - APV class found in route")
+		if err = t.apvHandler.SetupAPV(ctx, task); err != nil {
+			fmt.Printf("failed to setup APV: %v\n", err)
+			return err
+		}
+	case isASF:
+		log.Infof("Setting up ASF - ASF class found in route")
+		if err = t.asfHandler.SetupASF(ctx, task); err != nil {
+			log.Infof("failed to setup ASF: %v\n", err)
+			return err
+		}
+
+	default:
+		log.Println("Unknown task")
 	}
 	return err
 }
 
-
 // ExecuteTask executes the prepared task
 /*
 func (t *TaskManagerImpl) ExecuteTask(task *Task) error {
@@ -72,4 +81,4 @@
 	task.Status = "Executed"
 	return t.dbClient.UpdateTaskStatus(task.ID, task.Status)
 }
-*/
\ No newline at end of file
+*/
Index: /branches/main/array-ingress-controller/watchtower/go.mod
===================================================================
--- /branches/main/array-ingress-controller/watchtower/go.mod	(revision 11)
+++ /branches/main/array-ingress-controller/watchtower/go.mod	(nonexistent)
@@ -1,17 +0,0 @@
-module arraynetworks.com/array-ingress-controller/watchtower
-
-go 1.23.6
-
-replace arraynetworks.com/array-ingress-controller/logger => ../logger
-
-require (
-	arraynetworks.com/array-ingress-controller/logger v0.0.0-00010101000000-000000000000
-	gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
-)
-
-require (
-	go.uber.org/multierr v1.10.0 // indirect
-	go.uber.org/zap v1.27.0 // indirect
-	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
-	gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
-)
Index: /branches/main/array-ingress-controller/watchtower/go.sum
===================================================================
--- /branches/main/array-ingress-controller/watchtower/go.sum	(revision 11)
+++ /branches/main/array-ingress-controller/watchtower/go.sum	(nonexistent)
@@ -1,42 +0,0 @@
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
-github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
-github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg=
-github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
-github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU=
-github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk=
-github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8=
-github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
-go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
-golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
-golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
-golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
-golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
-golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
-gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
-gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
-gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AWRXxgwEyPp2z+p0+hgMuE=
-gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
-gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Index: /branches/main/array-ingress-controller/watchtower/watchtower.go
===================================================================
--- /branches/main/array-ingress-controller/watchtower/watchtower.go	(revision 12)
+++ /branches/main/array-ingress-controller/watchtower/watchtower.go	(working copy)
@@ -42,7 +42,7 @@
 		// clear the previous value of channel and update new value
 		<-statusChan
 		statusChan <- status
-		log.Infof("Replaced previous status for %s device (%s) to: %v", deviceType, deviceIP, status)
+		log.Debugf("Replaced previous status for %s device (%s) to: %v", deviceType, deviceIP, status)
 	}
 }
 
Index: /branches/main/testing_yamls/apv/bothannotations.yaml
===================================================================
--- /branches/main/testing_yamls/apv/bothannotations.yaml	(nonexistent)
+++ /branches/main/testing_yamls/apv/bothannotations.yaml	(working copy)
@@ -0,0 +1,29 @@
+apiVersion: route.openshift.io/v1
+kind: Route
+metadata:
+  name: ratelimit-test
+  namespace: vinay
+  annotations:
+    arraynetworks.com/class: "ARRAY-APV"
+    apv.arraynetworks.com/healthcheck: '{"type" : "http", "interval": 10, "timeout": 10,"retries":10,"port":7890}'
+    apv.arraynetworks.com/ratelimit: |
+      {
+        "max_cps": 999,
+        "soft_bandwidth": 999,
+        "hard_bandwidth": 999,
+        "protocol": "http",
+        "max_req": 199,
+        "time_out": 990,
+        "server_conn_reuse": true,
+        "server_persistent_conn": true
+      }
+spec:
+  host: ratelimit-test.example.com
+  to:
+    kind: Service
+    name: web-app-service
+  port:
+    targetPort: 8080
+  tls:
+    termination: edge
+  wildcardPolicy: None
Index: /branches/main/testing_yamls/apv/healthcheck.yaml
===================================================================
--- /branches/main/testing_yamls/apv/healthcheck.yaml	(nonexistent)
+++ /branches/main/testing_yamls/apv/healthcheck.yaml	(working copy)
@@ -0,0 +1,19 @@
+apiVersion: route.openshift.io/v1
+kind: Route
+metadata:
+  name: handler-health
+  namespace: vinay
+  annotations:
+    arraynetworks.com/class: "ARRAY-APV"
+    apv.arraynetworks.com/healthcheck: '{"type" : "http", "interval": 10, "timeout": 10,"retries":10}'
+spec:
+  host: example.com
+  to:
+    kind: Service
+    name: web-app-service
+    weight: 100
+  port:
+    targetPort: 8080
+  tls:
+    termination: edge
+  wildcardPolicy: None
\ No newline at end of file
Index: /branches/main/testing_yamls/apv/nil-testing.yaml
===================================================================
--- /branches/main/testing_yamls/apv/nil-testing.yaml	(nonexistent)
+++ /branches/main/testing_yamls/apv/nil-testing.yaml	(working copy)
@@ -0,0 +1,29 @@
+apiVersion: route.openshift.io/v1
+kind: Route
+metadata:
+  name: ratelimit-test
+  namespace: vinay
+  annotations:
+    arraynetworks.com/class: "ARRAY-APV"
+    apv.arraynetworks.com/healthcheck: '{"type" : "http", "interval": 10, "timeout": 10,"retries":10,"port":7890}'
+    apv.arraynetworks.com/ratelimit: |
+      {
+        "max_cps": 999,
+        "soft_bandwidth": 999,
+        "hard_bandwidth": 999,
+        "protocol": "http",
+        "max_req": 199,
+        "time_out": 990,
+        "server_conn_reuse": true,
+        "server_persistent_conn": true
+      }
+spec:
+  host: ratelimit-test.example.com
+  to:
+    kind: Service
+    name: dummy-service
+  port:
+    targetPort: 8080
+  tls:
+    termination: edge
+  wildcardPolicy: None
Index: /branches/main/testing_yamls/apv/ratelimit.yaml
===================================================================
--- /branches/main/testing_yamls/apv/ratelimit.yaml	(nonexistent)
+++ /branches/main/testing_yamls/apv/ratelimit.yaml	(working copy)
@@ -0,0 +1,28 @@
+apiVersion: route.openshift.io/v1
+kind: Route
+metadata:
+  name: ratelimit-test
+  namespace: web-app
+  annotations:
+    arraynetworks.com/class: "ARRAY-APV"
+    apv.arraynetworks.com/ratelimit: |
+      {
+        "max_cps": 999,
+        "soft_bandwidth": 999,
+        "hard_bandwidth": 999,
+        "protocol": "http",
+        "max_req": 199,
+        "time_out": 990,
+        "server_conn_reuse": true,
+        "server_persistent_conn": true
+      }
+spec:
+  host: ratelimit-test.example.com
+  to:
+    kind: Service
+    name: web-app-service
+  port:
+    targetPort: 8080
+  tls:
+    termination: edge
+  wildcardPolicy: None
Index: /branches/main/testing_yamls/apv/test1.yaml
===================================================================
--- /branches/main/testing_yamls/apv/test1.yaml	(nonexistent)
+++ /branches/main/testing_yamls/apv/test1.yaml	(working copy)
@@ -0,0 +1,18 @@
+apiVersion: route.openshift.io/v1
+kind: Route
+metadata:
+  name: handler001
+  namespace: vinay
+  annotations:
+    arraynetworks.com/class: "ARRAY-APV"
+spec:
+  host: example.com
+  to:
+    kind: Service
+    name: web-app-service
+    weight: 100
+  port:
+    targetPort: 8080
+  tls:
+    termination: edge
+  wildcardPolicy: None
\ No newline at end of file
Index: /branches/main/testing_yamls/asf/healthcheck.yaml
===================================================================
--- /branches/main/testing_yamls/asf/healthcheck.yaml	(nonexistent)
+++ /branches/main/testing_yamls/asf/healthcheck.yaml	(working copy)
@@ -0,0 +1,18 @@
+apiVersion: route.openshift.io/v1
+kind: Route
+metadata:
+  name: web-app-route
+  namespace: web-app
+  annotations:
+    arraynetworks.com/class: "ARRAY-ASF"
+    asf.arraynetworks.com/healthcheck: '{"hc_type" :"icmp","hc_up" : 30,"hc_down":40}'
+spec:
+  host: example.com
+  to:
+    kind: Service
+    name: web-app-service
+  port:
+    targetPort: 8080
+  tls:
+    termination: edge
+  wildcardPolicy: None
Index: /branches/main/testing_yamls/asf/test.yaml
===================================================================
--- /branches/main/testing_yamls/asf/test.yaml	(nonexistent)
+++ /branches/main/testing_yamls/asf/test.yaml	(working copy)
@@ -0,0 +1,18 @@
+apiVersion: route.openshift.io/v1
+kind: Route
+metadata:
+  name: web-app-route
+  namespace: web-app
+  annotations:
+    arraynetworks.com/class: "ARRAY-ASF"
+    asf.arraynetworks.com/asf-realservice: '{"service_type": "TCP"}'
+spec:
+  host: example.com
+  to:
+    kind: Service
+    name: web-app-service
+  port:
+    targetPort: 8080
+  tls:
+    termination: edge
+  wildcardPolicy: None
