--- /dev/null
+package controller\r
+\r
+import (\r
+ "context"\r
+ "fmt"\r
+)\r
+\r
+func GetCustomResourceDefinition() []*unstructured.Unstructured {\r
+\r
+ customResourceDefinition1 := &unstructured.Unstructured{\r
+ Object: map[string]interface{}{\r
+ "apiVersion": "apiextensions.k8s.io/v1beta1",\r
+ "kind": "CustomResourceDefinition",\r
+ "metadata": map[string]interface{}{\r
+ "labels": map[string]interface{}{\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/managed-by": "Helm",\r
+ "app.kubernetes.io/name": "kong",\r
+ "app.kubernetes.io/version": "1.4",\r
+ "helm.sh/chart": "kong-0.36.6",\r
+ },\r
+ "name": "kongconsumers.configuration.konghq.com",\r
+ },\r
+ "spec": map[string]interface{}{\r
+ "group": "configuration.konghq.com",\r
+ "names": map[string]interface{}{\r
+ "kind": "KongConsumer",\r
+ "plural": "kongconsumers",\r
+ "shortNames": []interface{}{\r
+ "kc",\r
+ },\r
+ },\r
+ "scope": "Namespaced",\r
+ "validation": map[string]interface{}{\r
+ "openAPIV3Schema": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "credentials": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "custom_id": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "username": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ "version": "v1",\r
+ "additionalPrinterColumns": []interface{}{\r
+ map[string]interface{}{\r
+ "JSONPath": ".username",\r
+ "description": "Username of a Kong Consumer",\r
+ "name": "Username",\r
+ "type": "string",\r
+ },\r
+ map[string]interface{}{\r
+ "type": "date",\r
+ "JSONPath": ".metadata.creationTimestamp",\r
+ "description": "Age",\r
+ "name": "Age",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ }\r
+\r
+ customResourceDefinition2 := &unstructured.Unstructured{\r
+ Object: map[string]interface{}{\r
+ "apiVersion": "apiextensions.k8s.io/v1beta1",\r
+ "kind": "CustomResourceDefinition",\r
+ "metadata": map[string]interface{}{\r
+ "labels": map[string]interface{}{\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/managed-by": "Helm",\r
+ "app.kubernetes.io/name": "kong",\r
+ "app.kubernetes.io/version": "1.4",\r
+ "helm.sh/chart": "kong-0.36.6",\r
+ },\r
+ "name": "kongcredentials.configuration.konghq.com",\r
+ },\r
+ "spec": map[string]interface{}{\r
+ "version": "v1",\r
+ "additionalPrinterColumns": []interface{}{\r
+ map[string]interface{}{\r
+ "JSONPath": ".type",\r
+ "description": "Type of credential",\r
+ "name": "Credential-type",\r
+ "type": "string",\r
+ },\r
+ map[string]interface{}{\r
+ "JSONPath": ".metadata.creationTimestamp",\r
+ "description": "Age",\r
+ "name": "Age",\r
+ "type": "date",\r
+ },\r
+ map[string]interface{}{\r
+ "type": "string",\r
+ "JSONPath": ".consumerRef",\r
+ "description": "Owner of the credential",\r
+ "name": "Consumer-Ref",\r
+ },\r
+ },\r
+ "group": "configuration.konghq.com",\r
+ "names": map[string]interface{}{\r
+ "kind": "KongCredential",\r
+ "plural": "kongcredentials",\r
+ },\r
+ "scope": "Namespaced",\r
+ "validation": map[string]interface{}{\r
+ "openAPIV3Schema": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "consumerRef": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "type": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ },\r
+ "required": []interface{}{\r
+ "consumerRef",\r
+ "type",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ }\r
+\r
+ customResourceDefinition3 := &unstructured.Unstructured{\r
+ Object: map[string]interface{}{\r
+ "spec": map[string]interface{}{\r
+ "names": map[string]interface{}{\r
+ "kind": "KongPlugin",\r
+ "plural": "kongplugins",\r
+ "shortNames": []interface{}{\r
+ "kp",\r
+ },\r
+ },\r
+ "scope": "Namespaced",\r
+ "validation": map[string]interface{}{\r
+ "openAPIV3Schema": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "protocols": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "string",\r
+ "enum": []interface{}{\r
+ "http",\r
+ "https",\r
+ "tcp",\r
+ "tls",\r
+ "grpc",\r
+ "grpcs",\r
+ },\r
+ },\r
+ "type": "array",\r
+ },\r
+ "run_on": map[string]interface{}{\r
+ "enum": []interface{}{\r
+ "first",\r
+ "second",\r
+ "all",\r
+ },\r
+ "type": "string",\r
+ },\r
+ "config": map[string]interface{}{\r
+ "type": "object",\r
+ },\r
+ "disabled": map[string]interface{}{\r
+ "type": "boolean",\r
+ },\r
+ "plugin": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ },\r
+ "required": []interface{}{\r
+ "plugin",\r
+ },\r
+ },\r
+ },\r
+ "version": "v1",\r
+ "additionalPrinterColumns": []interface{}{\r
+ map[string]interface{}{\r
+ "JSONPath": ".plugin",\r
+ "description": "Name of the plugin",\r
+ "name": "Plugin-Type",\r
+ "type": "string",\r
+ },\r
+ map[string]interface{}{\r
+ "description": "Age",\r
+ "name": "Age",\r
+ "type": "date",\r
+ "JSONPath": ".metadata.creationTimestamp",\r
+ },\r
+ map[string]interface{}{\r
+ "JSONPath": ".disabled",\r
+ "description": "Indicates if the plugin is disabled",\r
+ "name": "Disabled",\r
+ "priority": 1,\r
+ "type": "boolean",\r
+ },\r
+ map[string]interface{}{\r
+ "JSONPath": ".config",\r
+ "description": "Configuration of the plugin",\r
+ "name": "Config",\r
+ "priority": 1,\r
+ "type": "string",\r
+ },\r
+ },\r
+ "group": "configuration.konghq.com",\r
+ },\r
+ "apiVersion": "apiextensions.k8s.io/v1beta1",\r
+ "kind": "CustomResourceDefinition",\r
+ "metadata": map[string]interface{}{\r
+ "labels": map[string]interface{}{\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/managed-by": "Helm",\r
+ "app.kubernetes.io/name": "kong",\r
+ "app.kubernetes.io/version": "1.4",\r
+ "helm.sh/chart": "kong-0.36.6",\r
+ },\r
+ "name": "kongplugins.configuration.konghq.com",\r
+ },\r
+ },\r
+ }\r
+\r
+ customResourceDefinition4 := &unstructured.Unstructured{\r
+ Object: map[string]interface{}{\r
+ "spec": map[string]interface{}{\r
+ "version": "v1",\r
+ "group": "configuration.konghq.com",\r
+ "names": map[string]interface{}{\r
+ "plural": "kongingresses",\r
+ "shortNames": []interface{}{\r
+ "ki",\r
+ },\r
+ "kind": "KongIngress",\r
+ },\r
+ "scope": "Namespaced",\r
+ "validation": map[string]interface{}{\r
+ "openAPIV3Schema": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "upstream": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "hash_fallback_header": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "hash_on": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "hash_on_cookie": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "hash_on_cookie_path": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "healthchecks": map[string]interface{}{\r
+ "type": "object",\r
+ "properties": map[string]interface{}{\r
+ "passive": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "healthy": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "http_statuses": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "interval": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "successes": map[string]interface{}{\r
+ "type": "integer",\r
+ "minimum": 0,\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ "unhealthy": map[string]interface{}{\r
+ "type": "object",\r
+ "properties": map[string]interface{}{\r
+ "timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "http_failures": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "http_statuses": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "interval": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "tcp_failures": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ "active": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "concurrency": map[string]interface{}{\r
+ "minimum": 1,\r
+ "type": "integer",\r
+ },\r
+ "healthy": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "http_statuses": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "interval": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "successes": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ "http_path": map[string]interface{}{\r
+ "pattern": "^/.*$",\r
+ "type": "string",\r
+ },\r
+ "timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "unhealthy": map[string]interface{}{\r
+ "type": "object",\r
+ "properties": map[string]interface{}{\r
+ "timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "http_failures": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "http_statuses": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "interval": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "tcp_failures": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ },\r
+ },\r
+ "slots": map[string]interface{}{\r
+ "minimum": 10,\r
+ "type": "integer",\r
+ },\r
+ "algorithm": map[string]interface{}{\r
+ "enum": []interface{}{\r
+ "round-robin",\r
+ "consistent-hashing",\r
+ "least-connections",\r
+ },\r
+ "type": "string",\r
+ },\r
+ "hash_fallback": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "hash_on_header": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "host_header": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ "proxy": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "connect_timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "path": map[string]interface{}{\r
+ "pattern": "^/.*$",\r
+ "type": "string",\r
+ },\r
+ "protocol": map[string]interface{}{\r
+ "enum": []interface{}{\r
+ "http",\r
+ "https",\r
+ "grpc",\r
+ "grpcs",\r
+ },\r
+ "type": "string",\r
+ },\r
+ "read_timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "retries": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "write_timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ "route": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "protocols": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "string",\r
+ "enum": []interface{}{\r
+ "http",\r
+ "https",\r
+ "grpc",\r
+ "grpcs",\r
+ },\r
+ },\r
+ "type": "array",\r
+ },\r
+ "regex_priority": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ "strip_path": map[string]interface{}{\r
+ "type": "boolean",\r
+ },\r
+ "headers": map[string]interface{}{\r
+ "additionalProperties": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "type": "object",\r
+ },\r
+ "https_redirect_status_code": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ "methods": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "preserve_host": map[string]interface{}{\r
+ "type": "boolean",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ "apiVersion": "apiextensions.k8s.io/v1beta1",\r
+ "kind": "CustomResourceDefinition",\r
+ "metadata": map[string]interface{}{\r
+ "labels": map[string]interface{}{\r
+ "helm.sh/chart": "kong-0.36.6",\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/managed-by": "Helm",\r
+ "app.kubernetes.io/name": "kong",\r
+ "app.kubernetes.io/version": "1.4",\r
+ },\r
+ "name": "kongingresses.configuration.konghq.com",\r
+ },\r
+ },\r
+ }\r
+\r
+ customResourceDefinition5 := &unstructured.Unstructured{\r
+ Object: map[string]interface{}{\r
+ "apiVersion": "apiextensions.k8s.io/v1beta1",\r
+ "kind": "CustomResourceDefinition",\r
+ "metadata": map[string]interface{}{\r
+ "labels": map[string]interface{}{\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/managed-by": "Helm",\r
+ "app.kubernetes.io/name": "kong",\r
+ "app.kubernetes.io/version": "1.4",\r
+ "helm.sh/chart": "kong-0.36.6",\r
+ },\r
+ "name": "kongconsumers.configuration.konghq.com",\r
+ },\r
+ "spec": map[string]interface{}{\r
+ "group": "configuration.konghq.com",\r
+ "names": map[string]interface{}{\r
+ "kind": "KongConsumer",\r
+ "plural": "kongconsumers",\r
+ "shortNames": []interface{}{\r
+ "kc",\r
+ },\r
+ },\r
+ "scope": "Namespaced",\r
+ "validation": map[string]interface{}{\r
+ "openAPIV3Schema": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "credentials": map[string]interface{}{\r
+ "type": "array",\r
+ "items": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ },\r
+ "custom_id": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "username": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ "version": "v1",\r
+ "additionalPrinterColumns": []interface{}{\r
+ map[string]interface{}{\r
+ "JSONPath": ".username",\r
+ "description": "Username of a Kong Consumer",\r
+ "name": "Username",\r
+ "type": "string",\r
+ },\r
+ map[string]interface{}{\r
+ "JSONPath": ".metadata.creationTimestamp",\r
+ "description": "Age",\r
+ "name": "Age",\r
+ "type": "date",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ }\r
+\r
+ customResourceDefinition6 := &unstructured.Unstructured{\r
+ Object: map[string]interface{}{\r
+ "apiVersion": "apiextensions.k8s.io/v1beta1",\r
+ "kind": "CustomResourceDefinition",\r
+ "metadata": map[string]interface{}{\r
+ "labels": map[string]interface{}{\r
+ "app.kubernetes.io/managed-by": "Helm",\r
+ "app.kubernetes.io/name": "kong",\r
+ "app.kubernetes.io/version": "1.4",\r
+ "helm.sh/chart": "kong-0.36.6",\r
+ "app.kubernetes.io/instance": "release-name",\r
+ },\r
+ "name": "kongcredentials.configuration.konghq.com",\r
+ },\r
+ "spec": map[string]interface{}{\r
+ "additionalPrinterColumns": []interface{}{\r
+ map[string]interface{}{\r
+ "JSONPath": ".type",\r
+ "description": "Type of credential",\r
+ "name": "Credential-type",\r
+ "type": "string",\r
+ },\r
+ map[string]interface{}{\r
+ "description": "Age",\r
+ "name": "Age",\r
+ "type": "date",\r
+ "JSONPath": ".metadata.creationTimestamp",\r
+ },\r
+ map[string]interface{}{\r
+ "JSONPath": ".consumerRef",\r
+ "description": "Owner of the credential",\r
+ "name": "Consumer-Ref",\r
+ "type": "string",\r
+ },\r
+ },\r
+ "group": "configuration.konghq.com",\r
+ "names": map[string]interface{}{\r
+ "kind": "KongCredential",\r
+ "plural": "kongcredentials",\r
+ },\r
+ "scope": "Namespaced",\r
+ "validation": map[string]interface{}{\r
+ "openAPIV3Schema": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "consumerRef": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "type": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ },\r
+ "required": []interface{}{\r
+ "consumerRef",\r
+ "type",\r
+ },\r
+ },\r
+ },\r
+ "version": "v1",\r
+ },\r
+ },\r
+ }\r
+\r
+ customResourceDefinition7 := &unstructured.Unstructured{\r
+ Object: map[string]interface{}{\r
+ "apiVersion": "apiextensions.k8s.io/v1beta1",\r
+ "kind": "CustomResourceDefinition",\r
+ "metadata": map[string]interface{}{\r
+ "labels": map[string]interface{}{\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/managed-by": "Helm",\r
+ "app.kubernetes.io/name": "kong",\r
+ "app.kubernetes.io/version": "1.4",\r
+ "helm.sh/chart": "kong-0.36.6",\r
+ },\r
+ "name": "kongplugins.configuration.konghq.com",\r
+ },\r
+ "spec": map[string]interface{}{\r
+ "names": map[string]interface{}{\r
+ "kind": "KongPlugin",\r
+ "plural": "kongplugins",\r
+ "shortNames": []interface{}{\r
+ "kp",\r
+ },\r
+ },\r
+ "scope": "Namespaced",\r
+ "validation": map[string]interface{}{\r
+ "openAPIV3Schema": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "config": map[string]interface{}{\r
+ "type": "object",\r
+ },\r
+ "disabled": map[string]interface{}{\r
+ "type": "boolean",\r
+ },\r
+ "plugin": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "protocols": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "enum": []interface{}{\r
+ "http",\r
+ "https",\r
+ "tcp",\r
+ "tls",\r
+ "grpc",\r
+ "grpcs",\r
+ },\r
+ "type": "string",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "run_on": map[string]interface{}{\r
+ "type": "string",\r
+ "enum": []interface{}{\r
+ "first",\r
+ "second",\r
+ "all",\r
+ },\r
+ },\r
+ },\r
+ "required": []interface{}{\r
+ "plugin",\r
+ },\r
+ },\r
+ },\r
+ "version": "v1",\r
+ "additionalPrinterColumns": []interface{}{\r
+ map[string]interface{}{\r
+ "description": "Name of the plugin",\r
+ "name": "Plugin-Type",\r
+ "type": "string",\r
+ "JSONPath": ".plugin",\r
+ },\r
+ map[string]interface{}{\r
+ "description": "Age",\r
+ "name": "Age",\r
+ "type": "date",\r
+ "JSONPath": ".metadata.creationTimestamp",\r
+ },\r
+ map[string]interface{}{\r
+ "priority": 1,\r
+ "type": "boolean",\r
+ "JSONPath": ".disabled",\r
+ "description": "Indicates if the plugin is disabled",\r
+ "name": "Disabled",\r
+ },\r
+ map[string]interface{}{\r
+ "JSONPath": ".config",\r
+ "description": "Configuration of the plugin",\r
+ "name": "Config",\r
+ "priority": 1,\r
+ "type": "string",\r
+ },\r
+ },\r
+ "group": "configuration.konghq.com",\r
+ },\r
+ },\r
+ }\r
+\r
+ customResourceDefinition8 := &unstructured.Unstructured{\r
+ Object: map[string]interface{}{\r
+ "apiVersion": "apiextensions.k8s.io/v1beta1",\r
+ "kind": "CustomResourceDefinition",\r
+ "metadata": map[string]interface{}{\r
+ "labels": map[string]interface{}{\r
+ "helm.sh/chart": "kong-0.36.6",\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/managed-by": "Helm",\r
+ "app.kubernetes.io/name": "kong",\r
+ "app.kubernetes.io/version": "1.4",\r
+ },\r
+ "name": "kongingresses.configuration.konghq.com",\r
+ },\r
+ "spec": map[string]interface{}{\r
+ "group": "configuration.konghq.com",\r
+ "names": map[string]interface{}{\r
+ "plural": "kongingresses",\r
+ "shortNames": []interface{}{\r
+ "ki",\r
+ },\r
+ "kind": "KongIngress",\r
+ },\r
+ "scope": "Namespaced",\r
+ "validation": map[string]interface{}{\r
+ "openAPIV3Schema": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "proxy": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "path": map[string]interface{}{\r
+ "pattern": "^/.*$",\r
+ "type": "string",\r
+ },\r
+ "protocol": map[string]interface{}{\r
+ "type": "string",\r
+ "enum": []interface{}{\r
+ "http",\r
+ "https",\r
+ "grpc",\r
+ "grpcs",\r
+ },\r
+ },\r
+ "read_timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "retries": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "write_timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "connect_timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ "route": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "https_redirect_status_code": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ "methods": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "preserve_host": map[string]interface{}{\r
+ "type": "boolean",\r
+ },\r
+ "protocols": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "string",\r
+ "enum": []interface{}{\r
+ "http",\r
+ "https",\r
+ "grpc",\r
+ "grpcs",\r
+ },\r
+ },\r
+ "type": "array",\r
+ },\r
+ "regex_priority": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ "strip_path": map[string]interface{}{\r
+ "type": "boolean",\r
+ },\r
+ "headers": map[string]interface{}{\r
+ "additionalProperties": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "type": "object",\r
+ },\r
+ },\r
+ },\r
+ "upstream": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "algorithm": map[string]interface{}{\r
+ "enum": []interface{}{\r
+ "round-robin",\r
+ "consistent-hashing",\r
+ "least-connections",\r
+ },\r
+ "type": "string",\r
+ },\r
+ "hash_fallback_header": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "hash_on_cookie": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "hash_on_cookie_path": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "host_header": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "hash_fallback": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "hash_on": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "hash_on_header": map[string]interface{}{\r
+ "type": "string",\r
+ },\r
+ "healthchecks": map[string]interface{}{\r
+ "type": "object",\r
+ "properties": map[string]interface{}{\r
+ "active": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "unhealthy": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "http_failures": map[string]interface{}{\r
+ "type": "integer",\r
+ "minimum": 0,\r
+ },\r
+ "http_statuses": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "interval": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "tcp_failures": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ "concurrency": map[string]interface{}{\r
+ "minimum": 1,\r
+ "type": "integer",\r
+ },\r
+ "healthy": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "http_statuses": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "interval": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "successes": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ "http_path": map[string]interface{}{\r
+ "pattern": "^/.*$",\r
+ "type": "string",\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ "passive": map[string]interface{}{\r
+ "properties": map[string]interface{}{\r
+ "healthy": map[string]interface{}{\r
+ "type": "object",\r
+ "properties": map[string]interface{}{\r
+ "http_statuses": map[string]interface{}{\r
+ "items": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ "type": "array",\r
+ },\r
+ "interval": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "successes": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ },\r
+ },\r
+ "unhealthy": map[string]interface{}{\r
+ "type": "object",\r
+ "properties": map[string]interface{}{\r
+ "http_statuses": map[string]interface{}{\r
+ "type": "array",\r
+ "items": map[string]interface{}{\r
+ "type": "integer",\r
+ },\r
+ },\r
+ "interval": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "tcp_failures": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "timeout": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ "http_failures": map[string]interface{}{\r
+ "minimum": 0,\r
+ "type": "integer",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ },\r
+ },\r
+ "slots": map[string]interface{}{\r
+ "minimum": 10,\r
+ "type": "integer",\r
+ },\r
+ },\r
+ "type": "object",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ "version": "v1",\r
+ },\r
+ },\r
+ }\r
+\r
+ return []*unstructured.Unstructured{customResourceDefinition1, customResourceDefinition2, customResourceDefinition3, customResourceDefinition4, customResourceDefinition5, customResourceDefinition6, customResourceDefinition7, customResourceDefinition8}\r
+}
\ No newline at end of file
--- /dev/null
+package controller\r
+\r
+import (\r
+ corev1 "k8s.io/api/core/v1"\r
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"\r
+)\r
+\r
+\r
+\r
+func GetStatefulSet() []*appsv1.StatefulSet {\r
+\r
+ statefulSet1 := &appsv1.StatefulSet{\r
+ ObjectMeta: metav1.ObjectMeta{\r
+ Namespace: "ricplt",\r
+ Labels: map[string]string{\r
+ "app": "ricplt-dbaas",\r
+ "chart": "dbaas-2.0.0",\r
+ "heritage": "Helm",\r
+ "release": "release-name",\r
+ },\r
+ Name: "statefulset-ricplt-dbaas-server",\r
+ },\r
+ Spec: appsv1.StatefulSetSpec{\r
+ PodManagementPolicy: appsv1.PodManagementPolicyType("OrderedReady"),\r
+ Replicas: int32Ptr(1),\r
+ Selector: &metav1.LabelSelector{\r
+ MatchLabels: map[string]string{\r
+ "app": "ricplt-dbaas",\r
+ "release": "release-name",\r
+ },\r
+ },\r
+ ServiceName: "service-ricplt-dbaas-tcp",\r
+ Template: corev1.PodTemplateSpec{\r
+ ObjectMeta: metav1.ObjectMeta{\r
+ Labels: map[string]string{\r
+ "app": "ricplt-dbaas",\r
+ "release": "release-name",\r
+ },\r
+ },\r
+ Spec: corev1.PodSpec{\r
+ ImagePullSecrets: []corev1.LocalObjectReference{\r
+\r
+ corev1.LocalObjectReference{\r
+ Name: "secret-nexus3-o-ran-sc-org-10002-o-ran-sc",\r
+ },\r
+ },\r
+ ShareProcessNamespace: boolPtr(true),\r
+ TerminationGracePeriodSeconds: int64Ptr(5),\r
+ Volumes: []corev1.Volume{\r
+\r
+ corev1.Volume{\r
+ Name: "config",\r
+ VolumeSource: corev1.VolumeSource{\r
+ ConfigMap: &corev1.ConfigMapVolumeSource{\r
+ LocalObjectReference: corev1.LocalObjectReference{\r
+ Name: "configmap-ricplt-dbaas-config",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ Containers: []corev1.Container{\r
+\r
+ corev1.Container{\r
+ Command: []string{\r
+\r
+ "redis-server",\r
+ },\r
+ EnvFrom: []corev1.EnvFromSource{\r
+\r
+ corev1.EnvFromSource{\r
+ ConfigMapRef: &corev1.ConfigMapEnvSource{\r
+ LocalObjectReference: corev1.LocalObjectReference{\r
+ Name: "configmap-ricplt-dbaas-appconfig",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ LivenessProbe: &corev1.Probe{\r
+ PeriodSeconds: 5,\r
+ ProbeHandler: corev1.ProbeHandler{\r
+ Exec: &corev1.ExecAction{\r
+ Command: []string{\r
+\r
+ "/bin/sh",\r
+ "-c",\r
+ "timeout 10 redis-cli -p 6379 ping",\r
+ },\r
+ },\r
+ },\r
+ InitialDelaySeconds: 15,\r
+ },\r
+ Stdin: false,\r
+ TTY: false,\r
+ VolumeMounts: []corev1.VolumeMount{\r
+\r
+ corev1.VolumeMount{\r
+ MountPath: "/data",\r
+ Name: "config",\r
+ ReadOnly: false,\r
+ },\r
+ },\r
+ Args: []string{\r
+\r
+ "/data/redis.conf",\r
+ },\r
+ Image: "nexus3.o-ran-sc.org:10002/o-ran-sc/ric-plt-dbaas:0.6.1",\r
+ Name: "container-ricplt-dbaas-redis",\r
+ Ports: []corev1.ContainerPort{\r
+\r
+ corev1.ContainerPort{\r
+ ContainerPort: 6379,\r
+ Name: "redis",\r
+ },\r
+ },\r
+ ReadinessProbe: &corev1.Probe{\r
+ InitialDelaySeconds: 15,\r
+ PeriodSeconds: 5,\r
+ ProbeHandler: corev1.ProbeHandler{\r
+ Exec: &corev1.ExecAction{\r
+ Command: []string{\r
+\r
+ "/bin/sh",\r
+ "-c",\r
+ "timeout 10 redis-cli -p 6379 ping",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ StdinOnce: false,\r
+ },\r
+ },\r
+ HostIPC: false,\r
+ HostNetwork: false,\r
+ HostPID: false,\r
+ },\r
+ },\r
+ UpdateStrategy: appsv1.StatefulSetUpdateStrategy{\r
+ Type: appsv1.StatefulSetUpdateStrategyType("RollingUpdate"),\r
+ },\r
+ },\r
+ TypeMeta: metav1.TypeMeta{\r
+ APIVersion: "apps/v1",\r
+ Kind: "StatefulSet",\r
+ },\r
+ }\r
+\r
+ statefulSet2 := &appsv1.StatefulSet{\r
+ ObjectMeta: metav1.ObjectMeta{\r
+ Name: "redis-cluster",\r
+ },\r
+ Spec: appsv1.StatefulSetSpec{\r
+ Replicas: int32Ptr(9),\r
+ Selector: &metav1.LabelSelector{\r
+ MatchLabels: map[string]string{\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/name": "redis-cluster",\r
+ },\r
+ },\r
+ Template: corev1.PodTemplateSpec{\r
+ ObjectMeta: metav1.ObjectMeta{\r
+ Labels: map[string]string{\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/name": "redis-cluster",\r
+ },\r
+ },\r
+ Spec: corev1.PodSpec{\r
+ Volumes: []corev1.Volume{\r
+\r
+ corev1.Volume{\r
+ Name: "conf",\r
+ VolumeSource: corev1.VolumeSource{\r
+ ConfigMap: &corev1.ConfigMapVolumeSource{\r
+ DefaultMode: int32Ptr(493),\r
+ LocalObjectReference: corev1.LocalObjectReference{\r
+ Name: "redis-cluster-cm",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ Containers: []corev1.Container{\r
+\r
+ corev1.Container{\r
+ Stdin: false,\r
+ StdinOnce: false,\r
+ TTY: false,\r
+ Command: []string{\r
+\r
+ "/conf/update-node.sh",\r
+ "redis-server",\r
+ "/conf/redis.conf",\r
+ },\r
+ Name: "redis",\r
+ Ports: []corev1.ContainerPort{\r
+\r
+ corev1.ContainerPort{\r
+ ContainerPort: 6379,\r
+ Name: "client",\r
+ },\r
+ corev1.ContainerPort{\r
+ Name: "gossip",\r
+ ContainerPort: 16379,\r
+ },\r
+ },\r
+ VolumeMounts: []corev1.VolumeMount{\r
+\r
+ corev1.VolumeMount{\r
+ Name: "conf",\r
+ ReadOnly: false,\r
+ MountPath: "/conf",\r
+ },\r
+ corev1.VolumeMount{\r
+ MountPath: "/data",\r
+ Name: "data",\r
+ ReadOnly: false,\r
+ },\r
+ },\r
+ Env: []corev1.EnvVar{\r
+\r
+ corev1.EnvVar{\r
+ Name: "POD_IP",\r
+ ValueFrom: &corev1.EnvVarSource{\r
+ FieldRef: &corev1.ObjectFieldSelector{\r
+ FieldPath: "status.podIP",\r
+ },\r
+ },\r
+ },\r
+ },\r
+ Image: "redis:5.0.1-alpine",\r
+ ImagePullPolicy: corev1.PullPolicy("IfNotPresent"),\r
+ },\r
+ },\r
+ HostIPC: false,\r
+ HostNetwork: false,\r
+ HostPID: false,\r
+ TopologySpreadConstraints: []corev1.TopologySpreadConstraint{\r
+\r
+ corev1.TopologySpreadConstraint{\r
+ TopologyKey: "kubernetes.io/hostname",\r
+ WhenUnsatisfiable: corev1.UnsatisfiableConstraintAction("DoNotSchedule"),\r
+ LabelSelector: &metav1.LabelSelector{\r
+ MatchLabels: map[string]string{\r
+ "app.kubernetes.io/instance": "release-name",\r
+ "app.kubernetes.io/name": "redis-cluster",\r
+ },\r
+ },\r
+ MaxSkew: 1,\r
+ },\r
+ },\r
+ },\r
+ },\r
+ VolumeClaimTemplates: []corev1.PersistentVolumeClaim{\r
+\r
+ corev1.PersistentVolumeClaim{\r
+ ObjectMeta: metav1.ObjectMeta{\r
+ Labels: map[string]string{\r
+ "app.kubernetes.io/name": "redis-cluster",\r
+ "app.kubernetes.io/instance": "release-name",\r
+ },\r
+ Name: "data",\r
+ },\r
+ Spec: corev1.PersistentVolumeClaimSpec{\r
+ AccessModes: []corev1.PersistentVolumeAccessMode{\r
+\r
+ corev1.PersistentVolumeAccessMode("ReadWriteOnce"),\r
+ },\r
+ Resources: corev1.ResourceRequirements{\r
+ Requests: corev1.ResourceList{\r
+ "storage": resource.MustParse("1Gi"),\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ },\r
+ TypeMeta: metav1.TypeMeta{\r
+ APIVersion: "apps/v1",\r
+ Kind: "StatefulSet",\r
+ },\r
+ }\r
+\r
+ return []*appsv1.StatefulSet{statefulSet1, statefulSet2}\r
+}
\ No newline at end of file