Merge rc-22.06 back to gerrit 47/4947/2
authorRuoyu Ying <ruoyu.ying@intel.com>
Tue, 19 Jul 2022 02:18:00 +0000 (22:18 -0400)
committerRuoyu Ying <ruoyu.ying@intel.com>
Wed, 20 Jul 2022 05:27:09 +0000 (01:27 -0400)
Change-Id: Ic9d76e64456607279c4f0330368da297f789fb72
Signed-off-by: Ruoyu Ying <ruoyu.ying@intel.com>
141 files changed:
README.md
central-controller/README.md
central-controller/build/Dockerfile
central-controller/deployments/README.md
central-controller/deployments/kubernetes/monitor-deploy.yaml [deleted file]
central-controller/deployments/kubernetes/monitor-deploy/README.md [new file with mode: 0644]
central-controller/deployments/kubernetes/monitor-deploy/monitor-deploy-pullmode.yaml [new file with mode: 0644]
central-controller/deployments/kubernetes/monitor-deploy/monitor-deploy-pushmode.yaml [new file with mode: 0644]
central-controller/deployments/kubernetes/monitor-deploy/monitor-deploy.sh [new file with mode: 0644]
central-controller/deployments/kubernetes/monitor-deploy/monitor_configs [new file with mode: 0644]
central-controller/deployments/kubernetes/scc_etcd.yaml
central-controller/docs/scc_apis.yaml
central-controller/images/central_controller_overview.jpg [new file with mode: 0644]
central-controller/src/monitor/LICENSE.txt [deleted file]
central-controller/src/monitor/Makefile
central-controller/src/monitor/controllers/commit.go
central-controller/src/monitor/controllers/controller_list.go
central-controller/src/monitor/controllers/resourcebundlestate_controller.go
central-controller/src/monitor/go.mod
central-controller/src/monitor/go.sum
central-controller/src/reg_cluster/go.mod
central-controller/src/reg_cluster/reg_cluster.go
central-controller/src/rsync/go.mod
central-controller/src/rsync/go.sum
central-controller/src/rsync/pkg/connector/connector_new.go
central-controller/src/rsync/pkg/db/cluster.go
central-controller/src/rsync/pkg/gitops/emcogit/emcogit.go
central-controller/src/rsync/pkg/gitops/emcogithub/emcogithub.go
central-controller/src/rsync/pkg/gitops/gitsupport/gitsupport.go
central-controller/src/rsync/pkg/internal/utils/helpers.go
central-controller/src/rsync/pkg/plugins/azurearc/config.go
central-controller/src/rsync/pkg/plugins/fluxv2/config.go
central-controller/src/scc/api/controller_handler.go
central-controller/src/scc/go.mod
central-controller/src/scc/pkg/manager/certificate_objectmanager.go
central-controller/src/scc/pkg/manager/certutil.go
central-controller/src/scc/pkg/manager/controller_objectmanager.go
central-controller/src/scc/pkg/manager/dbutils.go
central-controller/src/scc/pkg/manager/device_objectmanager.go
central-controller/src/scc/pkg/manager/hub_objectmanager.go
central-controller/src/scc/pkg/manager/hubdevice_objectmanager.go
central-controller/src/scc/pkg/manager/overlay_objectmanager.go
central-controller/src/scc/pkg/manager/resutils.go
central-controller/src/scc/pkg/module/certificateobject.go
central-controller/src/scc/pkg/module/deviceobject.go
central-controller/src/scc/pkg/module/hubobject.go
central-controller/src/scc/tools/certctl/README
central-controller/src/scc/tools/certctl/certctl.go
central-controller/src/scc/tools/certctl/go.mod
central-controller/src/scc/tools/ewoctl/cmd/utils.go
central-controller/src/scc/tools/ewoctl/go.mod
central-controller/src/scc/tools/ewoctl/test-cases/cluster-sync-object.yaml [new file with mode: 0644]
central-controller/src/scc/tools/ewoctl/test-cases/prerequisites.yaml [new file with mode: 0644]
central-controller/src/scc/tools/ewoctl/test-cases/sample-edge-registration.yaml [new file with mode: 0644]
central-controller/src/scc/tools/ewoctl/test-cases/sample-hub-edge-connection-registration.yaml [new file with mode: 0644]
central-controller/src/scc/tools/ewoctl/test-cases/sample-hub-registration.yaml [new file with mode: 0644]
central-controller/src/vendor/gitlab.com/project-emco/core/emco-base/src/go.mod
central-controller/src/vendor/gitlab.com/project-emco/core/emco-base/src/orchestrator/go.mod
central-controller/src/vendor/gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/infra/logutils/logger.go
images/sdewan_overview.jpg [new file with mode: 0644]
platform/README.md
platform/cnf-openwrt/doc/Accelerated_by_Intel_QAT_Default.md [new file with mode: 0644]
platform/cnf-openwrt/doc/Accelerated_by_Intel_QAT_VF_Option.md [moved from platform/cnf-openwrt/doc/Accelerated_by_Intel_QAT.md with 100% similarity]
platform/cnf-openwrt/src/rest_v1/ipsec_rest.lua
platform/cnf-openwrt/src/rest_v1/utils.lua
platform/crd-ctrlr/examples/sdewan-controller.yaml
platform/crd-ctrlr/src/Makefile
platform/crd-ctrlr/src/PROJECT
platform/crd-ctrlr/src/api/v1alpha1/bucket_permission_webhook.go
platform/crd-ctrlr/src/api/v1alpha1/cnfhubsite_types.go
platform/crd-ctrlr/src/api/v1alpha1/cnfservice_types.go
platform/crd-ctrlr/src/api/v1alpha1/label_validate_webhook.go
platform/crd-ctrlr/src/api/v1alpha1/networkfirewallrule_types.go
platform/crd-ctrlr/src/api/v1alpha1/sdewanapplication_types.go
platform/crd-ctrlr/src/api/v1alpha1/zz_generated.deepcopy.go
platform/crd-ctrlr/src/basehandler/isdewanhandler.go
platform/crd-ctrlr/src/cnfprovider/openprovider.go
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_cnfhubsites.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_cnflocalservices.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_cnfnats.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_cnfrouterules.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_cnfroutes.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_cnfservices.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_cnfstatuses.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_firewalldnats.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_firewallforwardings.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_firewallrules.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_firewallsnats.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_firewallzones.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_ipsechosts.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_ipsecproposals.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_ipsecsites.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_mwan3policies.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_mwan3rules.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_networkfirewallrules.yaml
platform/crd-ctrlr/src/config/crd/bases/batch.sdewan.akraino.org_sdewanapplications.yaml
platform/crd-ctrlr/src/config/rbac/role.yaml
platform/crd-ctrlr/src/config/webhook/manifests.yaml
platform/crd-ctrlr/src/controllers/base_controller.go
platform/crd-ctrlr/src/controllers/cnfhubsite_controller.go
platform/crd-ctrlr/src/controllers/cnflocalservice_controller.go
platform/crd-ctrlr/src/controllers/cnfnat_controller.go
platform/crd-ctrlr/src/controllers/cnfroute_controller.go
platform/crd-ctrlr/src/controllers/cnfrouterule_controller.go
platform/crd-ctrlr/src/controllers/cnfservice_controller.go
platform/crd-ctrlr/src/controllers/firewalldnat_controller.go
platform/crd-ctrlr/src/controllers/firewallforwarding_controller.go
platform/crd-ctrlr/src/controllers/firewallrule_controller.go
platform/crd-ctrlr/src/controllers/firewallsnat_controller.go
platform/crd-ctrlr/src/controllers/firewallzone_controller.go
platform/crd-ctrlr/src/controllers/ipsechost_controller.go
platform/crd-ctrlr/src/controllers/ipsecproposal_controller.go
platform/crd-ctrlr/src/controllers/ipsecsite_controller.go
platform/crd-ctrlr/src/controllers/mwan3policy_controller.go
platform/crd-ctrlr/src/controllers/mwan3rule_controller.go
platform/crd-ctrlr/src/controllers/networkfirewallrule_controller.go
platform/crd-ctrlr/src/controllers/sdewanapplication_controller.go
platform/crd-ctrlr/src/go.mod
platform/crd-ctrlr/src/go.sum
platform/crd-ctrlr/src/main.go
platform/crd-ctrlr/src/openwrt/app.go
platform/crd-ctrlr/src/openwrt/firewall.go
platform/crd-ctrlr/src/openwrt/ipsec.go
platform/crd-ctrlr/src/openwrt/mwan3.go
platform/crd-ctrlr/src/openwrt/nat.go
platform/crd-ctrlr/src/openwrt/networkfirewall.go
platform/crd-ctrlr/src/openwrt/openwrtclient.go
platform/crd-ctrlr/src/openwrt/route.go
platform/crd-ctrlr/src/openwrt/routerule.go
platform/crd-ctrlr/src/openwrt/status.go
platform/crd-ctrlr/src/openwrt/svc.go
platform/deployment/README.md
platform/deployment/helm/sdewan_cnf/templates/deployment.yaml
platform/deployment/helm/sdewan_cnf/values.yaml
platform/deployment/helm/sdewan_controllers/templates/crd.yaml
platform/deployment/helm/sdewan_controllers/templates/role.yaml
platform/deployment/helm/sdewan_controllers/templates/webhook.yaml
platform/deployment/helm/sdewan_controllers/values.yaml
platform/images/cnf_overview.jpg [new file with mode: 0644]
platform/images/crd_controller_overview.jpg [new file with mode: 0644]
traffic-hub/README.md [deleted file]

index 19e5e31..4b0a62f 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,5 +1,9 @@
 # Introduction to Akraino ICN SD-EWAN solution
 
+SDEWAN is a solution to enable SDWAN functionalities include multiple WAN link support, WAN traffic management, NAT, firewall, IPSec and Traffic shaping etc. with focus to address the challenges when applying on edge computing environment like resource limitation, edge overlays, traffic sanitization, automation and cost sensitive etc. 
+
+<img src="./images/sdewan_overview.jpg" height="400" />
+
 SD-EWAN main functionalities include
 
 * IPsec tunnels across K8s clusters - Supporting multiple types of K8s clusters
@@ -19,23 +23,28 @@ SD-EWAN is based on set of Linux packages
 
 ## SD-EWAN in Akraino/ICN
 
-SD-EWAN functionalities are realized via CNF (Containerized Network Function)
-and deployed by K8s. SD-EWAN CNF leverages Linux kernel functionality for packet
+SD-EWAN functionalities are realized via three components: Central Controller, CNF (Containerized Network Function)
+and CRD controller that deployed through K8s. SD-EWAN CNF leverages Linux kernel functionality for packet
 processing of above functions. Actual CNF is set of user space processes
 consisting of fw3, mwan3, strongswan and others.
 
 SD-EWAN is considered as platform feature by ICN.
 
-Refer - https://www.linkedin.com/pulse/software-defined-edge-wan-edges-srinivasa-addepalli/
-
 ### platform
 SDEWAN platform features include cnf, cr definition and controller.
 
-### traffic-hub
-traffic-hub's high level design can be found at: https://www.linkedin.com/pulse/software-defined-edge-wan-central-control-traffic-hub-addepalli/
+CNF is implemented based on OpenWRT, it enhances OpenWRT Luci web interface with SDEWAN controllers to provide Restful API for network functions' configuration and control. 
+
+<img src="./platform/images/cnf_overview.jpg" height="300" />
+
+CRD controller is implemented as k8s CRD Controller, it manages CRDs (e.g. Firewall related CRDs, Mwan3 related CRDs and IpSec related CRDs etc.) and internally calls SDEWAN Restful API to do CNF configuration. And a remote client (e.g. SDEWAN Central Controller) can manage SDEWAN CNF configuration through creating/updating/deleting SDEWAN CRs.
+
+<img src="./platform/images/crd_controller_overview.jpg" height="250" />
 
 ### central-controller
-central-controller's high level design can be found at: https://www.linkedin.com/pulse/software-defined-edge-wan-central-control-traffic-hub-addepalli/
+central-controller provides central control of SDEWAN overlay networks by automatically configuring the SDEWAN CNFs through SDEWAN CRD controller located in edge location clusters and hub clusters.
+
+<img src="./central-controller/images/central_controller_overview.jpg" height="300" />
 
 ## Comprehensive Documentation
 - [How to use](platform/crd-ctrlr#deployment-guide)
index f0f53cb..2680474 100644 (file)
@@ -1,9 +1,9 @@
 # Steps to setup Overlay Controller cluster
 
-###Prerequisite
-**Install Kubernetes**
+## Prerequisite
+**Install Kubernetes(verified on v1.23.3)**
 
-###Install dependencies
+## Install dependencies
 **1. Install cert-manager**
 
 `$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.6.1/cert-manager.yaml`
 
 `$ kubectl create namespace sdewan-system`
 
-###Install CNF
-**Please follow the README.md under ../platform/cnf folder for installation**
+## Install CNF and CRD Controller
+**Please follow the README.md under ../platform/deployment folder for installation**
 
-###Install CRD Controller
-**Please follow the README.md under ../platform/crd-ctrlr folder for installation**
+## Install Overlay Controller Microservices
+**Please follow the README.md under ./deployments folder for installation**
 
-###Install Overlay Controller Microservices
-**Please follow the README.md under deployments folder for installation**
+## Install Monitor
+**Please follow the README.md under ./deployments/kubernetes/monitor-deploy folder for installation**
 
-###Configurations for Overlay Controller
+## Configurations for Overlay Controller
 **1. Routing rule**
 
 **2. Local cluster registration**
index 0f5b03b..86076c4 100644 (file)
@@ -7,7 +7,7 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-FROM golang:1.17-alpine
+FROM golang:1.18-alpine3.16
 
 RUN apk update \
     && apk add --no-cache make
@@ -18,7 +18,14 @@ RUN cd src/scc && make all
 RUN cd src/rsync && make all
 RUN cd src/monitor && make all
 
-FROM alpine:3.15
+FROM alpine:3.16.0
+
+RUN echo "https://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories
+RUN apk del busybox \
+    && apk update \
+    && apk add openssl=1.1.1q-r0 \
+    && apk add busybox=1.35.0-r18 \
+    && rm /usr/bin/ssl_client
 
 WORKDIR /opt/scc
 RUN addgroup -S scc && adduser -S -G scc scc
index 5e14c39..c19afb7 100644 (file)
@@ -1,28 +1,26 @@
 # Steps for running v1 API microservices
+Note: Currently we support two kinds of configuration way: Push mode and Pull mode.
 
-### Precondition
-**1. Install cert-manager**
+Push mode: Configurations that generated by SDEWAN Central Controller will be directly pushed to hub/edge cluster using their kubeconfig which
+they provided in the registration. Extra control plane tunnel will be established between Central Controller and edge which does not have a public
+IP address.
 
-`$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.6.1/cert-manager.yaml`
+Pull mode: Configurations will be pushed to public githubs. Hub/edge cluster will pull the configurations from certain directory based on the GitOps
+setting(e.g. Fluxv2 configuration) to build up tunnels for data transfer. Hub/edge cluster need to register with pull mode while using that.
 
 ### Steps to install packages from yaml
-**1. Create namespace for SDEWAN Central Controller v1Microservices**
 
-`$cd kubernetes`
-`$ kubectl create namespace sdewan-system`
+**1. Create Databases used by SDEWAN Central Controller v1 Microservices for Etcd and Mongo**
 
-**2. Create Databases used by SDEWAN Central Controller v1 Microservices for Etcd and Mongo**
+```
+$ kubectl apply -f scc_secret.yaml -n sdewan-system
+$ kubectl apply -f scc_mongo.yaml -n sdewan-system
+$ kubectl apply -f scc_etcd.yaml -n sdewan-system
+```
 
-`$ kubectl apply -f scc_secret.yaml -n sdewan-system`
-`$ kubectl apply -f scc_etcd.yaml -n sdewan-system`
-`$ kubectl apply -f scc_mongo.yaml -n sdewan-system`
+**2. create SDEWAN Central Controller v1 Microservices**
 
-**3. create SDEWAN Central Controller v1 Microservices**
-
-`$ kubectl apply -f scc.yaml -n sdewan-system`
-
-`$ kubectl apply -f scc_rsync.yaml -n sdewan-system`
-
-**4. install monitor resources**
-
-`$ kubectl apply -f monitor-deploy.yaml -n sdewan-sysyem`
+```
+$ kubectl apply -f scc.yaml -n sdewan-system
+$ kubectl apply -f scc_rsync.yaml -n sdewan-system
+```
diff --git a/central-controller/deployments/kubernetes/monitor-deploy.yaml b/central-controller/deployments/kubernetes/monitor-deploy.yaml
deleted file mode 100644 (file)
index d459330..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-# SPDX-License-Identifier: Apache-2.0
-# Copyright (c) 2020 Intel Corporation
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: Role
-metadata:
-  creationTimestamp: null
-  name: monitor
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - pods
-  - services
-  - endpoints
-  - persistentvolumeclaims
-  - events
-  - configmaps
-  - secrets
-  verbs:
-  - '*'
-- apiGroups:
-  - apps
-  resources:
-  - deployments
-  - daemonsets
-  - replicasets
-  - statefulsets
-  verbs:
-  - '*'
-- apiGroups:
-  - monitoring.coreos.com
-  resources:
-  - servicemonitors
-  verbs:
-  - get
-  - create
-- apiGroups:
-  - apps
-  resourceNames:
-  - monitor
-  resources:
-  - deployments/finalizers
-  verbs:
-  - update
-- apiGroups:
-  - ""
-  resources:
-  - pods
-  verbs:
-  - get
-- apiGroups:
-  - apps
-  resources:
-  - replicasets
-  verbs:
-  - get
-- apiGroups:
-  - k8splugin.io
-  resources:
-  - '*'
-  verbs:
-  - '*'
-- apiGroups:
-  - batch
-  resources:
-  - '*'
-  verbs:
-  - '*'
-- apiGroups:
-  - extensions
-  resources:
-  - '*'
-  verbs:
-  - '*'
-- apiGroups:
-  - certificates.k8s.io
-  resources:
-  - '*'
-  verbs:
-  - '*'
-
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  creationTimestamp: null
-  name: monitor
-rules:
-- apiGroups:
-  - ""
-  resources:
-  - pods
-  - services
-  - endpoints
-  - persistentvolumeclaims
-  - events
-  - configmaps
-  - secrets
-  - resourcequotas
-  verbs:
-  - '*'
-- apiGroups:
-  - apps
-  resources:
-  - deployments
-  - daemonsets
-  - replicasets
-  - statefulsets
-  verbs:
-  - '*'
-- apiGroups:
-  - monitoring.coreos.com
-  resources:
-  - servicemonitors
-  verbs:
-  - get
-  - create
-- apiGroups:
-  - apps
-  resourceNames:
-  - monitor
-  resources:
-  - deployments/finalizers
-  verbs:
-  - update
-- apiGroups:
-  - ""
-  resources:
-  - pods
-  verbs:
-  - get
-- apiGroups:
-  - apps
-  resources:
-  - replicasets
-  verbs:
-  - get
-- apiGroups:
-  - k8splugin.io
-  resources:
-  - '*'
-  verbs:
-  - '*'
-- apiGroups:
-  - batch
-  resources:
-  - '*'
-  verbs:
-  - '*'
-- apiGroups:
-  - extensions
-  resources:
-  - '*'
-  verbs:
-  - '*'
-- apiGroups:
-  - rbac.authorization.k8s.io
-  resources:
-  - '*'
-  verbs:
-  - '*'
-- apiGroups:
-  - certificates.k8s.io
-  resources:
-  - '*'
-  verbs:
-  - '*'
-
----
-kind: RoleBinding
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: monitor
-subjects:
-- kind: ServiceAccount
-  name: monitor
-roleRef:
-  kind: Role
-  name: monitor
-  apiGroup: rbac.authorization.k8s.io
-
----
-kind: ClusterRoleBinding
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
-  name: monitor
-subjects:
-- kind: ServiceAccount
-  name: monitor
-  namespace: default
-roleRef:
-  kind: ClusterRole
-  name: monitor
-  apiGroup: rbac.authorization.k8s.io
-
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  name: monitor
-
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: monitor
-  labels:
-    "emco/deployment-id": "monitor"
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      "emco/deployment-id": "monitor"
-  template:
-    metadata:
-      labels:
-        "emco/deployment-id": "monitor"
-    spec:
-      serviceAccountName: monitor
-      containers:
-        - name: monitor
-          # Replace this with the built image name
-          image: scc:latest
-          command: ["/opt/scc/entrypoint", "monitor"]
-          imagePullPolicy: IfNotPresent
-          env:
-            - name: WATCH_NAMESPACE
-              value: ""
-            - name: POD_NAME
-              valueFrom:
-                fieldRef:
-                  fieldPath: metadata.name
-            - name: OPERATOR_NAME
-              value: "monitor"
-
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  name: resourcebundlestates.k8splugin.io
-spec:
-  group: k8splugin.io
-  names:
-    kind: ResourceBundleState
-    listKind: ResourceBundleStateList
-    plural: resourcebundlestates
-    singular: resourcebundlestate
-  scope: Namespaced
-  versions:
-  - name: v1alpha1
-    schema:
-      openAPIV3Schema:
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-            of an object. Servers should convert recognized schemas to the latest
-            internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-            object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            properties:
-              selector:
-                type: object
-            required:
-            - selector
-            type: object
-          status:
-            properties:
-              podStatuses:
-                items:
-                  type: object
-                type: array
-              ready:
-                type: boolean
-              resourceCount:
-                format: int32
-                type: integer
-              serviceStatuses:
-                items:
-                  type: object
-                type: array
-              configMapStatuses:
-                items:
-                  type: object
-                type: array
-              deploymentStatuses:
-                items:
-                  type: object
-                type: array
-              secretStatuses:
-                items:
-                  type: object
-                type: array
-              daemonSetStatuses:
-                items:
-                  type: object
-                type: array
-              ingressStatuses:
-                items:
-                  type: object
-                type: array
-              jobStatuses:
-                items:
-                  type: object
-                type: array
-              statefulSetStatuses:
-                items:
-                  type: object
-                type: array
-              csrStatuses:
-                items:
-                  type: object
-                type: array
-            required:
-            - ready
-            - resourceCount
-            - podStatuses
-            - serviceStatuses
-            - configMapStatuses
-            - deploymentStatuses
-            - secretStatuses
-            - daemonSetStatuses
-            - ingressStatuses
-            - jobStatuses
-            - statefulSetStatuses
-            - csrStatuses
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
diff --git a/central-controller/deployments/kubernetes/monitor-deploy/README.md b/central-controller/deployments/kubernetes/monitor-deploy/README.md
new file mode 100644 (file)
index 0000000..ce1811d
--- /dev/null
@@ -0,0 +1,62 @@
+# Deploying monitor in clusters
+
+Now monitor can be deployed in either push mode or pull mode.
+If the monitor is deployed in pull mode, the user need to fill in the monitor_configs file with GitOps information including:
+- username: the username used for the github/gitlab account
+- token: the personal access token used for github/gitlab. User can apply thru https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
+> Note: Token expiration time should be set less than 30 days. And scopes including repo, workflow, gist, project must be enabled for the access token
+- repo: the repo name that the gitops configs will be uploaded to. e.g. "test-repo"
+- clustername: the path where the gitops configs will be uploaded to. Please follow the 
+format like this: akraino_scc_<overlay_name>+<device_name>
+
+In the meanwhile, you can use the following command to install flux on your device(on the host)
+Please execute both commands on your kubernetes master node.
+
+## Prerequisites(ONLY needed in Pull mode)
+### 1. Install flux components
+```
+brew install fluxcd/tap/flux
+```
+
+Note: If you need proxy to access github, you may need to customize flux like this:
+```   
+       apiVersion: kustomize.config.k8s.io/v1beta1
+       kind: Kustomization
+       resources:
+         - gotk-components.yaml
+         - gotk-sync.yaml
+       patches:
+         - patch: |
+             apiVersion: apps/v1
+             kind: Deployment
+             metadata:
+               name: all
+             spec:
+               template:
+                 spec:
+                   containers:
+                     - name: manager
+                       env:
+                         - name: "HTTPS_PROXY"
+                           value: "http://proxy.example.com:3129"
+                         - name: "NO_PROXY"
+                           value: ".cluster.local.,.cluster.local,.svc"      
+           target:
+             kind: Deployment
+             labelSelector: app.kubernetes.io/part-of=flux
+```
+
+### 2. Bootstrap flux repo
+```
+flux bootstrap github --owner=<username> --repository=<repo> --branch=<branch> --path=./clusters/<clustername> --personal
+```
+
+### 3. Fill in the monitor_configs file for GitOps information
+
+
+## Install Monitor
+**Use the monitor-deploy.sh to install the monitor components.**
+
+```
+bash monitor-deploy.sh
+```
diff --git a/central-controller/deployments/kubernetes/monitor-deploy/monitor-deploy-pullmode.yaml b/central-controller/deployments/kubernetes/monitor-deploy/monitor-deploy-pullmode.yaml
new file mode 100644 (file)
index 0000000..ef0ca43
--- /dev/null
@@ -0,0 +1,17069 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2022 Intel Corporation
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  annotations:
+    controller-gen.kubebuilder.io/version: v0.7.0
+  creationTimestamp: null
+  name: resourcebundlestates.k8splugin.io
+spec:
+  group: k8splugin.io
+  names:
+    kind: ResourceBundleState
+    listKind: ResourceBundleStateList
+    plural: resourcebundlestates
+    singular: resourcebundlestate
+  scope: Namespaced
+  versions:
+  - name: v1alpha1
+    schema:
+      openAPIV3Schema:
+        properties:
+          apiVersion:
+            type: string
+          kind:
+            type: string
+          metadata:
+            type: object
+          spec:
+            properties:
+              selector:
+                properties:
+                  matchExpressions:
+                    items:
+                      properties:
+                        key:
+                          type: string
+                        operator:
+                          type: string
+                        values:
+                          items:
+                            type: string
+                          type: array
+                      required:
+                      - key
+                      - operator
+                      type: object
+                    type: array
+                  matchLabels:
+                    additionalProperties:
+                      type: string
+                    type: object
+                type: object
+            required:
+            - selector
+            type: object
+          status:
+            properties:
+              configMapStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    binaryData:
+                      additionalProperties:
+                        format: byte
+                        type: string
+                      type: object
+                    data:
+                      additionalProperties:
+                        type: string
+                      type: object
+                    immutable:
+                      type: boolean
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                  type: object
+                type: array
+              csrStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        expirationSeconds:
+                          format: int32
+                          type: integer
+                        extra:
+                          additionalProperties:
+                            items:
+                              type: string
+                            type: array
+                          type: object
+                        groups:
+                          items:
+                            type: string
+                          type: array
+                          x-kubernetes-list-type: atomic
+                        request:
+                          format: byte
+                          type: string
+                        signerName:
+                          type: string
+                        uid:
+                          type: string
+                        usages:
+                          items:
+                            type: string
+                          type: array
+                          x-kubernetes-list-type: atomic
+                        username:
+                          type: string
+                      required:
+                      - request
+                      - signerName
+                      type: object
+                    status:
+                      properties:
+                        certificate:
+                          format: byte
+                          type: string
+                        conditions:
+                          items:
+                            properties:
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              lastUpdateTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                          - type
+                          x-kubernetes-list-type: map
+                      type: object
+                  required:
+                  - spec
+                  type: object
+                type: array
+              daemonSetStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        minReadySeconds:
+                          format: int32
+                          type: integer
+                        revisionHistoryLimit:
+                          format: int32
+                          type: integer
+                        selector:
+                          properties:
+                            matchExpressions:
+                              items:
+                                properties:
+                                  key:
+                                    type: string
+                                  operator:
+                                    type: string
+                                  values:
+                                    items:
+                                      type: string
+                                    type: array
+                                required:
+                                - key
+                                - operator
+                                type: object
+                              type: array
+                            matchLabels:
+                              additionalProperties:
+                                type: string
+                              type: object
+                          type: object
+                        template:
+                          properties:
+                            metadata:
+                              properties:
+                                annotations:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                finalizers:
+                                  items:
+                                    type: string
+                                  type: array
+                                labels:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                name:
+                                  type: string
+                                namespace:
+                                  type: string
+                              type: object
+                            spec:
+                              properties:
+                                activeDeadlineSeconds:
+                                  format: int64
+                                  type: integer
+                                affinity:
+                                  properties:
+                                    nodeAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              preference:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - preference
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          properties:
+                                            nodeSelectorTerms:
+                                              items:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              type: array
+                                          required:
+                                          - nodeSelectorTerms
+                                          type: object
+                                      type: object
+                                    podAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                    podAntiAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                  type: object
+                                automountServiceAccountToken:
+                                  type: boolean
+                                containers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                dnsConfig:
+                                  properties:
+                                    nameservers:
+                                      items:
+                                        type: string
+                                      type: array
+                                    options:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        type: object
+                                      type: array
+                                    searches:
+                                      items:
+                                        type: string
+                                      type: array
+                                  type: object
+                                dnsPolicy:
+                                  type: string
+                                enableServiceLinks:
+                                  type: boolean
+                                ephemeralContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      targetContainerName:
+                                        type: string
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                hostAliases:
+                                  items:
+                                    properties:
+                                      hostnames:
+                                        items:
+                                          type: string
+                                        type: array
+                                      ip:
+                                        type: string
+                                    type: object
+                                  type: array
+                                hostIPC:
+                                  type: boolean
+                                hostNetwork:
+                                  type: boolean
+                                hostPID:
+                                  type: boolean
+                                hostname:
+                                  type: string
+                                imagePullSecrets:
+                                  items:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  type: array
+                                initContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                nodeName:
+                                  type: string
+                                nodeSelector:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                  x-kubernetes-map-type: atomic
+                                os:
+                                  properties:
+                                    name:
+                                      type: string
+                                  required:
+                                  - name
+                                  type: object
+                                overhead:
+                                  additionalProperties:
+                                    anyOf:
+                                    - type: integer
+                                    - type: string
+                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                    x-kubernetes-int-or-string: true
+                                  type: object
+                                preemptionPolicy:
+                                  type: string
+                                priority:
+                                  format: int32
+                                  type: integer
+                                priorityClassName:
+                                  type: string
+                                readinessGates:
+                                  items:
+                                    properties:
+                                      conditionType:
+                                        type: string
+                                    required:
+                                    - conditionType
+                                    type: object
+                                  type: array
+                                restartPolicy:
+                                  type: string
+                                runtimeClassName:
+                                  type: string
+                                schedulerName:
+                                  type: string
+                                securityContext:
+                                  properties:
+                                    fsGroup:
+                                      format: int64
+                                      type: integer
+                                    fsGroupChangePolicy:
+                                      type: string
+                                    runAsGroup:
+                                      format: int64
+                                      type: integer
+                                    runAsNonRoot:
+                                      type: boolean
+                                    runAsUser:
+                                      format: int64
+                                      type: integer
+                                    seLinuxOptions:
+                                      properties:
+                                        level:
+                                          type: string
+                                        role:
+                                          type: string
+                                        type:
+                                          type: string
+                                        user:
+                                          type: string
+                                      type: object
+                                    seccompProfile:
+                                      properties:
+                                        localhostProfile:
+                                          type: string
+                                        type:
+                                          type: string
+                                      required:
+                                      - type
+                                      type: object
+                                    supplementalGroups:
+                                      items:
+                                        format: int64
+                                        type: integer
+                                      type: array
+                                    sysctls:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        required:
+                                        - name
+                                        - value
+                                        type: object
+                                      type: array
+                                    windowsOptions:
+                                      properties:
+                                        gmsaCredentialSpec:
+                                          type: string
+                                        gmsaCredentialSpecName:
+                                          type: string
+                                        hostProcess:
+                                          type: boolean
+                                        runAsUserName:
+                                          type: string
+                                      type: object
+                                  type: object
+                                serviceAccount:
+                                  type: string
+                                serviceAccountName:
+                                  type: string
+                                setHostnameAsFQDN:
+                                  type: boolean
+                                shareProcessNamespace:
+                                  type: boolean
+                                subdomain:
+                                  type: string
+                                terminationGracePeriodSeconds:
+                                  format: int64
+                                  type: integer
+                                tolerations:
+                                  items:
+                                    properties:
+                                      effect:
+                                        type: string
+                                      key:
+                                        type: string
+                                      operator:
+                                        type: string
+                                      tolerationSeconds:
+                                        format: int64
+                                        type: integer
+                                      value:
+                                        type: string
+                                    type: object
+                                  type: array
+                                topologySpreadConstraints:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      maxSkew:
+                                        format: int32
+                                        type: integer
+                                      topologyKey:
+                                        type: string
+                                      whenUnsatisfiable:
+                                        type: string
+                                    required:
+                                    - maxSkew
+                                    - topologyKey
+                                    - whenUnsatisfiable
+                                    type: object
+                                  type: array
+                                  x-kubernetes-list-map-keys:
+                                  - topologyKey
+                                  - whenUnsatisfiable
+                                  x-kubernetes-list-type: map
+                                volumes:
+                                  items:
+                                    properties:
+                                      awsElasticBlockStore:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      azureDisk:
+                                        properties:
+                                          cachingMode:
+                                            type: string
+                                          diskName:
+                                            type: string
+                                          diskURI:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          kind:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - diskName
+                                        - diskURI
+                                        type: object
+                                      azureFile:
+                                        properties:
+                                          readOnly:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                          shareName:
+                                            type: string
+                                        required:
+                                        - secretName
+                                        - shareName
+                                        type: object
+                                      cephfs:
+                                        properties:
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretFile:
+                                            type: string
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - monitors
+                                        type: object
+                                      cinder:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      configMap:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          name:
+                                            type: string
+                                          optional:
+                                            type: boolean
+                                        type: object
+                                      csi:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          nodePublishSecretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          volumeAttributes:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      downwardAPI:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                              required:
+                                              - path
+                                              type: object
+                                            type: array
+                                        type: object
+                                      emptyDir:
+                                        properties:
+                                          medium:
+                                            type: string
+                                          sizeLimit:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                            x-kubernetes-int-or-string: true
+                                        type: object
+                                      ephemeral:
+                                        properties:
+                                          volumeClaimTemplate:
+                                            properties:
+                                              metadata:
+                                                properties:
+                                                  annotations:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  finalizers:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  labels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  name:
+                                                    type: string
+                                                  namespace:
+                                                    type: string
+                                                type: object
+                                              spec:
+                                                properties:
+                                                  accessModes:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  dataSource:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  dataSourceRef:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  resources:
+                                                    properties:
+                                                      limits:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                      requests:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                    type: object
+                                                  selector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  storageClassName:
+                                                    type: string
+                                                  volumeMode:
+                                                    type: string
+                                                  volumeName:
+                                                    type: string
+                                                type: object
+                                            required:
+                                            - spec
+                                            type: object
+                                        type: object
+                                      fc:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          targetWWNs:
+                                            items:
+                                              type: string
+                                            type: array
+                                          wwids:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      flexVolume:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          options:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      flocker:
+                                        properties:
+                                          datasetName:
+                                            type: string
+                                          datasetUUID:
+                                            type: string
+                                        type: object
+                                      gcePersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          pdName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - pdName
+                                        type: object
+                                      gitRepo:
+                                        properties:
+                                          directory:
+                                            type: string
+                                          repository:
+                                            type: string
+                                          revision:
+                                            type: string
+                                        required:
+                                        - repository
+                                        type: object
+                                      glusterfs:
+                                        properties:
+                                          endpoints:
+                                            type: string
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - endpoints
+                                        - path
+                                        type: object
+                                      hostPath:
+                                        properties:
+                                          path:
+                                            type: string
+                                          type:
+                                            type: string
+                                        required:
+                                        - path
+                                        type: object
+                                      iscsi:
+                                        properties:
+                                          chapAuthDiscovery:
+                                            type: boolean
+                                          chapAuthSession:
+                                            type: boolean
+                                          fsType:
+                                            type: string
+                                          initiatorName:
+                                            type: string
+                                          iqn:
+                                            type: string
+                                          iscsiInterface:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          portals:
+                                            items:
+                                              type: string
+                                            type: array
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          targetPortal:
+                                            type: string
+                                        required:
+                                        - iqn
+                                        - lun
+                                        - targetPortal
+                                        type: object
+                                      name:
+                                        type: string
+                                      nfs:
+                                        properties:
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          server:
+                                            type: string
+                                        required:
+                                        - path
+                                        - server
+                                        type: object
+                                      persistentVolumeClaim:
+                                        properties:
+                                          claimName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - claimName
+                                        type: object
+                                      photonPersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          pdID:
+                                            type: string
+                                        required:
+                                        - pdID
+                                        type: object
+                                      portworxVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      projected:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          sources:
+                                            items:
+                                              properties:
+                                                configMap:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                downwardAPI:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          fieldRef:
+                                                            properties:
+                                                              apiVersion:
+                                                                type: string
+                                                              fieldPath:
+                                                                type: string
+                                                            required:
+                                                            - fieldPath
+                                                            type: object
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                          resourceFieldRef:
+                                                            properties:
+                                                              containerName:
+                                                                type: string
+                                                              divisor:
+                                                                anyOf:
+                                                                - type: integer
+                                                                - type: string
+                                                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                                x-kubernetes-int-or-string: true
+                                                              resource:
+                                                                type: string
+                                                            required:
+                                                            - resource
+                                                            type: object
+                                                        required:
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                  type: object
+                                                secret:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                serviceAccountToken:
+                                                  properties:
+                                                    audience:
+                                                      type: string
+                                                    expirationSeconds:
+                                                      format: int64
+                                                      type: integer
+                                                    path:
+                                                      type: string
+                                                  required:
+                                                  - path
+                                                  type: object
+                                              type: object
+                                            type: array
+                                        type: object
+                                      quobyte:
+                                        properties:
+                                          group:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          registry:
+                                            type: string
+                                          tenant:
+                                            type: string
+                                          user:
+                                            type: string
+                                          volume:
+                                            type: string
+                                        required:
+                                        - registry
+                                        - volume
+                                        type: object
+                                      rbd:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          image:
+                                            type: string
+                                          keyring:
+                                            type: string
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          pool:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - image
+                                        - monitors
+                                        type: object
+                                      scaleIO:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          gateway:
+                                            type: string
+                                          protectionDomain:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          sslEnabled:
+                                            type: boolean
+                                          storageMode:
+                                            type: string
+                                          storagePool:
+                                            type: string
+                                          system:
+                                            type: string
+                                          volumeName:
+                                            type: string
+                                        required:
+                                        - gateway
+                                        - secretRef
+                                        - system
+                                        type: object
+                                      secret:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          optional:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                        type: object
+                                      storageos:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeName:
+                                            type: string
+                                          volumeNamespace:
+                                            type: string
+                                        type: object
+                                      vsphereVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          storagePolicyID:
+                                            type: string
+                                          storagePolicyName:
+                                            type: string
+                                          volumePath:
+                                            type: string
+                                        required:
+                                        - volumePath
+                                        type: object
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                              required:
+                              - containers
+                              type: object
+                          type: object
+                        updateStrategy:
+                          properties:
+                            rollingUpdate:
+                              properties:
+                                maxSurge:
+                                  anyOf:
+                                  - type: integer
+                                  - type: string
+                                  x-kubernetes-int-or-string: true
+                                maxUnavailable:
+                                  anyOf:
+                                  - type: integer
+                                  - type: string
+                                  x-kubernetes-int-or-string: true
+                              type: object
+                            type:
+                              type: string
+                          type: object
+                      required:
+                      - selector
+                      - template
+                      type: object
+                    status:
+                      properties:
+                        collisionCount:
+                          format: int32
+                          type: integer
+                        conditions:
+                          items:
+                            properties:
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                        currentNumberScheduled:
+                          format: int32
+                          type: integer
+                        desiredNumberScheduled:
+                          format: int32
+                          type: integer
+                        numberAvailable:
+                          format: int32
+                          type: integer
+                        numberMisscheduled:
+                          format: int32
+                          type: integer
+                        numberReady:
+                          format: int32
+                          type: integer
+                        numberUnavailable:
+                          format: int32
+                          type: integer
+                        observedGeneration:
+                          format: int64
+                          type: integer
+                        updatedNumberScheduled:
+                          format: int32
+                          type: integer
+                      required:
+                      - currentNumberScheduled
+                      - desiredNumberScheduled
+                      - numberMisscheduled
+                      - numberReady
+                      type: object
+                  type: object
+                type: array
+              deploymentStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        minReadySeconds:
+                          format: int32
+                          type: integer
+                        paused:
+                          type: boolean
+                        progressDeadlineSeconds:
+                          format: int32
+                          type: integer
+                        replicas:
+                          format: int32
+                          type: integer
+                        revisionHistoryLimit:
+                          format: int32
+                          type: integer
+                        selector:
+                          properties:
+                            matchExpressions:
+                              items:
+                                properties:
+                                  key:
+                                    type: string
+                                  operator:
+                                    type: string
+                                  values:
+                                    items:
+                                      type: string
+                                    type: array
+                                required:
+                                - key
+                                - operator
+                                type: object
+                              type: array
+                            matchLabels:
+                              additionalProperties:
+                                type: string
+                              type: object
+                          type: object
+                        strategy:
+                          properties:
+                            rollingUpdate:
+                              properties:
+                                maxSurge:
+                                  anyOf:
+                                  - type: integer
+                                  - type: string
+                                  x-kubernetes-int-or-string: true
+                                maxUnavailable:
+                                  anyOf:
+                                  - type: integer
+                                  - type: string
+                                  x-kubernetes-int-or-string: true
+                              type: object
+                            type:
+                              type: string
+                          type: object
+                        template:
+                          properties:
+                            metadata:
+                              properties:
+                                annotations:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                finalizers:
+                                  items:
+                                    type: string
+                                  type: array
+                                labels:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                name:
+                                  type: string
+                                namespace:
+                                  type: string
+                              type: object
+                            spec:
+                              properties:
+                                activeDeadlineSeconds:
+                                  format: int64
+                                  type: integer
+                                affinity:
+                                  properties:
+                                    nodeAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              preference:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - preference
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          properties:
+                                            nodeSelectorTerms:
+                                              items:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              type: array
+                                          required:
+                                          - nodeSelectorTerms
+                                          type: object
+                                      type: object
+                                    podAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                    podAntiAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                  type: object
+                                automountServiceAccountToken:
+                                  type: boolean
+                                containers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                dnsConfig:
+                                  properties:
+                                    nameservers:
+                                      items:
+                                        type: string
+                                      type: array
+                                    options:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        type: object
+                                      type: array
+                                    searches:
+                                      items:
+                                        type: string
+                                      type: array
+                                  type: object
+                                dnsPolicy:
+                                  type: string
+                                enableServiceLinks:
+                                  type: boolean
+                                ephemeralContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      targetContainerName:
+                                        type: string
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                hostAliases:
+                                  items:
+                                    properties:
+                                      hostnames:
+                                        items:
+                                          type: string
+                                        type: array
+                                      ip:
+                                        type: string
+                                    type: object
+                                  type: array
+                                hostIPC:
+                                  type: boolean
+                                hostNetwork:
+                                  type: boolean
+                                hostPID:
+                                  type: boolean
+                                hostname:
+                                  type: string
+                                imagePullSecrets:
+                                  items:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  type: array
+                                initContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                nodeName:
+                                  type: string
+                                nodeSelector:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                  x-kubernetes-map-type: atomic
+                                os:
+                                  properties:
+                                    name:
+                                      type: string
+                                  required:
+                                  - name
+                                  type: object
+                                overhead:
+                                  additionalProperties:
+                                    anyOf:
+                                    - type: integer
+                                    - type: string
+                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                    x-kubernetes-int-or-string: true
+                                  type: object
+                                preemptionPolicy:
+                                  type: string
+                                priority:
+                                  format: int32
+                                  type: integer
+                                priorityClassName:
+                                  type: string
+                                readinessGates:
+                                  items:
+                                    properties:
+                                      conditionType:
+                                        type: string
+                                    required:
+                                    - conditionType
+                                    type: object
+                                  type: array
+                                restartPolicy:
+                                  type: string
+                                runtimeClassName:
+                                  type: string
+                                schedulerName:
+                                  type: string
+                                securityContext:
+                                  properties:
+                                    fsGroup:
+                                      format: int64
+                                      type: integer
+                                    fsGroupChangePolicy:
+                                      type: string
+                                    runAsGroup:
+                                      format: int64
+                                      type: integer
+                                    runAsNonRoot:
+                                      type: boolean
+                                    runAsUser:
+                                      format: int64
+                                      type: integer
+                                    seLinuxOptions:
+                                      properties:
+                                        level:
+                                          type: string
+                                        role:
+                                          type: string
+                                        type:
+                                          type: string
+                                        user:
+                                          type: string
+                                      type: object
+                                    seccompProfile:
+                                      properties:
+                                        localhostProfile:
+                                          type: string
+                                        type:
+                                          type: string
+                                      required:
+                                      - type
+                                      type: object
+                                    supplementalGroups:
+                                      items:
+                                        format: int64
+                                        type: integer
+                                      type: array
+                                    sysctls:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        required:
+                                        - name
+                                        - value
+                                        type: object
+                                      type: array
+                                    windowsOptions:
+                                      properties:
+                                        gmsaCredentialSpec:
+                                          type: string
+                                        gmsaCredentialSpecName:
+                                          type: string
+                                        hostProcess:
+                                          type: boolean
+                                        runAsUserName:
+                                          type: string
+                                      type: object
+                                  type: object
+                                serviceAccount:
+                                  type: string
+                                serviceAccountName:
+                                  type: string
+                                setHostnameAsFQDN:
+                                  type: boolean
+                                shareProcessNamespace:
+                                  type: boolean
+                                subdomain:
+                                  type: string
+                                terminationGracePeriodSeconds:
+                                  format: int64
+                                  type: integer
+                                tolerations:
+                                  items:
+                                    properties:
+                                      effect:
+                                        type: string
+                                      key:
+                                        type: string
+                                      operator:
+                                        type: string
+                                      tolerationSeconds:
+                                        format: int64
+                                        type: integer
+                                      value:
+                                        type: string
+                                    type: object
+                                  type: array
+                                topologySpreadConstraints:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      maxSkew:
+                                        format: int32
+                                        type: integer
+                                      topologyKey:
+                                        type: string
+                                      whenUnsatisfiable:
+                                        type: string
+                                    required:
+                                    - maxSkew
+                                    - topologyKey
+                                    - whenUnsatisfiable
+                                    type: object
+                                  type: array
+                                  x-kubernetes-list-map-keys:
+                                  - topologyKey
+                                  - whenUnsatisfiable
+                                  x-kubernetes-list-type: map
+                                volumes:
+                                  items:
+                                    properties:
+                                      awsElasticBlockStore:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      azureDisk:
+                                        properties:
+                                          cachingMode:
+                                            type: string
+                                          diskName:
+                                            type: string
+                                          diskURI:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          kind:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - diskName
+                                        - diskURI
+                                        type: object
+                                      azureFile:
+                                        properties:
+                                          readOnly:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                          shareName:
+                                            type: string
+                                        required:
+                                        - secretName
+                                        - shareName
+                                        type: object
+                                      cephfs:
+                                        properties:
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretFile:
+                                            type: string
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - monitors
+                                        type: object
+                                      cinder:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      configMap:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          name:
+                                            type: string
+                                          optional:
+                                            type: boolean
+                                        type: object
+                                      csi:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          nodePublishSecretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          volumeAttributes:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      downwardAPI:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                              required:
+                                              - path
+                                              type: object
+                                            type: array
+                                        type: object
+                                      emptyDir:
+                                        properties:
+                                          medium:
+                                            type: string
+                                          sizeLimit:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                            x-kubernetes-int-or-string: true
+                                        type: object
+                                      ephemeral:
+                                        properties:
+                                          volumeClaimTemplate:
+                                            properties:
+                                              metadata:
+                                                properties:
+                                                  annotations:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  finalizers:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  labels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  name:
+                                                    type: string
+                                                  namespace:
+                                                    type: string
+                                                type: object
+                                              spec:
+                                                properties:
+                                                  accessModes:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  dataSource:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  dataSourceRef:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  resources:
+                                                    properties:
+                                                      limits:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                      requests:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                    type: object
+                                                  selector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  storageClassName:
+                                                    type: string
+                                                  volumeMode:
+                                                    type: string
+                                                  volumeName:
+                                                    type: string
+                                                type: object
+                                            required:
+                                            - spec
+                                            type: object
+                                        type: object
+                                      fc:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          targetWWNs:
+                                            items:
+                                              type: string
+                                            type: array
+                                          wwids:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      flexVolume:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          options:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      flocker:
+                                        properties:
+                                          datasetName:
+                                            type: string
+                                          datasetUUID:
+                                            type: string
+                                        type: object
+                                      gcePersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          pdName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - pdName
+                                        type: object
+                                      gitRepo:
+                                        properties:
+                                          directory:
+                                            type: string
+                                          repository:
+                                            type: string
+                                          revision:
+                                            type: string
+                                        required:
+                                        - repository
+                                        type: object
+                                      glusterfs:
+                                        properties:
+                                          endpoints:
+                                            type: string
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - endpoints
+                                        - path
+                                        type: object
+                                      hostPath:
+                                        properties:
+                                          path:
+                                            type: string
+                                          type:
+                                            type: string
+                                        required:
+                                        - path
+                                        type: object
+                                      iscsi:
+                                        properties:
+                                          chapAuthDiscovery:
+                                            type: boolean
+                                          chapAuthSession:
+                                            type: boolean
+                                          fsType:
+                                            type: string
+                                          initiatorName:
+                                            type: string
+                                          iqn:
+                                            type: string
+                                          iscsiInterface:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          portals:
+                                            items:
+                                              type: string
+                                            type: array
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          targetPortal:
+                                            type: string
+                                        required:
+                                        - iqn
+                                        - lun
+                                        - targetPortal
+                                        type: object
+                                      name:
+                                        type: string
+                                      nfs:
+                                        properties:
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          server:
+                                            type: string
+                                        required:
+                                        - path
+                                        - server
+                                        type: object
+                                      persistentVolumeClaim:
+                                        properties:
+                                          claimName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - claimName
+                                        type: object
+                                      photonPersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          pdID:
+                                            type: string
+                                        required:
+                                        - pdID
+                                        type: object
+                                      portworxVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      projected:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          sources:
+                                            items:
+                                              properties:
+                                                configMap:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                downwardAPI:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          fieldRef:
+                                                            properties:
+                                                              apiVersion:
+                                                                type: string
+                                                              fieldPath:
+                                                                type: string
+                                                            required:
+                                                            - fieldPath
+                                                            type: object
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                          resourceFieldRef:
+                                                            properties:
+                                                              containerName:
+                                                                type: string
+                                                              divisor:
+                                                                anyOf:
+                                                                - type: integer
+                                                                - type: string
+                                                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                                x-kubernetes-int-or-string: true
+                                                              resource:
+                                                                type: string
+                                                            required:
+                                                            - resource
+                                                            type: object
+                                                        required:
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                  type: object
+                                                secret:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                serviceAccountToken:
+                                                  properties:
+                                                    audience:
+                                                      type: string
+                                                    expirationSeconds:
+                                                      format: int64
+                                                      type: integer
+                                                    path:
+                                                      type: string
+                                                  required:
+                                                  - path
+                                                  type: object
+                                              type: object
+                                            type: array
+                                        type: object
+                                      quobyte:
+                                        properties:
+                                          group:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          registry:
+                                            type: string
+                                          tenant:
+                                            type: string
+                                          user:
+                                            type: string
+                                          volume:
+                                            type: string
+                                        required:
+                                        - registry
+                                        - volume
+                                        type: object
+                                      rbd:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          image:
+                                            type: string
+                                          keyring:
+                                            type: string
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          pool:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - image
+                                        - monitors
+                                        type: object
+                                      scaleIO:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          gateway:
+                                            type: string
+                                          protectionDomain:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          sslEnabled:
+                                            type: boolean
+                                          storageMode:
+                                            type: string
+                                          storagePool:
+                                            type: string
+                                          system:
+                                            type: string
+                                          volumeName:
+                                            type: string
+                                        required:
+                                        - gateway
+                                        - secretRef
+                                        - system
+                                        type: object
+                                      secret:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          optional:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                        type: object
+                                      storageos:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeName:
+                                            type: string
+                                          volumeNamespace:
+                                            type: string
+                                        type: object
+                                      vsphereVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          storagePolicyID:
+                                            type: string
+                                          storagePolicyName:
+                                            type: string
+                                          volumePath:
+                                            type: string
+                                        required:
+                                        - volumePath
+                                        type: object
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                              required:
+                              - containers
+                              type: object
+                          type: object
+                      required:
+                      - selector
+                      - template
+                      type: object
+                    status:
+                      properties:
+                        availableReplicas:
+                          format: int32
+                          type: integer
+                        collisionCount:
+                          format: int32
+                          type: integer
+                        conditions:
+                          items:
+                            properties:
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              lastUpdateTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                        observedGeneration:
+                          format: int64
+                          type: integer
+                        readyReplicas:
+                          format: int32
+                          type: integer
+                        replicas:
+                          format: int32
+                          type: integer
+                        unavailableReplicas:
+                          format: int32
+                          type: integer
+                        updatedReplicas:
+                          format: int32
+                          type: integer
+                      type: object
+                  type: object
+                type: array
+              jobStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        activeDeadlineSeconds:
+                          format: int64
+                          type: integer
+                        backoffLimit:
+                          format: int32
+                          type: integer
+                        completionMode:
+                          type: string
+                        completions:
+                          format: int32
+                          type: integer
+                        manualSelector:
+                          type: boolean
+                        parallelism:
+                          format: int32
+                          type: integer
+                        selector:
+                          properties:
+                            matchExpressions:
+                              items:
+                                properties:
+                                  key:
+                                    type: string
+                                  operator:
+                                    type: string
+                                  values:
+                                    items:
+                                      type: string
+                                    type: array
+                                required:
+                                - key
+                                - operator
+                                type: object
+                              type: array
+                            matchLabels:
+                              additionalProperties:
+                                type: string
+                              type: object
+                          type: object
+                        suspend:
+                          type: boolean
+                        template:
+                          properties:
+                            metadata:
+                              properties:
+                                annotations:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                finalizers:
+                                  items:
+                                    type: string
+                                  type: array
+                                labels:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                name:
+                                  type: string
+                                namespace:
+                                  type: string
+                              type: object
+                            spec:
+                              properties:
+                                activeDeadlineSeconds:
+                                  format: int64
+                                  type: integer
+                                affinity:
+                                  properties:
+                                    nodeAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              preference:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - preference
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          properties:
+                                            nodeSelectorTerms:
+                                              items:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              type: array
+                                          required:
+                                          - nodeSelectorTerms
+                                          type: object
+                                      type: object
+                                    podAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                    podAntiAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                  type: object
+                                automountServiceAccountToken:
+                                  type: boolean
+                                containers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                dnsConfig:
+                                  properties:
+                                    nameservers:
+                                      items:
+                                        type: string
+                                      type: array
+                                    options:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        type: object
+                                      type: array
+                                    searches:
+                                      items:
+                                        type: string
+                                      type: array
+                                  type: object
+                                dnsPolicy:
+                                  type: string
+                                enableServiceLinks:
+                                  type: boolean
+                                ephemeralContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      targetContainerName:
+                                        type: string
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                hostAliases:
+                                  items:
+                                    properties:
+                                      hostnames:
+                                        items:
+                                          type: string
+                                        type: array
+                                      ip:
+                                        type: string
+                                    type: object
+                                  type: array
+                                hostIPC:
+                                  type: boolean
+                                hostNetwork:
+                                  type: boolean
+                                hostPID:
+                                  type: boolean
+                                hostname:
+                                  type: string
+                                imagePullSecrets:
+                                  items:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  type: array
+                                initContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                nodeName:
+                                  type: string
+                                nodeSelector:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                  x-kubernetes-map-type: atomic
+                                os:
+                                  properties:
+                                    name:
+                                      type: string
+                                  required:
+                                  - name
+                                  type: object
+                                overhead:
+                                  additionalProperties:
+                                    anyOf:
+                                    - type: integer
+                                    - type: string
+                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                    x-kubernetes-int-or-string: true
+                                  type: object
+                                preemptionPolicy:
+                                  type: string
+                                priority:
+                                  format: int32
+                                  type: integer
+                                priorityClassName:
+                                  type: string
+                                readinessGates:
+                                  items:
+                                    properties:
+                                      conditionType:
+                                        type: string
+                                    required:
+                                    - conditionType
+                                    type: object
+                                  type: array
+                                restartPolicy:
+                                  type: string
+                                runtimeClassName:
+                                  type: string
+                                schedulerName:
+                                  type: string
+                                securityContext:
+                                  properties:
+                                    fsGroup:
+                                      format: int64
+                                      type: integer
+                                    fsGroupChangePolicy:
+                                      type: string
+                                    runAsGroup:
+                                      format: int64
+                                      type: integer
+                                    runAsNonRoot:
+                                      type: boolean
+                                    runAsUser:
+                                      format: int64
+                                      type: integer
+                                    seLinuxOptions:
+                                      properties:
+                                        level:
+                                          type: string
+                                        role:
+                                          type: string
+                                        type:
+                                          type: string
+                                        user:
+                                          type: string
+                                      type: object
+                                    seccompProfile:
+                                      properties:
+                                        localhostProfile:
+                                          type: string
+                                        type:
+                                          type: string
+                                      required:
+                                      - type
+                                      type: object
+                                    supplementalGroups:
+                                      items:
+                                        format: int64
+                                        type: integer
+                                      type: array
+                                    sysctls:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        required:
+                                        - name
+                                        - value
+                                        type: object
+                                      type: array
+                                    windowsOptions:
+                                      properties:
+                                        gmsaCredentialSpec:
+                                          type: string
+                                        gmsaCredentialSpecName:
+                                          type: string
+                                        hostProcess:
+                                          type: boolean
+                                        runAsUserName:
+                                          type: string
+                                      type: object
+                                  type: object
+                                serviceAccount:
+                                  type: string
+                                serviceAccountName:
+                                  type: string
+                                setHostnameAsFQDN:
+                                  type: boolean
+                                shareProcessNamespace:
+                                  type: boolean
+                                subdomain:
+                                  type: string
+                                terminationGracePeriodSeconds:
+                                  format: int64
+                                  type: integer
+                                tolerations:
+                                  items:
+                                    properties:
+                                      effect:
+                                        type: string
+                                      key:
+                                        type: string
+                                      operator:
+                                        type: string
+                                      tolerationSeconds:
+                                        format: int64
+                                        type: integer
+                                      value:
+                                        type: string
+                                    type: object
+                                  type: array
+                                topologySpreadConstraints:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      maxSkew:
+                                        format: int32
+                                        type: integer
+                                      topologyKey:
+                                        type: string
+                                      whenUnsatisfiable:
+                                        type: string
+                                    required:
+                                    - maxSkew
+                                    - topologyKey
+                                    - whenUnsatisfiable
+                                    type: object
+                                  type: array
+                                  x-kubernetes-list-map-keys:
+                                  - topologyKey
+                                  - whenUnsatisfiable
+                                  x-kubernetes-list-type: map
+                                volumes:
+                                  items:
+                                    properties:
+                                      awsElasticBlockStore:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      azureDisk:
+                                        properties:
+                                          cachingMode:
+                                            type: string
+                                          diskName:
+                                            type: string
+                                          diskURI:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          kind:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - diskName
+                                        - diskURI
+                                        type: object
+                                      azureFile:
+                                        properties:
+                                          readOnly:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                          shareName:
+                                            type: string
+                                        required:
+                                        - secretName
+                                        - shareName
+                                        type: object
+                                      cephfs:
+                                        properties:
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretFile:
+                                            type: string
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - monitors
+                                        type: object
+                                      cinder:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      configMap:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          name:
+                                            type: string
+                                          optional:
+                                            type: boolean
+                                        type: object
+                                      csi:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          nodePublishSecretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          volumeAttributes:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      downwardAPI:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                              required:
+                                              - path
+                                              type: object
+                                            type: array
+                                        type: object
+                                      emptyDir:
+                                        properties:
+                                          medium:
+                                            type: string
+                                          sizeLimit:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                            x-kubernetes-int-or-string: true
+                                        type: object
+                                      ephemeral:
+                                        properties:
+                                          volumeClaimTemplate:
+                                            properties:
+                                              metadata:
+                                                properties:
+                                                  annotations:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  finalizers:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  labels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  name:
+                                                    type: string
+                                                  namespace:
+                                                    type: string
+                                                type: object
+                                              spec:
+                                                properties:
+                                                  accessModes:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  dataSource:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  dataSourceRef:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  resources:
+                                                    properties:
+                                                      limits:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                      requests:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                    type: object
+                                                  selector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  storageClassName:
+                                                    type: string
+                                                  volumeMode:
+                                                    type: string
+                                                  volumeName:
+                                                    type: string
+                                                type: object
+                                            required:
+                                            - spec
+                                            type: object
+                                        type: object
+                                      fc:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          targetWWNs:
+                                            items:
+                                              type: string
+                                            type: array
+                                          wwids:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      flexVolume:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          options:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      flocker:
+                                        properties:
+                                          datasetName:
+                                            type: string
+                                          datasetUUID:
+                                            type: string
+                                        type: object
+                                      gcePersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          pdName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - pdName
+                                        type: object
+                                      gitRepo:
+                                        properties:
+                                          directory:
+                                            type: string
+                                          repository:
+                                            type: string
+                                          revision:
+                                            type: string
+                                        required:
+                                        - repository
+                                        type: object
+                                      glusterfs:
+                                        properties:
+                                          endpoints:
+                                            type: string
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - endpoints
+                                        - path
+                                        type: object
+                                      hostPath:
+                                        properties:
+                                          path:
+                                            type: string
+                                          type:
+                                            type: string
+                                        required:
+                                        - path
+                                        type: object
+                                      iscsi:
+                                        properties:
+                                          chapAuthDiscovery:
+                                            type: boolean
+                                          chapAuthSession:
+                                            type: boolean
+                                          fsType:
+                                            type: string
+                                          initiatorName:
+                                            type: string
+                                          iqn:
+                                            type: string
+                                          iscsiInterface:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          portals:
+                                            items:
+                                              type: string
+                                            type: array
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          targetPortal:
+                                            type: string
+                                        required:
+                                        - iqn
+                                        - lun
+                                        - targetPortal
+                                        type: object
+                                      name:
+                                        type: string
+                                      nfs:
+                                        properties:
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          server:
+                                            type: string
+                                        required:
+                                        - path
+                                        - server
+                                        type: object
+                                      persistentVolumeClaim:
+                                        properties:
+                                          claimName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - claimName
+                                        type: object
+                                      photonPersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          pdID:
+                                            type: string
+                                        required:
+                                        - pdID
+                                        type: object
+                                      portworxVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      projected:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          sources:
+                                            items:
+                                              properties:
+                                                configMap:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                downwardAPI:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          fieldRef:
+                                                            properties:
+                                                              apiVersion:
+                                                                type: string
+                                                              fieldPath:
+                                                                type: string
+                                                            required:
+                                                            - fieldPath
+                                                            type: object
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                          resourceFieldRef:
+                                                            properties:
+                                                              containerName:
+                                                                type: string
+                                                              divisor:
+                                                                anyOf:
+                                                                - type: integer
+                                                                - type: string
+                                                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                                x-kubernetes-int-or-string: true
+                                                              resource:
+                                                                type: string
+                                                            required:
+                                                            - resource
+                                                            type: object
+                                                        required:
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                  type: object
+                                                secret:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                serviceAccountToken:
+                                                  properties:
+                                                    audience:
+                                                      type: string
+                                                    expirationSeconds:
+                                                      format: int64
+                                                      type: integer
+                                                    path:
+                                                      type: string
+                                                  required:
+                                                  - path
+                                                  type: object
+                                              type: object
+                                            type: array
+                                        type: object
+                                      quobyte:
+                                        properties:
+                                          group:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          registry:
+                                            type: string
+                                          tenant:
+                                            type: string
+                                          user:
+                                            type: string
+                                          volume:
+                                            type: string
+                                        required:
+                                        - registry
+                                        - volume
+                                        type: object
+                                      rbd:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          image:
+                                            type: string
+                                          keyring:
+                                            type: string
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          pool:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - image
+                                        - monitors
+                                        type: object
+                                      scaleIO:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          gateway:
+                                            type: string
+                                          protectionDomain:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          sslEnabled:
+                                            type: boolean
+                                          storageMode:
+                                            type: string
+                                          storagePool:
+                                            type: string
+                                          system:
+                                            type: string
+                                          volumeName:
+                                            type: string
+                                        required:
+                                        - gateway
+                                        - secretRef
+                                        - system
+                                        type: object
+                                      secret:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          optional:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                        type: object
+                                      storageos:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeName:
+                                            type: string
+                                          volumeNamespace:
+                                            type: string
+                                        type: object
+                                      vsphereVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          storagePolicyID:
+                                            type: string
+                                          storagePolicyName:
+                                            type: string
+                                          volumePath:
+                                            type: string
+                                        required:
+                                        - volumePath
+                                        type: object
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                              required:
+                              - containers
+                              type: object
+                          type: object
+                        ttlSecondsAfterFinished:
+                          format: int32
+                          type: integer
+                      required:
+                      - template
+                      type: object
+                    status:
+                      properties:
+                        active:
+                          format: int32
+                          type: integer
+                        completedIndexes:
+                          type: string
+                        completionTime:
+                          format: date-time
+                          type: string
+                        conditions:
+                          items:
+                            properties:
+                              lastProbeTime:
+                                format: date-time
+                                type: string
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                          x-kubernetes-list-type: atomic
+                        failed:
+                          format: int32
+                          type: integer
+                        ready:
+                          format: int32
+                          type: integer
+                        startTime:
+                          format: date-time
+                          type: string
+                        succeeded:
+                          format: int32
+                          type: integer
+                        uncountedTerminatedPods:
+                          properties:
+                            failed:
+                              items:
+                                type: string
+                              type: array
+                              x-kubernetes-list-type: set
+                            succeeded:
+                              items:
+                                type: string
+                              type: array
+                              x-kubernetes-list-type: set
+                          type: object
+                      type: object
+                  type: object
+                type: array
+              podStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        activeDeadlineSeconds:
+                          format: int64
+                          type: integer
+                        affinity:
+                          properties:
+                            nodeAffinity:
+                              properties:
+                                preferredDuringSchedulingIgnoredDuringExecution:
+                                  items:
+                                    properties:
+                                      preference:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchFields:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                        type: object
+                                      weight:
+                                        format: int32
+                                        type: integer
+                                    required:
+                                    - preference
+                                    - weight
+                                    type: object
+                                  type: array
+                                requiredDuringSchedulingIgnoredDuringExecution:
+                                  properties:
+                                    nodeSelectorTerms:
+                                      items:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchFields:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                        type: object
+                                      type: array
+                                  required:
+                                  - nodeSelectorTerms
+                                  type: object
+                              type: object
+                            podAffinity:
+                              properties:
+                                preferredDuringSchedulingIgnoredDuringExecution:
+                                  items:
+                                    properties:
+                                      podAffinityTerm:
+                                        properties:
+                                          labelSelector:
+                                            properties:
+                                              matchExpressions:
+                                                items:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    operator:
+                                                      type: string
+                                                    values:
+                                                      items:
+                                                        type: string
+                                                      type: array
+                                                  required:
+                                                  - key
+                                                  - operator
+                                                  type: object
+                                                type: array
+                                              matchLabels:
+                                                additionalProperties:
+                                                  type: string
+                                                type: object
+                                            type: object
+                                          namespaceSelector:
+                                            properties:
+                                              matchExpressions:
+                                                items:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    operator:
+                                                      type: string
+                                                    values:
+                                                      items:
+                                                        type: string
+                                                      type: array
+                                                  required:
+                                                  - key
+                                                  - operator
+                                                  type: object
+                                                type: array
+                                              matchLabels:
+                                                additionalProperties:
+                                                  type: string
+                                                type: object
+                                            type: object
+                                          namespaces:
+                                            items:
+                                              type: string
+                                            type: array
+                                          topologyKey:
+                                            type: string
+                                        required:
+                                        - topologyKey
+                                        type: object
+                                      weight:
+                                        format: int32
+                                        type: integer
+                                    required:
+                                    - podAffinityTerm
+                                    - weight
+                                    type: object
+                                  type: array
+                                requiredDuringSchedulingIgnoredDuringExecution:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      namespaceSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      namespaces:
+                                        items:
+                                          type: string
+                                        type: array
+                                      topologyKey:
+                                        type: string
+                                    required:
+                                    - topologyKey
+                                    type: object
+                                  type: array
+                              type: object
+                            podAntiAffinity:
+                              properties:
+                                preferredDuringSchedulingIgnoredDuringExecution:
+                                  items:
+                                    properties:
+                                      podAffinityTerm:
+                                        properties:
+                                          labelSelector:
+                                            properties:
+                                              matchExpressions:
+                                                items:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    operator:
+                                                      type: string
+                                                    values:
+                                                      items:
+                                                        type: string
+                                                      type: array
+                                                  required:
+                                                  - key
+                                                  - operator
+                                                  type: object
+                                                type: array
+                                              matchLabels:
+                                                additionalProperties:
+                                                  type: string
+                                                type: object
+                                            type: object
+                                          namespaceSelector:
+                                            properties:
+                                              matchExpressions:
+                                                items:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    operator:
+                                                      type: string
+                                                    values:
+                                                      items:
+                                                        type: string
+                                                      type: array
+                                                  required:
+                                                  - key
+                                                  - operator
+                                                  type: object
+                                                type: array
+                                              matchLabels:
+                                                additionalProperties:
+                                                  type: string
+                                                type: object
+                                            type: object
+                                          namespaces:
+                                            items:
+                                              type: string
+                                            type: array
+                                          topologyKey:
+                                            type: string
+                                        required:
+                                        - topologyKey
+                                        type: object
+                                      weight:
+                                        format: int32
+                                        type: integer
+                                    required:
+                                    - podAffinityTerm
+                                    - weight
+                                    type: object
+                                  type: array
+                                requiredDuringSchedulingIgnoredDuringExecution:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      namespaceSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      namespaces:
+                                        items:
+                                          type: string
+                                        type: array
+                                      topologyKey:
+                                        type: string
+                                    required:
+                                    - topologyKey
+                                    type: object
+                                  type: array
+                              type: object
+                          type: object
+                        automountServiceAccountToken:
+                          type: boolean
+                        containers:
+                          items:
+                            properties:
+                              args:
+                                items:
+                                  type: string
+                                type: array
+                              command:
+                                items:
+                                  type: string
+                                type: array
+                              env:
+                                items:
+                                  properties:
+                                    name:
+                                      type: string
+                                    value:
+                                      type: string
+                                    valueFrom:
+                                      properties:
+                                        configMapKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                        fieldRef:
+                                          properties:
+                                            apiVersion:
+                                              type: string
+                                            fieldPath:
+                                              type: string
+                                          required:
+                                          - fieldPath
+                                          type: object
+                                        resourceFieldRef:
+                                          properties:
+                                            containerName:
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              type: string
+                                          required:
+                                          - resource
+                                          type: object
+                                        secretKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                      type: object
+                                  required:
+                                  - name
+                                  type: object
+                                type: array
+                              envFrom:
+                                items:
+                                  properties:
+                                    configMapRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                    prefix:
+                                      type: string
+                                    secretRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                  type: object
+                                type: array
+                              image:
+                                type: string
+                              imagePullPolicy:
+                                type: string
+                              lifecycle:
+                                properties:
+                                  postStart:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                  preStop:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                type: object
+                              livenessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              name:
+                                type: string
+                              ports:
+                                items:
+                                  properties:
+                                    containerPort:
+                                      format: int32
+                                      type: integer
+                                    hostIP:
+                                      type: string
+                                    hostPort:
+                                      format: int32
+                                      type: integer
+                                    name:
+                                      type: string
+                                    protocol:
+                                      default: TCP
+                                      type: string
+                                  required:
+                                  - containerPort
+                                  type: object
+                                type: array
+                                x-kubernetes-list-map-keys:
+                                - containerPort
+                                - protocol
+                                x-kubernetes-list-type: map
+                              readinessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              resources:
+                                properties:
+                                  limits:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                  requests:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                type: object
+                              securityContext:
+                                properties:
+                                  allowPrivilegeEscalation:
+                                    type: boolean
+                                  capabilities:
+                                    properties:
+                                      add:
+                                        items:
+                                          type: string
+                                        type: array
+                                      drop:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  privileged:
+                                    type: boolean
+                                  procMount:
+                                    type: string
+                                  readOnlyRootFilesystem:
+                                    type: boolean
+                                  runAsGroup:
+                                    format: int64
+                                    type: integer
+                                  runAsNonRoot:
+                                    type: boolean
+                                  runAsUser:
+                                    format: int64
+                                    type: integer
+                                  seLinuxOptions:
+                                    properties:
+                                      level:
+                                        type: string
+                                      role:
+                                        type: string
+                                      type:
+                                        type: string
+                                      user:
+                                        type: string
+                                    type: object
+                                  seccompProfile:
+                                    properties:
+                                      localhostProfile:
+                                        type: string
+                                      type:
+                                        type: string
+                                    required:
+                                    - type
+                                    type: object
+                                  windowsOptions:
+                                    properties:
+                                      gmsaCredentialSpec:
+                                        type: string
+                                      gmsaCredentialSpecName:
+                                        type: string
+                                      hostProcess:
+                                        type: boolean
+                                      runAsUserName:
+                                        type: string
+                                    type: object
+                                type: object
+                              startupProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              stdin:
+                                type: boolean
+                              stdinOnce:
+                                type: boolean
+                              terminationMessagePath:
+                                type: string
+                              terminationMessagePolicy:
+                                type: string
+                              tty:
+                                type: boolean
+                              volumeDevices:
+                                items:
+                                  properties:
+                                    devicePath:
+                                      type: string
+                                    name:
+                                      type: string
+                                  required:
+                                  - devicePath
+                                  - name
+                                  type: object
+                                type: array
+                              volumeMounts:
+                                items:
+                                  properties:
+                                    mountPath:
+                                      type: string
+                                    mountPropagation:
+                                      type: string
+                                    name:
+                                      type: string
+                                    readOnly:
+                                      type: boolean
+                                    subPath:
+                                      type: string
+                                    subPathExpr:
+                                      type: string
+                                  required:
+                                  - mountPath
+                                  - name
+                                  type: object
+                                type: array
+                              workingDir:
+                                type: string
+                            required:
+                            - name
+                            type: object
+                          type: array
+                        dnsConfig:
+                          properties:
+                            nameservers:
+                              items:
+                                type: string
+                              type: array
+                            options:
+                              items:
+                                properties:
+                                  name:
+                                    type: string
+                                  value:
+                                    type: string
+                                type: object
+                              type: array
+                            searches:
+                              items:
+                                type: string
+                              type: array
+                          type: object
+                        dnsPolicy:
+                          type: string
+                        enableServiceLinks:
+                          type: boolean
+                        ephemeralContainers:
+                          items:
+                            properties:
+                              args:
+                                items:
+                                  type: string
+                                type: array
+                              command:
+                                items:
+                                  type: string
+                                type: array
+                              env:
+                                items:
+                                  properties:
+                                    name:
+                                      type: string
+                                    value:
+                                      type: string
+                                    valueFrom:
+                                      properties:
+                                        configMapKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                        fieldRef:
+                                          properties:
+                                            apiVersion:
+                                              type: string
+                                            fieldPath:
+                                              type: string
+                                          required:
+                                          - fieldPath
+                                          type: object
+                                        resourceFieldRef:
+                                          properties:
+                                            containerName:
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              type: string
+                                          required:
+                                          - resource
+                                          type: object
+                                        secretKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                      type: object
+                                  required:
+                                  - name
+                                  type: object
+                                type: array
+                              envFrom:
+                                items:
+                                  properties:
+                                    configMapRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                    prefix:
+                                      type: string
+                                    secretRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                  type: object
+                                type: array
+                              image:
+                                type: string
+                              imagePullPolicy:
+                                type: string
+                              lifecycle:
+                                properties:
+                                  postStart:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                  preStop:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                type: object
+                              livenessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              name:
+                                type: string
+                              ports:
+                                items:
+                                  properties:
+                                    containerPort:
+                                      format: int32
+                                      type: integer
+                                    hostIP:
+                                      type: string
+                                    hostPort:
+                                      format: int32
+                                      type: integer
+                                    name:
+                                      type: string
+                                    protocol:
+                                      default: TCP
+                                      type: string
+                                  required:
+                                  - containerPort
+                                  type: object
+                                type: array
+                                x-kubernetes-list-map-keys:
+                                - containerPort
+                                - protocol
+                                x-kubernetes-list-type: map
+                              readinessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              resources:
+                                properties:
+                                  limits:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                  requests:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                type: object
+                              securityContext:
+                                properties:
+                                  allowPrivilegeEscalation:
+                                    type: boolean
+                                  capabilities:
+                                    properties:
+                                      add:
+                                        items:
+                                          type: string
+                                        type: array
+                                      drop:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  privileged:
+                                    type: boolean
+                                  procMount:
+                                    type: string
+                                  readOnlyRootFilesystem:
+                                    type: boolean
+                                  runAsGroup:
+                                    format: int64
+                                    type: integer
+                                  runAsNonRoot:
+                                    type: boolean
+                                  runAsUser:
+                                    format: int64
+                                    type: integer
+                                  seLinuxOptions:
+                                    properties:
+                                      level:
+                                        type: string
+                                      role:
+                                        type: string
+                                      type:
+                                        type: string
+                                      user:
+                                        type: string
+                                    type: object
+                                  seccompProfile:
+                                    properties:
+                                      localhostProfile:
+                                        type: string
+                                      type:
+                                        type: string
+                                    required:
+                                    - type
+                                    type: object
+                                  windowsOptions:
+                                    properties:
+                                      gmsaCredentialSpec:
+                                        type: string
+                                      gmsaCredentialSpecName:
+                                        type: string
+                                      hostProcess:
+                                        type: boolean
+                                      runAsUserName:
+                                        type: string
+                                    type: object
+                                type: object
+                              startupProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              stdin:
+                                type: boolean
+                              stdinOnce:
+                                type: boolean
+                              targetContainerName:
+                                type: string
+                              terminationMessagePath:
+                                type: string
+                              terminationMessagePolicy:
+                                type: string
+                              tty:
+                                type: boolean
+                              volumeDevices:
+                                items:
+                                  properties:
+                                    devicePath:
+                                      type: string
+                                    name:
+                                      type: string
+                                  required:
+                                  - devicePath
+                                  - name
+                                  type: object
+                                type: array
+                              volumeMounts:
+                                items:
+                                  properties:
+                                    mountPath:
+                                      type: string
+                                    mountPropagation:
+                                      type: string
+                                    name:
+                                      type: string
+                                    readOnly:
+                                      type: boolean
+                                    subPath:
+                                      type: string
+                                    subPathExpr:
+                                      type: string
+                                  required:
+                                  - mountPath
+                                  - name
+                                  type: object
+                                type: array
+                              workingDir:
+                                type: string
+                            required:
+                            - name
+                            type: object
+                          type: array
+                        hostAliases:
+                          items:
+                            properties:
+                              hostnames:
+                                items:
+                                  type: string
+                                type: array
+                              ip:
+                                type: string
+                            type: object
+                          type: array
+                        hostIPC:
+                          type: boolean
+                        hostNetwork:
+                          type: boolean
+                        hostPID:
+                          type: boolean
+                        hostname:
+                          type: string
+                        imagePullSecrets:
+                          items:
+                            properties:
+                              name:
+                                type: string
+                            type: object
+                          type: array
+                        initContainers:
+                          items:
+                            properties:
+                              args:
+                                items:
+                                  type: string
+                                type: array
+                              command:
+                                items:
+                                  type: string
+                                type: array
+                              env:
+                                items:
+                                  properties:
+                                    name:
+                                      type: string
+                                    value:
+                                      type: string
+                                    valueFrom:
+                                      properties:
+                                        configMapKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                        fieldRef:
+                                          properties:
+                                            apiVersion:
+                                              type: string
+                                            fieldPath:
+                                              type: string
+                                          required:
+                                          - fieldPath
+                                          type: object
+                                        resourceFieldRef:
+                                          properties:
+                                            containerName:
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              type: string
+                                          required:
+                                          - resource
+                                          type: object
+                                        secretKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                      type: object
+                                  required:
+                                  - name
+                                  type: object
+                                type: array
+                              envFrom:
+                                items:
+                                  properties:
+                                    configMapRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                    prefix:
+                                      type: string
+                                    secretRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                  type: object
+                                type: array
+                              image:
+                                type: string
+                              imagePullPolicy:
+                                type: string
+                              lifecycle:
+                                properties:
+                                  postStart:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                  preStop:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                type: object
+                              livenessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              name:
+                                type: string
+                              ports:
+                                items:
+                                  properties:
+                                    containerPort:
+                                      format: int32
+                                      type: integer
+                                    hostIP:
+                                      type: string
+                                    hostPort:
+                                      format: int32
+                                      type: integer
+                                    name:
+                                      type: string
+                                    protocol:
+                                      default: TCP
+                                      type: string
+                                  required:
+                                  - containerPort
+                                  type: object
+                                type: array
+                                x-kubernetes-list-map-keys:
+                                - containerPort
+                                - protocol
+                                x-kubernetes-list-type: map
+                              readinessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              resources:
+                                properties:
+                                  limits:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                  requests:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                type: object
+                              securityContext:
+                                properties:
+                                  allowPrivilegeEscalation:
+                                    type: boolean
+                                  capabilities:
+                                    properties:
+                                      add:
+                                        items:
+                                          type: string
+                                        type: array
+                                      drop:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  privileged:
+                                    type: boolean
+                                  procMount:
+                                    type: string
+                                  readOnlyRootFilesystem:
+                                    type: boolean
+                                  runAsGroup:
+                                    format: int64
+                                    type: integer
+                                  runAsNonRoot:
+                                    type: boolean
+                                  runAsUser:
+                                    format: int64
+                                    type: integer
+                                  seLinuxOptions:
+                                    properties:
+                                      level:
+                                        type: string
+                                      role:
+                                        type: string
+                                      type:
+                                        type: string
+                                      user:
+                                        type: string
+                                    type: object
+                                  seccompProfile:
+                                    properties:
+                                      localhostProfile:
+                                        type: string
+                                      type:
+                                        type: string
+                                    required:
+                                    - type
+                                    type: object
+                                  windowsOptions:
+                                    properties:
+                                      gmsaCredentialSpec:
+                                        type: string
+                                      gmsaCredentialSpecName:
+                                        type: string
+                                      hostProcess:
+                                        type: boolean
+                                      runAsUserName:
+                                        type: string
+                                    type: object
+                                type: object
+                              startupProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              stdin:
+                                type: boolean
+                              stdinOnce:
+                                type: boolean
+                              terminationMessagePath:
+                                type: string
+                              terminationMessagePolicy:
+                                type: string
+                              tty:
+                                type: boolean
+                              volumeDevices:
+                                items:
+                                  properties:
+                                    devicePath:
+                                      type: string
+                                    name:
+                                      type: string
+                                  required:
+                                  - devicePath
+                                  - name
+                                  type: object
+                                type: array
+                              volumeMounts:
+                                items:
+                                  properties:
+                                    mountPath:
+                                      type: string
+                                    mountPropagation:
+                                      type: string
+                                    name:
+                                      type: string
+                                    readOnly:
+                                      type: boolean
+                                    subPath:
+                                      type: string
+                                    subPathExpr:
+                                      type: string
+                                  required:
+                                  - mountPath
+                                  - name
+                                  type: object
+                                type: array
+                              workingDir:
+                                type: string
+                            required:
+                            - name
+                            type: object
+                          type: array
+                        nodeName:
+                          type: string
+                        nodeSelector:
+                          additionalProperties:
+                            type: string
+                          type: object
+                          x-kubernetes-map-type: atomic
+                        os:
+                          properties:
+                            name:
+                              type: string
+                          required:
+                          - name
+                          type: object
+                        overhead:
+                          additionalProperties:
+                            anyOf:
+                            - type: integer
+                            - type: string
+                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                            x-kubernetes-int-or-string: true
+                          type: object
+                        preemptionPolicy:
+                          type: string
+                        priority:
+                          format: int32
+                          type: integer
+                        priorityClassName:
+                          type: string
+                        readinessGates:
+                          items:
+                            properties:
+                              conditionType:
+                                type: string
+                            required:
+                            - conditionType
+                            type: object
+                          type: array
+                        restartPolicy:
+                          type: string
+                        runtimeClassName:
+                          type: string
+                        schedulerName:
+                          type: string
+                        securityContext:
+                          properties:
+                            fsGroup:
+                              format: int64
+                              type: integer
+                            fsGroupChangePolicy:
+                              type: string
+                            runAsGroup:
+                              format: int64
+                              type: integer
+                            runAsNonRoot:
+                              type: boolean
+                            runAsUser:
+                              format: int64
+                              type: integer
+                            seLinuxOptions:
+                              properties:
+                                level:
+                                  type: string
+                                role:
+                                  type: string
+                                type:
+                                  type: string
+                                user:
+                                  type: string
+                              type: object
+                            seccompProfile:
+                              properties:
+                                localhostProfile:
+                                  type: string
+                                type:
+                                  type: string
+                              required:
+                              - type
+                              type: object
+                            supplementalGroups:
+                              items:
+                                format: int64
+                                type: integer
+                              type: array
+                            sysctls:
+                              items:
+                                properties:
+                                  name:
+                                    type: string
+                                  value:
+                                    type: string
+                                required:
+                                - name
+                                - value
+                                type: object
+                              type: array
+                            windowsOptions:
+                              properties:
+                                gmsaCredentialSpec:
+                                  type: string
+                                gmsaCredentialSpecName:
+                                  type: string
+                                hostProcess:
+                                  type: boolean
+                                runAsUserName:
+                                  type: string
+                              type: object
+                          type: object
+                        serviceAccount:
+                          type: string
+                        serviceAccountName:
+                          type: string
+                        setHostnameAsFQDN:
+                          type: boolean
+                        shareProcessNamespace:
+                          type: boolean
+                        subdomain:
+                          type: string
+                        terminationGracePeriodSeconds:
+                          format: int64
+                          type: integer
+                        tolerations:
+                          items:
+                            properties:
+                              effect:
+                                type: string
+                              key:
+                                type: string
+                              operator:
+                                type: string
+                              tolerationSeconds:
+                                format: int64
+                                type: integer
+                              value:
+                                type: string
+                            type: object
+                          type: array
+                        topologySpreadConstraints:
+                          items:
+                            properties:
+                              labelSelector:
+                                properties:
+                                  matchExpressions:
+                                    items:
+                                      properties:
+                                        key:
+                                          type: string
+                                        operator:
+                                          type: string
+                                        values:
+                                          items:
+                                            type: string
+                                          type: array
+                                      required:
+                                      - key
+                                      - operator
+                                      type: object
+                                    type: array
+                                  matchLabels:
+                                    additionalProperties:
+                                      type: string
+                                    type: object
+                                type: object
+                              maxSkew:
+                                format: int32
+                                type: integer
+                              topologyKey:
+                                type: string
+                              whenUnsatisfiable:
+                                type: string
+                            required:
+                            - maxSkew
+                            - topologyKey
+                            - whenUnsatisfiable
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                          - topologyKey
+                          - whenUnsatisfiable
+                          x-kubernetes-list-type: map
+                        volumes:
+                          items:
+                            properties:
+                              awsElasticBlockStore:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  partition:
+                                    format: int32
+                                    type: integer
+                                  readOnly:
+                                    type: boolean
+                                  volumeID:
+                                    type: string
+                                required:
+                                - volumeID
+                                type: object
+                              azureDisk:
+                                properties:
+                                  cachingMode:
+                                    type: string
+                                  diskName:
+                                    type: string
+                                  diskURI:
+                                    type: string
+                                  fsType:
+                                    type: string
+                                  kind:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                required:
+                                - diskName
+                                - diskURI
+                                type: object
+                              azureFile:
+                                properties:
+                                  readOnly:
+                                    type: boolean
+                                  secretName:
+                                    type: string
+                                  shareName:
+                                    type: string
+                                required:
+                                - secretName
+                                - shareName
+                                type: object
+                              cephfs:
+                                properties:
+                                  monitors:
+                                    items:
+                                      type: string
+                                    type: array
+                                  path:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  secretFile:
+                                    type: string
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  user:
+                                    type: string
+                                required:
+                                - monitors
+                                type: object
+                              cinder:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  volumeID:
+                                    type: string
+                                required:
+                                - volumeID
+                                type: object
+                              configMap:
+                                properties:
+                                  defaultMode:
+                                    format: int32
+                                    type: integer
+                                  items:
+                                    items:
+                                      properties:
+                                        key:
+                                          type: string
+                                        mode:
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          type: string
+                                      required:
+                                      - key
+                                      - path
+                                      type: object
+                                    type: array
+                                  name:
+                                    type: string
+                                  optional:
+                                    type: boolean
+                                type: object
+                              csi:
+                                properties:
+                                  driver:
+                                    type: string
+                                  fsType:
+                                    type: string
+                                  nodePublishSecretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  readOnly:
+                                    type: boolean
+                                  volumeAttributes:
+                                    additionalProperties:
+                                      type: string
+                                    type: object
+                                required:
+                                - driver
+                                type: object
+                              downwardAPI:
+                                properties:
+                                  defaultMode:
+                                    format: int32
+                                    type: integer
+                                  items:
+                                    items:
+                                      properties:
+                                        fieldRef:
+                                          properties:
+                                            apiVersion:
+                                              type: string
+                                            fieldPath:
+                                              type: string
+                                          required:
+                                          - fieldPath
+                                          type: object
+                                        mode:
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          type: string
+                                        resourceFieldRef:
+                                          properties:
+                                            containerName:
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              type: string
+                                          required:
+                                          - resource
+                                          type: object
+                                      required:
+                                      - path
+                                      type: object
+                                    type: array
+                                type: object
+                              emptyDir:
+                                properties:
+                                  medium:
+                                    type: string
+                                  sizeLimit:
+                                    anyOf:
+                                    - type: integer
+                                    - type: string
+                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                    x-kubernetes-int-or-string: true
+                                type: object
+                              ephemeral:
+                                properties:
+                                  volumeClaimTemplate:
+                                    properties:
+                                      metadata:
+                                        properties:
+                                          annotations:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          finalizers:
+                                            items:
+                                              type: string
+                                            type: array
+                                          labels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          name:
+                                            type: string
+                                          namespace:
+                                            type: string
+                                        type: object
+                                      spec:
+                                        properties:
+                                          accessModes:
+                                            items:
+                                              type: string
+                                            type: array
+                                          dataSource:
+                                            properties:
+                                              apiGroup:
+                                                type: string
+                                              kind:
+                                                type: string
+                                              name:
+                                                type: string
+                                            required:
+                                            - kind
+                                            - name
+                                            type: object
+                                          dataSourceRef:
+                                            properties:
+                                              apiGroup:
+                                                type: string
+                                              kind:
+                                                type: string
+                                              name:
+                                                type: string
+                                            required:
+                                            - kind
+                                            - name
+                                            type: object
+                                          resources:
+                                            properties:
+                                              limits:
+                                                additionalProperties:
+                                                  anyOf:
+                                                  - type: integer
+                                                  - type: string
+                                                  pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                  x-kubernetes-int-or-string: true
+                                                type: object
+                                              requests:
+                                                additionalProperties:
+                                                  anyOf:
+                                                  - type: integer
+                                                  - type: string
+                                                  pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                  x-kubernetes-int-or-string: true
+                                                type: object
+                                            type: object
+                                          selector:
+                                            properties:
+                                              matchExpressions:
+                                                items:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    operator:
+                                                      type: string
+                                                    values:
+                                                      items:
+                                                        type: string
+                                                      type: array
+                                                  required:
+                                                  - key
+                                                  - operator
+                                                  type: object
+                                                type: array
+                                              matchLabels:
+                                                additionalProperties:
+                                                  type: string
+                                                type: object
+                                            type: object
+                                          storageClassName:
+                                            type: string
+                                          volumeMode:
+                                            type: string
+                                          volumeName:
+                                            type: string
+                                        type: object
+                                    required:
+                                    - spec
+                                    type: object
+                                type: object
+                              fc:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  lun:
+                                    format: int32
+                                    type: integer
+                                  readOnly:
+                                    type: boolean
+                                  targetWWNs:
+                                    items:
+                                      type: string
+                                    type: array
+                                  wwids:
+                                    items:
+                                      type: string
+                                    type: array
+                                type: object
+                              flexVolume:
+                                properties:
+                                  driver:
+                                    type: string
+                                  fsType:
+                                    type: string
+                                  options:
+                                    additionalProperties:
+                                      type: string
+                                    type: object
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                required:
+                                - driver
+                                type: object
+                              flocker:
+                                properties:
+                                  datasetName:
+                                    type: string
+                                  datasetUUID:
+                                    type: string
+                                type: object
+                              gcePersistentDisk:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  partition:
+                                    format: int32
+                                    type: integer
+                                  pdName:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                required:
+                                - pdName
+                                type: object
+                              gitRepo:
+                                properties:
+                                  directory:
+                                    type: string
+                                  repository:
+                                    type: string
+                                  revision:
+                                    type: string
+                                required:
+                                - repository
+                                type: object
+                              glusterfs:
+                                properties:
+                                  endpoints:
+                                    type: string
+                                  path:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                required:
+                                - endpoints
+                                - path
+                                type: object
+                              hostPath:
+                                properties:
+                                  path:
+                                    type: string
+                                  type:
+                                    type: string
+                                required:
+                                - path
+                                type: object
+                              iscsi:
+                                properties:
+                                  chapAuthDiscovery:
+                                    type: boolean
+                                  chapAuthSession:
+                                    type: boolean
+                                  fsType:
+                                    type: string
+                                  initiatorName:
+                                    type: string
+                                  iqn:
+                                    type: string
+                                  iscsiInterface:
+                                    type: string
+                                  lun:
+                                    format: int32
+                                    type: integer
+                                  portals:
+                                    items:
+                                      type: string
+                                    type: array
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  targetPortal:
+                                    type: string
+                                required:
+                                - iqn
+                                - lun
+                                - targetPortal
+                                type: object
+                              name:
+                                type: string
+                              nfs:
+                                properties:
+                                  path:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  server:
+                                    type: string
+                                required:
+                                - path
+                                - server
+                                type: object
+                              persistentVolumeClaim:
+                                properties:
+                                  claimName:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                required:
+                                - claimName
+                                type: object
+                              photonPersistentDisk:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  pdID:
+                                    type: string
+                                required:
+                                - pdID
+                                type: object
+                              portworxVolume:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  volumeID:
+                                    type: string
+                                required:
+                                - volumeID
+                                type: object
+                              projected:
+                                properties:
+                                  defaultMode:
+                                    format: int32
+                                    type: integer
+                                  sources:
+                                    items:
+                                      properties:
+                                        configMap:
+                                          properties:
+                                            items:
+                                              items:
+                                                properties:
+                                                  key:
+                                                    type: string
+                                                  mode:
+                                                    format: int32
+                                                    type: integer
+                                                  path:
+                                                    type: string
+                                                required:
+                                                - key
+                                                - path
+                                                type: object
+                                              type: array
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          type: object
+                                        downwardAPI:
+                                          properties:
+                                            items:
+                                              items:
+                                                properties:
+                                                  fieldRef:
+                                                    properties:
+                                                      apiVersion:
+                                                        type: string
+                                                      fieldPath:
+                                                        type: string
+                                                    required:
+                                                    - fieldPath
+                                                    type: object
+                                                  mode:
+                                                    format: int32
+                                                    type: integer
+                                                  path:
+                                                    type: string
+                                                  resourceFieldRef:
+                                                    properties:
+                                                      containerName:
+                                                        type: string
+                                                      divisor:
+                                                        anyOf:
+                                                        - type: integer
+                                                        - type: string
+                                                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                        x-kubernetes-int-or-string: true
+                                                      resource:
+                                                        type: string
+                                                    required:
+                                                    - resource
+                                                    type: object
+                                                required:
+                                                - path
+                                                type: object
+                                              type: array
+                                          type: object
+                                        secret:
+                                          properties:
+                                            items:
+                                              items:
+                                                properties:
+                                                  key:
+                                                    type: string
+                                                  mode:
+                                                    format: int32
+                                                    type: integer
+                                                  path:
+                                                    type: string
+                                                required:
+                                                - key
+                                                - path
+                                                type: object
+                                              type: array
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          type: object
+                                        serviceAccountToken:
+                                          properties:
+                                            audience:
+                                              type: string
+                                            expirationSeconds:
+                                              format: int64
+                                              type: integer
+                                            path:
+                                              type: string
+                                          required:
+                                          - path
+                                          type: object
+                                      type: object
+                                    type: array
+                                type: object
+                              quobyte:
+                                properties:
+                                  group:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  registry:
+                                    type: string
+                                  tenant:
+                                    type: string
+                                  user:
+                                    type: string
+                                  volume:
+                                    type: string
+                                required:
+                                - registry
+                                - volume
+                                type: object
+                              rbd:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  image:
+                                    type: string
+                                  keyring:
+                                    type: string
+                                  monitors:
+                                    items:
+                                      type: string
+                                    type: array
+                                  pool:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  user:
+                                    type: string
+                                required:
+                                - image
+                                - monitors
+                                type: object
+                              scaleIO:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  gateway:
+                                    type: string
+                                  protectionDomain:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  sslEnabled:
+                                    type: boolean
+                                  storageMode:
+                                    type: string
+                                  storagePool:
+                                    type: string
+                                  system:
+                                    type: string
+                                  volumeName:
+                                    type: string
+                                required:
+                                - gateway
+                                - secretRef
+                                - system
+                                type: object
+                              secret:
+                                properties:
+                                  defaultMode:
+                                    format: int32
+                                    type: integer
+                                  items:
+                                    items:
+                                      properties:
+                                        key:
+                                          type: string
+                                        mode:
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          type: string
+                                      required:
+                                      - key
+                                      - path
+                                      type: object
+                                    type: array
+                                  optional:
+                                    type: boolean
+                                  secretName:
+                                    type: string
+                                type: object
+                              storageos:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  volumeName:
+                                    type: string
+                                  volumeNamespace:
+                                    type: string
+                                type: object
+                              vsphereVolume:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  storagePolicyID:
+                                    type: string
+                                  storagePolicyName:
+                                    type: string
+                                  volumePath:
+                                    type: string
+                                required:
+                                - volumePath
+                                type: object
+                            required:
+                            - name
+                            type: object
+                          type: array
+                      required:
+                      - containers
+                      type: object
+                    status:
+                      properties:
+                        conditions:
+                          items:
+                            properties:
+                              lastProbeTime:
+                                format: date-time
+                                type: string
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                        containerStatuses:
+                          items:
+                            properties:
+                              containerID:
+                                type: string
+                              image:
+                                type: string
+                              imageID:
+                                type: string
+                              lastState:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                              name:
+                                type: string
+                              ready:
+                                type: boolean
+                              restartCount:
+                                format: int32
+                                type: integer
+                              started:
+                                type: boolean
+                              state:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                            required:
+                            - image
+                            - imageID
+                            - name
+                            - ready
+                            - restartCount
+                            type: object
+                          type: array
+                        ephemeralContainerStatuses:
+                          items:
+                            properties:
+                              containerID:
+                                type: string
+                              image:
+                                type: string
+                              imageID:
+                                type: string
+                              lastState:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                              name:
+                                type: string
+                              ready:
+                                type: boolean
+                              restartCount:
+                                format: int32
+                                type: integer
+                              started:
+                                type: boolean
+                              state:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                            required:
+                            - image
+                            - imageID
+                            - name
+                            - ready
+                            - restartCount
+                            type: object
+                          type: array
+                        hostIP:
+                          type: string
+                        initContainerStatuses:
+                          items:
+                            properties:
+                              containerID:
+                                type: string
+                              image:
+                                type: string
+                              imageID:
+                                type: string
+                              lastState:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                              name:
+                                type: string
+                              ready:
+                                type: boolean
+                              restartCount:
+                                format: int32
+                                type: integer
+                              started:
+                                type: boolean
+                              state:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                            required:
+                            - image
+                            - imageID
+                            - name
+                            - ready
+                            - restartCount
+                            type: object
+                          type: array
+                        message:
+                          type: string
+                        nominatedNodeName:
+                          type: string
+                        phase:
+                          type: string
+                        podIP:
+                          type: string
+                        podIPs:
+                          items:
+                            properties:
+                              ip:
+                                type: string
+                            type: object
+                          type: array
+                        qosClass:
+                          type: string
+                        reason:
+                          type: string
+                        startTime:
+                          format: date-time
+                          type: string
+                      type: object
+                  type: object
+                type: array
+              ready:
+                type: boolean
+              resourceCount:
+                format: int32
+                type: integer
+              resourceStatuses:
+                items:
+                  properties:
+                    group:
+                      type: string
+                    kind:
+                      type: string
+                    name:
+                      type: string
+                    namespace:
+                      type: string
+                    res:
+                      format: byte
+                      type: string
+                    version:
+                      type: string
+                  required:
+                  - group
+                  - kind
+                  - name
+                  - res
+                  - version
+                  type: object
+                type: array
+              serviceStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        allocateLoadBalancerNodePorts:
+                          type: boolean
+                        clusterIP:
+                          type: string
+                        clusterIPs:
+                          items:
+                            type: string
+                          type: array
+                          x-kubernetes-list-type: atomic
+                        externalIPs:
+                          items:
+                            type: string
+                          type: array
+                        externalName:
+                          type: string
+                        externalTrafficPolicy:
+                          type: string
+                        healthCheckNodePort:
+                          format: int32
+                          type: integer
+                        internalTrafficPolicy:
+                          type: string
+                        ipFamilies:
+                          items:
+                            type: string
+                          type: array
+                          x-kubernetes-list-type: atomic
+                        ipFamilyPolicy:
+                          type: string
+                        loadBalancerClass:
+                          type: string
+                        loadBalancerIP:
+                          type: string
+                        loadBalancerSourceRanges:
+                          items:
+                            type: string
+                          type: array
+                        ports:
+                          items:
+                            properties:
+                              appProtocol:
+                                type: string
+                              name:
+                                type: string
+                              nodePort:
+                                format: int32
+                                type: integer
+                              port:
+                                format: int32
+                                type: integer
+                              protocol:
+                                default: TCP
+                                type: string
+                              targetPort:
+                                anyOf:
+                                - type: integer
+                                - type: string
+                                x-kubernetes-int-or-string: true
+                            required:
+                            - port
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                          - port
+                          - protocol
+                          x-kubernetes-list-type: map
+                        publishNotReadyAddresses:
+                          type: boolean
+                        selector:
+                          additionalProperties:
+                            type: string
+                          type: object
+                          x-kubernetes-map-type: atomic
+                        sessionAffinity:
+                          type: string
+                        sessionAffinityConfig:
+                          properties:
+                            clientIP:
+                              properties:
+                                timeoutSeconds:
+                                  format: int32
+                                  type: integer
+                              type: object
+                          type: object
+                        type:
+                          type: string
+                      type: object
+                    status:
+                      properties:
+                        conditions:
+                          items:
+                            properties:
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              message:
+                                maxLength: 32768
+                                type: string
+                              observedGeneration:
+                                format: int64
+                                minimum: 0
+                                type: integer
+                              reason:
+                                maxLength: 1024
+                                minLength: 1
+                                pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
+                                type: string
+                              status:
+                                enum:
+                                - "True"
+                                - "False"
+                                - Unknown
+                                type: string
+                              type:
+                                maxLength: 316
+                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
+                                type: string
+                            required:
+                            - lastTransitionTime
+                            - message
+                            - reason
+                            - status
+                            - type
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                          - type
+                          x-kubernetes-list-type: map
+                        loadBalancer:
+                          properties:
+                            ingress:
+                              items:
+                                properties:
+                                  hostname:
+                                    type: string
+                                  ip:
+                                    type: string
+                                  ports:
+                                    items:
+                                      properties:
+                                        error:
+                                          maxLength: 316
+                                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
+                                          type: string
+                                        port:
+                                          format: int32
+                                          type: integer
+                                        protocol:
+                                          default: TCP
+                                          type: string
+                                      required:
+                                      - port
+                                      - protocol
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                type: object
+                              type: array
+                          type: object
+                      type: object
+                  type: object
+                type: array
+              statefulSetStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        minReadySeconds:
+                          format: int32
+                          type: integer
+                        persistentVolumeClaimRetentionPolicy:
+                          properties:
+                            whenDeleted:
+                              type: string
+                            whenScaled:
+                              type: string
+                          type: object
+                        podManagementPolicy:
+                          type: string
+                        replicas:
+                          format: int32
+                          type: integer
+                        revisionHistoryLimit:
+                          format: int32
+                          type: integer
+                        selector:
+                          properties:
+                            matchExpressions:
+                              items:
+                                properties:
+                                  key:
+                                    type: string
+                                  operator:
+                                    type: string
+                                  values:
+                                    items:
+                                      type: string
+                                    type: array
+                                required:
+                                - key
+                                - operator
+                                type: object
+                              type: array
+                            matchLabels:
+                              additionalProperties:
+                                type: string
+                              type: object
+                          type: object
+                        serviceName:
+                          type: string
+                        template:
+                          properties:
+                            metadata:
+                              properties:
+                                annotations:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                finalizers:
+                                  items:
+                                    type: string
+                                  type: array
+                                labels:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                name:
+                                  type: string
+                                namespace:
+                                  type: string
+                              type: object
+                            spec:
+                              properties:
+                                activeDeadlineSeconds:
+                                  format: int64
+                                  type: integer
+                                affinity:
+                                  properties:
+                                    nodeAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              preference:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - preference
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          properties:
+                                            nodeSelectorTerms:
+                                              items:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              type: array
+                                          required:
+                                          - nodeSelectorTerms
+                                          type: object
+                                      type: object
+                                    podAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                    podAntiAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                  type: object
+                                automountServiceAccountToken:
+                                  type: boolean
+                                containers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                dnsConfig:
+                                  properties:
+                                    nameservers:
+                                      items:
+                                        type: string
+                                      type: array
+                                    options:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        type: object
+                                      type: array
+                                    searches:
+                                      items:
+                                        type: string
+                                      type: array
+                                  type: object
+                                dnsPolicy:
+                                  type: string
+                                enableServiceLinks:
+                                  type: boolean
+                                ephemeralContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      targetContainerName:
+                                        type: string
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                hostAliases:
+                                  items:
+                                    properties:
+                                      hostnames:
+                                        items:
+                                          type: string
+                                        type: array
+                                      ip:
+                                        type: string
+                                    type: object
+                                  type: array
+                                hostIPC:
+                                  type: boolean
+                                hostNetwork:
+                                  type: boolean
+                                hostPID:
+                                  type: boolean
+                                hostname:
+                                  type: string
+                                imagePullSecrets:
+                                  items:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  type: array
+                                initContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                nodeName:
+                                  type: string
+                                nodeSelector:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                  x-kubernetes-map-type: atomic
+                                os:
+                                  properties:
+                                    name:
+                                      type: string
+                                  required:
+                                  - name
+                                  type: object
+                                overhead:
+                                  additionalProperties:
+                                    anyOf:
+                                    - type: integer
+                                    - type: string
+                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                    x-kubernetes-int-or-string: true
+                                  type: object
+                                preemptionPolicy:
+                                  type: string
+                                priority:
+                                  format: int32
+                                  type: integer
+                                priorityClassName:
+                                  type: string
+                                readinessGates:
+                                  items:
+                                    properties:
+                                      conditionType:
+                                        type: string
+                                    required:
+                                    - conditionType
+                                    type: object
+                                  type: array
+                                restartPolicy:
+                                  type: string
+                                runtimeClassName:
+                                  type: string
+                                schedulerName:
+                                  type: string
+                                securityContext:
+                                  properties:
+                                    fsGroup:
+                                      format: int64
+                                      type: integer
+                                    fsGroupChangePolicy:
+                                      type: string
+                                    runAsGroup:
+                                      format: int64
+                                      type: integer
+                                    runAsNonRoot:
+                                      type: boolean
+                                    runAsUser:
+                                      format: int64
+                                      type: integer
+                                    seLinuxOptions:
+                                      properties:
+                                        level:
+                                          type: string
+                                        role:
+                                          type: string
+                                        type:
+                                          type: string
+                                        user:
+                                          type: string
+                                      type: object
+                                    seccompProfile:
+                                      properties:
+                                        localhostProfile:
+                                          type: string
+                                        type:
+                                          type: string
+                                      required:
+                                      - type
+                                      type: object
+                                    supplementalGroups:
+                                      items:
+                                        format: int64
+                                        type: integer
+                                      type: array
+                                    sysctls:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        required:
+                                        - name
+                                        - value
+                                        type: object
+                                      type: array
+                                    windowsOptions:
+                                      properties:
+                                        gmsaCredentialSpec:
+                                          type: string
+                                        gmsaCredentialSpecName:
+                                          type: string
+                                        hostProcess:
+                                          type: boolean
+                                        runAsUserName:
+                                          type: string
+                                      type: object
+                                  type: object
+                                serviceAccount:
+                                  type: string
+                                serviceAccountName:
+                                  type: string
+                                setHostnameAsFQDN:
+                                  type: boolean
+                                shareProcessNamespace:
+                                  type: boolean
+                                subdomain:
+                                  type: string
+                                terminationGracePeriodSeconds:
+                                  format: int64
+                                  type: integer
+                                tolerations:
+                                  items:
+                                    properties:
+                                      effect:
+                                        type: string
+                                      key:
+                                        type: string
+                                      operator:
+                                        type: string
+                                      tolerationSeconds:
+                                        format: int64
+                                        type: integer
+                                      value:
+                                        type: string
+                                    type: object
+                                  type: array
+                                topologySpreadConstraints:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      maxSkew:
+                                        format: int32
+                                        type: integer
+                                      topologyKey:
+                                        type: string
+                                      whenUnsatisfiable:
+                                        type: string
+                                    required:
+                                    - maxSkew
+                                    - topologyKey
+                                    - whenUnsatisfiable
+                                    type: object
+                                  type: array
+                                  x-kubernetes-list-map-keys:
+                                  - topologyKey
+                                  - whenUnsatisfiable
+                                  x-kubernetes-list-type: map
+                                volumes:
+                                  items:
+                                    properties:
+                                      awsElasticBlockStore:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      azureDisk:
+                                        properties:
+                                          cachingMode:
+                                            type: string
+                                          diskName:
+                                            type: string
+                                          diskURI:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          kind:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - diskName
+                                        - diskURI
+                                        type: object
+                                      azureFile:
+                                        properties:
+                                          readOnly:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                          shareName:
+                                            type: string
+                                        required:
+                                        - secretName
+                                        - shareName
+                                        type: object
+                                      cephfs:
+                                        properties:
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretFile:
+                                            type: string
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - monitors
+                                        type: object
+                                      cinder:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      configMap:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          name:
+                                            type: string
+                                          optional:
+                                            type: boolean
+                                        type: object
+                                      csi:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          nodePublishSecretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          volumeAttributes:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      downwardAPI:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                              required:
+                                              - path
+                                              type: object
+                                            type: array
+                                        type: object
+                                      emptyDir:
+                                        properties:
+                                          medium:
+                                            type: string
+                                          sizeLimit:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                            x-kubernetes-int-or-string: true
+                                        type: object
+                                      ephemeral:
+                                        properties:
+                                          volumeClaimTemplate:
+                                            properties:
+                                              metadata:
+                                                properties:
+                                                  annotations:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  finalizers:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  labels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  name:
+                                                    type: string
+                                                  namespace:
+                                                    type: string
+                                                type: object
+                                              spec:
+                                                properties:
+                                                  accessModes:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  dataSource:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  dataSourceRef:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  resources:
+                                                    properties:
+                                                      limits:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                      requests:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                    type: object
+                                                  selector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  storageClassName:
+                                                    type: string
+                                                  volumeMode:
+                                                    type: string
+                                                  volumeName:
+                                                    type: string
+                                                type: object
+                                            required:
+                                            - spec
+                                            type: object
+                                        type: object
+                                      fc:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          targetWWNs:
+                                            items:
+                                              type: string
+                                            type: array
+                                          wwids:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      flexVolume:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          options:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      flocker:
+                                        properties:
+                                          datasetName:
+                                            type: string
+                                          datasetUUID:
+                                            type: string
+                                        type: object
+                                      gcePersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          pdName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - pdName
+                                        type: object
+                                      gitRepo:
+                                        properties:
+                                          directory:
+                                            type: string
+                                          repository:
+                                            type: string
+                                          revision:
+                                            type: string
+                                        required:
+                                        - repository
+                                        type: object
+                                      glusterfs:
+                                        properties:
+                                          endpoints:
+                                            type: string
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - endpoints
+                                        - path
+                                        type: object
+                                      hostPath:
+                                        properties:
+                                          path:
+                                            type: string
+                                          type:
+                                            type: string
+                                        required:
+                                        - path
+                                        type: object
+                                      iscsi:
+                                        properties:
+                                          chapAuthDiscovery:
+                                            type: boolean
+                                          chapAuthSession:
+                                            type: boolean
+                                          fsType:
+                                            type: string
+                                          initiatorName:
+                                            type: string
+                                          iqn:
+                                            type: string
+                                          iscsiInterface:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          portals:
+                                            items:
+                                              type: string
+                                            type: array
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          targetPortal:
+                                            type: string
+                                        required:
+                                        - iqn
+                                        - lun
+                                        - targetPortal
+                                        type: object
+                                      name:
+                                        type: string
+                                      nfs:
+                                        properties:
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          server:
+                                            type: string
+                                        required:
+                                        - path
+                                        - server
+                                        type: object
+                                      persistentVolumeClaim:
+                                        properties:
+                                          claimName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - claimName
+                                        type: object
+                                      photonPersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          pdID:
+                                            type: string
+                                        required:
+                                        - pdID
+                                        type: object
+                                      portworxVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      projected:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          sources:
+                                            items:
+                                              properties:
+                                                configMap:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                downwardAPI:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          fieldRef:
+                                                            properties:
+                                                              apiVersion:
+                                                                type: string
+                                                              fieldPath:
+                                                                type: string
+                                                            required:
+                                                            - fieldPath
+                                                            type: object
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                          resourceFieldRef:
+                                                            properties:
+                                                              containerName:
+                                                                type: string
+                                                              divisor:
+                                                                anyOf:
+                                                                - type: integer
+                                                                - type: string
+                                                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                                x-kubernetes-int-or-string: true
+                                                              resource:
+                                                                type: string
+                                                            required:
+                                                            - resource
+                                                            type: object
+                                                        required:
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                  type: object
+                                                secret:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                serviceAccountToken:
+                                                  properties:
+                                                    audience:
+                                                      type: string
+                                                    expirationSeconds:
+                                                      format: int64
+                                                      type: integer
+                                                    path:
+                                                      type: string
+                                                  required:
+                                                  - path
+                                                  type: object
+                                              type: object
+                                            type: array
+                                        type: object
+                                      quobyte:
+                                        properties:
+                                          group:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          registry:
+                                            type: string
+                                          tenant:
+                                            type: string
+                                          user:
+                                            type: string
+                                          volume:
+                                            type: string
+                                        required:
+                                        - registry
+                                        - volume
+                                        type: object
+                                      rbd:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          image:
+                                            type: string
+                                          keyring:
+                                            type: string
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          pool:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - image
+                                        - monitors
+                                        type: object
+                                      scaleIO:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          gateway:
+                                            type: string
+                                          protectionDomain:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          sslEnabled:
+                                            type: boolean
+                                          storageMode:
+                                            type: string
+                                          storagePool:
+                                            type: string
+                                          system:
+                                            type: string
+                                          volumeName:
+                                            type: string
+                                        required:
+                                        - gateway
+                                        - secretRef
+                                        - system
+                                        type: object
+                                      secret:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          optional:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                        type: object
+                                      storageos:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeName:
+                                            type: string
+                                          volumeNamespace:
+                                            type: string
+                                        type: object
+                                      vsphereVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          storagePolicyID:
+                                            type: string
+                                          storagePolicyName:
+                                            type: string
+                                          volumePath:
+                                            type: string
+                                        required:
+                                        - volumePath
+                                        type: object
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                              required:
+                              - containers
+                              type: object
+                          type: object
+                        updateStrategy:
+                          properties:
+                            rollingUpdate:
+                              properties:
+                                partition:
+                                  format: int32
+                                  type: integer
+                              type: object
+                            type:
+                              type: string
+                          type: object
+                        volumeClaimTemplates:
+                          items:
+                            properties:
+                              apiVersion:
+                                type: string
+                              kind:
+                                type: string
+                              metadata:
+                                properties:
+                                  annotations:
+                                    additionalProperties:
+                                      type: string
+                                    type: object
+                                  finalizers:
+                                    items:
+                                      type: string
+                                    type: array
+                                  labels:
+                                    additionalProperties:
+                                      type: string
+                                    type: object
+                                  name:
+                                    type: string
+                                  namespace:
+                                    type: string
+                                type: object
+                              spec:
+                                properties:
+                                  accessModes:
+                                    items:
+                                      type: string
+                                    type: array
+                                  dataSource:
+                                    properties:
+                                      apiGroup:
+                                        type: string
+                                      kind:
+                                        type: string
+                                      name:
+                                        type: string
+                                    required:
+                                    - kind
+                                    - name
+                                    type: object
+                                  dataSourceRef:
+                                    properties:
+                                      apiGroup:
+                                        type: string
+                                      kind:
+                                        type: string
+                                      name:
+                                        type: string
+                                    required:
+                                    - kind
+                                    - name
+                                    type: object
+                                  resources:
+                                    properties:
+                                      limits:
+                                        additionalProperties:
+                                          anyOf:
+                                          - type: integer
+                                          - type: string
+                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                          x-kubernetes-int-or-string: true
+                                        type: object
+                                      requests:
+                                        additionalProperties:
+                                          anyOf:
+                                          - type: integer
+                                          - type: string
+                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                          x-kubernetes-int-or-string: true
+                                        type: object
+                                    type: object
+                                  selector:
+                                    properties:
+                                      matchExpressions:
+                                        items:
+                                          properties:
+                                            key:
+                                              type: string
+                                            operator:
+                                              type: string
+                                            values:
+                                              items:
+                                                type: string
+                                              type: array
+                                          required:
+                                          - key
+                                          - operator
+                                          type: object
+                                        type: array
+                                      matchLabels:
+                                        additionalProperties:
+                                          type: string
+                                        type: object
+                                    type: object
+                                  storageClassName:
+                                    type: string
+                                  volumeMode:
+                                    type: string
+                                  volumeName:
+                                    type: string
+                                type: object
+                              status:
+                                properties:
+                                  accessModes:
+                                    items:
+                                      type: string
+                                    type: array
+                                  allocatedResources:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                  capacity:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                  conditions:
+                                    items:
+                                      properties:
+                                        lastProbeTime:
+                                          format: date-time
+                                          type: string
+                                        lastTransitionTime:
+                                          format: date-time
+                                          type: string
+                                        message:
+                                          type: string
+                                        reason:
+                                          type: string
+                                        status:
+                                          type: string
+                                        type:
+                                          type: string
+                                      required:
+                                      - status
+                                      - type
+                                      type: object
+                                    type: array
+                                  phase:
+                                    type: string
+                                  resizeStatus:
+                                    type: string
+                                type: object
+                            type: object
+                          type: array
+                      required:
+                      - selector
+                      - serviceName
+                      - template
+                      type: object
+                    status:
+                      properties:
+                        availableReplicas:
+                          format: int32
+                          type: integer
+                        collisionCount:
+                          format: int32
+                          type: integer
+                        conditions:
+                          items:
+                            properties:
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                        currentReplicas:
+                          format: int32
+                          type: integer
+                        currentRevision:
+                          type: string
+                        observedGeneration:
+                          format: int64
+                          type: integer
+                        readyReplicas:
+                          format: int32
+                          type: integer
+                        replicas:
+                          format: int32
+                          type: integer
+                        updateRevision:
+                          type: string
+                        updatedReplicas:
+                          format: int32
+                          type: integer
+                      required:
+                      - availableReplicas
+                      - replicas
+                      type: object
+                  type: object
+                type: array
+            required:
+            - ready
+            - resourceCount
+            type: object
+        type: object
+    served: true
+    storage: true
+    subresources:
+      status: {}
+status:
+  acceptedNames:
+    kind: ""
+    plural: ""
+  conditions: []
+  storedVersions: []
+
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  creationTimestamp: null
+  name: monitor
+rules:
+- apiGroups:
+  - ""
+  resources:
+  - pods
+  - services
+  - endpoints
+  - persistentvolumeclaims
+  - events
+  - configmaps
+  - secrets
+  verbs:
+  - '*'
+- apiGroups:
+  - apps
+  resources:
+  - deployments
+  - daemonsets
+  - replicasets
+  - statefulsets
+  verbs:
+  - '*'
+- apiGroups:
+  - monitoring.coreos.com
+  resources:
+  - servicemonitors
+  verbs:
+  - get
+  - create
+- apiGroups:
+  - apps
+  resourceNames:
+  - monitor
+  resources:
+  - deployments/finalizers
+  verbs:
+  - update
+- apiGroups:
+  - ""
+  resources:
+  - pods
+  verbs:
+  - get
+- apiGroups:
+  - apps
+  resources:
+  - replicasets
+  verbs:
+  - get
+- apiGroups:
+  - k8splugin.io
+  resources:
+  - '*'
+  verbs:
+  - '*'
+- apiGroups:
+  - batch
+  resources:
+  - '*'
+  verbs:
+  - '*'
+- apiGroups:
+  - extensions
+  resources:
+  - '*'
+  verbs:
+  - '*'
+- apiGroups:
+  - certificates.k8s.io
+  resources:
+  - '*'
+  verbs:
+  - '*'
+
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: monitor
+subjects:
+- kind: ServiceAccount
+  name: monitor
+  namespace: default
+roleRef:
+  kind: ClusterRole
+  name: cluster-admin
+  apiGroup: rbac.authorization.k8s.io
+
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: monitor
+  namespace: default
+
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: monitor-monitor-list
+  namespace: default
+data:
+  gvk.conf: |
+      [
+        {"Group": "k8s.plugin.opnfv.org", "Version": "v1alpha1", "Kind": "Network", "Resource": "networks" },
+        {"Group": "rbac.authorization.k8s.io", "Version": "v1", "Kind": "ClusterRole", "Resource": "clusterroles"},
+        {"Group": "batch.sdewan.akraino.org", "Version": "v1alpha1", "Kind": "IpsecProposal", "Resource": "ipsecproposals"},
+        {"Group": "batch.sdewan.akraino.org", "Version": "v1alpha1", "Kind": "IpsecHost", "Resource": "ipsechosts"},
+        {"Group": "batch.sdewan.akraino.org", "Version": "v1alpha1", "Kind": "IpsecSite", "Resource": "ipsecsites"},
+        {"Group": "batch.sdewan.akraino.org", "Version": "v1alpha1", "Kind": "CNFNAT", "Resource": "cnfnats"},
+        {"Group": "batch.sdewan.akraino.org", "Version": "v1alpha1", "Kind": "CNFRoute", "Resource": "cnfroutes"},
+        {"Group": "batch.sdewan.akraino.org", "Version": "v1alpha1", "Kind": "CNFRouteRule", "Resource": "cnfrouterules"},
+        {"Group": "batch.sdewan.akraino.org", "Version": "v1alpha1", "Kind": "CNFStatus", "Resource": "cnfstatuses"}
+      ]
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: monitor
+  namespace: default
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: monitor
+  template:
+    metadata:
+      labels:
+        app: monitor
+    spec:
+      serviceAccountName: monitor
+      containers:
+        - name: monitor
+          # Replace this with the built image name
+          image: scc:latest
+          command: ["/opt/scc/entrypoint", "monitor"]
+          imagePullPolicy: IfNotPresent
+          volumeMounts:
+          - name: config-volume
+            mountPath: /opt/emco/monitor/gvk.conf
+            subPath: gvk.conf
+          env:
+            - name: NO_PROXY
+              value: "localhost,10.96.0.1/24,.cluster.local.,.cluster.local,.svc,mongo,rsync,etcd"
+            - name: no_proxy
+              value: "localhost,10.96.0.1/24,.cluster.local.,.cluster.local,.svc,mongo,rsync,etcd"
+            - name: http_proxy
+              value: {http_proxy}
+            - name: https_proxy
+              value: {https_proxy}
+            - name: HTTP_PROXY
+              value: {http_proxy}
+            - name: HTTPS_PROXY
+              value: {https_proxy}
+            - name: WATCH_NAMESPACE
+              value: ""
+            - name: POD_NAME
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.name
+            - name: OPERATOR_NAME
+              value: "monitor"
+            - name: GIT_USERNAME
+              valueFrom:
+                secretKeyRef:
+                  name: monitor-git-monitor
+                  key: username
+            - name: GIT_TOKEN
+              valueFrom:
+                secretKeyRef:
+                  name: monitor-git-monitor
+                  key: token
+            - name: GIT_REPO
+              valueFrom:
+                secretKeyRef:
+                  name: monitor-git-monitor
+                  key: repo
+            - name: GIT_CLUSTERNAME
+              valueFrom:
+                secretKeyRef:
+                  name: monitor-git-monitor
+                  key: clustername
+      volumes:
+      - name: config-volume
+        configMap:
+          name: monitor-monitor-list
diff --git a/central-controller/deployments/kubernetes/monitor-deploy/monitor-deploy-pushmode.yaml b/central-controller/deployments/kubernetes/monitor-deploy/monitor-deploy-pushmode.yaml
new file mode 100644 (file)
index 0000000..8739517
--- /dev/null
@@ -0,0 +1,17042 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2022 Intel Corporation
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  annotations:
+    controller-gen.kubebuilder.io/version: v0.7.0
+  creationTimestamp: null
+  name: resourcebundlestates.k8splugin.io
+spec:
+  group: k8splugin.io
+  names:
+    kind: ResourceBundleState
+    listKind: ResourceBundleStateList
+    plural: resourcebundlestates
+    singular: resourcebundlestate
+  scope: Namespaced
+  versions:
+  - name: v1alpha1
+    schema:
+      openAPIV3Schema:
+        properties:
+          apiVersion:
+            type: string
+          kind:
+            type: string
+          metadata:
+            type: object
+          spec:
+            properties:
+              selector:
+                properties:
+                  matchExpressions:
+                    items:
+                      properties:
+                        key:
+                          type: string
+                        operator:
+                          type: string
+                        values:
+                          items:
+                            type: string
+                          type: array
+                      required:
+                      - key
+                      - operator
+                      type: object
+                    type: array
+                  matchLabels:
+                    additionalProperties:
+                      type: string
+                    type: object
+                type: object
+            required:
+            - selector
+            type: object
+          status:
+            properties:
+              configMapStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    binaryData:
+                      additionalProperties:
+                        format: byte
+                        type: string
+                      type: object
+                    data:
+                      additionalProperties:
+                        type: string
+                      type: object
+                    immutable:
+                      type: boolean
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                  type: object
+                type: array
+              csrStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        expirationSeconds:
+                          format: int32
+                          type: integer
+                        extra:
+                          additionalProperties:
+                            items:
+                              type: string
+                            type: array
+                          type: object
+                        groups:
+                          items:
+                            type: string
+                          type: array
+                          x-kubernetes-list-type: atomic
+                        request:
+                          format: byte
+                          type: string
+                        signerName:
+                          type: string
+                        uid:
+                          type: string
+                        usages:
+                          items:
+                            type: string
+                          type: array
+                          x-kubernetes-list-type: atomic
+                        username:
+                          type: string
+                      required:
+                      - request
+                      - signerName
+                      type: object
+                    status:
+                      properties:
+                        certificate:
+                          format: byte
+                          type: string
+                        conditions:
+                          items:
+                            properties:
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              lastUpdateTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                          - type
+                          x-kubernetes-list-type: map
+                      type: object
+                  required:
+                  - spec
+                  type: object
+                type: array
+              daemonSetStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        minReadySeconds:
+                          format: int32
+                          type: integer
+                        revisionHistoryLimit:
+                          format: int32
+                          type: integer
+                        selector:
+                          properties:
+                            matchExpressions:
+                              items:
+                                properties:
+                                  key:
+                                    type: string
+                                  operator:
+                                    type: string
+                                  values:
+                                    items:
+                                      type: string
+                                    type: array
+                                required:
+                                - key
+                                - operator
+                                type: object
+                              type: array
+                            matchLabels:
+                              additionalProperties:
+                                type: string
+                              type: object
+                          type: object
+                        template:
+                          properties:
+                            metadata:
+                              properties:
+                                annotations:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                finalizers:
+                                  items:
+                                    type: string
+                                  type: array
+                                labels:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                name:
+                                  type: string
+                                namespace:
+                                  type: string
+                              type: object
+                            spec:
+                              properties:
+                                activeDeadlineSeconds:
+                                  format: int64
+                                  type: integer
+                                affinity:
+                                  properties:
+                                    nodeAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              preference:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - preference
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          properties:
+                                            nodeSelectorTerms:
+                                              items:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              type: array
+                                          required:
+                                          - nodeSelectorTerms
+                                          type: object
+                                      type: object
+                                    podAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                    podAntiAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                  type: object
+                                automountServiceAccountToken:
+                                  type: boolean
+                                containers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                dnsConfig:
+                                  properties:
+                                    nameservers:
+                                      items:
+                                        type: string
+                                      type: array
+                                    options:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        type: object
+                                      type: array
+                                    searches:
+                                      items:
+                                        type: string
+                                      type: array
+                                  type: object
+                                dnsPolicy:
+                                  type: string
+                                enableServiceLinks:
+                                  type: boolean
+                                ephemeralContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      targetContainerName:
+                                        type: string
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                hostAliases:
+                                  items:
+                                    properties:
+                                      hostnames:
+                                        items:
+                                          type: string
+                                        type: array
+                                      ip:
+                                        type: string
+                                    type: object
+                                  type: array
+                                hostIPC:
+                                  type: boolean
+                                hostNetwork:
+                                  type: boolean
+                                hostPID:
+                                  type: boolean
+                                hostname:
+                                  type: string
+                                imagePullSecrets:
+                                  items:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  type: array
+                                initContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                nodeName:
+                                  type: string
+                                nodeSelector:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                  x-kubernetes-map-type: atomic
+                                os:
+                                  properties:
+                                    name:
+                                      type: string
+                                  required:
+                                  - name
+                                  type: object
+                                overhead:
+                                  additionalProperties:
+                                    anyOf:
+                                    - type: integer
+                                    - type: string
+                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                    x-kubernetes-int-or-string: true
+                                  type: object
+                                preemptionPolicy:
+                                  type: string
+                                priority:
+                                  format: int32
+                                  type: integer
+                                priorityClassName:
+                                  type: string
+                                readinessGates:
+                                  items:
+                                    properties:
+                                      conditionType:
+                                        type: string
+                                    required:
+                                    - conditionType
+                                    type: object
+                                  type: array
+                                restartPolicy:
+                                  type: string
+                                runtimeClassName:
+                                  type: string
+                                schedulerName:
+                                  type: string
+                                securityContext:
+                                  properties:
+                                    fsGroup:
+                                      format: int64
+                                      type: integer
+                                    fsGroupChangePolicy:
+                                      type: string
+                                    runAsGroup:
+                                      format: int64
+                                      type: integer
+                                    runAsNonRoot:
+                                      type: boolean
+                                    runAsUser:
+                                      format: int64
+                                      type: integer
+                                    seLinuxOptions:
+                                      properties:
+                                        level:
+                                          type: string
+                                        role:
+                                          type: string
+                                        type:
+                                          type: string
+                                        user:
+                                          type: string
+                                      type: object
+                                    seccompProfile:
+                                      properties:
+                                        localhostProfile:
+                                          type: string
+                                        type:
+                                          type: string
+                                      required:
+                                      - type
+                                      type: object
+                                    supplementalGroups:
+                                      items:
+                                        format: int64
+                                        type: integer
+                                      type: array
+                                    sysctls:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        required:
+                                        - name
+                                        - value
+                                        type: object
+                                      type: array
+                                    windowsOptions:
+                                      properties:
+                                        gmsaCredentialSpec:
+                                          type: string
+                                        gmsaCredentialSpecName:
+                                          type: string
+                                        hostProcess:
+                                          type: boolean
+                                        runAsUserName:
+                                          type: string
+                                      type: object
+                                  type: object
+                                serviceAccount:
+                                  type: string
+                                serviceAccountName:
+                                  type: string
+                                setHostnameAsFQDN:
+                                  type: boolean
+                                shareProcessNamespace:
+                                  type: boolean
+                                subdomain:
+                                  type: string
+                                terminationGracePeriodSeconds:
+                                  format: int64
+                                  type: integer
+                                tolerations:
+                                  items:
+                                    properties:
+                                      effect:
+                                        type: string
+                                      key:
+                                        type: string
+                                      operator:
+                                        type: string
+                                      tolerationSeconds:
+                                        format: int64
+                                        type: integer
+                                      value:
+                                        type: string
+                                    type: object
+                                  type: array
+                                topologySpreadConstraints:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      maxSkew:
+                                        format: int32
+                                        type: integer
+                                      topologyKey:
+                                        type: string
+                                      whenUnsatisfiable:
+                                        type: string
+                                    required:
+                                    - maxSkew
+                                    - topologyKey
+                                    - whenUnsatisfiable
+                                    type: object
+                                  type: array
+                                  x-kubernetes-list-map-keys:
+                                  - topologyKey
+                                  - whenUnsatisfiable
+                                  x-kubernetes-list-type: map
+                                volumes:
+                                  items:
+                                    properties:
+                                      awsElasticBlockStore:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      azureDisk:
+                                        properties:
+                                          cachingMode:
+                                            type: string
+                                          diskName:
+                                            type: string
+                                          diskURI:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          kind:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - diskName
+                                        - diskURI
+                                        type: object
+                                      azureFile:
+                                        properties:
+                                          readOnly:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                          shareName:
+                                            type: string
+                                        required:
+                                        - secretName
+                                        - shareName
+                                        type: object
+                                      cephfs:
+                                        properties:
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretFile:
+                                            type: string
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - monitors
+                                        type: object
+                                      cinder:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      configMap:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          name:
+                                            type: string
+                                          optional:
+                                            type: boolean
+                                        type: object
+                                      csi:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          nodePublishSecretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          volumeAttributes:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      downwardAPI:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                              required:
+                                              - path
+                                              type: object
+                                            type: array
+                                        type: object
+                                      emptyDir:
+                                        properties:
+                                          medium:
+                                            type: string
+                                          sizeLimit:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                            x-kubernetes-int-or-string: true
+                                        type: object
+                                      ephemeral:
+                                        properties:
+                                          volumeClaimTemplate:
+                                            properties:
+                                              metadata:
+                                                properties:
+                                                  annotations:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  finalizers:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  labels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  name:
+                                                    type: string
+                                                  namespace:
+                                                    type: string
+                                                type: object
+                                              spec:
+                                                properties:
+                                                  accessModes:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  dataSource:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  dataSourceRef:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  resources:
+                                                    properties:
+                                                      limits:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                      requests:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                    type: object
+                                                  selector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  storageClassName:
+                                                    type: string
+                                                  volumeMode:
+                                                    type: string
+                                                  volumeName:
+                                                    type: string
+                                                type: object
+                                            required:
+                                            - spec
+                                            type: object
+                                        type: object
+                                      fc:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          targetWWNs:
+                                            items:
+                                              type: string
+                                            type: array
+                                          wwids:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      flexVolume:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          options:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      flocker:
+                                        properties:
+                                          datasetName:
+                                            type: string
+                                          datasetUUID:
+                                            type: string
+                                        type: object
+                                      gcePersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          pdName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - pdName
+                                        type: object
+                                      gitRepo:
+                                        properties:
+                                          directory:
+                                            type: string
+                                          repository:
+                                            type: string
+                                          revision:
+                                            type: string
+                                        required:
+                                        - repository
+                                        type: object
+                                      glusterfs:
+                                        properties:
+                                          endpoints:
+                                            type: string
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - endpoints
+                                        - path
+                                        type: object
+                                      hostPath:
+                                        properties:
+                                          path:
+                                            type: string
+                                          type:
+                                            type: string
+                                        required:
+                                        - path
+                                        type: object
+                                      iscsi:
+                                        properties:
+                                          chapAuthDiscovery:
+                                            type: boolean
+                                          chapAuthSession:
+                                            type: boolean
+                                          fsType:
+                                            type: string
+                                          initiatorName:
+                                            type: string
+                                          iqn:
+                                            type: string
+                                          iscsiInterface:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          portals:
+                                            items:
+                                              type: string
+                                            type: array
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          targetPortal:
+                                            type: string
+                                        required:
+                                        - iqn
+                                        - lun
+                                        - targetPortal
+                                        type: object
+                                      name:
+                                        type: string
+                                      nfs:
+                                        properties:
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          server:
+                                            type: string
+                                        required:
+                                        - path
+                                        - server
+                                        type: object
+                                      persistentVolumeClaim:
+                                        properties:
+                                          claimName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - claimName
+                                        type: object
+                                      photonPersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          pdID:
+                                            type: string
+                                        required:
+                                        - pdID
+                                        type: object
+                                      portworxVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      projected:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          sources:
+                                            items:
+                                              properties:
+                                                configMap:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                downwardAPI:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          fieldRef:
+                                                            properties:
+                                                              apiVersion:
+                                                                type: string
+                                                              fieldPath:
+                                                                type: string
+                                                            required:
+                                                            - fieldPath
+                                                            type: object
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                          resourceFieldRef:
+                                                            properties:
+                                                              containerName:
+                                                                type: string
+                                                              divisor:
+                                                                anyOf:
+                                                                - type: integer
+                                                                - type: string
+                                                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                                x-kubernetes-int-or-string: true
+                                                              resource:
+                                                                type: string
+                                                            required:
+                                                            - resource
+                                                            type: object
+                                                        required:
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                  type: object
+                                                secret:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                serviceAccountToken:
+                                                  properties:
+                                                    audience:
+                                                      type: string
+                                                    expirationSeconds:
+                                                      format: int64
+                                                      type: integer
+                                                    path:
+                                                      type: string
+                                                  required:
+                                                  - path
+                                                  type: object
+                                              type: object
+                                            type: array
+                                        type: object
+                                      quobyte:
+                                        properties:
+                                          group:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          registry:
+                                            type: string
+                                          tenant:
+                                            type: string
+                                          user:
+                                            type: string
+                                          volume:
+                                            type: string
+                                        required:
+                                        - registry
+                                        - volume
+                                        type: object
+                                      rbd:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          image:
+                                            type: string
+                                          keyring:
+                                            type: string
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          pool:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - image
+                                        - monitors
+                                        type: object
+                                      scaleIO:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          gateway:
+                                            type: string
+                                          protectionDomain:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          sslEnabled:
+                                            type: boolean
+                                          storageMode:
+                                            type: string
+                                          storagePool:
+                                            type: string
+                                          system:
+                                            type: string
+                                          volumeName:
+                                            type: string
+                                        required:
+                                        - gateway
+                                        - secretRef
+                                        - system
+                                        type: object
+                                      secret:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          optional:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                        type: object
+                                      storageos:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeName:
+                                            type: string
+                                          volumeNamespace:
+                                            type: string
+                                        type: object
+                                      vsphereVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          storagePolicyID:
+                                            type: string
+                                          storagePolicyName:
+                                            type: string
+                                          volumePath:
+                                            type: string
+                                        required:
+                                        - volumePath
+                                        type: object
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                              required:
+                              - containers
+                              type: object
+                          type: object
+                        updateStrategy:
+                          properties:
+                            rollingUpdate:
+                              properties:
+                                maxSurge:
+                                  anyOf:
+                                  - type: integer
+                                  - type: string
+                                  x-kubernetes-int-or-string: true
+                                maxUnavailable:
+                                  anyOf:
+                                  - type: integer
+                                  - type: string
+                                  x-kubernetes-int-or-string: true
+                              type: object
+                            type:
+                              type: string
+                          type: object
+                      required:
+                      - selector
+                      - template
+                      type: object
+                    status:
+                      properties:
+                        collisionCount:
+                          format: int32
+                          type: integer
+                        conditions:
+                          items:
+                            properties:
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                        currentNumberScheduled:
+                          format: int32
+                          type: integer
+                        desiredNumberScheduled:
+                          format: int32
+                          type: integer
+                        numberAvailable:
+                          format: int32
+                          type: integer
+                        numberMisscheduled:
+                          format: int32
+                          type: integer
+                        numberReady:
+                          format: int32
+                          type: integer
+                        numberUnavailable:
+                          format: int32
+                          type: integer
+                        observedGeneration:
+                          format: int64
+                          type: integer
+                        updatedNumberScheduled:
+                          format: int32
+                          type: integer
+                      required:
+                      - currentNumberScheduled
+                      - desiredNumberScheduled
+                      - numberMisscheduled
+                      - numberReady
+                      type: object
+                  type: object
+                type: array
+              deploymentStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        minReadySeconds:
+                          format: int32
+                          type: integer
+                        paused:
+                          type: boolean
+                        progressDeadlineSeconds:
+                          format: int32
+                          type: integer
+                        replicas:
+                          format: int32
+                          type: integer
+                        revisionHistoryLimit:
+                          format: int32
+                          type: integer
+                        selector:
+                          properties:
+                            matchExpressions:
+                              items:
+                                properties:
+                                  key:
+                                    type: string
+                                  operator:
+                                    type: string
+                                  values:
+                                    items:
+                                      type: string
+                                    type: array
+                                required:
+                                - key
+                                - operator
+                                type: object
+                              type: array
+                            matchLabels:
+                              additionalProperties:
+                                type: string
+                              type: object
+                          type: object
+                        strategy:
+                          properties:
+                            rollingUpdate:
+                              properties:
+                                maxSurge:
+                                  anyOf:
+                                  - type: integer
+                                  - type: string
+                                  x-kubernetes-int-or-string: true
+                                maxUnavailable:
+                                  anyOf:
+                                  - type: integer
+                                  - type: string
+                                  x-kubernetes-int-or-string: true
+                              type: object
+                            type:
+                              type: string
+                          type: object
+                        template:
+                          properties:
+                            metadata:
+                              properties:
+                                annotations:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                finalizers:
+                                  items:
+                                    type: string
+                                  type: array
+                                labels:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                name:
+                                  type: string
+                                namespace:
+                                  type: string
+                              type: object
+                            spec:
+                              properties:
+                                activeDeadlineSeconds:
+                                  format: int64
+                                  type: integer
+                                affinity:
+                                  properties:
+                                    nodeAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              preference:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - preference
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          properties:
+                                            nodeSelectorTerms:
+                                              items:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              type: array
+                                          required:
+                                          - nodeSelectorTerms
+                                          type: object
+                                      type: object
+                                    podAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                    podAntiAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                  type: object
+                                automountServiceAccountToken:
+                                  type: boolean
+                                containers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                dnsConfig:
+                                  properties:
+                                    nameservers:
+                                      items:
+                                        type: string
+                                      type: array
+                                    options:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        type: object
+                                      type: array
+                                    searches:
+                                      items:
+                                        type: string
+                                      type: array
+                                  type: object
+                                dnsPolicy:
+                                  type: string
+                                enableServiceLinks:
+                                  type: boolean
+                                ephemeralContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      targetContainerName:
+                                        type: string
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                hostAliases:
+                                  items:
+                                    properties:
+                                      hostnames:
+                                        items:
+                                          type: string
+                                        type: array
+                                      ip:
+                                        type: string
+                                    type: object
+                                  type: array
+                                hostIPC:
+                                  type: boolean
+                                hostNetwork:
+                                  type: boolean
+                                hostPID:
+                                  type: boolean
+                                hostname:
+                                  type: string
+                                imagePullSecrets:
+                                  items:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  type: array
+                                initContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                nodeName:
+                                  type: string
+                                nodeSelector:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                  x-kubernetes-map-type: atomic
+                                os:
+                                  properties:
+                                    name:
+                                      type: string
+                                  required:
+                                  - name
+                                  type: object
+                                overhead:
+                                  additionalProperties:
+                                    anyOf:
+                                    - type: integer
+                                    - type: string
+                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                    x-kubernetes-int-or-string: true
+                                  type: object
+                                preemptionPolicy:
+                                  type: string
+                                priority:
+                                  format: int32
+                                  type: integer
+                                priorityClassName:
+                                  type: string
+                                readinessGates:
+                                  items:
+                                    properties:
+                                      conditionType:
+                                        type: string
+                                    required:
+                                    - conditionType
+                                    type: object
+                                  type: array
+                                restartPolicy:
+                                  type: string
+                                runtimeClassName:
+                                  type: string
+                                schedulerName:
+                                  type: string
+                                securityContext:
+                                  properties:
+                                    fsGroup:
+                                      format: int64
+                                      type: integer
+                                    fsGroupChangePolicy:
+                                      type: string
+                                    runAsGroup:
+                                      format: int64
+                                      type: integer
+                                    runAsNonRoot:
+                                      type: boolean
+                                    runAsUser:
+                                      format: int64
+                                      type: integer
+                                    seLinuxOptions:
+                                      properties:
+                                        level:
+                                          type: string
+                                        role:
+                                          type: string
+                                        type:
+                                          type: string
+                                        user:
+                                          type: string
+                                      type: object
+                                    seccompProfile:
+                                      properties:
+                                        localhostProfile:
+                                          type: string
+                                        type:
+                                          type: string
+                                      required:
+                                      - type
+                                      type: object
+                                    supplementalGroups:
+                                      items:
+                                        format: int64
+                                        type: integer
+                                      type: array
+                                    sysctls:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        required:
+                                        - name
+                                        - value
+                                        type: object
+                                      type: array
+                                    windowsOptions:
+                                      properties:
+                                        gmsaCredentialSpec:
+                                          type: string
+                                        gmsaCredentialSpecName:
+                                          type: string
+                                        hostProcess:
+                                          type: boolean
+                                        runAsUserName:
+                                          type: string
+                                      type: object
+                                  type: object
+                                serviceAccount:
+                                  type: string
+                                serviceAccountName:
+                                  type: string
+                                setHostnameAsFQDN:
+                                  type: boolean
+                                shareProcessNamespace:
+                                  type: boolean
+                                subdomain:
+                                  type: string
+                                terminationGracePeriodSeconds:
+                                  format: int64
+                                  type: integer
+                                tolerations:
+                                  items:
+                                    properties:
+                                      effect:
+                                        type: string
+                                      key:
+                                        type: string
+                                      operator:
+                                        type: string
+                                      tolerationSeconds:
+                                        format: int64
+                                        type: integer
+                                      value:
+                                        type: string
+                                    type: object
+                                  type: array
+                                topologySpreadConstraints:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      maxSkew:
+                                        format: int32
+                                        type: integer
+                                      topologyKey:
+                                        type: string
+                                      whenUnsatisfiable:
+                                        type: string
+                                    required:
+                                    - maxSkew
+                                    - topologyKey
+                                    - whenUnsatisfiable
+                                    type: object
+                                  type: array
+                                  x-kubernetes-list-map-keys:
+                                  - topologyKey
+                                  - whenUnsatisfiable
+                                  x-kubernetes-list-type: map
+                                volumes:
+                                  items:
+                                    properties:
+                                      awsElasticBlockStore:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      azureDisk:
+                                        properties:
+                                          cachingMode:
+                                            type: string
+                                          diskName:
+                                            type: string
+                                          diskURI:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          kind:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - diskName
+                                        - diskURI
+                                        type: object
+                                      azureFile:
+                                        properties:
+                                          readOnly:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                          shareName:
+                                            type: string
+                                        required:
+                                        - secretName
+                                        - shareName
+                                        type: object
+                                      cephfs:
+                                        properties:
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretFile:
+                                            type: string
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - monitors
+                                        type: object
+                                      cinder:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      configMap:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          name:
+                                            type: string
+                                          optional:
+                                            type: boolean
+                                        type: object
+                                      csi:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          nodePublishSecretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          volumeAttributes:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      downwardAPI:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                              required:
+                                              - path
+                                              type: object
+                                            type: array
+                                        type: object
+                                      emptyDir:
+                                        properties:
+                                          medium:
+                                            type: string
+                                          sizeLimit:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                            x-kubernetes-int-or-string: true
+                                        type: object
+                                      ephemeral:
+                                        properties:
+                                          volumeClaimTemplate:
+                                            properties:
+                                              metadata:
+                                                properties:
+                                                  annotations:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  finalizers:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  labels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  name:
+                                                    type: string
+                                                  namespace:
+                                                    type: string
+                                                type: object
+                                              spec:
+                                                properties:
+                                                  accessModes:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  dataSource:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  dataSourceRef:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  resources:
+                                                    properties:
+                                                      limits:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                      requests:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                    type: object
+                                                  selector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  storageClassName:
+                                                    type: string
+                                                  volumeMode:
+                                                    type: string
+                                                  volumeName:
+                                                    type: string
+                                                type: object
+                                            required:
+                                            - spec
+                                            type: object
+                                        type: object
+                                      fc:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          targetWWNs:
+                                            items:
+                                              type: string
+                                            type: array
+                                          wwids:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      flexVolume:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          options:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      flocker:
+                                        properties:
+                                          datasetName:
+                                            type: string
+                                          datasetUUID:
+                                            type: string
+                                        type: object
+                                      gcePersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          pdName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - pdName
+                                        type: object
+                                      gitRepo:
+                                        properties:
+                                          directory:
+                                            type: string
+                                          repository:
+                                            type: string
+                                          revision:
+                                            type: string
+                                        required:
+                                        - repository
+                                        type: object
+                                      glusterfs:
+                                        properties:
+                                          endpoints:
+                                            type: string
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - endpoints
+                                        - path
+                                        type: object
+                                      hostPath:
+                                        properties:
+                                          path:
+                                            type: string
+                                          type:
+                                            type: string
+                                        required:
+                                        - path
+                                        type: object
+                                      iscsi:
+                                        properties:
+                                          chapAuthDiscovery:
+                                            type: boolean
+                                          chapAuthSession:
+                                            type: boolean
+                                          fsType:
+                                            type: string
+                                          initiatorName:
+                                            type: string
+                                          iqn:
+                                            type: string
+                                          iscsiInterface:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          portals:
+                                            items:
+                                              type: string
+                                            type: array
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          targetPortal:
+                                            type: string
+                                        required:
+                                        - iqn
+                                        - lun
+                                        - targetPortal
+                                        type: object
+                                      name:
+                                        type: string
+                                      nfs:
+                                        properties:
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          server:
+                                            type: string
+                                        required:
+                                        - path
+                                        - server
+                                        type: object
+                                      persistentVolumeClaim:
+                                        properties:
+                                          claimName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - claimName
+                                        type: object
+                                      photonPersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          pdID:
+                                            type: string
+                                        required:
+                                        - pdID
+                                        type: object
+                                      portworxVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      projected:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          sources:
+                                            items:
+                                              properties:
+                                                configMap:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                downwardAPI:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          fieldRef:
+                                                            properties:
+                                                              apiVersion:
+                                                                type: string
+                                                              fieldPath:
+                                                                type: string
+                                                            required:
+                                                            - fieldPath
+                                                            type: object
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                          resourceFieldRef:
+                                                            properties:
+                                                              containerName:
+                                                                type: string
+                                                              divisor:
+                                                                anyOf:
+                                                                - type: integer
+                                                                - type: string
+                                                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                                x-kubernetes-int-or-string: true
+                                                              resource:
+                                                                type: string
+                                                            required:
+                                                            - resource
+                                                            type: object
+                                                        required:
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                  type: object
+                                                secret:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                serviceAccountToken:
+                                                  properties:
+                                                    audience:
+                                                      type: string
+                                                    expirationSeconds:
+                                                      format: int64
+                                                      type: integer
+                                                    path:
+                                                      type: string
+                                                  required:
+                                                  - path
+                                                  type: object
+                                              type: object
+                                            type: array
+                                        type: object
+                                      quobyte:
+                                        properties:
+                                          group:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          registry:
+                                            type: string
+                                          tenant:
+                                            type: string
+                                          user:
+                                            type: string
+                                          volume:
+                                            type: string
+                                        required:
+                                        - registry
+                                        - volume
+                                        type: object
+                                      rbd:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          image:
+                                            type: string
+                                          keyring:
+                                            type: string
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          pool:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - image
+                                        - monitors
+                                        type: object
+                                      scaleIO:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          gateway:
+                                            type: string
+                                          protectionDomain:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          sslEnabled:
+                                            type: boolean
+                                          storageMode:
+                                            type: string
+                                          storagePool:
+                                            type: string
+                                          system:
+                                            type: string
+                                          volumeName:
+                                            type: string
+                                        required:
+                                        - gateway
+                                        - secretRef
+                                        - system
+                                        type: object
+                                      secret:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          optional:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                        type: object
+                                      storageos:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeName:
+                                            type: string
+                                          volumeNamespace:
+                                            type: string
+                                        type: object
+                                      vsphereVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          storagePolicyID:
+                                            type: string
+                                          storagePolicyName:
+                                            type: string
+                                          volumePath:
+                                            type: string
+                                        required:
+                                        - volumePath
+                                        type: object
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                              required:
+                              - containers
+                              type: object
+                          type: object
+                      required:
+                      - selector
+                      - template
+                      type: object
+                    status:
+                      properties:
+                        availableReplicas:
+                          format: int32
+                          type: integer
+                        collisionCount:
+                          format: int32
+                          type: integer
+                        conditions:
+                          items:
+                            properties:
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              lastUpdateTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                        observedGeneration:
+                          format: int64
+                          type: integer
+                        readyReplicas:
+                          format: int32
+                          type: integer
+                        replicas:
+                          format: int32
+                          type: integer
+                        unavailableReplicas:
+                          format: int32
+                          type: integer
+                        updatedReplicas:
+                          format: int32
+                          type: integer
+                      type: object
+                  type: object
+                type: array
+              jobStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        activeDeadlineSeconds:
+                          format: int64
+                          type: integer
+                        backoffLimit:
+                          format: int32
+                          type: integer
+                        completionMode:
+                          type: string
+                        completions:
+                          format: int32
+                          type: integer
+                        manualSelector:
+                          type: boolean
+                        parallelism:
+                          format: int32
+                          type: integer
+                        selector:
+                          properties:
+                            matchExpressions:
+                              items:
+                                properties:
+                                  key:
+                                    type: string
+                                  operator:
+                                    type: string
+                                  values:
+                                    items:
+                                      type: string
+                                    type: array
+                                required:
+                                - key
+                                - operator
+                                type: object
+                              type: array
+                            matchLabels:
+                              additionalProperties:
+                                type: string
+                              type: object
+                          type: object
+                        suspend:
+                          type: boolean
+                        template:
+                          properties:
+                            metadata:
+                              properties:
+                                annotations:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                finalizers:
+                                  items:
+                                    type: string
+                                  type: array
+                                labels:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                name:
+                                  type: string
+                                namespace:
+                                  type: string
+                              type: object
+                            spec:
+                              properties:
+                                activeDeadlineSeconds:
+                                  format: int64
+                                  type: integer
+                                affinity:
+                                  properties:
+                                    nodeAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              preference:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - preference
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          properties:
+                                            nodeSelectorTerms:
+                                              items:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              type: array
+                                          required:
+                                          - nodeSelectorTerms
+                                          type: object
+                                      type: object
+                                    podAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                    podAntiAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                  type: object
+                                automountServiceAccountToken:
+                                  type: boolean
+                                containers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                dnsConfig:
+                                  properties:
+                                    nameservers:
+                                      items:
+                                        type: string
+                                      type: array
+                                    options:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        type: object
+                                      type: array
+                                    searches:
+                                      items:
+                                        type: string
+                                      type: array
+                                  type: object
+                                dnsPolicy:
+                                  type: string
+                                enableServiceLinks:
+                                  type: boolean
+                                ephemeralContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      targetContainerName:
+                                        type: string
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                hostAliases:
+                                  items:
+                                    properties:
+                                      hostnames:
+                                        items:
+                                          type: string
+                                        type: array
+                                      ip:
+                                        type: string
+                                    type: object
+                                  type: array
+                                hostIPC:
+                                  type: boolean
+                                hostNetwork:
+                                  type: boolean
+                                hostPID:
+                                  type: boolean
+                                hostname:
+                                  type: string
+                                imagePullSecrets:
+                                  items:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  type: array
+                                initContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                nodeName:
+                                  type: string
+                                nodeSelector:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                  x-kubernetes-map-type: atomic
+                                os:
+                                  properties:
+                                    name:
+                                      type: string
+                                  required:
+                                  - name
+                                  type: object
+                                overhead:
+                                  additionalProperties:
+                                    anyOf:
+                                    - type: integer
+                                    - type: string
+                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                    x-kubernetes-int-or-string: true
+                                  type: object
+                                preemptionPolicy:
+                                  type: string
+                                priority:
+                                  format: int32
+                                  type: integer
+                                priorityClassName:
+                                  type: string
+                                readinessGates:
+                                  items:
+                                    properties:
+                                      conditionType:
+                                        type: string
+                                    required:
+                                    - conditionType
+                                    type: object
+                                  type: array
+                                restartPolicy:
+                                  type: string
+                                runtimeClassName:
+                                  type: string
+                                schedulerName:
+                                  type: string
+                                securityContext:
+                                  properties:
+                                    fsGroup:
+                                      format: int64
+                                      type: integer
+                                    fsGroupChangePolicy:
+                                      type: string
+                                    runAsGroup:
+                                      format: int64
+                                      type: integer
+                                    runAsNonRoot:
+                                      type: boolean
+                                    runAsUser:
+                                      format: int64
+                                      type: integer
+                                    seLinuxOptions:
+                                      properties:
+                                        level:
+                                          type: string
+                                        role:
+                                          type: string
+                                        type:
+                                          type: string
+                                        user:
+                                          type: string
+                                      type: object
+                                    seccompProfile:
+                                      properties:
+                                        localhostProfile:
+                                          type: string
+                                        type:
+                                          type: string
+                                      required:
+                                      - type
+                                      type: object
+                                    supplementalGroups:
+                                      items:
+                                        format: int64
+                                        type: integer
+                                      type: array
+                                    sysctls:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        required:
+                                        - name
+                                        - value
+                                        type: object
+                                      type: array
+                                    windowsOptions:
+                                      properties:
+                                        gmsaCredentialSpec:
+                                          type: string
+                                        gmsaCredentialSpecName:
+                                          type: string
+                                        hostProcess:
+                                          type: boolean
+                                        runAsUserName:
+                                          type: string
+                                      type: object
+                                  type: object
+                                serviceAccount:
+                                  type: string
+                                serviceAccountName:
+                                  type: string
+                                setHostnameAsFQDN:
+                                  type: boolean
+                                shareProcessNamespace:
+                                  type: boolean
+                                subdomain:
+                                  type: string
+                                terminationGracePeriodSeconds:
+                                  format: int64
+                                  type: integer
+                                tolerations:
+                                  items:
+                                    properties:
+                                      effect:
+                                        type: string
+                                      key:
+                                        type: string
+                                      operator:
+                                        type: string
+                                      tolerationSeconds:
+                                        format: int64
+                                        type: integer
+                                      value:
+                                        type: string
+                                    type: object
+                                  type: array
+                                topologySpreadConstraints:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      maxSkew:
+                                        format: int32
+                                        type: integer
+                                      topologyKey:
+                                        type: string
+                                      whenUnsatisfiable:
+                                        type: string
+                                    required:
+                                    - maxSkew
+                                    - topologyKey
+                                    - whenUnsatisfiable
+                                    type: object
+                                  type: array
+                                  x-kubernetes-list-map-keys:
+                                  - topologyKey
+                                  - whenUnsatisfiable
+                                  x-kubernetes-list-type: map
+                                volumes:
+                                  items:
+                                    properties:
+                                      awsElasticBlockStore:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      azureDisk:
+                                        properties:
+                                          cachingMode:
+                                            type: string
+                                          diskName:
+                                            type: string
+                                          diskURI:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          kind:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - diskName
+                                        - diskURI
+                                        type: object
+                                      azureFile:
+                                        properties:
+                                          readOnly:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                          shareName:
+                                            type: string
+                                        required:
+                                        - secretName
+                                        - shareName
+                                        type: object
+                                      cephfs:
+                                        properties:
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretFile:
+                                            type: string
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - monitors
+                                        type: object
+                                      cinder:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      configMap:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          name:
+                                            type: string
+                                          optional:
+                                            type: boolean
+                                        type: object
+                                      csi:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          nodePublishSecretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          volumeAttributes:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      downwardAPI:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                              required:
+                                              - path
+                                              type: object
+                                            type: array
+                                        type: object
+                                      emptyDir:
+                                        properties:
+                                          medium:
+                                            type: string
+                                          sizeLimit:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                            x-kubernetes-int-or-string: true
+                                        type: object
+                                      ephemeral:
+                                        properties:
+                                          volumeClaimTemplate:
+                                            properties:
+                                              metadata:
+                                                properties:
+                                                  annotations:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  finalizers:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  labels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  name:
+                                                    type: string
+                                                  namespace:
+                                                    type: string
+                                                type: object
+                                              spec:
+                                                properties:
+                                                  accessModes:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  dataSource:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  dataSourceRef:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  resources:
+                                                    properties:
+                                                      limits:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                      requests:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                    type: object
+                                                  selector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  storageClassName:
+                                                    type: string
+                                                  volumeMode:
+                                                    type: string
+                                                  volumeName:
+                                                    type: string
+                                                type: object
+                                            required:
+                                            - spec
+                                            type: object
+                                        type: object
+                                      fc:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          targetWWNs:
+                                            items:
+                                              type: string
+                                            type: array
+                                          wwids:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      flexVolume:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          options:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      flocker:
+                                        properties:
+                                          datasetName:
+                                            type: string
+                                          datasetUUID:
+                                            type: string
+                                        type: object
+                                      gcePersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          pdName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - pdName
+                                        type: object
+                                      gitRepo:
+                                        properties:
+                                          directory:
+                                            type: string
+                                          repository:
+                                            type: string
+                                          revision:
+                                            type: string
+                                        required:
+                                        - repository
+                                        type: object
+                                      glusterfs:
+                                        properties:
+                                          endpoints:
+                                            type: string
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - endpoints
+                                        - path
+                                        type: object
+                                      hostPath:
+                                        properties:
+                                          path:
+                                            type: string
+                                          type:
+                                            type: string
+                                        required:
+                                        - path
+                                        type: object
+                                      iscsi:
+                                        properties:
+                                          chapAuthDiscovery:
+                                            type: boolean
+                                          chapAuthSession:
+                                            type: boolean
+                                          fsType:
+                                            type: string
+                                          initiatorName:
+                                            type: string
+                                          iqn:
+                                            type: string
+                                          iscsiInterface:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          portals:
+                                            items:
+                                              type: string
+                                            type: array
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          targetPortal:
+                                            type: string
+                                        required:
+                                        - iqn
+                                        - lun
+                                        - targetPortal
+                                        type: object
+                                      name:
+                                        type: string
+                                      nfs:
+                                        properties:
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          server:
+                                            type: string
+                                        required:
+                                        - path
+                                        - server
+                                        type: object
+                                      persistentVolumeClaim:
+                                        properties:
+                                          claimName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - claimName
+                                        type: object
+                                      photonPersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          pdID:
+                                            type: string
+                                        required:
+                                        - pdID
+                                        type: object
+                                      portworxVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      projected:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          sources:
+                                            items:
+                                              properties:
+                                                configMap:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                downwardAPI:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          fieldRef:
+                                                            properties:
+                                                              apiVersion:
+                                                                type: string
+                                                              fieldPath:
+                                                                type: string
+                                                            required:
+                                                            - fieldPath
+                                                            type: object
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                          resourceFieldRef:
+                                                            properties:
+                                                              containerName:
+                                                                type: string
+                                                              divisor:
+                                                                anyOf:
+                                                                - type: integer
+                                                                - type: string
+                                                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                                x-kubernetes-int-or-string: true
+                                                              resource:
+                                                                type: string
+                                                            required:
+                                                            - resource
+                                                            type: object
+                                                        required:
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                  type: object
+                                                secret:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                serviceAccountToken:
+                                                  properties:
+                                                    audience:
+                                                      type: string
+                                                    expirationSeconds:
+                                                      format: int64
+                                                      type: integer
+                                                    path:
+                                                      type: string
+                                                  required:
+                                                  - path
+                                                  type: object
+                                              type: object
+                                            type: array
+                                        type: object
+                                      quobyte:
+                                        properties:
+                                          group:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          registry:
+                                            type: string
+                                          tenant:
+                                            type: string
+                                          user:
+                                            type: string
+                                          volume:
+                                            type: string
+                                        required:
+                                        - registry
+                                        - volume
+                                        type: object
+                                      rbd:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          image:
+                                            type: string
+                                          keyring:
+                                            type: string
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          pool:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - image
+                                        - monitors
+                                        type: object
+                                      scaleIO:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          gateway:
+                                            type: string
+                                          protectionDomain:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          sslEnabled:
+                                            type: boolean
+                                          storageMode:
+                                            type: string
+                                          storagePool:
+                                            type: string
+                                          system:
+                                            type: string
+                                          volumeName:
+                                            type: string
+                                        required:
+                                        - gateway
+                                        - secretRef
+                                        - system
+                                        type: object
+                                      secret:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          optional:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                        type: object
+                                      storageos:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeName:
+                                            type: string
+                                          volumeNamespace:
+                                            type: string
+                                        type: object
+                                      vsphereVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          storagePolicyID:
+                                            type: string
+                                          storagePolicyName:
+                                            type: string
+                                          volumePath:
+                                            type: string
+                                        required:
+                                        - volumePath
+                                        type: object
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                              required:
+                              - containers
+                              type: object
+                          type: object
+                        ttlSecondsAfterFinished:
+                          format: int32
+                          type: integer
+                      required:
+                      - template
+                      type: object
+                    status:
+                      properties:
+                        active:
+                          format: int32
+                          type: integer
+                        completedIndexes:
+                          type: string
+                        completionTime:
+                          format: date-time
+                          type: string
+                        conditions:
+                          items:
+                            properties:
+                              lastProbeTime:
+                                format: date-time
+                                type: string
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                          x-kubernetes-list-type: atomic
+                        failed:
+                          format: int32
+                          type: integer
+                        ready:
+                          format: int32
+                          type: integer
+                        startTime:
+                          format: date-time
+                          type: string
+                        succeeded:
+                          format: int32
+                          type: integer
+                        uncountedTerminatedPods:
+                          properties:
+                            failed:
+                              items:
+                                type: string
+                              type: array
+                              x-kubernetes-list-type: set
+                            succeeded:
+                              items:
+                                type: string
+                              type: array
+                              x-kubernetes-list-type: set
+                          type: object
+                      type: object
+                  type: object
+                type: array
+              podStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        activeDeadlineSeconds:
+                          format: int64
+                          type: integer
+                        affinity:
+                          properties:
+                            nodeAffinity:
+                              properties:
+                                preferredDuringSchedulingIgnoredDuringExecution:
+                                  items:
+                                    properties:
+                                      preference:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchFields:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                        type: object
+                                      weight:
+                                        format: int32
+                                        type: integer
+                                    required:
+                                    - preference
+                                    - weight
+                                    type: object
+                                  type: array
+                                requiredDuringSchedulingIgnoredDuringExecution:
+                                  properties:
+                                    nodeSelectorTerms:
+                                      items:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchFields:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                        type: object
+                                      type: array
+                                  required:
+                                  - nodeSelectorTerms
+                                  type: object
+                              type: object
+                            podAffinity:
+                              properties:
+                                preferredDuringSchedulingIgnoredDuringExecution:
+                                  items:
+                                    properties:
+                                      podAffinityTerm:
+                                        properties:
+                                          labelSelector:
+                                            properties:
+                                              matchExpressions:
+                                                items:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    operator:
+                                                      type: string
+                                                    values:
+                                                      items:
+                                                        type: string
+                                                      type: array
+                                                  required:
+                                                  - key
+                                                  - operator
+                                                  type: object
+                                                type: array
+                                              matchLabels:
+                                                additionalProperties:
+                                                  type: string
+                                                type: object
+                                            type: object
+                                          namespaceSelector:
+                                            properties:
+                                              matchExpressions:
+                                                items:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    operator:
+                                                      type: string
+                                                    values:
+                                                      items:
+                                                        type: string
+                                                      type: array
+                                                  required:
+                                                  - key
+                                                  - operator
+                                                  type: object
+                                                type: array
+                                              matchLabels:
+                                                additionalProperties:
+                                                  type: string
+                                                type: object
+                                            type: object
+                                          namespaces:
+                                            items:
+                                              type: string
+                                            type: array
+                                          topologyKey:
+                                            type: string
+                                        required:
+                                        - topologyKey
+                                        type: object
+                                      weight:
+                                        format: int32
+                                        type: integer
+                                    required:
+                                    - podAffinityTerm
+                                    - weight
+                                    type: object
+                                  type: array
+                                requiredDuringSchedulingIgnoredDuringExecution:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      namespaceSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      namespaces:
+                                        items:
+                                          type: string
+                                        type: array
+                                      topologyKey:
+                                        type: string
+                                    required:
+                                    - topologyKey
+                                    type: object
+                                  type: array
+                              type: object
+                            podAntiAffinity:
+                              properties:
+                                preferredDuringSchedulingIgnoredDuringExecution:
+                                  items:
+                                    properties:
+                                      podAffinityTerm:
+                                        properties:
+                                          labelSelector:
+                                            properties:
+                                              matchExpressions:
+                                                items:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    operator:
+                                                      type: string
+                                                    values:
+                                                      items:
+                                                        type: string
+                                                      type: array
+                                                  required:
+                                                  - key
+                                                  - operator
+                                                  type: object
+                                                type: array
+                                              matchLabels:
+                                                additionalProperties:
+                                                  type: string
+                                                type: object
+                                            type: object
+                                          namespaceSelector:
+                                            properties:
+                                              matchExpressions:
+                                                items:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    operator:
+                                                      type: string
+                                                    values:
+                                                      items:
+                                                        type: string
+                                                      type: array
+                                                  required:
+                                                  - key
+                                                  - operator
+                                                  type: object
+                                                type: array
+                                              matchLabels:
+                                                additionalProperties:
+                                                  type: string
+                                                type: object
+                                            type: object
+                                          namespaces:
+                                            items:
+                                              type: string
+                                            type: array
+                                          topologyKey:
+                                            type: string
+                                        required:
+                                        - topologyKey
+                                        type: object
+                                      weight:
+                                        format: int32
+                                        type: integer
+                                    required:
+                                    - podAffinityTerm
+                                    - weight
+                                    type: object
+                                  type: array
+                                requiredDuringSchedulingIgnoredDuringExecution:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      namespaceSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      namespaces:
+                                        items:
+                                          type: string
+                                        type: array
+                                      topologyKey:
+                                        type: string
+                                    required:
+                                    - topologyKey
+                                    type: object
+                                  type: array
+                              type: object
+                          type: object
+                        automountServiceAccountToken:
+                          type: boolean
+                        containers:
+                          items:
+                            properties:
+                              args:
+                                items:
+                                  type: string
+                                type: array
+                              command:
+                                items:
+                                  type: string
+                                type: array
+                              env:
+                                items:
+                                  properties:
+                                    name:
+                                      type: string
+                                    value:
+                                      type: string
+                                    valueFrom:
+                                      properties:
+                                        configMapKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                        fieldRef:
+                                          properties:
+                                            apiVersion:
+                                              type: string
+                                            fieldPath:
+                                              type: string
+                                          required:
+                                          - fieldPath
+                                          type: object
+                                        resourceFieldRef:
+                                          properties:
+                                            containerName:
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              type: string
+                                          required:
+                                          - resource
+                                          type: object
+                                        secretKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                      type: object
+                                  required:
+                                  - name
+                                  type: object
+                                type: array
+                              envFrom:
+                                items:
+                                  properties:
+                                    configMapRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                    prefix:
+                                      type: string
+                                    secretRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                  type: object
+                                type: array
+                              image:
+                                type: string
+                              imagePullPolicy:
+                                type: string
+                              lifecycle:
+                                properties:
+                                  postStart:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                  preStop:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                type: object
+                              livenessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              name:
+                                type: string
+                              ports:
+                                items:
+                                  properties:
+                                    containerPort:
+                                      format: int32
+                                      type: integer
+                                    hostIP:
+                                      type: string
+                                    hostPort:
+                                      format: int32
+                                      type: integer
+                                    name:
+                                      type: string
+                                    protocol:
+                                      default: TCP
+                                      type: string
+                                  required:
+                                  - containerPort
+                                  type: object
+                                type: array
+                                x-kubernetes-list-map-keys:
+                                - containerPort
+                                - protocol
+                                x-kubernetes-list-type: map
+                              readinessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              resources:
+                                properties:
+                                  limits:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                  requests:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                type: object
+                              securityContext:
+                                properties:
+                                  allowPrivilegeEscalation:
+                                    type: boolean
+                                  capabilities:
+                                    properties:
+                                      add:
+                                        items:
+                                          type: string
+                                        type: array
+                                      drop:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  privileged:
+                                    type: boolean
+                                  procMount:
+                                    type: string
+                                  readOnlyRootFilesystem:
+                                    type: boolean
+                                  runAsGroup:
+                                    format: int64
+                                    type: integer
+                                  runAsNonRoot:
+                                    type: boolean
+                                  runAsUser:
+                                    format: int64
+                                    type: integer
+                                  seLinuxOptions:
+                                    properties:
+                                      level:
+                                        type: string
+                                      role:
+                                        type: string
+                                      type:
+                                        type: string
+                                      user:
+                                        type: string
+                                    type: object
+                                  seccompProfile:
+                                    properties:
+                                      localhostProfile:
+                                        type: string
+                                      type:
+                                        type: string
+                                    required:
+                                    - type
+                                    type: object
+                                  windowsOptions:
+                                    properties:
+                                      gmsaCredentialSpec:
+                                        type: string
+                                      gmsaCredentialSpecName:
+                                        type: string
+                                      hostProcess:
+                                        type: boolean
+                                      runAsUserName:
+                                        type: string
+                                    type: object
+                                type: object
+                              startupProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              stdin:
+                                type: boolean
+                              stdinOnce:
+                                type: boolean
+                              terminationMessagePath:
+                                type: string
+                              terminationMessagePolicy:
+                                type: string
+                              tty:
+                                type: boolean
+                              volumeDevices:
+                                items:
+                                  properties:
+                                    devicePath:
+                                      type: string
+                                    name:
+                                      type: string
+                                  required:
+                                  - devicePath
+                                  - name
+                                  type: object
+                                type: array
+                              volumeMounts:
+                                items:
+                                  properties:
+                                    mountPath:
+                                      type: string
+                                    mountPropagation:
+                                      type: string
+                                    name:
+                                      type: string
+                                    readOnly:
+                                      type: boolean
+                                    subPath:
+                                      type: string
+                                    subPathExpr:
+                                      type: string
+                                  required:
+                                  - mountPath
+                                  - name
+                                  type: object
+                                type: array
+                              workingDir:
+                                type: string
+                            required:
+                            - name
+                            type: object
+                          type: array
+                        dnsConfig:
+                          properties:
+                            nameservers:
+                              items:
+                                type: string
+                              type: array
+                            options:
+                              items:
+                                properties:
+                                  name:
+                                    type: string
+                                  value:
+                                    type: string
+                                type: object
+                              type: array
+                            searches:
+                              items:
+                                type: string
+                              type: array
+                          type: object
+                        dnsPolicy:
+                          type: string
+                        enableServiceLinks:
+                          type: boolean
+                        ephemeralContainers:
+                          items:
+                            properties:
+                              args:
+                                items:
+                                  type: string
+                                type: array
+                              command:
+                                items:
+                                  type: string
+                                type: array
+                              env:
+                                items:
+                                  properties:
+                                    name:
+                                      type: string
+                                    value:
+                                      type: string
+                                    valueFrom:
+                                      properties:
+                                        configMapKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                        fieldRef:
+                                          properties:
+                                            apiVersion:
+                                              type: string
+                                            fieldPath:
+                                              type: string
+                                          required:
+                                          - fieldPath
+                                          type: object
+                                        resourceFieldRef:
+                                          properties:
+                                            containerName:
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              type: string
+                                          required:
+                                          - resource
+                                          type: object
+                                        secretKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                      type: object
+                                  required:
+                                  - name
+                                  type: object
+                                type: array
+                              envFrom:
+                                items:
+                                  properties:
+                                    configMapRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                    prefix:
+                                      type: string
+                                    secretRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                  type: object
+                                type: array
+                              image:
+                                type: string
+                              imagePullPolicy:
+                                type: string
+                              lifecycle:
+                                properties:
+                                  postStart:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                  preStop:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                type: object
+                              livenessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              name:
+                                type: string
+                              ports:
+                                items:
+                                  properties:
+                                    containerPort:
+                                      format: int32
+                                      type: integer
+                                    hostIP:
+                                      type: string
+                                    hostPort:
+                                      format: int32
+                                      type: integer
+                                    name:
+                                      type: string
+                                    protocol:
+                                      default: TCP
+                                      type: string
+                                  required:
+                                  - containerPort
+                                  type: object
+                                type: array
+                                x-kubernetes-list-map-keys:
+                                - containerPort
+                                - protocol
+                                x-kubernetes-list-type: map
+                              readinessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              resources:
+                                properties:
+                                  limits:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                  requests:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                type: object
+                              securityContext:
+                                properties:
+                                  allowPrivilegeEscalation:
+                                    type: boolean
+                                  capabilities:
+                                    properties:
+                                      add:
+                                        items:
+                                          type: string
+                                        type: array
+                                      drop:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  privileged:
+                                    type: boolean
+                                  procMount:
+                                    type: string
+                                  readOnlyRootFilesystem:
+                                    type: boolean
+                                  runAsGroup:
+                                    format: int64
+                                    type: integer
+                                  runAsNonRoot:
+                                    type: boolean
+                                  runAsUser:
+                                    format: int64
+                                    type: integer
+                                  seLinuxOptions:
+                                    properties:
+                                      level:
+                                        type: string
+                                      role:
+                                        type: string
+                                      type:
+                                        type: string
+                                      user:
+                                        type: string
+                                    type: object
+                                  seccompProfile:
+                                    properties:
+                                      localhostProfile:
+                                        type: string
+                                      type:
+                                        type: string
+                                    required:
+                                    - type
+                                    type: object
+                                  windowsOptions:
+                                    properties:
+                                      gmsaCredentialSpec:
+                                        type: string
+                                      gmsaCredentialSpecName:
+                                        type: string
+                                      hostProcess:
+                                        type: boolean
+                                      runAsUserName:
+                                        type: string
+                                    type: object
+                                type: object
+                              startupProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              stdin:
+                                type: boolean
+                              stdinOnce:
+                                type: boolean
+                              targetContainerName:
+                                type: string
+                              terminationMessagePath:
+                                type: string
+                              terminationMessagePolicy:
+                                type: string
+                              tty:
+                                type: boolean
+                              volumeDevices:
+                                items:
+                                  properties:
+                                    devicePath:
+                                      type: string
+                                    name:
+                                      type: string
+                                  required:
+                                  - devicePath
+                                  - name
+                                  type: object
+                                type: array
+                              volumeMounts:
+                                items:
+                                  properties:
+                                    mountPath:
+                                      type: string
+                                    mountPropagation:
+                                      type: string
+                                    name:
+                                      type: string
+                                    readOnly:
+                                      type: boolean
+                                    subPath:
+                                      type: string
+                                    subPathExpr:
+                                      type: string
+                                  required:
+                                  - mountPath
+                                  - name
+                                  type: object
+                                type: array
+                              workingDir:
+                                type: string
+                            required:
+                            - name
+                            type: object
+                          type: array
+                        hostAliases:
+                          items:
+                            properties:
+                              hostnames:
+                                items:
+                                  type: string
+                                type: array
+                              ip:
+                                type: string
+                            type: object
+                          type: array
+                        hostIPC:
+                          type: boolean
+                        hostNetwork:
+                          type: boolean
+                        hostPID:
+                          type: boolean
+                        hostname:
+                          type: string
+                        imagePullSecrets:
+                          items:
+                            properties:
+                              name:
+                                type: string
+                            type: object
+                          type: array
+                        initContainers:
+                          items:
+                            properties:
+                              args:
+                                items:
+                                  type: string
+                                type: array
+                              command:
+                                items:
+                                  type: string
+                                type: array
+                              env:
+                                items:
+                                  properties:
+                                    name:
+                                      type: string
+                                    value:
+                                      type: string
+                                    valueFrom:
+                                      properties:
+                                        configMapKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                        fieldRef:
+                                          properties:
+                                            apiVersion:
+                                              type: string
+                                            fieldPath:
+                                              type: string
+                                          required:
+                                          - fieldPath
+                                          type: object
+                                        resourceFieldRef:
+                                          properties:
+                                            containerName:
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              type: string
+                                          required:
+                                          - resource
+                                          type: object
+                                        secretKeyRef:
+                                          properties:
+                                            key:
+                                              type: string
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          required:
+                                          - key
+                                          type: object
+                                      type: object
+                                  required:
+                                  - name
+                                  type: object
+                                type: array
+                              envFrom:
+                                items:
+                                  properties:
+                                    configMapRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                    prefix:
+                                      type: string
+                                    secretRef:
+                                      properties:
+                                        name:
+                                          type: string
+                                        optional:
+                                          type: boolean
+                                      type: object
+                                  type: object
+                                type: array
+                              image:
+                                type: string
+                              imagePullPolicy:
+                                type: string
+                              lifecycle:
+                                properties:
+                                  postStart:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                  preStop:
+                                    properties:
+                                      exec:
+                                        properties:
+                                          command:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      httpGet:
+                                        properties:
+                                          host:
+                                            type: string
+                                          httpHeaders:
+                                            items:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                value:
+                                                  type: string
+                                              required:
+                                              - name
+                                              - value
+                                              type: object
+                                            type: array
+                                          path:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                          scheme:
+                                            type: string
+                                        required:
+                                        - port
+                                        type: object
+                                      tcpSocket:
+                                        properties:
+                                          host:
+                                            type: string
+                                          port:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            x-kubernetes-int-or-string: true
+                                        required:
+                                        - port
+                                        type: object
+                                    type: object
+                                type: object
+                              livenessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              name:
+                                type: string
+                              ports:
+                                items:
+                                  properties:
+                                    containerPort:
+                                      format: int32
+                                      type: integer
+                                    hostIP:
+                                      type: string
+                                    hostPort:
+                                      format: int32
+                                      type: integer
+                                    name:
+                                      type: string
+                                    protocol:
+                                      default: TCP
+                                      type: string
+                                  required:
+                                  - containerPort
+                                  type: object
+                                type: array
+                                x-kubernetes-list-map-keys:
+                                - containerPort
+                                - protocol
+                                x-kubernetes-list-type: map
+                              readinessProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              resources:
+                                properties:
+                                  limits:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                  requests:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                type: object
+                              securityContext:
+                                properties:
+                                  allowPrivilegeEscalation:
+                                    type: boolean
+                                  capabilities:
+                                    properties:
+                                      add:
+                                        items:
+                                          type: string
+                                        type: array
+                                      drop:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  privileged:
+                                    type: boolean
+                                  procMount:
+                                    type: string
+                                  readOnlyRootFilesystem:
+                                    type: boolean
+                                  runAsGroup:
+                                    format: int64
+                                    type: integer
+                                  runAsNonRoot:
+                                    type: boolean
+                                  runAsUser:
+                                    format: int64
+                                    type: integer
+                                  seLinuxOptions:
+                                    properties:
+                                      level:
+                                        type: string
+                                      role:
+                                        type: string
+                                      type:
+                                        type: string
+                                      user:
+                                        type: string
+                                    type: object
+                                  seccompProfile:
+                                    properties:
+                                      localhostProfile:
+                                        type: string
+                                      type:
+                                        type: string
+                                    required:
+                                    - type
+                                    type: object
+                                  windowsOptions:
+                                    properties:
+                                      gmsaCredentialSpec:
+                                        type: string
+                                      gmsaCredentialSpecName:
+                                        type: string
+                                      hostProcess:
+                                        type: boolean
+                                      runAsUserName:
+                                        type: string
+                                    type: object
+                                type: object
+                              startupProbe:
+                                properties:
+                                  exec:
+                                    properties:
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                    type: object
+                                  failureThreshold:
+                                    format: int32
+                                    type: integer
+                                  grpc:
+                                    properties:
+                                      port:
+                                        format: int32
+                                        type: integer
+                                      service:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  httpGet:
+                                    properties:
+                                      host:
+                                        type: string
+                                      httpHeaders:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                          required:
+                                          - name
+                                          - value
+                                          type: object
+                                        type: array
+                                      path:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                      scheme:
+                                        type: string
+                                    required:
+                                    - port
+                                    type: object
+                                  initialDelaySeconds:
+                                    format: int32
+                                    type: integer
+                                  periodSeconds:
+                                    format: int32
+                                    type: integer
+                                  successThreshold:
+                                    format: int32
+                                    type: integer
+                                  tcpSocket:
+                                    properties:
+                                      host:
+                                        type: string
+                                      port:
+                                        anyOf:
+                                        - type: integer
+                                        - type: string
+                                        x-kubernetes-int-or-string: true
+                                    required:
+                                    - port
+                                    type: object
+                                  terminationGracePeriodSeconds:
+                                    format: int64
+                                    type: integer
+                                  timeoutSeconds:
+                                    format: int32
+                                    type: integer
+                                type: object
+                              stdin:
+                                type: boolean
+                              stdinOnce:
+                                type: boolean
+                              terminationMessagePath:
+                                type: string
+                              terminationMessagePolicy:
+                                type: string
+                              tty:
+                                type: boolean
+                              volumeDevices:
+                                items:
+                                  properties:
+                                    devicePath:
+                                      type: string
+                                    name:
+                                      type: string
+                                  required:
+                                  - devicePath
+                                  - name
+                                  type: object
+                                type: array
+                              volumeMounts:
+                                items:
+                                  properties:
+                                    mountPath:
+                                      type: string
+                                    mountPropagation:
+                                      type: string
+                                    name:
+                                      type: string
+                                    readOnly:
+                                      type: boolean
+                                    subPath:
+                                      type: string
+                                    subPathExpr:
+                                      type: string
+                                  required:
+                                  - mountPath
+                                  - name
+                                  type: object
+                                type: array
+                              workingDir:
+                                type: string
+                            required:
+                            - name
+                            type: object
+                          type: array
+                        nodeName:
+                          type: string
+                        nodeSelector:
+                          additionalProperties:
+                            type: string
+                          type: object
+                          x-kubernetes-map-type: atomic
+                        os:
+                          properties:
+                            name:
+                              type: string
+                          required:
+                          - name
+                          type: object
+                        overhead:
+                          additionalProperties:
+                            anyOf:
+                            - type: integer
+                            - type: string
+                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                            x-kubernetes-int-or-string: true
+                          type: object
+                        preemptionPolicy:
+                          type: string
+                        priority:
+                          format: int32
+                          type: integer
+                        priorityClassName:
+                          type: string
+                        readinessGates:
+                          items:
+                            properties:
+                              conditionType:
+                                type: string
+                            required:
+                            - conditionType
+                            type: object
+                          type: array
+                        restartPolicy:
+                          type: string
+                        runtimeClassName:
+                          type: string
+                        schedulerName:
+                          type: string
+                        securityContext:
+                          properties:
+                            fsGroup:
+                              format: int64
+                              type: integer
+                            fsGroupChangePolicy:
+                              type: string
+                            runAsGroup:
+                              format: int64
+                              type: integer
+                            runAsNonRoot:
+                              type: boolean
+                            runAsUser:
+                              format: int64
+                              type: integer
+                            seLinuxOptions:
+                              properties:
+                                level:
+                                  type: string
+                                role:
+                                  type: string
+                                type:
+                                  type: string
+                                user:
+                                  type: string
+                              type: object
+                            seccompProfile:
+                              properties:
+                                localhostProfile:
+                                  type: string
+                                type:
+                                  type: string
+                              required:
+                              - type
+                              type: object
+                            supplementalGroups:
+                              items:
+                                format: int64
+                                type: integer
+                              type: array
+                            sysctls:
+                              items:
+                                properties:
+                                  name:
+                                    type: string
+                                  value:
+                                    type: string
+                                required:
+                                - name
+                                - value
+                                type: object
+                              type: array
+                            windowsOptions:
+                              properties:
+                                gmsaCredentialSpec:
+                                  type: string
+                                gmsaCredentialSpecName:
+                                  type: string
+                                hostProcess:
+                                  type: boolean
+                                runAsUserName:
+                                  type: string
+                              type: object
+                          type: object
+                        serviceAccount:
+                          type: string
+                        serviceAccountName:
+                          type: string
+                        setHostnameAsFQDN:
+                          type: boolean
+                        shareProcessNamespace:
+                          type: boolean
+                        subdomain:
+                          type: string
+                        terminationGracePeriodSeconds:
+                          format: int64
+                          type: integer
+                        tolerations:
+                          items:
+                            properties:
+                              effect:
+                                type: string
+                              key:
+                                type: string
+                              operator:
+                                type: string
+                              tolerationSeconds:
+                                format: int64
+                                type: integer
+                              value:
+                                type: string
+                            type: object
+                          type: array
+                        topologySpreadConstraints:
+                          items:
+                            properties:
+                              labelSelector:
+                                properties:
+                                  matchExpressions:
+                                    items:
+                                      properties:
+                                        key:
+                                          type: string
+                                        operator:
+                                          type: string
+                                        values:
+                                          items:
+                                            type: string
+                                          type: array
+                                      required:
+                                      - key
+                                      - operator
+                                      type: object
+                                    type: array
+                                  matchLabels:
+                                    additionalProperties:
+                                      type: string
+                                    type: object
+                                type: object
+                              maxSkew:
+                                format: int32
+                                type: integer
+                              topologyKey:
+                                type: string
+                              whenUnsatisfiable:
+                                type: string
+                            required:
+                            - maxSkew
+                            - topologyKey
+                            - whenUnsatisfiable
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                          - topologyKey
+                          - whenUnsatisfiable
+                          x-kubernetes-list-type: map
+                        volumes:
+                          items:
+                            properties:
+                              awsElasticBlockStore:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  partition:
+                                    format: int32
+                                    type: integer
+                                  readOnly:
+                                    type: boolean
+                                  volumeID:
+                                    type: string
+                                required:
+                                - volumeID
+                                type: object
+                              azureDisk:
+                                properties:
+                                  cachingMode:
+                                    type: string
+                                  diskName:
+                                    type: string
+                                  diskURI:
+                                    type: string
+                                  fsType:
+                                    type: string
+                                  kind:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                required:
+                                - diskName
+                                - diskURI
+                                type: object
+                              azureFile:
+                                properties:
+                                  readOnly:
+                                    type: boolean
+                                  secretName:
+                                    type: string
+                                  shareName:
+                                    type: string
+                                required:
+                                - secretName
+                                - shareName
+                                type: object
+                              cephfs:
+                                properties:
+                                  monitors:
+                                    items:
+                                      type: string
+                                    type: array
+                                  path:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  secretFile:
+                                    type: string
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  user:
+                                    type: string
+                                required:
+                                - monitors
+                                type: object
+                              cinder:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  volumeID:
+                                    type: string
+                                required:
+                                - volumeID
+                                type: object
+                              configMap:
+                                properties:
+                                  defaultMode:
+                                    format: int32
+                                    type: integer
+                                  items:
+                                    items:
+                                      properties:
+                                        key:
+                                          type: string
+                                        mode:
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          type: string
+                                      required:
+                                      - key
+                                      - path
+                                      type: object
+                                    type: array
+                                  name:
+                                    type: string
+                                  optional:
+                                    type: boolean
+                                type: object
+                              csi:
+                                properties:
+                                  driver:
+                                    type: string
+                                  fsType:
+                                    type: string
+                                  nodePublishSecretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  readOnly:
+                                    type: boolean
+                                  volumeAttributes:
+                                    additionalProperties:
+                                      type: string
+                                    type: object
+                                required:
+                                - driver
+                                type: object
+                              downwardAPI:
+                                properties:
+                                  defaultMode:
+                                    format: int32
+                                    type: integer
+                                  items:
+                                    items:
+                                      properties:
+                                        fieldRef:
+                                          properties:
+                                            apiVersion:
+                                              type: string
+                                            fieldPath:
+                                              type: string
+                                          required:
+                                          - fieldPath
+                                          type: object
+                                        mode:
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          type: string
+                                        resourceFieldRef:
+                                          properties:
+                                            containerName:
+                                              type: string
+                                            divisor:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            resource:
+                                              type: string
+                                          required:
+                                          - resource
+                                          type: object
+                                      required:
+                                      - path
+                                      type: object
+                                    type: array
+                                type: object
+                              emptyDir:
+                                properties:
+                                  medium:
+                                    type: string
+                                  sizeLimit:
+                                    anyOf:
+                                    - type: integer
+                                    - type: string
+                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                    x-kubernetes-int-or-string: true
+                                type: object
+                              ephemeral:
+                                properties:
+                                  volumeClaimTemplate:
+                                    properties:
+                                      metadata:
+                                        properties:
+                                          annotations:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          finalizers:
+                                            items:
+                                              type: string
+                                            type: array
+                                          labels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          name:
+                                            type: string
+                                          namespace:
+                                            type: string
+                                        type: object
+                                      spec:
+                                        properties:
+                                          accessModes:
+                                            items:
+                                              type: string
+                                            type: array
+                                          dataSource:
+                                            properties:
+                                              apiGroup:
+                                                type: string
+                                              kind:
+                                                type: string
+                                              name:
+                                                type: string
+                                            required:
+                                            - kind
+                                            - name
+                                            type: object
+                                          dataSourceRef:
+                                            properties:
+                                              apiGroup:
+                                                type: string
+                                              kind:
+                                                type: string
+                                              name:
+                                                type: string
+                                            required:
+                                            - kind
+                                            - name
+                                            type: object
+                                          resources:
+                                            properties:
+                                              limits:
+                                                additionalProperties:
+                                                  anyOf:
+                                                  - type: integer
+                                                  - type: string
+                                                  pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                  x-kubernetes-int-or-string: true
+                                                type: object
+                                              requests:
+                                                additionalProperties:
+                                                  anyOf:
+                                                  - type: integer
+                                                  - type: string
+                                                  pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                  x-kubernetes-int-or-string: true
+                                                type: object
+                                            type: object
+                                          selector:
+                                            properties:
+                                              matchExpressions:
+                                                items:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    operator:
+                                                      type: string
+                                                    values:
+                                                      items:
+                                                        type: string
+                                                      type: array
+                                                  required:
+                                                  - key
+                                                  - operator
+                                                  type: object
+                                                type: array
+                                              matchLabels:
+                                                additionalProperties:
+                                                  type: string
+                                                type: object
+                                            type: object
+                                          storageClassName:
+                                            type: string
+                                          volumeMode:
+                                            type: string
+                                          volumeName:
+                                            type: string
+                                        type: object
+                                    required:
+                                    - spec
+                                    type: object
+                                type: object
+                              fc:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  lun:
+                                    format: int32
+                                    type: integer
+                                  readOnly:
+                                    type: boolean
+                                  targetWWNs:
+                                    items:
+                                      type: string
+                                    type: array
+                                  wwids:
+                                    items:
+                                      type: string
+                                    type: array
+                                type: object
+                              flexVolume:
+                                properties:
+                                  driver:
+                                    type: string
+                                  fsType:
+                                    type: string
+                                  options:
+                                    additionalProperties:
+                                      type: string
+                                    type: object
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                required:
+                                - driver
+                                type: object
+                              flocker:
+                                properties:
+                                  datasetName:
+                                    type: string
+                                  datasetUUID:
+                                    type: string
+                                type: object
+                              gcePersistentDisk:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  partition:
+                                    format: int32
+                                    type: integer
+                                  pdName:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                required:
+                                - pdName
+                                type: object
+                              gitRepo:
+                                properties:
+                                  directory:
+                                    type: string
+                                  repository:
+                                    type: string
+                                  revision:
+                                    type: string
+                                required:
+                                - repository
+                                type: object
+                              glusterfs:
+                                properties:
+                                  endpoints:
+                                    type: string
+                                  path:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                required:
+                                - endpoints
+                                - path
+                                type: object
+                              hostPath:
+                                properties:
+                                  path:
+                                    type: string
+                                  type:
+                                    type: string
+                                required:
+                                - path
+                                type: object
+                              iscsi:
+                                properties:
+                                  chapAuthDiscovery:
+                                    type: boolean
+                                  chapAuthSession:
+                                    type: boolean
+                                  fsType:
+                                    type: string
+                                  initiatorName:
+                                    type: string
+                                  iqn:
+                                    type: string
+                                  iscsiInterface:
+                                    type: string
+                                  lun:
+                                    format: int32
+                                    type: integer
+                                  portals:
+                                    items:
+                                      type: string
+                                    type: array
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  targetPortal:
+                                    type: string
+                                required:
+                                - iqn
+                                - lun
+                                - targetPortal
+                                type: object
+                              name:
+                                type: string
+                              nfs:
+                                properties:
+                                  path:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  server:
+                                    type: string
+                                required:
+                                - path
+                                - server
+                                type: object
+                              persistentVolumeClaim:
+                                properties:
+                                  claimName:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                required:
+                                - claimName
+                                type: object
+                              photonPersistentDisk:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  pdID:
+                                    type: string
+                                required:
+                                - pdID
+                                type: object
+                              portworxVolume:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  volumeID:
+                                    type: string
+                                required:
+                                - volumeID
+                                type: object
+                              projected:
+                                properties:
+                                  defaultMode:
+                                    format: int32
+                                    type: integer
+                                  sources:
+                                    items:
+                                      properties:
+                                        configMap:
+                                          properties:
+                                            items:
+                                              items:
+                                                properties:
+                                                  key:
+                                                    type: string
+                                                  mode:
+                                                    format: int32
+                                                    type: integer
+                                                  path:
+                                                    type: string
+                                                required:
+                                                - key
+                                                - path
+                                                type: object
+                                              type: array
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          type: object
+                                        downwardAPI:
+                                          properties:
+                                            items:
+                                              items:
+                                                properties:
+                                                  fieldRef:
+                                                    properties:
+                                                      apiVersion:
+                                                        type: string
+                                                      fieldPath:
+                                                        type: string
+                                                    required:
+                                                    - fieldPath
+                                                    type: object
+                                                  mode:
+                                                    format: int32
+                                                    type: integer
+                                                  path:
+                                                    type: string
+                                                  resourceFieldRef:
+                                                    properties:
+                                                      containerName:
+                                                        type: string
+                                                      divisor:
+                                                        anyOf:
+                                                        - type: integer
+                                                        - type: string
+                                                        pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                        x-kubernetes-int-or-string: true
+                                                      resource:
+                                                        type: string
+                                                    required:
+                                                    - resource
+                                                    type: object
+                                                required:
+                                                - path
+                                                type: object
+                                              type: array
+                                          type: object
+                                        secret:
+                                          properties:
+                                            items:
+                                              items:
+                                                properties:
+                                                  key:
+                                                    type: string
+                                                  mode:
+                                                    format: int32
+                                                    type: integer
+                                                  path:
+                                                    type: string
+                                                required:
+                                                - key
+                                                - path
+                                                type: object
+                                              type: array
+                                            name:
+                                              type: string
+                                            optional:
+                                              type: boolean
+                                          type: object
+                                        serviceAccountToken:
+                                          properties:
+                                            audience:
+                                              type: string
+                                            expirationSeconds:
+                                              format: int64
+                                              type: integer
+                                            path:
+                                              type: string
+                                          required:
+                                          - path
+                                          type: object
+                                      type: object
+                                    type: array
+                                type: object
+                              quobyte:
+                                properties:
+                                  group:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  registry:
+                                    type: string
+                                  tenant:
+                                    type: string
+                                  user:
+                                    type: string
+                                  volume:
+                                    type: string
+                                required:
+                                - registry
+                                - volume
+                                type: object
+                              rbd:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  image:
+                                    type: string
+                                  keyring:
+                                    type: string
+                                  monitors:
+                                    items:
+                                      type: string
+                                    type: array
+                                  pool:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  user:
+                                    type: string
+                                required:
+                                - image
+                                - monitors
+                                type: object
+                              scaleIO:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  gateway:
+                                    type: string
+                                  protectionDomain:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  sslEnabled:
+                                    type: boolean
+                                  storageMode:
+                                    type: string
+                                  storagePool:
+                                    type: string
+                                  system:
+                                    type: string
+                                  volumeName:
+                                    type: string
+                                required:
+                                - gateway
+                                - secretRef
+                                - system
+                                type: object
+                              secret:
+                                properties:
+                                  defaultMode:
+                                    format: int32
+                                    type: integer
+                                  items:
+                                    items:
+                                      properties:
+                                        key:
+                                          type: string
+                                        mode:
+                                          format: int32
+                                          type: integer
+                                        path:
+                                          type: string
+                                      required:
+                                      - key
+                                      - path
+                                      type: object
+                                    type: array
+                                  optional:
+                                    type: boolean
+                                  secretName:
+                                    type: string
+                                type: object
+                              storageos:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  readOnly:
+                                    type: boolean
+                                  secretRef:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  volumeName:
+                                    type: string
+                                  volumeNamespace:
+                                    type: string
+                                type: object
+                              vsphereVolume:
+                                properties:
+                                  fsType:
+                                    type: string
+                                  storagePolicyID:
+                                    type: string
+                                  storagePolicyName:
+                                    type: string
+                                  volumePath:
+                                    type: string
+                                required:
+                                - volumePath
+                                type: object
+                            required:
+                            - name
+                            type: object
+                          type: array
+                      required:
+                      - containers
+                      type: object
+                    status:
+                      properties:
+                        conditions:
+                          items:
+                            properties:
+                              lastProbeTime:
+                                format: date-time
+                                type: string
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                        containerStatuses:
+                          items:
+                            properties:
+                              containerID:
+                                type: string
+                              image:
+                                type: string
+                              imageID:
+                                type: string
+                              lastState:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                              name:
+                                type: string
+                              ready:
+                                type: boolean
+                              restartCount:
+                                format: int32
+                                type: integer
+                              started:
+                                type: boolean
+                              state:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                            required:
+                            - image
+                            - imageID
+                            - name
+                            - ready
+                            - restartCount
+                            type: object
+                          type: array
+                        ephemeralContainerStatuses:
+                          items:
+                            properties:
+                              containerID:
+                                type: string
+                              image:
+                                type: string
+                              imageID:
+                                type: string
+                              lastState:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                              name:
+                                type: string
+                              ready:
+                                type: boolean
+                              restartCount:
+                                format: int32
+                                type: integer
+                              started:
+                                type: boolean
+                              state:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                            required:
+                            - image
+                            - imageID
+                            - name
+                            - ready
+                            - restartCount
+                            type: object
+                          type: array
+                        hostIP:
+                          type: string
+                        initContainerStatuses:
+                          items:
+                            properties:
+                              containerID:
+                                type: string
+                              image:
+                                type: string
+                              imageID:
+                                type: string
+                              lastState:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                              name:
+                                type: string
+                              ready:
+                                type: boolean
+                              restartCount:
+                                format: int32
+                                type: integer
+                              started:
+                                type: boolean
+                              state:
+                                properties:
+                                  running:
+                                    properties:
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    type: object
+                                  terminated:
+                                    properties:
+                                      containerID:
+                                        type: string
+                                      exitCode:
+                                        format: int32
+                                        type: integer
+                                      finishedAt:
+                                        format: date-time
+                                        type: string
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                      signal:
+                                        format: int32
+                                        type: integer
+                                      startedAt:
+                                        format: date-time
+                                        type: string
+                                    required:
+                                    - exitCode
+                                    type: object
+                                  waiting:
+                                    properties:
+                                      message:
+                                        type: string
+                                      reason:
+                                        type: string
+                                    type: object
+                                type: object
+                            required:
+                            - image
+                            - imageID
+                            - name
+                            - ready
+                            - restartCount
+                            type: object
+                          type: array
+                        message:
+                          type: string
+                        nominatedNodeName:
+                          type: string
+                        phase:
+                          type: string
+                        podIP:
+                          type: string
+                        podIPs:
+                          items:
+                            properties:
+                              ip:
+                                type: string
+                            type: object
+                          type: array
+                        qosClass:
+                          type: string
+                        reason:
+                          type: string
+                        startTime:
+                          format: date-time
+                          type: string
+                      type: object
+                  type: object
+                type: array
+              ready:
+                type: boolean
+              resourceCount:
+                format: int32
+                type: integer
+              resourceStatuses:
+                items:
+                  properties:
+                    group:
+                      type: string
+                    kind:
+                      type: string
+                    name:
+                      type: string
+                    namespace:
+                      type: string
+                    res:
+                      format: byte
+                      type: string
+                    version:
+                      type: string
+                  required:
+                  - group
+                  - kind
+                  - name
+                  - res
+                  - version
+                  type: object
+                type: array
+              serviceStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        allocateLoadBalancerNodePorts:
+                          type: boolean
+                        clusterIP:
+                          type: string
+                        clusterIPs:
+                          items:
+                            type: string
+                          type: array
+                          x-kubernetes-list-type: atomic
+                        externalIPs:
+                          items:
+                            type: string
+                          type: array
+                        externalName:
+                          type: string
+                        externalTrafficPolicy:
+                          type: string
+                        healthCheckNodePort:
+                          format: int32
+                          type: integer
+                        internalTrafficPolicy:
+                          type: string
+                        ipFamilies:
+                          items:
+                            type: string
+                          type: array
+                          x-kubernetes-list-type: atomic
+                        ipFamilyPolicy:
+                          type: string
+                        loadBalancerClass:
+                          type: string
+                        loadBalancerIP:
+                          type: string
+                        loadBalancerSourceRanges:
+                          items:
+                            type: string
+                          type: array
+                        ports:
+                          items:
+                            properties:
+                              appProtocol:
+                                type: string
+                              name:
+                                type: string
+                              nodePort:
+                                format: int32
+                                type: integer
+                              port:
+                                format: int32
+                                type: integer
+                              protocol:
+                                default: TCP
+                                type: string
+                              targetPort:
+                                anyOf:
+                                - type: integer
+                                - type: string
+                                x-kubernetes-int-or-string: true
+                            required:
+                            - port
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                          - port
+                          - protocol
+                          x-kubernetes-list-type: map
+                        publishNotReadyAddresses:
+                          type: boolean
+                        selector:
+                          additionalProperties:
+                            type: string
+                          type: object
+                          x-kubernetes-map-type: atomic
+                        sessionAffinity:
+                          type: string
+                        sessionAffinityConfig:
+                          properties:
+                            clientIP:
+                              properties:
+                                timeoutSeconds:
+                                  format: int32
+                                  type: integer
+                              type: object
+                          type: object
+                        type:
+                          type: string
+                      type: object
+                    status:
+                      properties:
+                        conditions:
+                          items:
+                            properties:
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              message:
+                                maxLength: 32768
+                                type: string
+                              observedGeneration:
+                                format: int64
+                                minimum: 0
+                                type: integer
+                              reason:
+                                maxLength: 1024
+                                minLength: 1
+                                pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
+                                type: string
+                              status:
+                                enum:
+                                - "True"
+                                - "False"
+                                - Unknown
+                                type: string
+                              type:
+                                maxLength: 316
+                                pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
+                                type: string
+                            required:
+                            - lastTransitionTime
+                            - message
+                            - reason
+                            - status
+                            - type
+                            type: object
+                          type: array
+                          x-kubernetes-list-map-keys:
+                          - type
+                          x-kubernetes-list-type: map
+                        loadBalancer:
+                          properties:
+                            ingress:
+                              items:
+                                properties:
+                                  hostname:
+                                    type: string
+                                  ip:
+                                    type: string
+                                  ports:
+                                    items:
+                                      properties:
+                                        error:
+                                          maxLength: 316
+                                          pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
+                                          type: string
+                                        port:
+                                          format: int32
+                                          type: integer
+                                        protocol:
+                                          default: TCP
+                                          type: string
+                                      required:
+                                      - port
+                                      - protocol
+                                      type: object
+                                    type: array
+                                    x-kubernetes-list-type: atomic
+                                type: object
+                              type: array
+                          type: object
+                      type: object
+                  type: object
+                type: array
+              statefulSetStatuses:
+                items:
+                  properties:
+                    apiVersion:
+                      type: string
+                    kind:
+                      type: string
+                    metadata:
+                      properties:
+                        annotations:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        finalizers:
+                          items:
+                            type: string
+                          type: array
+                        labels:
+                          additionalProperties:
+                            type: string
+                          type: object
+                        name:
+                          type: string
+                        namespace:
+                          type: string
+                      type: object
+                    spec:
+                      properties:
+                        minReadySeconds:
+                          format: int32
+                          type: integer
+                        persistentVolumeClaimRetentionPolicy:
+                          properties:
+                            whenDeleted:
+                              type: string
+                            whenScaled:
+                              type: string
+                          type: object
+                        podManagementPolicy:
+                          type: string
+                        replicas:
+                          format: int32
+                          type: integer
+                        revisionHistoryLimit:
+                          format: int32
+                          type: integer
+                        selector:
+                          properties:
+                            matchExpressions:
+                              items:
+                                properties:
+                                  key:
+                                    type: string
+                                  operator:
+                                    type: string
+                                  values:
+                                    items:
+                                      type: string
+                                    type: array
+                                required:
+                                - key
+                                - operator
+                                type: object
+                              type: array
+                            matchLabels:
+                              additionalProperties:
+                                type: string
+                              type: object
+                          type: object
+                        serviceName:
+                          type: string
+                        template:
+                          properties:
+                            metadata:
+                              properties:
+                                annotations:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                finalizers:
+                                  items:
+                                    type: string
+                                  type: array
+                                labels:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                name:
+                                  type: string
+                                namespace:
+                                  type: string
+                              type: object
+                            spec:
+                              properties:
+                                activeDeadlineSeconds:
+                                  format: int64
+                                  type: integer
+                                affinity:
+                                  properties:
+                                    nodeAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              preference:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - preference
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          properties:
+                                            nodeSelectorTerms:
+                                              items:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchFields:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                type: object
+                                              type: array
+                                          required:
+                                          - nodeSelectorTerms
+                                          type: object
+                                      type: object
+                                    podAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                    podAntiAffinity:
+                                      properties:
+                                        preferredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              podAffinityTerm:
+                                                properties:
+                                                  labelSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaceSelector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  namespaces:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  topologyKey:
+                                                    type: string
+                                                required:
+                                                - topologyKey
+                                                type: object
+                                              weight:
+                                                format: int32
+                                                type: integer
+                                            required:
+                                            - podAffinityTerm
+                                            - weight
+                                            type: object
+                                          type: array
+                                        requiredDuringSchedulingIgnoredDuringExecution:
+                                          items:
+                                            properties:
+                                              labelSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaceSelector:
+                                                properties:
+                                                  matchExpressions:
+                                                    items:
+                                                      properties:
+                                                        key:
+                                                          type: string
+                                                        operator:
+                                                          type: string
+                                                        values:
+                                                          items:
+                                                            type: string
+                                                          type: array
+                                                      required:
+                                                      - key
+                                                      - operator
+                                                      type: object
+                                                    type: array
+                                                  matchLabels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                type: object
+                                              namespaces:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              topologyKey:
+                                                type: string
+                                            required:
+                                            - topologyKey
+                                            type: object
+                                          type: array
+                                      type: object
+                                  type: object
+                                automountServiceAccountToken:
+                                  type: boolean
+                                containers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                dnsConfig:
+                                  properties:
+                                    nameservers:
+                                      items:
+                                        type: string
+                                      type: array
+                                    options:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        type: object
+                                      type: array
+                                    searches:
+                                      items:
+                                        type: string
+                                      type: array
+                                  type: object
+                                dnsPolicy:
+                                  type: string
+                                enableServiceLinks:
+                                  type: boolean
+                                ephemeralContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      targetContainerName:
+                                        type: string
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                hostAliases:
+                                  items:
+                                    properties:
+                                      hostnames:
+                                        items:
+                                          type: string
+                                        type: array
+                                      ip:
+                                        type: string
+                                    type: object
+                                  type: array
+                                hostIPC:
+                                  type: boolean
+                                hostNetwork:
+                                  type: boolean
+                                hostPID:
+                                  type: boolean
+                                hostname:
+                                  type: string
+                                imagePullSecrets:
+                                  items:
+                                    properties:
+                                      name:
+                                        type: string
+                                    type: object
+                                  type: array
+                                initContainers:
+                                  items:
+                                    properties:
+                                      args:
+                                        items:
+                                          type: string
+                                        type: array
+                                      command:
+                                        items:
+                                          type: string
+                                        type: array
+                                      env:
+                                        items:
+                                          properties:
+                                            name:
+                                              type: string
+                                            value:
+                                              type: string
+                                            valueFrom:
+                                              properties:
+                                                configMapKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                                secretKeyRef:
+                                                  properties:
+                                                    key:
+                                                      type: string
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  required:
+                                                  - key
+                                                  type: object
+                                              type: object
+                                          required:
+                                          - name
+                                          type: object
+                                        type: array
+                                      envFrom:
+                                        items:
+                                          properties:
+                                            configMapRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                            prefix:
+                                              type: string
+                                            secretRef:
+                                              properties:
+                                                name:
+                                                  type: string
+                                                optional:
+                                                  type: boolean
+                                              type: object
+                                          type: object
+                                        type: array
+                                      image:
+                                        type: string
+                                      imagePullPolicy:
+                                        type: string
+                                      lifecycle:
+                                        properties:
+                                          postStart:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                          preStop:
+                                            properties:
+                                              exec:
+                                                properties:
+                                                  command:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                type: object
+                                              httpGet:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  httpHeaders:
+                                                    items:
+                                                      properties:
+                                                        name:
+                                                          type: string
+                                                        value:
+                                                          type: string
+                                                      required:
+                                                      - name
+                                                      - value
+                                                      type: object
+                                                    type: array
+                                                  path:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                  scheme:
+                                                    type: string
+                                                required:
+                                                - port
+                                                type: object
+                                              tcpSocket:
+                                                properties:
+                                                  host:
+                                                    type: string
+                                                  port:
+                                                    anyOf:
+                                                    - type: integer
+                                                    - type: string
+                                                    x-kubernetes-int-or-string: true
+                                                required:
+                                                - port
+                                                type: object
+                                            type: object
+                                        type: object
+                                      livenessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      name:
+                                        type: string
+                                      ports:
+                                        items:
+                                          properties:
+                                            containerPort:
+                                              format: int32
+                                              type: integer
+                                            hostIP:
+                                              type: string
+                                            hostPort:
+                                              format: int32
+                                              type: integer
+                                            name:
+                                              type: string
+                                            protocol:
+                                              default: TCP
+                                              type: string
+                                          required:
+                                          - containerPort
+                                          type: object
+                                        type: array
+                                        x-kubernetes-list-map-keys:
+                                        - containerPort
+                                        - protocol
+                                        x-kubernetes-list-type: map
+                                      readinessProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      resources:
+                                        properties:
+                                          limits:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                          requests:
+                                            additionalProperties:
+                                              anyOf:
+                                              - type: integer
+                                              - type: string
+                                              pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                              x-kubernetes-int-or-string: true
+                                            type: object
+                                        type: object
+                                      securityContext:
+                                        properties:
+                                          allowPrivilegeEscalation:
+                                            type: boolean
+                                          capabilities:
+                                            properties:
+                                              add:
+                                                items:
+                                                  type: string
+                                                type: array
+                                              drop:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          privileged:
+                                            type: boolean
+                                          procMount:
+                                            type: string
+                                          readOnlyRootFilesystem:
+                                            type: boolean
+                                          runAsGroup:
+                                            format: int64
+                                            type: integer
+                                          runAsNonRoot:
+                                            type: boolean
+                                          runAsUser:
+                                            format: int64
+                                            type: integer
+                                          seLinuxOptions:
+                                            properties:
+                                              level:
+                                                type: string
+                                              role:
+                                                type: string
+                                              type:
+                                                type: string
+                                              user:
+                                                type: string
+                                            type: object
+                                          seccompProfile:
+                                            properties:
+                                              localhostProfile:
+                                                type: string
+                                              type:
+                                                type: string
+                                            required:
+                                            - type
+                                            type: object
+                                          windowsOptions:
+                                            properties:
+                                              gmsaCredentialSpec:
+                                                type: string
+                                              gmsaCredentialSpecName:
+                                                type: string
+                                              hostProcess:
+                                                type: boolean
+                                              runAsUserName:
+                                                type: string
+                                            type: object
+                                        type: object
+                                      startupProbe:
+                                        properties:
+                                          exec:
+                                            properties:
+                                              command:
+                                                items:
+                                                  type: string
+                                                type: array
+                                            type: object
+                                          failureThreshold:
+                                            format: int32
+                                            type: integer
+                                          grpc:
+                                            properties:
+                                              port:
+                                                format: int32
+                                                type: integer
+                                              service:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          httpGet:
+                                            properties:
+                                              host:
+                                                type: string
+                                              httpHeaders:
+                                                items:
+                                                  properties:
+                                                    name:
+                                                      type: string
+                                                    value:
+                                                      type: string
+                                                  required:
+                                                  - name
+                                                  - value
+                                                  type: object
+                                                type: array
+                                              path:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                              scheme:
+                                                type: string
+                                            required:
+                                            - port
+                                            type: object
+                                          initialDelaySeconds:
+                                            format: int32
+                                            type: integer
+                                          periodSeconds:
+                                            format: int32
+                                            type: integer
+                                          successThreshold:
+                                            format: int32
+                                            type: integer
+                                          tcpSocket:
+                                            properties:
+                                              host:
+                                                type: string
+                                              port:
+                                                anyOf:
+                                                - type: integer
+                                                - type: string
+                                                x-kubernetes-int-or-string: true
+                                            required:
+                                            - port
+                                            type: object
+                                          terminationGracePeriodSeconds:
+                                            format: int64
+                                            type: integer
+                                          timeoutSeconds:
+                                            format: int32
+                                            type: integer
+                                        type: object
+                                      stdin:
+                                        type: boolean
+                                      stdinOnce:
+                                        type: boolean
+                                      terminationMessagePath:
+                                        type: string
+                                      terminationMessagePolicy:
+                                        type: string
+                                      tty:
+                                        type: boolean
+                                      volumeDevices:
+                                        items:
+                                          properties:
+                                            devicePath:
+                                              type: string
+                                            name:
+                                              type: string
+                                          required:
+                                          - devicePath
+                                          - name
+                                          type: object
+                                        type: array
+                                      volumeMounts:
+                                        items:
+                                          properties:
+                                            mountPath:
+                                              type: string
+                                            mountPropagation:
+                                              type: string
+                                            name:
+                                              type: string
+                                            readOnly:
+                                              type: boolean
+                                            subPath:
+                                              type: string
+                                            subPathExpr:
+                                              type: string
+                                          required:
+                                          - mountPath
+                                          - name
+                                          type: object
+                                        type: array
+                                      workingDir:
+                                        type: string
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                                nodeName:
+                                  type: string
+                                nodeSelector:
+                                  additionalProperties:
+                                    type: string
+                                  type: object
+                                  x-kubernetes-map-type: atomic
+                                os:
+                                  properties:
+                                    name:
+                                      type: string
+                                  required:
+                                  - name
+                                  type: object
+                                overhead:
+                                  additionalProperties:
+                                    anyOf:
+                                    - type: integer
+                                    - type: string
+                                    pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                    x-kubernetes-int-or-string: true
+                                  type: object
+                                preemptionPolicy:
+                                  type: string
+                                priority:
+                                  format: int32
+                                  type: integer
+                                priorityClassName:
+                                  type: string
+                                readinessGates:
+                                  items:
+                                    properties:
+                                      conditionType:
+                                        type: string
+                                    required:
+                                    - conditionType
+                                    type: object
+                                  type: array
+                                restartPolicy:
+                                  type: string
+                                runtimeClassName:
+                                  type: string
+                                schedulerName:
+                                  type: string
+                                securityContext:
+                                  properties:
+                                    fsGroup:
+                                      format: int64
+                                      type: integer
+                                    fsGroupChangePolicy:
+                                      type: string
+                                    runAsGroup:
+                                      format: int64
+                                      type: integer
+                                    runAsNonRoot:
+                                      type: boolean
+                                    runAsUser:
+                                      format: int64
+                                      type: integer
+                                    seLinuxOptions:
+                                      properties:
+                                        level:
+                                          type: string
+                                        role:
+                                          type: string
+                                        type:
+                                          type: string
+                                        user:
+                                          type: string
+                                      type: object
+                                    seccompProfile:
+                                      properties:
+                                        localhostProfile:
+                                          type: string
+                                        type:
+                                          type: string
+                                      required:
+                                      - type
+                                      type: object
+                                    supplementalGroups:
+                                      items:
+                                        format: int64
+                                        type: integer
+                                      type: array
+                                    sysctls:
+                                      items:
+                                        properties:
+                                          name:
+                                            type: string
+                                          value:
+                                            type: string
+                                        required:
+                                        - name
+                                        - value
+                                        type: object
+                                      type: array
+                                    windowsOptions:
+                                      properties:
+                                        gmsaCredentialSpec:
+                                          type: string
+                                        gmsaCredentialSpecName:
+                                          type: string
+                                        hostProcess:
+                                          type: boolean
+                                        runAsUserName:
+                                          type: string
+                                      type: object
+                                  type: object
+                                serviceAccount:
+                                  type: string
+                                serviceAccountName:
+                                  type: string
+                                setHostnameAsFQDN:
+                                  type: boolean
+                                shareProcessNamespace:
+                                  type: boolean
+                                subdomain:
+                                  type: string
+                                terminationGracePeriodSeconds:
+                                  format: int64
+                                  type: integer
+                                tolerations:
+                                  items:
+                                    properties:
+                                      effect:
+                                        type: string
+                                      key:
+                                        type: string
+                                      operator:
+                                        type: string
+                                      tolerationSeconds:
+                                        format: int64
+                                        type: integer
+                                      value:
+                                        type: string
+                                    type: object
+                                  type: array
+                                topologySpreadConstraints:
+                                  items:
+                                    properties:
+                                      labelSelector:
+                                        properties:
+                                          matchExpressions:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                operator:
+                                                  type: string
+                                                values:
+                                                  items:
+                                                    type: string
+                                                  type: array
+                                              required:
+                                              - key
+                                              - operator
+                                              type: object
+                                            type: array
+                                          matchLabels:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        type: object
+                                      maxSkew:
+                                        format: int32
+                                        type: integer
+                                      topologyKey:
+                                        type: string
+                                      whenUnsatisfiable:
+                                        type: string
+                                    required:
+                                    - maxSkew
+                                    - topologyKey
+                                    - whenUnsatisfiable
+                                    type: object
+                                  type: array
+                                  x-kubernetes-list-map-keys:
+                                  - topologyKey
+                                  - whenUnsatisfiable
+                                  x-kubernetes-list-type: map
+                                volumes:
+                                  items:
+                                    properties:
+                                      awsElasticBlockStore:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      azureDisk:
+                                        properties:
+                                          cachingMode:
+                                            type: string
+                                          diskName:
+                                            type: string
+                                          diskURI:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          kind:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - diskName
+                                        - diskURI
+                                        type: object
+                                      azureFile:
+                                        properties:
+                                          readOnly:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                          shareName:
+                                            type: string
+                                        required:
+                                        - secretName
+                                        - shareName
+                                        type: object
+                                      cephfs:
+                                        properties:
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretFile:
+                                            type: string
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - monitors
+                                        type: object
+                                      cinder:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      configMap:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          name:
+                                            type: string
+                                          optional:
+                                            type: boolean
+                                        type: object
+                                      csi:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          nodePublishSecretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          volumeAttributes:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      downwardAPI:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                fieldRef:
+                                                  properties:
+                                                    apiVersion:
+                                                      type: string
+                                                    fieldPath:
+                                                      type: string
+                                                  required:
+                                                  - fieldPath
+                                                  type: object
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                                resourceFieldRef:
+                                                  properties:
+                                                    containerName:
+                                                      type: string
+                                                    divisor:
+                                                      anyOf:
+                                                      - type: integer
+                                                      - type: string
+                                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                      x-kubernetes-int-or-string: true
+                                                    resource:
+                                                      type: string
+                                                  required:
+                                                  - resource
+                                                  type: object
+                                              required:
+                                              - path
+                                              type: object
+                                            type: array
+                                        type: object
+                                      emptyDir:
+                                        properties:
+                                          medium:
+                                            type: string
+                                          sizeLimit:
+                                            anyOf:
+                                            - type: integer
+                                            - type: string
+                                            pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                            x-kubernetes-int-or-string: true
+                                        type: object
+                                      ephemeral:
+                                        properties:
+                                          volumeClaimTemplate:
+                                            properties:
+                                              metadata:
+                                                properties:
+                                                  annotations:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  finalizers:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  labels:
+                                                    additionalProperties:
+                                                      type: string
+                                                    type: object
+                                                  name:
+                                                    type: string
+                                                  namespace:
+                                                    type: string
+                                                type: object
+                                              spec:
+                                                properties:
+                                                  accessModes:
+                                                    items:
+                                                      type: string
+                                                    type: array
+                                                  dataSource:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  dataSourceRef:
+                                                    properties:
+                                                      apiGroup:
+                                                        type: string
+                                                      kind:
+                                                        type: string
+                                                      name:
+                                                        type: string
+                                                    required:
+                                                    - kind
+                                                    - name
+                                                    type: object
+                                                  resources:
+                                                    properties:
+                                                      limits:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                      requests:
+                                                        additionalProperties:
+                                                          anyOf:
+                                                          - type: integer
+                                                          - type: string
+                                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                          x-kubernetes-int-or-string: true
+                                                        type: object
+                                                    type: object
+                                                  selector:
+                                                    properties:
+                                                      matchExpressions:
+                                                        items:
+                                                          properties:
+                                                            key:
+                                                              type: string
+                                                            operator:
+                                                              type: string
+                                                            values:
+                                                              items:
+                                                                type: string
+                                                              type: array
+                                                          required:
+                                                          - key
+                                                          - operator
+                                                          type: object
+                                                        type: array
+                                                      matchLabels:
+                                                        additionalProperties:
+                                                          type: string
+                                                        type: object
+                                                    type: object
+                                                  storageClassName:
+                                                    type: string
+                                                  volumeMode:
+                                                    type: string
+                                                  volumeName:
+                                                    type: string
+                                                type: object
+                                            required:
+                                            - spec
+                                            type: object
+                                        type: object
+                                      fc:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          readOnly:
+                                            type: boolean
+                                          targetWWNs:
+                                            items:
+                                              type: string
+                                            type: array
+                                          wwids:
+                                            items:
+                                              type: string
+                                            type: array
+                                        type: object
+                                      flexVolume:
+                                        properties:
+                                          driver:
+                                            type: string
+                                          fsType:
+                                            type: string
+                                          options:
+                                            additionalProperties:
+                                              type: string
+                                            type: object
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                        required:
+                                        - driver
+                                        type: object
+                                      flocker:
+                                        properties:
+                                          datasetName:
+                                            type: string
+                                          datasetUUID:
+                                            type: string
+                                        type: object
+                                      gcePersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          partition:
+                                            format: int32
+                                            type: integer
+                                          pdName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - pdName
+                                        type: object
+                                      gitRepo:
+                                        properties:
+                                          directory:
+                                            type: string
+                                          repository:
+                                            type: string
+                                          revision:
+                                            type: string
+                                        required:
+                                        - repository
+                                        type: object
+                                      glusterfs:
+                                        properties:
+                                          endpoints:
+                                            type: string
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - endpoints
+                                        - path
+                                        type: object
+                                      hostPath:
+                                        properties:
+                                          path:
+                                            type: string
+                                          type:
+                                            type: string
+                                        required:
+                                        - path
+                                        type: object
+                                      iscsi:
+                                        properties:
+                                          chapAuthDiscovery:
+                                            type: boolean
+                                          chapAuthSession:
+                                            type: boolean
+                                          fsType:
+                                            type: string
+                                          initiatorName:
+                                            type: string
+                                          iqn:
+                                            type: string
+                                          iscsiInterface:
+                                            type: string
+                                          lun:
+                                            format: int32
+                                            type: integer
+                                          portals:
+                                            items:
+                                              type: string
+                                            type: array
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          targetPortal:
+                                            type: string
+                                        required:
+                                        - iqn
+                                        - lun
+                                        - targetPortal
+                                        type: object
+                                      name:
+                                        type: string
+                                      nfs:
+                                        properties:
+                                          path:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          server:
+                                            type: string
+                                        required:
+                                        - path
+                                        - server
+                                        type: object
+                                      persistentVolumeClaim:
+                                        properties:
+                                          claimName:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                        required:
+                                        - claimName
+                                        type: object
+                                      photonPersistentDisk:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          pdID:
+                                            type: string
+                                        required:
+                                        - pdID
+                                        type: object
+                                      portworxVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          volumeID:
+                                            type: string
+                                        required:
+                                        - volumeID
+                                        type: object
+                                      projected:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          sources:
+                                            items:
+                                              properties:
+                                                configMap:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                downwardAPI:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          fieldRef:
+                                                            properties:
+                                                              apiVersion:
+                                                                type: string
+                                                              fieldPath:
+                                                                type: string
+                                                            required:
+                                                            - fieldPath
+                                                            type: object
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                          resourceFieldRef:
+                                                            properties:
+                                                              containerName:
+                                                                type: string
+                                                              divisor:
+                                                                anyOf:
+                                                                - type: integer
+                                                                - type: string
+                                                                pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                                                x-kubernetes-int-or-string: true
+                                                              resource:
+                                                                type: string
+                                                            required:
+                                                            - resource
+                                                            type: object
+                                                        required:
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                  type: object
+                                                secret:
+                                                  properties:
+                                                    items:
+                                                      items:
+                                                        properties:
+                                                          key:
+                                                            type: string
+                                                          mode:
+                                                            format: int32
+                                                            type: integer
+                                                          path:
+                                                            type: string
+                                                        required:
+                                                        - key
+                                                        - path
+                                                        type: object
+                                                      type: array
+                                                    name:
+                                                      type: string
+                                                    optional:
+                                                      type: boolean
+                                                  type: object
+                                                serviceAccountToken:
+                                                  properties:
+                                                    audience:
+                                                      type: string
+                                                    expirationSeconds:
+                                                      format: int64
+                                                      type: integer
+                                                    path:
+                                                      type: string
+                                                  required:
+                                                  - path
+                                                  type: object
+                                              type: object
+                                            type: array
+                                        type: object
+                                      quobyte:
+                                        properties:
+                                          group:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          registry:
+                                            type: string
+                                          tenant:
+                                            type: string
+                                          user:
+                                            type: string
+                                          volume:
+                                            type: string
+                                        required:
+                                        - registry
+                                        - volume
+                                        type: object
+                                      rbd:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          image:
+                                            type: string
+                                          keyring:
+                                            type: string
+                                          monitors:
+                                            items:
+                                              type: string
+                                            type: array
+                                          pool:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          user:
+                                            type: string
+                                        required:
+                                        - image
+                                        - monitors
+                                        type: object
+                                      scaleIO:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          gateway:
+                                            type: string
+                                          protectionDomain:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          sslEnabled:
+                                            type: boolean
+                                          storageMode:
+                                            type: string
+                                          storagePool:
+                                            type: string
+                                          system:
+                                            type: string
+                                          volumeName:
+                                            type: string
+                                        required:
+                                        - gateway
+                                        - secretRef
+                                        - system
+                                        type: object
+                                      secret:
+                                        properties:
+                                          defaultMode:
+                                            format: int32
+                                            type: integer
+                                          items:
+                                            items:
+                                              properties:
+                                                key:
+                                                  type: string
+                                                mode:
+                                                  format: int32
+                                                  type: integer
+                                                path:
+                                                  type: string
+                                              required:
+                                              - key
+                                              - path
+                                              type: object
+                                            type: array
+                                          optional:
+                                            type: boolean
+                                          secretName:
+                                            type: string
+                                        type: object
+                                      storageos:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          readOnly:
+                                            type: boolean
+                                          secretRef:
+                                            properties:
+                                              name:
+                                                type: string
+                                            type: object
+                                          volumeName:
+                                            type: string
+                                          volumeNamespace:
+                                            type: string
+                                        type: object
+                                      vsphereVolume:
+                                        properties:
+                                          fsType:
+                                            type: string
+                                          storagePolicyID:
+                                            type: string
+                                          storagePolicyName:
+                                            type: string
+                                          volumePath:
+                                            type: string
+                                        required:
+                                        - volumePath
+                                        type: object
+                                    required:
+                                    - name
+                                    type: object
+                                  type: array
+                              required:
+                              - containers
+                              type: object
+                          type: object
+                        updateStrategy:
+                          properties:
+                            rollingUpdate:
+                              properties:
+                                partition:
+                                  format: int32
+                                  type: integer
+                              type: object
+                            type:
+                              type: string
+                          type: object
+                        volumeClaimTemplates:
+                          items:
+                            properties:
+                              apiVersion:
+                                type: string
+                              kind:
+                                type: string
+                              metadata:
+                                properties:
+                                  annotations:
+                                    additionalProperties:
+                                      type: string
+                                    type: object
+                                  finalizers:
+                                    items:
+                                      type: string
+                                    type: array
+                                  labels:
+                                    additionalProperties:
+                                      type: string
+                                    type: object
+                                  name:
+                                    type: string
+                                  namespace:
+                                    type: string
+                                type: object
+                              spec:
+                                properties:
+                                  accessModes:
+                                    items:
+                                      type: string
+                                    type: array
+                                  dataSource:
+                                    properties:
+                                      apiGroup:
+                                        type: string
+                                      kind:
+                                        type: string
+                                      name:
+                                        type: string
+                                    required:
+                                    - kind
+                                    - name
+                                    type: object
+                                  dataSourceRef:
+                                    properties:
+                                      apiGroup:
+                                        type: string
+                                      kind:
+                                        type: string
+                                      name:
+                                        type: string
+                                    required:
+                                    - kind
+                                    - name
+                                    type: object
+                                  resources:
+                                    properties:
+                                      limits:
+                                        additionalProperties:
+                                          anyOf:
+                                          - type: integer
+                                          - type: string
+                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                          x-kubernetes-int-or-string: true
+                                        type: object
+                                      requests:
+                                        additionalProperties:
+                                          anyOf:
+                                          - type: integer
+                                          - type: string
+                                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                          x-kubernetes-int-or-string: true
+                                        type: object
+                                    type: object
+                                  selector:
+                                    properties:
+                                      matchExpressions:
+                                        items:
+                                          properties:
+                                            key:
+                                              type: string
+                                            operator:
+                                              type: string
+                                            values:
+                                              items:
+                                                type: string
+                                              type: array
+                                          required:
+                                          - key
+                                          - operator
+                                          type: object
+                                        type: array
+                                      matchLabels:
+                                        additionalProperties:
+                                          type: string
+                                        type: object
+                                    type: object
+                                  storageClassName:
+                                    type: string
+                                  volumeMode:
+                                    type: string
+                                  volumeName:
+                                    type: string
+                                type: object
+                              status:
+                                properties:
+                                  accessModes:
+                                    items:
+                                      type: string
+                                    type: array
+                                  allocatedResources:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                  capacity:
+                                    additionalProperties:
+                                      anyOf:
+                                      - type: integer
+                                      - type: string
+                                      pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                                      x-kubernetes-int-or-string: true
+                                    type: object
+                                  conditions:
+                                    items:
+                                      properties:
+                                        lastProbeTime:
+                                          format: date-time
+                                          type: string
+                                        lastTransitionTime:
+                                          format: date-time
+                                          type: string
+                                        message:
+                                          type: string
+                                        reason:
+                                          type: string
+                                        status:
+                                          type: string
+                                        type:
+                                          type: string
+                                      required:
+                                      - status
+                                      - type
+                                      type: object
+                                    type: array
+                                  phase:
+                                    type: string
+                                  resizeStatus:
+                                    type: string
+                                type: object
+                            type: object
+                          type: array
+                      required:
+                      - selector
+                      - serviceName
+                      - template
+                      type: object
+                    status:
+                      properties:
+                        availableReplicas:
+                          format: int32
+                          type: integer
+                        collisionCount:
+                          format: int32
+                          type: integer
+                        conditions:
+                          items:
+                            properties:
+                              lastTransitionTime:
+                                format: date-time
+                                type: string
+                              message:
+                                type: string
+                              reason:
+                                type: string
+                              status:
+                                type: string
+                              type:
+                                type: string
+                            required:
+                            - status
+                            - type
+                            type: object
+                          type: array
+                        currentReplicas:
+                          format: int32
+                          type: integer
+                        currentRevision:
+                          type: string
+                        observedGeneration:
+                          format: int64
+                          type: integer
+                        readyReplicas:
+                          format: int32
+                          type: integer
+                        replicas:
+                          format: int32
+                          type: integer
+                        updateRevision:
+                          type: string
+                        updatedReplicas:
+                          format: int32
+                          type: integer
+                      required:
+                      - availableReplicas
+                      - replicas
+                      type: object
+                  type: object
+                type: array
+            required:
+            - ready
+            - resourceCount
+            type: object
+        type: object
+    served: true
+    storage: true
+    subresources:
+      status: {}
+status:
+  acceptedNames:
+    kind: ""
+    plural: ""
+  conditions: []
+  storedVersions: []
+
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  creationTimestamp: null
+  name: monitor
+rules:
+- apiGroups:
+  - ""
+  resources:
+  - pods
+  - services
+  - endpoints
+  - persistentvolumeclaims
+  - events
+  - configmaps
+  - secrets
+  verbs:
+  - '*'
+- apiGroups:
+  - apps
+  resources:
+  - deployments
+  - daemonsets
+  - replicasets
+  - statefulsets
+  verbs:
+  - '*'
+- apiGroups:
+  - monitoring.coreos.com
+  resources:
+  - servicemonitors
+  verbs:
+  - get
+  - create
+- apiGroups:
+  - apps
+  resourceNames:
+  - monitor
+  resources:
+  - deployments/finalizers
+  verbs:
+  - update
+- apiGroups:
+  - ""
+  resources:
+  - pods
+  verbs:
+  - get
+- apiGroups:
+  - apps
+  resources:
+  - replicasets
+  verbs:
+  - get
+- apiGroups:
+  - k8splugin.io
+  resources:
+  - '*'
+  verbs:
+  - '*'
+- apiGroups:
+  - batch
+  resources:
+  - '*'
+  verbs:
+  - '*'
+- apiGroups:
+  - extensions
+  resources:
+  - '*'
+  verbs:
+  - '*'
+- apiGroups:
+  - certificates.k8s.io
+  resources:
+  - '*'
+  verbs:
+  - '*'
+
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: monitor
+subjects:
+- kind: ServiceAccount
+  name: monitor
+  namespace: default
+roleRef:
+  kind: ClusterRole
+  name: cluster-admin
+  apiGroup: rbac.authorization.k8s.io
+
+---
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: monitor
+  namespace: default
+
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: monitor-monitor-list
+  namespace: default
+data:
+  gvk.conf: |
+      [
+        {"Group": "k8s.plugin.opnfv.org", "Version": "v1alpha1", "Kind": "Network", "Resource": "networks" },
+        {"Group": "rbac.authorization.k8s.io", "Version": "v1", "Kind": "ClusterRole", "Resource": "clusterroles"}
+      ]
+
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: monitor
+  namespace: default
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: monitor
+  template:
+    metadata:
+      labels:
+        app: monitor
+    spec:
+      serviceAccountName: monitor
+      containers:
+        - name: monitor
+          # Replace this with the built image name
+          image: scc:latest
+          command: ["/opt/scc/entrypoint", "monitor"]
+          imagePullPolicy: IfNotPresent
+          volumeMounts:
+          - name: config-volume
+            mountPath: /opt/emco/monitor/gvk.conf
+            subPath: gvk.conf
+          env:
+            - name: NO_PROXY
+              value: "localhost,10.96.0.1/24,.cluster.local.,.cluster.local,.svc,mongo,rsync,etcd"
+            - name: no_proxy
+              value: "localhost,10.96.0.1/24,.cluster.local.,.cluster.local,.svc,mongo,rsync,etcd"
+            - name: http_proxy
+              value: {http_proxy}
+            - name: https_proxy
+              value: {https_proxy}
+            - name: HTTP_PROXY
+              value: {http_proxy}
+            - name: HTTPS_PROXY
+              value: {https_proxy}
+            - name: WATCH_NAMESPACE
+              value: ""
+            - name: POD_NAME
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.name
+            - name: OPERATOR_NAME
+              value: "monitor"
+      volumes:
+      - name: config-volume
+        configMap:
+          name: monitor-monitor-list
diff --git a/central-controller/deployments/kubernetes/monitor-deploy/monitor-deploy.sh b/central-controller/deployments/kubernetes/monitor-deploy/monitor-deploy.sh
new file mode 100644 (file)
index 0000000..2b5253c
--- /dev/null
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+#SPDX-License-Identifier: Apache-2.0
+#Copyright (c) 2022 Intel Corporation
+
+# usage: bash monitor-deploy.sh
+
+set -ex
+
+test -f ./monitor_configs && . monitor_configs
+username=$(echo -n ${username-""} | base64 -)
+token=$(echo -n ${token-""} | base64 -)
+repo_name=$(echo -n ${repo_name-""} | base64 -)
+cluster=$(echo -n ${cluster-""} | base64 -)
+http_proxy=${http_proxy-""}
+https_proxy=${https_proxy-""}
+
+cat > monitor-secret.yaml << EOF
+---
+apiVersion: v1
+kind: Secret
+metadata:
+  name: monitor-git-monitor
+  namespace: default
+type: Opaque
+data:
+  username: $username
+  token: $token
+  repo: $repo_name
+  clustername: $cluster
+EOF
+
+if [ -z "${username}" ]; then
+       sed -i "s,{http_proxy},$http_proxy,g" monitor-deploy-pushmode.yaml
+        sed -i "s,{https_proxy},$https_proxy,g" monitor-deploy-pushmode.yaml
+       rm monitor-secret.yaml
+       kubectl apply -f monitor-deploy-pushmode.yaml
+else
+       kubectl apply -f monitor-secret.yaml
+       sed -i "s,{http_proxy},$http_proxy,g" monitor-deploy-pullmode.yaml
+       sed -i "s,{https_proxy},$https_proxy,g" monitor-deploy-pullmode.yaml
+       kubectl apply -f monitor-deploy-pullmode.yaml
+fi
+
+
+
diff --git a/central-controller/deployments/kubernetes/monitor-deploy/monitor_configs b/central-controller/deployments/kubernetes/monitor-deploy/monitor_configs
new file mode 100644 (file)
index 0000000..d47accd
--- /dev/null
@@ -0,0 +1,10 @@
+#SPDX-License-Identifier: Apache-2.0
+#Copyright (c) 2022 Intel Corporation
+# set gitOps config with below line
+#username=
+#token=
+#repo_name=
+#cluster=
+#http_proxy=
+#https_proxy=
+
index 915d2aa..c7255af 100644 (file)
@@ -93,4 +93,4 @@ spec:
       - configMap:\r
           defaultMode: 511\r
           name: etcd-init\r
-        name: etcd-init \r
+        name: etcd-init        
\ No newline at end of file
index 60d2b80..8d39f70 100644 (file)
@@ -404,12 +404,36 @@ paths:
           description: Internal error
           content: {}
 
-  /overlays/{overlay-name}/hubs/{hub-name}/devices/{device-name}:
+  /overlays/{overlay-name}/hubs/{hub-name}/cnfs:
+    parameters:
+    - $ref: '#/components/parameters/OverlayName'
+    - $ref: '#/components/parameters/HubName'
+
+    get: # get all connections (hub or device) to this hub
+      tags:
+        - Hub CNF
+      summary: Get all Hub CNF statuses
+
+      description: |
+        Get all `cnfs' statuses`
+
+      operationId: getAllHubCNFStatuses
+      responses: # list of responses
+        '200':
+          description: Success
+          content:
+            application/json: # operation response mime type
+              schema:
+                $ref: '#/components/schemas/CNFStatus'
+        '500':
+          description: Internal error
+          content: {}
+
+  /overlays/{overlay-name}/hubs/{hub-name}/devices:
     # parameters list that are used with each operation for this path
     parameters:
     - $ref: '#/components/parameters/OverlayName'
     - $ref: '#/components/parameters/HubName'
-    - $ref: '#/components/parameters/DeviceName'
     post: # documentation for GET operation for this path
       tags:
         - Hub Connection
@@ -422,10 +446,26 @@ paths:
       responses: # list of responses
         '201':
           description: Success
-          content: {}
+          content:
+            application/json: # operation response mime type
+              schema:
+                $ref: '#/components/schemas/HubDevice'
         '500':
           description: Internal error
           content: {}
+      requestBody:
+        content:
+          application/json:
+            schema:
+                $ref: '#/components/schemas/HubDevice'
+        description: Hub device connection information
+        required: true
+  /overlays/{overlay-name}/hubs/{hub-name}/devices/{device-name}:
+    # parameters list that are used with each operation for this path
+    parameters:
+    - $ref: '#/components/parameters/OverlayName'
+    - $ref: '#/components/parameters/HubName'
+    - $ref: '#/components/parameters/DeviceName'
     delete: # documentation for DELETE operation for this path
       tags:
         - Hub Connection
@@ -585,14 +625,215 @@ paths:
         '500':
           description: Internal error
           content: {}
+  /overlays/{overlay-name}/devices/{device-name}/cnfs:
+    parameters:
+    - $ref: '#/components/parameters/OverlayName'
+    - $ref: '#/components/parameters/DeviceName'
+
+    get: # get all cnfs in this device
+      tags:
+        - Device CNF
+      summary: Get all CNFs statuses
+
+      description: |
+        Get all `cnfs' statuses`
+
+      operationId: getAllDeviceCNFStatuses
+      responses: # list of responses
+        '200':
+          description: Success
+          content:
+            application/json: # operation response mime type
+              schema:
+                $ref: '#/components/schemas/CNFStatus'
+        '500':
+          description: Internal error
+          content: {}
+          
+  ############################ Device Site API'S #################################################
+  /overlays/{overlay-name}/devices/{device-name}/sites:
+    parameters:
+    - $ref: '#/components/parameters/OverlayName'
+    - $ref: '#/components/parameters/DeviceName'
+    post: # create site for this device
+      tags:
+        - Device Site
+      summary: Create Device Site
+      
+      description: |
+        Create `site`
+        
+      operationId: createDeviceSite
+      responses:
+        '201':
+          description: Success
+          content:
+            application/json: # operation response mime type
+              schema:
+                $ref: '#/components/schemas/DeviceSite'
+        '409':
+          description: Name conflict
+          content: {}
+        '500':
+              description: Internal error
+              content: {}
+              
+    get: # get certain site defined for this device
+      tags:
+        - Device Site
+      summary: Get all Device sites
+
+      description: |
+        Get all `sites`
+
+      operationId: getAllDeviceSites
+      responses: # list of responses
+        '200':
+          description: Success
+          content:
+            application/json: # operation response mime type
+              schema:
+                $ref: '#/components/schemas/DeviceSiteArray'
+        '500':
+          description: Internal error
+          content: {}    
+  /overlays/{overlay-name}/devices/{device-name}/sites/{device-site-name}:
+    parameters:
+    - $ref: '#/components/parameters/OverlayName'
+    - $ref: '#/components/parameters/DeviceName'
+    - $ref: '#/components/parameters/DeviceSiteName'        
+    get: # get certain site defined for this device
+      tags:
+        - Device Site
+      summary: Get specific Device sites
+
+      description: |
+        Get specific `sites`
+
+      operationId: getSpecificDeviceSites
+      responses: # one response
+        '200':
+          description: Success
+          content:
+            application/json: # operation response mime type
+              schema:
+                $ref: '#/components/schemas/DeviceSite'
+        '500':
+          description: Internal error
+          content: {}
+    delete: # documentation for DELETE operation for this path
+      tags:
+        - Device Site
+      summary: Delete device site by site name
+
+      description: |
+        Delete `site`
+
+      operationId: deleteSiteByName
+      responses: # list of responses
+        '204':
+          description: Deleted
+          content: {}
+        '500':
+          description: Internal error
+          content: {}
   
   ############################ IP ranges API'S #################################################
+  /provider/ipranges:
+    post:
+      tags:
+        - Control Plane IP range Registration
+      summary: Control Plane IP range
+      description: Add a new `ip range` for control plane
+      operationId: addIpRangeCtrl
+      responses:
+        '201':
+          description: Success
+          content:
+            application/json: # operation response mime type
+              schema:
+                $ref: '#/components/schemas/IpRangeCtrl'
+        '409':
+          description: Name conflict
+          content: {}
+        '422':
+          description: Invalid Input
+          content: {}
+        '500':
+          description: Internal error
+          content: {}
+      requestBody:
+        content:
+          application/json:
+            schema:
+                $ref: '#/components/schemas/IpRangeCtrl'
+        description: Ip range information
+        required: true
+
+    get: # documentation for GET operation for this path
+      tags:
+        - Control Plane IP range Registration
+      summary: Get all control plane ip ranges
+
+      description: |
+        Get all `ip ranges`
+
+      operationId: getAllIpRangesCtrl
+      responses: # list of responses
+        '200':
+          description: Success
+          content:
+            application/json: # operation response mime type
+              schema:
+                $ref: '#/components/schemas/IpRangeArray'
+        '500':
+          description: Internal error
+          content: {}
+  /provider/ipranges/{iprange-name}:
+    parameters:
+    - $ref: '#/components/parameters/IpRangeName'
+    get: # documentation for GET operation for this path
+      tags:
+        - Control Plane IP range Registration
+      summary: Get specific control plane ip range
+
+      description: |
+        Get specific `ip range`
+
+      operationId: getSpecifiIpRangesCtrl
+      responses: # list of responses
+        '200':
+          description: Success
+          content:
+            application/json: # operation response mime type
+              schema:
+                $ref: '#/components/schemas/IpRange'
+        '500':
+          description: Internal error
+          content: {}
+    delete: # documentation for DELETE operation for this path
+      tags:
+        - Control Plane IP range Registration
+      summary: Delete ip range by ip range name
+
+      description: |
+        Delete `ip range`
+
+      operationId: deleteIpRangeByNameCtrl
+      responses: # list of responses
+        '204':
+          description: Deleted
+          content: {}
+        '500':
+          description: Internal error
+          content: {}
+          
   /overlays/{overlay-name}/ipranges:
     parameters:
     - $ref: '#/components/parameters/OverlayName'
     post:
       tags:
-        - IP range Registration
+        - Data Plane IP range Registration
       summary: IP range
       description: Add a new `ip range`
       operationId: addIpRange
@@ -622,7 +863,7 @@ paths:
 
     get: # documentation for GET operation for this path
       tags:
-        - IP range Registration
+        - Data Plane IP range Registration
       summary: Get all ip ranges
 
       description: |
@@ -639,7 +880,6 @@ paths:
         '500':
           description: Internal error
           content: {}
-
   /overlays/{overlay-name}/ipranges/{iprange-name}:
     # parameters list that are used with each operation for this path
     parameters:
@@ -647,7 +887,7 @@ paths:
     - $ref: '#/components/parameters/IpRangeName'
     get: # documentation for GET operation for this path
       tags:
-        - IP range Registration
+        - Data Plane IP range Registration
       summary: Get a Ip range by ip range name
 
       description: |
@@ -664,19 +904,227 @@ paths:
         '500':
           description: Internal error
           content: {}
+    delete: # documentation for DELETE operation for this path
+      tags:
+        - Data Plane IP range Registration
+      summary: Delete ip range by ip range name
+
+      description: |
+        Delete `ip range`
+
+      operationId: deleteIpRangeByName
+      responses: # list of responses
+        '204':
+          description: Deleted
+          content: {}
+        '500':
+          description: Internal error
+          content: {}
+          
+  ############################ Certificates API'S #################################################
+  /overlays/{overlay-name}/certificates:
+    parameters:
+    - $ref: '#/components/parameters/OverlayName'
+    post:
+      tags:
+      - Certificate Registration
+      summary: Create certificate
+      
+      description: |
+        Create `certificate`
+        
+      operationId: createCertificate
+      responses:
+        '201':
+          description: Success
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CertificateData'
+        '409':
+          description: Name conflict
+          content: {}
+        '422':
+          description: Invalid Input
+          content: {}
+        '500':
+          description: Internal error
+          content: {}
+      requestBody:
+        content:
+          application/json:
+            schema:
+                $ref: '#/components/schemas/Certificate'
+        description: Certificate information
+        required: true
+    get:
+      tags:
+      - Certificate Registration
+      summary: Get certificates
+      
+      description: | 
+        Get `certificates`
+      
+      operationId: getAllCertificates
+      responses:
+        '200':
+          description: Success
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CertificateArray'
+        '404':
+          description: Not Found
+          content: {}
+        '500':
+          description: Internal Error
+          content: {}
+  /overlays/{overlay-name}/certificates/{certificate-name}:
+    parameters:
+    - $ref: '#/components/parameters/OverlayName'
+    - $ref: '#/components/parameters/CertificateName'
+    get:
+      tags:
+      - Certificate Registration
+      summary: Get specific certificate
+      
+      description: |
+        Get `specific certificate`
+        
+      operationId: getSpecificCertificate
+      responses:
+        '200':
+          description: Success
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CertificateData'
+        '404':
+          description: Not Found
+          content: {}
+        '500':
+          description: Internal Error
+          content: {}
+    delete:
+      tags:
+      - Certificate Registration
+      summary: Delete specific certificate
+      
+      description: |
+        Delete `specific certificate`
+        
+      operationId: deleteSpecificCertificate
+      responses:
+        '204':
+          description: Deleted
+          content: {}
+        '404':
+          description: Not Found
+          content: {}
+        '500':
+          description: Internal Error
+          content: {}
+  
+  ############################ ClusterSyncObject API'S #################################################
+  /overlays/{overlay-name}/cluster-sync-objects:
+    parameters:
+    - $ref: '#/components/parameters/OverlayName'
+    post:
+      tags:
+      - Cluster Sync Object Registration
+      summary: Create cluster sync object
+      
+      description: |
+        Create `ClusterSyncObject`
+        
+      operationId: createClusterSyncObject
+      responses:
+        '201':
+          description: Success
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ClusterSyncObject'
+        '409':
+          description: Name conflict
+          content: {}
+        '422':
+          description: Invalid Input
+          content: {}
+        '500':
+          description: Internal error
+          content: {}
+      requestBody:
+        content:
+          application/json:
+            schema:
+                $ref: '#/components/schemas/ClusterSyncObject'
+        description: ClusterSyncObject information
+        required: true
+    get:
+      tags:
+      - Cluster Sync Object Registration
+      summary: Get all cluster sync objects
+      
+      description: |
+        Get all `ClusterSyncObjects`
+        
+      operationId: getAllClusterSyncObject
+      responses:
+        '200':
+          description: Success
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ClusterSyncObjectArray'
+        '404':
+          description: Not Found
+          content: {}
+        '500':
+          description: Internal Error
+          content: {}
+  /overlays/{overlay-name}/cluster-sync-objects/{cluster-sync-object-name}:
+    parameters:
+    - $ref: '#/components/parameters/OverlayName'
+    - $ref: '#/components/parameters/ClusterSyncObjectName'
+    get:
+      tags:
+      - Cluster Sync Object Registration
+      summary: Get specific cluster sync objects
+      
+      description: |
+        Get specific `ClusterSyncObjects`
+        
+      operationId: getSpecificClusterSyncObject
+      responses:
+        '200':
+          description: Success
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ClusterSyncObject'
+        '404':
+          description: Not Found
+          content: {}
+        '500':
+          description: Internal Error
+          content: {}
     put:
       tags:
-        - IP range Registration
-      summary: Update ip range
-      description: Update `ip range`
-      operationId: updateIpRange
+      - Cluster Sync Object Registration
+      summary: Update specific cluster sync objects
+      
+      description: |
+        Update `specific ClusterSyncObjects`
+        
+      operationId: updateSpecificClusterSyncObject
       responses:
         '200':
           description: Success
           content:
             application/json: # operation response mime type
               schema:
-                $ref: '#/components/schemas/IpRange'
+                $ref: '#/components/schemas/ClusterSyncObject'
         '422':
           description: Invalid data
           content: {}
@@ -688,25 +1136,29 @@ paths:
         content:
           application/json:
             schema:
-              $ref: '#/components/schemas/IpRange'
-        description: Update ip range object
+              $ref: '#/components/schemas/ClusterSyncObject'
+        description: Update ClusterSyncObject object
         required: true
-    delete: # documentation for DELETE operation for this path
+    delete:
       tags:
-        - IP range Registration
-      summary: Delete ip range by ip range name
-
+      - Cluster Sync Object Registration
+      summary: Delete specific cluster sync object
+      
       description: |
-        Delete `ip range`
-
-      operationId: deleteIpRangeByName
-      responses: # list of responses
+        Delete `specific ClusterSyncObject`
+        
+      operationId: deleteSpecificClusterSyncObject
+      responses:
         '204':
           description: Deleted
           content: {}
+        '404':
+          description: Not Found
+          content: {}
         '500':
-          description: Internal error
+          description: Internal Error
           content: {}
+    
      
 ######################### SCHEMAS ####################################################
 # An object to hold reusable parts that can be used across the definition
@@ -801,6 +1253,38 @@ components:
       type: array
       items:
         $ref: '#/components/schemas/Hub'
+    HubDeviceSpec:
+      type: object
+      properties:
+        device:
+          description: device name to establish connection with
+          type: string
+          example: "edge-1"
+        isDelegateHub:
+          description: is this the connection with a delegate hub
+          type: boolean
+          example: true
+      required:
+      - device
+      - isDelegateHub
+    HubDevice:
+      type: object
+      properties:
+        metadata:
+          $ref: '#/components/schemas/MetadataBase'
+        spec:
+          $ref: '#/components/schemas/HubDeviceSpec'
+    Device:
+      type: object
+      properties:
+        metadata:
+          $ref: '#/components/schemas/MetadataBase'
+        spec:
+          $ref: '#/components/schemas/DeviceSpec'
+    DeviceArray:
+      type: array
+      items:
+        $ref: '#/components/schemas/Device'
     DeviceSpec:
       type: object
       properties:
@@ -825,20 +1309,38 @@ components:
           type: string
           description: kubeconfiguration information for the traffic hub device
           example: "token"
+        certificateId:
+          type: string
+          description: certificate identifier for the device
+          example: "ResName-cert"
       required:
       - name
       - kubeConfig
-    Device:
+    DeviceSite:
       type: object
       properties:
         metadata:
           $ref: '#/components/schemas/MetadataBase'
         spec:
-          $ref: '#/components/schemas/DeviceSpec'
-    DeviceArray:
+          $ref: '#/components/schemas/DeviceSiteSpec'
+    DeviceSiteArray:
       type: array
       items:
-        $ref: '#/components/schemas/Device'
+        $ref: '#/components/schemas/DeviceSite'
+    DeviceSiteSpec:
+      type: object
+      properties:
+        hubs:
+          type: array
+          items:
+            type: string
+            example: "sample-hub"
+        url:
+          type: string
+          example: "http://www.xxx.com"
+        subnet:
+          type: string
+          example: "1.1.1.0/24"
     ConnectionEnd:
       type: object
       properties:
@@ -880,6 +1382,49 @@ components:
       type: array
       items:
         $ref: '#/components/schemas/Connection'
+    CNFStatusSpec:
+      type: object
+      properties:
+        appliedGeneration:
+          type: integer
+          example: 1
+        appliedTime:
+          type: string
+          example: "2022-04-22T07:10:58Z"
+        information:
+          $ref: '#/components/schemas/CNFInfoArray'
+    CNFStatus:
+      type: object
+      properties:
+        metadata:
+          $ref: '#/components/schemas/MetadataBase'
+        status:
+          $ref: '#/components/schemas/CNFStatusSpec'
+    CNFInfoArray:
+      type: array
+      items:
+        $ref: '#/components/schemas/CNFInfoSpec'
+    CNFInfoSpec:
+      type: object
+      properties:
+        ip:
+          type: string
+          example: "10.10.10.10"
+        name:
+          type: string
+          example: "sample-cnf"
+        namespace:
+          type: string
+          example: "default"
+        node:
+          type: string
+          example: "sample-node"
+        purpose:
+          type: string
+          example: "base"
+        status:
+          type: string
+          example: ""
     IpRangeSpec:
       type: object
       properties:
@@ -890,11 +1435,11 @@ components:
           example: "192.168.11.0/24"
         minIp:
           description: minium ip of the ip range
-          type: int
+          type: integer
           example: "1"
         maxIp:
           description: maximum ip of the ip range
-          type: int
+          type: integer
           example: "100"
       required:
       - name
@@ -910,9 +1455,16 @@ components:
       type: array
       items:
         $ref: '#/components/schemas/IpRange'
-    OverlaySpec:
+    IpRangeCtrl:
       type: object
       properties:
+        metadata:
+          $ref: '#/components/schemas/MetadataBase'
+        spec:
+          $ref: '#/components/schemas/IpRangeSpec'
+    OverlaySpec:
+      type: object
+      properties: {}
     Overlay:
       type: object
       properties:
@@ -924,6 +1476,69 @@ components:
       type: array
       items:
         $ref: '#/components/schemas/Overlay'
+    Certificate:
+      type: object
+      properties:
+        metadata:
+          $ref: '#/components/schemas/MetadataBase'
+    CertificateData:
+      type: object
+      properties:
+        metadata:
+          $ref: '#/components/schemas/MetadataBase'
+        spec:
+          type: object
+          properties: {}
+        data:
+          type: object
+          properties:
+            rootca:
+              type: string
+            ca:
+              type: string
+            key:
+              type: string
+    CertificateArray:
+      type: array
+      items:
+        $ref: '#/components/schemas/CertificateData'
+    ClusterSyncObject:
+      type: object
+      properties:
+        metadata:
+          $ref: '#/components/schemas/MetadataBase'
+        spec:
+          type: object
+          properties:
+            kv:
+              type: array
+              items:
+                $ref: '#/components/schemas/ClusterSyncObjectKV'
+    ClusterSyncObjectKV:
+      type: object
+      description: "Key value pairs for clustersyncobject"
+      properties:
+        gitType:
+          type: string
+          example: "github"
+        username:
+          type: string
+          example: "SampleUser"
+        repoName:
+          type: string
+          example: "SampleRepo"
+        gitToken:
+          type: string
+          description: "Personal access token to access the repo"
+          example: "xxxxxxxxxxxxxxxxx"
+        branch:
+          type: string
+          example: "main"
+    ClusterSyncObjectArray:
+      type: array
+      items:
+        $ref: '#/components/schemas/ClusterSyncObject'
+
 
 ################## PARAMETERS #########################################################    
   parameters:
@@ -951,6 +1566,14 @@ components:
       schema:
         type: string
         maxLength: 128
+    DeviceSiteName:
+      name: device-site-name
+      in: path
+      description: Name of the device site config
+      required: true
+      schema:
+        type: string
+        maxLength: 128
     IpRangeName:
       name: iprange-name
       in: path
@@ -964,6 +1587,22 @@ components:
       in: path
       description: Name of the overlay
       required: true
+      schema:
+        type: string
+        maxLength: 128
+    CertificateName:
+      name: certificate-name
+      in: path
+      description: Name of the certificate
+      required: true
+      schema:
+        type: string
+        maxLength: 128
+    ClusterSyncObjectName:
+      name: cluster-sync-object-name
+      in: path
+      description: Name of the cluster sync object
+      required: true
       schema:
         type: string
         maxLength: 128
\ No newline at end of file
diff --git a/central-controller/images/central_controller_overview.jpg b/central-controller/images/central_controller_overview.jpg
new file mode 100644 (file)
index 0000000..0c78f0a
Binary files /dev/null and b/central-controller/images/central_controller_overview.jpg differ
diff --git a/central-controller/src/monitor/LICENSE.txt b/central-controller/src/monitor/LICENSE.txt
deleted file mode 100644 (file)
index 8ea15ff..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-// SPDX-License-Identifier: Apache-2.0
-// Copyright (c) 2020 Intel Corporation
index d2d0bb4..f0eeb02 100644 (file)
@@ -5,8 +5,8 @@ export GO111MODULE=on
 
 all: clean
        CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
-       go build -a -ldflags '-extldflags "-static"' \
-       -o ./monitor main.go
+        go build -a -ldflags '-extldflags "-static"' \
+        -o ./monitor main.go
 
 build: clean test cover
 deploy: build
@@ -16,7 +16,7 @@ test: clean
        @go test -v ./...
 
 format:
-       @go fmt ./...
+        @go fmt ./...
 
 clean:
        @rm -f ./monitor
@@ -25,3 +25,4 @@ clean:
 cover:
        @go test -p 2 ./... -coverprofile=coverage.out
        @go tool cover -html=coverage.out -o coverage.html
+
index 30d54a7..94b0a20 100644 (file)
@@ -8,19 +8,26 @@ import (
        "context"
        "encoding/json"
        "fmt"
+       "os"
+       "strings"
+       "sync"
+
        "github.com/fluxcd/go-git-providers/github"
        "github.com/fluxcd/go-git-providers/gitprovider"
+       gogithub "github.com/google/go-github/v41/github"
        k8spluginv1alpha1 "gitlab.com/project-emco/core/emco-base/src/monitor/pkg/apis/k8splugin/v1alpha1"
+       log "gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/infra/logutils"
        k8serrors "k8s.io/apimachinery/pkg/api/errors"
-       "log"
-       "os"
        "sigs.k8s.io/controller-runtime/pkg/client"
-       "strings"
-       "sync"
 )
 
+type GitClient struct {
+       gitProviderClient gitprovider.Client
+       gogithubClient    *gogithub.Client
+}
+
 type GithubAccessClient struct {
-       cl           gitprovider.Client
+       cl           GitClient
        gitUser      string
        gitRepo      string
        cluster      string
@@ -29,6 +36,31 @@ type GithubAccessClient struct {
 
 var GitHubClient GithubAccessClient
 
+/*
+       Function to create gitClient
+       params : userName, github token
+       return : github client, error
+*/
+func CreateClient(userName, githubToken string) (GitClient, error) {
+
+       var client GitClient
+       var err error
+
+       client.gitProviderClient, err = github.NewClient(gitprovider.WithOAuth2Token(githubToken), gitprovider.WithDestructiveAPICalls(true))
+       if err != nil {
+               return GitClient{}, err
+       }
+
+       tp := gogithub.BasicAuthTransport{
+               Username: userName,
+               Password: githubToken,
+       }
+       client.gogithubClient = gogithub.NewClient(tp.Client())
+
+       return client, nil
+
+}
+
 func SetupGitHubClient() error {
        var err error
        GitHubClient, err = NewGitHubClient()
@@ -45,12 +77,12 @@ func NewGitHubClient() (GithubAccessClient, error) {
 
        // If any value is not provided then can't store in Git location
        if len(gitRepo) <= 0 || len(gitToken) <= 0 || len(gitUser) <= 0 || len(clusterName) <= 0 {
-               log.Printf("Github information not found:: Skipping Github storage")
+               log.Info("Github information not found:: Skipping Github storage", log.Fields{})
                return GithubAccessClient{}, nil
        }
-       log.Println("GitHub Info found", "gitRepo::", gitRepo, "cluster::", clusterName)
+       log.Info("GitHub Info found", log.Fields{"gitRepo::": gitRepo, "cluster::": clusterName})
 
-       cl, err := github.NewClient(gitprovider.WithOAuth2Token(gitToken), gitprovider.WithDestructiveAPICalls(true))
+       cl, err := CreateClient(gitUser, gitToken)
        if err != nil {
                return GithubAccessClient{}, err
        }
@@ -68,17 +100,16 @@ func CommitCR(c client.Client, cr *k8spluginv1alpha1.ResourceBundleState, org *k
        // Compare status and update if status changed
        resBytesCr, err := json.Marshal(cr.Status)
        if err != nil {
-               log.Println("json Marshal error for resource::", cr, err)
+               log.Info("json Marshal error for resource::", log.Fields{"cr": cr, "err": err})
                return err
        }
        resBytesOrg, err := json.Marshal(org)
        if err != nil {
-               log.Println("json Marshal error for resource::", cr, err)
+               log.Info("json Marshal error for resource::", log.Fields{"cr": cr, "err": err})
                return err
        }
        // If the status is not changed no need to update CR
        if bytes.Compare(resBytesCr, resBytesOrg) == 0 {
-               fmt.Println("Not changed")
                return nil
        }
        err = c.Status().Update(context.TODO(), cr)
@@ -86,33 +117,25 @@ func CommitCR(c client.Client, cr *k8spluginv1alpha1.ResourceBundleState, org *k
                if k8serrors.IsConflict(err) {
                        return err
                } else {
-                       log.Println("CR Update Error::", err)
+                       log.Info("CR Update Error::", log.Fields{"err": err})
                        return err
                }
        }
        resBytes, err := json.Marshal(cr)
        if err != nil {
-               log.Println("json Marshal error for resource::", cr, err)
+               log.Info("json Marshal error for resource::", log.Fields{"cr": cr, "err": err})
                return err
        }
-       fmt.Println("Ready to commit to github")
-
        // Check if GIT Info is provided if so store the information in the Git Repo also
        err = GitHubClient.CommitCRToGitHub(resBytes, cr.GetLabels())
        if err != nil {
-               log.Println("Error commiting status to Github", err)
+               log.Info("Error commiting status to Github", log.Fields{"err": err})
        }
        return nil
 }
 
-var mutex = sync.Mutex{}
-
 func (c *GithubAccessClient) CommitCRToGitHub(resBytes []byte, l map[string]string) error {
 
-       // Check if Github Client is available
-       if c.cl == nil {
-               return nil
-       }
        // Get cid and app id
        v, ok := l["emco/deployment-id"]
        if !ok {
@@ -126,15 +149,6 @@ func (c *GithubAccessClient) CommitCRToGitHub(resBytes []byte, l map[string]stri
        cid := result[0]
        path := "clusters/" + c.cluster + "/status/" + cid + "/app/" + app + "/" + v
 
-       userRef := gitprovider.UserRef{
-               Domain:    c.githubDomain,
-               UserLogin: c.gitUser,
-       }
-       // Create the repo reference
-       userRepoRef := gitprovider.UserRepositoryRef{
-               UserRef:        userRef,
-               RepositoryName: c.gitRepo,
-       }
        s := string(resBytes)
        var files []gitprovider.CommitFile
        files = append(files, gitprovider.CommitFile{
@@ -142,19 +156,129 @@ func (c *GithubAccessClient) CommitCRToGitHub(resBytes []byte, l map[string]stri
                Content: &s,
        })
        commitMessage := "Adding Status for " + path
-       fmt.Println("Commit to github prepared")
 
+       appName := c.cluster + "-" + cid + "-" + app
+       // commitfiles
+       err := c.CommitFiles(context.Background(), "main", commitMessage, appName, files)
+
+       if err != nil {
+               return err
+       }
+       return nil
+}
+
+/*
+       Internal function to create a repo refercnce
+       params : user name, repo name
+       return : repo reference
+*/
+func (c *GithubAccessClient) getRepoRef(userName string, repoName string) gitprovider.UserRepositoryRef {
+       // Create the user reference
+       userRef := gitprovider.UserRef{
+               Domain:    c.githubDomain,
+               UserLogin: userName,
+       }
+
+       // Create the repo reference
+       userRepoRef := gitprovider.UserRepositoryRef{
+               UserRef:        userRef,
+               RepositoryName: repoName,
+       }
+
+       return userRepoRef
+}
+
+var mutex = sync.Mutex{}
+
+/*
+       Function to commit multiple files to the github repo
+       params : context, Branch Name, Commit Message, appName, files ([]gitprovider.CommitFile)
+       return : nil/error
+*/
+func (c *GithubAccessClient) CommitFiles(ctx context.Context, branch, commitMessage, appName string, files []gitprovider.CommitFile) error {
+
+       mergeBranch := appName
        // Only one process to commit to Github location to avoid conflicts
        mutex.Lock()
        defer mutex.Unlock()
-       userRepo, err := c.cl.UserRepositories().Get(context.Background(), userRepoRef)
+
+       // commit the files to this new branch
+       // create repo reference
+       log.Info("Creating Repo Reference. ", log.Fields{})
+       userRepoRef := c.getRepoRef(c.gitUser, c.gitRepo)
+       log.Info("UserRepoRef:", log.Fields{"UserRepoRef": userRepoRef})
+
+       log.Info("Obtaining user repo. ", log.Fields{})
+       userRepo, err := c.cl.gitProviderClient.UserRepositories().Get(ctx, userRepoRef)
        if err != nil {
                return err
        }
-       //Commit file to this repo to a branch status
-       _, err = userRepo.Commits().Create(context.Background(), "main", commitMessage, files)
+       log.Info("UserRepo:", log.Fields{"UserRepo": userRepo})
+
+       log.Info("Commiting Files:", log.Fields{"files": files})
+       //Commit file to this repo
+       resp, err := userRepo.Commits().Create(ctx, mergeBranch, commitMessage, files)
        if err != nil {
+               if !strings.Contains(err.Error(), "404 Not Found") {
+                       log.Error("Error in commiting the files", log.Fields{"err": err, "mergeBranch": mergeBranch, "commitMessage": commitMessage, "files": files})
+               }
+               return err
+       }
+       log.Info("CommitResponse for userRepo:", log.Fields{"resp": resp})
+       return nil
+}
+
+/*
+       Function to obtaion the SHA of latest commit
+       params : context, git client, User Name, Repo Name, Branch, Path
+       return : LatestCommit string, error
+*/
+func GetLatestCommitSHA(ctx context.Context, c GitClient, userName, repoName, branch, path string) (string, error) {
+
+       perPage := 1
+       page := 1
+
+       lcOpts := &gogithub.CommitsListOptions{
+               ListOptions: gogithub.ListOptions{
+                       PerPage: perPage,
+                       Page:    page,
+               },
+               SHA:  branch,
+               Path: path,
+       }
+       //Get the latest SHA
+       resp, _, err := c.gogithubClient.Repositories.ListCommits(ctx, userName, repoName, lcOpts)
+       if err != nil {
+               log.Error("Error in obtaining the list of commits", log.Fields{"err": err})
+               return "", err
+       }
+       if len(resp) == 0 {
+               log.Debug("File not created yet.", log.Fields{"Latest Commit Array": resp})
+               return "", nil
+       }
+       latestCommitSHA := *resp[0].SHA
+
+       return latestCommitSHA, nil
+}
+
+/*
+       Function to create a new branch
+       params : context, git client,latestCommitSHA, User Name, Repo Name, Branch
+       return : error
+*/
+func createBranch(ctx context.Context, c GitClient, latestCommitSHA, userName, repoName, branch string) error {
+       // create a new branch
+       ref, _, err := c.gogithubClient.Git.CreateRef(ctx, userName, repoName, &gogithub.Reference{
+               Ref: gogithub.String("refs/heads/" + branch),
+               Object: &gogithub.GitObject{
+                       SHA: gogithub.String(latestCommitSHA),
+               },
+       })
+       if err != nil {
+               log.Error("Git.CreateRef returned error:", log.Fields{"err": err})
                return err
+
        }
+       log.Info("Branch Created: ", log.Fields{"ref": ref})
        return nil
 }
index d48da68..fee66b1 100644 (file)
@@ -11,6 +11,7 @@ import (
        "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
        "k8s.io/apimachinery/pkg/runtime"
        "k8s.io/apimachinery/pkg/runtime/schema"
+       "k8s.io/client-go/discovery"
        "k8s.io/client-go/dynamic"
        "log"
        "os"
@@ -19,6 +20,7 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/client"
        slog "sigs.k8s.io/controller-runtime/pkg/log"
        "sigs.k8s.io/controller-runtime/pkg/predicate"
+       "strings"
 )
 
 type GvkElement struct {
@@ -193,6 +195,29 @@ func readGVKList(file string) ([]configResource, error) {
        return result, nil
 }
 
+func ListCrds(group string, version string) ([]configResource, error) {
+       result := []configResource{}
+
+       config := ctrl.GetConfigOrDie()
+       d := discovery.NewDiscoveryClientForConfigOrDie(config)
+       resources, err := d.ServerResourcesForGroupVersion(group + "/" + version)
+       if err != nil {
+               return result, err
+       }
+
+       for _, res := range resources.APIResources {
+               if !strings.Contains(res.Name, "/") {
+                       result = append(result, configResource{
+                               Group:    group,
+                               Version:  version,
+                               Kind:     res.Kind,
+                               Resource: res.Name,
+                       })
+               }
+       }
+       return result, nil
+}
+
 func SetupControllers(mgr ctrl.Manager) error {
 
        // Copy map
@@ -207,18 +232,37 @@ func SetupControllers(mgr ctrl.Manager) error {
        }
 
        for _, gv := range l {
-               _, err = GetResourcesDynamically(gv.Group, gv.Version, gv.Resource, "default")
-               if err != nil {
-                       log.Println("Invalid resource for the cluster", gv)
-                       continue
-               }
-               gvk := schema.GroupVersionKind{
-                       Group:   gv.Group,
-                       Kind:    gv.Kind,
-                       Version: gv.Version,
-               }
-               if _, ok := GvkMap[gvk]; !ok {
-                       GvkMap[gvk] = GvkElement{defaultRes: false, resource: gv.Resource}
+               if gv.Resource == "" {
+                       crds, err := ListCrds(gv.Group, gv.Version)
+                       if err != nil {
+                               log.Println("Invalid API group and version for the cluster")
+                               continue
+                       }
+
+                       for _, crd := range crds {
+                               gvk := schema.GroupVersionKind{
+                                       Group:   crd.Group,
+                                       Kind:    crd.Kind,
+                                       Version: crd.Version,
+                               }
+                               if _, ok := GvkMap[gvk]; !ok {
+                                       GvkMap[gvk] = GvkElement{defaultRes: false, resource: crd.Resource}
+                               }
+                       }
+               } else {
+                       _, err = GetResourcesDynamically(gv.Group, gv.Version, gv.Resource, "default")
+                       if err != nil {
+                               log.Println("Invalid resource for the cluster", gv)
+                               continue
+                       }
+                       gvk := schema.GroupVersionKind{
+                               Group:   gv.Group,
+                               Kind:    gv.Kind,
+                               Version: gv.Version,
+                       }
+                       if _, ok := GvkMap[gvk]; !ok {
+                               GvkMap[gvk] = GvkElement{defaultRes: false, resource: gv.Resource}
+                       }
                }
        }
        log.Println("Adding controllers for::", GvkMap)
index aa3ce53..d1ad927 100644 (file)
@@ -5,7 +5,6 @@ package controllers
 
 import (
        "context"
-       "fmt"
        k8spluginv1alpha1 "gitlab.com/project-emco/core/emco-base/src/monitor/pkg/apis/k8splugin/v1alpha1"
        appsv1 "k8s.io/api/apps/v1"
        v1 "k8s.io/api/batch/v1"
@@ -111,8 +110,6 @@ func (r *ResourceBundleStateReconciler) Reconcile(ctx context.Context, req ctrl.
                return ctrl.Result{}, err
        }
 
-       fmt.Println("Commit CR with status")
-       fmt.Println(rbstate)
        err = CommitCR(r.Client, rbstate, orgStatus)
        if err != nil {
                return ctrl.Result{}, err
@@ -344,6 +341,7 @@ func (r *ResourceBundleStateReconciler) updateDynResources(rbstate *k8spluginv1a
                        log.Printf("Failed to list resources: %v", err)
                        return err
                }
+
                for _, res := range resourceList.Items {
                        err = UpdateResourceStatus(r.Client, &res, res.GetName(), res.GetNamespace())
                        if err != nil {
index 0bfd3b2..309006c 100644 (file)
@@ -1,11 +1,13 @@
 module gitlab.com/project-emco/core/emco-base/src/monitor
 
-go 1.17
+go 1.18
 
 require (
        github.com/fluxcd/go-git-providers v0.5.4
+       github.com/google/go-github/v41 v41.0.0
        github.com/onsi/ginkgo v1.16.5
        github.com/onsi/gomega v1.17.0
+       gitlab.com/project-emco/core/emco-base/src/orchestrator v0.0.0-00010101000000-000000000000
        k8s.io/api v0.23.1
        k8s.io/apimachinery v0.23.1
        k8s.io/client-go v0.23.1
@@ -32,7 +34,6 @@ require (
        github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
        github.com/golang/protobuf v1.5.2 // indirect
        github.com/google/go-cmp v0.5.6 // indirect
-       github.com/google/go-github/v41 v41.0.0 // indirect
        github.com/google/go-querystring v1.1.0 // indirect
        github.com/google/gofuzz v1.1.0 // indirect
        github.com/google/uuid v1.1.2 // indirect
@@ -49,6 +50,7 @@ require (
        github.com/prometheus/client_model v0.2.0 // indirect
        github.com/prometheus/common v0.28.0 // indirect
        github.com/prometheus/procfs v0.6.0 // indirect
+       github.com/sirupsen/logrus v1.8.1 // indirect
        github.com/spf13/pflag v1.0.5 // indirect
        go.uber.org/atomic v1.7.0 // indirect
        go.uber.org/multierr v1.6.0 // indirect
@@ -80,4 +82,5 @@ require (
 
 replace (
        github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.11.1
+       gitlab.com/project-emco/core/emco-base/src/orchestrator => ../vendor/gitlab.com/project-emco/core/emco-base/src/orchestrator
 )
index 70210f7..b363f8d 100644 (file)
@@ -56,23 +56,17 @@ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUM
 github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
-github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo=
 github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4=
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
 github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
-github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
 github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
@@ -86,7 +80,6 @@ github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnweb
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
 github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
 github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
 github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
 github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
@@ -120,7 +113,6 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn
 github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
 github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@@ -136,7 +128,6 @@ github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5Kwzbycv
 github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
 github.com/fluxcd/go-git-providers v0.5.4 h1:MnByjsmXa8rMt2hTmhmtbocq7YIsTlwZKrj9lAsob4Q=
 github.com/fluxcd/go-git-providers v0.5.4/go.mod h1:4jTHTmSx3rFGnG78KUVgFYeG6vWFnKwUSr2mi31tvp8=
-github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
 github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
 github.com/form3tech-oss/jwt-go v3.2.3+incompatible h1:7ZaBxOI7TMoYBfyA3cQHErNNyAWIKUMIwqxEtgHOs5c=
 github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
@@ -147,12 +138,6 @@ github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5
 github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg=
 github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
-github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
-github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
-github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
-github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0=
-github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc=
 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@@ -197,7 +182,6 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt
 github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
 github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
-github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -278,12 +262,9 @@ github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBt
 github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
 github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
 github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
-github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
 github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
 github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
 github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
-github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
 github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
 github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
 github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
@@ -304,9 +285,7 @@ github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ
 github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
 github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
 github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
-github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
@@ -319,9 +298,6 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1
 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
-github.com/k0kubun/pp v2.3.0+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg=
-github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
 github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -338,13 +314,11 @@ 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/ktrysmt/go-bitbucket v0.9.34/go.mod h1:FWxy2UK7GlK5b0NSJGc5hPqnssVlkNnsChvyuOf/Xno=
 github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
 github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
@@ -358,7 +332,6 @@ github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eI
 github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
 github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
@@ -419,12 +392,11 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
-github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
-github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
 github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
 github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
 github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
@@ -458,8 +430,6 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
 github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
-github.com/xanzy/go-gitlab v0.54.3/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM=
-github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
 github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -501,7 +471,6 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
 go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
 go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
 go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
-go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
 go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
 go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
@@ -511,7 +480,6 @@ go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
 go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI=
 go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
 golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -519,8 +487,6 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U
 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.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
-golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
 golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M=
 golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
@@ -559,7 +525,6 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -600,18 +565,14 @@ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v
 golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
-golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
 golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY=
 golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -637,10 +598,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/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-20180224232135-f6cff0780e54/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -654,7 +613,6 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -690,11 +648,9 @@ golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -811,9 +767,7 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR
 google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
 google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
 google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
-google.golang.org/appengine v1.0.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
@@ -920,7 +874,6 @@ gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
 gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
index ea17140..532f19d 100644 (file)
@@ -1,4 +1,4 @@
-go 1.17
+go 1.18
 
 module central-controller/src/reg_cluster
 
index 0d86272..005a6cd 100644 (file)
@@ -1,39 +1,44 @@
 package main
 
 import (
-       "context"
        "encoding/base64"
-       "flag"
-       pkgerrors "github.com/pkg/errors"
        "gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/infra/db"
        rsync "gitlab.com/project-emco/core/emco-base/src/rsync/pkg/db"
-       "io/ioutil"
-       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/kubernetes"
-       "k8s.io/client-go/tools/clientcmd"
+        "k8s.io/client-go/tools/clientcmd"
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+       pkgerrors "github.com/pkg/errors"
+       "context"
+       "io/ioutil"
        "log"
        "math/rand"
-       "os"
        "time"
+       "flag"
+       "os"
 )
 
 const (
-       defaultUsername  = "scc"
-       defaultNamespace = "sdewan-system"
-       defaultKey       = "userPassword"
+       defaultUsername="scc"
+       defaultNamespace="sdewan-system"
+       defaultKey="userPassword"
+       globalOverlay="global"
 )
 
+func getProviderName(provider string) string {
+       return provider + "_" + globalOverlay
+}
+
 func registerCluster(provider_name string, cluster_name string, kubeconfig_file string) error {
        content, err := ioutil.ReadFile(kubeconfig_file)
 
        ccc := rsync.NewCloudConfigClient()
 
-       config, _ := ccc.GetCloudConfig(provider_name, cluster_name, "0", "default")
+       config, _ := ccc.GetCloudConfig(getProviderName(provider_name), cluster_name, "0", "default")
        if config.Config != "" {
-               ccc.DeleteCloudConfig(provider_name, cluster_name, "0", "default")
+               ccc.DeleteCloudConfig(getProviderName(provider_name), cluster_name, "0", "default")
        }
 
-       _, err = ccc.CreateCloudConfig(provider_name, cluster_name, "0", "default", base64.StdEncoding.EncodeToString(content))
+       _, err = ccc.CreateCloudConfig(getProviderName(provider_name), cluster_name, "0", "default", base64.StdEncoding.EncodeToString(content))
        if err != nil {
                return pkgerrors.Wrap(err, "Error creating cloud config")
        }
index 91c38d1..1b31a51 100644 (file)
@@ -1,6 +1,6 @@
 module gitlab.com/project-emco/core/emco-base/src/rsync
 
-go 1.17
+go 1.18
 
 require (
        github.com/fluxcd/go-git-providers v0.5.4
@@ -9,6 +9,7 @@ require (
        github.com/ghodss/yaml v1.0.0
        github.com/golang/mock v1.6.0
        github.com/golang/protobuf v1.5.2
+       github.com/google/go-github/v41 v41.0.0
        github.com/jonboulle/clockwork v0.2.2
        github.com/pkg/errors v0.9.1
        gitlab.com/project-emco/core/emco-base/src/monitor v0.0.0-00010101000000-000000000000
@@ -53,7 +54,6 @@ require (
        github.com/golang/snappy v0.0.1 // indirect
        github.com/google/btree v1.0.1 // indirect
        github.com/google/go-cmp v0.5.6 // indirect
-       github.com/google/go-github/v41 v41.0.0 // indirect
        github.com/google/go-querystring v1.1.0 // indirect
        github.com/google/gofuzz v1.2.0 // indirect
        github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
index 4a2a034..ffa458b 100644 (file)
@@ -52,31 +52,25 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU=
 github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E=
-github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
-github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
 github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo=
 github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
 github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
-github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
 github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
 github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
 github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
 github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
 github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
 github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
 github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
-github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
 github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
 github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
 github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
@@ -158,10 +152,8 @@ github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7fo
 github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
 github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
 github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ=
 github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84=
 github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
@@ -184,13 +176,11 @@ github.com/fluxcd/pkg/runtime v0.12.5 h1:/8+0UBnSHbO9DVG9IFTjc37lwofsixGbs5WpHso
 github.com/fluxcd/pkg/runtime v0.12.5/go.mod h1:gspNvhAqodZgSmK1ZhMtvARBf/NGAlxmaZaIOHkJYsc=
 github.com/fluxcd/source-controller/api v0.21.2 h1:J0S5NN4V8FPLrkSMXIUoUvj1X/RuTpVJSjIRF414wmc=
 github.com/fluxcd/source-controller/api v0.21.2/go.mod h1:Ab2qDmAUz6ZCp8UaHYLYzxyFrC1FQqEqjxiROb/Rdiw=
-github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
 github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
 github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
 github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
 github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
-github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
 github.com/fvbommel/sortorder v1.0.1 h1:dSnXLt4mJYH25uDDGa3biZNQsozaUWDSWeKJ0qqFfzE=
 github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0=
 github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
@@ -199,14 +189,8 @@ github.com/getsentry/raven-go v0.2.0 h1:no+xWJRb5ZI7eE8TWgIq1jLulQiIoLG0IfYxv5JY
 github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
 github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
 github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w=
 github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
-github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
-github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
-github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0=
-github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0=
-github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc=
 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@@ -223,7 +207,6 @@ github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV
 github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro=
-github.com/go-logr/zapr v1.2.2/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4=
 github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY=
 github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
@@ -235,7 +218,6 @@ github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5F
 github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
 github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
@@ -261,7 +243,6 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71
 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
 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.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -361,12 +342,9 @@ github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBt
 github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
 github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
 github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
-github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
 github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
 github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
 github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
-github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
 github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
 github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
 github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
@@ -388,9 +366,6 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
 github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
 github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
-github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
-github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
 github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
 github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
@@ -410,9 +385,6 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X
 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
 github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
-github.com/k0kubun/pp v2.3.0+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg=
-github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
 github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
 github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -431,7 +403,6 @@ 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/ktrysmt/go-bitbucket v0.9.34/go.mod h1:FWxy2UK7GlK5b0NSJGc5hPqnssVlkNnsChvyuOf/Xno=
 github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
 github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
 github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
@@ -444,7 +415,6 @@ github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7
 github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA=
 github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
-github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA=
 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
 github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
@@ -463,7 +433,6 @@ github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUb
 github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
 github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
 github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
@@ -490,7 +459,6 @@ github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
 github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
 github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
-github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
 github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
 github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA=
@@ -498,14 +466,11 @@ github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
 github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
-github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
-github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
 github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
 github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
 github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
 github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE=
-github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
 github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
 github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
@@ -566,7 +531,6 @@ github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
 github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
 github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
@@ -625,8 +589,6 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 h1:uruHq4
 github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
 github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
-github.com/xanzy/go-gitlab v0.54.3/go.mod h1:F0QEXwmqiBUxCgJm8fE9S+1veX4XC9Z4cfaAbqwk4YM=
-github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0=
 github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c=
 github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
 github.com/xdg-go/scram v1.0.2 h1:akYIkZ28e6A96dkWNJQu3nmCzH3YfwMPQExUYDaRv7w=
@@ -698,7 +660,6 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
 go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
 go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
 go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
-go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
 go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
 go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
 go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
@@ -709,7 +670,6 @@ go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI=
 go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
 golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -718,8 +678,6 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
 golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
-golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
-golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
 golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M=
 golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
@@ -757,7 +715,6 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -802,21 +759,14 @@ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v
 golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
-golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
 golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211215060638-4ddde0e984e9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk=
 golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -843,7 +793,6 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180224232135-f6cff0780e54/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -862,7 +811,6 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -894,26 +842,21 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
@@ -990,7 +933,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u
 golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
@@ -1003,7 +945,6 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY=
 google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
@@ -1027,8 +968,6 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR
 google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
 google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
 google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
-google.golang.org/appengine v1.0.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
@@ -1106,7 +1045,6 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/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/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
 gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
@@ -1119,7 +1057,6 @@ gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
 gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
 gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -1144,35 +1081,18 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg=
-k8s.io/api v0.23.1/go.mod h1:WfXnOnwSqNtG62Y1CdjoMxh7r7u9QXGCkA1u0na2jgo=
-k8s.io/api v0.23.2/go.mod h1:sYuDb3flCtRPI8ghn6qFrcK5ZBu2mhbElxRE95qpwlI=
 k8s.io/api v0.23.3 h1:KNrME8KHGr12Ozjf8ytOewKzZh6hl/hHUZeHddT3a38=
 k8s.io/api v0.23.3/go.mod h1:w258XdGyvCmnBj/vGzQMj6kzdufJZVUwEM1U2fRJwSQ=
-k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4=
-k8s.io/apiextensions-apiserver v0.23.2/go.mod h1:9cs7avT6+GfzbB0pambTvH11wcaR85QQg4ovl9s15UU=
 k8s.io/apiextensions-apiserver v0.23.3 h1:JvPJA7hSEAqMRteveq4aj9semilAZYcJv+9HHFWfUdM=
 k8s.io/apiextensions-apiserver v0.23.3/go.mod h1:/ZpRXdgKZA6DvIVPEmXDCZJN53YIQEUDF+hrpIQJL38=
-k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc=
-k8s.io/apimachinery v0.23.1/go.mod h1:SADt2Kl8/sttJ62RRsi9MIV4o8f5S3coArm0Iu3fBno=
-k8s.io/apimachinery v0.23.2/go.mod h1:zDqeV0AK62LbCI0CI7KbWCAYdLg+E+8UXJ0rIz5gmS8=
 k8s.io/apimachinery v0.23.3 h1:7IW6jxNzrXTsP0c8yXz2E5Yx/WTzVPTsHIx/2Vm0cIk=
 k8s.io/apimachinery v0.23.3/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM=
-k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4=
-k8s.io/apiserver v0.23.2/go.mod h1:Kdt8gafkPev9Gfh+H6lCPbmRu42f7BfhOfHKKa3dtyU=
 k8s.io/apiserver v0.23.3/go.mod h1:3HhsTmC+Pn+Jctw+Ow0LHA4dQ4oXrQ4XJDzrVDG64T4=
 k8s.io/cli-runtime v0.23.3 h1:aJiediw+uUbxkfO6BNulcAMTUoU9Om43g3R7rIkYqcw=
 k8s.io/cli-runtime v0.23.3/go.mod h1:yA00O5pDqnjkBh8fkuugBbfIfjB1nOpz+aYLotbnOfc=
-k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA=
-k8s.io/client-go v0.23.1/go.mod h1:6QSI8fEuqD4zgFK0xbdwfB/PthBsIxCJMa3s17WlcO0=
-k8s.io/client-go v0.23.2/go.mod h1:k3YbsWg6GWdHF1THHTQP88X9RhB1DWPo3Dq7KfU/D1c=
 k8s.io/client-go v0.23.3 h1:23QYUmCQ/W6hW78xIwm3XqZrrKZM+LWDqW2zfo+szJs=
 k8s.io/client-go v0.23.3/go.mod h1:47oMd+YvAOqZM7pcQ6neJtBiFH7alOyfunYN48VsmwE=
-k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE=
-k8s.io/code-generator v0.23.2/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk=
 k8s.io/code-generator v0.23.3/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk=
-k8s.io/component-base v0.23.0/go.mod h1:DHH5uiFvLC1edCpvcTDV++NKULdYYU6pR9Tt3HIKMKI=
-k8s.io/component-base v0.23.2/go.mod h1:wS9Z03MO3oJ0RU8bB/dbXTiluGju+SC/F5i660gxB8c=
 k8s.io/component-base v0.23.3 h1:q+epprVdylgecijVGVdf4MbizEL2feW4ssd7cdo6LVY=
 k8s.io/component-base v0.23.3/go.mod h1:1Smc4C60rWG7d3HjSYpIwEbySQ3YWg0uzH5a2AtaTLg=
 k8s.io/component-helpers v0.23.3/go.mod h1:SH+W/WPTaTenbWyDEeY7iytAQiMh45aqKxkvlqQ57cg=
@@ -1190,16 +1110,13 @@ k8s.io/kubectl v0.23.3 h1:gJsF7cahkWDPYlNvYKK+OrBZLAJUBzCym+Zsi+dfi1E=
 k8s.io/kubectl v0.23.3/go.mod h1:VBeeXNgLhSabu4/k0O7Q0YujgnA3+CLTUE0RcmF73yY=
 k8s.io/metrics v0.23.3/go.mod h1:Ut8TvkbsO4oMVeUzaTArvPrcw9QRFLs2XNzUlORjdYE=
 k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20211208161948-7d6a63dca704 h1:ZKMMxTvduyf5WUtREOqg5LiXaN1KO/+0oOQPRFrClpo=
 k8s.io/utils v0.0.0-20211208161948-7d6a63dca704/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
 rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
-sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.27/go.mod h1:tq2nT0Kx7W+/f2JVE+zxYtUhdjuELJkVpNz+x/QN5R4=
-sigs.k8s.io/controller-runtime v0.11.0/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA=
 sigs.k8s.io/controller-runtime v0.11.1 h1:7YIHT2QnHJArj/dk9aUkYhfqfK5cIxPOX5gPECfdZLU=
 sigs.k8s.io/controller-runtime v0.11.1/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA=
 sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs=
@@ -1212,8 +1129,6 @@ sigs.k8s.io/kustomize/kustomize/v4 v4.4.1/go.mod h1:qOKJMMz2mBP+vcS7vK+mNz4HBLja
 sigs.k8s.io/kustomize/kyaml v0.13.0 h1:9c+ETyNfSrVhxvphs+K2dzT3dh5oVPPEqPOE/cUpScY=
 sigs.k8s.io/kustomize/kyaml v0.13.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E=
 sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
-sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
-sigs.k8s.io/structured-merge-diff/v4 v4.2.0/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
 sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y=
 sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
 sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
index 6db6f8c..f4eff8b 100644 (file)
@@ -40,7 +40,7 @@ func (p *Provider) GetClientProviders(app, cluster, level, namespace string) (Cl
        }
 
        kc, err := utils.GetKubeConfig(cluster, level, namespace)
-       if err != nil {
+       if err != nil && !pkgerrors.Is(err, utils.KubeConfigNotFoundErr) {
                return nil, err
        }
 
index 9bc8e05..79a6d92 100644 (file)
@@ -90,7 +90,8 @@ func NewCloudConfigClient() *CloudConfigClient {
 }
 
 func unmarshal(values [][]byte) (KubeConfig, error) {
-       if values != nil {
+       //changed
+       if values != nil && len(values) > 0 && len(values[0]) > 0 {
                kc := KubeConfig{}
                err := db.DBconn.Unmarshal(values[0], &kc)
                if err != nil {
@@ -414,7 +415,6 @@ func (c *CloudConfigClient) CreateGitOpsConfig(provider string, cluster string,
 
 // GetGitOpsConfig allows to create a new cloud config entry to hold a kubeconfig for access
 func (c *CloudConfigClient) GetGitOpsConfig(provider string, cluster string, level string, namespace string) (CloudGitOpsConfig, error) {
-
        key := CloudConfigKey{
                Provider:  provider,
                Cluster:   cluster,
@@ -426,6 +426,8 @@ func (c *CloudConfigClient) GetGitOpsConfig(provider string, cluster string, lev
        if err != nil {
                log.Error("Failure inserting CloudConfig", log.Fields{})
                return CloudGitOpsConfig{}, pkgerrors.Wrap(err, "Failure inserting CloudConfig")
+       } else if len(value) == 0 {
+               return CloudGitOpsConfig{}, pkgerrors.New("CloudGitOps config not found")
        }
        log.Info("Get in gs db", log.Fields{"value": value})
 
@@ -458,7 +460,7 @@ func (c *CloudConfigClient) DeleteGitOpsConfig(provider string, cluster string,
        // check if it doesn't exist
        _, err := c.GetGitOpsConfig(provider, cluster, level, namespace)
        if err != nil {
-               log.Error("Could not fetch the CloudConfig so not deleting", log.Fields{})
+               log.Error("Could not fetch the GitOpsConfig so not deleting", log.Fields{})
                return pkgerrors.New("Could not fetch the GitOpsConfig so not deleting")
        }
 
index eccb252..3c729de 100644 (file)
@@ -6,10 +6,9 @@ package emcogit
 import (
        "context"
 
-       emcogithub "gitlab.com/project-emco/core/emco-base/src/rsync/pkg/gitops/emcogithub"
-
        "github.com/fluxcd/go-git-providers/gitprovider"
        pkgerrors "github.com/pkg/errors"
+       emcogithub "gitlab.com/project-emco/core/emco-base/src/rsync/pkg/gitops/emcogithub"
 )
 
 /*
@@ -36,12 +35,12 @@ func convertToCommitFile(ref interface{}) []gitprovider.CommitFile {
 }
 
 /*
-       Helper function to convert interface to gitprovider.Client
+       Helper function to convert interface to emcogithub.GithubClient
        params: files interface{}
-       return: gitprovider.Client
+       return: emcogithub.GithubClient
 */
-func convertToClient(c interface{}) gitprovider.Client {
-       return c.(gitprovider.Client)
+func convertToClient(c interface{}) emcogithub.GithubClient {
+       return c.(emcogithub.GithubClient)
 }
 
 /*
@@ -49,10 +48,10 @@ func convertToClient(c interface{}) gitprovider.Client {
        params : git token
        return : git client, error
 */
-func CreateClient(gitToken string, gitType string) (interface{}, error) {
+func CreateClient(userName, gitToken, gitType string) (interface{}, error) {
        switch gitType {
        case "github":
-               c, err := emcogithub.CreateClient(gitToken)
+               c, err := emcogithub.CreateClient(userName, gitToken)
                if err != nil {
                        return nil, err
                }
@@ -71,7 +70,7 @@ func CreateRepo(ctx context.Context, c interface{}, repoName string, userName st
 
        switch gitType {
        case "github":
-               err := emcogithub.CreateRepo(ctx, convertToClient(c), repoName, userName, desc)
+               err := emcogithub.CreateRepo(ctx, c, repoName, userName, desc)
                if err != nil {
                        return err
                }
@@ -91,7 +90,7 @@ func DeleteRepo(ctx context.Context, c interface{}, userName string, repoName st
 
        switch gitType {
        case "github":
-               err := emcogithub.DeleteRepo(ctx, convertToClient(c), userName, repoName)
+               err := emcogithub.DeleteRepo(ctx, c, userName, repoName)
                if err != nil {
                        return err
                }
@@ -103,14 +102,14 @@ func DeleteRepo(ctx context.Context, c interface{}, userName string, repoName st
 
 /*
        Function to commit multiple files to the github repo
-       params : context, git client, User Name, Repo Name, Branch Name, Commit Message, files
+       params : context, git client, User Name, Repo Name, Branch Name, Commit Message, appName, files
        return : nil/error
 */
-func CommitFiles(ctx context.Context, c interface{}, userName string, repoName string, branch string, commitMessage string, files interface{}, gitType string) error {
+func CommitFiles(ctx context.Context, c interface{}, userName, repoName, branch, commitMessage, appName string, files interface{}, gitType string) error {
 
        switch gitType {
        case "github":
-               err := emcogithub.CommitFiles(ctx, convertToClient(c), userName, repoName, branch, commitMessage, convertToCommitFile(files))
+               err := emcogithub.CommitFiles(ctx, c, userName, repoName, branch, commitMessage, appName, convertToCommitFile(files))
                if err != nil {
                        return err
                }
@@ -153,9 +152,70 @@ func Delete(path string, files interface{}, gitType string) interface{} {
 func GetFiles(ctx context.Context, c interface{}, userName, repoName, branch, path, gitType string) (interface{}, error) {
        switch gitType {
        case "github":
-               ref, err := emcogithub.GetFiles(ctx, convertToClient(c), userName, repoName, branch, path)
+               ref, err := emcogithub.GetFiles(ctx, c, userName, repoName, branch, path)
                return ref, err
        }
        //Add other types like gitlab, bitbucket etc
        return nil, nil
 }
+
+/*
+       Function to obtaion the SHA of latest commit
+       params : context, go git client, User Name, Repo Name, Branch, Path, gitType
+       return : LatestCommit string, error
+*/
+func GetLatestCommitSHA(ctx context.Context, c interface{}, userName, repoName, branch, path, gitType string) (string, error) {
+       switch gitType {
+       case "github":
+               latestCommitSHA, err := emcogithub.GetLatestCommitSHA(ctx, c, userName, repoName, branch, path)
+               return latestCommitSHA, err
+       }
+       //Add other types like gitlab, bitbucket etc
+       return "", nil
+}
+
+/*
+       Function to check if file exists
+       params : context, go git client, User Name, Repo Name, Branch, Path, gitType
+       return : LatestCommit string, error
+*/
+func CheckIfFileExists(ctx context.Context, c interface{}, userName, repoName, branch, path, gitType string) (bool, error) {
+       switch gitType {
+       case "github":
+               check, err := emcogithub.CheckIfFileExists(ctx, c, userName, repoName, branch, path)
+               return check, err
+       }
+       //Add other types like gitlab, bitbucket etc
+       return false, nil
+}
+
+/*
+       Function to delete the branch
+       params : context, go git client, User Name, Repo Name, mergeBranch, gitType
+       return : LatestCommit string, error
+*/
+func DeleteBranch(ctx context.Context, c interface{}, userName, repoName, mergeBranch, gitType string) error {
+       switch gitType {
+       case "github":
+               err := emcogithub.DeleteBranch(ctx, c, userName, repoName, mergeBranch)
+               if err != nil {
+                       return err
+               }
+               return nil
+       }
+       //Add other types like gitlab, bitbucket etc
+       return pkgerrors.New("Git Provider type not supported")
+}
+
+func CreateBranch(ctx context.Context, c interface{}, latestCommitSHA, userName, repoName, branch, gitType string) error {
+       switch gitType {
+       case "github":
+               err := emcogithub.CreateBranch(ctx, c, latestCommitSHA, userName, repoName, branch)
+               if err != nil {
+                       return err
+               }
+               return nil
+       }
+       //Add other types like gitlab, bitbucket etc
+       return pkgerrors.New("Git Provider type not supported")
+}
index 4cc1d62..627cfe2 100644 (file)
@@ -5,27 +5,59 @@ package emcogithub
 
 import (
        "context"
+       "fmt"
+       "math/rand"
+       "strings"
+       "time"
 
        "github.com/fluxcd/go-git-providers/github"
        "github.com/fluxcd/go-git-providers/gitprovider"
+       gogithub "github.com/google/go-github/v41/github"
        log "gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/infra/logutils"
 )
 
 const (
        githubDomain = "github.com"
+       maxrand      = 0x7fffffffffffffff
 )
 
+type GithubClient struct {
+       gitProviderClient gitprovider.Client
+       gogithubClient    *gogithub.Client
+}
+
 /*
-       Function to create gitprovider githubClient
+       Function to create githubClient
        params : github token
-       return : gitprovider github client, error
+       return : github client, error
 */
-func CreateClient(githubToken string) (gitprovider.Client, error) {
-       c, err := github.NewClient(gitprovider.WithOAuth2Token(githubToken), gitprovider.WithDestructiveAPICalls(true))
+func CreateClient(userName, githubToken string) (GithubClient, error) {
+
+       var client GithubClient
+       var err error
+
+       client.gitProviderClient, err = github.NewClient(gitprovider.WithOAuth2Token(githubToken), gitprovider.WithDestructiveAPICalls(true))
        if err != nil {
-               return nil, err
+               return GithubClient{}, err
+       }
+
+       tp := gogithub.BasicAuthTransport{
+               Username: userName,
+               Password: githubToken,
        }
-       return c, nil
+       client.gogithubClient = gogithub.NewClient(tp.Client())
+
+       return client, nil
+
+}
+
+/*
+       Helper function to convert interface to GithubClient
+       params: files interface{}
+       return: GithubClient
+*/
+func convertToClient(c interface{}) GithubClient {
+       return c.(GithubClient)
 }
 
 /*
@@ -33,7 +65,10 @@ func CreateClient(githubToken string) (gitprovider.Client, error) {
        params : context, github client, Repository Name, User Name, description
        return : nil/error
 */
-func CreateRepo(ctx context.Context, c gitprovider.Client, repoName string, userName string, desc string) error {
+func CreateRepo(ctx context.Context, c interface{}, repoName string, userName string, desc string) error {
+
+       // obtain client
+       client := convertToClient(c)
 
        // create repo reference
        userRepoRef := getRepoRef(userName, repoName)
@@ -45,7 +80,7 @@ func CreateRepo(ctx context.Context, c gitprovider.Client, repoName string, user
        }
 
        // Create the repository
-       _, err := c.UserRepositories().Create(ctx, userRepoRef, userRepoInfo, &gitprovider.RepositoryCreateOptions{
+       _, err := client.gitProviderClient.UserRepositories().Create(ctx, userRepoRef, userRepoInfo, &gitprovider.RepositoryCreateOptions{
                AutoInit:        gitprovider.BoolVar(true),
                LicenseTemplate: gitprovider.LicenseTemplateVar(gitprovider.LicenseTemplateApache2),
        })
@@ -60,38 +95,87 @@ func CreateRepo(ctx context.Context, c gitprovider.Client, repoName string, user
 
 /*
        Function to commit multiple files to the github repo
-       params : context, github client, User Name, Repo Name, Branch Name, Commit Message, files ([]gitprovider.CommitFile)
+       params : context, github client, User Name, Repo Name, BranchName, Commit Message, files ([]gitprovider.CommitFile)
        return : nil/error
 */
-func CommitFiles(ctx context.Context, c gitprovider.Client, userName string, repoName string, branch string, commitMessage string, files []gitprovider.CommitFile) error {
+func CommitFiles(ctx context.Context, c interface{}, userName, repoName, branch, commitMessage, appName string, files []gitprovider.CommitFile) error {
 
-       // create repo reference
-       userRepoRef := getRepoRef(userName, repoName)
+       // obtain client
+       client := convertToClient(c)
 
-       userRepo, err := c.UserRepositories().Get(ctx, userRepoRef)
-       if err != nil {
-               return err
-       }
-       //Commit file to this repo
-       _, err = userRepo.Commits().Create(ctx, branch, commitMessage, files)
+       n := 0
+       for {
+               // obtain the sha key for main
+               //obtain sha
+               latestSHA, err := GetLatestCommitSHA(ctx, client, userName, repoName, branch, "")
+               if err != nil {
+                       return err
+               }
+               //create a new branch from main
+               ra := rand.New(rand.NewSource(time.Now().UnixNano()))
+               rn := ra.Int63n(maxrand)
+               id := fmt.Sprintf("%v", rn)
 
-       if err != nil {
-               return err
+               mergeBranch := appName + "-" + id
+               err = CreateBranch(ctx, client, latestSHA, userName, repoName, mergeBranch)
+
+               // defer deletion of the created branch
+               defer DeleteBranch(ctx, client, userName, repoName, mergeBranch)
+
+               if err != nil {
+                       return err
+               }
+
+               // commit the files to this new branch
+               // create repo reference
+               userRepoRef := getRepoRef(userName, repoName)
+
+               userRepo, err := client.gitProviderClient.UserRepositories().Get(ctx, userRepoRef)
+               if err != nil {
+                       return err
+               }
+
+               //Commit file to this repo
+               resp, err := userRepo.Commits().Create(ctx, mergeBranch, commitMessage, files)
+               if err != nil {
+                       log.Error("Error in commiting the files", log.Fields{"err": err, "mergeBranch": mergeBranch, "commitMessage": commitMessage, "files": files})
+                       return err
+               }
+               log.Debug("CommitResponse for userRepo:", log.Fields{"resp": resp})
+
+               // merge the branch to the main
+               err = mergeBranchToMain(ctx, client, userName, repoName, branch, mergeBranch)
+
+               if err != nil {
+                       // check error for merge conflict "409 Merge conflict"
+                       if strings.Contains(err.Error(), "409 Merge conflict") && n < 3 {
+                               // Merge conflict flag
+                               n++
+                               log.Error("Merge Conflict, trying again!", log.Fields{"err": err})
+                               continue
+                       } else {
+                               return err
+                       }
+               }
+               return nil
        }
        return nil
 }
 
 /*
        Function to delete repo
-       params : context, gitprovider client , user name, repo name
+       params : context, github client , user name, repo name
        return : nil/error
 */
-func DeleteRepo(ctx context.Context, c gitprovider.Client, userName string, repoName string) error {
+func DeleteRepo(ctx context.Context, c interface{}, userName string, repoName string) error {
+
+       // obtain client
+       client := convertToClient(c)
 
        // create repo reference
        userRepoRef := getRepoRef(userName, repoName)
        // get the reference of the repo to be deleted
-       userRepo, err := c.UserRepositories().Get(ctx, userRepoRef)
+       userRepo, err := client.gitProviderClient.UserRepositories().Get(ctx, userRepoRef)
 
        if err != nil {
                return err
@@ -160,11 +244,14 @@ func Delete(path string, files []gitprovider.CommitFile) []gitprovider.CommitFil
        params : context, github client, User Name, Repo Name, Branch Name, path)
        return : []*gitprovider.CommitFile, nil/error
 */
-func GetFiles(ctx context.Context, c gitprovider.Client, userName string, repoName string, branch string, path string) ([]*gitprovider.CommitFile, error) {
+func GetFiles(ctx context.Context, c interface{}, userName string, repoName string, branch string, path string) ([]*gitprovider.CommitFile, error) {
+
+       // obtain client
+       client := convertToClient(c)
 
        // create repo reference
        userRepoRef := getRepoRef(userName, repoName)
-       userRepo, err := c.UserRepositories().Get(ctx, userRepoRef)
+       userRepo, err := client.gitProviderClient.UserRepositories().Get(ctx, userRepoRef)
        if err != nil {
                return nil, err
        }
@@ -175,3 +262,133 @@ func GetFiles(ctx context.Context, c gitprovider.Client, userName string, repoNa
        }
        return cf, nil
 }
+
+/*
+       Function to obtaion the SHA of latest commit
+       params : context, github client, User Name, Repo Name, Branch, Path
+       return : LatestCommit string, error
+*/
+func GetLatestCommitSHA(ctx context.Context, c interface{}, userName, repoName, branch, path string) (string, error) {
+
+       // obtain client
+       client := convertToClient(c)
+
+       perPage := 1
+       page := 1
+
+       lcOpts := &gogithub.CommitsListOptions{
+               ListOptions: gogithub.ListOptions{
+                       PerPage: perPage,
+                       Page:    page,
+               },
+               SHA:  branch,
+               Path: path,
+       }
+       //Get the latest SHA
+       resp, _, err := client.gogithubClient.Repositories.ListCommits(ctx, userName, repoName, lcOpts)
+       if err != nil {
+               log.Error("Error in obtaining the list of commits", log.Fields{"err": err})
+               return "", err
+       }
+       if len(resp) == 0 {
+               log.Info("File not created yet.", log.Fields{"Latest Commit Array": resp})
+               return "", nil
+       }
+       latestCommitSHA := *resp[0].SHA
+
+       return latestCommitSHA, nil
+}
+
+/*
+       function to create new branch from main
+       params : context, go git client, latestCommitSHA, User Name, Repo Name, branch
+       return : error
+*/
+func CreateBranch(ctx context.Context, c interface{}, latestCommitSHA, userName, repoName, branch string) error {
+
+       // obtain client
+       client := convertToClient(c)
+
+       // create a new branch
+       ref, _, err := client.gogithubClient.Git.CreateRef(ctx, userName, repoName, &gogithub.Reference{
+               Ref: gogithub.String("refs/heads/" + branch),
+               Object: &gogithub.GitObject{
+                       SHA: gogithub.String(latestCommitSHA),
+               },
+       })
+       if err != nil {
+               log.Error("Git.CreateRef returned error:", log.Fields{"err": err})
+               return err
+
+       }
+       log.Info("Branch Created: ", log.Fields{"ref": ref})
+       return nil
+}
+
+/*
+       function to merge the branch to main
+       params : context, go git client, User Name, Repo Name,branch, mergeBranch
+       return : LatestCommit string, error
+*/
+func mergeBranchToMain(ctx context.Context, c interface{}, userName, repoName, branch, mergeBranch string) error {
+       // obtain client
+       client := convertToClient(c)
+
+       // merge the branch
+       input := &gogithub.RepositoryMergeRequest{
+               Base:          gogithub.String(branch),
+               Head:          gogithub.String(mergeBranch),
+               CommitMessage: gogithub.String("merging " + mergeBranch + " to " + branch),
+       }
+
+       commit, _, err := client.gogithubClient.Repositories.Merge(ctx, userName, repoName, input)
+       if err != nil {
+               log.Error("Error occured while Merging", log.Fields{"err": err})
+               return err
+       }
+
+       log.Info("Branch Merged, Merge response:", log.Fields{"commit": commit})
+
+       return nil
+
+}
+
+/*
+       Function to delete the branch
+       params : context, go git client, User Name, Repo Name, mergeBranch
+       return : LatestCommit string, error
+*/
+func DeleteBranch(ctx context.Context, c interface{}, userName, repoName, mergeBranch string) error {
+
+       // obtain client
+       client := convertToClient(c)
+
+       // Delete the Git branch
+       _, err := client.gogithubClient.Git.DeleteRef(ctx, userName, repoName, "refs/heads/"+mergeBranch)
+       if err != nil {
+               log.Error("Git.DeleteRef returned error: ", log.Fields{"err": err})
+               return err
+       }
+       log.Info("Branch Deleted", log.Fields{"mergeBranch": mergeBranch})
+       return nil
+}
+
+/*
+       Function to check if file exists
+       params : context, go git client, User Name, Repo Name, Branch, Path
+       return : LatestCommit string, error
+*/
+func CheckIfFileExists(ctx context.Context, c interface{}, userName, repoName, branch, path string) (bool, error) {
+
+       latestSHA, err := GetLatestCommitSHA(ctx, c, userName, repoName, branch, path)
+       if err != nil {
+               return false, err
+       }
+
+       if latestSHA == "" {
+               return false, nil
+       }
+
+       return true, nil
+
+}
index 6d0b79f..d35d692 100644 (file)
@@ -6,10 +6,11 @@ package gitsupport
 import (
        "context"
        "fmt"
-       log "gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/infra/logutils"
        "strings"
        "time"
 
+       log "gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/infra/logutils"
+
        "github.com/fluxcd/go-git-providers/gitprovider"
        pkgerrors "github.com/pkg/errors"
        v1alpha1 "gitlab.com/project-emco/core/emco-base/src/monitor/pkg/apis/k8splugin/v1alpha1"
@@ -31,7 +32,7 @@ type GitProvider struct {
        Branch    string
        RepoName  string
        Url       string
-       Client    gitprovider.Client
+       Client    interface{}
 }
 
 /*
@@ -106,12 +107,12 @@ func NewGitProvider(cid, app, cluster, level, namespace string) (*GitProvider, e
                RepoName:  repoName,
                Url:       "https://" + gitType + ".com/" + userName + "/" + repoName,
        }
-       client, err := emcogit.CreateClient(gitToken, gitType)
+       client, err := emcogit.CreateClient(userName, gitToken, gitType)
        if err != nil {
                log.Error("Error getting git client", log.Fields{"err": err})
                return nil, err
        }
-       p.Client = client.(gitprovider.Client)
+       p.Client = client
        return &p, nil
 }
 
@@ -193,7 +194,8 @@ func (p *GitProvider) Commit(ctx context.Context, ref interface{}) error {
                log.Error("Commit: No ref found", log.Fields{})
                return nil
        }
-       err := emcogit.CommitFiles(ctx, p.Client, p.UserName, p.RepoName, p.Branch, "Commit for "+p.GetPath("context"), ref.([]gitprovider.CommitFile), p.GitType)
+       appName := p.Cid + "-" + p.App
+       err := emcogit.CommitFiles(ctx, p.Client, p.UserName, p.RepoName, p.Branch, "Commit for "+p.GetPath("context"), appName, ref.([]gitprovider.CommitFile), p.GitType)
 
        return err
 }
@@ -214,15 +216,31 @@ var waitTime int = 60
 // go routine starts and reads after waitTime
 // Thread exists when the AppContext is deleted
 func (p *GitProvider) StartClusterWatcher() error {
+       // obtain the sha key for main
+       //obtain shaake
+       ctx := context.Background()
+
+       latestSHA, err := emcogit.GetLatestCommitSHA(ctx, p.Client, p.UserName, p.RepoName, p.Branch, "", p.GitType)
+       if err != nil {
+               return err
+       }
+       // create branch for status
+       branch := p.Cluster + "-" + p.Cid + "-" + p.App
+       err = emcogit.CreateBranch(ctx, p.Client, latestSHA, p.UserName, p.RepoName, branch, p.GitType)
+       if err != nil {
+               return err
+       }
        // Start thread to sync monitor CR
        go func() error {
                ctx := context.Background()
+               var lastCommitSHA string
                for {
                        select {
                        case <-time.After(time.Duration(waitTime) * time.Second):
                                if ctx.Err() != nil {
                                        return ctx.Err()
                                }
+
                                // Check if AppContext doesn't exist then exit the thread
                                if _, err := utils.NewAppContextReference(p.Cid); err != nil {
                                        // Delete the Status CR updated by Monitor running on the cluster
@@ -231,23 +249,37 @@ func (p *GitProvider) StartClusterWatcher() error {
                                        return nil
                                }
                                path := p.GetPath("status")
-                               // Read file
-                               c, err := emcogit.GetFiles(ctx, p.Client, p.UserName, p.RepoName, p.Branch, path, p.GitType)
+                               // branch to track
+                               branch := p.Cluster + "-" + p.Cid + "-" + p.App
+
+                               latestCommitSHA, err := emcogit.GetLatestCommitSHA(ctx, p.Client, p.UserName, p.RepoName, branch, path, p.GitType)
                                if err != nil {
-                                       log.Error("Status file not available", log.Fields{"error": err, "cluster": p.Cluster, "resource": path})
-                                       continue
+                                       log.Error("Error in obtaining latest commit SHA", log.Fields{"err": err})
                                }
-                               cp := c.([]*gitprovider.CommitFile)
-                               if len(cp) > 0 {
-                                       // Only one file expected in the location
-                                       content := &v1alpha1.ResourceBundleState{}
-                                       _, err := utils.DecodeYAMLData(*cp[0].Content, content)
+
+                               if lastCommitSHA != latestCommitSHA {
+                                       // new commit get files
+                                       // Read file
+                                       log.Debug("New Status File, pulling files", log.Fields{"LatestSHA": latestCommitSHA, "LastSHA": lastCommitSHA})
+                                       c, err := emcogit.GetFiles(ctx, p.Client, p.UserName, p.RepoName, branch, path, p.GitType)
                                        if err != nil {
-                                               log.Error("", log.Fields{"error": err, "cluster": p.Cluster, "resource": path})
-                                               return err
+                                               log.Debug("Status file not available", log.Fields{"error": err, "cluster": p.Cluster, "resource": path})
+                                               continue
+                                       }
+                                       cp := c.([]*gitprovider.CommitFile)
+                                       if len(cp) > 0 {
+                                               // Only one file expected in the location
+                                               content := &v1alpha1.ResourceBundleState{}
+                                               _, err := utils.DecodeYAMLData(*cp[0].Content, content)
+                                               if err != nil {
+                                                       log.Error("", log.Fields{"error": err, "cluster": p.Cluster, "resource": path})
+                                                       return err
+                                               }
+                                               status.HandleResourcesStatus(p.Cid, p.App, p.Cluster, content)
                                        }
-                                       status.HandleResourcesStatus(p.Cid, p.App, p.Cluster, content)
+                                       lastCommitSHA = latestCommitSHA
                                }
+
                        // Check if the context is canceled
                        case <-ctx.Done():
                                return ctx.Err()
@@ -260,10 +292,16 @@ func (p *GitProvider) StartClusterWatcher() error {
 // DeleteClusterStatusCR deletes the status CR provided by the monitor on the cluster
 func (p *GitProvider) DeleteClusterStatusCR() error {
        // Delete the status CR
-       path := p.GetPath("status") + p.Cid + "-" + p.App
-       rf := []gitprovider.CommitFile{}
-       ref := emcogit.Delete(path, rf, p.GitType)
-       err := emcogit.CommitFiles(context.Background(), p.Client, p.UserName, p.RepoName, p.Branch,
-               "Commit for Delete Status CR "+p.GetPath("status"), ref, p.GitType)
-       return err
+       // branch to track
+       branch := p.Cluster + "-" + p.Cid + "-" + p.App
+
+       ctx := context.Background()
+
+       // Delete the branch
+       err := emcogit.DeleteBranch(ctx, p.Client, p.UserName, p.RepoName, branch, p.GitType)
+       if err != nil {
+               log.Error("Error in deleting branch", log.Fields{"err": err})
+               return err
+       }
+       return nil
 }
index 6c05706..20477e5 100644 (file)
@@ -12,9 +12,10 @@ import (
        "k8s.io/apimachinery/pkg/runtime"
        "k8s.io/client-go/kubernetes/scheme"
        "strings"
-       //emcoutils "gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/infra/utils"
 )
 
+var KubeConfigNotFoundErr = pkgerrors.New("Get kubeconfig failed")
+
 // DecodeYAMLData reads a string to extract the Kubernetes object definition
 func DecodeYAMLData(data string, into runtime.Object) (runtime.Object, error) {
        decode := scheme.Codecs.UniversalDeserializer().Decode
@@ -43,7 +44,7 @@ var GetKubeConfig = func(clustername string, level string, namespace string) ([]
        log.Info("Querying CloudConfig", log.Fields{"strs": strs, "level": level, "namespace": namespace})
        cconfig, err := ccc.GetCloudConfig(strs[0], strs[1], level, namespace)
        if err != nil {
-               return nil, pkgerrors.New("Get kubeconfig failed")
+               return nil, KubeConfigNotFoundErr
        }
        log.Info("Successfully looked up CloudConfig", log.Fields{".Provider": cconfig.Provider, ".Cluster": cconfig.Cluster, ".Level": cconfig.Level, ".Namespace": cconfig.Namespace})
 
index 4edc8ee..be5aac7 100644 (file)
@@ -160,7 +160,7 @@ func (p *AzureArcProvider) createGitConfiguration(accessToken string, repository
 */
 func (p *AzureArcProvider) addDummyFile(ctx context.Context, gitBranch string) error {
 
-       c, err := emcogit.CreateClient(p.gitProvider.GitToken, p.gitProvider.GitType)
+       c, err := emcogit.CreateClient(p.gitProvider.UserName, p.gitProvider.GitToken, p.gitProvider.GitType)
 
        if err != nil {
                log.Error("Error Creating emcogit client", log.Fields{"err": err})
@@ -171,7 +171,8 @@ func (p *AzureArcProvider) addDummyFile(ctx context.Context, gitBranch string) e
        path := "clusters/" + p.gitProvider.Cluster + "/context/" + p.gitProvider.Cid
        files = emcogit.Add(path+"/DoNotDelete", "Dummy file", files, p.gitProvider.GitType).([]gitprovider.CommitFile)
 
-       err = emcogit.CommitFiles(ctx, c, p.gitProvider.UserName, p.gitProvider.RepoName, gitBranch, "New Commit", files, p.gitProvider.GitType)
+       appName := p.gitProvider.Cid + p.gitProvider.App
+       err = emcogit.CommitFiles(ctx, c, p.gitProvider.UserName, p.gitProvider.RepoName, gitBranch, "New Commit", appName, files, p.gitProvider.GitType)
        if err != nil {
                log.Error("Couldn't commit the file", log.Fields{"err": err})
                return err
@@ -187,7 +188,7 @@ func (p *AzureArcProvider) addDummyFile(ctx context.Context, gitBranch string) e
 */
 func (p *AzureArcProvider) deleteDummyFile(ctx context.Context, gitBranch string) error {
 
-       c, err := emcogit.CreateClient(p.gitProvider.GitToken, p.gitProvider.GitType)
+       c, err := emcogit.CreateClient(p.gitProvider.UserName, p.gitProvider.GitToken, p.gitProvider.GitType)
 
        if err != nil {
                log.Error("Error Creating emcogit client", log.Fields{"err": err})
@@ -198,7 +199,8 @@ func (p *AzureArcProvider) deleteDummyFile(ctx context.Context, gitBranch string
        path := "clusters/" + p.gitProvider.Cluster + "/context/" + p.gitProvider.Cid
        files = emcogit.Delete(path+"/DoNotDelete", files, p.gitProvider.GitType).([]gitprovider.CommitFile)
 
-       err = emcogit.CommitFiles(ctx, c, p.gitProvider.UserName, p.gitProvider.RepoName, gitBranch, "New Commit", files, p.gitProvider.GitType)
+       appName := p.gitProvider.Cid + p.gitProvider.App
+       err = emcogit.CommitFiles(ctx, c, p.gitProvider.UserName, p.gitProvider.RepoName, gitBranch, "New Commit", appName, files, p.gitProvider.GitType)
        if err != nil {
                log.Error("Couldn't commit the file", log.Fields{"err": err})
                return err
index eae720d..ae15c33 100644 (file)
@@ -72,7 +72,8 @@ func (p *Fluxv2Provider) ApplyConfig(ctx context.Context, config interface{}) er
        path = "clusters/" + p.gitProvider.Cluster + "/" + kc.Name + ".yaml"
        gp = emcogit.Add(path, string(y), gp, p.gitProvider.GitType)
        // Commit
-       err = emcogit.CommitFiles(ctx, p.gitProvider.Client, p.gitProvider.UserName, p.gitProvider.RepoName, p.gitProvider.Branch, "Commit for "+p.gitProvider.GetPath("context"), gp, p.gitProvider.GitType)
+       appName := p.gitProvider.Cid + "-" + p.gitProvider.App + "-config"
+       err = emcogit.CommitFiles(ctx, p.gitProvider.Client, p.gitProvider.UserName, p.gitProvider.RepoName, p.gitProvider.Branch, "Commit for "+p.gitProvider.GetPath("context"), appName, gp, p.gitProvider.GitType)
        if err != nil {
                log.Error("ApplyConfig:: Commit files err", log.Fields{"err": err, "gp": gp})
        }
@@ -85,7 +86,8 @@ func (p *Fluxv2Provider) DeleteConfig(ctx context.Context, config interface{}) e
        gp := emcogit.Delete(path, []gitprovider.CommitFile{}, p.gitProvider.GitType)
        path = "clusters/" + p.gitProvider.Cluster + "/" + "kcust" + p.gitProvider.Cid + ".yaml"
        gp = emcogit.Delete(path, gp, p.gitProvider.GitType)
-       err := emcogit.CommitFiles(ctx, p.gitProvider.Client, p.gitProvider.UserName, p.gitProvider.RepoName, p.gitProvider.Branch, "Commit for "+p.gitProvider.GetPath("context"), gp, p.gitProvider.GitType)
+       appName := p.gitProvider.Cid + "-" + p.gitProvider.App + "-config"
+       err := emcogit.CommitFiles(ctx, p.gitProvider.Client, p.gitProvider.UserName, p.gitProvider.RepoName, p.gitProvider.Branch, "Commit for "+p.gitProvider.GetPath("context"), appName, gp, p.gitProvider.GitType)
        if err != nil {
                log.Error("ApplyConfig:: Commit files err", log.Fields{"err": err, "gp": gp})
        }
index 529a853..364cc11 100644 (file)
@@ -67,7 +67,7 @@ func (h ControllerHandler) createHandler(w http.ResponseWriter, r *http.Request)
 
        // Check whether the resource is available
        if h.client.IsOperationSupported("GET") {
-               vars[h.client.GetResourceName()] = v.GetMetadata().Name
+               vars[h.client.GetResourceName()] = h.client.GetResourceStoredName(v)
                ret, err = h.client.GetObject(vars)
                if err == nil {
                        http.Error(w, "Resource "+v.GetMetadata().Name+" is available already", http.StatusConflict)
index a330a56..0838512 100644 (file)
@@ -85,4 +85,4 @@ replace (
        k8s.io/kubernetes => k8s.io/kubernetes v1.14.1
 )
 
-go 1.17
+go 1.18
index c981de4..b8d49f9 100644 (file)
@@ -17,7 +17,6 @@
 package manager
 
 import (
-       "encoding/base64"
        "encoding/json"
        "github.com/akraino-edge-stack/icn-sdwan/central-controller/src/scc/pkg/module"
        pkgerrors "github.com/pkg/errors"
@@ -26,6 +25,14 @@ import (
        "log"
 )
 
+const (
+       OverlayKey   = "Overlay"
+       DeviceKey    = "Device"
+       HubKey       = "Hub"
+       namespaceKey = "Namespace"
+       InternalKey  = "internal"
+)
+
 type CertificateObjectKey struct {
        OverlayName     string `json:"overlay-name"`
        CertificateName string `json:"certificate-name"`
@@ -51,6 +58,12 @@ func (c *CertificateObjectManager) GetResourceName() string {
        return CertResource
 }
 
+func (c *CertificateObjectManager) GetResourceStoredName(obj module.ControllerObject) string {
+       v := obj.(*module.CertificateObject)
+       cert_manager := GetManagerset().Cert
+       return cert_manager.GetCertName(obj.GetMetadata().Name, v.Specification.ClusterType)
+}
+
 func (c *CertificateObjectManager) IsOperationSupported(oper string) bool {
        if oper == "PUT" {
                // Not allowed for gets
@@ -65,17 +78,21 @@ func (c *CertificateObjectManager) CreateEmptyObject() module.ControllerObject {
 
 func (c *CertificateObjectManager) GetStoreKey(m map[string]string, t module.ControllerObject, isCollection bool) (db.Key, error) {
        overlay_name := m[OverlayResource]
+
        key := CertificateObjectKey{
                OverlayName:     overlay_name,
                CertificateName: "",
        }
-
        if isCollection == true {
                return key, nil
        }
 
        to := t.(*module.CertificateObject)
        meta_name := to.Metadata.Name
+       if meta_name != "" {
+               cert_type := to.Specification.ClusterType
+               meta_name = c.GetCertName(meta_name, cert_type)
+       }
        res_name := m[CertResource]
 
        if res_name != "" {
@@ -100,47 +117,118 @@ func (c *CertificateObjectManager) ParseObject(r io.Reader) (module.ControllerOb
        err := json.NewDecoder(r).Decode(&v)
 
        v.Data = module.CertificateObjectData{
-               RootCA: "",
-               Ca:     "",
-               Key:    "",
+               CA:   "",
+               Cert: "",
+               Key:  "",
        }
 
        return &v, err
 }
 
-func (c *CertificateObjectManager) GetDeviceCertName(name string) string {
-       device := module.DeviceObject{
-               Metadata: module.ObjectMetaData{name, "", "", ""}}
-       return device.GetCertName()
-}
-
-func GetRootCA(overlay_name string) string {
-       overlay := GetManagerset().Overlay
-       cu, _ := GetCertUtil()
+func (c *CertificateObjectManager) GetCertName(name string, obj_type string) string {
+       switch obj_type {
+       case OverlayKey:
+               overlay_manager := GetManagerset().Overlay
+               return overlay_manager.CertName(name)
+       case HubKey:
+               hub := module.HubObject{
+                       Metadata: module.ObjectMetaData{name, "", "", ""}}
+               return hub.GetCertName()
+       case DeviceKey:
+               device := module.DeviceObject{
+                       Metadata: module.ObjectMetaData{name, "", "", ""}}
+               return device.GetCertName()
+       }
 
-       root_ca := cu.GetSelfSignedCA()
-       interim_ca, _, _ := overlay.GetCertificate(overlay_name)
+       log.Println("unsupported obj_type specified in GetCertName")
+       return ""
+}
 
-       root_ca += interim_ca
+func GetRootCA() (string, error) {
+       cu, err := GetCertUtil()
+       if err != nil {
+               log.Println(err)
+               return "", err
+       }
 
-       return root_ca
+       return cu.GetSelfSignedCA(), nil
 }
 
-func GetRootBaseCA() string {
+func GetCertChain(m map[string]string) (string, error) {
+       certChain, err := GetRootCA()
+       if err != nil {
+               return "", err
+       }
+
        cu, _ := GetCertUtil()
+       if _, ok := m[namespaceKey]; !ok {
+               log.Println("No namespace info while searching certs. Skip returning root ca.")
+               return certChain, nil
+       }
 
-       root_ca := cu.GetSelfSignedCA()
+       for _, key := range []string{OverlayKey, DeviceKey, HubKey} {
+               if val, ok := m[key]; ok {
+                       cert, _, err := cu.GetKeypair(val, m[namespaceKey])
+                       if err != nil {
+                               log.Println(err)
+                               return "", err
+                       }
+                       certChain = certChain + "___" + cert
+               }
+       }
 
-       return root_ca
+       return certChain, nil
 }
 
 func (c *CertificateObjectManager) CreateObject(m map[string]string, t module.ControllerObject) (module.ControllerObject, error) {
        // Create Certificate
+       var cert_name, issuer_name string
+
        overlay := GetManagerset().Overlay
        overlay_name := m[OverlayResource]
-       cert_name := c.GetDeviceCertName(t.GetMetadata().Name)
 
-       ca, key, err := overlay.CreateCertificate(overlay_name, cert_name)
+       to := t.(*module.CertificateObject)
+       isCAFlag := to.Specification.IsCA
+       cert_type := to.Specification.ClusterType
+       cert_name = c.GetCertName(to.Metadata.Name, cert_type)
+       // Construct certificate name based on cluster type
+       switch cert_type {
+       case HubKey, DeviceKey:
+               issuer_name = overlay.IssuerName(overlay_name)
+       case OverlayKey:
+               issuer_name = RootCAIssuerName
+       }
+
+       cu, err := GetCertUtil()
+       if err != nil {
+               log.Println(err)
+               return c.CreateEmptyObject(), err
+       }
+
+       _, err = cu.CreateCertificate(cert_name, NameSpaceName, issuer_name, isCAFlag)
+       if err != nil {
+               log.Println("Failed to create overlay[" + overlay_name + "] certificate: " + err.Error())
+               return c.CreateEmptyObject(), err
+       }
+
+       cert, key, err := cu.GetKeypair(cert_name, NameSpaceName)
+       if err != nil {
+               log.Println(err)
+               return c.CreateEmptyObject(), err
+       }
+
+       certMap := make(map[string]string)
+       certMap[namespaceKey] = NameSpaceName
+
+       switch cert_type {
+       case HubKey, DeviceKey:
+               certMap[OverlayKey] = c.GetCertName(overlay_name, OverlayKey)
+               if to.Specification.IsCA {
+                       certMap[cert_type] = cert_name
+               }
+       }
+
+       ca, err := GetCertChain(certMap)
        if err != nil {
                log.Println(err)
                return c.CreateEmptyObject(), err
@@ -152,9 +240,9 @@ func (c *CertificateObjectManager) CreateObject(m map[string]string, t module.Co
        // Fill Certificate data
        if err == nil {
                to := t.(*module.CertificateObject)
-               to.Data.RootCA = base64.StdEncoding.EncodeToString([]byte(GetRootCA(overlay_name)))
-               to.Data.Ca = base64.StdEncoding.EncodeToString([]byte(ca))
-               to.Data.Key = base64.StdEncoding.EncodeToString([]byte(key))
+               to.Data.Cert = cert
+               to.Data.Key = key
+               to.Data.CA = ca
 
                return t, nil
        } else {
@@ -168,20 +256,43 @@ func (c *CertificateObjectManager) GetObject(m map[string]string) (module.Contro
        t, err := GetDBUtils().GetObject(c, m)
 
        if err == nil {
-               overlay := GetManagerset().Overlay
                overlay_name := m[OverlayResource]
-               cert_name := c.GetDeviceCertName(t.GetMetadata().Name)
 
-               ca, key, err := overlay.CreateCertificate(overlay_name, cert_name)
+               to := t.(*module.CertificateObject)
+               cert_type := to.Specification.ClusterType
+               cert_name := c.GetCertName(to.Metadata.Name, cert_type)
+
+               cu, err := GetCertUtil()
                if err != nil {
                        log.Println(err)
                        return c.CreateEmptyObject(), err
                }
 
-               to := t.(*module.CertificateObject)
-               to.Data.RootCA = base64.StdEncoding.EncodeToString([]byte(GetRootCA(overlay_name)))
-               to.Data.Ca = base64.StdEncoding.EncodeToString([]byte(ca))
-               to.Data.Key = base64.StdEncoding.EncodeToString([]byte(key))
+               cert, key, err := cu.GetKeypair(cert_name, NameSpaceName)
+               if err != nil {
+                       log.Println(err)
+                       return c.CreateEmptyObject(), err
+               }
+
+               certMap := make(map[string]string)
+               certMap[namespaceKey] = NameSpaceName
+               switch cert_type {
+               case HubKey, DeviceKey:
+                       certMap[OverlayKey] = c.GetCertName(overlay_name, OverlayKey)
+                       if to.Specification.IsCA {
+                               certMap[cert_type] = cert_name
+                       }
+               }
+
+               ca, err := GetCertChain(certMap)
+               if err != nil {
+                       log.Println(err)
+                       return c.CreateEmptyObject(), err
+               }
+
+               to.Data.Cert = cert
+               to.Data.Key = key
+               to.Data.CA = ca
 
                return t, nil
        } else {
@@ -207,12 +318,21 @@ func (c *CertificateObjectManager) DeleteObject(m map[string]string) error {
                return pkgerrors.Wrap(err, "Certificate is not available")
        }
 
+       to := t.(*module.CertificateObject)
+       cert_type := to.Specification.ClusterType
+       cert_name := c.GetCertName(to.Metadata.Name, cert_type)
+
        // Delete certificate
-       overlay := GetManagerset().Overlay
-       cert_name := c.GetDeviceCertName(t.GetMetadata().Name)
+       cu, err := GetCertUtil()
+       if err != nil {
+               log.Println(err)
+       }
 
-       log.Println("Delete Certificate: " + cert_name)
-       overlay.DeleteCertificate(cert_name)
+       log.Println("Delete Certificate: " + m[CertResource])
+       err = cu.DeleteCertificate(m[CertResource], NameSpaceName)
+       if err != nil {
+               log.Println("Failed to delete " + cert_name + " certificate: " + err.Error())
+       }
 
        // DB Operation
        err = GetDBUtils().DeleteObject(c, m)
@@ -220,25 +340,50 @@ func (c *CertificateObjectManager) DeleteObject(m map[string]string) error {
        return err
 }
 
-// Create or Get certificate for a device
-func (c *CertificateObjectManager) GetOrCreateDC(overlay_name string, dev_name string) (string, string, string, error) {
+func (c *CertificateObjectManager) GetOrCreateDC(overlay_name string, dev_name string, isCA bool) (string, string, string, error) {
+       return c.GetOrCreateCertificateByType(overlay_name, dev_name, DeviceKey, isCA)
+}
+
+func (c *CertificateObjectManager) GetOrCreateCertificateByType(overlay_name string, dev_name string, dev_type string, isCA bool) (string, string, string, error) {
+       var certObj module.CertificateObject
+
        m := make(map[string]string)
        m[OverlayResource] = overlay_name
-       t := &module.CertificateObject{Metadata: module.ObjectMetaData{dev_name, "", "", ""}}
+       switch dev_type {
+       case OverlayKey:
+               m[CertResource] = c.GetCertName(overlay_name, dev_type)
+               certObj = module.CertificateObject{Metadata: module.ObjectMetaData{overlay_name, "", InternalKey, ""}, Specification: module.CertificateObjectSpec{isCA, OverlayKey}}
+       case DeviceKey, HubKey:
+               m[CertResource] = c.GetCertName(dev_name, dev_type)
+               certObj = module.CertificateObject{Metadata: module.ObjectMetaData{dev_name, "", InternalKey, ""}, Specification: module.CertificateObjectSpec{isCA, dev_type}}
+       }
 
-       _, err := c.CreateObject(m, t)
+       t, err := c.GetObject(m)
        if err != nil {
-               return "", "", "", err
+               _, err := c.CreateObject(m, &certObj)
+               if err != nil {
+                       return "", "", "", err
+               }
+               return certObj.Data.CA, certObj.Data.Cert, certObj.Data.Key, nil
        }
 
-       return t.Data.RootCA, t.Data.Ca, t.Data.Key, nil
+       to := t.(*module.CertificateObject)
+
+       return to.Data.CA, to.Data.Cert, to.Data.Key, nil
 }
 
-// Delete certificate for a device
-func (c *CertificateObjectManager) DeleteDC(overlay_name string, dev_name string) error {
+func (c *CertificateObjectManager) DeleteCertificateByType(overlay_name string, dev_name string, dev_type string) error {
+       var cert_name string
        m := make(map[string]string)
+
        m[OverlayResource] = overlay_name
-       m[CertResource] = dev_name
+       switch dev_type {
+       case HubKey, DeviceKey:
+               cert_name = c.GetCertName(dev_name, dev_type)
+       case OverlayKey:
+               cert_name = c.GetCertName(overlay_name, dev_type)
+       }
+       m[CertResource] = cert_name
 
        return c.DeleteObject(m)
 }
index 923b4c1..0392d41 100644 (file)
@@ -18,6 +18,7 @@ package manager
 
 import (
        "context"
+       "encoding/base64"
        kclient "github.com/akraino-edge-stack/icn-sdwan/central-controller/src/scc/pkg/client"
        certv1 "github.com/jetstack/cert-manager/pkg/apis/certmanager/v1"
        cmmeta "github.com/jetstack/cert-manager/pkg/apis/meta/v1"
@@ -28,6 +29,7 @@ import (
        "k8s.io/apimachinery/pkg/util/wait"
        corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
        "log"
+       "strings"
        "time"
 )
 
@@ -124,7 +126,11 @@ func (c *CertUtil) GetCertificate(name string, namespace string) (*certv1.Certif
 }
 
 func (c *CertUtil) DeleteCertificate(name string, namespace string) error {
-       return c.client.Certificates(namespace).Delete(context.TODO(), name, metav1.DeleteOptions{})
+       if err := c.client.Certificates(namespace).Delete(context.TODO(), name, metav1.DeleteOptions{}); err != nil {
+               return err
+       }
+       c.k8sclient.Secrets(namespace).Delete(context.TODO(), c.GetCertSecretName(name), metav1.DeleteOptions{})
+       return nil
 }
 
 func (c *CertUtil) CreateCertificate(name string, namespace string, issuer string, isCA bool) (*certv1.Certificate, error) {
@@ -203,7 +209,9 @@ func (c *CertUtil) GetKeypair(certname string, namespace string) (string, string
                return "", "", err
        }
 
-       return string(secret.Data["tls.crt"]), string(secret.Data["tls.key"]), nil
+       key := base64.StdEncoding.EncodeToString(secret.Data["tls.key"])
+       cert := base64.StdEncoding.EncodeToString([]byte(strings.SplitAfter(string(secret.Data["tls.crt"]), "-----END CERTIFICATE-----")[0]))
+       return cert, key, nil
 }
 
 func (c *CertUtil) GetSelfSignedCA() string {
index 121a4ae..f7fcc6d 100644 (file)
@@ -32,6 +32,7 @@ type ControllerObjectManager interface {
        AddOwnResManager(mgr ControllerObjectManager)
 
        GetResourceName() string
+       GetResourceStoredName(obj module.ControllerObject) string
        IsOperationSupported(oper string) bool
        GetStoreKey(m map[string]string, t module.ControllerObject, isCollection bool) (db.Key, error)
        CreateEmptyObject() module.ControllerObject
@@ -58,6 +59,10 @@ func (c *BaseObjectManager) GetStoreMeta() string {
        return c.tagMeta
 }
 
+func (c *BaseObjectManager) GetResourceStoredName(obj module.ControllerObject) string {
+       return obj.GetMetadata().Name
+}
+
 func (c *BaseObjectManager) GetDepResManagers() []ControllerObjectManager {
        return c.depResManagers
 }
index 5af45bd..fbd04f7 100644 (file)
@@ -65,7 +65,11 @@ func (d *DBUtils) CheckOwn(c ControllerObjectManager, m map[string]string) error
        for _, mgr := range depsOwnManagers {
                objs, err := d.GetObjects(mgr, m)
                if err == nil && len(objs) > 0 {
-                       return pkgerrors.New("Sub-resource found : " + mgr.GetStoreMeta())
+                       for _, obj := range objs {
+                               if obj.GetMetadata().UserData1 != InternalKey {
+                                       return pkgerrors.New("Sub-resource found : " + mgr.GetStoreMeta())
+                               }
+                       }
                }
        }
        return nil
@@ -85,7 +89,6 @@ func (d *DBUtils) CreateObject(c ControllerObjectManager, m map[string]string,
 
 func (d *DBUtils) GetObject(c ControllerObjectManager,
        m map[string]string) (module.ControllerObject, error) {
-
        key, err := c.GetStoreKey(m, c.CreateEmptyObject(), false)
        if err != nil {
                return c.CreateEmptyObject(), err
@@ -163,15 +166,15 @@ func (d *DBUtils) DeleteObject(c ControllerObjectManager, m map[string]string) e
        return nil
 }
 
-func (d *DBUtils) RegisterDevice(cluster_name string, kubeconfig string) error {
+func (d *DBUtils) RegisterDevice(overlay, cluster_name string, kubeconfig string) error {
        ccc := rsync.NewCloudConfigClient()
 
-       config, _ := ccc.GetCloudConfig(PROVIDERNAME, cluster_name, "0", "default")
+       config, _ := ccc.GetCloudConfig(getProviderName(overlay), cluster_name, "0", "default")
        if config.Config != "" {
-               ccc.DeleteCloudConfig(PROVIDERNAME, cluster_name, "0", "default")
+               ccc.DeleteCloudConfig(getProviderName(overlay), cluster_name, "0", "default")
        }
 
-       _, err := ccc.CreateCloudConfig(PROVIDERNAME, cluster_name, "0", "default", kubeconfig)
+       _, err := ccc.CreateCloudConfig(getProviderName(overlay), cluster_name, "0", "default", kubeconfig)
        if err != nil {
                return pkgerrors.Wrap(err, "Error creating cloud config")
        }
@@ -179,10 +182,10 @@ func (d *DBUtils) RegisterDevice(cluster_name string, kubeconfig string) error {
        return nil
 }
 
-func (d *DBUtils) UnregisterDevice(cluster_name string) error {
+func (d *DBUtils) UnregisterDevice(overlay, cluster_name string) error {
        ccc := rsync.NewCloudConfigClient()
 
-       err := ccc.DeleteCloudConfig(PROVIDERNAME, cluster_name, "0", "default")
+       err := ccc.DeleteCloudConfig(getProviderName(overlay), cluster_name, "0", "default")
        if err != nil {
                return pkgerrors.Wrap(err, "Error deleting cloud config")
        }
@@ -190,29 +193,33 @@ func (d *DBUtils) UnregisterDevice(cluster_name string) error {
        return nil
 }
 
-func (d *DBUtils) RegisterGitOpsDevice(cluster_name string, gs mtypes.GitOpsSpec) error {
+func (d *DBUtils) RegisterGitOpsDevice(overlay, cluster_name string, gs mtypes.GitOpsSpec) error {
        ccc := rsync.NewCloudConfigClient()
 
-       _, err := ccc.GetGitOpsConfig(PROVIDERNAME, cluster_name, "0", "default")
+       _, err := ccc.GetGitOpsConfig(getProviderName(overlay), cluster_name, "0", "default")
        if err == nil {
-               ccc.DeleteGitOpsConfig(PROVIDERNAME, cluster_name, "0", "default")
+               ccc.DeleteGitOpsConfig(getProviderName(overlay), cluster_name, "0", "default")
        }
 
-       _, err = ccc.CreateGitOpsConfig(PROVIDERNAME, cluster_name, gs, "0", "default")
+       _, err = ccc.CreateGitOpsConfig(getProviderName(overlay), cluster_name, gs, "0", "default")
        if err != nil {
-               return pkgerrors.Wrap(err, "Error creating cloud config")
+               return pkgerrors.Wrap(err, "Error creating gitops config")
        }
 
        return nil
 }
 
-func (d *DBUtils) UnregisterGitOpsDevice(cluster_name string) error {
+func (d *DBUtils) UnregisterGitOpsDevice(overlay, cluster_name string) error {
        ccc := rsync.NewCloudConfigClient()
 
-       err := ccc.DeleteGitOpsConfig(PROVIDERNAME, cluster_name, "0", "default")
+       err := ccc.DeleteGitOpsConfig(getProviderName(overlay), cluster_name, "0", "default")
        if err != nil {
-               return pkgerrors.Wrap(err, "Error deleting cloud config")
+               return pkgerrors.Wrap(err, "Error deleting gitops config")
        }
 
        return nil
 }
+
+func getProviderName(overlay string) string {
+       return PROVIDERNAME + "_" + overlay
+}
index 4b188af..d1b919b 100644 (file)
@@ -23,7 +23,6 @@ import (
        "encoding/base64"
        "encoding/json"
        "github.com/matryer/runner"
-       "strings"
        "time"
 
        "github.com/akraino-edge-stack/icn-sdwan/central-controller/src/scc/pkg/module"
@@ -31,10 +30,12 @@ import (
        //"github.com/akraino-edge-stack/icn-sdwan/central-controller/src/scc/pkg/client"
        "github.com/akraino-edge-stack/icn-sdwan/central-controller/src/scc/pkg/resource"
        pkgerrors "github.com/pkg/errors"
+       mtypes "gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/module/types"
 )
 
 const SCC_RESOURCE = "scc_ipsec_resource"
 const RegStatus = "RegStatus"
+const globalOverlay = "global"
 
 var task *runner.Task
 
@@ -117,6 +118,34 @@ func (c *DeviceObjectManager) PreProcessing(m map[string]string, t module.Contro
        to := t.(*module.DeviceObject)
 
        ipr_manager := GetManagerset().ProviderIPRange
+
+       if to.Specification.KubeConfig == "" {
+               to.Status.Mode = 3
+               to.Status.Data[RegStatus] = "pending"
+
+               gitOpsReference := to.Specification.GitOpsParam.GitOpsReferenceObject
+               gitOpsResource := to.Specification.GitOpsParam.GitOpsResourceObject
+
+               m[ClusterSyncResource] = gitOpsReference
+               clustersync_manager := GetManagerset().ClusterSync
+               clustersync_obj, err := clustersync_manager.GetObject(m)
+               if clustersync_obj.GetMetadata().Name != gitOpsReference || err != nil {
+                       log.Println(err)
+                       return err
+               }
+
+               if gitOpsResource != "" {
+                       m[ClusterSyncResource] = gitOpsResource
+                       clustersync_obj, err := clustersync_manager.GetObject(m)
+                       if clustersync_obj.GetMetadata().Name != gitOpsResource || err != nil {
+                               log.Println(err)
+                               return err
+                       }
+               }
+
+               return nil
+       }
+
        kubeutil := GetKubeConfigUtil()
 
        local_public_ips := to.Specification.PublicIps
@@ -148,7 +177,6 @@ func (c *DeviceObjectManager) PreProcessing(m map[string]string, t module.Contro
                to.Status.Mode = 2
 
                // allocate OIP for device
-               overlay_name := m[OverlayResource]
                oip, err := ipr_manager.Allocate("", to.Metadata.Name)
                if err != nil {
                        return pkgerrors.Wrap(err, "Fail to allocate overlay ip for "+to.Metadata.Name)
@@ -183,10 +211,9 @@ func (c *DeviceObjectManager) PreProcessing(m map[string]string, t module.Contro
                if err != nil {
                        log.Println("Getting certutil error")
                }
-               crts, key, err := cu.GetKeypair(SCCCertName, NameSpaceName)
-               crt := strings.SplitAfter(crts, "-----END CERTIFICATE-----")[0]
 
-               root_ca := GetRootCA(overlay_name)
+               crt, key, err := cu.GetKeypair(SCCCertName, NameSpaceName)
+               root_ca, _ := GetRootCA()
 
                // Build up ipsec resource
                scc_conn := resource.Connection{
@@ -204,9 +231,9 @@ func (c *DeviceObjectManager) PreProcessing(m map[string]string, t module.Contro
                        Type:                 VTI_MODE,
                        Remote:               ANY,
                        AuthenticationMethod: PUBKEY_AUTH,
-                       PublicCert:           base64.StdEncoding.EncodeToString([]byte(crt)),
-                       PrivateCert:          base64.StdEncoding.EncodeToString([]byte(key)),
-                       SharedCA:             base64.StdEncoding.EncodeToString([]byte(root_ca)),
+                       PublicCert:           crt,
+                       PrivateCert:          key,
+                       SharedCA:             root_ca,
                        LocalIdentifier:      "CN=" + SCCCertName,
                        RemoteIdentifier:     "CN=" + to.GetCertName(),
                        CryptoProposal:       all_proposal,
@@ -216,7 +243,7 @@ func (c *DeviceObjectManager) PreProcessing(m map[string]string, t module.Contro
 
                // Add and deploy resource
                resutil.AddResource(&scc, "create", &scc_ipsec_resource)
-               resutil.Deploy(overlay_name, "localto"+to.Metadata.Name, "YAML")
+               resutil.Deploy(globalOverlay, m[OverlayResource]+"localto"+to.Metadata.Name, "YAML")
 
                //Reserve ipsec resource to device object
                res_str, err := resource.GetResourceBuilder().ToString(&scc_ipsec_resource)
@@ -291,6 +318,7 @@ func (c *DeviceObjectManager) DeleteObject(m map[string]string) error {
 
        overlay_manager := GetManagerset().Overlay
        ipr_manager := GetManagerset().ProviderIPRange
+       cert_manager := GetManagerset().Cert
 
        overlay_name := m[OverlayResource]
 
@@ -325,7 +353,7 @@ func (c *DeviceObjectManager) DeleteObject(m map[string]string) error {
                        resutils.AddResource(&scc, "create", pr)
                }
 
-               resutils.Undeploy(overlay_name)
+               resutils.Undeploy(globalOverlay)
        }
 
        log.Println("Delete device...")
@@ -334,36 +362,58 @@ func (c *DeviceObjectManager) DeleteObject(m map[string]string) error {
                log.Println(err)
        }
 
-       // DB Operation
-       err = GetDBUtils().DeleteObject(c, m)
-       err = GetDBUtils().UnregisterDevice(m[DeviceResource])
+       if to.Status.Mode == 3 {
+               err = GetDBUtils().UnregisterGitOpsDevice(overlay_name, to.Metadata.Name)
+       } else {
+               err = GetDBUtils().UnregisterDevice(overlay_name, m[DeviceResource])
+       }
        if err != nil {
                log.Println(err)
        }
 
-       return err
-}
+       log.Println("Delete Certificate: " + to.GetCertName())
+       err = cert_manager.DeleteCertificateByType(overlay_name, to.Metadata.Name, DeviceKey)
+       if err != nil {
+               log.Println("Error in deleting device certificate")
+       }
 
-func GetDeviceCertificate(overlay_name string, device_name string) (string, string, error) {
-       cert := GetManagerset().Cert
-       _, crts, key, err := cert.GetOrCreateDC(overlay_name, device_name)
+       // DB Operation
+       err = GetDBUtils().DeleteObject(c, m)
        if err != nil {
-               log.Println("Error in getting cert for device ...")
-               return "", "", err
+               log.Println(err)
        }
 
-       crt := strings.SplitAfter(crts, "-----END CERTIFICATE-----")[0]
-       return crt, key, nil
+       return err
 }
 
 func (c *DeviceObjectManager) PostRegister(m map[string]string, t module.ControllerObject) error {
-
+       overlay_name := m[OverlayResource]
        overlay_manager := GetManagerset().Overlay
+       cert_manager := GetManagerset().Cert
 
        to := t.(*module.DeviceObject)
        log.Println("Registering device " + to.Metadata.Name + " ... ")
 
-       if to.Status.Mode == 2 {
+       if to.Status.Mode == 3 {
+               to.Status.Data[RegStatus] = "success"
+               var gitOpsParams mtypes.GitOpsProps
+               gitOpsParams.GitOpsType = to.Specification.GitOpsParam.GitOpsType
+               gitOpsParams.GitOpsReferenceObject = to.Specification.GitOpsParam.GitOpsReferenceObject
+               gitOpsParams.GitOpsResourceObject = to.Specification.GitOpsParam.GitOpsResourceObject
+
+               err := GetDBUtils().RegisterGitOpsDevice(overlay_name, to.Metadata.Name, mtypes.GitOpsSpec{Props: gitOpsParams})
+               if err != nil {
+                       log.Println(err)
+                       return err
+               }
+
+               log.Println("Create Certificate: " + to.GetCertName())
+               _, _, _, err = cert_manager.GetOrCreateDC(overlay_name, to.Metadata.Name, false)
+               if err != nil {
+                       log.Println(err)
+                       return err
+               }
+       } else if to.Status.Mode == 2 {
                kube_config, err := base64.StdEncoding.DecodeString(to.Specification.KubeConfig)
                if err != nil || len(kube_config) == 0 {
                        to.Status.Data[RegStatus] = "failed"
@@ -378,7 +428,7 @@ func (c *DeviceObjectManager) PostRegister(m map[string]string, t module.Control
 
                to.Status.Data[RegStatus] = "success"
                to.Specification.KubeConfig = base64.StdEncoding.EncodeToString(kube_config)
-               err = GetDBUtils().RegisterDevice(to.Metadata.Name, to.Specification.KubeConfig)
+               err = GetDBUtils().RegisterDevice(overlay_name, to.Metadata.Name, to.Specification.KubeConfig)
                if err != nil {
                        log.Println(err)
                        return err
@@ -387,17 +437,14 @@ func (c *DeviceObjectManager) PostRegister(m map[string]string, t module.Control
 
        } else {
                to.Status.Data[RegStatus] = "success"
-               err := GetDBUtils().RegisterDevice(to.Metadata.Name, to.Specification.KubeConfig)
+               err := GetDBUtils().RegisterDevice(overlay_name, to.Metadata.Name, to.Specification.KubeConfig)
                if err != nil {
                        log.Println(err)
                        return err
                }
 
-               overlay := GetManagerset().Overlay
-               overlay_name := m[OverlayResource]
-
                log.Println("Create Certificate: " + to.GetCertName())
-               _, _, err = overlay.CreateCertificate(overlay_name, to.GetCertName())
+               _, _, _, err = cert_manager.GetOrCreateDC(overlay_name, to.Metadata.Name, false)
                if err != nil {
                        log.Println(err)
                        return err
index 39355ab..474dc38 100644 (file)
@@ -21,11 +21,11 @@ import (
        "encoding/json"
        "io"
        "log"
-       "strings"
 
        "github.com/akraino-edge-stack/icn-sdwan/central-controller/src/scc/pkg/module"
        pkgerrors "github.com/pkg/errors"
        "gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/infra/db"
+       mtypes "gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/module/types"
 )
 
 const DEFAULTPORT = "6443"
@@ -106,38 +106,69 @@ func (c *HubObjectManager) ParseObject(r io.Reader) (module.ControllerObject, er
 
 func (c *HubObjectManager) CreateObject(m map[string]string, t module.ControllerObject) (module.ControllerObject, error) {
        overlay := GetManagerset().Overlay
+       certManager := GetManagerset().Cert
        overlay_name := m[OverlayResource]
        to := t.(*module.HubObject)
        hub_name := to.Metadata.Name
 
        //Todo: Check if public ip can be used.
        var local_public_ip string
-       var config []byte
-       config, err := base64.StdEncoding.DecodeString(to.Specification.KubeConfig)
-       if err != nil {
-               log.Println(err)
-               return t, err
-       }
 
-       local_public_ips := to.Specification.PublicIps
+       if to.Specification.KubeConfig == "" {
+               var gitOpsParams mtypes.GitOpsProps
+               gitOpsParams.GitOpsType = to.Specification.GitOpsParam.GitOpsType
+               gitOpsParams.GitOpsReferenceObject = to.Specification.GitOpsParam.GitOpsReferenceObject
+               gitOpsParams.GitOpsResourceObject = to.Specification.GitOpsParam.GitOpsResourceObject
+
+               m[ClusterSyncResource] = gitOpsParams.GitOpsReferenceObject
+               clustersync_manager := GetManagerset().ClusterSync
+               clustersync_obj, err := clustersync_manager.GetObject(m)
+               if clustersync_obj.GetMetadata().Name != gitOpsParams.GitOpsReferenceObject || err != nil {
+                       log.Println("error finding clustersync object", err)
+                       return &module.HubObject{}, err
+               }
+
+               if gitOpsParams.GitOpsResourceObject != "" {
+                       m[ClusterSyncResource] = gitOpsParams.GitOpsResourceObject
+                       clustersync_obj, err := clustersync_manager.GetObject(m)
+                       if clustersync_obj.GetMetadata().Name != gitOpsParams.GitOpsResourceObject || err != nil {
+                               log.Println("error finding clustersync object", err)
+                               return &module.HubObject{}, err
+                       }
+               }
 
-       kubeutil := GetKubeConfigUtil()
-       config, local_public_ip, err = kubeutil.checkKubeConfigAvail(config, local_public_ips, DEFAULTPORT)
-       if err == nil {
-               log.Println("Public IP address verified: " + local_public_ip)
-               to.Status.Ip = local_public_ip
-               to.Specification.KubeConfig = base64.StdEncoding.EncodeToString(config)
-               err := GetDBUtils().RegisterDevice(hub_name, to.Specification.KubeConfig)
+               to.Status.Ip = to.Specification.PublicIps[0]
+               err = GetDBUtils().RegisterGitOpsDevice(overlay_name, to.Metadata.Name, mtypes.GitOpsSpec{Props: gitOpsParams})
                if err != nil {
                        log.Println(err)
                }
        } else {
-               return t, err
+               config, err := base64.StdEncoding.DecodeString(to.Specification.KubeConfig)
+               if err != nil {
+                       log.Println(err)
+                       return t, err
+               }
+
+               local_public_ips := to.Specification.PublicIps
+
+               kubeutil := GetKubeConfigUtil()
+               config, local_public_ip, err = kubeutil.checkKubeConfigAvail(config, local_public_ips, DEFAULTPORT)
+               if err == nil {
+                       log.Println("Public IP address verified: " + local_public_ip)
+                       to.Status.Ip = local_public_ip
+                       to.Specification.KubeConfig = base64.StdEncoding.EncodeToString(config)
+                       err := GetDBUtils().RegisterDevice(overlay_name, hub_name, to.Specification.KubeConfig)
+                       if err != nil {
+                               log.Println(err)
+                       }
+               } else {
+                       return t, err
+               }
        }
 
        //Create cert for ipsec connection
        log.Println("Create Certificate: " + to.GetCertName())
-       _, _, err = overlay.CreateCertificate(overlay_name, to.GetCertName())
+       _, _, _, err := certManager.GetOrCreateCertificateByType(overlay_name, to.Metadata.Name, HubKey, false)
        if err != nil {
                return t, err
        }
@@ -196,6 +227,7 @@ func (c *HubObjectManager) DeleteObject(m map[string]string) error {
        }
 
        overlay_manager := GetManagerset().Overlay
+       certManager := GetManagerset().Cert
 
        // Reset all IpSec connection setup by this device
        err = overlay_manager.DeleteConnections(m, t)
@@ -205,35 +237,26 @@ func (c *HubObjectManager) DeleteObject(m map[string]string) error {
 
        to := t.(*module.HubObject)
        log.Println("Delete Certificate: " + to.GetCertName())
-       overlay_manager.DeleteCertificate(to.GetCertName())
+       err = certManager.DeleteCertificateByType(m[OverlayResource], to.Metadata.Name, HubKey)
+       if err != nil {
+               log.Println("Error in deleting hub certificate")
+       }
+       //overlay_manager.DeleteCertificate(to.GetCertName())
 
-       // DB Operation
-       err = GetDBUtils().DeleteObject(c, m)
-       err = GetDBUtils().UnregisterDevice(m[HubResource])
+       if to.Specification.KubeConfig == "" {
+               err = GetDBUtils().UnregisterGitOpsDevice(m[OverlayResource], to.Metadata.Name)
+       } else {
+               err = GetDBUtils().UnregisterDevice(m[OverlayResource], m[HubResource])
+       }
        if err != nil {
                log.Println(err)
        }
 
-       return err
-}
-
-func GetHubCertificate(cert_name string, namespace string) (string, string, error) {
-       cu, err := GetCertUtil()
+       // DB Operation
+       err = GetDBUtils().DeleteObject(c, m)
        if err != nil {
                log.Println(err)
-               return "", "", err
-       } else {
-               ready := cu.IsCertReady(cert_name, namespace)
-               if ready != true {
-                       return "", "", pkgerrors.New("Cert for hub is not ready")
-               } else {
-                       crts, key, err := cu.GetKeypair(cert_name, namespace)
-                       crt := strings.SplitAfter(crts, "-----END CERTIFICATE-----")[0]
-                       if err != nil {
-                               log.Println(err)
-                               return "", "", err
-                       }
-                       return crt, key, nil
-               }
        }
+
+       return err
 }
index d85afbe..aa561e8 100644 (file)
@@ -139,7 +139,7 @@ func (c *HubDeviceObjectManager) CreateObject(m map[string]string, t module.Cont
                dev_manager.UpdateObject(m, device)
        }
 
-       return c.CreateEmptyObject(), nil
+       return t, nil
 }
 
 func (c *HubDeviceObjectManager) GetObject(m map[string]string) (module.ControllerObject, error) {
index 8845ac4..25067c1 100644 (file)
@@ -17,7 +17,6 @@
 package manager
 
 import (
-       "encoding/base64"
        "encoding/json"
        "github.com/akraino-edge-stack/icn-sdwan/central-controller/src/scc/pkg/module"
        "github.com/akraino-edge-stack/icn-sdwan/central-controller/src/scc/pkg/resource"
@@ -124,12 +123,20 @@ func (c *OverlayObjectManager) CreateObject(m map[string]string, t module.Contro
        // Create a issuer each overlay
        to := t.(*module.OverlayObject)
        overlay_name := to.Metadata.Name
+
+       // DB Operation
+       t, err := GetDBUtils().CreateObject(c, m, t)
+       if err != nil {
+               log.Println(err)
+       }
+
        cu, err := GetCertUtil()
        if err != nil {
                log.Println(err)
        } else {
                // create overlay ca
-               _, err := cu.CreateCertificate(c.CertName(overlay_name), NameSpaceName, RootCAIssuerName, true)
+               cert_manager := GetManagerset().Cert
+               _, _, _, err := cert_manager.GetOrCreateCertificateByType(overlay_name, "", OverlayKey, true)
                if err == nil {
                        // create overlay issuer
                        _, err := cu.CreateCAIssuer(c.IssuerName(overlay_name), NameSpaceName, c.CertName(overlay_name))
@@ -141,9 +148,6 @@ func (c *OverlayObjectManager) CreateObject(m map[string]string, t module.Contro
                }
        }
 
-       // DB Operation
-       t, err = GetDBUtils().CreateObject(c, m, t)
-
        return t, err
 }
 
@@ -171,81 +175,35 @@ func (c *OverlayObjectManager) UpdateObject(m map[string]string, t module.Contro
 func (c *OverlayObjectManager) DeleteObject(m map[string]string) error {
        overlay_name := m[OverlayResource]
 
-       // DB Operation
-       err := GetDBUtils().DeleteObject(c, m)
-       if err == nil {
-               cu, err := GetCertUtil()
-               if err != nil {
-                       log.Println(err)
-               } else {
-                       err = cu.DeleteIssuer(c.IssuerName(overlay_name), NameSpaceName)
-                       if err != nil {
-                               log.Println("Failed to delete overlay[" + overlay_name + "] issuer: " + err.Error())
-                       }
-                       err = cu.DeleteCertificate(c.CertName(overlay_name), NameSpaceName)
-                       if err != nil {
-                               log.Println("Failed to delete overlay[" + overlay_name + "] certificate: " + err.Error())
-                       }
-               }
-       }
-
-       return err
-}
-
-func (c *OverlayObjectManager) IssuerName(name string) string {
-       return name + "-issuer"
-}
-
-func (c *OverlayObjectManager) CertName(name string) string {
-       return name + "-cert"
-}
-
-func (c *OverlayObjectManager) CreateCertificate(oname string, cname string) (string, string, error) {
        cu, err := GetCertUtil()
        if err != nil {
                log.Println(err)
        } else {
-               _, err := cu.CreateCertificate(cname, NameSpaceName, c.IssuerName(oname), false)
+               err = cu.DeleteIssuer(c.IssuerName(overlay_name), NameSpaceName)
                if err != nil {
-                       log.Println("Failed to create overlay[" + oname + "] certificate: " + err.Error())
-               } else {
-                       crts, key, err := cu.GetKeypair(cname, NameSpaceName)
-                       if err != nil {
-                               log.Println(err)
-                               return "", "", err
-                       } else {
-                               crt := strings.SplitAfter(crts, "-----END CERTIFICATE-----")[0]
-                               return crt, key, nil
-                       }
+                       log.Println("Failed to delete overlay[" + overlay_name + "] issuer: " + err.Error())
+               }
+               cert_manager := GetManagerset().Cert
+               err = cert_manager.DeleteCertificateByType(overlay_name, "", OverlayKey)
+               if err != nil {
+                       log.Println("Failed to delete overlay[" + overlay_name + "] certificate: " + err.Error())
                }
        }
-
-       return "", "", nil
-}
-
-func (c *OverlayObjectManager) DeleteCertificate(cname string) (string, string, error) {
-       cu, err := GetCertUtil()
+       // DB Operation
+       err = GetDBUtils().DeleteObject(c, m)
        if err != nil {
                log.Println(err)
-       } else {
-               err = cu.DeleteCertificate(cname, NameSpaceName)
-               if err != nil {
-                       log.Println("Failed to delete " + cname + " certificate: " + err.Error())
-               }
        }
 
-       return "", "", nil
+       return err
 }
 
-func (c *OverlayObjectManager) GetCertificate(oname string) (string, string, error) {
-       cu, err := GetCertUtil()
-       if err != nil {
-               log.Println(err)
-       } else {
-               cname := c.CertName(oname)
-               return cu.GetKeypair(cname, NameSpaceName)
-       }
-       return "", "", nil
+func (c *OverlayObjectManager) IssuerName(name string) string {
+       return name + "-issuer"
+}
+
+func (c *OverlayObjectManager) CertName(name string) string {
+       return name + "-cert"
 }
 
 //Set up Connection between objects
@@ -256,6 +214,7 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
        hubConn := GetManagerset().HubConn
        hub_manager := GetManagerset().Hub
        dev_manager := GetManagerset().Device
+       cert_manager := GetManagerset().Cert
        overlay_name := m[OverlayResource]
 
        proposal := GetManagerset().Proposal
@@ -277,12 +236,6 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
                resutil.AddResource(m2, "create", pr)
        }
 
-       device_mgr := GetManagerset().Device
-
-       //Get the overlay cert
-       var root_ca string
-       root_ca = GetRootCA(m[OverlayResource])
-
        var obj1_ipsec_resource resource.IpsecResource
        var obj2_ipsec_resource resource.IpsecResource
        var obj1_ip string
@@ -297,11 +250,11 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
                obj2_ip = obj2.Status.Ip
 
                //Keypair
-               obj1_crt, obj1_key, err := GetHubCertificate(obj1.GetCertName(), namespace)
+               obj1_ca, obj1_crt, obj1_key, err := cert_manager.GetOrCreateCertificateByType(overlay_name, obj1.Metadata.Name, HubKey, false)
                if err != nil {
                        return err
                }
-               obj2_crt, obj2_key, err := GetHubCertificate(obj2.GetCertName(), namespace)
+               obj2_ca, obj2_crt, obj2_key, err := cert_manager.GetOrCreateCertificateByType(overlay_name, obj2.Metadata.Name, HubKey, false)
                if err != nil {
                        return err
                }
@@ -332,9 +285,9 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
                        Type:                 VTI_MODE,
                        Remote:               obj2_ip,
                        AuthenticationMethod: PUBKEY_AUTH,
-                       PublicCert:           base64.StdEncoding.EncodeToString([]byte(obj1_crt)),
-                       PrivateCert:          base64.StdEncoding.EncodeToString([]byte(obj1_key)),
-                       SharedCA:             base64.StdEncoding.EncodeToString([]byte(root_ca)),
+                       PublicCert:           obj1_crt,
+                       PrivateCert:          obj1_key,
+                       SharedCA:             obj1_ca,
                        LocalIdentifier:      "CN=" + obj1.GetCertName(),
                        RemoteIdentifier:     "CN=" + obj2.GetCertName(),
                        CryptoProposal:       all_proposals,
@@ -346,9 +299,9 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
                        Type:                 VTI_MODE,
                        Remote:               obj1_ip,
                        AuthenticationMethod: PUBKEY_AUTH,
-                       PublicCert:           base64.StdEncoding.EncodeToString([]byte(obj2_crt)),
-                       PrivateCert:          base64.StdEncoding.EncodeToString([]byte(obj2_key)),
-                       SharedCA:             base64.StdEncoding.EncodeToString([]byte(root_ca)),
+                       PublicCert:           obj2_crt,
+                       PrivateCert:          obj2_key,
+                       SharedCA:             obj2_ca,
                        LocalIdentifier:      "CN=" + obj2.GetCertName(),
                        RemoteIdentifier:     "CN=" + obj1.GetCertName(),
                        CryptoProposal:       all_proposals,
@@ -377,10 +330,10 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
                obj2 := m2.(*module.DeviceObject)
 
                obj1_ip = obj1.Status.Ip
-               obj2_ip, _ = device_mgr.AllocateIP(m, m2, module.CreateEndName(obj1.GetType(), obj1.Metadata.Name))
+               obj2_ip, _ = dev_manager.AllocateIP(m, m2, module.CreateEndName(obj1.GetType(), obj1.Metadata.Name))
 
                //Keypair
-               obj1_crt, obj1_key, err := GetHubCertificate(obj1.GetCertName(), namespace)
+               obj1_ca, obj1_crt, obj1_key, err := cert_manager.GetOrCreateCertificateByType(overlay_name, obj1.Metadata.Name, HubKey, false)
                if err != nil {
                        return err
                }
@@ -401,9 +354,9 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
                        Type:                 VTI_MODE,
                        Remote:               ANY,
                        AuthenticationMethod: PUBKEY_AUTH,
-                       PublicCert:           base64.StdEncoding.EncodeToString([]byte(obj1_crt)),
-                       PrivateCert:          base64.StdEncoding.EncodeToString([]byte(obj1_key)),
-                       SharedCA:             base64.StdEncoding.EncodeToString([]byte(root_ca)),
+                       PublicCert:           obj1_crt,
+                       PrivateCert:          obj1_key,
+                       SharedCA:             obj1_ca,
                        LocalIdentifier:      "CN=" + obj1.GetCertName(),
                        RemoteIdentifier:     "CN=" + obj2.GetCertName(),
                        CryptoProposal:       all_proposals,
@@ -411,7 +364,7 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
                        Connections:          obj1_conn,
                }
 
-               obj2_crt, obj2_key, err := GetDeviceCertificate(m[OverlayResource], obj2.Metadata.Name)
+               obj2_ca, obj2_crt, obj2_key, err := cert_manager.GetOrCreateCertificateByType(overlay_name, obj2.Metadata.Name, DeviceKey, false)
                if err != nil {
                        return err
                }
@@ -433,7 +386,7 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
                        AuthenticationMethod: PUBKEY_AUTH,
                        PublicCert:           obj2_crt,
                        PrivateCert:          obj2_key,
-                       SharedCA:             base64.StdEncoding.EncodeToString([]byte(root_ca)),
+                       SharedCA:             obj2_ca,
                        LocalIdentifier:      "CN=" + obj2.GetCertName(),
                        RemoteIdentifier:     "CN=" + obj1.GetCertName(),
                        CryptoProposal:       all_proposals,
@@ -535,11 +488,11 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
                obj2_ip = obj2.Status.Ip
 
                //Keypair
-               obj1_crt, obj1_key, err := GetDeviceCertificate(m[OverlayResource], obj1.Metadata.Name)
+               obj1_ca, obj1_crt, obj1_key, err := cert_manager.GetOrCreateCertificateByType(overlay_name, obj1.Metadata.Name, DeviceKey, false)
                if err != nil {
                        return err
                }
-               obj2_crt, obj2_key, err := GetDeviceCertificate(m[OverlayResource], obj2.Metadata.Name)
+               obj2_ca, obj2_crt, obj2_key, err := cert_manager.GetOrCreateCertificateByType(overlay_name, obj2.Metadata.Name, DeviceKey, false)
                if err != nil {
                        return err
                }
@@ -557,9 +510,9 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
                        Type:                 POLICY_MODE,
                        Remote:               obj2_ip,
                        AuthenticationMethod: PUBKEY_AUTH,
-                       PublicCert:           base64.StdEncoding.EncodeToString([]byte(obj1_crt)),
-                       PrivateCert:          base64.StdEncoding.EncodeToString([]byte(obj1_key)),
-                       SharedCA:             base64.StdEncoding.EncodeToString([]byte(root_ca)),
+                       PublicCert:           obj1_crt,
+                       PrivateCert:          obj1_key,
+                       SharedCA:             obj1_ca,
                        LocalIdentifier:      "CN=" + obj1.GetCertName(),
                        RemoteIdentifier:     "CN=" + obj2.GetCertName(),
                        CryptoProposal:       all_proposals,
@@ -571,9 +524,9 @@ func (c *OverlayObjectManager) SetupConnection(m map[string]string, m1 module.Co
                        Type:                 POLICY_MODE,
                        Remote:               obj1_ip,
                        AuthenticationMethod: PUBKEY_AUTH,
-                       PublicCert:           base64.StdEncoding.EncodeToString([]byte(obj2_crt)),
-                       PrivateCert:          base64.StdEncoding.EncodeToString([]byte(obj2_key)),
-                       SharedCA:             base64.StdEncoding.EncodeToString([]byte(root_ca)),
+                       PublicCert:           obj2_crt,
+                       PrivateCert:          obj2_key,
+                       SharedCA:             obj2_ca,
                        LocalIdentifier:      "CN=" + obj2.GetCertName(),
                        RemoteIdentifier:     "CN=" + obj1.GetCertName(),
                        CryptoProposal:       all_proposals,
@@ -612,14 +565,14 @@ func (c *OverlayObjectManager) DeleteConnection(m map[string]string, conn module
        //Error: the re-constructed obj doesn't obtain the status
        if co1.GetType() == "Device" {
                log.Println("Enter Delete Connection with device on co1...")
-               device_mgr := GetManagerset().Device
-               device_mgr.FreeIP(m, co1, module.CreateEndName(co2.GetType(), co2.GetMetadata().Name))
+               dev_manager := GetManagerset().Device
+               dev_manager.FreeIP(m, co1, module.CreateEndName(co2.GetType(), co2.GetMetadata().Name))
        }
 
        if co2.GetType() == "Device" {
                log.Println("Enter Delete Connection with device on co2...")
-               device_mgr := GetManagerset().Device
-               device_mgr.FreeIP(m, co2, module.CreateEndName(co1.GetType(), co1.GetMetadata().Name))
+               dev_manager := GetManagerset().Device
+               dev_manager.FreeIP(m, co2, module.CreateEndName(co1.GetType(), co1.GetMetadata().Name))
        }
 
        conn_manager := GetConnectionManager()
index 625aefc..11d4959 100644 (file)
@@ -238,11 +238,11 @@ func (d *ResUtil) getDeviceAppName(device module.ControllerObject) string {
        return device.GetMetadata().Name + "-app"
 }
 
-func (d *ResUtil) getDeviceClusterName(device module.ControllerObject) string {
-       return provider_name + "+" + device.GetMetadata().Name
+func (d *ResUtil) getDeviceClusterName(overlay string, device module.ControllerObject) string {
+       return provider_name + "_" + overlay + "+" + device.GetMetadata().Name
 }
 
-func (d *ResUtil) DeployOneResource(app_name string, format string, device module.ControllerObject, resource DeployResource) (string, error) {
+func (d *ResUtil) DeployOneResource(overlay, app_name string, format string, device module.ControllerObject, resource DeployResource) (string, error) {
        resource_app_name := app_name + resource.Resource.GetName()
        cca, err := makeAppContextForCompositeApp(project_name, resource_app_name, "1.0", "1.0", "di", "default", "0")
        context := cca.context                    // appcontext.AppContext
@@ -253,20 +253,21 @@ func (d *ResUtil) DeployOneResource(app_name string, format string, device modul
                Apporder []string `json:"apporder"`
        }
        var appDepInstr struct {
-               Appdep map[string]string `json:"appdependency"`
+               Appdep map[string][]string `json:"appdependency"`
        }
-       appdep := make(map[string]string)
+       appdep := make(map[string][]string)
        device_app_name := d.getDeviceAppName(device)
        appOrderInstr.Apporder = append(appOrderInstr.Apporder, device_app_name)
-       appdep[device_app_name] = ""
+       appdep[device_app_name] = []string{}
+       appDepInstr.Appdep = appdep
 
        apphandle, _ := context.AddApp(compositeHandle, device_app_name)
 
-       clusterhandle, _ := context.AddCluster(apphandle, d.getDeviceClusterName(device))
+       clusterhandle, _ := context.AddCluster(apphandle, d.getDeviceClusterName(overlay, device))
        err = addResourcesToCluster(context, clusterhandle, d.TargetName(device), []DeployResource{resource}, true)
 
        jappOrderInstr, _ := json.Marshal(appOrderInstr)
-       appDepInstr.Appdep = appdep
+
        jappDepInstr, _ := json.Marshal(appDepInstr)
        context.AddInstruction(compositeHandle, "app", "order", string(jappOrderInstr))
        context.AddInstruction(compositeHandle, "app", "dependency", string(jappDepInstr))
@@ -287,14 +288,14 @@ func (d *ResUtil) DeployOneResource(app_name string, format string, device modul
        return appContextID, nil
 }
 
-func (d *ResUtil) UpdateOneResource(cid string, device module.ControllerObject, resourceName string, resourceValue string) error {
+func (d *ResUtil) UpdateOneResource(overlay, cid string, device module.ControllerObject, resourceName string, resourceValue string) error {
        context := appcontext.AppContext{}
        _, err := context.LoadAppContext(cid)
        if err != nil {
                return err
        }
 
-       rh, err := context.GetResourceHandle(d.getDeviceAppName(device), d.getDeviceClusterName(device), resourceName)
+       rh, err := context.GetResourceHandle(d.getDeviceAppName(device), d.getDeviceClusterName(overlay, device), resourceName)
        if err != nil {
                return err
        }
@@ -354,8 +355,7 @@ func (d *ResUtil) DeployUpdate(overlay string, app_name string, format string, u
                                        // resource is not deployed or failed to deploy
                                        if resobj.Specification.Ref == 0 {
                                                // resource needs to be deployed
-                                               cid, err := d.DeployOneResource(app_name, format, device, resource)
-
+                                               cid, err := d.DeployOneResource(overlay, app_name, format, device, resource)
                                                if err != nil {
                                                        isErr = true
                                                        resource.Status = 2
@@ -381,7 +381,7 @@ func (d *ResUtil) DeployUpdate(overlay string, app_name string, format string, u
                        case 2:
                                // Update resource
                                if resource.Status != 1 {
-                                       err := d.UpdateOneResource(resobj.Specification.ContextId, device, getResourceName(resource), resource_data)
+                                       err := d.UpdateOneResource(overlay, resobj.Specification.ContextId, device, getResourceName(resource), resource_data)
                                        if err != nil {
                                                isErr = true
                                                resource.Status = 2
@@ -451,19 +451,46 @@ func (d *ResUtil) Undeploy(overlay string) error {
                                                resource.Status = 1
                                                resobj.Specification.Ref = 0
 
-                                               /*
-                                                       // delete app from context db
-                                                       context := appcontext.AppContext{}
-                                                       _, err := context.LoadAppContext(resobj.Specification.ContextId)
-                                                       if err != nil {
-                                                               err = context.DeleteCompositeApp()
-                                                       }
-
-                                                       if err != nil {
+                                               // delete app from context db
+                                               context := appcontext.AppContext{}
+                                               ah, err := context.LoadAppContext(resobj.Specification.ContextId)
+                                               if err == nil {
+                                                       err = wait.PollImmediate(time.Second*2, time.Second*20, func() (bool, error) {
+                                                               sh, err := context.GetLevelHandle(ah, "status")
+                                                               if err != nil {
+                                                                       log.Println("Waiting for Resource status to be ready.")
+                                                                       return false, nil
+                                                               }
+
+                                                               s, err := context.GetValue(sh)
+                                                               if err != nil {
+                                                                       log.Println("Waiting for Resource status to be ready.")
+                                                                       return false, nil
+                                                               }
+
+                                                               acStatus := appcontext.AppContextStatus{}
+                                                               js, _ := json.Marshal(s)
+                                                               json.Unmarshal(js, &acStatus)
+
+                                                               if acStatus.Status == appcontext.AppContextStatusEnum.Terminated ||
+                                                                       acStatus.Status == appcontext.AppContextStatusEnum.TerminateFailed {
+                                                                       err = context.DeleteCompositeApp()
+                                                                       if err != nil {
+                                                                               log.Println(err)
+                                                                               return false, err
+                                                                       }
+                                                                       return true, nil
+                                                               }
+                                                               return false, nil
+                                                       },
+                                                       )
+                                                       if err == nil {
+                                                               res_manager.DeleteObject(m)
+                                                       } else {
                                                                log.Println(err)
                                                        }
-                                               */
-                                               res_manager.DeleteObject(m)
+
+                                               }
                                        }
                                } else {
                                        resobj.Specification.Ref -= 1
@@ -498,15 +525,15 @@ func addQueryResourcesToCluster(ct appcontext.AppContext, ch interface{}, resour
        }
 
        var resDepInstr struct {
-               Resdep map[string]string `json:"resdependency"`
+               Resdep map[string][]string `json:"resdependency"`
        }
-       resdep := make(map[string]string)
+       resdep := make(map[string][]string)
 
        for _, resource := range *resources {
                resource_name := resource.Resource.Namespace + "+" + resource.Resource.Name
                v, _ := json.Marshal(resource.Resource)
                resOrderInstr.Resorder = append(resOrderInstr.Resorder, resource_name)
-               resdep[resource_name] = "go"
+               resdep[resource_name] = []string{}
 
                rh, err := ct.AddResource(ch, resource_name, string(v))
 
index 5835449..5556cc1 100644 (file)
@@ -25,12 +25,14 @@ type CertificateObject struct {
 
 // CertificateObjectSpec contains the parameters
 type CertificateObjectSpec struct {
+       IsCA        bool   `json:"isCA"`
+       ClusterType string `json:"clusterType"`
 }
 
 type CertificateObjectData struct {
-       RootCA string `json:"rootca"`
-       Ca     string `json:"ca"`
-       Key    string `json:"key"`
+       CA   string `json:"ca"`
+       Cert string `json:"cert"`
+       Key  string `json:"key"`
 }
 
 func (c *CertificateObject) GetMetadata() ObjectMetaData {
index daf81ab..b17bbdc 100644 (file)
@@ -25,14 +25,21 @@ type DeviceObject struct {
 
 // DeviceObjectSpec contains the parameters
 type DeviceObjectSpec struct {
-       PublicIps            []string `json:"publicIps"`
-       ForceHubConnectivity bool     `json:"forceHubConnectivity"`
-       ProxyHub             string   `json:"proxyHub"`
-       ProxyHubPort         int      `json:"proxyHubPort"`
-       UseHub4Internet      bool     `json:"useHub4Internet"`
-       DedicatedSFC         bool     `json:"dedicatedSFC"`
-       CertificateId        string   `json:"certificateId"`
-       KubeConfig           string   `json:"kubeConfig" encrypted:""`
+       PublicIps            []string     `json:"publicIps"`
+       ForceHubConnectivity bool         `json:"forceHubConnectivity"`
+       ProxyHub             string       `json:"proxyHub"`
+       ProxyHubPort         int          `json:"proxyHubPort"`
+       UseHub4Internet      bool         `json:"useHub4Internet"`
+       DedicatedSFC         bool         `json:"dedicatedSFC"`
+       CertificateId        string       `json:"certificateId"`
+       KubeConfig           string       `json:"kubeConfig" encrypted:""`
+       GitOpsParam          GitOpsParams `json:"gitOpsParam"`
+}
+
+type GitOpsParams struct {
+       GitOpsType            string `json:"gitOpsType"`
+       GitOpsReferenceObject string `json:"gitOpsReferenceObject"`
+       GitOpsResourceObject  string `json:"gitOpsResourceObject"`
 }
 
 // DeviceObjectStatus
index c10b16e..e2d3c61 100644 (file)
@@ -30,9 +30,10 @@ type HubObject struct {
 
 //HubObjectSpec contains the parameters
 type HubObjectSpec struct {
-       PublicIps     []string `json:"publicIps"`
-       CertificateId string   `json:"certificateId"`
-       KubeConfig    string   `json:"kubeConfig" encrypted:""`
+       PublicIps     []string     `json:"publicIps"`
+       CertificateId string       `json:"certificateId"`
+       KubeConfig    string       `json:"kubeConfig" encrypted:""`
+       GitOpsParam   GitOpsParams `json:"gitOpsParam"`
 }
 
 //HubObjectStatus
index 64e5218..2349c05 100644 (file)
@@ -14,7 +14,7 @@ Usage of ./certctl:
   -certName string
         Certificate name to query
   -ip string
-        SDEWAN Central Controller IP Address (default "10.233.117.240")
+        SDEWAN Central Controller IP Address (default "127.0.0.1")
   -overlay string
         Overlay the cert belongs to
   -port string
index 84bb183..2ebc19e 100644 (file)
@@ -26,7 +26,7 @@ type CertData struct {
 }
 
 func main(){
-    servIp := flag.String("ip", "10.233.117.240", "SDEWAN Central Controller IP Address")
+    servIp := flag.String("ip", "127.0.0.1", "SDEWAN Central Controller IP Address")
     servPort := flag.String("port", "9015", "SDEWAN Central Controller Port Number")
     overlayName := flag.String("overlay", "", "Overlay the cert belongs to")
     certName := flag.String("certName", "", "Certificate name to query")
index 870d1a1..7cceab1 100644 (file)
@@ -5,12 +5,15 @@ package cmd
 
 import (
        "bytes"
+       "encoding/base64"
        "encoding/json"
        "fmt"
        "io"
        "io/ioutil"
+       "log"
        neturl "net/url"
        "os"
+       "reflect"
        "strings"
 
        "text/template"
@@ -84,6 +87,104 @@ func NewRestClientToken(token string) RestyClient {
        return Client
 }
 
+// process a field with pre-defined functions
+func processField(s string) string{
+       i := strings.Index(s, ":")
+       if i != -1 {
+               f := strings.ToLower(strings.TrimSpace(s[:i]))
+               v := s[i+1:]
+               switch f {
+               case "file":
+                       filename := processField(v)
+                       filecontent, err := ioutil.ReadFile(filename)
+                       if err != nil {
+                               log.Println(err)
+                       } else {
+                               return string(filecontent)
+                       }
+               case "b64en":
+                       return base64.StdEncoding.EncodeToString([]byte(processField(v)))
+               case "b64de":
+                       dec, err := base64.StdEncoding.DecodeString(v)
+                       if err != nil {
+                               log.Println(err)
+                       } else {
+                               return string(dec)
+                       }
+               default:
+               }
+       }
+
+       return s
+}
+
+// process object field with pre-defined functions
+func processObject(o interface{}) (interface{}, error){
+    t := reflect.TypeOf(o)
+    switch t.Kind() {
+    case reflect.String:
+        return processField(o.(string)), nil
+    case reflect.Ptr:
+        v := reflect.ValueOf(o)
+        newv, err := processObject(v.Elem().Interface())
+        if err != nil {
+            return nil, err
+        }
+        v.Elem().Set(reflect.ValueOf(newv))
+        return o, nil
+    case reflect.Struct:
+        v := reflect.ValueOf(&o).Elem()
+        newv := reflect.New(v.Elem().Type()).Elem()
+        newv.Set(v.Elem())
+        for k := 0; k < t.NumField(); k++ {
+            if t.Field(k).IsExported() {
+                newf, err := processObject(newv.Field(k).Interface())
+                if err != nil {
+                    return nil, err
+                }
+                newv.Field(k).Set(reflect.ValueOf(newf))
+            }
+        }
+        return newv.Interface(), nil
+    case reflect.Array:
+        v := reflect.ValueOf(o)
+        newv := reflect.New(t).Elem()
+        for k:=0; k<v.Len(); k++ {
+            newf, err := processObject(v.Index(k).Interface())
+            if err != nil {
+                return nil, err
+            }
+            newv.Index(k).Set(reflect.ValueOf(newf))
+        }
+        return newv.Interface(), nil
+    case reflect.Slice:
+        v := reflect.ValueOf(o)
+        newv := reflect.MakeSlice(t, v.Len(), v.Len())
+        for  k:=0; k<v.Len(); k++ {
+            newf, err := processObject(v.Index(k).Interface())
+            if err != nil {
+                return nil, err
+            }
+            newv.Index(k).Set(reflect.ValueOf(newf))
+        }
+        return newv.Interface(), nil
+    case reflect.Map:
+        v := reflect.ValueOf(o)
+        newv := reflect.MakeMap(t)
+        for _, k := range v.MapKeys() {
+            newf, err := processObject(v.MapIndex(k).Interface())
+            if err != nil {
+                return nil, err
+            }
+            newv.SetMapIndex(k, reflect.ValueOf(newf))
+        }
+        return newv.Interface(), nil
+    default:
+    }
+
+    return o, nil
+}
+
 // readResources reads all the resources in the file provided
 func readResources() []Resources {
        // TODO: Remove Assumption only one file
@@ -139,6 +240,8 @@ func readResources() []Resources {
                        break
                }
                body := &ewoBody{Meta: doc.Meta, Spec: doc.Spec}
+               pbody, _ := processObject(body)
+               body = pbody.(*ewoBody)
                jsonBody, err := json.Marshal(body)
                if err != nil {
                        fmt.Println("Invalid input Yaml! Exiting..", err)
index 0092a43..c05e524 100644 (file)
@@ -1,6 +1,6 @@
 module tools/ewoctl
 
-go 1.17
+go 1.18
 
 require (
        github.com/go-resty/resty/v2 v2.3.0
diff --git a/central-controller/src/scc/tools/ewoctl/test-cases/cluster-sync-object.yaml b/central-controller/src/scc/tools/ewoctl/test-cases/cluster-sync-object.yaml
new file mode 100644 (file)
index 0000000..0fea931
--- /dev/null
@@ -0,0 +1,18 @@
+---
+# creating cluster-sync-obj
+version: ewo/v1
+resourceContext:
+  anchor: overlays/overlay1/cluster-sync-objects
+metadata:
+  name: cso2
+  description:
+  userData1:
+  userData2:
+spec:
+  kv:
+    - gitType: github
+    - userName: xxxx
+    - gitToken: ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+    - repoName: test-flux
+    - branch: main
+
diff --git a/central-controller/src/scc/tools/ewoctl/test-cases/prerequisites.yaml b/central-controller/src/scc/tools/ewoctl/test-cases/prerequisites.yaml
new file mode 100644 (file)
index 0000000..f2c34eb
--- /dev/null
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: Apache-2.0
+# Copyright (c) 2020 Intel Corporation
+
+# creating overlay1
+version: ewo/v1
+resourceContext:
+  anchor: overlays
+metadata:
+  name: overlay1
+  description:
+  userData1:
+  userData2:
+
+---
+# creating proposal
+version: ewo/v1
+resourceContext:
+  anchor: overlays/overlay1/proposals
+metadata:
+  name: proposal1
+  description:
+  userData1:
+  userData2:
+spec:
+  encryption: aes256
+  hash: sha256
+  dhGroup: modp4096
+
+---
+# creating proposal2
+version: ewo/v1
+resourceContext:
+  anchor: overlays/overlay1/proposals
+metadata:
+  name: proposal2
+  description:
+  userData1:
+  userData2:
+spec:
+  encryption: aes256
+  hash: sha256
+  dhGroup: modp4096
+
+---
+version: ewo/v1
+resourceContext:
+  anchor: overlays/overlay1/ipranges
+metadata:
+  name: ipr2
+  description:
+  userData1:
+  userData2:
+spec:
+  subnet: "192.169.0.1"
+  minIp: 1
+  maxIp: 10
+
+---
+version: ewo/v1
+resourceContext:
+  anchor: provider/ipranges
+metadata:
+  name: iprange-ctrl
+  description:
+  userData1:
+  userData2:
+spec:
+  subnet: "192.168.0.1"
+  minIp: 1
+  maxIp: 10
+
diff --git a/central-controller/src/scc/tools/ewoctl/test-cases/sample-edge-registration.yaml b/central-controller/src/scc/tools/ewoctl/test-cases/sample-edge-registration.yaml
new file mode 100644 (file)
index 0000000..54c7ded
--- /dev/null
@@ -0,0 +1,21 @@
+---
+# creating edge-1
+version: ewo/v1
+resourceContext:
+  anchor: overlays/overlay1/devices
+metadata:
+  name: edge-1
+  description:
+  userData1:
+  userData2:
+spec:
+  forceHubConnectivity: true
+  proxyHubPort: 65536
+  useHub4Internet: true
+  dedicatedSFC: false
+  certificateId: "device-edge-1-cert"
+  gitOpsParam:
+    gitOpsType: "fluxcd"
+    gitOpsResourceObject: "cso2"
+    gitOpsReferenceObject: "cso2"
+
diff --git a/central-controller/src/scc/tools/ewoctl/test-cases/sample-hub-edge-connection-registration.yaml b/central-controller/src/scc/tools/ewoctl/test-cases/sample-hub-edge-connection-registration.yaml
new file mode 100644 (file)
index 0000000..9555048
--- /dev/null
@@ -0,0 +1,14 @@
+---
+# creating edge-1
+version: ewo/v1
+resourceContext:
+  anchor: overlays/overlay1/hubs/huba/devices
+metadata:
+  name: hubaedge1conn
+  description:
+  userData1:
+  userData2:
+spec:
+  device: "edge-1"
+  isDelegateHub: true
+
diff --git a/central-controller/src/scc/tools/ewoctl/test-cases/sample-hub-registration.yaml b/central-controller/src/scc/tools/ewoctl/test-cases/sample-hub-registration.yaml
new file mode 100644 (file)
index 0000000..317af53
--- /dev/null
@@ -0,0 +1,19 @@
+---
+# creating huba
+version: ewo/v1
+resourceContext:
+  anchor: overlays/overlay1/hubs
+metadata:
+  name: huba
+  description:
+  userData1:
+  userData2:
+spec:
+  publicIps:
+  - 10.10.70.39
+  certificateId: "hub-huba-cert"
+  gitOpsParam:
+    gitOpsType: "fluxcd"
+    gitOpsResourceObject: "cso2"
+    gitOpsReferenceObject: "cso2"
+
index 4daef3a..7f1c52d 100644 (file)
@@ -1,5 +1,5 @@
 // SPDX-License-Identifier: Apache-2.0
-// Copyright (c) 2020 Intel Corporation
+// Copyright (c) 2020-2022 Intel Corporation
 
 package logutils
 
@@ -9,26 +9,78 @@ import (
        "runtime"
        "strings"
 
-       "gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/infra/config"
        log "github.com/sirupsen/logrus"
+       "gitlab.com/project-emco/core/emco-base/src/orchestrator/pkg/infra/config"
 )
 
-//Fields is type that will be used by the calling function
+// Fields is type that will be used by the calling function
 type Fields map[string]interface{}
 
+// Log levels, in order from highest criticality to highest verbosity:
+// - panic, fatal, error, warn, info, debug, trace.
+// Setting a particular level will show logs of that level and all levels of higher criticality.
+
 func init() {
        // Log as JSON instead of the default ASCII formatter.
        log.SetFormatter(&log.JSONFormatter{TimestampFormat: "2006-01-02T15:04:05.999999999Z07:00"})
+       // This formatter doesn't support sorting per json keys. It's up to the troubleshooter to
+       // pretty-print and/or filter the log. One option to pretty-print while highlighting log levels
+       // is to use humanlog (https://github.com/aybabtme/humanlog):
+       //
+       // From log file:
+       //   $ humanlog < log.txt
+       // Real time from log file:
+       //   $ tail -f log.txt | humanlog
+       // Real time from binary:
+       //   $ ./rsync 2>&1 | humanlog
+       // Real time from docker:
+       //   $ docker logs 8e37625ccc9d -f | humanlog
+
+       if strings.EqualFold(config.GetConfiguration().LogLevel, "panic") {
+               log.SetLevel(log.PanicLevel)
+       }
+       if strings.EqualFold(config.GetConfiguration().LogLevel, "fatal") {
+               log.SetLevel(log.FatalLevel)
+       }
+       if strings.EqualFold(config.GetConfiguration().LogLevel, "error") {
+               log.SetLevel(log.ErrorLevel)
+       }
        if strings.EqualFold(config.GetConfiguration().LogLevel, "warn") {
                log.SetLevel(log.WarnLevel)
-
        }
        if strings.EqualFold(config.GetConfiguration().LogLevel, "info") {
                log.SetLevel(log.InfoLevel)
        }
+       if strings.EqualFold(config.GetConfiguration().LogLevel, "debug") {
+               log.SetLevel(log.DebugLevel)
+       }
+       if strings.EqualFold(config.GetConfiguration().LogLevel, "trace") {
+               log.SetLevel(log.TraceLevel)
+       }
+}
+
+func Panic(msg string, fields Fields) {
+       if pc, file, line, ok := runtime.Caller(1); ok {
+               if fields != nil {
+                       fields["SOURCE"] = fmt.Sprintf("file[%s:%d] func[%s]", path.Base(file), line, path.Base(runtime.FuncForPC(pc).Name()))
+               }
+               log.WithFields(log.Fields(fields)).Panic(msg)
+       } else {
+               log.WithFields(log.Fields(fields)).Panic(msg)
+       }
+}
+
+func Fatal(msg string, fields Fields) {
+       if pc, file, line, ok := runtime.Caller(1); ok {
+               if fields != nil {
+                       fields["SOURCE"] = fmt.Sprintf("file[%s:%d] func[%s]", path.Base(file), line, path.Base(runtime.FuncForPC(pc).Name()))
+               }
+               log.WithFields(log.Fields(fields)).Fatal(msg)
+       } else {
+               log.WithFields(log.Fields(fields)).Fatal(msg)
+       }
 }
 
-// Error uses the fields provided and logs
 func Error(msg string, fields Fields) {
        if pc, file, line, ok := runtime.Caller(1); ok {
                if fields != nil {
@@ -40,7 +92,6 @@ func Error(msg string, fields Fields) {
        }
 }
 
-// Warn uses the fields provided and logs
 func Warn(msg string, fields Fields) {
        if pc, file, line, ok := runtime.Caller(1); ok {
                if fields != nil {
@@ -52,7 +103,6 @@ func Warn(msg string, fields Fields) {
        }
 }
 
-// Info uses the fields provided and logs
 func Info(msg string, fields Fields) {
        if pc, file, line, ok := runtime.Caller(1); ok {
                if fields != nil {
@@ -64,6 +114,28 @@ func Info(msg string, fields Fields) {
        }
 }
 
+func Debug(msg string, fields Fields) {
+       if pc, file, line, ok := runtime.Caller(1); ok {
+               if fields != nil {
+                       fields["SOURCE"] = fmt.Sprintf("file[%s:%d] func[%s]", path.Base(file), line, path.Base(runtime.FuncForPC(pc).Name()))
+               }
+               log.WithFields(log.Fields(fields)).Debug(msg)
+       } else {
+               log.WithFields(log.Fields(fields)).Debug(msg)
+       }
+}
+
+func Trace(msg string, fields Fields) {
+       if pc, file, line, ok := runtime.Caller(1); ok {
+               if fields != nil {
+                       fields["SOURCE"] = fmt.Sprintf("file[%s:%d] func[%s]", path.Base(file), line, path.Base(runtime.FuncForPC(pc).Name()))
+               }
+               log.WithFields(log.Fields(fields)).Trace(msg)
+       } else {
+               log.WithFields(log.Fields(fields)).Trace(msg)
+       }
+}
+
 // SetLoglevel .. Set Log level
 func SetLoglevel(level log.Level) {
        log.SetLevel(level)
diff --git a/images/sdewan_overview.jpg b/images/sdewan_overview.jpg
new file mode 100644 (file)
index 0000000..3945c3b
Binary files /dev/null and b/images/sdewan_overview.jpg differ
index 7db76d6..5b2aec8 100644 (file)
@@ -2,13 +2,23 @@
 
 Akraino ICN SDEWAN platform includes below files/folders:
 
-* crd-ctrlr
-includes source code of sdewan controller, CR definition and sample yaml file to define the CR
+* crd-ctrlr :includes source code of sdewan controller, CR definition and sample yaml file to define the CR
 
-* cnf
-includes source code of sdewan cnf
+* cnf: includes source code of sdewan cnf
 
-* test
-includes test steps and scripts for an E2E test scenario
+* test: includes test steps and scripts for an E2E test scenario
+
+* deployment: includes deployment files for cnf and crd controller
 
 * README.md: this file
+
+## Steps to setup Akraino ICN SDEWAN platform in Hub/Edge Cluster
+
+## Prerequisite
+**Install Kubernetes(verified on v1.23.3)**
+
+## Install CNF and CRD Controller
+**Please follow the README.md under deployment folder for installation**
+
+## Install Monitor
+**Please follow the README.md under ../central-controller/deployments/kubernetes/monitor-deploy folder for installation**
diff --git a/platform/cnf-openwrt/doc/Accelerated_by_Intel_QAT_Default.md b/platform/cnf-openwrt/doc/Accelerated_by_Intel_QAT_Default.md
new file mode 100644 (file)
index 0000000..1406b9a
--- /dev/null
@@ -0,0 +1,128 @@
+---
+* [Introduction](#introduction)
+* [Requirements](#requirements)
+    * [Hardware](#hardware)
+    * [Software](#software)
+* [Quick Start](#quick-start)
+* [SDEWAN CNF setup](#sdewan-cnf-setup)
+
+## Introduction
+
+Intel® QuickAssist Technology (Intel® QAT) is developed by Intel® and runs on Intel® architecture providing security and compression acceleration capabilities to improve performance and efficiency. It offloads workloads from the CPU to hardware. Server, networking, big data, and storage applications use Intel® QAT to offload compute-intensive operations, such as:
+
+- Symmetric cryptography functions, including cipher operations and authentication operations.
+- Public key functions, including RSA, Diffie-Hellman, and elliptic curve cryptography.
+- Compression and decompression functions, including DEFLATE.
+
+Intel® QAT has improved the function of in many areas, such as Hadoop* acceleration, OpenSSL integration, SDN and NFV Solutions Boost and so on. On a more detailed level, we can get the benefits from the following aspects:
+
+- 4G LTE and 5G encryption algorithm offload for mobile gateways and infrastructure.
+- VPN traffic acceleration, with up to 50 Gbps crypto throughput and support for IPsec and SSL acceleration.
+- Compression/decompression, with up to 24 Gbps throughput.
+- I/O virtualization using PCI-SIG Single-Root I/O Virtualization (SR-IOV).
+
+---
+
+## Requirements
+
+### Hardware
+
+- Intel® QAT device on your machine with the following forms:
+  - Chipset: Intel® C6xx series chipset
+  - PCIE: Intel® QuickAssist Adapter 89xx
+  - SoC: Intel Atom® C3000 processor series (Denverton NS) / Rangeley
+
+### Software
+
+- Linux Kernel Version >= 4.16
+
+Notice that the `linux kernel` we used should be version >=4.16. Because the [bug](https://patchwork.ozlabs.org/project/netdev/patch/2f86c9d7c39cfad21fdb353a183b12651fc5efe9.1583311902.git.lucien.xin@gmail.com/) before v4.15 and fixed [here]( https://elixir.bootlin.com/linux/v4.16-rc1/source/net/xfrm/xfrm_device.c).
+
+---
+
+## Quick Start
+
+SDEWAN CNF is configurated to use LKCF (Linux* Kernel Crypto Framework) as the encryption engine to setup IPSec tunnel between clusters, and LKCF will use Intel® QAT automatically to accelerate data traffic when the QAT device available. To guarantee the performance of traffic processing, when deploy SDEWAN CNF in a k8s cluster with Intel QuickAssist Technology (QAT) device plugin enabled, we recommend deploying the Intel® QAT device plugin and SDEWAN CNF in separated nodes. 
+This can be done by configuring podAntiAffinity in intel qat plugin’s deployment file. e.g. if SDEWAN CNF is deployed on a node with label “sdewan-cnf:enabled”, then add the following podAntiAffinity rule for QAT device plugin:
+
+```yaml
+...
+spec:
+  affinity:
+    podAntiAffinity:
+      requiredDuringSchedulingIgnoredDuringExecution:
+      - labelSelector:
+        matchExpressions:
+        - key: sdewan-cnf
+          operator: In
+          values:
+          - enabled
+...
+
+```
+
+---
+
+## SDEWAN CNF setup
+
+We recommend you to deploy the SDEWAN CNF using the `sdewan_cnf` helm chart part in this [guide](https://github.com/akraino-edge-stack/icn-sdwan/blob/master/platform/deployment/README.md). And suppose you have successfully deployed two CNFs and the network between them is accessible.
+
+Note: We have two pre-build images `sdewan-cnf:qat` and `sdewan-cnf:qat-test`, you can use them to deploy you strongswan ipsec tunnel accelerated by your host Intel® QAT devices, what you should do is only replace the image field in Helm chart value. `qat-test` tag is used for performance testing. Of course, you can configure your custemer images based on `openwrt` to enbale QAT accelerating workload as the following guide.
+
+```shell
+# We use `kubectl exec` to login to the CNF container and execute the following command
+# under root to enable QAT and load testing tools
+
+opkg update
+opkg install vim
+opkg install iperf3
+opkg install pciutils
+opkg install tcpdump
+opkg install strongswan-mod-af-alg
+
+# Remove the alogrithm plugin not in linux kernel crypto framework
+cd /etc/strongswan.d/charon
+rm aes.conf des.conf sha1.conf sha2.conf fips-prf.conf md5.conf
+```
+
+Then we can configure the ipsec configuration and secrets for the tunnel established.
+
+```yaml
+# Add the following section to each container under `/etc/ipsec.conf`, note that they
+# would have an opposite value in left* and right*
+conn con
+       authby=secret
+       auto=add
+       type=tunnel
+       leftid=l
+       left=<left_container_ip>
+       rightid=r
+       right=<right_container_ip>
+       ike=aes256-sha1-modp2048
+       keyexchange=ikev2
+       ikelifetime=28800s
+       esp=aes256-sha1-modp1536
+```
+
+and add the following simple key to `/etc/ipsec.secrets`
+
+```yaml
+l r : PSK 'AAABBCCDD'
+```
+
+Then we can start `ipsec` and load the connection to test the performance
+
+```shell
+ipsec restart
+ipsec up con
+
+# On one CNF, we start a `iperf3` server to receive the packages
+iperfs -s
+# On another CNF, we use `iperf3` as a client to send packages to server
+# TCP
+iperf3 -c <iperf3_server_ip> -b 10g
+# UDP
+iperf3 -c <iperf3_server_ip> -l 64k -b 10g -u
+
+```
+
index d884593..b6b5d54 100644 (file)
@@ -60,15 +60,15 @@ remote_validator = {
     {name="force_crypto_proposal", validator=function(value) return utils.in_array(value, {"0", "1"}) end, message="invalid input for ForceCryptoProposal"},
     {name="local_public_cert",
         load_func=function(value) return load_cert(value["local_public_cert"]) end,
-        save_func=function(value) return save_cert(value["local_public_cert"], "/etc/ipsec.d/certs/" .. value["name"] .. "_public.pem") end,
+        save_func=function(value) return save_cert(value, "local_public_cert") end,
         delete_func=function(value) return delete_cert(value["local_public_cert"]) end},
     {name="local_private_cert",
         load_func=function(value) return load_cert(value["local_private_cert"]) end,
-        save_func=function(value) return save_cert(value["local_private_cert"], "/etc/ipsec.d/private/" .. value["name"] .. "_private.pem") end,
+        save_func=function(value) return save_cert(value, "local_private_cert") end,
         delete_func=function(value) return delete_cert(value["local_private_cert"]) end},
     {name="shared_ca",
         load_func=function(value) return load_cert(value["shared_ca"]) end,
-        save_func=function(value) return save_cert(value["shared_ca"], "/etc/ipsec.d/cacerts/" .. value["name"] .. "_ca.pem") end,
+        save_func=function(value) return save_cert(value, "shared_ca") end,
         delete_func=function(value) return delete_cert(value["shared_ca"]) end},
     {name="connections", item_validator=connection_validator, message="invalid connection",
         load_func=function(value) return load_connection(value) end,
@@ -143,37 +143,69 @@ function is_vti_enabled(value)
     return true, mode
 end
 
-function save_cert(content, path)
-    local file = io.open(path, "w")
-    if file == nil then
-        return false, "Can not generate cert at: " .. path
+function save_cert(content, info_type)
+    local index = 0
+    local name = content["name"]
+    local path_list
+    for ctx in string.gmatch(content[info_type], "([^___^]+)") do
+       local path = ""
+       if info_type == "local_private_cert" then
+               path = "/etc/ipsec.d/private/" .. name .. "_private_" .. index .. ".pem"
+               utils.decode_and_save_to_file(ctx, path)
+       elseif info_type == "local_public_cert" then
+               path = "/etc/ipsec.d/certs/" .. name .. "_public_" .. index .. ".pem"
+               utils.decode_and_save_to_file(ctx, path)
+       else 
+               path = "/etc/ipsec.d/cacerts/" .. name .. "_ca_" .. index .. ".pem"
+               utils.decode_and_save_to_file(ctx, path)
+       end
+       if index == 0 then
+               path_list = path
+        else
+               path_list = path_list .. ", " .. path
+       end
+       index = index + 1
+           
     end
+    return true, path_list
 
-    mime.decode("base64")
-    local cert = mime.unb64(content)
-    file:write(cert)
-    file:close()
-
-    return true, path
 end
 
-function load_cert(path)
-    if path == nil then
-        return nil
+function load_cert(paths)
+    if paths == nil then
+           return nil
     end
-    content = path
-    local file = io.open(path, "rb")
-    if file ~= nil then
-        content = file:read "*a"
-        file:close()
+    local certs
+    local index = 0
+    for path in string.gmatch(paths, "([^,^]+)") do
+        if path == nil then
+            return nil
+        end
+        content = path
+        local file = io.open(path, "rb")
+        if file ~= nil then
+            content = file:read "*a"
+            file:close()
+        end
+        mime.decode("base64")
+        local c = mime.unb64(content)
+       if index == 0 then
+               certs = c
+       else
+               certs = certs .. "\n" .. c
+       end
+       index = index + 1
     end
-    mime.decode("base64")
-    return mime.unb64(content)
+    return certs
 end
 
-function delete_cert(path)
-    if path ~= nil then
-        os.remove(path)
+function delete_cert(paths)
+    if paths ~= nil then
+        for path in string.gmatch(paths, "([^,^]+)") do
+            if path ~= nil then
+                os.remove(path)
+            end
+        end
     end
 end
 
index 11fc015..0af9477 100644 (file)
@@ -5,6 +5,7 @@ module("luci.controller.rest_v1.utils", package.seeall)
 
 local json = require "luci.jsonc"
 local uci = require "luci.model.uci"
+local mime = require "mime"
 REQUEST_METHOD = "REQUEST_METHOD"
 
 function index()
@@ -854,3 +855,16 @@ function response_message(message)
     luci.http.prepare_content("text/plain")
     luci.http.write(message)
 end
+
+-- decode content and save to file
+function decode_and_save_to_file(content, path)
+    local file = io.open(path, "w")
+    if file == nil then
+        return false, "Cannot generate cert at: " .. path
+    end
+
+    mime.decode("base64")
+    local cert = mime.unb64(content)
+    file:write(cert)
+    file:close()
+end
index a4664fb..a98b355 100644 (file)
@@ -9,7 +9,87 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
+  creationTimestamp: null
+  name: cnfhubsites.batch.sdewan.akraino.org
+spec:
+  group: batch.sdewan.akraino.org
+  names:
+    kind: CNFHubSite
+    listKind: CNFHubSiteList
+    plural: cnfhubsites
+    singular: cnfhubsite
+  scope: Namespaced
+  versions:
+  - name: v1alpha1
+    schema:
+      openAPIV3Schema:
+        description: CNFHubSite is the Schema for the cnfhubsites API
+        properties:
+          apiVersion:
+            description: 'APIVersion defines the versioned schema of this representation
+              of an object. Servers should convert recognized schemas to the latest
+              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+            type: string
+          kind:
+            description: 'Kind is a string value representing the REST resource this
+              object represents. Servers may infer this from the endpoint the client
+              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+            type: string
+          metadata:
+            type: object
+          spec:
+            description: CNFHubSiteSpec defines the desired state of CNFHubSite
+            properties:
+              devicepip:
+                type: string
+              hubip:
+                type: string
+              site:
+                type: string
+              subnet:
+                type: string
+              type:
+                type: string
+            type: object
+          status:
+            description: CNFHubSiteStatus defines the observed state of CNFHubSiteStatus
+            properties:
+              devicepip:
+                type: string
+              hubip:
+                type: string
+              message:
+                type: string
+              remoteips:
+                items:
+                  type: string
+                type: array
+              subnet:
+                type: string
+              type:
+                description: 'INSERT ADDITIONAL STATUS FIELD - define observed state
+                  of cluster Important: Run "make" to regenerate code after modifying
+                  this file'
+                type: string
+            type: object
+        type: object
+    served: true
+    storage: true
+    subresources:
+      status: {}
+status:
+  acceptedNames:
+    kind: ""
+    plural: ""
+  conditions: []
+  storedVersions: []
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  annotations:
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnflocalservices.batch.sdewan.akraino.org
 spec:
@@ -85,7 +165,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfnats.batch.sdewan.akraino.org
 spec:
@@ -176,7 +256,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfrouterules.batch.sdewan.akraino.org
 spec:
@@ -253,7 +333,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfroutes.batch.sdewan.akraino.org
 spec:
@@ -329,7 +409,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfservices.batch.sdewan.akraino.org
 spec:
@@ -361,6 +441,8 @@ spec:
           spec:
             description: CNFServiceSpec defines the desired state of CNFService
             properties:
+              cidr:
+                type: string
               dport:
                 type: string
               fullname:
@@ -369,20 +451,19 @@ spec:
                 type: string
             type: object
           status:
-            description: status subsource used for Sdewan rule CRDs
+            description: CNFServiceStatus defines the observed state of CNFLocalServiceStatus
             properties:
-              appliedGeneration:
-                format: int64
-                type: integer
-              appliedTime:
-                format: date-time
+              dport:
                 type: string
               message:
                 type: string
-              state:
+              port:
+                type: string
+              sip:
+                description: 'INSERT ADDITIONAL STATUS FIELD - define observed state
+                  of cluster Important: Run "make" to regenerate code after modifying
+                  this file'
                 type: string
-            required:
-            - state
             type: object
         type: object
     served: true
@@ -400,7 +481,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfstatuses.batch.sdewan.akraino.org
 spec:
@@ -482,7 +563,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewalldnats.batch.sdewan.akraino.org
 spec:
@@ -577,7 +658,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallforwardings.batch.sdewan.akraino.org
 spec:
@@ -653,7 +734,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallrules.batch.sdewan.akraino.org
 spec:
@@ -754,7 +835,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallsnats.batch.sdewan.akraino.org
 spec:
@@ -849,7 +930,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallzones.batch.sdewan.akraino.org
 spec:
@@ -954,7 +1035,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: ipsechosts.batch.sdewan.akraino.org
 spec:
@@ -1086,7 +1167,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: ipsecproposals.batch.sdewan.akraino.org
 spec:
@@ -1163,7 +1244,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: ipsecsites.batch.sdewan.akraino.org
 spec:
@@ -1297,7 +1378,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: mwan3policies.batch.sdewan.akraino.org
 spec:
@@ -1382,7 +1463,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: mwan3rules.batch.sdewan.akraino.org
 spec:
@@ -1474,7 +1555,109 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
+  creationTimestamp: null
+  name: networkfirewallrules.batch.sdewan.akraino.org
+spec:
+  group: batch.sdewan.akraino.org
+  names:
+    kind: NetworkFirewallRule
+    listKind: NetworkFirewallRuleList
+    plural: networkfirewallrules
+    singular: networkfirewallrule
+  scope: Namespaced
+  versions:
+  - name: v1alpha1
+    schema:
+      openAPIV3Schema:
+        description: NetworkFirewallRule is the Schema for the networkfirewallrules
+          API
+        properties:
+          apiVersion:
+            description: 'APIVersion defines the versioned schema of this representation
+              of an object. Servers should convert recognized schemas to the latest
+              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+            type: string
+          kind:
+            description: 'Kind is a string value representing the REST resource this
+              object represents. Servers may infer this from the endpoint the client
+              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+            type: string
+          metadata:
+            type: object
+          spec:
+            description: NetworkFirewallRuleSpec defines the desired state of NetworkFirewallRule
+            properties:
+              dest:
+                type: string
+              dest_ip:
+                type: string
+              dest_port:
+                type: string
+              extra:
+                type: string
+              family:
+                type: string
+              icmp_type:
+                items:
+                  type: string
+                type: array
+              mark:
+                type: string
+              name:
+                description: Foo is an example field of NetworkFirewallRule. Edit
+                  NetworkFirewallRule_types.go to remove/update
+                type: string
+              proto:
+                type: string
+              set_mark:
+                type: string
+              set_xmark:
+                type: string
+              src:
+                type: string
+              src_ip:
+                type: string
+              src_mac:
+                type: string
+              src_port:
+                type: string
+              target:
+                type: string
+            type: object
+          status:
+            description: status subsource used for Sdewan rule CRDs
+            properties:
+              appliedGeneration:
+                format: int64
+                type: integer
+              appliedTime:
+                format: date-time
+                type: string
+              message:
+                type: string
+              state:
+                type: string
+            required:
+            - state
+            type: object
+        type: object
+    served: true
+    storage: true
+    subresources:
+      status: {}
+status:
+  acceptedNames:
+    kind: ""
+    plural: ""
+  conditions: []
+  storedVersions: []
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  annotations:
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: sdewanapplications.batch.sdewan.akraino.org
 spec:
@@ -1508,6 +1691,8 @@ spec:
             properties:
               appNamespace:
                 type: string
+              cnfPort:
+                type: string
               podSelector:
                 description: A label selector is a label query over a set of resources.
                   The result of matchLabels and matchExpressions are ANDed. An empty
@@ -1555,6 +1740,8 @@ spec:
                       are ANDed.
                     type: object
                 type: object
+              servicePort:
+                type: string
             type: object
           status:
             description: status subsource used for Sdewan rule CRDs
@@ -1635,7 +1822,7 @@ rules:
 - apiGroups:
   - ""
   resources:
-  - secrets
+  - services
   verbs:
   - create
   - delete
@@ -1645,33 +1832,41 @@ rules:
   - update
   - watch
 - apiGroups:
-  - ""
+  - apps
   resources:
-  - services
+  - deployments
   verbs:
-  - create
-  - delete
   - get
   - list
-  - patch
-  - update
   - watch
 - apiGroups:
   - apps
   resources:
-  - deployments
+  - deployments/status
   verbs:
   - get
   - list
   - watch
 - apiGroups:
-  - apps
+  - batch.sdewan.akraino.org
   resources:
-  - deployments/status
+  - cnfhubsites
   verbs:
+  - create
+  - delete
   - get
   - list
+  - patch
+  - update
   - watch
+- apiGroups:
+  - batch.sdewan.akraino.org
+  resources:
+  - cnfhubsites/status
+  verbs:
+  - get
+  - patch
+  - update
 - apiGroups:
   - batch.sdewan.akraino.org
   resources:
@@ -1992,6 +2187,26 @@ rules:
   - get
   - patch
   - update
+- apiGroups:
+  - batch.sdewan.akraino.org
+  resources:
+  - networkfirewallrules
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - batch.sdewan.akraino.org
+  resources:
+  - networkfirewallrules/status
+  verbs:
+  - get
+  - patch
+  - update
 - apiGroups:
   - batch.sdewan.akraino.org
   resources:
@@ -2012,6 +2227,15 @@ rules:
   - get
   - patch
   - update
+- apiGroups:
+  - coordination.k8s.io
+  resources:
+  - leases
+  verbs:
+  - create
+  - get
+  - list
+  - update
 - apiGroups:
   - rbac.authorization.k8s.io
   resources:
@@ -2208,7 +2432,7 @@ webhooks:
   - apiGroups:
     - batch.sdewan.akraino.org
     apiVersions:
-    - v1
+    - v1alpha1
     operations:
     - CREATE
     - UPDATE
@@ -2216,6 +2440,7 @@ webhooks:
     resources:
     - mwan3policies
     - mwan3rules
+    - networkfirewallrules
     - firewallzones
     - firewallforwardings
     - firewallrules
@@ -2226,6 +2451,7 @@ webhooks:
     - cnfrouterules
     - cnfservices
     - cnflocalservices
+    - cnfhubsites
     - cnfstatuses
     - sdewanapplication
     - ipsecproposals
@@ -2247,12 +2473,14 @@ webhooks:
     - batch.sdewan.akraino.org
     apiVersions:
     - v1
+    - v1alpha1
     operations:
     - UPDATE
     resources:
     - deployments
     - mwan3policies
     - mwan3rules
+    - networkfirewallrules
     - firewallzones
     - firewallforwardings
     - firewallrules
@@ -2263,6 +2491,7 @@ webhooks:
     - cnfroutes
     - cnfrouterules
     - cnflocalservices
+    - cnfhubsites
     - cnfstatuses
     - sdewanapplication
     - ipsecproposals
index e1a124b..d31ff36 100644 (file)
@@ -89,7 +89,7 @@ ifeq (, $(shell which controller-gen))
        CONTROLLER_GEN_TMP_DIR=$$(mktemp -d) ;\
        cd $$CONTROLLER_GEN_TMP_DIR ;\
        go mod init tmp ;\
-       go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.7.0 ;\
+       go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.8.0 ;\
        rm -rf $$CONTROLLER_GEN_TMP_DIR ;\
        }
 CONTROLLER_GEN=$(GOBIN)/controller-gen
index 2007d3c..8e18844 100644 (file)
@@ -1,4 +1,6 @@
 domain: sdewan.akraino.org
+layout: go.kubebuilder.io/v3
+projectName: sdewan.akraino.org/sdewan
 repo: sdewan.akraino.org/sdewan
 resources:
 - group: batch
index 6cdea45..6bda9d1 100644 (file)
@@ -12,7 +12,6 @@ import (
 
        rbacv1 "k8s.io/api/rbac/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-       "k8s.io/apimachinery/pkg/runtime"
        "k8s.io/apimachinery/pkg/types"
        ctrl "sigs.k8s.io/controller-runtime"
        "sigs.k8s.io/controller-runtime/pkg/client"
@@ -66,7 +65,7 @@ func wildMatchArray(p []rune, pindex int, v []rune, vindex int) bool {
        return true
 }
 
-// +kubebuilder:webhook:path=/validate-sdewan-bucket-permission,mutating=false,failurePolicy=fail,groups="batch.sdewan.akraino.org",resources=mwan3policies;mwan3rules;networkfirewallrules;firewallzones;firewallforwardings;firewallrules;firewallsnats;firewalldnats;cnfnats;cnfroutes;cnfrouterules;cnfservices;cnflocalservices;cnfhubsites;cnfstatuses;sdewanapplication;ipsecproposals;ipsechosts;ipsecsites,verbs=create;update;delete,versions=v1,name=validate-sdewan-bucket.akraino.org,admissionReviewVersions=v1,sideEffects=none
+// +kubebuilder:webhook:path=/validate-sdewan-bucket-permission,mutating=false,failurePolicy=fail,groups="batch.sdewan.akraino.org",resources=mwan3policies;mwan3rules;networkfirewallrules;firewallzones;firewallforwardings;firewallrules;firewallsnats;firewalldnats;cnfnats;cnfroutes;cnfrouterules;cnfservices;cnflocalservices;cnfhubsites;cnfstatuses;sdewanapplication;ipsecproposals;ipsechosts;ipsecsites,verbs=create;update;delete,versions=v1alpha1,name=validate-sdewan-bucket.akraino.org,admissionReviewVersions=v1,sideEffects=none
 
 // bucketPermissionValidator validates Pods
 type bucketPermissionValidator struct {
@@ -102,7 +101,7 @@ func (v *bucketPermissionValidator) Handle(ctx context.Context, req admission.Re
        }
        var meta metav1.ObjectMeta
        var err error
-       var obj runtime.Object
+       var obj client.Object
        switch req.Kind.Kind {
        case "Mwan3Policy":
                obj = &Mwan3Policy{}
index 9499bd6..c012bb0 100644 (file)
@@ -1,83 +1,83 @@
-// SPDX-License-Identifier: Apache-2.0\r
-// Copyright (c) 2021 Intel Corporation\r
-package v1alpha1\r
-\r
-import (\r
-       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"\r
-)\r
-\r
-// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!\r
-// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.\r
-\r
-// CNFHubSiteStatus defines the observed state of CNFHubSiteStatus\r
-type CNFHubSiteStatus struct {\r
-       // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster\r
-       // Important: Run "make" to regenerate code after modifying this file\r
-       // +optional\r
-       Type      string `json:"type,omitempty"`\r
-       // +optional\r
-       SiteIPs []string `json:"remoteips,omitempty"`\r
-       // +optional\r
-       Subnet    string `json:"subnet,omitempty"`\r
-       // +optional\r
-       HubIP     string `json:"hubip,omitempty"`\r
-       // +optional\r
-       DevicePIP string `json:"devicepip,omitempty"`\r
-       // +optional\r
-       Message string `json:"message,omitempty"`\r
-}\r
-\r
-func (c *CNFHubSiteStatus) IsEqual(s *CNFHubSiteStatus) bool {\r
-       if c.Type != s.Type ||\r
-           c.Subnet != s.Subnet ||\r
-               c.HubIP != s.HubIP ||\r
-               c.DevicePIP != s.DevicePIP {\r
-               return false\r
-       }\r
-\r
-       if len(c.SiteIPs) != len(s.SiteIPs) {\r
-               return false\r
-       }\r
-\r
-       for i := 0; i < len(c.SiteIPs); i++ {\r
-               if c.SiteIPs[i] != s.SiteIPs[i] {\r
-                       return false\r
-               }\r
-       }\r
-\r
-       return true\r
-}\r
-\r
-// CNFHubSiteSpec defines the desired state of CNFHubSite\r
-type CNFHubSiteSpec struct {\r
-       Type      string `json:"type,omitempty"`\r
-       Site      string `json:"site,omitempty"`\r
-       Subnet    string `json:"subnet,omitempty"`\r
-       HubIP     string `json:"hubip,omitempty"`\r
-       DevicePIP string `json:"devicepip,omitempty"`\r
-}\r
-\r
-// +kubebuilder:object:root=true\r
-// +kubebuilder:subresource:status\r
-\r
-// CNFHubSite is the Schema for the cnfhubsites API\r
-type CNFHubSite struct {\r
-       metav1.TypeMeta   `json:",inline"`\r
-       metav1.ObjectMeta `json:"metadata,omitempty"`\r
-\r
-       Spec   CNFHubSiteSpec   `json:"spec,omitempty"`\r
-       Status CNFHubSiteStatus `json:"status,omitempty"`\r
-}\r
-\r
-// +kubebuilder:object:root=true\r
-\r
-// CNFHubSiteList contains a list of CNFHubSite\r
-type CNFHubSiteList struct {\r
-       metav1.TypeMeta `json:",inline"`\r
-       metav1.ListMeta `json:"metadata,omitempty"`\r
-       Items           []CNFHubSite `json:"items"`\r
-}\r
-\r
-func init() {\r
-       SchemeBuilder.Register(&CNFHubSite{}, &CNFHubSiteList{})\r
-}
\ No newline at end of file
+// SPDX-License-Identifier: Apache-2.0
+// Copyright (c) 2021 Intel Corporation
+package v1alpha1
+
+import (
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!
+// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.
+
+// CNFHubSiteStatus defines the observed state of CNFHubSiteStatus
+type CNFHubSiteStatus struct {
+       // INSERT ADDITIONAL STATUS FIELD - define observed state of cluster
+       // Important: Run "make" to regenerate code after modifying this file
+       // +optional
+       Type string `json:"type,omitempty"`
+       // +optional
+       SiteIPs []string `json:"remoteips,omitempty"`
+       // +optional
+       Subnet string `json:"subnet,omitempty"`
+       // +optional
+       HubIP string `json:"hubip,omitempty"`
+       // +optional
+       DevicePIP string `json:"devicepip,omitempty"`
+       // +optional
+       Message string `json:"message,omitempty"`
+}
+
+func (c *CNFHubSiteStatus) IsEqual(s *CNFHubSiteStatus) bool {
+       if c.Type != s.Type ||
+               c.Subnet != s.Subnet ||
+               c.HubIP != s.HubIP ||
+               c.DevicePIP != s.DevicePIP {
+               return false
+       }
+
+       if len(c.SiteIPs) != len(s.SiteIPs) {
+               return false
+       }
+
+       for i := 0; i < len(c.SiteIPs); i++ {
+               if c.SiteIPs[i] != s.SiteIPs[i] {
+                       return false
+               }
+       }
+
+       return true
+}
+
+// CNFHubSiteSpec defines the desired state of CNFHubSite
+type CNFHubSiteSpec struct {
+       Type      string `json:"type,omitempty"`
+       Site      string `json:"site,omitempty"`
+       Subnet    string `json:"subnet,omitempty"`
+       HubIP     string `json:"hubip,omitempty"`
+       DevicePIP string `json:"devicepip,omitempty"`
+}
+
+// +kubebuilder:object:root=true
+// +kubebuilder:subresource:status
+
+// CNFHubSite is the Schema for the cnfhubsites API
+type CNFHubSite struct {
+       metav1.TypeMeta   `json:",inline"`
+       metav1.ObjectMeta `json:"metadata,omitempty"`
+
+       Spec   CNFHubSiteSpec   `json:"spec,omitempty"`
+       Status CNFHubSiteStatus `json:"status,omitempty"`
+}
+
+// +kubebuilder:object:root=true
+
+// CNFHubSiteList contains a list of CNFHubSite
+type CNFHubSiteList struct {
+       metav1.TypeMeta `json:",inline"`
+       metav1.ListMeta `json:"metadata,omitempty"`
+       Items           []CNFHubSite `json:"items"`
+}
+
+func init() {
+       SchemeBuilder.Register(&CNFHubSite{}, &CNFHubSiteList{})
+}
index 3bc589f..074a094 100644 (file)
@@ -14,6 +14,7 @@ type CNFServiceSpec struct {
        FullName string `json:"fullname,omitempty"`
        Port     string `json:"port,omitempty"`
        DPort    string `json:"dport,omitempty"`
+       CIDR     string `json:"cidr,omitempty"`
 }
 
 func (c *CNFServiceStatus) IsEqual(s *CNFServiceStatus) bool {
index c43e2b2..c50f058 100644 (file)
@@ -29,7 +29,7 @@ func SetupLabelValidateWebhookWithManager(mgr ctrl.Manager) error {
        return nil
 }
 
-// +kubebuilder:webhook:path=/validate-label,mutating=false,failurePolicy=fail,groups=apps;batch.sdewan.akraino.org,resources=mwan3policies;mwan3rules;networkfirewallrules;firewallzones;firewallforwardings;firewallrules;firewallsnats;firewalldnats;cnfnats;cnfservices;cnfroutes;cnfrouterules;cnflocalservices;cnfhubsites;cnfstatuses;sdewanapplication;ipsecproposals;ipsechosts;ipsecsites,verbs=update,versions=v1,name=validate-label.akraino.org,admissionReviewVersions=v1,sideEffects=none
+// +kubebuilder:webhook:path=/validate-label,mutating=false,failurePolicy=fail,groups=apps;batch.sdewan.akraino.org,resources=deployments;mwan3policies;mwan3rules;networkfirewallrules;firewallzones;firewallforwardings;firewallrules;firewallsnats;firewalldnats;cnfnats;cnfservices;cnfroutes;cnfrouterules;cnflocalservices;cnfhubsites;cnfstatuses;sdewanapplication;ipsecproposals;ipsechosts;ipsecsites,verbs=update,versions=v1;v1alpha1,name=validate-label.akraino.org,admissionReviewVersions=v1,sideEffects=none
 
 type labelValidator struct {
        Client  client.Client
index 563df73..348899f 100644 (file)
@@ -1,59 +1,59 @@
-// SPDX-License-Identifier: Apache-2.0\r
-// Copyright (c) 2021 Intel Corporation\r
-package v1alpha1\r
-\r
-import (\r
-       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"\r
-)\r
-\r
-// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!\r
-// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.\r
-\r
-// NetworkFirewallRuleSpec defines the desired state of NetworkFirewallRule\r
-type NetworkFirewallRuleSpec struct {\r
-       // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster\r
-       // Important: Run "make" to regenerate code after modifying this file\r
-\r
-       // Foo is an example field of NetworkFirewallRule. Edit NetworkFirewallRule_types.go to remove/update\r
-       Name     string   `json:"name,omitempty"`\r
-       Src      string   `json:"src,omitempty"`\r
-       SrcIp    string   `json:"src_ip,omitempty"`\r
-       SrcMac   string   `json:"src_mac,omitempty"`\r
-       SrcPort  string   `json:"src_port,omitempty"`\r
-       Proto    string   `json:"proto,omitempty"`\r
-       IcmpType []string `json:"icmp_type,omitempty"`\r
-       Dest     string   `json:"dest,omitempty"`\r
-       DestIp   string   `json:"dest_ip,omitempty"`\r
-       DestPort string   `json:"dest_port,omitempty"`\r
-       Mark     string   `json:"mark,omitempty"`\r
-       Target   string   `json:"target,omitempty"`\r
-       SetMark  string   `json:"set_mark,omitempty"`\r
-       SetXmark string   `json:"set_xmark,omitempty"`\r
-       Family   string   `json:"family,omitempty"`\r
-       Extra    string   `json:"extra,omitempty"`\r
-}\r
-\r
-// +kubebuilder:object:root=true\r
-// +kubebuilder:subresource:status\r
-\r
-// NetworkFirewallRule is the Schema for the networkfirewallrules API\r
-type NetworkFirewallRule struct {\r
-       metav1.TypeMeta   `json:",inline"`\r
-       metav1.ObjectMeta `json:"metadata,omitempty"`\r
-\r
-       Spec   NetworkFirewallRuleSpec `json:"spec,omitempty"`\r
-       Status SdewanStatus     `json:"status,omitempty"`\r
-}\r
-\r
-// +kubebuilder:object:root=true\r
-\r
-// NetworkFirewallRuleList contains a list of NetworkFirewallRule\r
-type NetworkFirewallRuleList struct {\r
-       metav1.TypeMeta `json:",inline"`\r
-       metav1.ListMeta `json:"metadata,omitempty"`\r
-       Items           []NetworkFirewallRule `json:"items"`\r
-}\r
-\r
-func init() {\r
-       SchemeBuilder.Register(&NetworkFirewallRule{}, &NetworkFirewallRuleList{})\r
-}\r
+// SPDX-License-Identifier: Apache-2.0
+// Copyright (c) 2021 Intel Corporation
+package v1alpha1
+
+import (
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// EDIT THIS FILE!  THIS IS SCAFFOLDING FOR YOU TO OWN!
+// NOTE: json tags are required.  Any new fields you add must have json tags for the fields to be serialized.
+
+// NetworkFirewallRuleSpec defines the desired state of NetworkFirewallRule
+type NetworkFirewallRuleSpec struct {
+       // INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
+       // Important: Run "make" to regenerate code after modifying this file
+
+       // Foo is an example field of NetworkFirewallRule. Edit NetworkFirewallRule_types.go to remove/update
+       Name     string   `json:"name,omitempty"`
+       Src      string   `json:"src,omitempty"`
+       SrcIp    string   `json:"src_ip,omitempty"`
+       SrcMac   string   `json:"src_mac,omitempty"`
+       SrcPort  string   `json:"src_port,omitempty"`
+       Proto    string   `json:"proto,omitempty"`
+       IcmpType []string `json:"icmp_type,omitempty"`
+       Dest     string   `json:"dest,omitempty"`
+       DestIp   string   `json:"dest_ip,omitempty"`
+       DestPort string   `json:"dest_port,omitempty"`
+       Mark     string   `json:"mark,omitempty"`
+       Target   string   `json:"target,omitempty"`
+       SetMark  string   `json:"set_mark,omitempty"`
+       SetXmark string   `json:"set_xmark,omitempty"`
+       Family   string   `json:"family,omitempty"`
+       Extra    string   `json:"extra,omitempty"`
+}
+
+// +kubebuilder:object:root=true
+// +kubebuilder:subresource:status
+
+// NetworkFirewallRule is the Schema for the networkfirewallrules API
+type NetworkFirewallRule struct {
+       metav1.TypeMeta   `json:",inline"`
+       metav1.ObjectMeta `json:"metadata,omitempty"`
+
+       Spec   NetworkFirewallRuleSpec `json:"spec,omitempty"`
+       Status SdewanStatus            `json:"status,omitempty"`
+}
+
+// +kubebuilder:object:root=true
+
+// NetworkFirewallRuleList contains a list of NetworkFirewallRule
+type NetworkFirewallRuleList struct {
+       metav1.TypeMeta `json:",inline"`
+       metav1.ListMeta `json:"metadata,omitempty"`
+       Items           []NetworkFirewallRule `json:"items"`
+}
+
+func init() {
+       SchemeBuilder.Register(&NetworkFirewallRule{}, &NetworkFirewallRuleList{})
+}
index 01f6b5a..e1682ea 100644 (file)
@@ -13,6 +13,8 @@ import (
 type SdewanApplicationSpec struct {
        PodSelector  *metav1.LabelSelector `json:"podSelector,omitempty"`
        AppNamespace string                `json:"appNamespace,omitempty"`
+       ServicePort  string                `json:"servicePort,omitempty"`
+       CNFPort      string                `json:"cnfPort,omitempty"`
 }
 
 type ApplicationInfo struct {
index 13322eb..b74dea4 100644 (file)
@@ -9,52 +9,52 @@
 package v1alpha1
 
 import (
-        "k8s.io/apimachinery/pkg/apis/meta/v1"
-        "k8s.io/apimachinery/pkg/runtime"
+       "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "k8s.io/apimachinery/pkg/runtime"
 )
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *ApplicationInfo) DeepCopyInto(out *ApplicationInfo) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ApplicationInfo.
 func (in *ApplicationInfo) DeepCopy() *ApplicationInfo {
-        if in == nil {
-                return nil
-        }
-        out := new(ApplicationInfo)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(ApplicationInfo)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in BucketPermission) DeepCopyInto(out *BucketPermission) {
-        {
-                in := &in
-                *out = make(BucketPermission, len(*in))
-                for key, val := range *in {
-                        var outVal []string
-                        if val == nil {
-                                (*out)[key] = nil
-                        } else {
-                                in, out := &val, &outVal
-                                *out = make([]string, len(*in))
-                                copy(*out, *in)
-                        }
-                        (*out)[key] = outVal
-                }
-        }
+       {
+               in := &in
+               *out = make(BucketPermission, len(*in))
+               for key, val := range *in {
+                       var outVal []string
+                       if val == nil {
+                               (*out)[key] = nil
+                       } else {
+                               in, out := &val, &outVal
+                               *out = make([]string, len(*in))
+                               copy(*out, *in)
+                       }
+                       (*out)[key] = outVal
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BucketPermission.
 func (in BucketPermission) DeepCopy() BucketPermission {
-        if in == nil {
-                return nil
-        }
-        out := new(BucketPermission)
-        in.DeepCopyInto(out)
-        return *out
+       if in == nil {
+               return nil
+       }
+       out := new(BucketPermission)
+       in.DeepCopyInto(out)
+       return *out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -153,1349 +153,1349 @@ func (in *CNFHubSiteStatus) DeepCopy() *CNFHubSiteStatus {
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFLocalService) DeepCopyInto(out *CNFLocalService) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        out.Spec = in.Spec
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       out.Spec = in.Spec
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFLocalService.
 func (in *CNFLocalService) DeepCopy() *CNFLocalService {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFLocalService)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFLocalService)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFLocalService) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFLocalServiceList) DeepCopyInto(out *CNFLocalServiceList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]CNFLocalService, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]CNFLocalService, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFLocalServiceList.
 func (in *CNFLocalServiceList) DeepCopy() *CNFLocalServiceList {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFLocalServiceList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFLocalServiceList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFLocalServiceList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFLocalServiceSpec) DeepCopyInto(out *CNFLocalServiceSpec) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFLocalServiceSpec.
 func (in *CNFLocalServiceSpec) DeepCopy() *CNFLocalServiceSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFLocalServiceSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFLocalServiceSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFLocalServiceStatus) DeepCopyInto(out *CNFLocalServiceStatus) {
-        *out = *in
-        if in.RemoteIPs != nil {
-                in, out := &in.RemoteIPs, &out.RemoteIPs
-                *out = make([]string, len(*in))
-                copy(*out, *in)
-        }
+       *out = *in
+       if in.RemoteIPs != nil {
+               in, out := &in.RemoteIPs, &out.RemoteIPs
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFLocalServiceStatus.
 func (in *CNFLocalServiceStatus) DeepCopy() *CNFLocalServiceStatus {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFLocalServiceStatus)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFLocalServiceStatus)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFNAT) DeepCopyInto(out *CNFNAT) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        out.Spec = in.Spec
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       out.Spec = in.Spec
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFNAT.
 func (in *CNFNAT) DeepCopy() *CNFNAT {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFNAT)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFNAT)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFNAT) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFNATList) DeepCopyInto(out *CNFNATList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]CNFNAT, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]CNFNAT, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFNATList.
 func (in *CNFNATList) DeepCopy() *CNFNATList {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFNATList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFNATList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFNATList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFNATSpec) DeepCopyInto(out *CNFNATSpec) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFNATSpec.
 func (in *CNFNATSpec) DeepCopy() *CNFNATSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFNATSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFNATSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFRoute) DeepCopyInto(out *CNFRoute) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        out.Spec = in.Spec
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       out.Spec = in.Spec
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFRoute.
 func (in *CNFRoute) DeepCopy() *CNFRoute {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFRoute)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFRoute)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFRoute) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFRouteList) DeepCopyInto(out *CNFRouteList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]CNFRoute, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]CNFRoute, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFRouteList.
 func (in *CNFRouteList) DeepCopy() *CNFRouteList {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFRouteList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFRouteList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFRouteList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFRouteRule) DeepCopyInto(out *CNFRouteRule) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        out.Spec = in.Spec
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       out.Spec = in.Spec
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFRouteRule.
 func (in *CNFRouteRule) DeepCopy() *CNFRouteRule {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFRouteRule)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFRouteRule)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFRouteRule) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFRouteRuleList) DeepCopyInto(out *CNFRouteRuleList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]CNFRouteRule, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]CNFRouteRule, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFRouteRuleList.
 func (in *CNFRouteRuleList) DeepCopy() *CNFRouteRuleList {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFRouteRuleList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFRouteRuleList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFRouteRuleList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFRouteRuleSpec) DeepCopyInto(out *CNFRouteRuleSpec) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFRouteRuleSpec.
 func (in *CNFRouteRuleSpec) DeepCopy() *CNFRouteRuleSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFRouteRuleSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFRouteRuleSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFRouteSpec) DeepCopyInto(out *CNFRouteSpec) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFRouteSpec.
 func (in *CNFRouteSpec) DeepCopy() *CNFRouteSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFRouteSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFRouteSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFService) DeepCopyInto(out *CNFService) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        out.Spec = in.Spec
-        out.Status = in.Status
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       out.Spec = in.Spec
+       out.Status = in.Status
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFService.
 func (in *CNFService) DeepCopy() *CNFService {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFService)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFService)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFService) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFServiceList) DeepCopyInto(out *CNFServiceList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]CNFService, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]CNFService, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFServiceList.
 func (in *CNFServiceList) DeepCopy() *CNFServiceList {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFServiceList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFServiceList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFServiceList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFServiceSpec) DeepCopyInto(out *CNFServiceSpec) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFServiceSpec.
 func (in *CNFServiceSpec) DeepCopy() *CNFServiceSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFServiceSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFServiceSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFServiceStatus) DeepCopyInto(out *CNFServiceStatus) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFServiceStatus.
 func (in *CNFServiceStatus) DeepCopy() *CNFServiceStatus {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFServiceStatus)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFServiceStatus)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFStatus) DeepCopyInto(out *CNFStatus) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        out.Spec = in.Spec
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       out.Spec = in.Spec
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFStatus.
 func (in *CNFStatus) DeepCopy() *CNFStatus {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFStatus)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFStatus)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFStatus) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFStatusInformation) DeepCopyInto(out *CNFStatusInformation) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFStatusInformation.
 func (in *CNFStatusInformation) DeepCopy() *CNFStatusInformation {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFStatusInformation)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFStatusInformation)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFStatusList) DeepCopyInto(out *CNFStatusList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]CNFStatus, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]CNFStatus, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFStatusList.
 func (in *CNFStatusList) DeepCopy() *CNFStatusList {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFStatusList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFStatusList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *CNFStatusList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFStatusSpec) DeepCopyInto(out *CNFStatusSpec) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFStatusSpec.
 func (in *CNFStatusSpec) DeepCopy() *CNFStatusSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFStatusSpec)
-        in.DeepCopyInto(out)
-        return out
-}
+       if in == nil {
+               return nil
+       }
+       out := new(CNFStatusSpec)
+       in.DeepCopyInto(out)
+       return out
+}
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *CNFStatusStatus) DeepCopyInto(out *CNFStatusStatus) {
-        *out = *in
-        if in.AppliedTime != nil {
-                in, out := &in.AppliedTime, &out.AppliedTime
-                *out = (*in).DeepCopy()
-        }
-        if in.Information != nil {
-                in, out := &in.Information, &out.Information
-                *out = make([]CNFStatusInformation, len(*in))
-                copy(*out, *in)
-        }
+       *out = *in
+       if in.AppliedTime != nil {
+               in, out := &in.AppliedTime, &out.AppliedTime
+               *out = (*in).DeepCopy()
+       }
+       if in.Information != nil {
+               in, out := &in.Information, &out.Information
+               *out = make([]CNFStatusInformation, len(*in))
+               copy(*out, *in)
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CNFStatusStatus.
 func (in *CNFStatusStatus) DeepCopy() *CNFStatusStatus {
-        if in == nil {
-                return nil
-        }
-        out := new(CNFStatusStatus)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(CNFStatusStatus)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Connection) DeepCopyInto(out *Connection) {
-        *out = *in
-        if in.CryptoProposal != nil {
-                in, out := &in.CryptoProposal, &out.CryptoProposal
-                *out = make([]string, len(*in))
-                copy(*out, *in)
-        }
+       *out = *in
+       if in.CryptoProposal != nil {
+               in, out := &in.CryptoProposal, &out.CryptoProposal
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Connection.
 func (in *Connection) DeepCopy() *Connection {
-        if in == nil {
-                return nil
-        }
-        out := new(Connection)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(Connection)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallDNAT) DeepCopyInto(out *FirewallDNAT) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        out.Spec = in.Spec
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       out.Spec = in.Spec
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallDNAT.
 func (in *FirewallDNAT) DeepCopy() *FirewallDNAT {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallDNAT)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallDNAT)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *FirewallDNAT) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallDNATList) DeepCopyInto(out *FirewallDNATList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]FirewallDNAT, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]FirewallDNAT, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallDNATList.
 func (in *FirewallDNATList) DeepCopy() *FirewallDNATList {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallDNATList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallDNATList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *FirewallDNATList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallDNATSpec) DeepCopyInto(out *FirewallDNATSpec) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallDNATSpec.
 func (in *FirewallDNATSpec) DeepCopy() *FirewallDNATSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallDNATSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallDNATSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallForwarding) DeepCopyInto(out *FirewallForwarding) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        out.Spec = in.Spec
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       out.Spec = in.Spec
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallForwarding.
 func (in *FirewallForwarding) DeepCopy() *FirewallForwarding {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallForwarding)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallForwarding)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *FirewallForwarding) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallForwardingList) DeepCopyInto(out *FirewallForwardingList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]FirewallForwarding, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]FirewallForwarding, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallForwardingList.
 func (in *FirewallForwardingList) DeepCopy() *FirewallForwardingList {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallForwardingList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallForwardingList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *FirewallForwardingList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallForwardingSpec) DeepCopyInto(out *FirewallForwardingSpec) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallForwardingSpec.
 func (in *FirewallForwardingSpec) DeepCopy() *FirewallForwardingSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallForwardingSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallForwardingSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallRule) DeepCopyInto(out *FirewallRule) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        in.Spec.DeepCopyInto(&out.Spec)
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       in.Spec.DeepCopyInto(&out.Spec)
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallRule.
 func (in *FirewallRule) DeepCopy() *FirewallRule {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallRule)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallRule)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *FirewallRule) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallRuleList) DeepCopyInto(out *FirewallRuleList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]FirewallRule, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]FirewallRule, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallRuleList.
 func (in *FirewallRuleList) DeepCopy() *FirewallRuleList {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallRuleList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallRuleList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *FirewallRuleList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallRuleSpec) DeepCopyInto(out *FirewallRuleSpec) {
-        *out = *in
-        if in.IcmpType != nil {
-                in, out := &in.IcmpType, &out.IcmpType
-                *out = make([]string, len(*in))
-                copy(*out, *in)
-        }
+       *out = *in
+       if in.IcmpType != nil {
+               in, out := &in.IcmpType, &out.IcmpType
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallRuleSpec.
 func (in *FirewallRuleSpec) DeepCopy() *FirewallRuleSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallRuleSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallRuleSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallSNAT) DeepCopyInto(out *FirewallSNAT) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        out.Spec = in.Spec
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       out.Spec = in.Spec
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallSNAT.
 func (in *FirewallSNAT) DeepCopy() *FirewallSNAT {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallSNAT)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallSNAT)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *FirewallSNAT) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallSNATList) DeepCopyInto(out *FirewallSNATList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]FirewallSNAT, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]FirewallSNAT, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallSNATList.
 func (in *FirewallSNATList) DeepCopy() *FirewallSNATList {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallSNATList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallSNATList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *FirewallSNATList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallSNATSpec) DeepCopyInto(out *FirewallSNATSpec) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallSNATSpec.
 func (in *FirewallSNATSpec) DeepCopy() *FirewallSNATSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallSNATSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallSNATSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallZone) DeepCopyInto(out *FirewallZone) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        in.Spec.DeepCopyInto(&out.Spec)
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       in.Spec.DeepCopyInto(&out.Spec)
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallZone.
 func (in *FirewallZone) DeepCopy() *FirewallZone {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallZone)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallZone)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *FirewallZone) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallZoneList) DeepCopyInto(out *FirewallZoneList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]FirewallZone, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]FirewallZone, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallZoneList.
 func (in *FirewallZoneList) DeepCopy() *FirewallZoneList {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallZoneList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallZoneList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *FirewallZoneList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *FirewallZoneSpec) DeepCopyInto(out *FirewallZoneSpec) {
-        *out = *in
-        if in.Network != nil {
-                in, out := &in.Network, &out.Network
-                *out = make([]string, len(*in))
-                copy(*out, *in)
-        }
-        if in.MasqSrc != nil {
-                in, out := &in.MasqSrc, &out.MasqSrc
-                *out = make([]string, len(*in))
-                copy(*out, *in)
-        }
-        if in.MasqDest != nil {
-                in, out := &in.MasqDest, &out.MasqDest
-                *out = make([]string, len(*in))
-                copy(*out, *in)
-        }
-        if in.Subnet != nil {
-                in, out := &in.Subnet, &out.Subnet
-                *out = make([]string, len(*in))
-                copy(*out, *in)
-        }
+       *out = *in
+       if in.Network != nil {
+               in, out := &in.Network, &out.Network
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       if in.MasqSrc != nil {
+               in, out := &in.MasqSrc, &out.MasqSrc
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       if in.MasqDest != nil {
+               in, out := &in.MasqDest, &out.MasqDest
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       if in.Subnet != nil {
+               in, out := &in.Subnet, &out.Subnet
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FirewallZoneSpec.
 func (in *FirewallZoneSpec) DeepCopy() *FirewallZoneSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(FirewallZoneSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(FirewallZoneSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *IpsecHost) DeepCopyInto(out *IpsecHost) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        in.Spec.DeepCopyInto(&out.Spec)
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       in.Spec.DeepCopyInto(&out.Spec)
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpsecHost.
 func (in *IpsecHost) DeepCopy() *IpsecHost {
-        if in == nil {
-                return nil
-        }
-        out := new(IpsecHost)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(IpsecHost)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *IpsecHost) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *IpsecHostList) DeepCopyInto(out *IpsecHostList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]IpsecHost, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]IpsecHost, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpsecHostList.
 func (in *IpsecHostList) DeepCopy() *IpsecHostList {
-        if in == nil {
-                return nil
-        }
-        out := new(IpsecHostList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(IpsecHostList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *IpsecHostList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *IpsecHostSpec) DeepCopyInto(out *IpsecHostSpec) {
-        *out = *in
-        if in.CryptoProposal != nil {
-                in, out := &in.CryptoProposal, &out.CryptoProposal
-                *out = make([]string, len(*in))
-                copy(*out, *in)
-        }
-        if in.Connections != nil {
-                in, out := &in.Connections, &out.Connections
-                *out = make([]Connection, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       if in.CryptoProposal != nil {
+               in, out := &in.CryptoProposal, &out.CryptoProposal
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       if in.Connections != nil {
+               in, out := &in.Connections, &out.Connections
+               *out = make([]Connection, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpsecHostSpec.
 func (in *IpsecHostSpec) DeepCopy() *IpsecHostSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(IpsecHostSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(IpsecHostSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *IpsecProposal) DeepCopyInto(out *IpsecProposal) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        out.Spec = in.Spec
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       out.Spec = in.Spec
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpsecProposal.
 func (in *IpsecProposal) DeepCopy() *IpsecProposal {
-        if in == nil {
-                return nil
-        }
-        out := new(IpsecProposal)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(IpsecProposal)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *IpsecProposal) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *IpsecProposalList) DeepCopyInto(out *IpsecProposalList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]IpsecProposal, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]IpsecProposal, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpsecProposalList.
 func (in *IpsecProposalList) DeepCopy() *IpsecProposalList {
-        if in == nil {
-                return nil
-        }
-        out := new(IpsecProposalList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(IpsecProposalList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *IpsecProposalList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *IpsecProposalSpec) DeepCopyInto(out *IpsecProposalSpec) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpsecProposalSpec.
 func (in *IpsecProposalSpec) DeepCopy() *IpsecProposalSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(IpsecProposalSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(IpsecProposalSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *IpsecSite) DeepCopyInto(out *IpsecSite) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        in.Spec.DeepCopyInto(&out.Spec)
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       in.Spec.DeepCopyInto(&out.Spec)
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpsecSite.
 func (in *IpsecSite) DeepCopy() *IpsecSite {
-        if in == nil {
-                return nil
-        }
-        out := new(IpsecSite)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(IpsecSite)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *IpsecSite) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *IpsecSiteList) DeepCopyInto(out *IpsecSiteList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]IpsecSite, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]IpsecSite, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpsecSiteList.
 func (in *IpsecSiteList) DeepCopy() *IpsecSiteList {
-        if in == nil {
-                return nil
-        }
-        out := new(IpsecSiteList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(IpsecSiteList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *IpsecSiteList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *IpsecSiteSpec) DeepCopyInto(out *IpsecSiteSpec) {
-        *out = *in
-        if in.CryptoProposal != nil {
-                in, out := &in.CryptoProposal, &out.CryptoProposal
-                *out = make([]string, len(*in))
-                copy(*out, *in)
-        }
-        if in.Connections != nil {
-                in, out := &in.Connections, &out.Connections
-                *out = make([]SiteConnection, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       if in.CryptoProposal != nil {
+               in, out := &in.CryptoProposal, &out.CryptoProposal
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
+       if in.Connections != nil {
+               in, out := &in.Connections, &out.Connections
+               *out = make([]SiteConnection, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IpsecSiteSpec.
 func (in *IpsecSiteSpec) DeepCopy() *IpsecSiteSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(IpsecSiteSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(IpsecSiteSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Mwan3Policy) DeepCopyInto(out *Mwan3Policy) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        in.Spec.DeepCopyInto(&out.Spec)
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       in.Spec.DeepCopyInto(&out.Spec)
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Mwan3Policy.
 func (in *Mwan3Policy) DeepCopy() *Mwan3Policy {
-        if in == nil {
-                return nil
-        }
-        out := new(Mwan3Policy)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(Mwan3Policy)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *Mwan3Policy) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Mwan3PolicyList) DeepCopyInto(out *Mwan3PolicyList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]Mwan3Policy, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]Mwan3Policy, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Mwan3PolicyList.
 func (in *Mwan3PolicyList) DeepCopy() *Mwan3PolicyList {
-        if in == nil {
-                return nil
-        }
-        out := new(Mwan3PolicyList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(Mwan3PolicyList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *Mwan3PolicyList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Mwan3PolicyMember) DeepCopyInto(out *Mwan3PolicyMember) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Mwan3PolicyMember.
 func (in *Mwan3PolicyMember) DeepCopy() *Mwan3PolicyMember {
-        if in == nil {
-                return nil
-        }
-        out := new(Mwan3PolicyMember)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(Mwan3PolicyMember)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Mwan3PolicySpec) DeepCopyInto(out *Mwan3PolicySpec) {
-        *out = *in
-        if in.Members != nil {
-                in, out := &in.Members, &out.Members
-                *out = make([]Mwan3PolicyMember, len(*in))
-                copy(*out, *in)
-        }
+       *out = *in
+       if in.Members != nil {
+               in, out := &in.Members, &out.Members
+               *out = make([]Mwan3PolicyMember, len(*in))
+               copy(*out, *in)
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Mwan3PolicySpec.
 func (in *Mwan3PolicySpec) DeepCopy() *Mwan3PolicySpec {
-        if in == nil {
-                return nil
-        }
-        out := new(Mwan3PolicySpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(Mwan3PolicySpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Mwan3Rule) DeepCopyInto(out *Mwan3Rule) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        out.Spec = in.Spec
-        in.Status.DeepCopyInto(&out.Status)
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       out.Spec = in.Spec
+       in.Status.DeepCopyInto(&out.Status)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Mwan3Rule.
 func (in *Mwan3Rule) DeepCopy() *Mwan3Rule {
-        if in == nil {
-                return nil
-        }
-        out := new(Mwan3Rule)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(Mwan3Rule)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *Mwan3Rule) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Mwan3RuleList) DeepCopyInto(out *Mwan3RuleList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]Mwan3Rule, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]Mwan3Rule, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Mwan3RuleList.
 func (in *Mwan3RuleList) DeepCopy() *Mwan3RuleList {
-        if in == nil {
-                return nil
-        }
-        out := new(Mwan3RuleList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(Mwan3RuleList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *Mwan3RuleList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Mwan3RuleSpec) DeepCopyInto(out *Mwan3RuleSpec) {
-        *out = *in
+       *out = *in
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Mwan3RuleSpec.
 func (in *Mwan3RuleSpec) DeepCopy() *Mwan3RuleSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(Mwan3RuleSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(Mwan3RuleSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
@@ -1579,119 +1579,119 @@ func (in *NetworkFirewallRuleSpec) DeepCopy() *NetworkFirewallRuleSpec {
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *SdewanApplication) DeepCopyInto(out *SdewanApplication) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
-        in.Spec.DeepCopyInto(&out.Spec)
-        in.Status.DeepCopyInto(&out.Status)
-        out.AppInfo = in.AppInfo
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
+       in.Spec.DeepCopyInto(&out.Spec)
+       in.Status.DeepCopyInto(&out.Status)
+       out.AppInfo = in.AppInfo
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SdewanApplication.
 func (in *SdewanApplication) DeepCopy() *SdewanApplication {
-        if in == nil {
-                return nil
-        }
-        out := new(SdewanApplication)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(SdewanApplication)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *SdewanApplication) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *SdewanApplicationList) DeepCopyInto(out *SdewanApplicationList) {
-        *out = *in
-        out.TypeMeta = in.TypeMeta
-        in.ListMeta.DeepCopyInto(&out.ListMeta)
-        if in.Items != nil {
-                in, out := &in.Items, &out.Items
-                *out = make([]SdewanApplication, len(*in))
-                for i := range *in {
-                        (*in)[i].DeepCopyInto(&(*out)[i])
-                }
-        }
+       *out = *in
+       out.TypeMeta = in.TypeMeta
+       in.ListMeta.DeepCopyInto(&out.ListMeta)
+       if in.Items != nil {
+               in, out := &in.Items, &out.Items
+               *out = make([]SdewanApplication, len(*in))
+               for i := range *in {
+                       (*in)[i].DeepCopyInto(&(*out)[i])
+               }
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SdewanApplicationList.
 func (in *SdewanApplicationList) DeepCopy() *SdewanApplicationList {
-        if in == nil {
-                return nil
-        }
-        out := new(SdewanApplicationList)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(SdewanApplicationList)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
 func (in *SdewanApplicationList) DeepCopyObject() runtime.Object {
-        if c := in.DeepCopy(); c != nil {
-                return c
-        }
-        return nil
+       if c := in.DeepCopy(); c != nil {
+               return c
+       }
+       return nil
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *SdewanApplicationSpec) DeepCopyInto(out *SdewanApplicationSpec) {
-        *out = *in
-        if in.PodSelector != nil {
-                in, out := &in.PodSelector, &out.PodSelector
-                *out = new(v1.LabelSelector)
-                (*in).DeepCopyInto(*out)
-        }
+       *out = *in
+       if in.PodSelector != nil {
+               in, out := &in.PodSelector, &out.PodSelector
+               *out = new(v1.LabelSelector)
+               (*in).DeepCopyInto(*out)
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SdewanApplicationSpec.
 func (in *SdewanApplicationSpec) DeepCopy() *SdewanApplicationSpec {
-        if in == nil {
-                return nil
-        }
-        out := new(SdewanApplicationSpec)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(SdewanApplicationSpec)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *SdewanStatus) DeepCopyInto(out *SdewanStatus) {
-        *out = *in
-        if in.AppliedTime != nil {
-                in, out := &in.AppliedTime, &out.AppliedTime
-                *out = (*in).DeepCopy()
-        }
+       *out = *in
+       if in.AppliedTime != nil {
+               in, out := &in.AppliedTime, &out.AppliedTime
+               *out = (*in).DeepCopy()
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SdewanStatus.
 func (in *SdewanStatus) DeepCopy() *SdewanStatus {
-        if in == nil {
-                return nil
-        }
-        out := new(SdewanStatus)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(SdewanStatus)
+       in.DeepCopyInto(out)
+       return out
 }
 
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *SiteConnection) DeepCopyInto(out *SiteConnection) {
-        *out = *in
-        if in.CryptoProposal != nil {
-                in, out := &in.CryptoProposal, &out.CryptoProposal
-                *out = make([]string, len(*in))
-                copy(*out, *in)
-        }
+       *out = *in
+       if in.CryptoProposal != nil {
+               in, out := &in.CryptoProposal, &out.CryptoProposal
+               *out = make([]string, len(*in))
+               copy(*out, *in)
+       }
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SiteConnection.
 func (in *SiteConnection) DeepCopy() *SiteConnection {
-        if in == nil {
-                return nil
-        }
-        out := new(SiteConnection)
-        in.DeepCopyInto(out)
-        return out
+       if in == nil {
+               return nil
+       }
+       out := new(SiteConnection)
+       in.DeepCopyInto(out)
+       return out
 }
index 21fa80b..e30fe8f 100644 (file)
@@ -6,7 +6,6 @@ package basehandler
 import (
        "context"
        appsv1 "k8s.io/api/apps/v1"
-       "k8s.io/apimachinery/pkg/runtime"
        "sdewan.akraino.org/sdewan/openwrt"
        ctrl "sigs.k8s.io/controller-runtime"
        "sigs.k8s.io/controller-runtime/pkg/client"
@@ -14,10 +13,10 @@ import (
 
 type ISdewanHandler interface {
        GetType() string
-       GetName(instance runtime.Object) string
+       GetName(instance client.Object) string
        GetFinalizer() string
-       GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error)
-       Convert(o runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error)
+       GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error)
+       Convert(o client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error)
        IsEqual(instance1 openwrt.IOpenWrtObject, instance2 openwrt.IOpenWrtObject) bool
        GetObject(clientInfo *openwrt.OpenwrtClientInfo, name string) (openwrt.IOpenWrtObject, error)
        CreateObject(clientInfo *openwrt.OpenwrtClientInfo, instance openwrt.IOpenWrtObject) (openwrt.IOpenWrtObject, error)
index 9147948..4515ad0 100644 (file)
@@ -9,7 +9,6 @@ import (
        "fmt"
        appsv1 "k8s.io/api/apps/v1"
        corev1 "k8s.io/api/core/v1"
-       "k8s.io/apimachinery/pkg/runtime"
        basehandler "sdewan.akraino.org/sdewan/basehandler"
        "sdewan.akraino.org/sdewan/openwrt"
        "sigs.k8s.io/controller-runtime/pkg/client"
@@ -80,7 +79,7 @@ func NewOpenWrt(namespace string, sdewanPurpose string, k8sClient client.Client)
        return &OpenWrtProvider{namespace, sdewanPurpose, deployments.Items[0], k8sClient}, nil
 }
 
-func (p *OpenWrtProvider) AddOrUpdateObject(handler basehandler.ISdewanHandler, instance runtime.Object) (bool, error) {
+func (p *OpenWrtProvider) AddOrUpdateObject(handler basehandler.ISdewanHandler, instance client.Object) (bool, error) {
        reqLogger := log.WithValues(handler.GetType(), handler.GetName(instance), "cnf", p.Deployment.Name)
        ctx := context.Background()
        ReplicaSetList := &appsv1.ReplicaSetList{}
@@ -97,6 +96,7 @@ func (p *OpenWrtProvider) AddOrUpdateObject(handler basehandler.ISdewanHandler,
                return false, err
        }
        new_instance, err := handler.Convert(instance, p.Deployment)
+       //new_instance.SetFullName(p.Namespace)
        if err != nil {
                return false, err
        }
@@ -142,7 +142,7 @@ func (p *OpenWrtProvider) AddOrUpdateObject(handler basehandler.ISdewanHandler,
        return cnfChanged, nil
 }
 
-func (p *OpenWrtProvider) DeleteObject(handler basehandler.ISdewanHandler, instance runtime.Object) (bool, error) {
+func (p *OpenWrtProvider) DeleteObject(handler basehandler.ISdewanHandler, instance client.Object) (bool, error) {
        reqLogger := log.WithValues(handler.GetType(), handler.GetName(instance), "cnf", p.Deployment.Name)
        ctx := context.Background()
        podList := &corev1.PodList{}
@@ -153,6 +153,7 @@ func (p *OpenWrtProvider) DeleteObject(handler basehandler.ISdewanHandler, insta
        cnfChanged := false
        for _, pod := range podList.Items {
                clientInfo := CreateOpenwrtClient(pod, p.K8sClient)
+               //runtime_instance, err := handler.GetObject(clientInfo, p.getFullName(handler.GetName(instance)))
                runtime_instance, err := handler.GetObject(clientInfo, handler.GetName(instance))
                if err != nil {
                        err2, ok := err.(*openwrt.OpenwrtError)
@@ -167,6 +168,7 @@ func (p *OpenWrtProvider) DeleteObject(handler basehandler.ISdewanHandler, insta
                        reqLogger.Info("Runtime instance doesn't exist, so don't have to delete")
                        continue
                } else {
+                       //err = handler.DeleteObject(clientInfo, p.getFullName(handler.GetName(instance)))
                        err = handler.DeleteObject(clientInfo, handler.GetName(instance))
                        if err != nil {
                                return false, err
@@ -181,3 +183,7 @@ func (p *OpenWrtProvider) DeleteObject(handler basehandler.ISdewanHandler, insta
        // We say the deletioni succeed only when the deletion for all pods succeed
        return cnfChanged, nil
 }
+
+func (p *OpenWrtProvider) getFullName(name string) string {
+       return p.Namespace + name
+}
index d9778a1..667aa1d 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfhubsites.batch.sdewan.akraino.org
 spec:
index bcffbc1..8d3f91f 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnflocalservices.batch.sdewan.akraino.org
 spec:
index df2a61b..6698c77 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfnats.batch.sdewan.akraino.org
 spec:
index caa4ef6..af04268 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfrouterules.batch.sdewan.akraino.org
 spec:
index 81c675b..5bd5da2 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfroutes.batch.sdewan.akraino.org
 spec:
index 2bd8f24..2f87d05 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfservices.batch.sdewan.akraino.org
 spec:
@@ -36,6 +35,8 @@ spec:
           spec:
             description: CNFServiceSpec defines the desired state of CNFService
             properties:
+              cidr:
+                type: string
               dport:
                 type: string
               fullname:
@@ -44,20 +45,19 @@ spec:
                 type: string
             type: object
           status:
-            description: status subsource used for Sdewan rule CRDs
+            description: CNFServiceStatus defines the observed state of CNFLocalServiceStatus
             properties:
-              appliedGeneration:
-                format: int64
-                type: integer
-              appliedTime:
-                format: date-time
+              dport:
                 type: string
               message:
                 type: string
-              state:
+              port:
+                type: string
+              sip:
+                description: 'INSERT ADDITIONAL STATUS FIELD - define observed state
+                  of cluster Important: Run "make" to regenerate code after modifying
+                  this file'
                 type: string
-            required:
-            - state
             type: object
         type: object
     served: true
index 4d83435..dd8bc7a 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfstatuses.batch.sdewan.akraino.org
 spec:
index 55ca867..0ad53c0 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewalldnats.batch.sdewan.akraino.org
 spec:
index d9077e4..acd3134 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallforwardings.batch.sdewan.akraino.org
 spec:
index 3cbeed9..734c398 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallrules.batch.sdewan.akraino.org
 spec:
index 49f2463..6503efb 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallsnats.batch.sdewan.akraino.org
 spec:
index 61da857..9b2b245 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallzones.batch.sdewan.akraino.org
 spec:
index 755abed..58aeb9f 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: ipsechosts.batch.sdewan.akraino.org
 spec:
index 77ecc66..8a30119 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: ipsecproposals.batch.sdewan.akraino.org
 spec:
index 3477423..b8aaa1f 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: ipsecsites.batch.sdewan.akraino.org
 spec:
index c4a1f6f..4e5ab36 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: mwan3policies.batch.sdewan.akraino.org
 spec:
index e83f8a3..6d53bbc 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: mwan3rules.batch.sdewan.akraino.org
 spec:
index 741703d..e2b18f3 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: networkfirewallrules.batch.sdewan.akraino.org
 spec:
index e9d086c..2f14065 100644 (file)
@@ -1,10 +1,9 @@
-
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: sdewanapplications.batch.sdewan.akraino.org
 spec:
@@ -38,6 +37,8 @@ spec:
             properties:
               appNamespace:
                 type: string
+              cnfPort:
+                type: string
               podSelector:
                 description: A label selector is a label query over a set of resources.
                   The result of matchLabels and matchExpressions are ANDed. An empty
@@ -85,6 +86,8 @@ spec:
                       are ANDed.
                     type: object
                 type: object
+              servicePort:
+                type: string
             type: object
           status:
             description: status subsource used for Sdewan rule CRDs
index 271f32f..639d2b1 100644 (file)
@@ -1,4 +1,3 @@
-
 ---
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
@@ -14,18 +13,6 @@ rules:
   - get
   - list
   - watch
-- apiGroups:
-  - ""
-  resources:
-  - secrets
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
 - apiGroups:
   - ""
   resources:
@@ -434,6 +421,15 @@ rules:
   - get
   - patch
   - update
+- apiGroups:
+  - coordination.k8s.io
+  resources:
+  - leases
+  verbs:
+  - create
+  - get
+  - list
+  - update
 - apiGroups:
   - rbac.authorization.k8s.io
   resources:
index 1e98ca1..2477ebb 100644 (file)
@@ -1,4 +1,3 @@
-
 ---
 apiVersion: admissionregistration.k8s.io/v1
 kind: ValidatingWebhookConfiguration
@@ -19,7 +18,7 @@ webhooks:
   - apiGroups:
     - batch.sdewan.akraino.org
     apiVersions:
-    - v1
+    - v1alpha1
     operations:
     - CREATE
     - UPDATE
@@ -60,9 +59,11 @@ webhooks:
     - batch.sdewan.akraino.org
     apiVersions:
     - v1
+    - v1alpha1
     operations:
     - UPDATE
     resources:
+    - deployments
     - mwan3policies
     - mwan3rules
     - networkfirewallrules
index 6291875..5f27bf9 100644 (file)
@@ -10,7 +10,6 @@ import (
        "github.com/go-logr/logr"
        errs "k8s.io/apimachinery/pkg/api/errors"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-       "k8s.io/apimachinery/pkg/runtime"
        "k8s.io/apimachinery/pkg/types"
        "log"
        "reflect"
@@ -18,7 +17,6 @@ import (
        "sigs.k8s.io/controller-runtime/pkg/builder"
        "sigs.k8s.io/controller-runtime/pkg/client"
        "sigs.k8s.io/controller-runtime/pkg/event"
-       "sigs.k8s.io/controller-runtime/pkg/handler"
        "sigs.k8s.io/controller-runtime/pkg/predicate"
        "sigs.k8s.io/controller-runtime/pkg/reconcile"
        "time"
@@ -34,13 +32,13 @@ import (
 // A global filter to catch the CNF deployments.
 var Filter = builder.WithPredicates(predicate.Funcs{
        CreateFunc: func(e event.CreateEvent) bool {
-               if _, ok := e.Meta.GetLabels()["sdewanPurpose"]; !ok {
+               if _, ok := e.Object.GetLabels()["sdewanPurpose"]; !ok {
                        return false
                }
                return true
        },
        UpdateFunc: func(e event.UpdateEvent) bool {
-               if _, ok := e.MetaOld.GetLabels()["sdewanPurpose"]; !ok {
+               if _, ok := e.ObjectOld.GetLabels()["sdewanPurpose"]; !ok {
                        return false
                }
                pre_status := reflect.ValueOf(e.ObjectOld).Interface().(*appsv1.Deployment).Status
@@ -57,11 +55,11 @@ var Filter = builder.WithPredicates(predicate.Funcs{
 })
 
 // List the needed CR to specific events and return the reconcile Requests
-func GetToRequestsFunc(r client.Client, crliststruct runtime.Object) func(h handler.MapObject) []reconcile.Request {
+func GetToRequestsFunc(r client.Client, crliststruct client.ObjectList) func(h client.Object) []reconcile.Request {
 
-       return func(h handler.MapObject) []reconcile.Request {
+       return func(h client.Object) []reconcile.Request {
                var enqueueRequest []reconcile.Request
-               cnfName := h.Meta.GetLabels()["sdewanPurpose"]
+               cnfName := h.GetLabels()["sdewanPurpose"]
                ctx := context.Background()
                err := r.List(ctx, crliststruct, client.MatchingLabels{"sdewanPurpose": cnfName})
                if err != nil {
@@ -86,7 +84,7 @@ func GetToRequestsFunc(r client.Client, crliststruct runtime.Object) func(h hand
 // A global filter to catch the change of cluster IP.
 var IPFilter = builder.WithPredicates(predicate.Funcs{
        UpdateFunc: func(e event.UpdateEvent) bool {
-               serviceName := e.MetaOld.GetName()
+               serviceName := e.ObjectOld.GetName()
                if serviceName != "kubernetes" && serviceName != "istio-ingressgateway" {
                        return false
                }
@@ -97,9 +95,9 @@ var IPFilter = builder.WithPredicates(predicate.Funcs{
 })
 
 // List the needed CR to specific events and return the reconcile Requests
-func GetServiceToRequestsFunc(r client.Client) func(h handler.MapObject) []reconcile.Request {
+func GetServiceToRequestsFunc(r client.Client) func(h client.Object) []reconcile.Request {
 
-       return func(h handler.MapObject) []reconcile.Request {
+       return func(h client.Object) []reconcile.Request {
                var cnfName string
                deploymentList := &appsv1.DeploymentList{}
                podList := &corev1.PodList{}
@@ -154,26 +152,26 @@ func removeString(slice []string, s string) (result []string) {
        return
 }
 
-func getPurpose(instance runtime.Object) string {
+func getPurpose(instance client.Object) string {
        value := reflect.ValueOf(instance)
        field := reflect.Indirect(value).FieldByName("Labels")
        labels := field.Interface().(map[string]string)
        return labels["sdewanPurpose"]
 }
 
-func getDeletionTempstamp(instance runtime.Object) *metav1.Time {
+func getDeletionTempstamp(instance client.Object) *metav1.Time {
        value := reflect.ValueOf(instance)
        field := reflect.Indirect(value).FieldByName("DeletionTimestamp")
        return field.Interface().(*metav1.Time)
 }
 
-func getFinalizers(instance runtime.Object) []string {
+func getFinalizers(instance client.Object) []string {
        value := reflect.ValueOf(instance)
        field := reflect.Indirect(value).FieldByName("Finalizers")
        return field.Interface().([]string)
 }
 
-func setStatus(instance runtime.Object, status batchv1alpha1.SdewanStatus) {
+func setStatus(instance client.Object, status batchv1alpha1.SdewanStatus) {
        value := reflect.ValueOf(instance)
        field_status := reflect.Indirect(value).FieldByName("Status")
        if status.State == batchv1alpha1.InSync {
@@ -188,7 +186,7 @@ func setStatus(instance runtime.Object, status batchv1alpha1.SdewanStatus) {
        field_status.Set(reflect.ValueOf(status))
 }
 
-func appendFinalizer(instance runtime.Object, item string) {
+func appendFinalizer(instance client.Object, item string) {
        value := reflect.ValueOf(instance)
        field := reflect.Indirect(value).FieldByName("ObjectMeta")
        base_obj := field.Interface().(metav1.ObjectMeta)
@@ -196,7 +194,7 @@ func appendFinalizer(instance runtime.Object, item string) {
        field.Set(reflect.ValueOf(base_obj))
 }
 
-func removeFinalizer(instance runtime.Object, item string) {
+func removeFinalizer(instance client.Object, item string) {
        value := reflect.ValueOf(instance)
        field := reflect.Indirect(value).FieldByName("ObjectMeta")
        base_obj := field.Interface().(metav1.ObjectMeta)
@@ -229,14 +227,13 @@ func net2iface(net string, deployment appsv1.Deployment) (string, error) {
 }
 
 // +kubebuilder:rbac:groups="",resources=services,verbs=get;list;watch;create;update;patch;delete
-// +kubebuilder:rbac:groups="",resources=secrets,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups="",resources=pods,verbs=get;watch;list
 // +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch
 // +kubebuilder:rbac:groups=apps,resources=deployments/status,verbs=get;list;watch
+// +kubebuilder:rbac:groups=coordination.k8s.io,resources=leases,verbs=get;list;create;update
 
 // Common Reconcile Processing
-func ProcessReconcile(r client.Client, logger logr.Logger, req ctrl.Request, handler basehandler.ISdewanHandler) (ctrl.Result, error) {
-       ctx := context.Background()
+func ProcessReconcile(r client.Client, logger logr.Logger, ctx context.Context, req ctrl.Request, handler basehandler.ISdewanHandler) (ctrl.Result, error) {
        log := logger.WithValues(handler.GetType(), req.NamespacedName)
        during, _ := time.ParseDuration("5s")
 
index 9fd965c..c7aa942 100644 (file)
-// SPDX-License-Identifier: Apache-2.0\r
-// Copyright (c) 2021 Intel Corporation\r
-package controllers\r
-\r
-import (\r
-       "context"\r
-       "errors"\r
-       "net"\r
-       "strconv"\r
-       "strings"\r
-       "sync"\r
-       "time"\r
-       "log"\r
-\r
-       "github.com/go-logr/logr"\r
-       errs "k8s.io/apimachinery/pkg/api/errors"\r
-       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"\r
-       "k8s.io/apimachinery/pkg/runtime"\r
-       "k8s.io/apimachinery/pkg/util/wait"\r
-       ctrl "sigs.k8s.io/controller-runtime"\r
-       "sigs.k8s.io/controller-runtime/pkg/builder"\r
-       "sigs.k8s.io/controller-runtime/pkg/client"\r
-       "sigs.k8s.io/controller-runtime/pkg/predicate"\r
-\r
-       batchv1alpha1 "sdewan.akraino.org/sdewan/api/v1alpha1"\r
-)\r
-\r
-var inHSQueryStatus = false\r
-\r
-// CNFHubSiteReconciler reconciles a CNFHubSite object\r
-type CNFHubSiteReconciler struct {\r
-       client.Client\r
-       Log           logr.Logger\r
-       CheckInterval time.Duration\r
-       Scheme        *runtime.Scheme\r
-       mux           sync.Mutex\r
-}\r
-\r
-// +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfhubsites,verbs=get;list;watch;create;update;patch;delete\r
-// +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfhubsites/status,verbs=get;update;patch\r
-\r
-func (r *CNFHubSiteReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {\r
-       ctx := context.Background()\r
-       log := r.Log.WithValues("CNFHubSite", req.NamespacedName)\r
-       during, _ := time.ParseDuration("5s")\r
-\r
-       instance, err := r.getInstance(req)\r
-       if err != nil {\r
-               if errs.IsNotFound(err) {\r
-                       // No instance\r
-                       return ctrl.Result{}, nil\r
-               }\r
-               // Error reading the object - requeue the request.\r
-               return ctrl.Result{RequeueAfter: during}, nil\r
-       }\r
-\r
-       finalizerName := "cnfhubsite.finalizers.sdewan.akraino.org"\r
-       delete_timestamp := getDeletionTempstamp(instance)\r
-\r
-       if delete_timestamp.IsZero() {\r
-               // Creating or updating CR\r
-               // Process instance\r
-               err = r.processInstance(instance)\r
-               if err != nil {\r
-                       log.Error(err, "Adding/Updating CR")\r
-                       instance.Status.Message = err.Error()\r
-                       r.Status().Update(ctx, instance)\r
-\r
-                       return ctrl.Result{}, err\r
-               }\r
-\r
-               finalizers := getFinalizers(instance)\r
-               if !containsString(finalizers, finalizerName) {\r
-                       appendFinalizer(instance, finalizerName)\r
-                       if err := r.Update(ctx, instance); err != nil {\r
-                               return ctrl.Result{}, err\r
-                       }\r
-                       log.Info("Added finalizer for CNFHubSite")\r
-               }\r
-       } else {\r
-               // Deleting CR\r
-               // Remove instance\r
-               err = r.removeInstance(instance)\r
-               if err != nil {\r
-                       log.Error(err, "Deleting CR")\r
-                       return ctrl.Result{RequeueAfter: during}, nil\r
-               }\r
-\r
-               finalizers := getFinalizers(instance)\r
-               if containsString(finalizers, finalizerName) {\r
-                       removeFinalizer(instance, finalizerName)\r
-                       if err := r.Update(ctx, instance); err != nil {\r
-                               return ctrl.Result{}, err\r
-                       }\r
-               }\r
-       }\r
-\r
-       return ctrl.Result{}, nil\r
-}\r
-\r
-func (r *CNFHubSiteReconciler) getInstance(req ctrl.Request) (*batchv1alpha1.CNFHubSite, error) {\r
-       instance := &batchv1alpha1.CNFHubSite{}\r
-       err := r.Get(context.Background(), req.NamespacedName, instance)\r
-       return instance, err\r
-}\r
-\r
-func (r *CNFHubSiteReconciler) getIP4s(dns string) ([]string, error) {\r
-       ips, err := net.LookupIP(dns)\r
-       var ip4s []string\r
-\r
-       if err == nil {\r
-               for _, ip := range ips {\r
-                       if strings.Contains(ip.String(), ".") {\r
-                               ip4s = append(ip4s, ip.String())\r
-                       }\r
-               }\r
-       }\r
-\r
-       return ip4s, err\r
-}\r
-\r
-func (r *CNFHubSiteReconciler) processInstance(instance *batchv1alpha1.CNFHubSite) error {\r
-       r.mux.Lock()\r
-       defer r.mux.Unlock()\r
-\r
-       log.Println("Into hubsite processing")\r
-       // check Type\r
-       t := instance.Spec.Type\r
-       log.Println("Type:", t)\r
-       if t != "Hub" && t != "Device" {\r
-               return errors.New("Invalid Type: should be Hub or Device")\r
-       }\r
-\r
-       ls := instance.Spec.Site\r
-       sn := instance.Spec.Subnet\r
-\r
-       if ls == "" && sn == "" {\r
-               return errors.New("Invalid Site: neither of the url or the subnet set")\r
-       }\r
-\r
-       // check Site\r
-       var lips []string\r
-       if ls != "" {\r
-               lips, err := r.getIP4s(ls)\r
-               if err != nil || len(lips) == 0 {\r
-                       if err != nil {\r
-                               r.Log.Error(err, "Hub Site")\r
-                       }\r
-                       return errors.New("Cannot retrieve Site ip")\r
-               }\r
-       }\r
-\r
-       // check subnet\r
-       if sn != "" {\r
-               _, _, err := net.ParseCIDR(sn)\r
-               log.Println("Parsing subnet")\r
-               if err != nil {\r
-                       r.Log.Error(err, "Subnet")\r
-                       return errors.New("Invalid Subnet")\r
-               }\r
-       }\r
-\r
-       // check HubIP\r
-       hip := instance.Spec.HubIP\r
-       if hip == "" {\r
-               if t == "Hub" {\r
-                       return errors.New("HubIP is required")\r
-               }\r
-       } else {\r
-               ip := net.ParseIP(hip)\r
-               if ip == nil {\r
-                       return errors.New("Invalid HubIP: " + hip)\r
-               }\r
-       }\r
-\r
-       // check DevicePIP\r
-       dpip := instance.Spec.DevicePIP\r
-       if dpip == "" {\r
-               if t == "Device" {\r
-                       return errors.New("DevicePIP is required")\r
-               }\r
-       } else {\r
-               ip := net.ParseIP(dpip)\r
-               if ip == nil {\r
-                       return errors.New("Invalid DevicePIP: " + dpip)\r
-               }\r
-       }\r
-\r
-       var curStatus = batchv1alpha1.CNFHubSiteStatus{\r
-               Type:      t,\r
-               SiteIPs:   lips,\r
-               Subnet:    sn,\r
-               HubIP:     hip,\r
-               DevicePIP: dpip,\r
-               Message:   "",\r
-       }\r
-\r
-       if !curStatus.IsEqual(&instance.Status) {\r
-               r.removeCRs(instance)\r
-               r.addCRs(instance, &curStatus)\r
-               instance.Status = curStatus\r
-               r.Status().Update(context.Background(), instance)\r
-       }\r
-\r
-       return nil\r
-}\r
-\r
-func (r *CNFHubSiteReconciler) addCRs(instance *batchv1alpha1.CNFHubSite, status *batchv1alpha1.CNFHubSiteStatus) error {\r
-       r.Log.Info("Creating New CRs for Hub Site : " + instance.Name)\r
-       var dips []string\r
-       if status.Subnet != "" {\r
-               dips = append(dips, status.Subnet)\r
-       }\r
-       dips = append(dips, status.SiteIPs...)\r
-       t := status.Type\r
-       if t == "Hub" {\r
-               // Create Route CR in Hub\r
-               route_base_name := instance.Name + "route"\r
-               for i, ip := range dips {\r
-                       route_name := route_base_name + strconv.Itoa(i)\r
-                       route_instance := &batchv1alpha1.CNFRoute{\r
-                               ObjectMeta: metav1.ObjectMeta{\r
-                                       Name:      route_name,\r
-                                       Namespace: instance.Namespace,\r
-                                       Labels:    instance.Labels,\r
-                               },\r
-                               Spec: batchv1alpha1.CNFRouteSpec{\r
-                                       Dst:   ip,\r
-                                       Dev:   "vti_" + status.HubIP,\r
-                                       Table: "default",\r
-                               },\r
-                       }\r
-\r
-                       err := r.Create(context.Background(), route_instance)\r
-                       if err != nil {\r
-                               r.Log.Error(err, "Creating Route CR : "+route_name)\r
-                       }\r
-               }\r
-       } else {\r
-               // Create Route CR and SNAT CR in Device\r
-               route_base_name := instance.Name + "route"\r
-               nat_base_name := instance.Name + "snat"\r
-               for i, ip := range dips {\r
-                       // Route CR\r
-                       route_name := route_base_name + strconv.Itoa(i)\r
-                       route_instance := &batchv1alpha1.CNFRoute{\r
-                               ObjectMeta: metav1.ObjectMeta{\r
-                                       Name:      route_name,\r
-                                       Namespace: instance.Namespace,\r
-                                       Labels:    instance.Labels,\r
-                               },\r
-                               Spec: batchv1alpha1.CNFRouteSpec{\r
-                                       Dst:   ip,\r
-                                       Dev:   "#" + status.DevicePIP,\r
-                                       Table: "cnf",\r
-                               },\r
-                       }\r
-                       log.Println(route_instance)\r
-\r
-                       err := r.Create(context.Background(), route_instance)\r
-                       if err != nil {\r
-                               r.Log.Error(err, "Creating Route CR : "+route_name)\r
-                       }\r
-\r
-                       // SNAT CR\r
-                       nat_name := nat_base_name + strconv.Itoa(i)\r
-                       nat_instance := &batchv1alpha1.CNFNAT{\r
-                               ObjectMeta: metav1.ObjectMeta{\r
-                                       Name:      nat_name,\r
-                                       Namespace: instance.Namespace,\r
-                                       Labels:    instance.Labels,\r
-                               },\r
-                               Spec: batchv1alpha1.CNFNATSpec{\r
-                                       DestIp:   ip,\r
-                                       Dest:     "#source",\r
-                                       SrcDIp:   status.DevicePIP,\r
-                                       Index:    "1",\r
-                                       Target:   "SNAT",\r
-                               },\r
-                       }\r
-\r
-                       err = r.Create(context.Background(), nat_instance)\r
-                       if err != nil {\r
-                               r.Log.Error(err, "Creating SNAT CR : "+nat_name)\r
-                       }\r
-               }\r
-       }\r
-       \r
-       return nil\r
-}\r
-\r
-func (r *CNFHubSiteReconciler) removeInstance(instance *batchv1alpha1.CNFHubSite) error {\r
-       r.mux.Lock()\r
-       defer r.mux.Unlock()\r
-       return r.removeCRs(instance)\r
-}\r
-\r
-func (r *CNFHubSiteReconciler) removeCRs(instance *batchv1alpha1.CNFHubSite) error {\r
-       r.Log.Info("Deleting CRs for Hub Site : " + instance.Name)\r
-       var dips []string\r
-       if instance.Status.Subnet != "" {\r
-               dips = append(dips, instance.Status.Subnet)\r
-       }\r
-       dips = append(dips, instance.Status.SiteIPs...)\r
-\r
-       t := instance.Status.Type\r
-       if t == "Hub" {\r
-               // Create Route CR in Hub\r
-               route_base_name := instance.Name + "route"\r
-               for i, _ := range dips {\r
-                       route_name := route_base_name + strconv.Itoa(i)\r
-                       route_instance := &batchv1alpha1.CNFRoute{\r
-                               ObjectMeta: metav1.ObjectMeta{\r
-                                       Name:      route_name,\r
-                                       Namespace: instance.Namespace,\r
-                                       Labels:    instance.Labels,\r
-                               },\r
-                               Spec: batchv1alpha1.CNFRouteSpec{},\r
-                       }\r
-\r
-                       err := r.Delete(context.Background(), route_instance)\r
-                       if err != nil {\r
-                               r.Log.Error(err, "Deleting Route CR : "+route_name)\r
-                       }\r
-\r
-                       // check resource\r
-                       err = wait.PollImmediate(time.Second, time.Second*10,\r
-                               func() (bool, error) {\r
-                                       route_instance_temp := &batchv1alpha1.CNFRoute{}\r
-                                       err_get := r.Get(context.Background(), client.ObjectKey{\r
-                                               Namespace: instance.Namespace,\r
-                                               Name:      route_name,\r
-                                       }, route_instance_temp)\r
-\r
-                                       if errs.IsNotFound(err_get) {\r
-                                               return true, nil\r
-                                       }\r
-                                       r.Log.Info("Waiting for Deleting CR : " + route_name)\r
-                                       return false, nil\r
-                               },\r
-                       )\r
-\r
-                       if err != nil {\r
-                               r.Log.Error(err, "Failed to delete CR : "+route_name)\r
-                       }\r
-               }\r
-       } else {\r
-               // Delete Route CR and SNAT CR in Device\r
-               route_base_name := instance.Name + "route"\r
-               nat_base_name := instance.Name + "snat"\r
-               for i, _ := range dips {\r
-                       // Route CR\r
-                       route_name := route_base_name + strconv.Itoa(i)\r
-                       route_instance := &batchv1alpha1.CNFRoute{\r
-                               ObjectMeta: metav1.ObjectMeta{\r
-                                       Name:      route_name,\r
-                                       Namespace: instance.Namespace,\r
-                                       Labels:    instance.Labels,\r
-                               },\r
-                               Spec: batchv1alpha1.CNFRouteSpec{},\r
-                       }\r
-\r
-                       err := r.Delete(context.Background(), route_instance)\r
-                       if err != nil {\r
-                               r.Log.Error(err, "Deleting Route CR : "+route_name)\r
-                       }\r
-\r
-                       // SNAT CR\r
-                       nat_name := nat_base_name + strconv.Itoa(i)\r
-                       nat_instance := &batchv1alpha1.CNFNAT{\r
-                               ObjectMeta: metav1.ObjectMeta{\r
-                                       Name:      nat_name,\r
-                                       Namespace: instance.Namespace,\r
-                                       Labels:    instance.Labels,\r
-                               },\r
-                               Spec: batchv1alpha1.CNFNATSpec{},\r
-                       }\r
-\r
-                       err = r.Delete(context.Background(), nat_instance)\r
-                       if err != nil {\r
-                               r.Log.Error(err, "Deleting SNAT CR : "+nat_name)\r
-                       }\r
-\r
-                       // check resource\r
-                       err = wait.PollImmediate(time.Second, time.Second*10,\r
-                               func() (bool, error) {\r
-                                       route_instance_temp := &batchv1alpha1.CNFRoute{}\r
-                                       err_get := r.Get(context.Background(), client.ObjectKey{\r
-                                               Namespace: instance.Namespace,\r
-                                               Name:      route_name,\r
-                                       }, route_instance_temp)\r
-\r
-                                       if errs.IsNotFound(err_get) {\r
-                                               return true, nil\r
-                                       }\r
-                                       r.Log.Info("Waiting for Deleting CR : " + route_name)\r
-                                       return false, nil\r
-                               },\r
-                       )\r
-\r
-                       if err != nil {\r
-                               r.Log.Error(err, "Failed to delete CR : "+route_name)\r
-                       }\r
-\r
-                       err = wait.PollImmediate(time.Second, time.Second*10,\r
-                               func() (bool, error) {\r
-                                       nat_instance_temp := &batchv1alpha1.CNFNAT{}\r
-                                       err_get := r.Get(context.Background(), client.ObjectKey{\r
-                                               Namespace: instance.Namespace,\r
-                                               Name:      nat_name,\r
-                                       }, nat_instance_temp)\r
-\r
-                                       if errs.IsNotFound(err_get) {\r
-                                               return true, nil\r
-                                       }\r
-                                       r.Log.Info("Waiting for Deleting CR : " + nat_name)\r
-                                       return false, nil\r
-                               },\r
-                       )\r
-\r
-                       if err != nil {\r
-                               r.Log.Error(err, "Failed to delete CR : "+nat_name)\r
-                       }\r
-               }\r
-       }\r
-\r
-       return nil\r
-}\r
-\r
-func (r *CNFHubSiteReconciler) check() {\r
-       ls_list := &batchv1alpha1.CNFHubSiteList{}\r
-       err := r.List(context.Background(), ls_list)\r
-       if err != nil {\r
-               r.Log.Error(err, "Failed to list CNFHubSite CRs")\r
-       } else {\r
-               if len(ls_list.Items) > 0 {\r
-                       for _, inst := range ls_list.Items {\r
-                               r.Log.Info("Checking CNFHubSite: " + inst.Name)\r
-                               r.processInstance(&inst)\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-// Regular check\r
-func (r *CNFHubSiteReconciler) SafeCheck() {\r
-       doCheck := true\r
-       r.mux.Lock()\r
-       if !inHSQueryStatus {\r
-               inHSQueryStatus = true\r
-       } else {\r
-               doCheck = false\r
-       }\r
-       r.mux.Unlock()\r
-\r
-       if doCheck {\r
-               r.check()\r
-\r
-               r.mux.Lock()\r
-               inHSQueryStatus = false\r
-               r.mux.Unlock()\r
-       }\r
-}\r
-\r
-func (r *CNFHubSiteReconciler) SetupWithManager(mgr ctrl.Manager) error {\r
-       // Start the loop to check ip address change of local/remote services\r
-       go func() {\r
-               interval := time.After(r.CheckInterval)\r
-               for {\r
-                       select {\r
-                       case <-interval:\r
-                               r.SafeCheck()\r
-                               interval = time.After(r.CheckInterval)\r
-                       case <-context.Background().Done():\r
-                               return\r
-                       }\r
-               }\r
-       }()\r
-\r
-       ps := builder.WithPredicates(predicate.GenerationChangedPredicate{})\r
-       return ctrl.NewControllerManagedBy(mgr).\r
-               For(&batchv1alpha1.CNFHubSite{}, ps).\r
-               Complete(r)\r
-}\r
+// SPDX-License-Identifier: Apache-2.0
+// Copyright (c) 2021 Intel Corporation
+package controllers
+
+import (
+       "context"
+       "errors"
+       "log"
+       "net"
+       "strconv"
+       "strings"
+       "sync"
+       "time"
+
+       "github.com/go-logr/logr"
+       errs "k8s.io/apimachinery/pkg/api/errors"
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "k8s.io/apimachinery/pkg/runtime"
+       "k8s.io/apimachinery/pkg/util/wait"
+       ctrl "sigs.k8s.io/controller-runtime"
+       "sigs.k8s.io/controller-runtime/pkg/builder"
+       "sigs.k8s.io/controller-runtime/pkg/client"
+       "sigs.k8s.io/controller-runtime/pkg/predicate"
+
+       batchv1alpha1 "sdewan.akraino.org/sdewan/api/v1alpha1"
+)
+
+var inHSQueryStatus = false
+
+// CNFHubSiteReconciler reconciles a CNFHubSite object
+type CNFHubSiteReconciler struct {
+       client.Client
+       Log           logr.Logger
+       CheckInterval time.Duration
+       Scheme        *runtime.Scheme
+       mux           sync.Mutex
+}
+
+// +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfhubsites,verbs=get;list;watch;create;update;patch;delete
+// +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfhubsites/status,verbs=get;update;patch
+
+func (r *CNFHubSiteReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       log := r.Log.WithValues("CNFHubSite", req.NamespacedName)
+       during, _ := time.ParseDuration("5s")
+
+       instance, err := r.getInstance(req)
+       if err != nil {
+               if errs.IsNotFound(err) {
+                       // No instance
+                       return ctrl.Result{}, nil
+               }
+               // Error reading the object - requeue the request.
+               return ctrl.Result{RequeueAfter: during}, nil
+       }
+
+       finalizerName := "cnfhubsite.finalizers.sdewan.akraino.org"
+       delete_timestamp := getDeletionTempstamp(instance)
+
+       if delete_timestamp.IsZero() {
+               // Creating or updating CR
+               // Process instance
+               err = r.processInstance(instance)
+               if err != nil {
+                       log.Error(err, "Adding/Updating CR")
+                       instance.Status.Message = err.Error()
+                       r.Status().Update(ctx, instance)
+
+                       return ctrl.Result{}, err
+               }
+
+               finalizers := getFinalizers(instance)
+               if !containsString(finalizers, finalizerName) {
+                       appendFinalizer(instance, finalizerName)
+                       if err := r.Update(ctx, instance); err != nil {
+                               return ctrl.Result{}, err
+                       }
+                       log.Info("Added finalizer for CNFHubSite")
+               }
+       } else {
+               // Deleting CR
+               // Remove instance
+               err = r.removeInstance(instance)
+               if err != nil {
+                       log.Error(err, "Deleting CR")
+                       return ctrl.Result{RequeueAfter: during}, nil
+               }
+
+               finalizers := getFinalizers(instance)
+               if containsString(finalizers, finalizerName) {
+                       removeFinalizer(instance, finalizerName)
+                       if err := r.Update(ctx, instance); err != nil {
+                               return ctrl.Result{}, err
+                       }
+               }
+       }
+
+       return ctrl.Result{}, nil
+}
+
+func (r *CNFHubSiteReconciler) getInstance(req ctrl.Request) (*batchv1alpha1.CNFHubSite, error) {
+       instance := &batchv1alpha1.CNFHubSite{}
+       err := r.Get(context.Background(), req.NamespacedName, instance)
+       return instance, err
+}
+
+func (r *CNFHubSiteReconciler) getIP4s(dns string) ([]string, error) {
+       ips, err := net.LookupIP(dns)
+       var ip4s []string
+
+       if err == nil {
+               for _, ip := range ips {
+                       if strings.Contains(ip.String(), ".") {
+                               ip4s = append(ip4s, ip.String())
+                       }
+               }
+       }
+
+       return ip4s, err
+}
+
+func (r *CNFHubSiteReconciler) processInstance(instance *batchv1alpha1.CNFHubSite) error {
+       r.mux.Lock()
+       defer r.mux.Unlock()
+
+       log.Println("Into hubsite processing")
+       // check Type
+       t := instance.Spec.Type
+       log.Println("Type:", t)
+       if t != "Hub" && t != "Device" {
+               return errors.New("Invalid Type: should be Hub or Device")
+       }
+
+       ls := instance.Spec.Site
+       sn := instance.Spec.Subnet
+
+       if ls == "" && sn == "" {
+               return errors.New("Invalid Site: neither of the url or the subnet set")
+       }
+
+       // check Site
+       var lips []string
+       if ls != "" {
+               lips, err := r.getIP4s(ls)
+               if err != nil || len(lips) == 0 {
+                       if err != nil {
+                               r.Log.Error(err, "Hub Site")
+                       }
+                       return errors.New("Cannot retrieve Site ip")
+               }
+       }
+
+       // check subnet
+       if sn != "" {
+               _, _, err := net.ParseCIDR(sn)
+               log.Println("Parsing subnet")
+               if err != nil {
+                       r.Log.Error(err, "Subnet")
+                       return errors.New("Invalid Subnet")
+               }
+       }
+
+       // check HubIP
+       hip := instance.Spec.HubIP
+       if hip == "" {
+               if t == "Hub" {
+                       return errors.New("HubIP is required")
+               }
+       } else {
+               ip := net.ParseIP(hip)
+               if ip == nil {
+                       return errors.New("Invalid HubIP: " + hip)
+               }
+       }
+
+       // check DevicePIP
+       dpip := instance.Spec.DevicePIP
+       if dpip == "" {
+               if t == "Device" {
+                       return errors.New("DevicePIP is required")
+               }
+       } else {
+               ip := net.ParseIP(dpip)
+               if ip == nil {
+                       return errors.New("Invalid DevicePIP: " + dpip)
+               }
+       }
+
+       var curStatus = batchv1alpha1.CNFHubSiteStatus{
+               Type:      t,
+               SiteIPs:   lips,
+               Subnet:    sn,
+               HubIP:     hip,
+               DevicePIP: dpip,
+               Message:   "",
+       }
+
+       if !curStatus.IsEqual(&instance.Status) {
+               r.removeCRs(instance)
+               r.addCRs(instance, &curStatus)
+               instance.Status = curStatus
+               r.Status().Update(context.Background(), instance)
+       }
+
+       return nil
+}
+
+func (r *CNFHubSiteReconciler) addCRs(instance *batchv1alpha1.CNFHubSite, status *batchv1alpha1.CNFHubSiteStatus) error {
+       r.Log.Info("Creating New CRs for Hub Site : " + instance.Name)
+       var dips []string
+       if status.Subnet != "" {
+               dips = append(dips, status.Subnet)
+       }
+       dips = append(dips, status.SiteIPs...)
+       t := status.Type
+       if t == "Hub" {
+               // Create Route CR in Hub
+               route_base_name := instance.Name + "route"
+               for i, ip := range dips {
+                       route_name := route_base_name + strconv.Itoa(i)
+                       route_instance := &batchv1alpha1.CNFRoute{
+                               ObjectMeta: metav1.ObjectMeta{
+                                       Name:      route_name,
+                                       Namespace: instance.Namespace,
+                                       Labels:    instance.Labels,
+                               },
+                               Spec: batchv1alpha1.CNFRouteSpec{
+                                       Dst:   ip,
+                                       Dev:   "vti_" + status.HubIP,
+                                       Table: "default",
+                               },
+                       }
+
+                       err := r.Create(context.Background(), route_instance)
+                       if err != nil {
+                               r.Log.Error(err, "Creating Route CR : "+route_name)
+                       }
+               }
+       } else {
+               // Create Route CR and SNAT CR in Device
+               route_base_name := instance.Name + "route"
+               nat_base_name := instance.Name + "snat"
+               for i, ip := range dips {
+                       // Route CR
+                       route_name := route_base_name + strconv.Itoa(i)
+                       route_instance := &batchv1alpha1.CNFRoute{
+                               ObjectMeta: metav1.ObjectMeta{
+                                       Name:      route_name,
+                                       Namespace: instance.Namespace,
+                                       Labels:    instance.Labels,
+                               },
+                               Spec: batchv1alpha1.CNFRouteSpec{
+                                       Dst:   ip,
+                                       Dev:   "#" + status.DevicePIP,
+                                       Table: "cnf",
+                               },
+                       }
+                       log.Println(route_instance)
+
+                       err := r.Create(context.Background(), route_instance)
+                       if err != nil {
+                               r.Log.Error(err, "Creating Route CR : "+route_name)
+                       }
+
+                       // SNAT CR
+                       nat_name := nat_base_name + strconv.Itoa(i)
+                       nat_instance := &batchv1alpha1.CNFNAT{
+                               ObjectMeta: metav1.ObjectMeta{
+                                       Name:      nat_name,
+                                       Namespace: instance.Namespace,
+                                       Labels:    instance.Labels,
+                               },
+                               Spec: batchv1alpha1.CNFNATSpec{
+                                       DestIp: ip,
+                                       Dest:   "#source",
+                                       SrcDIp: status.DevicePIP,
+                                       Index:  "1",
+                                       Target: "SNAT",
+                               },
+                       }
+
+                       err = r.Create(context.Background(), nat_instance)
+                       if err != nil {
+                               r.Log.Error(err, "Creating SNAT CR : "+nat_name)
+                       }
+               }
+       }
+
+       return nil
+}
+
+func (r *CNFHubSiteReconciler) removeInstance(instance *batchv1alpha1.CNFHubSite) error {
+       r.mux.Lock()
+       defer r.mux.Unlock()
+       return r.removeCRs(instance)
+}
+
+func (r *CNFHubSiteReconciler) removeCRs(instance *batchv1alpha1.CNFHubSite) error {
+       r.Log.Info("Deleting CRs for Hub Site : " + instance.Name)
+       var dips []string
+       if instance.Status.Subnet != "" {
+               dips = append(dips, instance.Status.Subnet)
+       }
+       dips = append(dips, instance.Status.SiteIPs...)
+
+       t := instance.Status.Type
+       if t == "Hub" {
+               // Create Route CR in Hub
+               route_base_name := instance.Name + "route"
+               for i, _ := range dips {
+                       route_name := route_base_name + strconv.Itoa(i)
+                       route_instance := &batchv1alpha1.CNFRoute{
+                               ObjectMeta: metav1.ObjectMeta{
+                                       Name:      route_name,
+                                       Namespace: instance.Namespace,
+                                       Labels:    instance.Labels,
+                               },
+                               Spec: batchv1alpha1.CNFRouteSpec{},
+                       }
+
+                       err := r.Delete(context.Background(), route_instance)
+                       if err != nil {
+                               r.Log.Error(err, "Deleting Route CR : "+route_name)
+                       }
+
+                       // check resource
+                       err = wait.PollImmediate(time.Second, time.Second*10,
+                               func() (bool, error) {
+                                       route_instance_temp := &batchv1alpha1.CNFRoute{}
+                                       err_get := r.Get(context.Background(), client.ObjectKey{
+                                               Namespace: instance.Namespace,
+                                               Name:      route_name,
+                                       }, route_instance_temp)
+
+                                       if errs.IsNotFound(err_get) {
+                                               return true, nil
+                                       }
+                                       r.Log.Info("Waiting for Deleting CR : " + route_name)
+                                       return false, nil
+                               },
+                       )
+
+                       if err != nil {
+                               r.Log.Error(err, "Failed to delete CR : "+route_name)
+                       }
+               }
+       } else {
+               // Delete Route CR and SNAT CR in Device
+               route_base_name := instance.Name + "route"
+               nat_base_name := instance.Name + "snat"
+               for i, _ := range dips {
+                       // Route CR
+                       route_name := route_base_name + strconv.Itoa(i)
+                       route_instance := &batchv1alpha1.CNFRoute{
+                               ObjectMeta: metav1.ObjectMeta{
+                                       Name:      route_name,
+                                       Namespace: instance.Namespace,
+                                       Labels:    instance.Labels,
+                               },
+                               Spec: batchv1alpha1.CNFRouteSpec{},
+                       }
+
+                       err := r.Delete(context.Background(), route_instance)
+                       if err != nil {
+                               r.Log.Error(err, "Deleting Route CR : "+route_name)
+                       }
+
+                       // SNAT CR
+                       nat_name := nat_base_name + strconv.Itoa(i)
+                       nat_instance := &batchv1alpha1.CNFNAT{
+                               ObjectMeta: metav1.ObjectMeta{
+                                       Name:      nat_name,
+                                       Namespace: instance.Namespace,
+                                       Labels:    instance.Labels,
+                               },
+                               Spec: batchv1alpha1.CNFNATSpec{},
+                       }
+
+                       err = r.Delete(context.Background(), nat_instance)
+                       if err != nil {
+                               r.Log.Error(err, "Deleting SNAT CR : "+nat_name)
+                       }
+
+                       // check resource
+                       err = wait.PollImmediate(time.Second, time.Second*10,
+                               func() (bool, error) {
+                                       route_instance_temp := &batchv1alpha1.CNFRoute{}
+                                       err_get := r.Get(context.Background(), client.ObjectKey{
+                                               Namespace: instance.Namespace,
+                                               Name:      route_name,
+                                       }, route_instance_temp)
+
+                                       if errs.IsNotFound(err_get) {
+                                               return true, nil
+                                       }
+                                       r.Log.Info("Waiting for Deleting CR : " + route_name)
+                                       return false, nil
+                               },
+                       )
+
+                       if err != nil {
+                               r.Log.Error(err, "Failed to delete CR : "+route_name)
+                       }
+
+                       err = wait.PollImmediate(time.Second, time.Second*10,
+                               func() (bool, error) {
+                                       nat_instance_temp := &batchv1alpha1.CNFNAT{}
+                                       err_get := r.Get(context.Background(), client.ObjectKey{
+                                               Namespace: instance.Namespace,
+                                               Name:      nat_name,
+                                       }, nat_instance_temp)
+
+                                       if errs.IsNotFound(err_get) {
+                                               return true, nil
+                                       }
+                                       r.Log.Info("Waiting for Deleting CR : " + nat_name)
+                                       return false, nil
+                               },
+                       )
+
+                       if err != nil {
+                               r.Log.Error(err, "Failed to delete CR : "+nat_name)
+                       }
+               }
+       }
+
+       return nil
+}
+
+func (r *CNFHubSiteReconciler) check() {
+       ls_list := &batchv1alpha1.CNFHubSiteList{}
+       err := r.List(context.Background(), ls_list)
+       if err != nil {
+               r.Log.Error(err, "Failed to list CNFHubSite CRs")
+       } else {
+               if len(ls_list.Items) > 0 {
+                       for _, inst := range ls_list.Items {
+                               r.Log.Info("Checking CNFHubSite: " + inst.Name)
+                               r.processInstance(&inst)
+                       }
+               }
+       }
+}
+
+// Regular check
+func (r *CNFHubSiteReconciler) SafeCheck() {
+       doCheck := true
+       r.mux.Lock()
+       if !inHSQueryStatus {
+               inHSQueryStatus = true
+       } else {
+               doCheck = false
+       }
+       r.mux.Unlock()
+
+       if doCheck {
+               r.check()
+
+               r.mux.Lock()
+               inHSQueryStatus = false
+               r.mux.Unlock()
+       }
+}
+
+func (r *CNFHubSiteReconciler) SetupWithManager(mgr ctrl.Manager) error {
+       // Start the loop to check ip address change of local/remote services
+       go func() {
+               interval := time.After(r.CheckInterval)
+               for {
+                       select {
+                       case <-interval:
+                               r.SafeCheck()
+                               interval = time.After(r.CheckInterval)
+                       case <-context.Background().Done():
+                               return
+                       }
+               }
+       }()
+
+       ps := builder.WithPredicates(predicate.GenerationChangedPredicate{})
+       return ctrl.NewControllerManagedBy(mgr).
+               For(&batchv1alpha1.CNFHubSite{}, ps).
+               Complete(r)
+}
index a45fdfe..1bccb24 100644 (file)
@@ -38,8 +38,7 @@ type CNFLocalServiceReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnflocalservices,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnflocalservices/status,verbs=get;update;patch
 
-func (r *CNFLocalServiceReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       ctx := context.Background()
+func (r *CNFLocalServiceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
        log := r.Log.WithValues("CNFLocalService", req.NamespacedName)
        during, _ := time.ParseDuration("5s")
 
index bee2cff..c3e1924 100644 (file)
@@ -29,7 +29,7 @@ func (m *CNFNatHandler) GetType() string {
        return "CNFNAT"
 }
 
-func (m *CNFNatHandler) GetName(instance runtime.Object) string {
+func (m *CNFNatHandler) GetName(instance client.Object) string {
        nat := instance.(*batchv1alpha1.CNFNAT)
        return nat.Name
 }
@@ -38,14 +38,14 @@ func (m *CNFNatHandler) GetFinalizer() string {
        return "cnfnat.finalizers.sdewan.akraino.org"
 }
 
-func (m *CNFNatHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *CNFNatHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.CNFNAT{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
 }
 
 //pupulate "nat" to target field as default value
-func (m *CNFNatHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *CNFNatHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        cnfnat := instance.(*batchv1alpha1.CNFNAT)
        cnfnat.Spec.Name = cnfnat.ObjectMeta.Name
        cnfnatObject := openwrt.SdewanNat(cnfnat.Spec)
@@ -99,8 +99,8 @@ type CNFNATReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfnats,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfnats/status,verbs=get;update;patch
 
-func (r *CNFNATReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, cnfnatHandler)
+func (r *CNFNATReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, cnfnatHandler)
 }
 
 func (r *CNFNATReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -109,9 +109,7 @@ func (r *CNFNATReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.CNFNAT{}, ps).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.CNFNATList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.CNFNATList{})),
                        Filter).
                Complete(r)
 }
index 6ec627c..2e568d1 100644 (file)
@@ -27,7 +27,7 @@ func (m *CNFRouteHandler) GetType() string {
        return "cnfRoute"
 }
 
-func (m *CNFRouteHandler) GetName(instance runtime.Object) string {
+func (m *CNFRouteHandler) GetName(instance client.Object) string {
        route := instance.(*batchv1alpha1.CNFRoute)
        return route.Name
 }
@@ -36,13 +36,13 @@ func (m *CNFRouteHandler) GetFinalizer() string {
        return "rule.finalizers.sdewan.akraino.org"
 }
 
-func (m *CNFRouteHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *CNFRouteHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.CNFRoute{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
 }
 
-func (m *CNFRouteHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *CNFRouteHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        route := instance.(*batchv1alpha1.CNFRoute)
        openwrtroute := openwrt.SdewanRoute{
                Name:  route.Name,
@@ -101,8 +101,8 @@ type CNFRouteReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfroutes,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfroutes/status,verbs=get;update;patch
 
-func (r *CNFRouteReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, cnfRouteHandler)
+func (r *CNFRouteReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, cnfRouteHandler)
 }
 
 func (r *CNFRouteReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -110,9 +110,7 @@ func (r *CNFRouteReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.CNFRoute{}).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.CNFRouteList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.CNFRouteList{})),
                        Filter).
                Complete(r)
 }
index 037258a..6786b86 100644 (file)
@@ -27,7 +27,7 @@ func (m *CNFRouteRuleHandler) GetType() string {
        return "cnfRouteRule"
 }
 
-func (m *CNFRouteRuleHandler) GetName(instance runtime.Object) string {
+func (m *CNFRouteRuleHandler) GetName(instance client.Object) string {
        routerule := instance.(*batchv1alpha1.CNFRouteRule)
        return routerule.Name
 }
@@ -36,13 +36,13 @@ func (m *CNFRouteRuleHandler) GetFinalizer() string {
        return "rule.finalizers.sdewan.akraino.org"
 }
 
-func (m *CNFRouteRuleHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *CNFRouteRuleHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.CNFRouteRule{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
 }
 
-func (m *CNFRouteRuleHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *CNFRouteRuleHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        routerule := instance.(*batchv1alpha1.CNFRouteRule)
        openwrtrouterule := openwrt.SdewanRouteRule{
                Name:   routerule.Name,
@@ -103,8 +103,8 @@ type CNFRouteRuleReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfrouterules,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfrouterules/status,verbs=get;update;patch
 
-func (r *CNFRouteRuleReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, cnfRouteRuleHandler)
+func (r *CNFRouteRuleReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, cnfRouteRuleHandler)
 }
 
 func (r *CNFRouteRuleReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -112,9 +112,7 @@ func (r *CNFRouteRuleReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.CNFRouteRule{}).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.CNFRouteRuleList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.CNFRouteRuleList{})),
                        Filter).
                Complete(r)
 }
index 736ecd3..159eaf4 100644 (file)
@@ -38,8 +38,7 @@ var inSQueryStatus = false
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfservices,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=cnfservices/status,verbs=get;update;patch
 
-func (r *CNFServiceReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       ctx := context.Background()
+func (r *CNFServiceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
        log := r.Log.WithValues("cnfservices", req.NamespacedName)
        during, _ := time.ParseDuration("5s")
        instance, err := r.GetInstance(req)
@@ -149,6 +148,7 @@ func (r *CNFServiceReconciler) processInstance(instance *batchv1alpha1.CNFServic
 
        return nil
 }
+
 func (r *CNFServiceReconciler) getIP4s(dns string) ([]string, error) {
        ips, err := net.LookupIP(dns)
        var ip4s []string
index 424f82b..5a4ffd0 100644 (file)
@@ -29,7 +29,7 @@ func (m *FirewallDnatHandler) GetType() string {
        return "FirewallDnat"
 }
 
-func (m *FirewallDnatHandler) GetName(instance runtime.Object) string {
+func (m *FirewallDnatHandler) GetName(instance client.Object) string {
        dnat := instance.(*batchv1alpha1.FirewallDNAT)
        return dnat.Name
 }
@@ -38,7 +38,7 @@ func (m *FirewallDnatHandler) GetFinalizer() string {
        return "dnat.finalizers.sdewan.akraino.org"
 }
 
-func (m *FirewallDnatHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *FirewallDnatHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.FirewallDNAT{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
@@ -46,7 +46,7 @@ func (m *FirewallDnatHandler) GetInstance(r client.Client, ctx context.Context,
 
 //pupulate "dnat" to target field as default value
 //copy "name" field value from metadata to SPEC.name
-func (m *FirewallDnatHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *FirewallDnatHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        firewalldnat := instance.(*batchv1alpha1.FirewallDNAT)
        firewalldnat.Spec.Name = firewalldnat.ObjectMeta.Name
        firewalldnat.Spec.Target = "DNAT"
@@ -103,8 +103,8 @@ type FirewallDNATReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=firewalldnats,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=firewalldnats/status,verbs=get;update;patch
 
-func (r *FirewallDNATReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, firewallDnatHandler)
+func (r *FirewallDNATReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, firewallDnatHandler)
 }
 
 func (r *FirewallDNATReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -113,9 +113,7 @@ func (r *FirewallDNATReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.FirewallDNAT{}, ps).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.FirewallDNATList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.FirewallDNATList{})),
                        Filter).
                Complete(r)
 }
index 4cb2171..d12154a 100644 (file)
@@ -29,7 +29,7 @@ func (m *FirewallForwardingHandler) GetType() string {
        return "FirewallForwarding"
 }
 
-func (m *FirewallForwardingHandler) GetName(instance runtime.Object) string {
+func (m *FirewallForwardingHandler) GetName(instance client.Object) string {
        forwarding := instance.(*batchv1alpha1.FirewallForwarding)
        return forwarding.Name
 }
@@ -38,13 +38,13 @@ func (m *FirewallForwardingHandler) GetFinalizer() string {
        return "forwarding.finalizers.sdewan.akraino.org"
 }
 
-func (m *FirewallForwardingHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *FirewallForwardingHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.FirewallForwarding{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
 }
 
-func (m *FirewallForwardingHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *FirewallForwardingHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        firewallforwarding := instance.(*batchv1alpha1.FirewallForwarding)
        firewallforwarding.Spec.Name = firewallforwarding.ObjectMeta.Name
        firewallforwardingObject := openwrt.SdewanFirewallForwarding(firewallforwarding.Spec)
@@ -100,8 +100,8 @@ type FirewallForwardingReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=firewallforwardings,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=firewallforwardings/status,verbs=get;update;patch
 
-func (r *FirewallForwardingReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, firewallForwardingHandler)
+func (r *FirewallForwardingReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, firewallForwardingHandler)
 }
 
 func (r *FirewallForwardingReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -110,9 +110,7 @@ func (r *FirewallForwardingReconciler) SetupWithManager(mgr ctrl.Manager) error
                For(&batchv1alpha1.FirewallForwarding{}, ps).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.FirewallForwardingList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.FirewallForwardingList{})),
                        Filter).
                Complete(r)
 }
index ba45ec8..35b0e23 100644 (file)
@@ -29,7 +29,7 @@ func (m *FirewallRuleHandler) GetType() string {
        return "FirewallRule"
 }
 
-func (m *FirewallRuleHandler) GetName(instance runtime.Object) string {
+func (m *FirewallRuleHandler) GetName(instance client.Object) string {
        rule := instance.(*batchv1alpha1.FirewallRule)
        return rule.Name
 }
@@ -38,13 +38,13 @@ func (m *FirewallRuleHandler) GetFinalizer() string {
        return "rule.finalizers.sdewan.akraino.org"
 }
 
-func (m *FirewallRuleHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *FirewallRuleHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.FirewallRule{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
 }
 
-func (m *FirewallRuleHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *FirewallRuleHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        firewallrule := instance.(*batchv1alpha1.FirewallRule)
        firewallrule.Spec.Name = firewallrule.ObjectMeta.Name
        firewallruleObject := openwrt.SdewanFirewallRule(firewallrule.Spec)
@@ -100,8 +100,8 @@ type FirewallRuleReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=firewallrules,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=firewallrules/status,verbs=get;update;patch
 
-func (r *FirewallRuleReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, firewallRuleHandler)
+func (r *FirewallRuleReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, firewallRuleHandler)
 }
 
 func (r *FirewallRuleReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -110,9 +110,7 @@ func (r *FirewallRuleReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.FirewallRule{}, ps).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.FirewallRuleList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.FirewallRuleList{})),
                        Filter).
                Complete(r)
 }
index ece591d..48e28ea 100644 (file)
@@ -29,7 +29,7 @@ func (m *FirewallSnatHandler) GetType() string {
        return "FirewallSnat"
 }
 
-func (m *FirewallSnatHandler) GetName(instance runtime.Object) string {
+func (m *FirewallSnatHandler) GetName(instance client.Object) string {
        snat := instance.(*batchv1alpha1.FirewallSNAT)
        return snat.Name
 }
@@ -38,7 +38,7 @@ func (m *FirewallSnatHandler) GetFinalizer() string {
        return "snat.finalizers.sdewan.akraino.org"
 }
 
-func (m *FirewallSnatHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *FirewallSnatHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.FirewallSNAT{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
@@ -46,7 +46,7 @@ func (m *FirewallSnatHandler) GetInstance(r client.Client, ctx context.Context,
 
 //pupulate "snat" to target field as default value
 //copy "name" field value from metadata to SPEC.name
-func (m *FirewallSnatHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *FirewallSnatHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        firewallsnat := instance.(*batchv1alpha1.FirewallSNAT)
        firewallsnat.Spec.Name = firewallsnat.ObjectMeta.Name
        firewallsnat.Spec.Target = "SNAT"
@@ -103,8 +103,8 @@ type FirewallSNATReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=firewallsnats,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=firewallsnats/status,verbs=get;update;patch
 
-func (r *FirewallSNATReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, firewallSnatHandler)
+func (r *FirewallSNATReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, firewallSnatHandler)
 }
 
 func (r *FirewallSNATReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -113,9 +113,7 @@ func (r *FirewallSNATReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.FirewallSNAT{}, ps).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.FirewallSNATList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.FirewallSNATList{})),
                        Filter).
                Complete(r)
 }
index 132ac31..68cd0f1 100644 (file)
@@ -29,7 +29,7 @@ func (m *FirewallZoneHandler) GetType() string {
        return "FirewallZone"
 }
 
-func (m *FirewallZoneHandler) GetName(instance runtime.Object) string {
+func (m *FirewallZoneHandler) GetName(instance client.Object) string {
        zone := instance.(*batchv1alpha1.FirewallZone)
        return zone.Name
 }
@@ -38,13 +38,13 @@ func (m *FirewallZoneHandler) GetFinalizer() string {
        return "rule.finalizers.sdewan.akraino.org"
 }
 
-func (m *FirewallZoneHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *FirewallZoneHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.FirewallZone{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
 }
 
-func (m *FirewallZoneHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *FirewallZoneHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        firewallzone := instance.(*batchv1alpha1.FirewallZone)
        instance_to_convert := batchv1alpha1.FirewallZoneSpec(firewallzone.Spec)
        networks := make([]string, len(instance_to_convert.Network))
@@ -110,8 +110,8 @@ type FirewallZoneReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=firewallzones,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=firewallzones/status,verbs=get;update;patch
 
-func (r *FirewallZoneReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, firewallZoneHandler)
+func (r *FirewallZoneReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, firewallZoneHandler)
 }
 
 func (r *FirewallZoneReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -120,9 +120,7 @@ func (r *FirewallZoneReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.FirewallZone{}, ps).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.FirewallZoneList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.FirewallZoneList{})),
                        Filter).
                Complete(r)
 }
index 2b9e29e..153b90d 100644 (file)
@@ -29,7 +29,7 @@ func (m *IpsecHostHandler) GetType() string {
        return "IpsecHost"
 }
 
-func (m *IpsecHostHandler) GetName(instance runtime.Object) string {
+func (m *IpsecHostHandler) GetName(instance client.Object) string {
        host := instance.(*batchv1alpha1.IpsecHost)
        return host.Name
 }
@@ -38,13 +38,13 @@ func (m *IpsecHostHandler) GetFinalizer() string {
        return "ipsec.host.finalizers.sdewan.akraino.org"
 }
 
-func (m *IpsecHostHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *IpsecHostHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.IpsecHost{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
 }
 
-func (m *IpsecHostHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *IpsecHostHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        host := instance.(*batchv1alpha1.IpsecHost)
        numOfConn := len(host.Spec.Connections)
        conn := host.Spec.Connections
@@ -133,8 +133,8 @@ type IpsecHostReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=ipsechosts,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=ipsechosts/status,verbs=get;update;patch
 
-func (r *IpsecHostReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, ipsecHostHandler)
+func (r *IpsecHostReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, ipsecHostHandler)
 }
 
 func (r *IpsecHostReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -143,9 +143,7 @@ func (r *IpsecHostReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.IpsecHost{}, ps).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.IpsecHostList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.IpsecHostList{})),
                        Filter).
                Complete(r)
 }
index 5bbf37b..f2bc441 100644 (file)
@@ -29,7 +29,7 @@ func (m *IpsecProposalHandler) GetType() string {
        return "IpsecProposal"
 }
 
-func (m *IpsecProposalHandler) GetName(instance runtime.Object) string {
+func (m *IpsecProposalHandler) GetName(instance client.Object) string {
        proposal := instance.(*batchv1alpha1.IpsecProposal)
        return proposal.Name
 }
@@ -38,13 +38,13 @@ func (m *IpsecProposalHandler) GetFinalizer() string {
        return "proposal.finalizers.sdewan.akraino.org"
 }
 
-func (m *IpsecProposalHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *IpsecProposalHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.IpsecProposal{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
 }
 
-func (m *IpsecProposalHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *IpsecProposalHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        proposal := instance.(*batchv1alpha1.IpsecProposal)
        proposal.Spec.Name = proposal.ObjectMeta.Name
        proposalObject := openwrt.SdewanIpsecProposal(proposal.Spec)
@@ -100,8 +100,8 @@ type IpsecProposalReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=ipsecproposals,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=ipsecproposals/status,verbs=get;update;patch
 
-func (r *IpsecProposalReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, ipsecProposalHandler)
+func (r *IpsecProposalReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, ipsecProposalHandler)
 }
 
 func (r *IpsecProposalReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -110,9 +110,7 @@ func (r *IpsecProposalReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.IpsecProposal{}, ps).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.IpsecProposalList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.IpsecProposalList{})),
                        Filter).
                Complete(r)
 }
index 57a56b1..792afb2 100644 (file)
@@ -29,7 +29,7 @@ func (m *IpsecSiteHandler) GetType() string {
        return "IpsecSite"
 }
 
-func (m *IpsecSiteHandler) GetName(instance runtime.Object) string {
+func (m *IpsecSiteHandler) GetName(instance client.Object) string {
        site := instance.(*batchv1alpha1.IpsecSite)
        return site.Name
 }
@@ -38,13 +38,13 @@ func (m *IpsecSiteHandler) GetFinalizer() string {
        return "ipsec.site.finalizers.sdewan.akraino.org"
 }
 
-func (m *IpsecSiteHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *IpsecSiteHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.IpsecSite{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
 }
 
-func (m *IpsecSiteHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *IpsecSiteHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        site := instance.(*batchv1alpha1.IpsecSite)
        numOfConn := len(site.Spec.Connections)
        conn := site.Spec.Connections
@@ -133,8 +133,8 @@ type IpsecSiteReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=ipsecsites,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=ipsecsites/status,verbs=get;update;patch
 
-func (r *IpsecSiteReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, ipsecSiteHandler)
+func (r *IpsecSiteReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, ipsecSiteHandler)
 }
 
 func (r *IpsecSiteReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -143,9 +143,7 @@ func (r *IpsecSiteReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.IpsecSite{}, ps).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.IpsecSiteList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.IpsecSiteList{})),
                        Filter).
                Complete(r)
 }
index e64bccb..87d111d 100644 (file)
@@ -30,7 +30,7 @@ func (m *Mwan3PolicyHandler) GetType() string {
        return "Mwan3Policy"
 }
 
-func (m *Mwan3PolicyHandler) GetName(instance runtime.Object) string {
+func (m *Mwan3PolicyHandler) GetName(instance client.Object) string {
        policy := instance.(*batchv1alpha1.Mwan3Policy)
        return policy.Name
 }
@@ -39,13 +39,13 @@ func (m *Mwan3PolicyHandler) GetFinalizer() string {
        return "rule.finalizers.sdewan.akraino.org"
 }
 
-func (m *Mwan3PolicyHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *Mwan3PolicyHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.Mwan3Policy{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
 }
 
-func (m *Mwan3PolicyHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *Mwan3PolicyHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        policy := instance.(*batchv1alpha1.Mwan3Policy)
        members := make([]openwrt.SdewanMember, len(policy.Spec.Members))
        for i, membercr := range policy.Spec.Members {
@@ -111,8 +111,8 @@ type Mwan3PolicyReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=mwan3policies,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=mwan3policies/status,verbs=get;update;patch
 
-func (r *Mwan3PolicyReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, mwan3PolicyHandler)
+func (r *Mwan3PolicyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, mwan3PolicyHandler)
 }
 
 func (r *Mwan3PolicyReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -121,9 +121,7 @@ func (r *Mwan3PolicyReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.Mwan3Policy{}, ps).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.Mwan3PolicyList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.Mwan3PolicyList{})),
                        Filter).
                Complete(r)
 }
index 932c5bc..41b8ff1 100644 (file)
@@ -29,7 +29,7 @@ func (m *Mwan3RuleHandler) GetType() string {
        return "Mwan3Rule"
 }
 
-func (m *Mwan3RuleHandler) GetName(instance runtime.Object) string {
+func (m *Mwan3RuleHandler) GetName(instance client.Object) string {
        Rule := instance.(*batchv1alpha1.Mwan3Rule)
        return Rule.Name
 }
@@ -38,13 +38,13 @@ func (m *Mwan3RuleHandler) GetFinalizer() string {
        return "rule.finalizers.sdewan.akraino.org"
 }
 
-func (m *Mwan3RuleHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *Mwan3RuleHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.Mwan3Rule{}
        err := r.Get(ctx, req.NamespacedName, instance)
        return instance, err
 }
 
-func (m *Mwan3RuleHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *Mwan3RuleHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        rule := instance.(*batchv1alpha1.Mwan3Rule)
        openwrtrule := openwrt.SdewanRule{
                Name:     rule.Name,
@@ -110,8 +110,8 @@ type Mwan3RuleReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=mwan3rules,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=mwan3rules/status,verbs=get;update;patch
 
-func (r *Mwan3RuleReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, mwan3RuleHandler)
+func (r *Mwan3RuleReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, mwan3RuleHandler)
 }
 
 func (r *Mwan3RuleReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -120,9 +120,7 @@ func (r *Mwan3RuleReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.Mwan3Rule{}, ps).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.Mwan3RuleList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.Mwan3RuleList{})),
                        Filter).
                Complete(r)
 }
index 49e2ac7..8457b53 100644 (file)
-// SPDX-License-Identifier: Apache-2.0\r
-// Copyright (c) 2021 Intel Corporation\r
-package controllers\r
-\r
-import (\r
-       "context"\r
-       "reflect"\r
-\r
-       "github.com/go-logr/logr"\r
-       appsv1 "k8s.io/api/apps/v1"\r
-       "k8s.io/apimachinery/pkg/runtime"\r
-       ctrl "sigs.k8s.io/controller-runtime"\r
-       "sigs.k8s.io/controller-runtime/pkg/builder"\r
-       "sigs.k8s.io/controller-runtime/pkg/client"\r
-       "sigs.k8s.io/controller-runtime/pkg/handler"\r
-       "sigs.k8s.io/controller-runtime/pkg/predicate"\r
-       "sigs.k8s.io/controller-runtime/pkg/source"\r
-\r
-       batchv1alpha1 "sdewan.akraino.org/sdewan/api/v1alpha1"\r
-       "sdewan.akraino.org/sdewan/openwrt"\r
-)\r
-\r
-var networkFirewallRuleHandler = new(NetworkFirewallRuleHandler)\r
-\r
-type NetworkFirewallRuleHandler struct {\r
-}\r
-\r
-func (m *NetworkFirewallRuleHandler) GetType() string {\r
-       return "NetworkFirewallRule"\r
-}\r
-\r
-func (m *NetworkFirewallRuleHandler) GetName(instance runtime.Object) string {\r
-       rule := instance.(*batchv1alpha1.NetworkFirewallRule)\r
-       return rule.Name\r
-}\r
-\r
-func (m *NetworkFirewallRuleHandler) GetFinalizer() string {\r
-       return "networkfirewallrule.finalizers.sdewan.akraino.org"\r
-}\r
-\r
-func (m *NetworkFirewallRuleHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {\r
-       instance := &batchv1alpha1.NetworkFirewallRule{}\r
-       err := r.Get(ctx, req.NamespacedName, instance)\r
-       return instance, err\r
-}\r
-\r
-func (m *NetworkFirewallRuleHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {\r
-       firewallrule := instance.(*batchv1alpha1.NetworkFirewallRule)\r
-       firewallrule.Spec.Name = firewallrule.ObjectMeta.Name\r
-       firewallruleObject := openwrt.SdewanNetworkFirewallRule(firewallrule.Spec)\r
-       return &firewallruleObject, nil\r
-}\r
-\r
-func (m *NetworkFirewallRuleHandler) IsEqual(instance1 openwrt.IOpenWrtObject, instance2 openwrt.IOpenWrtObject) bool {\r
-       rule1 := instance1.(*openwrt.SdewanNetworkFirewallRule)\r
-       rule2 := instance2.(*openwrt.SdewanNetworkFirewallRule)\r
-       return reflect.DeepEqual(*rule1, *rule2)\r
-}\r
-\r
-func (m *NetworkFirewallRuleHandler) GetObject(clientInfo *openwrt.OpenwrtClientInfo, name string) (openwrt.IOpenWrtObject, error) {\r
-       openwrtClient := openwrt.GetOpenwrtClient(*clientInfo)\r
-       firewall := openwrt.NetworkFirewallClient{OpenwrtClient: openwrtClient}\r
-       ret, err := firewall.GetRule(name)\r
-       return ret, err\r
-}\r
-\r
-func (m *NetworkFirewallRuleHandler) CreateObject(clientInfo *openwrt.OpenwrtClientInfo, instance openwrt.IOpenWrtObject) (openwrt.IOpenWrtObject, error) {\r
-       openwrtClient := openwrt.GetOpenwrtClient(*clientInfo)\r
-       firewall := openwrt.NetworkFirewallClient{OpenwrtClient: openwrtClient}\r
-       rule := instance.(*openwrt.SdewanNetworkFirewallRule)\r
-       return firewall.CreateRule(*rule)\r
-}\r
-\r
-func (m *NetworkFirewallRuleHandler) UpdateObject(clientInfo *openwrt.OpenwrtClientInfo, instance openwrt.IOpenWrtObject) (openwrt.IOpenWrtObject, error) {\r
-       openwrtClient := openwrt.GetOpenwrtClient(*clientInfo)\r
-       firewall := openwrt.NetworkFirewallClient{OpenwrtClient: openwrtClient}\r
-       rule := instance.(*openwrt.SdewanNetworkFirewallRule)\r
-       return firewall.UpdateRule(*rule)\r
-}\r
-\r
-func (m *NetworkFirewallRuleHandler) DeleteObject(clientInfo *openwrt.OpenwrtClientInfo, name string) error {\r
-       openwrtClient := openwrt.GetOpenwrtClient(*clientInfo)\r
-       firewall := openwrt.NetworkFirewallClient{OpenwrtClient: openwrtClient}\r
-       return firewall.DeleteRule(name)\r
-}\r
-\r
-func (m *NetworkFirewallRuleHandler) Restart(clientInfo *openwrt.OpenwrtClientInfo) (bool, error) {\r
-       return true, nil\r
-}\r
-\r
-// NetworkFirewallRuleReconciler reconciles a NetworkFirewallRule object\r
-type NetworkFirewallRuleReconciler struct {\r
-       client.Client\r
-       Log    logr.Logger\r
-       Scheme *runtime.Scheme\r
-}\r
-\r
-// +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=networkfirewallrules,verbs=get;list;watch;create;update;patch;delete\r
-// +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=networkfirewallrules/status,verbs=get;update;patch\r
-\r
-func (r *NetworkFirewallRuleReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {\r
-       return ProcessReconcile(r, r.Log, req, networkFirewallRuleHandler)\r
-}\r
-\r
-func (r *NetworkFirewallRuleReconciler) SetupWithManager(mgr ctrl.Manager) error {\r
-       ps := builder.WithPredicates(predicate.GenerationChangedPredicate{})\r
-       return ctrl.NewControllerManagedBy(mgr).\r
-               For(&batchv1alpha1.NetworkFirewallRule{}, ps).\r
-               Watches(\r
-                       &source.Kind{Type: &appsv1.Deployment{}},\r
-                       &handler.EnqueueRequestsFromMapFunc{\r
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.NetworkFirewallRuleList{})),\r
-                       },\r
-                       Filter).\r
-               Complete(r)\r
-}\r
+// SPDX-License-Identifier: Apache-2.0
+// Copyright (c) 2021 Intel Corporation
+package controllers
+
+import (
+       "context"
+       "reflect"
+
+       "github.com/go-logr/logr"
+       appsv1 "k8s.io/api/apps/v1"
+       "k8s.io/apimachinery/pkg/runtime"
+       ctrl "sigs.k8s.io/controller-runtime"
+       "sigs.k8s.io/controller-runtime/pkg/builder"
+       "sigs.k8s.io/controller-runtime/pkg/client"
+       "sigs.k8s.io/controller-runtime/pkg/handler"
+       "sigs.k8s.io/controller-runtime/pkg/predicate"
+       "sigs.k8s.io/controller-runtime/pkg/source"
+
+       batchv1alpha1 "sdewan.akraino.org/sdewan/api/v1alpha1"
+       "sdewan.akraino.org/sdewan/openwrt"
+)
+
+var networkFirewallRuleHandler = new(NetworkFirewallRuleHandler)
+
+type NetworkFirewallRuleHandler struct {
+}
+
+func (m *NetworkFirewallRuleHandler) GetType() string {
+       return "NetworkFirewallRule"
+}
+
+func (m *NetworkFirewallRuleHandler) GetName(instance client.Object) string {
+       rule := instance.(*batchv1alpha1.NetworkFirewallRule)
+       return rule.Name
+}
+
+func (m *NetworkFirewallRuleHandler) GetFinalizer() string {
+       return "networkfirewallrule.finalizers.sdewan.akraino.org"
+}
+
+func (m *NetworkFirewallRuleHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
+       instance := &batchv1alpha1.NetworkFirewallRule{}
+       err := r.Get(ctx, req.NamespacedName, instance)
+       return instance, err
+}
+
+func (m *NetworkFirewallRuleHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+       firewallrule := instance.(*batchv1alpha1.NetworkFirewallRule)
+       firewallrule.Spec.Name = firewallrule.ObjectMeta.Name
+       firewallruleObject := openwrt.SdewanNetworkFirewallRule(firewallrule.Spec)
+       return &firewallruleObject, nil
+}
+
+func (m *NetworkFirewallRuleHandler) IsEqual(instance1 openwrt.IOpenWrtObject, instance2 openwrt.IOpenWrtObject) bool {
+       rule1 := instance1.(*openwrt.SdewanNetworkFirewallRule)
+       rule2 := instance2.(*openwrt.SdewanNetworkFirewallRule)
+       return reflect.DeepEqual(*rule1, *rule2)
+}
+
+func (m *NetworkFirewallRuleHandler) GetObject(clientInfo *openwrt.OpenwrtClientInfo, name string) (openwrt.IOpenWrtObject, error) {
+       openwrtClient := openwrt.GetOpenwrtClient(*clientInfo)
+       firewall := openwrt.NetworkFirewallClient{OpenwrtClient: openwrtClient}
+       ret, err := firewall.GetRule(name)
+       return ret, err
+}
+
+func (m *NetworkFirewallRuleHandler) CreateObject(clientInfo *openwrt.OpenwrtClientInfo, instance openwrt.IOpenWrtObject) (openwrt.IOpenWrtObject, error) {
+       openwrtClient := openwrt.GetOpenwrtClient(*clientInfo)
+       firewall := openwrt.NetworkFirewallClient{OpenwrtClient: openwrtClient}
+       rule := instance.(*openwrt.SdewanNetworkFirewallRule)
+       return firewall.CreateRule(*rule)
+}
+
+func (m *NetworkFirewallRuleHandler) UpdateObject(clientInfo *openwrt.OpenwrtClientInfo, instance openwrt.IOpenWrtObject) (openwrt.IOpenWrtObject, error) {
+       openwrtClient := openwrt.GetOpenwrtClient(*clientInfo)
+       firewall := openwrt.NetworkFirewallClient{OpenwrtClient: openwrtClient}
+       rule := instance.(*openwrt.SdewanNetworkFirewallRule)
+       return firewall.UpdateRule(*rule)
+}
+
+func (m *NetworkFirewallRuleHandler) DeleteObject(clientInfo *openwrt.OpenwrtClientInfo, name string) error {
+       openwrtClient := openwrt.GetOpenwrtClient(*clientInfo)
+       firewall := openwrt.NetworkFirewallClient{OpenwrtClient: openwrtClient}
+       return firewall.DeleteRule(name)
+}
+
+func (m *NetworkFirewallRuleHandler) Restart(clientInfo *openwrt.OpenwrtClientInfo) (bool, error) {
+       return true, nil
+}
+
+// NetworkFirewallRuleReconciler reconciles a NetworkFirewallRule object
+type NetworkFirewallRuleReconciler struct {
+       client.Client
+       Log    logr.Logger
+       Scheme *runtime.Scheme
+}
+
+// +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=networkfirewallrules,verbs=get;list;watch;create;update;patch;delete
+// +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=networkfirewallrules/status,verbs=get;update;patch
+
+func (r *NetworkFirewallRuleReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, networkFirewallRuleHandler)
+}
+
+func (r *NetworkFirewallRuleReconciler) SetupWithManager(mgr ctrl.Manager) error {
+       ps := builder.WithPredicates(predicate.GenerationChangedPredicate{})
+       return ctrl.NewControllerManagedBy(mgr).
+               For(&batchv1alpha1.NetworkFirewallRule{}, ps).
+               Watches(
+                       &source.Kind{Type: &appsv1.Deployment{}},
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.NetworkFirewallRuleList{})),
+                       Filter).
+               Complete(r)
+}
index 0daa39e..7b953b7 100644 (file)
@@ -44,7 +44,7 @@ func (m *SdewanApplicationHandler) GetType() string {
        return "sdewanApplication"
 }
 
-func (m *SdewanApplicationHandler) GetName(instance runtime.Object) string {
+func (m *SdewanApplicationHandler) GetName(instance client.Object) string {
        app := instance.(*batchv1alpha1.SdewanApplication)
        return app.Name
 }
@@ -53,7 +53,7 @@ func (m *SdewanApplicationHandler) GetFinalizer() string {
        return "rule.finalizers.sdewan.akraino.org"
 }
 
-func (m *SdewanApplicationHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (runtime.Object, error) {
+func (m *SdewanApplicationHandler) GetInstance(r client.Client, ctx context.Context, req ctrl.Request) (client.Object, error) {
        instance := &batchv1alpha1.SdewanApplication{}
        err := r.Get(ctx, req.NamespacedName, instance)
        if err == nil {
@@ -78,7 +78,7 @@ func (m *SdewanApplicationHandler) GetInstance(r client.Client, ctx context.Cont
        return instance, err
 }
 
-func (m *SdewanApplicationHandler) Convert(instance runtime.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
+func (m *SdewanApplicationHandler) Convert(instance client.Object, deployment appsv1.Deployment) (openwrt.IOpenWrtObject, error) {
        app := instance.(*batchv1alpha1.SdewanApplication)
        openwrtapp := openwrt.SdewanApp{
                Name:   app.Name,
@@ -145,11 +145,11 @@ var appFilter = builder.WithPredicates(predicate.Funcs{
        },
 })
 
-func GetAppToRequestsFunc(r client.Client) func(h handler.MapObject) []reconcile.Request {
+func GetAppToRequestsFunc(r client.Client) func(h client.Object) []reconcile.Request {
 
-       return func(h handler.MapObject) []reconcile.Request {
-               podLabels := h.Meta.GetLabels()
-               podNamespace := h.Meta.GetNamespace()
+       return func(h client.Object) []reconcile.Request {
+               podLabels := h.GetLabels()
+               podNamespace := h.GetNamespace()
                appCRList := &batchv1alpha1.SdewanApplicationList{}
                cr := &batchv1alpha1.SdewanApplication{}
                ctx := context.Background()
@@ -205,8 +205,8 @@ type SdewanApplicationReconciler struct {
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=sdewanapplications,verbs=get;list;watch;create;update;patch;delete
 // +kubebuilder:rbac:groups=batch.sdewan.akraino.org,resources=sdewanapplications/status,verbs=get;update;patch
 
-func (r *SdewanApplicationReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
-       return ProcessReconcile(r, r.Log, req, sdewanApplicationHandler)
+func (r *SdewanApplicationReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
+       return ProcessReconcile(r.Client, r.Log, ctx, req, sdewanApplicationHandler)
 }
 
 func (r *SdewanApplicationReconciler) SetupWithManager(mgr ctrl.Manager) error {
@@ -214,15 +214,11 @@ func (r *SdewanApplicationReconciler) SetupWithManager(mgr ctrl.Manager) error {
                For(&batchv1alpha1.SdewanApplication{}).
                Watches(
                        &source.Kind{Type: &appsv1.Deployment{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetToRequestsFunc(r, &batchv1alpha1.SdewanApplicationList{})),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetToRequestsFunc(r.Client, &batchv1alpha1.SdewanApplicationList{})),
                        Filter).
                Watches(
                        &source.Kind{Type: &corev1.Pod{}},
-                       &handler.EnqueueRequestsFromMapFunc{
-                               ToRequests: handler.ToRequestsFunc(GetAppToRequestsFunc(r)),
-                       },
+                       handler.EnqueueRequestsFromMapFunc(GetAppToRequestsFunc(r.Client)),
                        appFilter).
                Complete(r)
 }
index 36e7df5..d449d3a 100644 (file)
@@ -1,59 +1,62 @@
 module sdewan.akraino.org/sdewan
 
-go 1.17
+go 1.18
 
 require (
-       github.com/go-logr/logr v0.1.0
-       k8s.io/api v0.18.2
-       k8s.io/apimachinery v0.18.2
-       k8s.io/client-go v0.18.2
-       sigs.k8s.io/controller-runtime v0.6.0
+       github.com/go-logr/logr v1.2.0
+       k8s.io/api v0.23.0
+       k8s.io/apimachinery v0.23.0
+       k8s.io/client-go v0.23.0
+       sigs.k8s.io/controller-runtime v0.11.0
 )
 
 require (
-       cloud.google.com/go v0.38.0 // indirect
-       github.com/beorn7/perks v1.0.0 // indirect
+       cloud.google.com/go v0.81.0 // indirect
+       github.com/beorn7/perks v1.0.1 // indirect
+       github.com/cespare/xxhash/v2 v2.1.1 // indirect
        github.com/davecgh/go-spew v1.1.1 // indirect
-       github.com/evanphx/json-patch v4.5.0+incompatible // indirect
-       github.com/go-logr/zapr v0.1.0 // indirect
-       github.com/gogo/protobuf v1.3.1 // indirect
-       github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef // indirect
-       github.com/golang/protobuf v1.3.2 // indirect
-       github.com/google/go-cmp v0.3.0 // indirect
+       github.com/evanphx/json-patch v4.12.0+incompatible // indirect
+       github.com/fsnotify/fsnotify v1.5.1 // indirect
+       github.com/go-logr/zapr v1.2.0 // indirect
+       github.com/gogo/protobuf v1.3.2 // indirect
+       github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
+       github.com/golang/protobuf v1.5.2 // indirect
+       github.com/google/go-cmp v0.5.6 // indirect
        github.com/google/gofuzz v1.1.0 // indirect
-       github.com/google/uuid v1.1.1 // indirect
-       github.com/googleapis/gnostic v0.3.1 // indirect
-       github.com/hashicorp/golang-lru v0.5.1 // indirect
-       github.com/imdario/mergo v0.3.6 // indirect
-       github.com/json-iterator/go v1.1.8 // indirect
-       github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
+       github.com/google/uuid v1.1.2 // indirect
+       github.com/googleapis/gnostic v0.5.5 // indirect
+       github.com/imdario/mergo v0.3.12 // indirect
+       github.com/json-iterator/go v1.1.12 // indirect
+       github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
        github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
-       github.com/modern-go/reflect2 v1.0.1 // indirect
+       github.com/modern-go/reflect2 v1.0.2 // indirect
        github.com/pkg/errors v0.9.1 // indirect
-       github.com/prometheus/client_golang v1.0.0 // indirect
+       github.com/prometheus/client_golang v1.11.1 // indirect
        github.com/prometheus/client_model v0.2.0 // indirect
-       github.com/prometheus/common v0.4.1 // indirect
-       github.com/prometheus/procfs v0.0.2 // indirect
+       github.com/prometheus/common v0.28.0 // indirect
+       github.com/prometheus/procfs v0.6.0 // indirect
        github.com/spf13/pflag v1.0.5 // indirect
-       go.uber.org/atomic v1.4.0 // indirect
-       go.uber.org/multierr v1.1.0 // indirect
-       go.uber.org/zap v1.10.0 // indirect
-       golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 // indirect
-       golang.org/x/net v0.0.0-20200226121028-0de0cce0169b // indirect
-       golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 // indirect
-       golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7 // indirect
-       golang.org/x/text v0.3.2 // indirect
-       golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 // indirect
-       golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 // indirect
-       gomodules.xyz/jsonpatch/v2 v2.0.1 // indirect
-       google.golang.org/appengine v1.5.0 // indirect
-       gopkg.in/fsnotify.v1 v1.4.7 // indirect
+       go.uber.org/atomic v1.7.0 // indirect
+       go.uber.org/multierr v1.6.0 // indirect
+       go.uber.org/zap v1.19.1 // indirect
+       golang.org/x/net v0.0.0-20210825183410-e898025ed96a // indirect
+       golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f // indirect
+       golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8 // indirect
+       golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect
+       golang.org/x/text v0.3.7 // indirect
+       golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect
+       gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
+       google.golang.org/appengine v1.6.7 // indirect
+       google.golang.org/protobuf v1.27.1 // indirect
        gopkg.in/inf.v0 v0.9.1 // indirect
-       gopkg.in/yaml.v2 v2.3.0 // indirect
-       k8s.io/apiextensions-apiserver v0.18.2 // indirect
-       k8s.io/klog v1.0.0 // indirect
-       k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c // indirect
-       k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 // indirect
-       sigs.k8s.io/structured-merge-diff/v3 v3.0.0 // indirect
-       sigs.k8s.io/yaml v1.2.0 // indirect
+       gopkg.in/yaml.v2 v2.4.0 // indirect
+       gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
+       k8s.io/apiextensions-apiserver v0.23.0 // indirect
+       k8s.io/component-base v0.23.0 // indirect
+       k8s.io/klog/v2 v2.30.0 // indirect
+       k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect
+       k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b // indirect
+       sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect
+       sigs.k8s.io/structured-merge-diff/v4 v4.2.0 // indirect
+       sigs.k8s.io/yaml v1.3.0 // indirect
 )
index fbf9574..0b3f20d 100644 (file)
 cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
 cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo=
 cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
-github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
-github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
-github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
-github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
-github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
-github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
-github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
+cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
+cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
+cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
+cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
+cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
+cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
+cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
+cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
+cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
+cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
+cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
+cloud.google.com/go v0.81.0 h1:at8Tk2zUz63cLPR0JPWm5vp77pEZmzxEQBEfRKn1VV8=
+cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
+cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
+cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
+cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
+cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
+cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
+cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
+cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
+cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
+cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
+cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
+cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
+cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
+cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
+cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
+cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
+github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA=
+github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M=
+github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
+github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
+github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
-github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
+github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
+github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
 github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
-github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
-github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
-github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
-github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
+github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
+github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
+github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
 github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
+github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
+github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
+github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
 github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
-github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
-github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
+github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
+github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
+github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
+github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA=
+github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
+github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
 github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
-github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
-github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
+github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
+github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
+github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
-github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
 github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
-github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
 github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
-github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
-github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
+github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
+github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/creack/pty v1.1.11/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 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
-github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
+github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
 github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
-github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
 github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
 github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
 github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
 github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
 github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M=
-github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ=
+github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84=
+github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
-github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
+github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
+github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
+github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
+github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg=
+github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
-github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
-github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
 github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-github.com/go-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
 github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
-github.com/go-logr/zapr v0.1.0 h1:h+WVe9j6HAA01niTJPA/kKH0i7e0rLZBCwauQFcRE54=
-github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk=
-github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI=
-github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
-github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik=
-github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk=
-github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU=
-github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
-github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0=
-github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94=
-github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
-github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
-github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M=
-github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
+github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
+github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE=
+github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/zapr v1.2.0 h1:n4JnPI1T3Qq1SFEi/F8rwLrZERp2bso19PJZDB9dayk=
+github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro=
 github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
-github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
-github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I=
-github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
+github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
 github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU=
-github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs=
-github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk=
-github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA=
-github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64=
-github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4=
-github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
-github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
-github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI=
-github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY=
-github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
-github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
-github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU=
-github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY=
-github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU=
-github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
-github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
-github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg=
-github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
 github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
-github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
-github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4=
+github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
+github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
 github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
-github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
 github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef h1:veQD95Isof8w9/WXiA+pa3tz3fJXkt5B7QaRBrM62gk=
+github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
 github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
 github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
 github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
+github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
 github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
 github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
 github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
+github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
+github.com/google/cel-go v0.9.0/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w=
+github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA=
 github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
 github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
+github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
 github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
+github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
-github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
-github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
-github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
-github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk=
-github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU=
-github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
-github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
-github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
+github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
+github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw=
+github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
+github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
+github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
-github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
+github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
+github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
+github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
+github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
 github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
 github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
-github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
+github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
+github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
+github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
+github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
 github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
 github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
-github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28=
-github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
+github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
 github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
+github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
 github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
-github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+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/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
+github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
 github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
 github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
 github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
+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/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
 github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
 github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
 github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
-github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
-github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
 github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
 github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
-github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
+github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
-github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
-github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
-github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
+github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
+github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
+github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
 github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
+github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
+github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
+github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
 github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
+github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A=
 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 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
 github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+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-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
-github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
+github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
 github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
-github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
+github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
+github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
 github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
-github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.8.1 h1:C5Dqfs/LeauYDX0jJXIe2SWmwCbGzx9yF8C8xy3Lh34=
-github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA=
-github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
+github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
+github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE=
+github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
 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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
 github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
 github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
+github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
 github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
+github.com/prometheus/client_golang v1.11.1 h1:+4eQaD7vAZ6DsfsxB15hbE0odUjGI5ARs9yskGu1v4s=
+github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
 github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
 github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
 github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
 github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
+github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
+github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
+github.com/prometheus/common v0.28.0 h1:vGVfV9KrDTvWt5boZO0I19g2E3CsWfpPPKZM9dt3mEw=
+github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
 github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNGfs=
+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
 github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
 github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
-github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
-github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
+github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
+github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
 github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
+github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
 github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
+github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
 github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
 github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
 github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
-github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
-github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
+github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
+github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
-github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
-github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 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/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
+github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
+github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns=
+github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
 github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
-github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
-github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
-github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
-github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
-github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
-go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
-go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
-go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
-go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM=
+github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.1.32/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=
+github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
+go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
+go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
+go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
+go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0=
+go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE=
+go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc=
+go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4=
 go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
-go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
-go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
+go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
+go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4=
+go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
+go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM=
+go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
+go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw=
+go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
+go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE=
+go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE=
+go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
+go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
 go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
-go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
+go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
+go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
+go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
+go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA=
 go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
-go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
+go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
+go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
 go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
+go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
+go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI=
+go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
 golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo=
-golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+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.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
+golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
+golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+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.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
 golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
 golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8=
+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/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-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
+golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
+golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20210825183410-e898025ed96a h1:bRuuGXV8wwSdGTB+CtJf+FjgO1APK1CoO39T4BN/XBw=
+golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw=
+golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 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/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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-20201207232520-09787c993a3a/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-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7 h1:HmbHVPwrPEKPGLAcHSrMe6+hqSUlvZU0rab6x5EXfGU=
-golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/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-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8 h1:M69LAlWZCshgp0QSzyDcSsSIejIEeuaCVpmwcKwyLMk=
+golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE=
+golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
+golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
 golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
+golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
+golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
+golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
+golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gomodules.xyz/jsonpatch/v2 v2.0.1 h1:xyiBuvkD2g5n7cYzx6u2sxQvsAy4QJsZFCzGVdzOXZ0=
-gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY=
+gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
+google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
+google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
+google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
+google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
+google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
+google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
+google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
+google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
+google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
 google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
+google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
+google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201102152239-715cce707fb0/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
+google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
+google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
+google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
 google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
 google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
+google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
+google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
+google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
+google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
+google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
+google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
+google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
 gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
-gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
+gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
 gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
 gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
@@ -405,41 +885,60 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWD
 gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
 gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
 gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
 gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
+gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
+gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-k8s.io/api v0.18.2 h1:wG5g5ZmSVgm5B+eHMIbI9EGATS2L8Z72rda19RIEgY8=
-k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78=
-k8s.io/apiextensions-apiserver v0.18.2 h1:I4v3/jAuQC+89L3Z7dDgAiN4EOjN6sbm6iBqQwHTah8=
-k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY=
-k8s.io/apimachinery v0.18.2 h1:44CmtbmkzVDAhCpRVSiP2R5PPrC2RtlIv/MoB8xpdRA=
-k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA=
-k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw=
-k8s.io/client-go v0.18.2 h1:aLB0iaD4nmwh7arT2wIn+lMnAq7OswjaejkQ8p9bBYE=
-k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU=
-k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
-k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM=
-k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
-k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
-k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
-k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
-k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c h1:/KUFqjjqAcY4Us6luF5RDNZ16KJtb49HfR3ZHB9qYXM=
-k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
-k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 h1:d4vVOjXm687F1iLSP2q3lyPPuyvTUt3aVoBpi2DqRsU=
-k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
-sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0=
-sigs.k8s.io/controller-runtime v0.6.0 h1:Fzna3DY7c4BIP6KwfSlrfnj20DJ+SeMBK8HSFvOk9NM=
-sigs.k8s.io/controller-runtime v0.6.0/go.mod h1:CpYf5pdNY/B352A1TFLAS2JVSlnGQ5O2cftPHndTroo=
-sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
-sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E=
-sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
-sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
-sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+k8s.io/api v0.23.0 h1:WrL1gb73VSC8obi8cuYETJGXEoFNEh3LU0Pt+Sokgro=
+k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg=
+k8s.io/apiextensions-apiserver v0.23.0 h1:uii8BYmHYiT2ZTAJxmvc3X8UhNYMxl2A0z0Xq3Pm+WY=
+k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4=
+k8s.io/apimachinery v0.23.0 h1:mIfWRMjBuMdolAWJ3Fd+aPTMv3X9z+waiARMpvvb0HQ=
+k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc=
+k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4=
+k8s.io/client-go v0.23.0 h1:vcsOqyPq7XV3QmQRCBH/t9BICJM9Q1M18qahjv+rebY=
+k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA=
+k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE=
+k8s.io/component-base v0.23.0 h1:UAnyzjvVZ2ZR1lF35YwtNY6VMN94WtOnArcXBu34es8=
+k8s.io/component-base v0.23.0/go.mod h1:DHH5uiFvLC1edCpvcTDV++NKULdYYU6pR9Tt3HIKMKI=
+k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
+k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
+k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
+k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw=
+k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4=
+k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk=
+k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
+k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs=
+k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
+rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
+rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I=
+sigs.k8s.io/controller-runtime v0.11.0 h1:DqO+c8mywcZLFJWILq4iktoECTyn30Bkj0CwgqMpZWQ=
+sigs.k8s.io/controller-runtime v0.11.0/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA=
+sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 h1:fD1pz4yfdADVNfFmcP2aBEtudwUQ1AlLnRBALr33v3s=
+sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
+sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
+sigs.k8s.io/structured-merge-diff/v4 v4.2.0 h1:kDvPBbnPk+qYmkHmSo8vKGp438IASWofnbbUKDE/bv0=
+sigs.k8s.io/structured-merge-diff/v4 v4.2.0/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
 sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
+sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
+sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
index 02ebce6..f5a72a0 100644 (file)
@@ -16,6 +16,7 @@ import (
        clientgoscheme "k8s.io/client-go/kubernetes/scheme"
        _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
        ctrl "sigs.k8s.io/controller-runtime"
+       "sigs.k8s.io/controller-runtime/pkg/client"
        "sigs.k8s.io/controller-runtime/pkg/log/zap"
 
        batchv1alpha1 "sdewan.akraino.org/sdewan/api/v1alpha1"
@@ -63,7 +64,7 @@ func main() {
        }
 
        // Add indexer for rolebinding so that we can filter rolebindings by .subject
-       err = mgr.GetFieldIndexer().IndexField(context.Background(), &rbacv1.RoleBinding{}, ".subjects", func(rawObj runtime.Object) []string {
+       err = mgr.GetFieldIndexer().IndexField(context.Background(), &rbacv1.RoleBinding{}, ".subjects", func(rawObj client.Object) []string {
                var fieldValues []string
                rolebinding := rawObj.(*rbacv1.RoleBinding)
                for _, subject := range rolebinding.Subjects {
@@ -79,7 +80,7 @@ func main() {
                setupLog.Error(err, "unable to start manager")
                os.Exit(1)
        }
-       err = mgr.GetFieldIndexer().IndexField(context.Background(), &rbacv1.ClusterRoleBinding{}, ".subjects", func(rawObj runtime.Object) []string {
+       err = mgr.GetFieldIndexer().IndexField(context.Background(), &rbacv1.ClusterRoleBinding{}, ".subjects", func(rawObj client.Object) []string {
                var fieldValues []string
                clusterrolebinding := rawObj.(*rbacv1.ClusterRoleBinding)
                for _, subject := range clusterrolebinding.Subjects {
@@ -95,7 +96,7 @@ func main() {
                setupLog.Error(err, "unable to start manager")
                os.Exit(1)
        }
-       err = mgr.GetFieldIndexer().IndexField(context.Background(), &corev1.Pod{}, "OwnBy", func(rawObj runtime.Object) []string {
+       err = mgr.GetFieldIndexer().IndexField(context.Background(), &corev1.Pod{}, "OwnBy", func(rawObj client.Object) []string {
                // grab the job object, extract the owner...
                var fieldValues []string
                pod := rawObj.(*corev1.Pod)
index 87da89a..2bcb9b4 100644 (file)
@@ -29,6 +29,10 @@ func (o *SdewanApp) GetName() string {
        return o.Name
 }
 
+func (o *SdewanApp) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
+
 // App APIs
 // get apps
 func (m *AppClient) GetApps() (*SdewanApps, error) {
index a2fc293..8927c2d 100644 (file)
@@ -37,6 +37,10 @@ func (o *SdewanFirewallZone) GetName() string {
        return o.Name
 }
 
+func (o *SdewanFirewallZone) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
+
 type SdewanFirewallZones struct {
        Zones []SdewanFirewallZone `json:"zones"`
 }
@@ -52,6 +56,9 @@ type SdewanFirewallForwarding struct {
 func (o *SdewanFirewallForwarding) GetName() string {
        return o.Name
 }
+func (o *SdewanFirewallForwarding) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
 
 type SdewanFirewallForwardings struct {
        Forwardings []SdewanFirewallForwarding `json:"forwardings"`
@@ -80,6 +87,9 @@ type SdewanFirewallRule struct {
 func (o *SdewanFirewallRule) GetName() string {
        return o.Name
 }
+func (o *SdewanFirewallRule) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
 
 type SdewanFirewallRules struct {
        Rules []SdewanFirewallRule `json:"rules"`
@@ -106,6 +116,9 @@ type SdewanFirewallRedirect struct {
 func (o *SdewanFirewallRedirect) GetName() string {
        return o.Name
 }
+func (o *SdewanFirewallRedirect) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
 
 type SdewanFirewallRedirects struct {
        Redirects []SdewanFirewallRedirect `json:"redirects"`
index 5cfce48..cff53d7 100644 (file)
@@ -31,6 +31,10 @@ func (o *SdewanIpsecProposal) GetName() string {
        return o.Name
 }
 
+func (o *SdewanIpsecProposal) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
+
 // Remotes
 type SdewanIpsecConnection struct {
        Name           string   `json:"name"`
@@ -73,6 +77,9 @@ type SdewanIpsecRemotes struct {
 func (o *SdewanIpsecRemote) GetName() string {
        return o.Name
 }
+func (o *SdewanIpsecRemote) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
 
 // Proposal APIs
 // get proposals
index 7a6bdc1..e40bff7 100644 (file)
@@ -57,6 +57,9 @@ type SdewanPolicies struct {
 func (o *SdewanPolicy) GetName() string {
        return o.Name
 }
+func (o *SdewanPolicy) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
 
 // MWAN3 Rule
 type SdewanRule struct {
@@ -79,6 +82,9 @@ type SdewanRules struct {
 func (o *SdewanRule) GetName() string {
        return o.Name
 }
+func (o *SdewanRule) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
 
 // get interface status
 func (m *Mwan3Client) GetInterfaceStatus() (*InterfaceStatus, error) {
index 46d87ce..c7fa5c5 100644 (file)
@@ -35,6 +35,10 @@ func (o *SdewanNat) GetName() string {
        return o.Name
 }
 
+func (o *SdewanNat) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
+
 type SdewanNats struct {
        Nats []SdewanNat `json:"nats"`
 }
index 56a3dcc..a6e49d1 100644 (file)
-// SPDX-License-Identifier: Apache-2.0\r
-// Copyright (c) 2021 Intel Corporation\r
-\r
-package openwrt\r
-\r
-import (\r
-       "encoding/json"\r
-)\r
-\r
-const (\r
-       networkfirewallBaseURL = "sdewan/networkfirewall/v1/"\r
-)\r
-\r
-type NetworkFirewallClient struct {\r
-       OpenwrtClient *openwrtClient\r
-}\r
-\r
-// NetworkFirewall Rule\r
-type SdewanNetworkFirewallRule struct {\r
-       Name     string   `json:"name"`\r
-       Src      string   `json:"src"`\r
-       SrcIp    string   `json:"src_ip"`\r
-       SrcMac   string   `json:"src_mac"`\r
-       SrcPort  string   `json:"src_port"`\r
-       Proto    string   `json:"proto"`\r
-       IcmpType []string `json:"icmp_type"`\r
-       Dest     string   `json:"dest"`\r
-       DestIp   string   `json:"dest_ip"`\r
-       DestPort string   `json:"dest_port"`\r
-       Mark     string   `json:"mark"`\r
-       Target   string   `json:"target"`\r
-       SetMark  string   `json:"set_mark"`\r
-       SetXmark string   `json:"set_xmark"`\r
-       Family   string   `json:"family"`\r
-       Extra    string   `json:"extra"`\r
-}\r
-\r
-func (o *SdewanNetworkFirewallRule) GetName() string {\r
-       return o.Name\r
-}\r
-\r
-type SdewanNetworkFirewallRules struct {\r
-       Rules []SdewanNetworkFirewallRule `json:"rules"`\r
-}\r
-\r
-// get rules\r
-func (f *NetworkFirewallClient) GetRules() (*SdewanNetworkFirewallRules, error) {\r
-       var response string\r
-       var err error\r
-       response, err = f.OpenwrtClient.Get(networkfirewallBaseURL + "rules")\r
-       if err != nil {\r
-               return nil, err\r
-       }\r
-\r
-       var sdewanNetworkFirewallRules SdewanNetworkFirewallRules\r
-       err = json.Unmarshal([]byte(response), &sdewanNetworkFirewallRules)\r
-       if err != nil {\r
-               return nil, err\r
-       }\r
-\r
-       return &sdewanNetworkFirewallRules, nil\r
-}\r
-\r
-// get rule\r
-func (m *NetworkFirewallClient) GetRule(rule string) (*SdewanNetworkFirewallRule, error) {\r
-       var response string\r
-       var err error\r
-       response, err = m.OpenwrtClient.Get(networkfirewallBaseURL + "rules/" + rule)\r
-       if err != nil {\r
-               return nil, err\r
-       }\r
-\r
-       var sdewanNetworkFirewallRule SdewanNetworkFirewallRule\r
-       err = json.Unmarshal([]byte(response), &sdewanNetworkFirewallRule)\r
-       if err != nil {\r
-               return nil, err\r
-       }\r
-\r
-       return &sdewanNetworkFirewallRule, nil\r
-}\r
-\r
-// create rule\r
-func (m *NetworkFirewallClient) CreateRule(rule SdewanNetworkFirewallRule) (*SdewanNetworkFirewallRule, error) {\r
-       var response string\r
-       var err error\r
-       rule_obj, _ := json.Marshal(rule)\r
-       response, err = m.OpenwrtClient.Post(networkfirewallBaseURL+"rules", string(rule_obj))\r
-       if err != nil {\r
-               return nil, err\r
-       }\r
-\r
-       var sdewanNetworkFirewallRule SdewanNetworkFirewallRule\r
-       err = json.Unmarshal([]byte(response), &sdewanNetworkFirewallRule)\r
-       if err != nil {\r
-               return nil, err\r
-       }\r
-\r
-       return &sdewanNetworkFirewallRule, nil\r
-}\r
-\r
-// delete rule\r
-func (m *NetworkFirewallClient) DeleteRule(rule_name string) error {\r
-       _, err := m.OpenwrtClient.Delete(networkfirewallBaseURL + "rules/" + rule_name)\r
-       if err != nil {\r
-               return err\r
-       }\r
-\r
-       return nil\r
-}\r
-\r
-// update rule\r
-func (m *NetworkFirewallClient) UpdateRule(rule SdewanNetworkFirewallRule) (*SdewanNetworkFirewallRule, error) {\r
-       var response string\r
-       var err error\r
-       rule_obj, _ := json.Marshal(rule)\r
-       rule_name := rule.Name\r
-       response, err = m.OpenwrtClient.Put(networkfirewallBaseURL+"rules/"+rule_name, string(rule_obj))\r
-       if err != nil {\r
-               return nil, err\r
-       }\r
-\r
-       var sdewanNetworkFirewallRule SdewanNetworkFirewallRule\r
-       err = json.Unmarshal([]byte(response), &sdewanNetworkFirewallRule)\r
-       if err != nil {\r
-               return nil, err\r
-       }\r
-\r
-       return &sdewanNetworkFirewallRule, nil\r
-}
\ No newline at end of file
+// SPDX-License-Identifier: Apache-2.0
+// Copyright (c) 2021 Intel Corporation
+
+package openwrt
+
+import (
+       "encoding/json"
+)
+
+const (
+       networkfirewallBaseURL = "sdewan/networkfirewall/v1/"
+)
+
+type NetworkFirewallClient struct {
+       OpenwrtClient *openwrtClient
+}
+
+// NetworkFirewall Rule
+type SdewanNetworkFirewallRule struct {
+       Name     string   `json:"name"`
+       Src      string   `json:"src"`
+       SrcIp    string   `json:"src_ip"`
+       SrcMac   string   `json:"src_mac"`
+       SrcPort  string   `json:"src_port"`
+       Proto    string   `json:"proto"`
+       IcmpType []string `json:"icmp_type"`
+       Dest     string   `json:"dest"`
+       DestIp   string   `json:"dest_ip"`
+       DestPort string   `json:"dest_port"`
+       Mark     string   `json:"mark"`
+       Target   string   `json:"target"`
+       SetMark  string   `json:"set_mark"`
+       SetXmark string   `json:"set_xmark"`
+       Family   string   `json:"family"`
+       Extra    string   `json:"extra"`
+}
+
+func (o *SdewanNetworkFirewallRule) GetName() string {
+       return o.Name
+}
+
+func (o *SdewanNetworkFirewallRule) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
+
+type SdewanNetworkFirewallRules struct {
+       Rules []SdewanNetworkFirewallRule `json:"rules"`
+}
+
+// get rules
+func (f *NetworkFirewallClient) GetRules() (*SdewanNetworkFirewallRules, error) {
+       var response string
+       var err error
+       response, err = f.OpenwrtClient.Get(networkfirewallBaseURL + "rules")
+       if err != nil {
+               return nil, err
+       }
+
+       var sdewanNetworkFirewallRules SdewanNetworkFirewallRules
+       err = json.Unmarshal([]byte(response), &sdewanNetworkFirewallRules)
+       if err != nil {
+               return nil, err
+       }
+
+       return &sdewanNetworkFirewallRules, nil
+}
+
+// get rule
+func (m *NetworkFirewallClient) GetRule(rule string) (*SdewanNetworkFirewallRule, error) {
+       var response string
+       var err error
+       response, err = m.OpenwrtClient.Get(networkfirewallBaseURL + "rules/" + rule)
+       if err != nil {
+               return nil, err
+       }
+
+       var sdewanNetworkFirewallRule SdewanNetworkFirewallRule
+       err = json.Unmarshal([]byte(response), &sdewanNetworkFirewallRule)
+       if err != nil {
+               return nil, err
+       }
+
+       return &sdewanNetworkFirewallRule, nil
+}
+
+// create rule
+func (m *NetworkFirewallClient) CreateRule(rule SdewanNetworkFirewallRule) (*SdewanNetworkFirewallRule, error) {
+       var response string
+       var err error
+       rule_obj, _ := json.Marshal(rule)
+       response, err = m.OpenwrtClient.Post(networkfirewallBaseURL+"rules", string(rule_obj))
+       if err != nil {
+               return nil, err
+       }
+
+       var sdewanNetworkFirewallRule SdewanNetworkFirewallRule
+       err = json.Unmarshal([]byte(response), &sdewanNetworkFirewallRule)
+       if err != nil {
+               return nil, err
+       }
+
+       return &sdewanNetworkFirewallRule, nil
+}
+
+// delete rule
+func (m *NetworkFirewallClient) DeleteRule(rule_name string) error {
+       _, err := m.OpenwrtClient.Delete(networkfirewallBaseURL + "rules/" + rule_name)
+       if err != nil {
+               return err
+       }
+
+       return nil
+}
+
+// update rule
+func (m *NetworkFirewallClient) UpdateRule(rule SdewanNetworkFirewallRule) (*SdewanNetworkFirewallRule, error) {
+       var response string
+       var err error
+       rule_obj, _ := json.Marshal(rule)
+       rule_name := rule.Name
+       response, err = m.OpenwrtClient.Put(networkfirewallBaseURL+"rules/"+rule_name, string(rule_obj))
+       if err != nil {
+               return nil, err
+       }
+
+       var sdewanNetworkFirewallRule SdewanNetworkFirewallRule
+       err = json.Unmarshal([]byte(response), &sdewanNetworkFirewallRule)
+       if err != nil {
+               return nil, err
+       }
+
+       return &sdewanNetworkFirewallRule, nil
+}
index 3febac8..02cbdc7 100644 (file)
@@ -18,6 +18,7 @@ import (
 
 type IOpenWrtObject interface {
        GetName() string
+       SetFullName(string)
 }
 
 type OpenwrtError struct {
index 98c672d..368583c 100644 (file)
@@ -31,6 +31,9 @@ type SdewanRoutes struct {
 func (o *SdewanRoute) GetName() string {
        return o.Name
 }
+func (o *SdewanRoute) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
 
 // Route APIs
 // get routes
index 7fb02cd..78e4f2f 100644 (file)
@@ -33,6 +33,9 @@ type SdewanRouteRules struct {
 func (o *SdewanRouteRule) GetName() string {
        return o.Name
 }
+func (o *SdewanRouteRule) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
 
 // RouteRule APIs
 // get rules
index 0b6e272..adb9709 100644 (file)
@@ -25,6 +25,10 @@ func (o *SdewanModuleStatus) GetName() string {
        return o.Name
 }
 
+func (o *SdewanModuleStatus) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
+
 // Status APIs
 // get status
 func (m *StatusClient) GetStatus() (*[]SdewanModuleStatus, error) {
index 23ff7a6..8ff7308 100644 (file)
@@ -30,6 +30,9 @@ type SdewanSvcs struct {
 func (o *SdewanSvc) GetName() string {
        return o.Name
 }
+func (o *SdewanSvc) SetFullName(namespace string) {
+       o.Name = namespace + o.Name
+}
 
 // Svc APIs
 // get svcs
index 69485c5..911f7c4 100644 (file)
@@ -1,11 +1,24 @@
-# Helm Chart for cnf and controller
+# Install cnf and crd controller
+
+The installation has been verified on kubernetes v1.23
+
+Currently, the cnf and its dependencies can be utiltized in two mode: Push mode and Pull mode.
+
+Push mode:
+Configurations that generated by SDEWAN Central Controller will be directly pushed to hub/edge cluster using their kubeconfig which
+they provided in the registration. CNF will get the configuration directly from the CR located in the cluster.
+
+Pull Mode:
+Configurations that generated by SDEWAN Central Controller will be pushed thru GitOps approach(first upload to public github). Extra
+dependency tool Flux need to be installed on the cluster to pull the configuration back as local CR.
 
-The installation has been verified on kubernetes v1.20.
 
 ## Pre-condition
 **1.Install cert-manager**
 
-`kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.6.1/cert-manager.yaml`
+```
+kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.6.1/cert-manager.yaml
+```
 
 **2.Label the node**
 
@@ -66,6 +79,28 @@ echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt
 sudo apt-get update
 sudo apt-get install helm
 ```
+**If you are deploying the CNF and CRD controller to use Pull mode, two extra steps are needed.**
+
+**6.Prepare GitOps materials**
+> Note: This is needed ONLY in Pull mode
+
+While using Pull mode, following GitOps information need to get prepared(the one should match the information used in overlay controller)
+
+- username: the username used for the github/gitlab account
+- token: the personal access token used for github/gitlab. User can apply thru https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
+> Note: Token expiration time should be set less than 30 days. And scopes including repo, workflow, gist, project must be enabled for the access token
+- repo: the repo name that the gitops configs will be uploaded to. e.g. "test-repo"
+- clustername: the path where the gitops configs will be uploaded to. Please follow the format like this: akraino_scc_<overlay_name>+<device_name>
+
+**7.Install Flux**
+> Note: This is needed ONLY in Pull mode
+
+```
+brew install fluxcd/tap/flux
+flux bootstrap github --owner=<username> --repository=<repo> --branch=<branch> --path=./clusters/<clustername> --personal
+```
+***Please fill in your Github username, the repo, branch and path you prepared before.***
+
 
 ## Steps to install CNF and CRD Controller
 
@@ -73,11 +108,15 @@ Please locate your directory to `./helm`.
 
 **1.Create namespace for SDEWAN Central Controller v1Microservices**
 
-`kubectl create namespace sdewan-system`
+```
+kubectl create namespace sdewan-system
+```
 
 **2.Generate certificate for cnf**
 
-`kubectl apply -f cert/cnf_cert.yaml`
+```
+kubectl apply -f cert/cnf_cert.yaml
+```
 
 **3.Install CNF**
 
@@ -93,3 +132,63 @@ helm package sdewan_controllers
 helm install ./controllers-0.1.0.tgz --generate-name
 ```
 
+## Pre-Configurations
+> Note: Pre-configuration is ONLY needed in Push mode and in edge cluster which doesn't obtain a public IP address.
+
+**1. Request and get the certificate from the central controller.**
+
+**2. Apply the initial IPSec configuration. Here provides a sample of the configuration.**
+```
+cat > ipsec-proposal.yaml << EOF
+apiVersion: batch.sdewan.akraino.org/v1alpha1
+kind: IpsecProposal
+metadata:
+  labels:
+    sdewanPurpose: base
+    targetCluster: Device.edge-1
+  name: proposal1
+  namespace: default
+spec:
+  dh_group: modp4096
+  encryption_algorithm: aes256
+  hash_algorithm: sha256
+EOF
+
+kubectl apply -f ipsec-proposal.yaml
+```
+
+```
+cat > ipsec-preconfig.yaml << EOF
+apiVersion: batch.sdewan.akraino.org/v1alpha1
+kind: IpsecHost
+metadata:
+  labels:
+    sdewanPurpose: base
+    targetCluster: Device.edge-1
+  name: localedge1
+  namespace: default
+spec:
+  authentication_method: pubkey
+  connections:
+    - conn_type: tunnel
+      crypto_proposal:
+        - proposal1
+      local_sourceip: '%config'
+      local_updown: /etc/updown_oip
+      mark: ''
+      mode: start
+      name: ConnOverlay
+  crypto_proposal:
+    - proposal1
+  force_crypto_proposal: '0'
+  local_identifier: CN=device-edge-1-cert
+  local_private_cert: <content-for-base64-encoded-private-key>
+  local_public_cert: <content-for-base64-encoded-public-key>
+  remote: <overlay-public-ip>
+  remote_identifier: CN=sdewan-controller-base
+  shared_ca: <content-for-base64-encoded-ca>
+  type: policy-based
+EOF
+
+kubectl apply -f ipsec-preconfig.yaml
+```
index f25a117..ff23f4b 100644 (file)
@@ -63,10 +63,9 @@ spec:
         name: {{ .Values.containers.name }}
         readinessProbe:
           failureThreshold: 5
-          httpGet:
-            path: /
+          tcpSocket:
+            host:
             port: 80
-            scheme: HTTP
           initialDelaySeconds: 5
           periodSeconds: 5
           successThreshold: 1
index 0c416e9..ca1513e 100644 (file)
@@ -46,7 +46,7 @@ nfn:
     separate: ""
 
 containers:
-  image: integratedcloudnative/sdewan-cnf:0.5.2
+  image: integratedcloudnative/sdewan-cnf:0.5.3
   imagePullPolicy: IfNotPresent
   name: sdewan
 
index 9127e64..b30fc9b 100644 (file)
@@ -6,7 +6,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfhubsites.batch.sdewan.akraino.org
 spec:
@@ -86,109 +86,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
-  creationTimestamp: null
-  name: networkfirewallrules.batch.sdewan.akraino.org
-spec:
-  group: batch.sdewan.akraino.org
-  names:
-    kind: NetworkFirewallRule
-    listKind: NetworkFirewallRuleList
-    plural: networkfirewallrules
-    singular: networkfirewallrule
-  scope: Namespaced
-  versions:
-  - name: v1alpha1
-    schema:
-      openAPIV3Schema:
-        description: NetworkFirewallRule is the Schema for the networkfirewallrules
-          API
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: NetworkFirewallRuleSpec defines the desired state of NetworkFirewallRule
-            properties:
-              dest:
-                type: string
-              dest_ip:
-                type: string
-              dest_port:
-                type: string
-              extra:
-                type: string
-              family:
-                type: string
-              icmp_type:
-                items:
-                  type: string
-                type: array
-              mark:
-                type: string
-              name:
-                description: Foo is an example field of NetworkFirewallRule. Edit
-                  NetworkFirewallRule_types.go to remove/update
-                type: string
-              proto:
-                type: string
-              set_mark:
-                type: string
-              set_xmark:
-                type: string
-              src:
-                type: string
-              src_ip:
-                type: string
-              src_mac:
-                type: string
-              src_port:
-                type: string
-              target:
-                type: string
-            type: object
-          status:
-            description: status subsource used for Sdewan rule CRDs
-            properties:
-              appliedGeneration:
-                format: int64
-                type: integer
-              appliedTime:
-                format: date-time
-                type: string
-              message:
-                type: string
-              state:
-                type: string
-            required:
-            - state
-            type: object
-        type: object
-    served: true
-    storage: true
-    subresources:
-      status: {}
-status:
-  acceptedNames:
-    kind: ""
-    plural: ""
-  conditions: []
-  storedVersions: []
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnflocalservices.batch.sdewan.akraino.org
 spec:
@@ -264,7 +162,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfnats.batch.sdewan.akraino.org
 spec:
@@ -355,7 +253,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfrouterules.batch.sdewan.akraino.org
 spec:
@@ -432,7 +330,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfroutes.batch.sdewan.akraino.org
 spec:
@@ -508,7 +406,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfservices.batch.sdewan.akraino.org
 spec:
@@ -579,7 +477,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: cnfstatuses.batch.sdewan.akraino.org
 spec:
@@ -661,7 +559,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewalldnats.batch.sdewan.akraino.org
 spec:
@@ -756,7 +654,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallforwardings.batch.sdewan.akraino.org
 spec:
@@ -832,7 +730,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallrules.batch.sdewan.akraino.org
 spec:
@@ -933,7 +831,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallsnats.batch.sdewan.akraino.org
 spec:
@@ -1028,7 +926,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: firewallzones.batch.sdewan.akraino.org
 spec:
@@ -1133,7 +1031,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: ipsechosts.batch.sdewan.akraino.org
 spec:
@@ -1265,7 +1163,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: ipsecproposals.batch.sdewan.akraino.org
 spec:
@@ -1342,7 +1240,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: ipsecsites.batch.sdewan.akraino.org
 spec:
@@ -1476,7 +1374,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: mwan3policies.batch.sdewan.akraino.org
 spec:
@@ -1561,7 +1459,7 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: mwan3rules.batch.sdewan.akraino.org
 spec:
@@ -1653,7 +1551,109 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.7.0
+    controller-gen.kubebuilder.io/version: v0.8.0
+  creationTimestamp: null
+  name: networkfirewallrules.batch.sdewan.akraino.org
+spec:
+  group: batch.sdewan.akraino.org
+  names:
+    kind: NetworkFirewallRule
+    listKind: NetworkFirewallRuleList
+    plural: networkfirewallrules
+    singular: networkfirewallrule
+  scope: Namespaced
+  versions:
+  - name: v1alpha1
+    schema:
+      openAPIV3Schema:
+        description: NetworkFirewallRule is the Schema for the networkfirewallrules
+          API
+        properties:
+          apiVersion:
+            description: 'APIVersion defines the versioned schema of this representation
+              of an object. Servers should convert recognized schemas to the latest
+              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+            type: string
+          kind:
+            description: 'Kind is a string value representing the REST resource this
+              object represents. Servers may infer this from the endpoint the client
+              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+            type: string
+          metadata:
+            type: object
+          spec:
+            description: NetworkFirewallRuleSpec defines the desired state of NetworkFirewallRule
+            properties:
+              dest:
+                type: string
+              dest_ip:
+                type: string
+              dest_port:
+                type: string
+              extra:
+                type: string
+              family:
+                type: string
+              icmp_type:
+                items:
+                  type: string
+                type: array
+              mark:
+                type: string
+              name:
+                description: Foo is an example field of NetworkFirewallRule. Edit
+                  NetworkFirewallRule_types.go to remove/update
+                type: string
+              proto:
+                type: string
+              set_mark:
+                type: string
+              set_xmark:
+                type: string
+              src:
+                type: string
+              src_ip:
+                type: string
+              src_mac:
+                type: string
+              src_port:
+                type: string
+              target:
+                type: string
+            type: object
+          status:
+            description: status subsource used for Sdewan rule CRDs
+            properties:
+              appliedGeneration:
+                format: int64
+                type: integer
+              appliedTime:
+                format: date-time
+                type: string
+              message:
+                type: string
+              state:
+                type: string
+            required:
+            - state
+            type: object
+        type: object
+    served: true
+    storage: true
+    subresources:
+      status: {}
+status:
+  acceptedNames:
+    kind: ""
+    plural: ""
+  conditions: []
+  storedVersions: []
+---
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+  annotations:
+    controller-gen.kubebuilder.io/version: v0.8.0
   creationTimestamp: null
   name: sdewanapplications.batch.sdewan.akraino.org
 spec:
@@ -1762,3 +1762,4 @@ status:
     plural: ""
   conditions: []
   storedVersions: []
+---
index d82a14d..67626e7 100644 (file)
@@ -98,26 +98,6 @@ rules:
   - get
   - patch
   - update
-- apiGroups:
-  - batch.sdewan.akraino.org
-  resources:
-  - networkfirewallrules
-  verbs:
-  - create
-  - delete
-  - get
-  - list
-  - patch
-  - update
-  - watch
-- apiGroups:
-  - batch.sdewan.akraino.org
-  resources:
-  - networkfirewallrules/status
-  verbs:
-  - get
-  - patch
-  - update
 - apiGroups:
   - batch.sdewan.akraino.org
   resources:
@@ -438,6 +418,26 @@ rules:
   - get
   - patch
   - update
+- apiGroups:
+  - batch.sdewan.akraino.org
+  resources:
+  - networkfirewallrules
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - batch.sdewan.akraino.org
+  resources:
+  - networkfirewallrules/status
+  verbs:
+  - get
+  - patch
+  - update
 - apiGroups:
   - batch.sdewan.akraino.org
   resources:
@@ -458,6 +458,15 @@ rules:
   - get
   - patch
   - update
+- apiGroups:
+  - coordination.k8s.io
+  resources:
+  - leases
+  verbs:
+  - create
+  - get
+  - list
+  - update
 - apiGroups:
   - rbac.authorization.k8s.io
   resources:
@@ -527,3 +536,4 @@ subjects:
 - kind: ServiceAccount
   name: default
   namespace: {{ .Values.namespace }}
+---
index ffc7106..1918b6e 100644 (file)
@@ -22,7 +22,7 @@ webhooks:
   - apiGroups:
     - batch.sdewan.akraino.org
     apiVersions:
-    - v1
+    - v1alpha1
     operations:
     - CREATE
     - UPDATE
@@ -30,6 +30,7 @@ webhooks:
     resources:
     - mwan3policies
     - mwan3rules
+    - networkfirewallrules
     - firewallzones
     - firewallforwardings
     - firewallrules
@@ -40,13 +41,12 @@ webhooks:
     - cnfrouterules
     - cnfservices
     - cnflocalservices
+    - cnfhubsites
     - cnfstatuses
     - sdewanapplication
     - ipsecproposals
     - ipsechosts
     - ipsecsites
-    - networkfirewallrules
-    - cnfhubsites
   sideEffects: None
 - admissionReviewVersions:
   - v1
@@ -63,11 +63,14 @@ webhooks:
     - batch.sdewan.akraino.org
     apiVersions:
     - v1
+    - v1alpha1
     operations:
     - UPDATE
     resources:
+    - deployments
     - mwan3policies
     - mwan3rules
+    - networkfirewallrules
     - firewallzones
     - firewallforwardings
     - firewallrules
@@ -78,11 +81,10 @@ webhooks:
     - cnfroutes
     - cnfrouterules
     - cnflocalservices
+    - cnfhubsites
     - cnfstatuses
     - sdewanapplication
     - ipsecproposals
     - ipsechosts
     - ipsecsites
-    - cnfhubsites
-    - networkfirewallrules
   sideEffects: None
index 614f0ff..0d651ff 100644 (file)
@@ -12,7 +12,7 @@ spec:
     image: "gcr.io/kubebuilder/kube-rbac-proxy:v0.4.1"
     name: "kube-rbac-proxy"
   sdewan:
-    image: "integratedcloudnative/sdewan-controller:0.5.2"
+    image: "integratedcloudnative/sdewan-controller:0.5.3"
     name: "manager"
 
 
diff --git a/platform/images/cnf_overview.jpg b/platform/images/cnf_overview.jpg
new file mode 100644 (file)
index 0000000..a2022cd
Binary files /dev/null and b/platform/images/cnf_overview.jpg differ
diff --git a/platform/images/crd_controller_overview.jpg b/platform/images/crd_controller_overview.jpg
new file mode 100644 (file)
index 0000000..f9c30cb
Binary files /dev/null and b/platform/images/crd_controller_overview.jpg differ
diff --git a/traffic-hub/README.md b/traffic-hub/README.md
deleted file mode 100644 (file)
index 4555b06..0000000
+++ /dev/null
@@ -1 +0,0 @@
-# Akraino ICN SDEWAN traffic hub