From ab7a57d1cf767d2d54a94a591d7fe77522de7ea6 Mon Sep 17 00:00:00 2001 From: Michael Edegware Date: Wed, 12 May 2021 07:56:41 -0400 Subject: [PATCH] Inject sidecar in PowerMax (#86) * merging all commmits to one to prevent having changes from main * file changes form testing * commit test updates (#94) * Updated spec to next release version (#96) * sanitize and introduced new test cases * merging all commits to one to prevent having changes from main * file changes form testing * sanitize and introduced new test cases * adds insecure flag * removes error * removes changes * debugging * fixes failing test Co-authored-by: sharmilarama <72404078+sharmilarama@users.noreply.github.com> Co-authored-by: Trevor Dawe --- cmd/karavictl/cmd/inject.go | 732 ++++++-- cmd/karavictl/cmd/inject_test.go | 246 ++- .../kubectl_get_all_in_ns_without_karavi.yaml | 1324 -------------- .../kubectl_get_all_in_powermax_new.yaml | 1166 +++++++++++++ .../kubectl_get_all_in_powermax_update.yaml | 1530 +++++++++++++++++ .../testdata/kubectl_get_all_in_vxflexos.yaml | 1037 +++++++++++ cmd/proxy-server/main.go | 2 +- docs/GETTING_STARTED_GUIDE.md | 2 +- docs/TROUBLESHOOTING.md | 39 +- internal/proxy/powermax_handler.go | 33 +- internal/proxy/powermax_handler_test.go | 30 +- internal/web/client_install_handler.go | 52 +- internal/web/client_install_handler_test.go | 14 + policies/powermax_url.rego | 35 +- 14 files changed, 4696 insertions(+), 1546 deletions(-) delete mode 100644 cmd/karavictl/cmd/testdata/kubectl_get_all_in_ns_without_karavi.yaml create mode 100644 cmd/karavictl/cmd/testdata/kubectl_get_all_in_powermax_new.yaml create mode 100644 cmd/karavictl/cmd/testdata/kubectl_get_all_in_powermax_update.yaml create mode 100644 cmd/karavictl/cmd/testdata/kubectl_get_all_in_vxflexos.yaml diff --git a/cmd/karavictl/cmd/inject.go b/cmd/karavictl/cmd/inject.go index bf207f02..599411df 100644 --- a/cmd/karavictl/cmd/inject.go +++ b/cmd/karavictl/cmd/inject.go @@ -25,6 +25,8 @@ import ( "log" "os" "path/filepath" + "strconv" + "strings" "github.com/spf13/cobra" appsv1 "k8s.io/api/apps/v1" @@ -35,12 +37,6 @@ import ( "sigs.k8s.io/yaml" ) -// Common constants. -const ( - CSIDriverContainerName = "driver" - CSIDriverEndpointEnvName = "X_CSI_VXFLEXOS_ENDPOINT" -) - // NewInjectCmd creates a new inject command func NewInjectCmd() *cobra.Command { injectCmd := &cobra.Command{ @@ -56,8 +52,9 @@ func NewInjectCmd() *cobra.Command { Examples: # Inject into an existing vxflexos CSI driver kubectl get secrets,deployments,daemonsets -n vxflexos -o yaml \ - | karavictl inject --image-addr 10.0.0.1:5000/sidecar-proxy:latest --proxy-host 10.0.0.1 \ - | kubectl apply -f -`, + | karavictl inject --image-addr 10.0.0.1:5000/sidecar-proxy:latest --proxy-host 10.0.0.1\ + | kubectl apply -f - + `, Run: func(cmd *cobra.Command, args []string) { info, err := os.Stdin.Stat() if err != nil { @@ -89,6 +86,16 @@ func NewInjectCmd() *cobra.Command { log.Fatal(err) } + proxyPortFlags, err := cmd.Flags().GetStringSlice("proxy-port") + if err != nil { + log.Fatal(err) + } + + portRanges, err := getStartingPortRanges(proxyPortFlags) + if err != nil { + log.Fatal(err) + } + buf := bufio.NewReaderSize(os.Stdin, 4096) reader := yamlDecoder.NewYAMLReader(buf) @@ -110,11 +117,12 @@ func NewInjectCmd() *cobra.Command { var resource interface{} switch meta.Kind { case "List": - resource, err = injectUsingList(bytes, imageAddr, proxyHost, rootCertificate, insecure) + resource, err = injectUsingList(bytes, imageAddr, proxyHost, rootCertificate, portRanges, insecure) if err != nil { fmt.Fprintf(os.Stderr, "error: %+v\n", err) return } + default: fmt.Fprintln(os.Stderr, "This command works with a List of Kubernetes resources from within a CSI driver namespace.") return @@ -132,10 +140,11 @@ func NewInjectCmd() *cobra.Command { injectCmd.Flags().String("image-addr", "", "Help message for image-addr") injectCmd.Flags().Bool("insecure", false, "Allow insecure connections from sidecar-proxy to proxy-server (default: false)") injectCmd.Flags().String("root-certificate", "", "The root certificate file used by the proxy server") + injectCmd.Flags().StringSlice("proxy-port", []string{}, "proxy start port in the form =") return injectCmd } -func buildProxyContainer(imageAddr, proxyHost string, insecure bool) *corev1.Container { +func buildProxyContainer(ns, configName, imageAddr, proxyHost string, insecure bool) *corev1.Container { proxyContainer := corev1.Container{ Image: imageAddr, Name: "karavi-authorization-proxy", @@ -151,7 +160,7 @@ func buildProxyContainer(imageAddr, proxyHost string, insecure bool) *corev1.Con }, corev1.EnvVar{ Name: "PLUGIN_IDENTIFIER", - Value: "csi-vxflexos", // TODO(ian): Get this dynamically; can we rely on the namespace name? + Value: ns, }, corev1.EnvVar{ Name: "ACCESS_TOKEN", @@ -177,7 +186,7 @@ func buildProxyContainer(imageAddr, proxyHost string, insecure bool) *corev1.Con VolumeMounts: []corev1.VolumeMount{ corev1.VolumeMount{ MountPath: "/etc/karavi-authorization/config", - Name: "vxflexos-config", + Name: configName, }, corev1.VolumeMount{ MountPath: "/etc/karavi-authorization/root-certificates", @@ -189,7 +198,25 @@ func buildProxyContainer(imageAddr, proxyHost string, insecure bool) *corev1.Con return &proxyContainer } -// ListChange holds a k8s list and a modified version of said list +const ( + // DefaultStartingPortRange is the starting port number + DefaultStartingPortRange = 9000 +) + +// ListChangeForMultiArray holds a k8s list and a modified version of said list +type ListChangeForMultiArray struct { + *ListChange + StartingPortRange int +} + +// ListChangeForPowerMax holds a k8s list and a modified version of said list for powermax +type ListChangeForPowerMax struct { + *ListChange + Endpoint string // only useful for powermax + StartingPortRange int +} + +//ListChange holds a k8s list and a modified version of said list type ListChange struct { Existing *corev1.List Modified *corev1.List @@ -202,9 +229,16 @@ type ListChange struct { type Resources struct { Deployment string DaemonSet string + Secret string +} + +// ListChanger is an interface for changes needed in a list +type ListChanger interface { + // Change modifies the resources for ListChangeForMultiArray or ListChangeForPowerMax + Change(existing *corev1.List, imageAddr, proxyHost, rootCertificate string, insecure bool) (*corev1.List, error) } -// NewListChange returns a new ListChange from a k8s list +// NewListChange returns a new ListChangeForMultiArray from a k8s list func NewListChange(existing *corev1.List) *ListChange { return &ListChange{ Existing: existing, @@ -217,7 +251,7 @@ func NewListChange(existing *corev1.List) *ListChange { } } -func injectUsingList(b []byte, imageAddr, proxyHost, rootCertificate string, insecure bool) (*corev1.List, error) { +func injectUsingList(b []byte, imageAddr, proxyHost, rootCertificate string, startingPortRange map[string]int, insecure bool) (*corev1.List, error) { var l corev1.List err := yaml.Unmarshal(b, &l) @@ -227,21 +261,44 @@ func injectUsingList(b []byte, imageAddr, proxyHost, rootCertificate string, ins // TODO(ian): Determine CSI driver type: vxflexos, powerscale, etc.? // The configs are assumed to contain the type, e.g. "vxflexos-config". + var change ListChanger + if strings.Contains(string(b), "powermax") { + change = &ListChangeForPowerMax{StartingPortRange: startingPortRange["powermax"]} + } else { + change = &ListChangeForMultiArray{StartingPortRange: startingPortRange["powerflex"]} + } + + return change.Change(&l, imageAddr, proxyHost, rootCertificate, insecure) + +} + +// Change modifies the resources for ListChangeForPowerMax +func (lc *ListChangeForPowerMax) Change(existing *corev1.List, imageAddr, proxyHost, rootCertificate string, insecure bool) (*corev1.List, error) { + lc.ListChange = NewListChange(existing) + lc.setInjectedResources() + lc.injectRootCertificate(rootCertificate) + lc.injectKaraviSecret(insecure) + lc.injectIntoDeployment(imageAddr, proxyHost, insecure) + lc.injectIntoDaemonset(imageAddr, proxyHost, insecure) + return lc.ListChange.Modified, lc.ListChange.Err +} - change := NewListChange(&l) +// Change modifies the resources for ListChangeForMultiArray +func (lc *ListChangeForMultiArray) Change(existing *corev1.List, imageAddr, proxyHost, rootCertificate string, insecure bool) (*corev1.List, error) { + lc.ListChange = NewListChange(existing) // Determine what we are injecting the sidecar into (e.g. powerflex csi driver, observability, etc) - change.setInjectedResources() + lc.setInjectedResources() // Inject the rootCA certificate as a Secret - change.injectRootCertificate(rootCertificate) + lc.injectRootCertificate(rootCertificate) // Inject our own secret based on the original config. - change.injectKaraviSecret() + lc.injectKaraviSecret() // Inject the sidecar proxy into the Deployment and update // the config volume to point to our own secret. - change.injectIntoDeployment(imageAddr, proxyHost, insecure) + lc.injectIntoDeployment(imageAddr, proxyHost, insecure) // Inject into the Daemonset. - change.injectIntoDaemonset(imageAddr, proxyHost, insecure) + lc.injectIntoDaemonset(imageAddr, proxyHost, insecure) - return change.Modified, change.Err + return lc.ListChange.Modified, lc.ListChange.Err } func (lc *ListChange) setInjectedResources() { @@ -257,12 +314,22 @@ func (lc *ListChange) setInjectedResources() { lc.InjectResources = &Resources{ Deployment: "vxflexos-controller", DaemonSet: "vxflexos-node", + Secret: "vxflexos-config", } lc.Namespace = deployments["vxflexos-controller"].Namespace + // injecting into powermax csi driver + case deployments["powermax-controller"] != nil: + lc.InjectResources = &Resources{ + Deployment: "powermax-controller", + DaemonSet: "powermax-node", + Secret: "powermax-creds", + } + lc.Namespace = deployments["powermax-controller"].Namespace // injecting into observability case deployments["karavi-metrics-powerflex"] != nil: lc.InjectResources = &Resources{ Deployment: "karavi-metrics-powerflex", + Secret: "vxflexos-config", } lc.Namespace = deployments["karavi-metrics-powerflex"].Namespace default: @@ -315,11 +382,64 @@ func (lc *ListChange) injectRootCertificate(rootCertificate string) { lc.Modified.Items = append(lc.Modified.Items, raw) } -func (lc *ListChange) injectKaraviSecret() { +// GetCommandEnv get environment variable for powerflex deployment +func (lc *ListChangeForPowerMax) GetCommandEnv(deploy *appsv1.Deployment, s *corev1.Secret, insecure bool) ([]SecretData, error) { + + endpoint := "" + systemIDs := "" + + foundEndpoint := false + for _, c := range deploy.Spec.Template.Spec.Containers { + if c.Name == "driver" { + for _, e := range c.Env { + if e.Name == "CSM_CSI_POWERMAX_ENDPOINT" { + endpoint = e.Value + foundEndpoint = true + break + } + } + break + } + } + + for _, c := range deploy.Spec.Template.Spec.Containers { + if c.Name == "driver" { + for _, e := range c.Env { + if e.Name == "X_CSI_POWERMAX_ENDPOINT" { + if !foundEndpoint { + endpoint = e.Value + foundEndpoint = true + } + } + if e.Name == "X_CSI_POWERMAX_ARRAYS" { + systemIDs = e.Value + } + } + break + } + } + + if endpoint == "" || systemIDs == "" { + return nil, errors.New("could not find endpoint or system ID") + } + + return []SecretData{{Endpoint: endpoint, + Username: string(s.Data["username"][:]), + Password: string(s.Data["password"][:]), + SystemID: systemIDs, + Insecure: insecure}, + }, nil +} + +func (lc *ListChangeForMultiArray) injectKaraviSecret() { if lc.Err != nil { return } + if lc.InjectResources.Secret == "" { + return + } + // Extract all of the Secret resources. secrets, err := buildMapOfSecretsFromList(lc.Existing) if err != nil { @@ -328,7 +448,7 @@ func (lc *ListChange) injectKaraviSecret() { } // Pick out the config. - configSecret, ok := secrets["vxflexos-config"] + configSecret, ok := secrets[lc.InjectResources.Secret] if !ok { lc.Err = errors.New("config secret not found") return @@ -342,7 +462,7 @@ func (lc *ListChange) injectKaraviSecret() { } // Copy the config data and convert endpoints to localhost: - configSecData = convertEndpoints(configSecData, 9000) + configSecData = convertEndpoints(configSecData, lc.StartingPortRange) configSecData = scrubLoginCredentials(configSecData) configSecDataJSON, err := json.Marshal(&configSecData) if err != nil { @@ -378,140 +498,235 @@ func (lc *ListChange) injectKaraviSecret() { lc.Modified.Items = append(lc.Modified.Items, raw) } -func buildMapOfDeploymentsFromList(list *corev1.List) (map[string]*appsv1.Deployment, error) { - ret := make(map[string]*appsv1.Deployment) +func (lc *ListChangeForPowerMax) injectKaraviSecret(insecure bool) { + if lc.Err != nil { + return + } - for _, v := range list.Items { - var meta metav1.TypeMeta - err := yaml.Unmarshal(v.Raw, &meta) - if err != nil { - return nil, err - } + if lc.InjectResources.Secret == "" { + return + } - switch meta.Kind { - case "Deployment": - var deploy appsv1.Deployment - err := yaml.Unmarshal(v.Raw, &deploy) - if err != nil { - return nil, err - } - ret[deploy.Name] = &deploy - } + // Extract all of the Secret resources. + secrets, err := buildMapOfSecretsFromList(lc.Existing) + if err != nil { + lc.Err = fmt.Errorf("building secret map: %w", err) + return } - return ret, nil -} + // Pick out the config. + configSecret, ok := secrets[lc.InjectResources.Secret] + if !ok { + lc.Err = errors.New("config secret not found") + return + } -func buildMapOfDaemonsetsFromList(list *corev1.List) (map[string]*appsv1.DaemonSet, error) { - ret := make(map[string]*appsv1.DaemonSet) + // Get the config data. + m, err := buildMapOfDeploymentsFromList(lc.Existing) + if err != nil { + lc.Err = err + return + } - for _, v := range list.Items { - var meta metav1.TypeMeta - err := yaml.Unmarshal(v.Raw, &meta) - if err != nil { - return nil, err - } + deploy, ok := m[lc.InjectResources.Deployment] + if !ok { + lc.Err = errors.New("deployment not found") + return + } - switch meta.Kind { - case "DaemonSet": - var ds appsv1.DaemonSet - err := yaml.Unmarshal(v.Raw, &ds) - if err != nil { - return nil, err - } - ret[ds.Name] = &ds - } + configSecData, err := lc.GetCommandEnv(deploy, configSecret, insecure) + if err != nil { + lc.Err = fmt.Errorf("getting command env: %w", err) + return } - return ret, nil + // Copy the config data and convert endpoints to localhost: + configSecData = convertEndpoints(configSecData, lc.StartingPortRange) + configSecData = scrubLoginCredentials(configSecData) + configSecDataJSON, err := json.Marshal(&configSecData) + if err != nil { + lc.Err = err + return + } + + lc.Endpoint = configSecData[0].Endpoint + + // Create the Karavi config Secret, containing this new data. + newSecret := corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "karavi-authorization-config", + Namespace: configSecret.Namespace, + }, + TypeMeta: metav1.TypeMeta{ + APIVersion: configSecret.APIVersion, + Kind: "Secret", + }, + Type: "Opaque", + Data: map[string][]byte{ + "config": []byte(configSecDataJSON), + }, + } + + // Append it to the list of items. + enc, err := json.Marshal(&newSecret) + if err != nil { + lc.Err = err + return + } + raw := runtime.RawExtension{ + Raw: enc, + } + lc.Modified.Items = append(lc.Modified.Items, raw) } -func buildMapOfSecretsFromList(list *corev1.List) (map[string]*corev1.Secret, error) { - ret := make(map[string]*corev1.Secret) +func (lc *ListChangeForPowerMax) injectIntoDeployment(imageAddr, proxyHost string, insecure bool) { + if lc.Err != nil { + return + } - for _, v := range list.Items { - var meta metav1.TypeMeta - err := yaml.Unmarshal(v.Raw, &meta) - if err != nil { - return nil, err + if lc.ListChange.InjectResources.Deployment == "" { + return + } + + m, err := buildMapOfDeploymentsFromList(lc.ListChange.Existing) + if err != nil { + lc.Err = err + return + } + + deploy, ok := m[lc.ListChange.InjectResources.Deployment] + if !ok { + lc.Err = errors.New("deployment not found") + return + } + + secretName := "karavi-authorization-config" + authVolume := corev1.Volume{} + authVolume.Name = "karavi-authorization-config" + authVolume.Secret = &corev1.SecretVolumeSource{ + SecretName: secretName, + } + deploy.Spec.Template.Spec.Volumes = append(deploy.Spec.Template.Spec.Volumes, authVolume) + + rootCertificateMounted := false + volumes := deploy.Spec.Template.Spec.Volumes + for _, v := range volumes { + if v.Name == "proxy-server-root-certificate" { + rootCertificateMounted = true + break } + } - switch meta.Kind { - case "Secret": - var secret corev1.Secret - err := yaml.Unmarshal(v.Raw, &secret) - if err != nil { - return nil, err - } - ret[secret.Name] = &secret + if !rootCertificateMounted { + rootCertificateVolume := corev1.Volume{} + rootCertificateVolume.Name = "proxy-server-root-certificate" + rootCertificateVolume.Secret = &corev1.SecretVolumeSource{ + SecretName: "proxy-server-root-certificate", } + deploy.Spec.Template.Spec.Volumes = append(deploy.Spec.Template.Spec.Volumes, rootCertificateVolume) } - return ret, nil -} + containers := deploy.Spec.Template.Spec.Containers -// SecretData holds k8s secret data for a backend storage system -type SecretData struct { - Username string `json:"username"` - Password string `json:"password"` - IntendedEndpoint string `json:"intendedEndpoint"` - Endpoint string `json:"endpoint"` - SystemID string `json:"systemID"` - Insecure bool `json:"insecure"` - IsDefault bool `json:"isDefault"` -} + // Remove any existing proxy containers... + for i, c := range containers { + if c.Name == "karavi-authorization-proxy" { + containers = append(containers[:i], containers[i+1:]...) + } + } -func getSecretData(s *corev1.Secret) ([]SecretData, error) { - data, ok := s.Data["config"] - if !ok { - return nil, errors.New("missing config key") + var endpoint string + for i, c := range containers { + if c.Name == "driver" { + commandEnvFlag := false + for j, e := range c.Env { + if e.Name == "X_CSI_POWERMAX_ENDPOINT" { + endpoint = containers[i].Env[j].Value + containers[i].Env[j].Value = lc.Endpoint + commandEnvFlag = true + + } + } + if !commandEnvFlag { + lc.Err = errors.New("X_CSI_POWERMAX_ENDPOINT not found") + return + } + break + } } - var ret []SecretData - err := json.NewDecoder(bytes.NewReader(data)).Decode(&ret) - if err != nil { - return nil, fmt.Errorf("decoding secret data json: %w", err) + for i, c := range containers { + if c.Name == "driver" { + foundEndpoint := false + for _, e := range c.Env { + if e.Name == "CSM_CSI_POWERMAX_ENDPOINT" { + foundEndpoint = true + break + } + } + if !foundEndpoint { + containers[i].Env = append(containers[i].Env, corev1.EnvVar{ + Name: "CSM_CSI_POWERMAX_ENDPOINT", + Value: endpoint, + }) + } + break + } } - return ret, nil -} + // Add a new proxy container... + proxyContainer := buildProxyContainer(deploy.Namespace, secretName, imageAddr, proxyHost, insecure) + containers = append(containers, *proxyContainer) + deploy.Spec.Template.Spec.Containers = containers -func convertEndpoints(s []SecretData, startingPortRange int) []SecretData { - var ret []SecretData - for _, v := range s { - v.IntendedEndpoint = v.Endpoint - v.Endpoint = fmt.Sprintf("https://localhost:%d", startingPortRange) - startingPortRange++ - ret = append(ret, v) + deploy.Annotations["com.dell.karavi-authorization-proxy"] = "true" + + // Add the extra-create-metadata flag to provisioner if it does not exist + if deploy.Name == lc.InjectResources.Deployment { + provisionerMetaDataFlag := false + for i, c := range deploy.Spec.Template.Spec.Containers { + if c.Name == "provisioner" { + for _, a := range c.Args { + if a == "--extra-create-metadata" { + provisionerMetaDataFlag = true + break + } + } + if !provisionerMetaDataFlag { + deploy.Spec.Template.Spec.Containers[i].Args = append(deploy.Spec.Template.Spec.Containers[i].Args, "--extra-create-metadata") + } + } + } } - return ret -} -func scrubLoginCredentials(s []SecretData) []SecretData { - var ret []SecretData - for _, v := range s { - v.Username, v.Password = "-", "-" - ret = append(ret, v) + // Append it to the list of items. + enc, err := json.Marshal(&deploy) + if err != nil { + lc.Err = err + return } - return ret + raw := runtime.RawExtension{ + Raw: enc, + } + lc.Modified.Items = append(lc.Modified.Items, raw) } -func (lc *ListChange) injectIntoDeployment(imageAddr, proxyHost string, insecure bool) { +func (lc *ListChangeForMultiArray) injectIntoDeployment(imageAddr, proxyHost string, insecure bool) { if lc.Err != nil { return } - if lc.InjectResources.Deployment == "" { + if lc.ListChange.InjectResources.Deployment == "" { return } - m, err := buildMapOfDeploymentsFromList(lc.Existing) + m, err := buildMapOfDeploymentsFromList(lc.ListChange.Existing) if err != nil { lc.Err = err return } - deploy, ok := m[lc.InjectResources.Deployment] + deploy, ok := m[lc.ListChange.InjectResources.Deployment] if !ok { lc.Err = errors.New("deployment not found") return @@ -519,7 +734,7 @@ func (lc *ListChange) injectIntoDeployment(imageAddr, proxyHost string, insecure volumes := deploy.Spec.Template.Spec.Volumes for i, v := range volumes { - if v.Name != "vxflexos-config" { + if v.Name != lc.InjectResources.Secret { continue } volumes[i].Secret.SecretName = "karavi-authorization-config" @@ -552,14 +767,14 @@ func (lc *ListChange) injectIntoDeployment(imageAddr, proxyHost string, insecure } // Add a new proxy container... - proxyContainer := buildProxyContainer(imageAddr, proxyHost, insecure) + proxyContainer := buildProxyContainer(deploy.Namespace, lc.InjectResources.Secret, imageAddr, proxyHost, insecure) containers = append(containers, *proxyContainer) deploy.Spec.Template.Spec.Containers = containers deploy.Annotations["com.dell.karavi-authorization-proxy"] = "true" // Add the extra-create-metadata flag to provisioner if it does not exist - if deploy.Name == "vxflexos-controller" { + if deploy.Name == lc.InjectResources.Deployment { provisionerMetaDataFlag := false for i, c := range deploy.Spec.Template.Spec.Containers { if c.Name == "provisioner" { @@ -588,7 +803,98 @@ func (lc *ListChange) injectIntoDeployment(imageAddr, proxyHost string, insecure lc.Modified.Items = append(lc.Modified.Items, raw) } -func (lc *ListChange) injectIntoDaemonset(imageAddr, proxyHost string, insecure bool) { +func (lc *ListChangeForPowerMax) injectIntoDaemonset(imageAddr, proxyHost string, insecure bool) { + if lc.Err != nil { + return + } + + if lc.InjectResources.DaemonSet == "" { + return + } + + m, err := buildMapOfDaemonsetsFromList(lc.Existing) + if err != nil { + lc.Err = err + return + } + + ds, ok := m[lc.InjectResources.DaemonSet] + if !ok { + lc.Err = errors.New("daemonset not found") + return + } + + secretName := "karavi-authorization-config" + authVolume := corev1.Volume{} + authVolume.Name = "karavi-authorization-config" + authVolume.Secret = &corev1.SecretVolumeSource{ + SecretName: secretName, + } + ds.Spec.Template.Spec.Volumes = append(ds.Spec.Template.Spec.Volumes, authVolume) + + volumes := ds.Spec.Template.Spec.Volumes + rootCertificateMounted := false + for _, v := range volumes { + if v.Name == "proxy-server-root-certificate" { + rootCertificateMounted = true + break + } + } + + if !rootCertificateMounted { + rootCertificateVolume := corev1.Volume{} + rootCertificateVolume.Name = "proxy-server-root-certificate" + rootCertificateVolume.Secret = &corev1.SecretVolumeSource{ + SecretName: "proxy-server-root-certificate", + } + ds.Spec.Template.Spec.Volumes = append(ds.Spec.Template.Spec.Volumes, rootCertificateVolume) + } + + containers := ds.Spec.Template.Spec.Containers + + // Remove any existing proxy containers... + for i, c := range containers { + if c.Name == "karavi-authorization-proxy" { + containers = append(containers[:i], containers[i+1:]...) + } + } + + for i, c := range containers { + if c.Name == "driver" { + commandEnvFlag := false + for j, e := range c.Env { + if e.Name == "X_CSI_POWERMAX_ENDPOINT" { + containers[i].Env[j].Value = lc.Endpoint + commandEnvFlag = true + } + } + if !commandEnvFlag { + lc.Err = errors.New("X_CSI_POWERMAX_ENDPOINT not found") + return + } + break + } + } + + proxyContainer := buildProxyContainer(ds.Namespace, secretName, imageAddr, proxyHost, insecure) + containers = append(containers, *proxyContainer) + ds.Spec.Template.Spec.Containers = containers + + ds.Annotations["com.dell.karavi-authorization-proxy"] = "true" + + // Append it to the list of items. + enc, err := json.Marshal(&ds) + if err != nil { + lc.Err = err + return + } + raw := runtime.RawExtension{ + Raw: enc, + } + lc.Modified.Items = append(lc.Modified.Items, raw) +} + +func (lc *ListChangeForMultiArray) injectIntoDaemonset(imageAddr, proxyHost string, insecure bool) { if lc.Err != nil { return } @@ -611,7 +917,7 @@ func (lc *ListChange) injectIntoDaemonset(imageAddr, proxyHost string, insecure volumes := ds.Spec.Template.Spec.Volumes for i, v := range volumes { - if v.Name != "vxflexos-config" { + if v.Name != lc.InjectResources.Secret { continue } volumes[i].Secret.SecretName = "karavi-authorization-config" @@ -643,7 +949,7 @@ func (lc *ListChange) injectIntoDaemonset(imageAddr, proxyHost string, insecure } } - proxyContainer := buildProxyContainer(imageAddr, proxyHost, insecure) + proxyContainer := buildProxyContainer(ds.Namespace, lc.InjectResources.Secret, imageAddr, proxyHost, insecure) containers = append(containers, *proxyContainer) ds.Spec.Template.Spec.Containers = containers @@ -660,3 +966,181 @@ func (lc *ListChange) injectIntoDaemonset(imageAddr, proxyHost string, insecure } lc.Modified.Items = append(lc.Modified.Items, raw) } + +func buildMapOfDeploymentsFromList(list *corev1.List) (map[string]*appsv1.Deployment, error) { + ret := make(map[string]*appsv1.Deployment) + + for _, v := range list.Items { + var meta metav1.TypeMeta + err := yaml.Unmarshal(v.Raw, &meta) + if err != nil { + return nil, err + } + + switch meta.Kind { + case "Deployment": + var deploy appsv1.Deployment + err := yaml.Unmarshal(v.Raw, &deploy) + if err != nil { + return nil, err + } + ret[deploy.Name] = &deploy + } + } + + return ret, nil +} + +func buildMapOfDaemonsetsFromList(list *corev1.List) (map[string]*appsv1.DaemonSet, error) { + ret := make(map[string]*appsv1.DaemonSet) + + for _, v := range list.Items { + var meta metav1.TypeMeta + err := yaml.Unmarshal(v.Raw, &meta) + if err != nil { + return nil, err + } + + switch meta.Kind { + case "DaemonSet": + var ds appsv1.DaemonSet + err := yaml.Unmarshal(v.Raw, &ds) + if err != nil { + return nil, err + } + ret[ds.Name] = &ds + } + } + + return ret, nil +} + +func buildMapOfSecretsFromList(list *corev1.List) (map[string]*corev1.Secret, error) { + ret := make(map[string]*corev1.Secret) + + for _, v := range list.Items { + var meta metav1.TypeMeta + err := yaml.Unmarshal(v.Raw, &meta) + if err != nil { + return nil, err + } + + switch meta.Kind { + case "Secret": + var secret corev1.Secret + err := yaml.Unmarshal(v.Raw, &secret) + if err != nil { + return nil, err + } + ret[secret.Name] = &secret + } + } + + return ret, nil +} + +// SecretData holds k8s secret data for a backend storage system +type SecretData struct { + Username string `json:"username"` + Password string `json:"password"` + IntendedEndpoint string `json:"intendedEndpoint"` + Endpoint string `json:"endpoint"` + SystemID string `json:"systemID"` + Insecure bool `json:"insecure"` + IsDefault bool `json:"isDefault"` +} + +func getSecretData(s *corev1.Secret) ([]SecretData, error) { + data, ok := s.Data["config"] + if !ok { + return nil, errors.New("missing config key") + } + + var ret []SecretData + err := json.NewDecoder(bytes.NewReader(data)).Decode(&ret) + if err != nil { + return nil, fmt.Errorf("decoding secret data json: %w", err) + } + + return ret, nil +} + +func convertEndpoints(s []SecretData, startingPortRange int) []SecretData { + var ret []SecretData + for _, v := range s { + v.IntendedEndpoint = v.Endpoint + v.Endpoint = fmt.Sprintf("https://localhost:%d", startingPortRange) + startingPortRange++ + ret = append(ret, v) + } + return ret +} + +func scrubLoginCredentials(s []SecretData) []SecretData { + var ret []SecretData + for _, v := range s { + v.Username, v.Password = "-", "-" + ret = append(ret, v) + } + return ret +} + +func getStartingPortRanges(proxyPortFlags []string) (map[string]int, error) { + if len(proxyPortFlags) == 0 { + return map[string]int{ + "powerflex": DefaultStartingPortRange, + "powermax": DefaultStartingPortRange + 200, + }, nil + } + + portRanges := make(map[string]int) + for _, v := range proxyPortFlags { + t := strings.Split(v, "=") + if len(t) < 2 { + return nil, fmt.Errorf("invalid proxy flag: %s: no port provided", proxyPortFlags) + } + port, err := strconv.Atoi(t[1]) + if err != nil { + return nil, fmt.Errorf("invalid port: %s", t[1]) + } + portRanges[t[0]] = port + } + + fillUnspecifiedPortRanges(portRanges) + + return portRanges, nil +} + +func fillUnspecifiedPortRanges(portRanges map[string]int) { + storageIndicies := map[string]int{ + "powerflex": 0, + "powermax": 1, + } + storageTypes := []string{"powerflex", "powermax"} + + var referenceStorageSystem string + var referencePort int + for k, v := range portRanges { + referenceStorageSystem = k + referencePort = v + break + } + + storageIndex := storageIndicies[referenceStorageSystem] + + for i := storageIndex + 1; i < len(storageTypes); i++ { + storage := storageTypes[i] + if _, ok := portRanges[storage]; ok { + continue + } + portRanges[storage] = referencePort + (i * 200) + } + + for i := storageIndex - 1; i >= 0; i-- { + storage := storageTypes[i] + if _, ok := portRanges[storage]; ok { + continue + } + portRanges[storage] = referencePort - ((i + 1) * 200) + } +} diff --git a/cmd/karavictl/cmd/inject_test.go b/cmd/karavictl/cmd/inject_test.go index e4738deb..88cc6675 100644 --- a/cmd/karavictl/cmd/inject_test.go +++ b/cmd/karavictl/cmd/inject_test.go @@ -17,16 +17,111 @@ package cmd import ( "io/ioutil" "net/url" + "reflect" "testing" corev1 "k8s.io/api/core/v1" "sigs.k8s.io/yaml" ) -func TestListChange(t *testing.T) { +func TestListChangePowerFlex(t *testing.T) { // This file was generated using the following command: // kubectl get secrets,deployments,daemonsets -n vxflexos -o yaml - b, err := ioutil.ReadFile("./testdata/kubectl_get_all_in_ns_without_karavi.yaml") + listChangeMultiArray(t, "./testdata/kubectl_get_all_in_vxflexos.yaml", "vxflexos-config", 5) +} + +func TestListChangeObservability(t *testing.T) { + // This file was generated using the following command: + // kubectl get secrets,deployments -n karavi -o yaml + listChangeMultiArray(t, "./testdata/kubectl_get_all_in_karavi_observability.yaml", "vxflexos-config", 11) +} + +func TestListChangePowerMaxNew(t *testing.T) { + // This file was generated BEFORE injecting sidecar by using the following command: + // kubectl get secrets,deployments,daemonsets -n powermax -o yaml + + //./testdata/kubectl_get_all_in_powermax.yaml + listChangePowerMax(t, "./testdata/kubectl_get_all_in_powermax_new.yaml", 4) + +} +func TestListChangePowerMaxUpdate(t *testing.T) { + // This file was generated AFTER injecting sidecar by using the following command: + // kubectl get secrets,deployments,daemonsets -n powermax -o yaml + listChangePowerMax(t, "./testdata/kubectl_get_all_in_powermax_update.yaml", 7) + +} +func TestGetStartingPortRanges(t *testing.T) { + t.Run("no proxyPort flag", func(t *testing.T) { + proxyPortFlags := []string{} + got, err := getStartingPortRanges(proxyPortFlags) + if err != nil { + t.Fatal(err) + } + + want := map[string]int{ + "powerflex": DefaultStartingPortRange, + "powermax": DefaultStartingPortRange + 200, + } + + if !reflect.DeepEqual(got, want) { + t.Errorf("got %+v, want %+v", got, want) + } + }) + + t.Run("custom powerflex proxy port", func(t *testing.T) { + proxyPortFlags := []string{"powerflex=10000"} + got, err := getStartingPortRanges(proxyPortFlags) + if err != nil { + t.Fatal(err) + } + + want := map[string]int{ + "powerflex": 10000, + "powermax": 10200, + } + + if !reflect.DeepEqual(got, want) { + t.Errorf("got %+v, want %+v", got, want) + } + }) + + t.Run("custom powermax proxy port", func(t *testing.T) { + proxyPortFlags := []string{"powermax=10000"} + got, err := getStartingPortRanges(proxyPortFlags) + if err != nil { + t.Fatal(err) + } + + want := map[string]int{ + "powerflex": 9800, + "powermax": 10000, + } + + if !reflect.DeepEqual(got, want) { + t.Errorf("got %+v, want %+v", got, want) + } + }) + + t.Run("custom powerflex and powermax proxy port", func(t *testing.T) { + proxyPortFlags := []string{"powerflex=10000", "powermax=20000"} + got, err := getStartingPortRanges(proxyPortFlags) + if err != nil { + t.Fatal(err) + } + + want := map[string]int{ + "powerflex": 10000, + "powermax": 20000, + } + + if !reflect.DeepEqual(got, want) { + t.Errorf("got %+v, want %+v", got, want) + } + }) +} + +func listChangeMultiArray(t *testing.T, path, wantKey string, wantLen int) { + b, err := ioutil.ReadFile(path) if err != nil { t.Fatal(err) } @@ -36,13 +131,19 @@ func TestListChange(t *testing.T) { t.Fatal(err) } - sut := NewListChange(&existing) + var sut ListChangeForMultiArray + sut.ListChange = NewListChange(&existing) t.Run("injects the proxy pieces", func(t *testing.T) { + portRanges, err := getStartingPortRanges(nil) + if err != nil { + t.Fatal(err) + } + got, err := injectUsingList(b, "http://image-addr", "http://proxy-addr", - "./testdata/fake-certificate-file.pem", false) + "./testdata/fake-certificate-file.pem", portRanges, false) if err != nil { t.Fatal(err) } @@ -57,57 +158,28 @@ func TestListChange(t *testing.T) { t.Fatal(err) } - wantLen := 9 if l := len(got); l != wantLen { t.Errorf("buildMapOfSecretsFromList: got len %d, want %d", l, wantLen) } - // The vxflexos-config Secret should exist with a non-nil value. - wantKey := "vxflexos-config" + // The Secret should exist with a non-nil value. if v, ok := got[wantKey]; !ok || v == nil { t.Errorf("buildMapOfSecretsFromList: expected key %q to exist, but got [%v,%v]", wantKey, v, ok) } }) t.Run("inject a new secret with localhost endpoints", func(t *testing.T) { + sut.InjectResources = &Resources{ + Secret: wantKey, + } sut.injectKaraviSecret() if sut.Err != nil { t.Fatal(sut.Err) } - - // Extract only the secrets from this list. - secrets, err := buildMapOfSecretsFromList(sut.Modified) - if err != nil { - t.Fatal(err) - } - secret, ok := secrets["karavi-authorization-config"] - if !ok { - t.Fatal("expected new secret to exist, but it didn't") - } - secretData, err := getSecretData(secret) - if err != nil { - t.Fatal(err) - } - for _, v := range secretData { - u, err := url.Parse(v.Endpoint) - if err != nil { - t.Fatal(err) - } - want := "localhost" - if got := u.Hostname(); got != want { - t.Errorf("got %q, want %q", got, want) - } - } - // The new secret should be called karavi-auth-config - // It should replace endpoint values with localhost - // Each localhost should have a unique port number - // The original secret should be left intact. }) } -func TestListChangeObservability(t *testing.T) { - // This file was generated using the following command: - // kubectl get secrets,deployments,daemonsets -n vxflexos -o yaml - b, err := ioutil.ReadFile("./testdata/kubectl_get_all_in_karavi_observability.yaml") +func listChangePowerMax(t *testing.T, path string, wantLen int) { + b, err := ioutil.ReadFile(path) if err != nil { t.Fatal(err) } @@ -117,13 +189,19 @@ func TestListChangeObservability(t *testing.T) { t.Fatal(err) } - sut := NewListChange(&existing) + var sut ListChangeForPowerMax + sut.ListChange = NewListChange(&existing) + wantKey := "powermax-creds" t.Run("injects the proxy pieces", func(t *testing.T) { + portRanges, err := getStartingPortRanges(nil) + if err != nil { + t.Fatal(err) + } got, err := injectUsingList(b, "http://image-addr", "http://proxy-addr", - "./testdata/fake-certificate-file.pem", false) + "./testdata/fake-certificate-file.pem", portRanges, false) if err != nil { t.Fatal(err) } @@ -137,20 +215,21 @@ func TestListChangeObservability(t *testing.T) { if err != nil { t.Fatal(err) } - - wantLen := 11 if l := len(got); l != wantLen { t.Errorf("buildMapOfSecretsFromList: got len %d, want %d", l, wantLen) } - // The vxflexos-config Secret should exist with a non-nil value. - wantKey := "vxflexos-config" + // The Secret should exist with a non-nil value. if v, ok := got[wantKey]; !ok || v == nil { t.Errorf("buildMapOfSecretsFromList: expected key %q to exist, but got [%v,%v]", wantKey, v, ok) } }) t.Run("inject a new secret with localhost endpoints", func(t *testing.T) { - sut.injectKaraviSecret() + sut.InjectResources = &Resources{ + Secret: wantKey, + Deployment: "powermax-controller", + } + sut.injectKaraviSecret(true) if sut.Err != nil { t.Fatal(sut.Err) } @@ -183,13 +262,72 @@ func TestListChangeObservability(t *testing.T) { // Each localhost should have a unique port number // The original secret should be left intact. }) -} + t.Run("inject a new deployment with localhost endpoints", func(t *testing.T) { + modified, err := sut.Change(&existing, "http://image-addr", "http://proxy-addr", "", true) + if err != nil { + t.Fatal(err) + } -func toSecret(t *testing.T, b []byte) *corev1.Secret { - var s corev1.Secret - err := yaml.Unmarshal(b, &s) - if err != nil { - t.Fatal(err) - } - return &s + m, err := buildMapOfDeploymentsFromList(modified) + if err != nil { + t.Fatal(err) + } + + deploy, ok := m[sut.InjectResources.Deployment] + if !ok { + t.Fatal("deployment not found") + } + + // check that endpoint is modified + for _, c := range deploy.Spec.Template.Spec.Containers { + if c.Name == "driver" { + commandEnvFlag := false + for _, e := range c.Env { + if e.Name == "X_CSI_POWERMAX_ENDPOINT" { + u, err := url.Parse(e.Value) + if err != nil { + t.Fatal(err) + } + want := "localhost" + if got := u.Hostname(); got != want { + t.Errorf("got %q, want %q", got, want) + } + commandEnvFlag = true + } + + } + if !commandEnvFlag { + t.Fatal("X_CSI_POWERMAX_ENDPOINT") + } + break + } + + } + + for _, c := range deploy.Spec.Template.Spec.Containers { + if c.Name == "driver" { + commandEnvFlag := false + for _, e := range c.Env { + if e.Name == "CSM_CSI_POWERMAX_ENDPOINT" { + u, err := url.Parse(e.Value) + if err != nil { + t.Fatal(err) + } + want := "localhost" + if got := u.Hostname(); got == want { + t.Errorf("got %q, want %q", got, want) + } + commandEnvFlag = true + } + + } + if !commandEnvFlag { + t.Fatal("CSM_CSI_POWERMAX_ENDPOINT") + } + break + } + + } + + }) } diff --git a/cmd/karavictl/cmd/testdata/kubectl_get_all_in_ns_without_karavi.yaml b/cmd/karavictl/cmd/testdata/kubectl_get_all_in_ns_without_karavi.yaml deleted file mode 100644 index 3b7b5c5e..00000000 --- a/cmd/karavictl/cmd/testdata/kubectl_get_all_in_ns_without_karavi.yaml +++ /dev/null @@ -1,1324 +0,0 @@ -apiVersion: v1 -items: -- apiVersion: v1 - data: - ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1ERXhNakF3TlRreU5Wb1hEVE14TURFeE1EQXdOVGt5TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTE5RCjg1NHp5S1dHWUU0RW5WQzdscUkrcEI1cEtjOVBpRVNpbkR6TVMyZUczUWY4UUQ4U1FMOElQUG1GWVlyM2RBam0Kc3BFZzRxSElwNkVjVzB0S2dtWG50UmJ2RnNHSzVzU3JQY0hBejJIWjhEV1d5OXJKL1dYVHk1YmF0Q3NGWUhpRQptcnpKYnNIL2JMY3BYaFo1bys5bmIwRStSU3Q4ZTBGL1NaVEJLWTBlUGZHekZCenBSUWpWRmxPM3h5OW0xcXJhCkNkNHlmNk9TOUxjaUQyazZwOTJQMThIT1FiYmY0MWttdWNnUUFLMC8zMHAwbkVaUk42bVkzNUVJTGNidzNyMW4KTE4vd1UyQ1cxZExEWDZzUTBCRHcyazNDZkVmNTUxRDN5ZHAzU3dqUW5Qd25mVVQ1NCswMURjMG9ZOWh4MThaeQpOMWNHZVZ5VENxeFFRaS9pallNQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIMTVVNjEzR3BUWVpYclNvdEpQbnU5aTh6TXIKaUdkdUcyUTZsZWhneFhiNkZQamw2TVgzOEJObDVKMVRNUUIzUVhjZk1QcEpMVmF3UWRXLzdoeE9ONGtzOFhRcQp0M2dGL3JhVjk0TWk0azJweDE0U0I1TEE4enlJb0N4SXdkam1yUTIwL1FqNTB2V1pXV1QwbXhwTk4vRk1sdkl3CktmRVFVQkNkUnJFdzlES0xjc3J1aGZwdFhqb3Z5eWpyc0VJbHFmVUx2U2x5M2U5VzJ6YlIvWExLVXVsL1d3VFkKRW1SRzdPUVJnZXFUZWpEQWFrSFZXcGxlVmJ6bkdWZ1FTZzNWRHlSY21rUmE4a1QvcjZ1OS8zRkNmMjNXMU5pOQpkdXc1Rk4rbnExRmMyYUVrSVFjRWFGNE1oVURycm5Nd2ZxMzAyekxYVlJhbWFwb2VlNy9PRUU3U2gzaz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= - namespace: dnhmbGV4b3M= - token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklrRm5jMU5QVEdwYWJuUnRVRnAyY3paNU16UnNlVzR3TWtOSGJVRk5kMDFJUVdSUFoxYzRZemx6UTJNaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUoyZUdac1pYaHZjeUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUprWldaaGRXeDBMWFJ2YTJWdUxXaHlkekpzSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXpaWEoyYVdObExXRmpZMjkxYm5RdWJtRnRaU0k2SW1SbFptRjFiSFFpTENKcmRXSmxjbTVsZEdWekxtbHZMM05sY25acFkyVmhZMk52ZFc1MEwzTmxjblpwWTJVdFlXTmpiM1Z1ZEM1MWFXUWlPaUl5T1Rrek1ESmhOUzAxTUdSaUxUUmxaR010T1RFeU5TMHhaalF6TlRNeE5UWm1aV0VpTENKemRXSWlPaUp6ZVhOMFpXMDZjMlZ5ZG1salpXRmpZMjkxYm5RNmRuaG1iR1Y0YjNNNlpHVm1ZWFZzZENKOS5GWDQtTGk3MHhFVTlreFYtNFI3ejJza0hFZ001Z0pBb2F6azhQUXdqcTlacmVqNkxYSkFxeUliRUNndHJURXB2b2VJd256VjlFS2dFeHJjQkdiMU9NdTYyU3RSSVJPMFp4cWNVZjdZYUZsYkU5cXhLamFmVEZiMy0zN2tyeHhvOWliN1ltVm04cVlCaTJuV0Fzc0MyNGZkUGdCTjRhX0NQSVZRRGx5SnVHcE5mQl9PNk9TTDQyTl94eThrdjg2T1o1ajVRZnB6Uzg5SjduUVE3UkxZVFp5TlA4TE5fQ25GLWxzc3NtOExJTnBtakMzWnk1M001NHNRUUNLSGZaOHlyTUQyal9OUmdSR1hjcEJMbEhlSkVoeDVwY1RzTGtyU2FJVWFnMUVoV2NvUzN5LUhvV0pxTTlnNDFmeW10OFZyWU43MHZOSWxkMTNyaF9VZkd3V3lvMUE= - kind: Secret - metadata: - annotations: - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"v1","data":{"ca.crt":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1ERXhNakF3TlRreU5Wb1hEVE14TURFeE1EQXdOVGt5TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTE5RCjg1NHp5S1dHWUU0RW5WQzdscUkrcEI1cEtjOVBpRVNpbkR6TVMyZUczUWY4UUQ4U1FMOElQUG1GWVlyM2RBam0Kc3BFZzRxSElwNkVjVzB0S2dtWG50UmJ2RnNHSzVzU3JQY0hBejJIWjhEV1d5OXJKL1dYVHk1YmF0Q3NGWUhpRQptcnpKYnNIL2JMY3BYaFo1bys5bmIwRStSU3Q4ZTBGL1NaVEJLWTBlUGZHekZCenBSUWpWRmxPM3h5OW0xcXJhCkNkNHlmNk9TOUxjaUQyazZwOTJQMThIT1FiYmY0MWttdWNnUUFLMC8zMHAwbkVaUk42bVkzNUVJTGNidzNyMW4KTE4vd1UyQ1cxZExEWDZzUTBCRHcyazNDZkVmNTUxRDN5ZHAzU3dqUW5Qd25mVVQ1NCswMURjMG9ZOWh4MThaeQpOMWNHZVZ5VENxeFFRaS9pallNQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIMTVVNjEzR3BUWVpYclNvdEpQbnU5aTh6TXIKaUdkdUcyUTZsZWhneFhiNkZQamw2TVgzOEJObDVKMVRNUUIzUVhjZk1QcEpMVmF3UWRXLzdoeE9ONGtzOFhRcQp0M2dGL3JhVjk0TWk0azJweDE0U0I1TEE4enlJb0N4SXdkam1yUTIwL1FqNTB2V1pXV1QwbXhwTk4vRk1sdkl3CktmRVFVQkNkUnJFdzlES0xjc3J1aGZwdFhqb3Z5eWpyc0VJbHFmVUx2U2x5M2U5VzJ6YlIvWExLVXVsL1d3VFkKRW1SRzdPUVJnZXFUZWpEQWFrSFZXcGxlVmJ6bkdWZ1FTZzNWRHlSY21rUmE4a1QvcjZ1OS8zRkNmMjNXMU5pOQpkdXc1Rk4rbnExRmMyYUVrSVFjRWFGNE1oVURycm5Nd2ZxMzAyekxYVlJhbWFwb2VlNy9PRUU3U2gzaz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=","namespace":"dnhmbGV4b3M=","token":"ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklrRm5jMU5QVEdwYWJuUnRVRnAyY3paNU16UnNlVzR3TWtOSGJVRk5kMDFJUVdSUFoxYzRZemx6UTJNaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUoyZUdac1pYaHZjeUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUprWldaaGRXeDBMWFJ2YTJWdUxXaHlkekpzSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXpaWEoyYVdObExXRmpZMjkxYm5RdWJtRnRaU0k2SW1SbFptRjFiSFFpTENKcmRXSmxjbTVsZEdWekxtbHZMM05sY25acFkyVmhZMk52ZFc1MEwzTmxjblpwWTJVdFlXTmpiM1Z1ZEM1MWFXUWlPaUl5T1Rrek1ESmhOUzAxTUdSaUxUUmxaR010T1RFeU5TMHhaalF6TlRNeE5UWm1aV0VpTENKemRXSWlPaUp6ZVhOMFpXMDZjMlZ5ZG1salpXRmpZMjkxYm5RNmRuaG1iR1Y0YjNNNlpHVm1ZWFZzZENKOS5GWDQtTGk3MHhFVTlreFYtNFI3ejJza0hFZ001Z0pBb2F6azhQUXdqcTlacmVqNkxYSkFxeUliRUNndHJURXB2b2VJd256VjlFS2dFeHJjQkdiMU9NdTYyU3RSSVJPMFp4cWNVZjdZYUZsYkU5cXhLamFmVEZiMy0zN2tyeHhvOWliN1ltVm04cVlCaTJuV0Fzc0MyNGZkUGdCTjRhX0NQSVZRRGx5SnVHcE5mQl9PNk9TTDQyTl94eThrdjg2T1o1ajVRZnB6Uzg5SjduUVE3UkxZVFp5TlA4TE5fQ25GLWxzc3NtOExJTnBtakMzWnk1M001NHNRUUNLSGZaOHlyTUQyal9OUmdSR1hjcEJMbEhlSkVoeDVwY1RzTGtyU2FJVWFnMUVoV2NvUzN5LUhvV0pxTTlnNDFmeW10OFZyWU43MHZOSWxkMTNyaF9VZkd3V3lvMUE="},"kind":"Secret","metadata":{"annotations":{"kubernetes.io/service-account.name":"default","kubernetes.io/service-account.uid":"299302a5-50db-4edc-9125-1f4353156fea"},"creationTimestamp":"2021-01-12T01:01:55Z","managedFields":[{"apiVersion":"v1","fieldsType":"FieldsV1","fieldsV1":{"f:data":{".":{},"f:ca.crt":{},"f:namespace":{},"f:token":{}},"f:metadata":{"f:annotations":{".":{},"f:kubernetes.io/service-account.name":{},"f:kubernetes.io/service-account.uid":{}}},"f:type":{}},"manager":"kube-controller-manager","operation":"Update","time":"2021-01-12T01:01:55Z"}],"name":"default-token-hrw2l","namespace":"vxflexos","resourceVersion":"1070","selfLink":"/api/v1/namespaces/vxflexos/secrets/default-token-hrw2l","uid":"3bd03399-654b-47b8-b8cd-315a173e7220"},"type":"kubernetes.io/service-account-token"} - kubernetes.io/service-account.name: default - kubernetes.io/service-account.uid: 299302a5-50db-4edc-9125-1f4353156fea - creationTimestamp: "2021-01-12T01:01:55Z" - managedFields: - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:data: - .: {} - f:ca.crt: {} - f:namespace: {} - f:token: {} - f:metadata: - f:annotations: - .: {} - f:kubernetes.io/service-account.name: {} - f:kubernetes.io/service-account.uid: {} - f:type: {} - manager: kube-controller-manager - operation: Update - time: "2021-01-12T01:01:55Z" - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:metadata: - f:annotations: - f:kubectl.kubernetes.io/last-applied-configuration: {} - manager: kubectl - operation: Update - time: "2021-01-30T21:51:39Z" - name: default-token-hrw2l - namespace: vxflexos - resourceVersion: "5497937" - selfLink: /api/v1/namespaces/vxflexos/secrets/default-token-hrw2l - uid: 3bd03399-654b-47b8-b8cd-315a173e7220 - type: kubernetes.io/service-account-token -- apiVersion: v1 - data: - access: ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmhkV1FpT2lKcllYSmhkbWtpTENKbGVIQWlPakUyTVRFME5EWXdNRFVzSW1semN5STZJbU52YlM1a1pXeHNMbXRoY21GMmFTSXNJbk4xWWlJNkltbGhiaTVpYVdKaWVVQmtaV3hzTG1OdmJTSXNJbkp2YkdVaU9pSkRVMGxDY205dWVtVWlMQ0puY205MWNDSTZJa1JsZGs5d2MwZHliM1Z3TVNKOS5QbWJNNWNhaU50aXFFSDNOb0VMbTlKUzdaVDBmOVdjOVhYVVR5b2Q3MlA4 - refresh: ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmhkV1FpT2lKcllYSmhkbWtpTENKbGVIQWlPakUyTkRJNU9ERTVOelVzSW1semN5STZJbU52YlM1a1pXeHNMbXRoY21GMmFTSXNJbk4xWWlJNkltbGhiaTVpYVdKaWVVQmtaV3hzTG1OdmJTSXNJbkp2YkdVaU9pSkRVMGxDY205dWVtVWlMQ0puY205MWNDSTZJa1JsZGs5d2MwZHliM1Z3TVNKOS4wVlk0R3AzOWdEMFpEaE1kWmwtTXlRNHByLVVrTDlPYW5HV0pFYm5YWlpz - kind: Secret - metadata: - annotations: - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"v1","data":{"access":"ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmhkV1FpT2lKcllYSmhkbWtpTENKbGVIQWlPakUyTVRFME5EWXdNRFVzSW1semN5STZJbU52YlM1a1pXeHNMbXRoY21GMmFTSXNJbk4xWWlJNkltbGhiaTVpYVdKaWVVQmtaV3hzTG1OdmJTSXNJbkp2YkdVaU9pSkRVMGxDY205dWVtVWlMQ0puY205MWNDSTZJa1JsZGs5d2MwZHliM1Z3TVNKOS5QbWJNNWNhaU50aXFFSDNOb0VMbTlKUzdaVDBmOVdjOVhYVVR5b2Q3MlA4","refresh":"ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmhkV1FpT2lKcllYSmhkbWtpTENKbGVIQWlPakUyTkRJNU9ERTVOelVzSW1semN5STZJbU52YlM1a1pXeHNMbXRoY21GMmFTSXNJbk4xWWlJNkltbGhiaTVpYVdKaWVVQmtaV3hzTG1OdmJTSXNJbkp2YkdVaU9pSkRVMGxDY205dWVtVWlMQ0puY205MWNDSTZJa1JsZGs5d2MwZHliM1Z3TVNKOS4wVlk0R3AzOWdEMFpEaE1kWmwtTXlRNHByLVVrTDlPYW5HV0pFYm5YWlpz"},"kind":"Secret","metadata":{"annotations":{},"creationTimestamp":"2021-01-12T05:09:30Z","managedFields":[{"apiVersion":"v1","fieldsType":"FieldsV1","fieldsV1":{"f:data":{".":{},"f:access":{},"f:refresh":{}},"f:metadata":{"f:annotations":{".":{},"f:kubectl.kubernetes.io/last-applied-configuration":{}}},"f:type":{}},"manager":"kubectl","operation":"Update","time":"2021-01-23T23:53:23Z"}],"name":"proxy-authz-tokens","namespace":"vxflexos","resourceVersion":"3466060","selfLink":"/api/v1/namespaces/vxflexos/secrets/proxy-authz-tokens","uid":"793fddd5-3809-4795-99b3-98e02d154d16"},"type":"Opaque"} - creationTimestamp: "2021-01-12T05:09:30Z" - managedFields: - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:data: - .: {} - f:access: {} - f:refresh: {} - f:metadata: - f:annotations: - .: {} - f:kubectl.kubernetes.io/last-applied-configuration: {} - f:type: {} - manager: kubectl - operation: Update - time: "2021-01-30T21:51:39Z" - name: proxy-authz-tokens - namespace: vxflexos - resourceVersion: "5497941" - selfLink: /api/v1/namespaces/vxflexos/secrets/proxy-authz-tokens - uid: 793fddd5-3809-4795-99b3-98e02d154d16 - type: Opaque -- apiVersion: v1 - data: - password: QXczd0ZBd0FxMw== - username: UU56Z2R4WGl4 - kind: Secret - metadata: - annotations: - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"v1","data":{"password":"QXczd0ZBd0FxMw==","username":"UU56Z2R4WGl4"},"kind":"Secret","metadata":{"annotations":{},"creationTimestamp":"2021-01-12T01:23:57Z","managedFields":[{"apiVersion":"v1","fieldsType":"FieldsV1","fieldsV1":{"f:data":{".":{},"f:password":{},"f:username":{}},"f:metadata":{"f:annotations":{".":{},"f:kubectl.kubernetes.io/last-applied-configuration":{}}},"f:type":{}},"manager":"kubectl","operation":"Update","time":"2021-01-12T01:23:57Z"}],"name":"sdc-repo-creds","namespace":"vxflexos","resourceVersion":"4247","selfLink":"/api/v1/namespaces/vxflexos/secrets/sdc-repo-creds","uid":"589454a1-f598-49a3-8c7b-2dff4c5fc5dc"},"type":"Opaque"} - creationTimestamp: "2021-01-12T01:23:57Z" - managedFields: - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:data: - .: {} - f:password: {} - f:username: {} - f:metadata: - f:annotations: - .: {} - f:kubectl.kubernetes.io/last-applied-configuration: {} - f:type: {} - manager: kubectl - operation: Update - time: "2021-01-30T21:51:39Z" - name: sdc-repo-creds - namespace: vxflexos - resourceVersion: "5497943" - selfLink: /api/v1/namespaces/vxflexos/secrets/sdc-repo-creds - uid: 589454a1-f598-49a3-8c7b-2dff4c5fc5dc - type: Opaque -- apiVersion: v1 - data: - release: SDRzSUFBQUFBQUFDLyt5OWFaT2lTdFk0L2xVTTUvL2llU0pxQVN6N3RrYjBpOEpDeEZhcVJGbW5iblJBUWltYUxBTzQ0TVQ5N3YvSVpCRVZYS3FxZSs0OHYrNklHOWVTNU9USmMwNmVQZE4vMTEzZHNlcnQrbXJ6QnEyTkY5WnY2cmI3NXRYYi82Ni8yVUVZL1RBdEgzcXhaZGJiZFlxZ3lGdUN2S1crVHNnLzJpVFJibnk1b3hva1NmelJvQnEzeE5jMlFkUnY2bEIvejF1bUJhMElqOGQvaENDdy9jajIzSHE3enJsaHBFTllBNTdqbzBIMW0zb1k2ZEV5ckxmcitUeC8zZFRCVEE4aWhMaGpSYnFwUnpyNm5DNFBoUFp0WVltaHR3eUFGZGJiLzZ6UG9zZ1AyL2YzVXp1YUxZMDc0RG4zcGdYaC9kNGJmOTdVVjFZUUp2aVFkNDA3NGdoTGFkT0YxcWIyUEs1MXhsenRmenFlRyttMmF3VzFjZVFGK3RTcWNXNWtCVzg2c1A2M1pnYjJ5Z3BxMzVlR0ZiaFdaSVd2cnUxRzFqVFFFYkM3Mm1SbWh6VzhuSnJ0QXJnMHJiQm1yYXdnam1hMk82MEYxcitXZG1DWnRjaXIrWUczc2hGaXRaV3Q0Nm4xOE5WZFd4RFc5TENtMTNab3BYaDBvQjZHZDY5dS9hYStzT0sxRjVpWURDQzBNVjN4R0xSZVI3ZlRGYURuT1NHZkxBaVpZYWYrMTU4M2RkMjNwWndxSzZxT3Z2R2xBenI5ZFZPSEhsalUyKzRTd3B0NlpEaysxQ05yRDJqKzVmMlBtUVY5S3dqdkloOGlFbU11MXV0LzNaU01CWjRiQlI2RVZuQVg2MDVodUtyUXZ1UklNYURneXBoN1UzUE9mTmNwdU5TZXZLbElTYkhwd0xrbWR1Y3ExU0lOZC9UZGtDVkNsWVdaeVRKZk92YmoxSEM2a1RieHBsWWpuQTVnSHhxc05BT1V1SnlnNzhkMDYyMU16ZzJxU1FDbkZScXNGT2Z2S1B4YWxYbjRiTk4vV1BIalVuU2tVSk83VzIzY2ZGWmxFb0lHUFZNcGNmcW1FTjhIWXlMcU9KRnZPS012SE1PSHBzSVRtdElmRzlRR2RwenVXcGMwQ0Z6ZU42aUhMMXl2YjZ2eWNLa3FFcUd6clZoWC9Kbkp3cFZoTjRQbjNuQ3B5MTlYYUkwZlhvZmJKdzFXMmo1UHZTblhJYWFJamtLanZ6SVZldnRzMHdibjhDdWowVi9vY3ZOd2Zsc1pvWGNlcDhDUnRrWkRpbFZLU3QvWlFGWGhJWWo3SnNLSjY5Q1VwdlJ0c1BXbWN0eDNOV1ZrRHpxUHRrbDFDWldhNHM4R0M3ZG1od3U1VG4raHlSdG9zbUl5UnFFWHFpSkF6bDVQT1llUE5ibExhT01FN21CTXp3QUxlOEJwa2FBMy9NSjFRNXVEeEhlRUU5ZnJRMEMxU09Ed01KMFhtbzYwTkh2REhHL1RrV0xWVGQ0cnpOOVFGV0d1SjUvbndKRm1wYmk0OU14a2VTK2RMK0xZN2xvWHpkaG9TT3RrUHU0RWZab3JqWlcyNkYzRUoxMVdwd09vell5ZUJFSGNYQnVVRUJuVXcxS1RtelBWMlVDdFE3ZmVTbkRXS0lsSTZMTHhRZU9ZcG9CTlBpc2ovdzhycHFIUjR5SFhJMXVuZUhKTWg3N1pjYU0vT0ZaYTd2QW9rUk03NTNXc0tmektWUHB6VFVud0JDemVsMXVUUmZUWFZrWlBpalNsbkEvbjFxUTIrbkFuRHdLU2IwSWJZM3hKd0FvNXIzWnIveVI4WlQ1VVpSaWRrK2tLT2ZwRnVMVzJKdHNsekFyYVhpZS8vYTNKdG1KVk51SEFDUjlBM1BTTitBUmVEV0VGbks2TGNWSDQ3WHY0VzBrUGx5ZU1SbittVWVKUzM4NjJBd2V1VHV4enlxQTJwQ0ZMTTdNbnpGUnFGbWx5azhCOHczSU1IYTdUbEZWNVEycktjQW5ZMXNLUVc4dUJJeTFWdVI5cThnanI2Z1MyQm9IVFQvZXNDVk8raHJyQ0oydHd6WVNHK0xPMDF0aHVKb3ZyQXU5emZmYXhmWGhLamxLNFRvNzdoL21wTm5qZmNGcUw5KzdUWE5ZK1NiNU1weFdhTW9uMlBxSEt2R2ZJV0pldlFFT1ltYjFFbHg3eDdMeU16d0cxV09heU83N0V0dkZiWGNiNjJ6Y2NiWFc5UG5pWDdVSTI0YWZiaTMxYm0rbldYUCtISVBWanJ0b2JLYzZhM0Z3a01qK2NxbzRVR2cwdzFaeFd6UFg0cGFyUVc1MXRFV2JxVjExSm02MG04N0dtQ09VeWNJamJDWGswbk80YVVMT1YyV20rU3pZQjFaeUJIdThaRFdGdXNOMHRvS1RMY0RxZzF5L0JqMm9TdVY0OGx0ODl2K2ZkY2xQQnl4MGVvK3YybnB2NURqdVorYWc5UG1Gejhqa0c3N00vTzM0VjlaUzlQc09QMHpiOEUvUXU0Z2UwZWdJMGNLelIzRjVtRHlRa2MxR0JKd3ROMW56RGdZUXV0NWFYeUZFRkw4cjlmWGc2WGhvNWNLbXhjS210ZmJRZVdWUDZXNFRIczAzSHF0T2RENXd1YWJLekZYRGdGMVVSVUV5VjgyN1FVRGNkaDRRbTIwVnp6WERzd3pabmhpeCs0WHJSSDF5bk9VWTRvUmhtc01EZkk3MFhxVlJyYWZiNks0UGRRREQxdDZiYy81Y204d1RZZWltdFUxeTdQQVN1NXF1VVJLc1V2ekxsSnBIU1pvbGl3cXBZRWVuSGdjeXZERmVJRFdvVGFncVh5QmpHVGRvQ3RqdXZqTzNTT0JUcldCZmhLSTAxV2NVeFlSWUhqNmdOQ1JvQ0JCQTlGNysvRDUvQ2ZuN3lwc0RwejlTNE9UTVZ3VE1hZmQ5eXVsZ2VjcGxhZTlGZ1RPU3h1TUJLYTROdE5iSDlmanppM1F6MDZPM244TWQ3QjkzNHRTWVBNYzBBaFdpQjlqMzNKZVZkaEdXVzJjeVEvVXA1anZmbmUzSUh3RUYwZ0hNVjdTKzBKcVJIRk1rSGpyVGdPbjBleVRyWG8yT2pvZmthSzA1TmRnWTV0a2thY2g4Q20xNXBOcjBIazJNaDBxVXpBK21obUNhTW1NNzIzcEt6SDVlUzB3MU5XZG9PbkNJLyswOUdRMXFhbWIrQWRJSkNoMmovSmZtQXgrbGhmaUdSeDJNYXZGdTJlenVhSjdDN2p1YkFwYTRJelF5SGRBOGduMnVDK1k1c3hueHZidVFEMFlZcitDTlpjM1M1Nlp1OXhRNW1KOU5wWFZKWCtsQmpCQklnL1VIeWM1MlZGcWE4OFEzSDdHdFVjNFhvTC9Ta1dKZWJycURNb05xUXNEenY0ZExCZGkxVTVUNDB1anppOXh6WjQ4TXhDZDRrdHV1Q01sc2ozWW56VSs3d0FMY2NacUFwaXkrcHJIOC9nb1hodGRhYTBwL2grV3k2YjVUTmlXMUd3dS9uaXVlRDhaVjhLc0ptVzJ1RDJxeTBCaHdrK0VhazZraXg0VWdFaXFsMCtldEtaNUVkUy9abS91NWpoZ3U5MVpRK3BjczhITW44SE1zZzg0NzluY0JDc1krdlZjbzR0OFJ4akxUajB5NzJPaTFYVmlPTXVKNndrdVZ1WkhTdWdiK2VHdGcrb2IzMStMQTNYKzh3bDNMWkdreTJGU1o4eC9Lejg4TVRmaFNmZlNuUStROHJKdEJ6VFpYSnNCajM3dEhTYmhMSXBvSlVkNE9ZL3NxeFRkOUF2cHc3bXZMMkVhN0ZXQk4vaitHeFhkOXdwQmpwaFd2amxPUS9JdGVsV1Z4K3NJZDlRKzY2bWtTVEJyc1pHZFRHVnh1TEx4elREVTJxMndUcmZWblhaUkw1YkpmcjF4NjkwbGh5WmFTNlZaWGhVbE80RE02K0huV3pzYzBFcC9IaFdoNm5xdEozOTNYa0dibmF3ZHpUN1FPbkcydU40ZlN0UXk5MXVibEFmaUwzeE96TGNVS2Z6UGZrOFo3cWxlbVpBbzJwMWx5bkpHSWdDejRvMTEzWWR4SFpMcUUvZWROQlE1c0J1eFdiOHNOS2JmRCtLZGltd3NjRHVlOGJGOEdWdHNBbWJWMStPSWdWOS9SVlpsK3l2QTQ4eFBscWZqUDhaRHd1d0x1RTd3Nk1VTndGa00remUrOWkzZy9Hai9aZ1RNNEJ0WWhVV1ZoZ203QWxGdCtaTGlOMCsxMlJIUHJjTWMwaXJzTkZBMFZ0OFdPdUNpYlM0d3RONGFKVWx5R2Z0MlgyK3FSMitBN1NTL015M0hJYTB3SWpqQVdKbjVUWnFjUzJpRis0VG90U0ZXNEZYR2s1b1BpdFBtNGwrUlFrVndkN01ZdDVKbktMTkZ5aHpDNUZPeCtQWDZsVUJNME91ZEJMN0EveXhiQjhkK21aeVU2UDhhalNLYjMreW5RZzlqV1A3QnFiOERYeFh3cStRdWZSbmlqUzF1elFhK0MwS0YwV0lOY1RQRzFNUDRuRTRoRG1uaDdNWUE1c3JxZ0hFMzJoREplSDd4YjFhZW9Mb1gxZnVvYzVtNGpRSGh3Z25pTlpid3hiL2M0czU5djNhamx4TkJuRmwzMDRrTTJaeVVyYkYwbFlBYllWR3BUWmZGR0UySlJGdTJyT2pJOERHZk1xQXIwKzFCejQ4S0tjMzNQcW1LYXcvUmxqL3hUNVE0NnVUS2NtKzNXcTlmcStpV21XMW5qa1VTNHptUisvcjMvVFhJQ0luNDB5V0c4S2NUSHVwaUw1V2dmdG02WnJzdFBXY1BKWStTN3k2VFdraStVa0xrQThPMHNyRmthYTNDTE5KMkl6bk5QYmQrNXJGR2ZQVEhsRERHUnRhL2JnV3B1UTJIZmI2U1FCYWs2WE5Ib0NDMGloQ1ZnUjJZcjhQYTdUaDFadlJIQklUMVhQQTYyZUVLdElOeVZ4UTFUdy9RL1dTRVBEVlUvYWxwRW9NT0pDbW9qckV2M2ZTL2JDcy8yNE1wMXVQR2owU2NQR3VnUGJsWUdMOW4vNC9lQ2RsTitKN1NqWHJibisyaG9VSDJqS0tOSllHSmZwTUNQUlF5TlZFYndTUEw1WDZLV2pYT1dSYjVMR2djQ1JOcVlNWXlUSDNJSWtRV09VNllvRmtuK2RGYWNqa3U4Znd1Ulk3UGZOZExtSjdFcnFXenpZUmQ4dHNVdG9EeHk4ZSt3UHpJQmpsdXRhSkhjeTB0bmtUR09GV0ZQNDdjdDQ1T1Y4aXhjL1c2Ny8xdllxcGZISWxEZWh5TFpDWGVhYmFCNmpaODRzWmZnM2xNMCtCQlQ4OG1sMnpaRzJ1dUpmNnhNaE9mSXQ1eGZLNHB3Z0srVVB5WlVzUUdDVGFXd0dWOGFjSklBcndjTjNOTGxKbmZSSmR2NVptVCtTMkxYSnNZK2N5RmtUOC96djRxc1haSEVCSEVoOWdzeklGcU9GbWpLZFRzaGgwWlpmcnNzY0lkWVZyZFNYdm1vdm9qbGxjcGJrWWNNcGwreVp5SFJuanNGS0QwWmp1QVRVMU9hNjEvbGFaZmEvV3U2Nk1YQzZUWnhIY1RSZjJ4S3J3dnc0ajZFNTBCMVE2ZlA0YW4zM0pCTHdUUkNiak1pMCtoTTQraVNaM0pjNXVkdkM4MHpFRmlPTVR0bHgraWkvZVE2bXdFZ2RTUVFuOGViY0t2OXFPT2U2d292QWZQMlM4aHZuS1l5R1JIQlAzSnFQaVhnNDUwN1JUMVVJZmpLV1dyTE1hRU5CbXIySVpLczdXUWlqQ1FHZnBjZVRhejIvSjFobUtya3pGdkdiWTFvVER1dU4wWFFrMFgyT3hUNTNRMVVXMDNGWEVNWHVFTWU3Z0czNWhqczZ5REVndjE3b3FZb0FUYXJiUE5hcDViU1Y0SXlkTUpJNklmazNTZUs3NHJSNlBZTGJYeGtUcnp6WDJPT2gydWhEazRtZ0pmV2hOcThZZDJFT0hNVUZZRjJlaitRNmFlNnpKMjAxcFkvNWRPMWFSYVk3RVVuelJWeWMyQStpRmhzVVVacC94WG5KcEpZODBCU1kxMC9LODdBWDVDc2JmYWoxaHBVMDB5a0o2YkcxcXZCYmsyckYydU1KKzlPZHZTRi9VU0UxVlZoc3VqTFRtaWdFZkJZSjZVbVMrdDNUZmsrLzFPYWRoVS95bWtnSzNZbllwQ2VpZUhLdkh2dThCM3VneHpkQlE0Qkd1Z2M1TnZHSlZVZmMrY1h5YU04MmdBYnVjNHB5R1JwZFN4L3BlU1QyaDRMRVA0OGtlakptV3VLSU1CbEIzSFFsUmp5amU0N2kyYTdoZEcwanlSMzVhWTFsWnJDYmxSblRhUTBUcm95a05qTXoyUFUwcWU4T3A3cjhNQjBSWUc5dFdRNjBXQVBXcUt4MlhoV25uZE5mM2M2RWtZWmppUmVsUldzb2lXUlhKSnEwMk9XNUNUbjZqUFY2cXFKbGViT2hydkNFbE5XeVk5bzNIRDQwc1U5UXJNL3Y1VDVnQWxQQ2ZRL0hkZkJSU2Z6K044cHBsdGp3aS96M1UrL3QraUcvVlBob0orSUZHaG9LVFZpaTRPL1h3NHB4Z2ZhZ09SdG9zYTF0N284YzZHQkFTVWczRThmK2I2NFBueStxN1dIWS9uRXRZNWZYenZoL0tyOUxnZ1lYcVE0OHpQMTdSb1BQK0hZa3kyQXZsOXpDdWVRamZZaHpKOTVVWUpHT3dqMGR6WVBlMW04VmJlZWhuZlR2bitrNkwrbG1XWm56cnEwcHdtdzQ4Z05kYmk1Uzc0M0pQTy9qQ210T0NjcGlrVmM5VzRHMXZ3V3NOTTg0bEhYQmlUdU4rNFhyWVcvcGUva0tYTSswZm4zTC9OS2dCUGhmM0NxZjRIK3VSZjZUV3A5UHREWi92SjNwYWh6NXVjRjJmZU9udFNHZGFvK1hxQk90YWVkbzhkTmI5aituTmZoRWU5eDdXdUxrTG1HeTNibk9vbEJJK0NDZW40VmIxalluL1pSMnlFOW9ILzVwcmMyYXpKUEFnWVExYnE0QUt5MEJOZk0xZDFSRnIwVC9wYTIreUREbzhnWnFsTFE0MC9hYXpKRzBhMENyaDlzSXQyYXZQOU9yOXc4SnFMd1YvV0l6L2Q1MjVRL3VsVUxyL0gvWjhhUjl0Mkt2Qlc2L0RVL3FJS2RBbDV2dXI3ZHJQS2s2UGxRYlFtN2JUdG4vUzhOZTNBNlQwdjVhdXcrY1ZxamxxUVk2ZDVpTW5vVHNVeXlpNXlQdk9qd0srL09TOXRDT1RVU0RuYlBHcUxJVUdWUnpvaW1qNzRjK2s2clFheEMzcU9ISWo1Q1RoMlJYeGVtVVM5cmhrRTNadFdHbWRLaFlVOXJHaU1QZ2dqUFlPMjQvTTJRa3Q3TWhiay9yN2JYV3JjSFRaZjRhQ3JzQnUwRjJORzkvM0Y5Zkd1cXdYVnVUTi90cC9Tdm1RU0ZHMGJFdGJRMjdHQmFhVzFnQ2tsNFpMSnhiazhKZVcyZytjSGxDb2lDaE03TVZhQWpQaUo5NUtvWnRiVTJtQ2MyZXVRSk9tRHZUaFpZZDNNNmt5czFGTVl3MzVOWlNWNFFWS09yTTh1ZEorTUpBWnIvOURPTXlHb3VqMGprUmJmZFRIM1FPNTltbUhSVTl2NjQxYThvOWZqaEV5MXE1dmgrbkM2VllWNFRtQ004cFBaaGxvUm91RDhCUWswMklkQTB1K1IybGR1aTVxdEF6MVlHaHJnaitZWGljcjAwV0ZsaW5RMTRUeVJZdE1HUi9rdnU2ZStuOTBHQmJEYkV3dDZEd2MxWGVKRHAxWG83SGRhV0hxOHNtR1IwdmFSdkoyK2ZTRXR6bDdTSzk2SS9CbUNZTUVzNE1lVjBLRSt2S2NST1g2QTdhRnpmRGtwTE0rWEpaSkkwVzB0dGswV0lFcWZVOEVza1RLVXFKQlU0cnFtcFYxUndJRFZZNGs0NDl0SjNxcG5xczVtdnlacEdsZ0VDRGhtcmN4SG9FNjVXTDBvejBlQ3hwdE1SSWJ4T3hKVTJnOENZd2NIdzZEY3NscFZ4cTQ2dDJLekJsck0rSVFZTU9UZG4wRFhkWVRCVXROWm1jRDNBY3VGNnFWQ3NhVUlJUHFPaW8zSDVWYTFYU3FodHF5aWdDYktzOEhWK2VJZ3QxbVZ2cERjbkcvaytuaFgyOFUrbXlyQXc0VUhDYjFzVnRYQVlMN1FHVjQ3a0M3SWJVS0xoRWRqWlBpTVJOYU1oREpLT2gwV25PRFlvNGxTNnRTQ2xWcE92eTFrVy9WSi91MHpNdFcwNlBVMnFtMHZmTkhuekNSM3VVV1ZsNmJjL1hmN1pwbktiL0xOMzF1VHIwK3ZhV3ZmUS9tNWQzcjJrbnlNclRKYm91R1NQMnBORG9GdXk5dkdtb0NqeVFTelFuR2FtSlAyZWdmWWpMb0VvaE5lcWkrSU0ycjJ0WitIdVZlVTI1NlZ0UDNtb1FmMmdmWWRvb2paSVdyUElTQkQ4aGhOUGxKemJ6YzgvQ1lnU3hMd21uVzhiczBoYWhjbmdqY1FIbGtTUjBGWUo4a2NTbXFCQkMvMVE1Rk1HdjFIYzl5ZFhsNW5iUUtNaU5JMFZxM0VReFlZaGI5c2V0aGE3d0FZaEwybGJqNFZSaVdzeGs2eUY3SCsyWHJabjRlVXhzK0tlcnl6NlNTRWpqOTlyV0xQVS9wcVNtNkVoTzFiZ0xqL2ZFbWx4bUV6SjVqNkNWdElaRDRKUWZjVG16MXRGSTRpY1MwUm9Mai85TkpXMTZCaHA4dzJqMEY5ZVd0Qy9kK3hmbzVCblgxUjRFSkxjZCtrV002YkVnOFNMSGRFZmpNZTNtTFFiTVRKUzY5QVRuTG5yMFNwZWJ4SUVmR21zS1R3aFVsOUFVYzJhOXF5ejdFOHJXUkhjNFlWcUtRdmFWQ2RuaUpYRWpvdjAvSVlTM2tjZy9uVzhON0YvVTFwSG9ubFlTZDQzcHJkbnIrNFlEY0F1ekttL3dzWFlSbWk4Y1M1SkdUL0R4a1pJT2l1dDVDQnJEQXp1WDJuVm92a3dVS1RSWk9ESW9nVTdIZnJnVStqZnl2eks4RjVxQ2o4VnVQeEVuN0VjRHB3bE5Wa3FPOXlhdG5kbWNURGJuS2Q4UE9LMjFpdHZoRTMrS1cvUjlMUzBUNm5KcnFjcHIrMlRaR2ZuU01ibEdQdVRGTFozSGNjQ3F2RjBrcDBsc05PaVpSaVhIdEpDdEdqbHdnZVExYVo5dHpvek9TZnV4MEJUMUVwcVhqaXZ5Y3ljSCtHaXJvOHZnSWw2ZWVXK3ZuVldqSU01bGY5SXhIeHpmN2NHOXRyVlZObjNRRUdMMUhVYzFUcmVwWHQvNk9oaVRPN2xSZG10SzhzT0pITDZNZjVJZitIbnQySG5ML3dYKzVrQVMrMTJGYUw0SUtPWmVkUGxUTFlrbmZZQXMvai90N3h3ZVRhZUdvOHF4amk1TG9aYkplWEtrT2NtcGlDVit6blh0NGdXNXczbnFpOXZHZ1NPNXVzSVQyYkhPVDdZVkI2M28yUkZXR29KeGNmK1FLOE9CaE5IZ2lzYytFN3RlblYvY2F1d3d5bk9uUHkyMnZqNm1GZGxXUTFQNlNWemI1WmxSZkpVT1dSc05Fd0lINzdtSnhnNC9HdGVXSDhQcHBkZGNzZExtZkM0YTU1eVA4ZGpuQnpjaGVWRWg2Yjd3ZURwMkdwYkVaZVY1N0xLY0lmTHhoVGVFMTVrODJ2cFlsOUpWdVpyeXRSRE5ydlNPdFJUZ1BLTzQ5eGZvb2V0MHl6Nk92TUFRWitNRzNXbjVCb3A3TzN0K2ZxU3haRi9zbk9NWitTS2NhNlhNZFFEMmxVLzZVZUpDR2sxd0R1b0MrNUhVeVhidG9wUXdIMVA0R29Kd0lzTVlPSzBZdDFDekxRazQ2M055TVJZaytrVWhwWWtnY2Ird2ZaaGZxREVaYXdxOSt1VDRPVjBQVFlza3IweklQdk1MY3dSWWYrTXJUdUtQeHNoWHhqeXNSRjFpRzh2SDdlQVlEWXgva3VNWVhaQWpwMllyMEJoRlo5NkxEdmllOTdCY1pNK3ozcHVUY0ZHTXBVYmE0eVY1L2FTdmJlQ012cC9Uby9oS0ZhWnduTWNkZnVFNmo5OHIxN2IrYmJPdnN0a0YyY00xczNNdDk2ZjFVR296VHVlMzBycGFLbDlKSFg2UTlMazluenQrY2Y1STBLT2Q1YjlQNW04WWtwbU16aDYzK1pkQndTWFg0Y0o5SHBFTFE0U2pjOGRpZnR1VTN6Ymx0MDA1WTFQR2p5ZnJwMmh0QTNsMFNWd1ltL0lHMSs2NHg3TzRYcE03T2hxYkh4L1plbWR6U0dsZTVQZzZrYlQvQnRPanhCNmR5ZGVsZFh2K0xZKzEzY1hxT0I3RFZ6Sjg0UmpCQjA3U3EyV0pyWGlVOW51Zk9ab2I0YU1OQjdURS9Vb3BiWTduK3puNTNMTGpFNU5HL3ludHQ2NDZmcEwySndzUTl4TXF3NSs1bnZmbmd0L0hJOXdEVVpveitaaGNsZWFCUzQrdjJCZm1lUy9FcDFTSGxkR202b29kU3BnUGxQeTYxQS9RUklxUUxsT3BicWpKOExQMlZMa2V1NVEyaWpBZk5MQi92UUl1a3IzaDh0alBwZ2xMb2RGY1RKcVhYd0czNHNvR3RyVWRLSGxkOGYwNFVTZmdGT1hHZ2FGMmltOFZ4OE91Mlp1QWdxc3FPT1cwZ1M5Z2tmWk5WK0IyL3RoZDVpT05TdkRMNnIyWFhTK0lZVjk3VGZ4eERKWmZaL1l1K1ZmNGVFQ1ZYWjEyald5ZDd2UDZtTDR0NnhzcngyM3ZPcmZwdDRyamRhR3Ird0QvUnMyWjQzV25MNDR1TzJvbnA1cC9rbC9HekNRL1VGQjl3V3lodXlPNWFEbzV2YkwyTTR2OGhXTnh4YVpvUFhFSFNOS3h4NitNa2I4N0VBeDNFYUhBSWdvSzhBUWxraC9qd2NTNDNieUY3enB2V0RqR2x6MFh6eTM2b3R1N2N0ZVNZeE40NmZzSHR4Ymt4MzZlTU9IaUpsYS9hSXRacklaTnJ5bzNsMFpEeUcrc1RFWFExcEg3TVc1dTlVNXJkNFJuVEs3VG14N3RaNXNPTkZsYWQ5d0VMMHdIUjRxZmJmcm9sZy9zeXJDNFBRZTdNOGhNNENOdDBvNGhGN1ZOOUhKek5sV3B6UXcwaHRNY0ZtN2h4YmlkbzBHYy9VcEgxa2FNdDBUYUFwQ2RvaGFVMlZxVm0xbkpLVWwvdVBRTTRHTVVBazY3NE51RE03NHE5TXFnMXBmeWIrK1dscDNzb0RXMHdqTzhIT0V4YWFndHVMeVlidmNIelIxK3oxengvRlp1Z2x4cHlEeDN6Wm11Q0t6UjZMTzYwdDhtS1NRZWJjZzRXN3NtQzZMUlFEeHB1WHB5WTIyVTNabzdTWTRYZEswZVB0S0Y2Vks0YlJ1SHJrZXRmTGhsZG9QZFdkdzIyN2l3VEx6ZkhyTzFGSjdRWkdLYXRQczhYSFF6d2VHdHU0UHhlYmxNWmYvN2VZWHdmMHNaNEt2RURhZTVNdG4wMnRrOGp1dDdtcnlKQmk3dkRScTdzMlVESmQyNFk2U0JJNmdwajlrVjB2dm5ET01tdGdJRHArUmFZbVVZYWF6a3FJb1VtaDB5R2IvTmVyenkya2UrdGxHeTRaZTZ3alA1ZFhxOTlSUW8wc3BrMHpOTCs5YzRYbUlkanBUQnBkZktGRFp0dWxZNmg4WDFNdm9jQ3VzKzN3ZHVIeUpGcHN0a2RvVXVYa2ZTdjJSbUZoTnR1cG1SOTlNbloxTUEyNDBSLzB3MnVlWVgrVjRaclFEYldobFA3K3BGMjhsU0R5dTB4UGVyV29lVWpFRTQvMVk4NzFjOCtQZjhWanBjV21HOS9lKzZEcUczRnVUbjRSSkc5b3RuUGdKZ2hXRzlYWC9UWVdqVmIrcTczOTdEUDdMb21kYllnaGFJdkNEL29UOFBXc252R1liSlYzOFYzK3A0U3plcXQ2bWJ1bW05NlVzWWRjTko3Q04xWjIyaWgvcE4zWEoxQTFyUURxT1ZCNWVPaGR6Q2NPWkZCUnlTSWRrRE1FMStRckl3d0RFZDdxWGUvbWVkYkZGMzVKZXZkK1FkU2RadmluOVMrS2NPUGRmR21QODdoV25XMnhqR1RYM21oUkZ2UldzdldOVGJVYkJNdjNyaG5wSS8vN3FwKzU3cGVHN1p5N2FqVDYxODhZRVZScXdlV1dzOXJyZnpuNTBrcWNZZGNVZmNJYnhDRTN5M0F0ZUNRenNJRW53Q3kvZGVkRXo2K2czK1N3eGc0WThRTWFCZS95di82VWI4ODQ3b1RUdDhTaWlMVEVpd1JQUTQvcW5QQUJrVDIzbnhvQTNpNU5jZEVRbDM0RjQ4RDAwWCtnaTlPSXdzaDArQUpIOWdpRGYxaEVYb3lVdGd2ZG1iZXJ1KytCcGlNR0JtT1hvbUUyODIzUC9oeCtRaWpWdE1xQU9MaG05OXNJZlRzVFNhanFYaFZGeElUeE9DNUFXeHlRamlhQ3FMTFlsamhCZU9hYjVJSGZwcHpIU2ZCVUtjU3N5c3l6R1FINGxtVjR4cGNSTFRIV0ZNU3lJaE1ZT3BuMTI0bTdpWjhhT2RYMUJuMCttUG1FamI5RVJXV1dVb3hKZFN5YVAwQjR2d3VQeGtRdkhrMXNCR0Zva3V4QW01UmpnNmNmRHNxcHZCZkxnY2RoN1d3eWQ2M0psaTdUTG5PdjNEaXBPTjRHaEl3eW5EVkdQZ0tsWjZvZDRhWisrMUR1MFlEVzRxT3RKaXpIWUpqdUZYd0pHUVJsa1p6cVk1d0tkRjZaVkpTVEhHb2NzdjFDM09icWRhb2JYVjJPR1hZZnhBRHViTWNuaHdHY3JpYTNoTDNwRi8zQ1lhNDlkd0R1ZkV6SUtQdzJHcU1RMXU2bjNQcmc1TWRONXd5cFZlemMyaEZUcTRaaGtuOWNDeXMzWWdwa2xBU1F1TzFWYkFUc2MxZUo5anMzc1YwbXZ0OW11SHVLY3F1MU1nNFRpK2k4QlZHeHoyTndBRjNVSStiSlZlMlp6RGZIYlY3V0QrdUJ3KzV0eXZ1aDc2V0FyS3JsZEV6d3JTa0k3YjZ1UFVqMUR3VC82azU1V0crOUtiU01oaFlJVjlTWTNpNCtTbmMzaGZLOVFZa3Z3cXVROTc3bE5EKzJFOW1IUGZzeDFYZVdYdFpUdXdhazM0WjR4dzNhcERGMzV1U1VqV2QzQzE3b1ZyMlllRDFoSlhyYVhZUy9wQk9UdnFkeTNqVFdITTNKc201OVhOT2JDYnZoRzN0cm9Nb3AxL21GeDdtWnpySkhlMWhGMVBJSks5R012ZXFFVDI4dXRmUDc2dXdyVzA4MzJaZmZpZTN0V0JyNHg5dHVtTktYZWJTZDQrZkFDN0szcWpIQi9FanpIaXgzN0FsR3FucjM4TDdmVHdXenY5MWs2L3RkTnY3WFNnblZxL1JEc3hFOUo4bmpBdFdtQk9hcW5tYnkzMVcwdjkxbEsvdGRTK2xxS0l2NU9Xd3AzK3Y3WFVieTMxVzB2OVA2Mmwva3d5eVcvMnRONys5M0ZPbWZ5YzVESE9TU2JKOENqU3dRd25XaGRmdzdzcENPNXM3ejYwcDdkcGt2UWVoUFp0TnFxOXdnbGRwQ3h4Y3JQZXJwUEVIZlh3eDEzcjYxM3JhN3RKRUFSK0lVdkR0bGZrWGVQVzF0MzZUZDMzMWxhQXZoNmJvTjZ1bXhhRWxnUHVReE8wRzNmTk94S25pZjNBVzltaDdibm5VQ29NYksrb08rS093aW5mcVIxR2dYN21YZGN6cmRzMFBadS9ra0FoTVpUUTN1TDUvN1hVWXdSZzhUVUVvWTNmVFIraWhTV1V5TWdjbmNPNE1EQ2hJMVgvNjZhK1dCcld5Z3JRU3VydCtnckY5cnZzZmtiZFA3N2VmWG00S2Z6UnJOL1VQZDl5dzVuOUZ1VTUrWW9zL082MUwvV2ZuRXMzQXMvZFdvZjU5T1lEcFZObTg2MUpVaFJGRW0vVldmV2JmRkxEZG4wOW10WGI5WHZEZHU4dEI2RFpITjIxMzZ3UTRYcDdlL3ZxL3FNMjlwWUJzTnExb3RUZEZ5NjB6bmNRTnZPdnJ1N2JVa0x1ZG0xRnZyb0wyelhidGJFVnJHeGdQUUtBOXRtcjYxaVJqdnlCOXF0YnF5Rnl0R3NaOE5zZHlPeGg2T3VnTU9MVnZReTMvS3JxejhBS0Fmc2dQcVU5T2Z1NHBVUHVrSmpiM24wQjFZSlVuVVowOHhhaWIzWFg5YUtraElaSDFXcXY5WmtGbmJ0d2RoOVlJY2IwMXNmeTlscHYxeGFXNWIrNnhVMi90NHE3Vkp2Y0FjOTVkZmVrdFYxTGhQWFZ4WVUvQ1FzZXMvRjFOMWtTa3ZsWDE5Y0QzYkVpSzBpd1NkZnBleDVzMXhLaFJsOG5oYngyRGE4aEVXSGFkazNiblE0OTAyclhaTjJPdWw3UXRZTXc2bmh1dUhTUWtPQjVMWFBpK1I3MHByYUZwcml0T1hvRVpnUGRzQ0N6OFFNckRITlMzTllXVmx5OXZ2dkQ3WlNRTDNGbVUxcmVucURPOWNMd1V3VGgzVUtBaHUxaFoxaVJmb2YwYU9CYWtZWHhzY1BidFBaNmk4ZTBhNjlZdWIzVy85TkM5SDliYW83VWJTSVVIYmdNSXlzUVBHanRpMUZnNk9CT1gwWXpMN0MzV0JDS0VuV3BGZzZXME1xSW9QczJHM2hMUDJ6WC92bGFCNTRYbUxaYmhQeGEvek5aYlNaZ3lVaG82YUVWNWc5WFZtQWtENlpXOUZxL3FiM1cxNGoweVVma2ZTV2ZFdGNxK2J6MFRUMzdEQUlMZi82ekRLc0tGS3lWNVVabEtPeW1LK0NRelhBNHM1OE11V1ppWkR1U2VTc1hmNFJDT3ZqQ0dYekU4REN5M014cFBVWG9zOHV0SXZvN2xuNklHTjd6MTJQM1U3QzREeU05V3BZaGMrbDArMXE2WXZLaUxyMlNNZStmTkZsbkVsYzR1ZGgvQnRIZmpSSUk3ZDFHZUE4ZW4waU5hdGFmWWpjSTdidHJsbXE3Yjk0bk1MeEtxRDN6WFVybEh6WERndDY2OXVZRnRVTE1kTVhNb1FVQ0s3cGdaZVVjUytlOHU0SjFlYXo5YVp2b0kwaDRibFJoU1lwYTlQTE5sZW5iVDhmMHMvZmFSMURKdDl4TkZUMnJOK1VIY05aOTI5cEVGdllqd3pPN2RobEducE45WjFwdnRtdGozL2tNbzB1UktyT2hmNzRqY3YxcERsNFMwRmE3ZGgvd05LcDhpUSt3OFZKc1B1aGZmSW83ZWJtajlXbCs1Yy93cFQ3Z1oveGE2LzQzY3JBK2IrRVdXQVoyRk4vbFdjZ3lWSGpkeVRaQ1lLOXNhRTB0czlwbVk0QlkyVzZRemcyalFMZkxFVitHMTJpcjgwRnBHbzcvak5nMFhCcHpDMFI1akY2YTJFT3JPNWxsck1qckJSNjBCT3NOd3k1UnhHZUFaaHc5c2RUUE1BaWZUTnpFTHJ5WHJGbWE5Sk1JbW9IN21hUjgwaTNIYzhkV3RFOUIzZmZEQzRsVnNkalF0MENTcUVxUE42UnBvRjJPS1VzTW9RWDZKV0F6ckxNWGk1aWdmM0FmU0JXWVdpMUhCZit4eDhiUzhiV2E2WVpaYWk1bEVjNmZ5WFkwNnlYbkdyS1JoV01PV2FJdWVWQWM4TUk5dFd1NGpITDRGTzBaM1hhdElHeWpMM2RydVUySm5SU1NkdCtqQlNTNnJKUG9zbmJ4V2EyMlU0WDc2S1FVZ3RCYnYyUkRtQkRvRUV0UjJWaWcrN3BoUXp1eXJmQmdrbHBOTjAyc0s4ZnErTWZqMDVEamN6MmEvTU0xd0hidHd2cmQwWnN2U3dnekJqekN0UjZIeFNIQWN4d2RDZTgvYTYvMVBZaDM0ZXkxWHR2RFJBK21oK2pmMWw3cnQ3ZDZFT2p4YlZJTy9YWmYxR0p2OXZRKytkOXJ2ZmltNWE2T0lDVmM2b3k1SHd6LzlQTE04Wk5EVXVFa2FMdTJkTzFOKy83K2ZxVUg5OUEyN2hkTEF6bUg5ejVjVG0wM3pCRzRzeHlBazZNNHJ3cEMrMGZvZ1VYNXRNb1BOUEh3K1ltcG1MUW8wMld2UGpHMHlGYTh1OHRwVjcvL0luRFM0NFQ1TVh3VytjbVBKMDZvaEhYbHVrMDdYSVNIYy8vakg3WEo4OU56R3dzQWNqdHEzaktxa1ZUcmxueWdUcUVwS2QwQm96eVBmNGhqcGh6RmJ1QTVSMEtPOTFwZ1JkK3RPRlBiaC84T1RXQmdtV0haT0p3OVg0WldnRjY0Q05XWHgvRllmaGFlL25Qbytub1lycjNBdkFqZE05SmZWaTYrQ0M3SGo1bU9LREFmRU5MSHdlQlovaUhJenorRzRtREMvWGg1ZnZyeDJPa3c0M0VsMEVSWDcwRk5YTjRoTWhwaGhSWklpLzYrSHMwT0lUdm92UmM5bXJWcjErMkU4cGtTWkV3TFdiTHczUlB1VjdWQWFOOG5jSjhTdU9VZ0E4L1hwNm5SZUszVHRta0hGa0IvNnJDS0RiNW52Z05Kei93OERFeHJkV3J1bzhlM0piNHRNZ2VuOEs4YW1zSEtlMEZLN09RNzIwa3Vzbk9yYjgxanNxQUh1UGZHTkFNckRMLzlmLy96K1BRa01PUHgveDZQdmIxTmVaTFBqNGlOR2ZydEU4eFp0VlZOVWFyWXBmZHAwOHdKKy9oZHBKa2YvUE1UODROL0hETFhhTkkzMjRKbWxSWTk3S2M0SG9GZlR3UURPWjkzaUluOGdlYS9RS0hzMGR1MGcxUHlWeHo3SWZVRVFudjNPUHRrdTNiVTJmZFZEOEdISnZnY056WGRFeVV0WEZmNmlkV1NoV1RpVTBYaUVvYnZwai9oc2IzV3l6elB3cXRQdzRvM0s3dTV5Z0VKek12emo5TTc3TVNMUDhtUkNrMXdHMWkrOXlGSENpUDRFOTJuQzVFc2M1OHVjU0xlYWFxODhEYXdjSi9CcWRkUk5IcGJOYlN3a3pNVGRBcFdPcVJDVEphbXRibzFUMnFzSmJUQ083TldqY1I1cTdzL0lrMkR0NnVOYjVrbXhSRTZBbmVnb2s0NlR6OVNpUEg5L2xzUmJ1RjZ3aTZKRjhUUFFTZkplTHNYYXVOM0lYT0o2M2d4WXFkOXkvZmhkNVduZVRHbXBYN2xsUWdlZVprSHM1Y3dibjhIbnA3dmFMdWVCVit4K2M0dnkzTEFiUWgwYU5uZU8rbDV2R1ZQejJwRjRCNjlrKzNrSzFkYXJvYk9UMW1sdnBJSnV6YTB5cWw2ckUzT0V6VzB2Vkl0ZFBsdXFvNGdFbk56TUhmeUpWLys3b2NxRWsrV0Q3M1lzZHozcEhvdmFFdStKdUY3RW5wZytkQUdldGl1a2U5S0E1K3BkZXhsZy9VM1hPZU9pNjhYcnVRcGZPMTc1cU1iMlkvSEx5Q00vN1cwQTh0OFdnYTJPeDJEbVdVdW9lMU91YW5yNVY4ekd3c3NjZFJhZlBVMndiOWt3dFRZSWVvZGRtUHUyMHZzYlJ5N1EraWY1MXVCanNEV09QZjQ2VjU3NWo3TVN1cmxHeURwSEkyL284bjMxVHZhVlFpZHd4aGlQL1BPbitiUzdyV1NWSGxab2p3N1JYSmRkSDF3OXVTaWdQclN1UGxrOEEwdDNiU0NXOHgyMjNPL0hhZXgzaDBYSTcwVkxOMHNQcjQ3akk4dmNFTFJLMVowTHVRc1RGUmluSGVOME5leDVQanN6YWR6NWMzU28yVmczVTZSdnZ5V05rSEgzOHBUaVppTm1HUzNhR1czUGo1UzhtM3hOVHcvZHJtMHpWdG91ZE5vOW8wazNpc0oyY2pJZGl4dkdYMGpLU0s4VXR5eWZ2VzNFRm11YjlZbWVpZ2ZhRzJpUUw5TjJqUnVNMTM3ZjBvd0Q3citMaGZNNHlOV255NllIK0R3ZjFDaFhKQ0srVFdzVFkvUGxiRDE3Rm03MzVyLzA3aHdYTEwrTDZnR0gzQ2xuSFcvdUdSOGxwOVhWSUtyL0xpUDFvUDNhckpaU1pZaS9yaWxLT28vV2pqOFhlcjlXYVhlVHlqSjVyREc2bmpDREN0VDhlMWErY0d5c3pMMVNBK1lNZi80TXU0OVR6cnNFek5nSnN3MTFkNHpvQWZjZUNJOUQ4UmhQc2tubDVJL29JWS90MzVablZJdFI5RnkvQ2grc29QMjN5TVZFdHFKTmJya2tLbGhSWHArMHJRejVwNVNPM2FRY1RnOGFGcklKeVRScEpCbUE3TEsxb1ZIWXZkK3ZlRUExZktqQjRjNEp3ZEh4K25nQzA1TDUzTyt1Z21aVGgxWnhiM3N0dWNlbmxtdDM5VHpLd2JJNUhnL3pnMFZ6L2ovOWY4SEFBRC8vM0EwUUw0dXl3QUE= - kind: Secret - metadata: - annotations: - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"v1","data":{"release":"SDRzSUFBQUFBQUFDLyt5OWFaT2lTdFk0L2xVTTUvL2llU0pxQVN6N3RrYjBpOEpDeEZhcVJGbW5iblJBUWltYUxBTzQ0TVQ5N3YvSVpCRVZYS3FxZSs0OHYrNklHOWVTNU9USmMwNmVQZE4vMTEzZHNlcnQrbXJ6QnEyTkY5WnY2cmI3NXRYYi82Ni8yVUVZL1RBdEgzcXhaZGJiZFlxZ3lGdUN2S1crVHNnLzJpVFJibnk1b3hva1NmelJvQnEzeE5jMlFkUnY2bEIvejF1bUJhMElqOGQvaENDdy9jajIzSHE3enJsaHBFTllBNTdqbzBIMW0zb1k2ZEV5ckxmcitUeC8zZFRCVEE4aWhMaGpSYnFwUnpyNm5DNFBoUFp0WVltaHR3eUFGZGJiLzZ6UG9zZ1AyL2YzVXp1YUxZMDc0RG4zcGdYaC9kNGJmOTdVVjFZUUp2aVFkNDA3NGdoTGFkT0YxcWIyUEs1MXhsenRmenFlRyttMmF3VzFjZVFGK3RTcWNXNWtCVzg2c1A2M1pnYjJ5Z3BxMzVlR0ZiaFdaSVd2cnUxRzFqVFFFYkM3Mm1SbWh6VzhuSnJ0QXJnMHJiQm1yYXdnam1hMk82MEYxcitXZG1DWnRjaXIrWUczc2hGaXRaV3Q0Nm4xOE5WZFd4RFc5TENtMTNab3BYaDBvQjZHZDY5dS9hYStzT0sxRjVpWURDQzBNVjN4R0xSZVI3ZlRGYURuT1NHZkxBaVpZYWYrMTU4M2RkMjNwWndxSzZxT3Z2R2xBenI5ZFZPSEhsalUyKzRTd3B0NlpEaysxQ05yRDJqKzVmMlBtUVY5S3dqdkloOGlFbU11MXV0LzNaU01CWjRiQlI2RVZuQVg2MDVodUtyUXZ1UklNYURneXBoN1UzUE9mTmNwdU5TZXZLbElTYkhwd0xrbWR1Y3ExU0lOZC9UZGtDVkNsWVdaeVRKZk92YmoxSEM2a1RieHBsWWpuQTVnSHhxc05BT1V1SnlnNzhkMDYyMU16ZzJxU1FDbkZScXNGT2Z2S1B4YWxYbjRiTk4vV1BIalVuU2tVSk83VzIzY2ZGWmxFb0lHUFZNcGNmcW1FTjhIWXlMcU9KRnZPS012SE1PSHBzSVRtdElmRzlRR2RwenVXcGMwQ0Z6ZU42aUhMMXl2YjZ2eWNLa3FFcUd6clZoWC9Kbkp3cFZoTjRQbjNuQ3B5MTlYYUkwZlhvZmJKdzFXMmo1UHZTblhJYWFJamtLanZ6SVZldnRzMHdibjhDdWowVi9vY3ZOd2Zsc1pvWGNlcDhDUnRrWkRpbFZLU3QvWlFGWGhJWWo3SnNLSjY5Q1VwdlJ0c1BXbWN0eDNOV1ZrRHpxUHRrbDFDWldhNHM4R0M3ZG1od3U1VG4raHlSdG9zbUl5UnFFWHFpSkF6bDVQT1llUE5ibExhT01FN21CTXp3QUxlOEJwa2FBMy9NSjFRNXVEeEhlRUU5ZnJRMEMxU09Ed01KMFhtbzYwTkh2REhHL1RrV0xWVGQ0cnpOOVFGV0d1SjUvbndKRm1wYmk0OU14a2VTK2RMK0xZN2xvWHpkaG9TT3RrUHU0RWZab3JqWlcyNkYzRUoxMVdwd09vell5ZUJFSGNYQnVVRUJuVXcxS1RtelBWMlVDdFE3ZmVTbkRXS0lsSTZMTHhRZU9ZcG9CTlBpc2ovdzhycHFIUjR5SFhJMXVuZUhKTWg3N1pjYU0vT0ZaYTd2QW9rUk03NTNXc0tmektWUHB6VFVud0JDemVsMXVUUmZUWFZrWlBpalNsbkEvbjFxUTIrbkFuRHdLU2IwSWJZM3hKd0FvNXIzWnIveVI4WlQ1VVpSaWRrK2tLT2ZwRnVMVzJKdHNsekFyYVhpZS8vYTNKdG1KVk51SEFDUjlBM1BTTitBUmVEV0VGbks2TGNWSDQ3WHY0VzBrUGx5ZU1SbittVWVKUzM4NjJBd2V1VHV4enlxQTJwQ0ZMTTdNbnpGUnFGbWx5azhCOHczSU1IYTdUbEZWNVEycktjQW5ZMXNLUVc4dUJJeTFWdVI5cThnanI2Z1MyQm9IVFQvZXNDVk8raHJyQ0oydHd6WVNHK0xPMDF0aHVKb3ZyQXU5emZmYXhmWGhLamxLNFRvNzdoL21wTm5qZmNGcUw5KzdUWE5ZK1NiNU1weFdhTW9uMlBxSEt2R2ZJV0pldlFFT1ltYjFFbHg3eDdMeU16d0cxV09heU83N0V0dkZiWGNiNjJ6Y2NiWFc5UG5pWDdVSTI0YWZiaTMxYm0rbldYUCtISVBWanJ0b2JLYzZhM0Z3a01qK2NxbzRVR2cwdzFaeFd6UFg0cGFyUVc1MXRFV2JxVjExSm02MG04N0dtQ09VeWNJamJDWGswbk80YVVMT1YyV20rU3pZQjFaeUJIdThaRFdGdXNOMHRvS1RMY0RxZzF5L0JqMm9TdVY0OGx0ODl2K2ZkY2xQQnl4MGVvK3YybnB2NURqdVorYWc5UG1Gejhqa0c3N00vTzM0VjlaUzlQc09QMHpiOEUvUXU0Z2UwZWdJMGNLelIzRjVtRHlRa2MxR0JKd3ROMW56RGdZUXV0NWFYeUZFRkw4cjlmWGc2WGhvNWNLbXhjS210ZmJRZVdWUDZXNFRIczAzSHF0T2RENXd1YWJLekZYRGdGMVVSVUV5VjgyN1FVRGNkaDRRbTIwVnp6WERzd3pabmhpeCs0WHJSSDF5bk9VWTRvUmhtc01EZkk3MFhxVlJyYWZiNks0UGRRREQxdDZiYy81Y204d1RZZWltdFUxeTdQQVN1NXF1VVJLc1V2ekxsSnBIU1pvbGl3cXBZRWVuSGdjeXZERmVJRFdvVGFncVh5QmpHVGRvQ3RqdXZqTzNTT0JUcldCZmhLSTAxV2NVeFlSWUhqNmdOQ1JvQ0JCQTlGNysvRDUvQ2ZuN3lwc0RwejlTNE9UTVZ3VE1hZmQ5eXVsZ2VjcGxhZTlGZ1RPU3h1TUJLYTROdE5iSDlmanppM1F6MDZPM244TWQ3QjkzNHRTWVBNYzBBaFdpQjlqMzNKZVZkaEdXVzJjeVEvVXA1anZmbmUzSUh3RUYwZ0hNVjdTKzBKcVJIRk1rSGpyVGdPbjBleVRyWG8yT2pvZmthSzA1TmRnWTV0a2thY2g4Q20xNXBOcjBIazJNaDBxVXpBK21obUNhTW1NNzIzcEt6SDVlUzB3MU5XZG9PbkNJLyswOUdRMXFhbWIrQWRJSkNoMmovSmZtQXgrbGhmaUdSeDJNYXZGdTJlenVhSjdDN2p1YkFwYTRJelF5SGRBOGduMnVDK1k1c3hueHZidVFEMFlZcitDTlpjM1M1Nlp1OXhRNW1KOU5wWFZKWCtsQmpCQklnL1VIeWM1MlZGcWE4OFEzSDdHdFVjNFhvTC9Ta1dKZWJycURNb05xUXNEenY0ZExCZGkxVTVUNDB1anppOXh6WjQ4TXhDZDRrdHV1Q01sc2ozWW56VSs3d0FMY2NacUFwaXkrcHJIOC9nb1hodGRhYTBwL2grV3k2YjVUTmlXMUd3dS9uaXVlRDhaVjhLc0ptVzJ1RDJxeTBCaHdrK0VhazZraXg0VWdFaXFsMCtldEtaNUVkUy9abS91NWpoZ3U5MVpRK3BjczhITW44SE1zZzg0NzluY0JDc1krdlZjbzR0OFJ4akxUajB5NzJPaTFYVmlPTXVKNndrdVZ1WkhTdWdiK2VHdGcrb2IzMStMQTNYKzh3bDNMWkdreTJGU1o4eC9Lejg4TVRmaFNmZlNuUStROHJKdEJ6VFpYSnNCajM3dEhTYmhMSXBvSlVkNE9ZL3NxeFRkOUF2cHc3bXZMMkVhN0ZXQk4vaitHeFhkOXdwQmpwaFd2amxPUS9JdGVsV1Z4K3NJZDlRKzY2bWtTVEJyc1pHZFRHVnh1TEx4elREVTJxMndUcmZWblhaUkw1YkpmcjF4NjkwbGh5WmFTNlZaWGhVbE80RE02K0huV3pzYzBFcC9IaFdoNm5xdEozOTNYa0dibmF3ZHpUN1FPbkcydU40ZlN0UXk5MXVibEFmaUwzeE96TGNVS2Z6UGZrOFo3cWxlbVpBbzJwMWx5bkpHSWdDejRvMTEzWWR4SFpMcUUvZWROQlE1c0J1eFdiOHNOS2JmRCtLZGltd3NjRHVlOGJGOEdWdHNBbWJWMStPSWdWOS9SVlpsK3l2QTQ4eFBscWZqUDhaRHd1d0x1RTd3Nk1VTndGa00remUrOWkzZy9Hai9aZ1RNNEJ0WWhVV1ZoZ203QWxGdCtaTGlOMCsxMlJIUHJjTWMwaXJzTkZBMFZ0OFdPdUNpYlM0d3RONGFKVWx5R2Z0MlgyK3FSMitBN1NTL015M0hJYTB3SWpqQVdKbjVUWnFjUzJpRis0VG90U0ZXNEZYR2s1b1BpdFBtNGwrUlFrVndkN01ZdDVKbktMTkZ5aHpDNUZPeCtQWDZsVUJNME91ZEJMN0EveXhiQjhkK21aeVU2UDhhalNLYjMreW5RZzlqV1A3QnFiOERYeFh3cStRdWZSbmlqUzF1elFhK0MwS0YwV0lOY1RQRzFNUDRuRTRoRG1uaDdNWUE1c3JxZ0hFMzJoREplSDd4YjFhZW9Mb1gxZnVvYzVtNGpRSGh3Z25pTlpid3hiL2M0czU5djNhamx4TkJuRmwzMDRrTTJaeVVyYkYwbFlBYllWR3BUWmZGR0UySlJGdTJyT2pJOERHZk1xQXIwKzFCejQ4S0tjMzNQcW1LYXcvUmxqL3hUNVE0NnVUS2NtKzNXcTlmcStpV21XMW5qa1VTNHptUisvcjMvVFhJQ0luNDB5V0c4S2NUSHVwaUw1V2dmdG02WnJzdFBXY1BKWStTN3k2VFdraStVa0xrQThPMHNyRmthYTNDTE5KMkl6bk5QYmQrNXJGR2ZQVEhsRERHUnRhL2JnV3B1UTJIZmI2U1FCYWs2WE5Ib0NDMGloQ1ZnUjJZcjhQYTdUaDFadlJIQklUMVhQQTYyZUVLdElOeVZ4UTFUdy9RL1dTRVBEVlUvYWxwRW9NT0pDbW9qckV2M2ZTL2JDcy8yNE1wMXVQR2owU2NQR3VnUGJsWUdMOW4vNC9lQ2RsTitKN1NqWHJibisyaG9VSDJqS0tOSllHSmZwTUNQUlF5TlZFYndTUEw1WDZLV2pYT1dSYjVMR2djQ1JOcVlNWXlUSDNJSWtRV09VNllvRmtuK2RGYWNqa3U4Znd1Ulk3UGZOZExtSjdFcnFXenpZUmQ4dHNVdG9EeHk4ZSt3UHpJQmpsdXRhSkhjeTB0bmtUR09GV0ZQNDdjdDQ1T1Y4aXhjL1c2Ny8xdllxcGZISWxEZWh5TFpDWGVhYmFCNmpaODRzWmZnM2xNMCtCQlQ4OG1sMnpaRzJ1dUpmNnhNaE9mSXQ1eGZLNHB3Z0srVVB5WlVzUUdDVGFXd0dWOGFjSklBcndjTjNOTGxKbmZSSmR2NVptVCtTMkxYSnNZK2N5RmtUOC96djRxc1haSEVCSEVoOWdzeklGcU9GbWpLZFRzaGgwWlpmcnNzY0lkWVZyZFNYdm1vdm9qbGxjcGJrWWNNcGwreVp5SFJuanNGS0QwWmp1QVRVMU9hNjEvbGFaZmEvV3U2Nk1YQzZUWnhIY1RSZjJ4S3J3dnc0ajZFNTBCMVE2ZlA0YW4zM0pCTHdUUkNiak1pMCtoTTQraVNaM0pjNXVkdkM4MHpFRmlPTVR0bHgraWkvZVE2bXdFZ2RTUVFuOGViY0t2OXFPT2U2d292QWZQMlM4aHZuS1l5R1JIQlAzSnFQaVhnNDUwN1JUMVVJZmpLV1dyTE1hRU5CbXIySVpLczdXUWlqQ1FHZnBjZVRhejIvSjFobUtya3pGdkdiWTFvVER1dU4wWFFrMFgyT3hUNTNRMVVXMDNGWEVNWHVFTWU3Z0czNWhqczZ5REVndjE3b3FZb0FUYXJiUE5hcDViU1Y0SXlkTUpJNklmazNTZUs3NHJSNlBZTGJYeGtUcnp6WDJPT2gydWhEazRtZ0pmV2hOcThZZDJFT0hNVUZZRjJlaitRNmFlNnpKMjAxcFkvNWRPMWFSYVk3RVVuelJWeWMyQStpRmhzVVVacC94WG5KcEpZODBCU1kxMC9LODdBWDVDc2JmYWoxaHBVMDB5a0o2YkcxcXZCYmsyckYydU1KKzlPZHZTRi9VU0UxVlZoc3VqTFRtaWdFZkJZSjZVbVMrdDNUZmsrLzFPYWRoVS95bWtnSzNZbllwQ2VpZUhLdkh2dThCM3VneHpkQlE0Qkd1Z2M1TnZHSlZVZmMrY1h5YU04MmdBYnVjNHB5R1JwZFN4L3BlU1QyaDRMRVA0OGtlakptV3VLSU1CbEIzSFFsUmp5amU0N2kyYTdoZEcwanlSMzVhWTFsWnJDYmxSblRhUTBUcm95a05qTXoyUFUwcWU4T3A3cjhNQjBSWUc5dFdRNjBXQVBXcUt4MlhoV25uZE5mM2M2RWtZWmppUmVsUldzb2lXUlhKSnEwMk9XNUNUbjZqUFY2cXFKbGViT2hydkNFbE5XeVk5bzNIRDQwc1U5UXJNL3Y1VDVnQWxQQ2ZRL0hkZkJSU2Z6K044cHBsdGp3aS96M1UrL3QraUcvVlBob0orSUZHaG9LVFZpaTRPL1h3NHB4Z2ZhZ09SdG9zYTF0N284YzZHQkFTVWczRThmK2I2NFBueStxN1dIWS9uRXRZNWZYenZoL0tyOUxnZ1lYcVE0OHpQMTdSb1BQK0hZa3kyQXZsOXpDdWVRamZZaHpKOTVVWUpHT3dqMGR6WVBlMW04VmJlZWhuZlR2bitrNkwrbG1XWm56cnEwcHdtdzQ4Z05kYmk1Uzc0M0pQTy9qQ210T0NjcGlrVmM5VzRHMXZ3V3NOTTg0bEhYQmlUdU4rNFhyWVcvcGUva0tYTSswZm4zTC9OS2dCUGhmM0NxZjRIK3VSZjZUV3A5UHREWi92SjNwYWh6NXVjRjJmZU9udFNHZGFvK1hxQk90YWVkbzhkTmI5aituTmZoRWU5eDdXdUxrTG1HeTNibk9vbEJJK0NDZW40VmIxalluL1pSMnlFOW9ILzVwcmMyYXpKUEFnWVExYnE0QUt5MEJOZk0xZDFSRnIwVC9wYTIreUREbzhnWnFsTFE0MC9hYXpKRzBhMENyaDlzSXQyYXZQOU9yOXc4SnFMd1YvV0l6L2Q1MjVRL3VsVUxyL0gvWjhhUjl0Mkt2Qlc2L0RVL3FJS2RBbDV2dXI3ZHJQS2s2UGxRYlFtN2JUdG4vUzhOZTNBNlQwdjVhdXcrY1ZxamxxUVk2ZDVpTW5vVHNVeXlpNXlQdk9qd0srL09TOXRDT1RVU0RuYlBHcUxJVUdWUnpvaW1qNzRjK2s2clFheEMzcU9ISWo1Q1RoMlJYeGVtVVM5cmhrRTNadFdHbWRLaFlVOXJHaU1QZ2dqUFlPMjQvTTJRa3Q3TWhiay9yN2JYV3JjSFRaZjRhQ3JzQnUwRjJORzkvM0Y5Zkd1cXdYVnVUTi90cC9Tdm1RU0ZHMGJFdGJRMjdHQmFhVzFnQ2tsNFpMSnhiazhKZVcyZytjSGxDb2lDaE03TVZhQWpQaUo5NUtvWnRiVTJtQ2MyZXVRSk9tRHZUaFpZZDNNNmt5czFGTVl3MzVOWlNWNFFWS09yTTh1ZEorTUpBWnIvOURPTXlHb3VqMGprUmJmZFRIM1FPNTltbUhSVTl2NjQxYThvOWZqaEV5MXE1dmgrbkM2VllWNFRtQ004cFBaaGxvUm91RDhCUWswMklkQTB1K1IybGR1aTVxdEF6MVlHaHJnaitZWGljcjAwV0ZsaW5RMTRUeVJZdE1HUi9rdnU2ZStuOTBHQmJEYkV3dDZEd2MxWGVKRHAxWG83SGRhV0hxOHNtR1IwdmFSdkoyK2ZTRXR6bDdTSzk2SS9CbUNZTUVzNE1lVjBLRSt2S2NST1g2QTdhRnpmRGtwTE0rWEpaSkkwVzB0dGswV0lFcWZVOEVza1RLVXFKQlU0cnFtcFYxUndJRFZZNGs0NDl0SjNxcG5xczVtdnlacEdsZ0VDRGhtcmN4SG9FNjVXTDBvejBlQ3hwdE1SSWJ4T3hKVTJnOENZd2NIdzZEY3NscFZ4cTQ2dDJLekJsck0rSVFZTU9UZG4wRFhkWVRCVXROWm1jRDNBY3VGNnFWQ3NhVUlJUHFPaW8zSDVWYTFYU3FodHF5aWdDYktzOEhWK2VJZ3QxbVZ2cERjbkcvaytuaFgyOFUrbXlyQXc0VUhDYjFzVnRYQVlMN1FHVjQ3a0M3SWJVS0xoRWRqWlBpTVJOYU1oREpLT2gwV25PRFlvNGxTNnRTQ2xWcE92eTFrVy9WSi91MHpNdFcwNlBVMnFtMHZmTkhuekNSM3VVV1ZsNmJjL1hmN1pwbktiL0xOMzF1VHIwK3ZhV3ZmUS9tNWQzcjJrbnlNclRKYm91R1NQMnBORG9GdXk5dkdtb0NqeVFTelFuR2FtSlAyZWdmWWpMb0VvaE5lcWkrSU0ycjJ0WitIdVZlVTI1NlZ0UDNtb1FmMmdmWWRvb2paSVdyUElTQkQ4aGhOUGxKemJ6YzgvQ1lnU3hMd21uVzhiczBoYWhjbmdqY1FIbGtTUjBGWUo4a2NTbXFCQkMvMVE1Rk1HdjFIYzl5ZFhsNW5iUUtNaU5JMFZxM0VReFlZaGI5c2V0aGE3d0FZaEwybGJqNFZSaVdzeGs2eUY3SCsyWHJabjRlVXhzK0tlcnl6NlNTRWpqOTlyV0xQVS9wcVNtNkVoTzFiZ0xqL2ZFbWx4bUV6SjVqNkNWdElaRDRKUWZjVG16MXRGSTRpY1MwUm9Mai85TkpXMTZCaHA4dzJqMEY5ZVd0Qy9kK3hmbzVCblgxUjRFSkxjZCtrV002YkVnOFNMSGRFZmpNZTNtTFFiTVRKUzY5QVRuTG5yMFNwZWJ4SUVmR21zS1R3aFVsOUFVYzJhOXF5ejdFOHJXUkhjNFlWcUtRdmFWQ2RuaUpYRWpvdjAvSVlTM2tjZy9uVzhON0YvVTFwSG9ubFlTZDQzcHJkbnIrNFlEY0F1ekttL3dzWFlSbWk4Y1M1SkdUL0R4a1pJT2l1dDVDQnJEQXp1WDJuVm92a3dVS1RSWk9ESW9nVTdIZnJnVStqZnl2eks4RjVxQ2o4VnVQeEVuN0VjRHB3bE5Wa3FPOXlhdG5kbWNURGJuS2Q4UE9LMjFpdHZoRTMrS1cvUjlMUzBUNm5KcnFjcHIrMlRaR2ZuU01ibEdQdVRGTFozSGNjQ3F2RjBrcDBsc05PaVpSaVhIdEpDdEdqbHdnZVExYVo5dHpvek9TZnV4MEJUMUVwcVhqaXZ5Y3ljSCtHaXJvOHZnSWw2ZWVXK3ZuVldqSU01bGY5SXhIeHpmN2NHOXRyVlZObjNRRUdMMUhVYzFUcmVwWHQvNk9oaVRPN2xSZG10SzhzT0pITDZNZjVJZitIbnQySG5ML3dYKzVrQVMrMTJGYUw0SUtPWmVkUGxUTFlrbmZZQXMvai90N3h3ZVRhZUdvOHF4amk1TG9aYkplWEtrT2NtcGlDVit6blh0NGdXNXczbnFpOXZHZ1NPNXVzSVQyYkhPVDdZVkI2M28yUkZXR29KeGNmK1FLOE9CaE5IZ2lzYytFN3RlblYvY2F1d3d5bk9uUHkyMnZqNm1GZGxXUTFQNlNWemI1WmxSZkpVT1dSc05Fd0lINzdtSnhnNC9HdGVXSDhQcHBkZGNzZExtZkM0YTU1eVA4ZGpuQnpjaGVWRWg2Yjd3ZURwMkdwYkVaZVY1N0xLY0lmTHhoVGVFMTVrODJ2cFlsOUpWdVpyeXRSRE5ydlNPdFJUZ1BLTzQ5eGZvb2V0MHl6Nk92TUFRWitNRzNXbjVCb3A3TzN0K2ZxU3haRi9zbk9NWitTS2NhNlhNZFFEMmxVLzZVZUpDR2sxd0R1b0MrNUhVeVhidG9wUXdIMVA0R29Kd0lzTVlPSzBZdDFDekxRazQ2M055TVJZaytrVWhwWWtnY2Ird2ZaaGZxREVaYXdxOSt1VDRPVjBQVFlza3IweklQdk1MY3dSWWYrTXJUdUtQeHNoWHhqeXNSRjFpRzh2SDdlQVlEWXgva3VNWVhaQWpwMllyMEJoRlo5NkxEdmllOTdCY1pNK3ozcHVUY0ZHTXBVYmE0eVY1L2FTdmJlQ012cC9Uby9oS0ZhWnduTWNkZnVFNmo5OHIxN2IrYmJPdnN0a0YyY00xczNNdDk2ZjFVR296VHVlMzBycGFLbDlKSFg2UTlMazluenQrY2Y1STBLT2Q1YjlQNW04WWtwbU16aDYzK1pkQndTWFg0Y0o5SHBFTFE0U2pjOGRpZnR1VTN6Ymx0MDA1WTFQR2p5ZnJwMmh0QTNsMFNWd1ltL0lHMSs2NHg3TzRYcE03T2hxYkh4L1plbWR6U0dsZTVQZzZrYlQvQnRPanhCNmR5ZGVsZFh2K0xZKzEzY1hxT0I3RFZ6Sjg0UmpCQjA3U3EyV0pyWGlVOW51Zk9ab2I0YU1OQjdURS9Vb3BiWTduK3puNTNMTGpFNU5HL3ludHQ2NDZmcEwySndzUTl4TXF3NSs1bnZmbmd0L0hJOXdEVVpveitaaGNsZWFCUzQrdjJCZm1lUy9FcDFTSGxkR202b29kU3BnUGxQeTYxQS9RUklxUUxsT3BicWpKOExQMlZMa2V1NVEyaWpBZk5MQi92UUl1a3IzaDh0alBwZ2xMb2RGY1RKcVhYd0czNHNvR3RyVWRLSGxkOGYwNFVTZmdGT1hHZ2FGMmltOFZ4OE91Mlp1QWdxc3FPT1cwZ1M5Z2tmWk5WK0IyL3RoZDVpT05TdkRMNnIyWFhTK0lZVjk3VGZ4eERKWmZaL1l1K1ZmNGVFQ1ZYWjEyald5ZDd2UDZtTDR0NnhzcngyM3ZPcmZwdDRyamRhR3Ird0QvUnMyWjQzV25MNDR1TzJvbnA1cC9rbC9HekNRL1VGQjl3V3lodXlPNWFEbzV2YkwyTTR2OGhXTnh4YVpvUFhFSFNOS3h4NitNa2I4N0VBeDNFYUhBSWdvSzhBUWxraC9qd2NTNDNieUY3enB2V0RqR2x6MFh6eTM2b3R1N2N0ZVNZeE40NmZzSHR4Ymt4MzZlTU9IaUpsYS9hSXRacklaTnJ5bzNsMFpEeUcrc1RFWFExcEg3TVc1dTlVNXJkNFJuVEs3VG14N3RaNXNPTkZsYWQ5d0VMMHdIUjRxZmJmcm9sZy9zeXJDNFBRZTdNOGhNNENOdDBvNGhGN1ZOOUhKek5sV3B6UXcwaHRNY0ZtN2h4YmlkbzBHYy9VcEgxa2FNdDBUYUFwQ2RvaGFVMlZxVm0xbkpLVWwvdVBRTTRHTVVBazY3NE51RE03NHE5TXFnMXBmeWIrK1dscDNzb0RXMHdqTzhIT0V4YWFndHVMeVlidmNIelIxK3oxengvRlp1Z2x4cHlEeDN6Wm11Q0t6UjZMTzYwdDhtS1NRZWJjZzRXN3NtQzZMUlFEeHB1WHB5WTIyVTNabzdTWTRYZEswZVB0S0Y2Vks0YlJ1SHJrZXRmTGhsZG9QZFdkdzIyN2l3VEx6ZkhyTzFGSjdRWkdLYXRQczhYSFF6d2VHdHU0UHhlYmxNWmYvN2VZWHdmMHNaNEt2RURhZTVNdG4wMnRrOGp1dDdtcnlKQmk3dkRScTdzMlVESmQyNFk2U0JJNmdwajlrVjB2dm5ET01tdGdJRHArUmFZbVVZYWF6a3FJb1VtaDB5R2IvTmVyenkya2UrdGxHeTRaZTZ3alA1ZFhxOTlSUW8wc3BrMHpOTCs5YzRYbUlkanBUQnBkZktGRFp0dWxZNmg4WDFNdm9jQ3VzKzN3ZHVIeUpGcHN0a2RvVXVYa2ZTdjJSbUZoTnR1cG1SOTlNbloxTUEyNDBSLzB3MnVlWVgrVjRaclFEYldobFA3K3BGMjhsU0R5dTB4UGVyV29lVWpFRTQvMVk4NzFjOCtQZjhWanBjV21HOS9lKzZEcUczRnVUbjRSSkc5b3RuUGdKZ2hXRzlYWC9UWVdqVmIrcTczOTdEUDdMb21kYllnaGFJdkNEL29UOFBXc252R1liSlYzOFYzK3A0U3plcXQ2bWJ1bW05NlVzWWRjTko3Q04xWjIyaWgvcE4zWEoxQTFyUURxT1ZCNWVPaGR6Q2NPWkZCUnlTSWRrRE1FMStRckl3d0RFZDdxWGUvbWVkYkZGMzVKZXZkK1FkU2RadmluOVMrS2NPUGRmR21QODdoV25XMnhqR1RYM21oUkZ2UldzdldOVGJVYkJNdjNyaG5wSS8vN3FwKzU3cGVHN1p5N2FqVDYxODhZRVZScXdlV1dzOXJyZnpuNTBrcWNZZGNVZmNJYnhDRTN5M0F0ZUNRenNJRW53Q3kvZGVkRXo2K2czK1N3eGc0WThRTWFCZS95di82VWI4ODQ3b1RUdDhTaWlMVEVpd1JQUTQvcW5QQUJrVDIzbnhvQTNpNU5jZEVRbDM0RjQ4RDAwWCtnaTlPSXdzaDArQUpIOWdpRGYxaEVYb3lVdGd2ZG1iZXJ1KytCcGlNR0JtT1hvbUUyODIzUC9oeCtRaWpWdE1xQU9MaG05OXNJZlRzVFNhanFYaFZGeElUeE9DNUFXeHlRamlhQ3FMTFlsamhCZU9hYjVJSGZwcHpIU2ZCVUtjU3N5c3l6R1FINGxtVjR4cGNSTFRIV0ZNU3lJaE1ZT3BuMTI0bTdpWjhhT2RYMUJuMCttUG1FamI5RVJXV1dVb3hKZFN5YVAwQjR2d3VQeGtRdkhrMXNCR0Zva3V4QW01UmpnNmNmRHNxcHZCZkxnY2RoN1d3eWQ2M0psaTdUTG5PdjNEaXBPTjRHaEl3eW5EVkdQZ0tsWjZvZDRhWisrMUR1MFlEVzRxT3RKaXpIWUpqdUZYd0pHUVJsa1p6cVk1d0tkRjZaVkpTVEhHb2NzdjFDM09icWRhb2JYVjJPR1hZZnhBRHViTWNuaHdHY3JpYTNoTDNwRi8zQ1lhNDlkd0R1ZkV6SUtQdzJHcU1RMXU2bjNQcmc1TWRONXd5cFZlemMyaEZUcTRaaGtuOWNDeXMzWWdwa2xBU1F1TzFWYkFUc2MxZUo5anMzc1YwbXZ0OW11SHVLY3F1MU1nNFRpK2k4QlZHeHoyTndBRjNVSStiSlZlMlp6RGZIYlY3V0QrdUJ3KzV0eXZ1aDc2V0FyS3JsZEV6d3JTa0k3YjZ1UFVqMUR3VC82azU1V0crOUtiU01oaFlJVjlTWTNpNCtTbmMzaGZLOVFZa3Z3cXVROTc3bE5EKzJFOW1IUGZzeDFYZVdYdFpUdXdhazM0WjR4dzNhcERGMzV1U1VqV2QzQzE3b1ZyMlllRDFoSlhyYVhZUy9wQk9UdnFkeTNqVFdITTNKc201OVhOT2JDYnZoRzN0cm9Nb3AxL21GeDdtWnpySkhlMWhGMVBJSks5R012ZXFFVDI4dXRmUDc2dXdyVzA4MzJaZmZpZTN0V0JyNHg5dHVtTktYZWJTZDQrZkFDN0szcWpIQi9FanpIaXgzN0FsR3FucjM4TDdmVHdXenY5MWs2L3RkTnY3WFNnblZxL1JEc3hFOUo4bmpBdFdtQk9hcW5tYnkzMVcwdjkxbEsvdGRTK2xxS0l2NU9Xd3AzK3Y3WFVieTMxVzB2OVA2Mmwva3d5eVcvMnRONys5M0ZPbWZ5YzVESE9TU2JKOENqU3dRd25XaGRmdzdzcENPNXM3ejYwcDdkcGt2UWVoUFp0TnFxOXdnbGRwQ3h4Y3JQZXJwUEVIZlh3eDEzcjYxM3JhN3RKRUFSK0lVdkR0bGZrWGVQVzF0MzZUZDMzMWxhQXZoNmJvTjZ1bXhhRWxnUHVReE8wRzNmTk94S25pZjNBVzltaDdibm5VQ29NYksrb08rS093aW5mcVIxR2dYN21YZGN6cmRzMFBadS9ra0FoTVpUUTN1TDUvN1hVWXdSZzhUVUVvWTNmVFIraWhTV1V5TWdjbmNPNE1EQ2hJMVgvNjZhK1dCcld5Z3JRU3VydCtnckY5cnZzZmtiZFA3N2VmWG00S2Z6UnJOL1VQZDl5dzVuOUZ1VTUrWW9zL082MUwvV2ZuRXMzQXMvZFdvZjU5T1lEcFZObTg2MUpVaFJGRW0vVldmV2JmRkxEZG4wOW10WGI5WHZEZHU4dEI2RFpITjIxMzZ3UTRYcDdlL3ZxL3FNMjlwWUJzTnExb3RUZEZ5NjB6bmNRTnZPdnJ1N2JVa0x1ZG0xRnZyb0wyelhidGJFVnJHeGdQUUtBOXRtcjYxaVJqdnlCOXF0YnF5Rnl0R3NaOE5zZHlPeGg2T3VnTU9MVnZReTMvS3JxejhBS0Fmc2dQcVU5T2Z1NHBVUHVrSmpiM24wQjFZSlVuVVowOHhhaWIzWFg5YUtraElaSDFXcXY5WmtGbmJ0d2RoOVlJY2IwMXNmeTlscHYxeGFXNWIrNnhVMi90NHE3Vkp2Y0FjOTVkZmVrdFYxTGhQWFZ4WVUvQ1FzZXMvRjFOMWtTa3ZsWDE5Y0QzYkVpSzBpd1NkZnBleDVzMXhLaFJsOG5oYngyRGE4aEVXSGFkazNiblE0OTAyclhaTjJPdWw3UXRZTXc2bmh1dUhTUWtPQjVMWFBpK1I3MHByYUZwcml0T1hvRVpnUGRzQ0N6OFFNckRITlMzTllXVmx5OXZ2dkQ3WlNRTDNGbVUxcmVucURPOWNMd1V3VGgzVUtBaHUxaFoxaVJmb2YwYU9CYWtZWHhzY1BidFBaNmk4ZTBhNjlZdWIzVy85TkM5SDliYW83VWJTSVVIYmdNSXlzUVBHanRpMUZnNk9CT1gwWXpMN0MzV0JDS0VuV3BGZzZXME1xSW9QczJHM2hMUDJ6WC92bGFCNTRYbUxaYmhQeGEvek5aYlNaZ3lVaG82YUVWNWc5WFZtQWtENlpXOUZxL3FiM1cxNGoweVVma2ZTV2ZFdGNxK2J6MFRUMzdEQUlMZi82ekRLc0tGS3lWNVVabEtPeW1LK0NRelhBNHM1OE11V1ppWkR1U2VTc1hmNFJDT3ZqQ0dYekU4REN5M014cFBVWG9zOHV0SXZvN2xuNklHTjd6MTJQM1U3QzREeU05V3BZaGMrbDArMXE2WXZLaUxyMlNNZStmTkZsbkVsYzR1ZGgvQnRIZmpSSUk3ZDFHZUE4ZW4waU5hdGFmWWpjSTdidHJsbXE3Yjk0bk1MeEtxRDN6WFVybEh6WERndDY2OXVZRnRVTE1kTVhNb1FVQ0s3cGdaZVVjUytlOHU0SjFlYXo5YVp2b0kwaDRibFJoU1lwYTlQTE5sZW5iVDhmMHMvZmFSMURKdDl4TkZUMnJOK1VIY05aOTI5cEVGdllqd3pPN2RobEducE45WjFwdnRtdGozL2tNbzB1UktyT2hmNzRqY3YxcERsNFMwRmE3ZGgvd05LcDhpUSt3OFZKc1B1aGZmSW83ZWJtajlXbCs1Yy93cFQ3Z1oveGE2LzQzY3JBK2IrRVdXQVoyRk4vbFdjZ3lWSGpkeVRaQ1lLOXNhRTB0czlwbVk0QlkyVzZRemcyalFMZkxFVitHMTJpcjgwRnBHbzcvak5nMFhCcHpDMFI1akY2YTJFT3JPNWxsck1qckJSNjBCT3NOd3k1UnhHZUFaaHc5c2RUUE1BaWZUTnpFTHJ5WHJGbWE5Sk1JbW9IN21hUjgwaTNIYzhkV3RFOUIzZmZEQzRsVnNkalF0MENTcUVxUE42UnBvRjJPS1VzTW9RWDZKV0F6ckxNWGk1aWdmM0FmU0JXWVdpMUhCZit4eDhiUzhiV2E2WVpaYWk1bEVjNmZ5WFkwNnlYbkdyS1JoV01PV2FJdWVWQWM4TUk5dFd1NGpITDRGTzBaM1hhdElHeWpMM2RydVUySm5SU1NkdCtqQlNTNnJKUG9zbmJ4V2EyMlU0WDc2S1FVZ3RCYnYyUkRtQkRvRUV0UjJWaWcrN3BoUXp1eXJmQmdrbHBOTjAyc0s4ZnErTWZqMDVEamN6MmEvTU0xd0hidHd2cmQwWnN2U3dnekJqekN0UjZIeFNIQWN4d2RDZTgvYTYvMVBZaDM0ZXkxWHR2RFJBK21oK2pmMWw3cnQ3ZDZFT2p4YlZJTy9YWmYxR0p2OXZRKytkOXJ2ZmltNWE2T0lDVmM2b3k1SHd6LzlQTE04Wk5EVXVFa2FMdTJkTzFOKy83K2ZxVUg5OUEyN2hkTEF6bUg5ejVjVG0wM3pCRzRzeHlBazZNNHJ3cEMrMGZvZ1VYNXRNb1BOUEh3K1ltcG1MUW8wMld2UGpHMHlGYTh1OHRwVjcvL0luRFM0NFQ1TVh3VytjbVBKMDZvaEhYbHVrMDdYSVNIYy8vakg3WEo4OU56R3dzQWNqdHEzaktxa1ZUcmxueWdUcUVwS2QwQm96eVBmNGhqcGh6RmJ1QTVSMEtPOTFwZ1JkK3RPRlBiaC84T1RXQmdtV0haT0p3OVg0WldnRjY0Q05XWHgvRllmaGFlL25Qbytub1lycjNBdkFqZE05SmZWaTYrQ0M3SGo1bU9LREFmRU5MSHdlQlovaUhJenorRzRtREMvWGg1ZnZyeDJPa3c0M0VsMEVSWDcwRk5YTjRoTWhwaGhSWklpLzYrSHMwT0lUdm92UmM5bXJWcjErMkU4cGtTWkV3TFdiTHczUlB1VjdWQWFOOG5jSjhTdU9VZ0E4L1hwNm5SZUszVHRta0hGa0IvNnJDS0RiNW52Z05Kei93OERFeHJkV3J1bzhlM0piNHRNZ2VuOEs4YW1zSEtlMEZLN09RNzIwa3Vzbk9yYjgxanNxQUh1UGZHTkFNckRMLzlmLy96K1BRa01PUHgveDZQdmIxTmVaTFBqNGlOR2ZydEU4eFp0VlZOVWFyWXBmZHAwOHdKKy9oZHBKa2YvUE1UODROL0hETFhhTkkzMjRKbWxSWTk3S2M0SG9GZlR3UURPWjkzaUluOGdlYS9RS0hzMGR1MGcxUHlWeHo3SWZVRVFudjNPUHRrdTNiVTJmZFZEOEdISnZnY056WGRFeVV0WEZmNmlkV1NoV1RpVTBYaUVvYnZwai9oc2IzV3l6elB3cXRQdzRvM0s3dTV5Z0VKek12emo5TTc3TVNMUDhtUkNrMXdHMWkrOXlGSENpUDRFOTJuQzVFc2M1OHVjU0xlYWFxODhEYXdjSi9CcWRkUk5IcGJOYlN3a3pNVGRBcFdPcVJDVEphbXRibzFUMnFzSmJUQ083TldqY1I1cTdzL0lrMkR0NnVOYjVrbXhSRTZBbmVnb2s0NlR6OVNpUEg5L2xzUmJ1RjZ3aTZKRjhUUFFTZkplTHNYYXVOM0lYT0o2M2d4WXFkOXkvZmhkNVduZVRHbXBYN2xsUWdlZVprSHM1Y3dibjhIbnA3dmFMdWVCVit4K2M0dnkzTEFiUWgwYU5uZU8rbDV2R1ZQejJwRjRCNjlrKzNrSzFkYXJvYk9UMW1sdnBJSnV6YTB5cWw2ckUzT0V6VzB2Vkl0ZFBsdXFvNGdFbk56TUhmeUpWLys3b2NxRWsrV0Q3M1lzZHozcEhvdmFFdStKdUY3RW5wZytkQUdldGl1a2U5S0E1K3BkZXhsZy9VM1hPZU9pNjhYcnVRcGZPMTc1cU1iMlkvSEx5Q00vN1cwQTh0OFdnYTJPeDJEbVdVdW9lMU91YW5yNVY4ekd3c3NjZFJhZlBVMndiOWt3dFRZSWVvZGRtUHUyMHZzYlJ5N1EraWY1MXVCanNEV09QZjQ2VjU3NWo3TVN1cmxHeURwSEkyL284bjMxVHZhVlFpZHd4aGlQL1BPbitiUzdyV1NWSGxab2p3N1JYSmRkSDF3OXVTaWdQclN1UGxrOEEwdDNiU0NXOHgyMjNPL0hhZXgzaDBYSTcwVkxOMHNQcjQ3akk4dmNFTFJLMVowTHVRc1RGUmluSGVOME5leDVQanN6YWR6NWMzU28yVmczVTZSdnZ5V05rSEgzOHBUaVppTm1HUzNhR1czUGo1UzhtM3hOVHcvZHJtMHpWdG91ZE5vOW8wazNpc0oyY2pJZGl4dkdYMGpLU0s4VXR5eWZ2VzNFRm11YjlZbWVpZ2ZhRzJpUUw5TjJqUnVNMTM3ZjBvd0Q3citMaGZNNHlOV255NllIK0R3ZjFDaFhKQ0srVFdzVFkvUGxiRDE3Rm03MzVyLzA3aHdYTEwrTDZnR0gzQ2xuSFcvdUdSOGxwOVhWSUtyL0xpUDFvUDNhckpaU1pZaS9yaWxLT28vV2pqOFhlcjlXYVhlVHlqSjVyREc2bmpDREN0VDhlMWErY0d5c3pMMVNBK1lNZi80TXU0OVR6cnNFek5nSnN3MTFkNHpvQWZjZUNJOUQ4UmhQc2tubDVJL29JWS90MzVablZJdFI5RnkvQ2grc29QMjN5TVZFdHFKTmJya2tLbGhSWHArMHJRejVwNVNPM2FRY1RnOGFGcklKeVRScEpCbUE3TEsxb1ZIWXZkK3ZlRUExZktqQjRjNEp3ZEh4K25nQzA1TDUzTyt1Z21aVGgxWnhiM3N0dWNlbmxtdDM5VHpLd2JJNUhnL3pnMFZ6L2ovOWY4SEFBRC8vM0EwUUw0dXl3QUE="},"kind":"Secret","metadata":{"annotations":{},"creationTimestamp":"2021-01-29T01:10:44Z","labels":{"modifiedAt":"1611882636","name":"vxflexos","owner":"helm","status":"deployed","version":"1"},"managedFields":[{"apiVersion":"v1","fieldsType":"FieldsV1","fieldsV1":{"f:data":{".":{},"f:release":{}},"f:metadata":{"f:labels":{".":{},"f:modifiedAt":{},"f:name":{},"f:owner":{},"f:status":{},"f:version":{}}},"f:type":{}},"manager":"helm","operation":"Update","time":"2021-01-29T01:10:44Z"}],"name":"sh.helm.release.v1.vxflexos.v1","namespace":"vxflexos","resourceVersion":"4950603","selfLink":"/api/v1/namespaces/vxflexos/secrets/sh.helm.release.v1.vxflexos.v1","uid":"530bdf2d-2bcd-4efe-b7dd-ee7310781e13"},"type":"helm.sh/release.v1"} - creationTimestamp: "2021-01-29T01:10:44Z" - labels: - modifiedAt: "1611882636" - name: vxflexos - owner: helm - status: deployed - version: "1" - managedFields: - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:data: - .: {} - f:release: {} - f:metadata: - f:labels: - .: {} - f:modifiedAt: {} - f:name: {} - f:owner: {} - f:status: {} - f:version: {} - f:type: {} - manager: helm - operation: Update - time: "2021-01-29T01:10:44Z" - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:metadata: - f:annotations: - .: {} - f:kubectl.kubernetes.io/last-applied-configuration: {} - manager: kubectl - operation: Update - time: "2021-01-30T21:51:39Z" - name: sh.helm.release.v1.vxflexos.v1 - namespace: vxflexos - resourceVersion: "5497944" - selfLink: /api/v1/namespaces/vxflexos/secrets/sh.helm.release.v1.vxflexos.v1 - uid: 530bdf2d-2bcd-4efe-b7dd-ee7310781e13 - type: helm.sh/release.v1 -- apiVersion: v1 - data: - config: WwogICAgewogICAgICAgICJ1c2VybmFtZSI6ICJhZG1pbiIsCiAgICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkMTIzNCIsCiAgICAgICAgInN5c3RlbUlEIjogIjU0MmEyZDVmNTEyMjIxMGYiLAogICAgICAgICJlbmRwb2ludCI6ICJodHRwOi8vMTAuMjQ3Ljk4LjEzMDo4MDgwIiwKICAgICAgICAiaW5zZWN1cmUiOiB0cnVlLAogICAgICAgICJpc0RlZmF1bHQiOiB0cnVlCiAgICB9LAogICAgewogICAgICAgICJ1c2VybmFtZSI6ICJhZG1pbiIsCiAgICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkMTIzIiwKICAgICAgICAic3lzdGVtSUQiOiAiMWE5OWFmNzEwMjEwYWYwZiIsCiAgICAgICAgImVuZHBvaW50IjogImh0dHBzOi8vMTAuMjQ3LjEzLjIwNiIsCiAgICAgICAgImluc2VjdXJlIjogdHJ1ZQogICAgfQpdCg== - kind: Secret - metadata: - annotations: - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"v1","data":{"config":"WwogICAgewogICAgICAgICJ1c2VybmFtZSI6ICJhZG1pbiIsCiAgICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkMTIzNCIsCiAgICAgICAgInN5c3RlbUlEIjogIjU0MmEyZDVmNTEyMjIxMGYiLAogICAgICAgICJlbmRwb2ludCI6ICJodHRwOi8vMTAuMjQ3Ljk4LjEzMDo4MDgwIiwKICAgICAgICAiaW5zZWN1cmUiOiB0cnVlLAogICAgICAgICJpc0RlZmF1bHQiOiB0cnVlCiAgICB9LAogICAgewogICAgICAgICJ1c2VybmFtZSI6ICJhZG1pbiIsCiAgICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkMTIzIiwKICAgICAgICAic3lzdGVtSUQiOiAiMWE5OWFmNzEwMjEwYWYwZiIsCiAgICAgICAgImVuZHBvaW50IjogImh0dHBzOi8vMTAuMjQ3LjEzLjIwNiIsCiAgICAgICAgImluc2VjdXJlIjogdHJ1ZQogICAgfQpdCg=="},"kind":"Secret","metadata":{"annotations":{},"creationTimestamp":"2021-01-28T07:25:16Z","managedFields":[{"apiVersion":"v1","fieldsType":"FieldsV1","fieldsV1":{"f:data":{".":{},"f:config":{}},"f:metadata":{"f:annotations":{".":{},"f:kubectl.kubernetes.io/last-applied-configuration":{}}},"f:type":{}},"manager":"kubectl","operation":"Update","time":"2021-01-30T21:51:39Z"}],"name":"vxflexos-config","namespace":"vxflexos","resourceVersion":"5497945","selfLink":"/api/v1/namespaces/vxflexos/secrets/vxflexos-config","uid":"880efe45-c524-47dd-b7b3-f5704b9bff3a"},"type":"Opaque"} - creationTimestamp: "2021-01-28T07:25:16Z" - managedFields: - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:data: - .: {} - f:config: {} - f:metadata: - f:annotations: - .: {} - f:kubectl.kubernetes.io/last-applied-configuration: {} - f:type: {} - manager: kubectl - operation: Update - time: "2021-01-30T22:01:48Z" - name: vxflexos-config - namespace: vxflexos - resourceVersion: "5500016" - selfLink: /api/v1/namespaces/vxflexos/secrets/vxflexos-config - uid: 880efe45-c524-47dd-b7b3-f5704b9bff3a - type: Opaque -- apiVersion: v1 - data: - config: WwogICAgewogICAgICAgICJ1c2VybmFtZSI6ICJhZG1pbiIsCiAgICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkMTIzNCIsCiAgICAgICAgInN5c3RlbUlEIjogIjU0MmEyZDVmNTEyMjIxMGYiLAogICAgICAgICJlbmRwb2ludCI6ICJodHRwOi8vMTAuMjQ3Ljk4LjEzMDo4MDgwIiwKICAgICAgICAiaW5zZWN1cmUiOiB0cnVlLAogICAgICAgICJpc0RlZmF1bHQiOiB0cnVlCiAgICB9LAogICAgewogICAgICAgICJ1c2VybmFtZSI6ICJhZG1pbiIsCiAgICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkMTIzIiwKICAgICAgICAic3lzdGVtSUQiOiAiMWE5OWFmNzEwMjEwYWYwZiIsCiAgICAgICAgImVuZHBvaW50IjogImh0dHBzOi8vMTAuMjQ3LjEzLjIwNiIsCiAgICAgICAgImluc2VjdXJlIjogdHJ1ZQogICAgfQpdCg== - kind: Secret - metadata: - annotations: - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"v1","data":{"config":"WwogICAgewogICAgICAgICJ1c2VybmFtZSI6ICJhZG1pbiIsCiAgICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkMTIzNCIsCiAgICAgICAgInN5c3RlbUlEIjogIjU0MmEyZDVmNTEyMjIxMGYiLAogICAgICAgICJlbmRwb2ludCI6ICJodHRwOi8vMTAuMjQ3Ljk4LjEzMDo4MDgwIiwKICAgICAgICAiaW5zZWN1cmUiOiB0cnVlLAogICAgICAgICJpc0RlZmF1bHQiOiB0cnVlCiAgICB9LAogICAgewogICAgICAgICJ1c2VybmFtZSI6ICJhZG1pbiIsCiAgICAgICAgInBhc3N3b3JkIjogIlBhc3N3b3JkMTIzIiwKICAgICAgICAic3lzdGVtSUQiOiAiMWE5OWFmNzEwMjEwYWYwZiIsCiAgICAgICAgImVuZHBvaW50IjogImh0dHBzOi8vMTAuMjQ3LjEzLjIwNiIsCiAgICAgICAgImluc2VjdXJlIjogdHJ1ZQogICAgfQpdCg=="},"kind":"Secret","metadata":{"annotations":{},"name":"vxflexos-config-karavi","namespace":"vxflexos"},"type":"Opaque"} - creationTimestamp: "2021-01-30T22:01:48Z" - managedFields: - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:data: - .: {} - f:config: {} - f:metadata: - f:annotations: - .: {} - f:kubectl.kubernetes.io/last-applied-configuration: {} - f:type: {} - manager: kubectl - operation: Update - time: "2021-01-30T22:01:48Z" - name: vxflexos-config-karavi - namespace: vxflexos - resourceVersion: "5500017" - selfLink: /api/v1/namespaces/vxflexos/secrets/vxflexos-config-karavi - uid: 5e0e1cb9-ebb3-43de-98b1-b8f44e6b66cd - type: Opaque -- apiVersion: v1 - data: - ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1ERXhNakF3TlRreU5Wb1hEVE14TURFeE1EQXdOVGt5TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTE5RCjg1NHp5S1dHWUU0RW5WQzdscUkrcEI1cEtjOVBpRVNpbkR6TVMyZUczUWY4UUQ4U1FMOElQUG1GWVlyM2RBam0Kc3BFZzRxSElwNkVjVzB0S2dtWG50UmJ2RnNHSzVzU3JQY0hBejJIWjhEV1d5OXJKL1dYVHk1YmF0Q3NGWUhpRQptcnpKYnNIL2JMY3BYaFo1bys5bmIwRStSU3Q4ZTBGL1NaVEJLWTBlUGZHekZCenBSUWpWRmxPM3h5OW0xcXJhCkNkNHlmNk9TOUxjaUQyazZwOTJQMThIT1FiYmY0MWttdWNnUUFLMC8zMHAwbkVaUk42bVkzNUVJTGNidzNyMW4KTE4vd1UyQ1cxZExEWDZzUTBCRHcyazNDZkVmNTUxRDN5ZHAzU3dqUW5Qd25mVVQ1NCswMURjMG9ZOWh4MThaeQpOMWNHZVZ5VENxeFFRaS9pallNQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIMTVVNjEzR3BUWVpYclNvdEpQbnU5aTh6TXIKaUdkdUcyUTZsZWhneFhiNkZQamw2TVgzOEJObDVKMVRNUUIzUVhjZk1QcEpMVmF3UWRXLzdoeE9ONGtzOFhRcQp0M2dGL3JhVjk0TWk0azJweDE0U0I1TEE4enlJb0N4SXdkam1yUTIwL1FqNTB2V1pXV1QwbXhwTk4vRk1sdkl3CktmRVFVQkNkUnJFdzlES0xjc3J1aGZwdFhqb3Z5eWpyc0VJbHFmVUx2U2x5M2U5VzJ6YlIvWExLVXVsL1d3VFkKRW1SRzdPUVJnZXFUZWpEQWFrSFZXcGxlVmJ6bkdWZ1FTZzNWRHlSY21rUmE4a1QvcjZ1OS8zRkNmMjNXMU5pOQpkdXc1Rk4rbnExRmMyYUVrSVFjRWFGNE1oVURycm5Nd2ZxMzAyekxYVlJhbWFwb2VlNy9PRUU3U2gzaz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= - namespace: dnhmbGV4b3M= - token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklrRm5jMU5QVEdwYWJuUnRVRnAyY3paNU16UnNlVzR3TWtOSGJVRk5kMDFJUVdSUFoxYzRZemx6UTJNaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUoyZUdac1pYaHZjeUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUoyZUdac1pYaHZjeTFqYjI1MGNtOXNiR1Z5TFhSdmEyVnVMV1pzTkdKdElpd2lhM1ZpWlhKdVpYUmxjeTVwYnk5elpYSjJhV05sWVdOamIzVnVkQzl6WlhKMmFXTmxMV0ZqWTI5MWJuUXVibUZ0WlNJNkluWjRabXhsZUc5ekxXTnZiblJ5YjJ4c1pYSWlMQ0pyZFdKbGNtNWxkR1Z6TG1sdkwzTmxjblpwWTJWaFkyTnZkVzUwTDNObGNuWnBZMlV0WVdOamIzVnVkQzUxYVdRaU9pSmpaamhoTVRZNE55MWlZbUk0TFRSa05XVXRPR0ptWXkwNE9UQTJPR1EwWXpBd1pHRWlMQ0p6ZFdJaU9pSnplWE4wWlcwNmMyVnlkbWxqWldGalkyOTFiblE2ZG5obWJHVjRiM002ZG5obWJHVjRiM010WTI5dWRISnZiR3hsY2lKOS5BeTdMeDA2M3dYMEpCQWEwby1zWXZSYXVocEIySEdpRk00VHNwa3prVDdkbnBjZTEyYlVtbWR4WkJ3SkdlanNkSE5CVTlqblhxUzIyQ01QVDg5NngyVGRBS0ladjVNUFdyMWtZVFZLZWgzakZreDZCVjAtbHdMcWR4bDhxNHA0QnZXMjlyZlNseXVNemVDOVpUalJmdVF2Q3VtNmY1TzUxZ2RUNlZzaTZPMGc2UVAzc2UzNDlpeWJ4QzNDMnctaVprV2Nxa0NlTjh4a2ZKSnJ5WHZzRnNmcU5rRmNYSGtrRUxiSjY1el9xYklhdzU2MGdja1RuWnhNZDg0b1VGUGhGMkJXdVJsNFZabkRleEpHTjN3OWVhZFQzYmpPeVU5TXhMLVNiY0ZuTTRKN3R2NXFENDZ4T0hSdi0zR0J0Zi1hdWVRWkpXRk5kby1lQmhRV3dXQ3o5LUE= - kind: Secret - metadata: - annotations: - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"v1","data":{"ca.crt":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1ERXhNakF3TlRreU5Wb1hEVE14TURFeE1EQXdOVGt5TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTE5RCjg1NHp5S1dHWUU0RW5WQzdscUkrcEI1cEtjOVBpRVNpbkR6TVMyZUczUWY4UUQ4U1FMOElQUG1GWVlyM2RBam0Kc3BFZzRxSElwNkVjVzB0S2dtWG50UmJ2RnNHSzVzU3JQY0hBejJIWjhEV1d5OXJKL1dYVHk1YmF0Q3NGWUhpRQptcnpKYnNIL2JMY3BYaFo1bys5bmIwRStSU3Q4ZTBGL1NaVEJLWTBlUGZHekZCenBSUWpWRmxPM3h5OW0xcXJhCkNkNHlmNk9TOUxjaUQyazZwOTJQMThIT1FiYmY0MWttdWNnUUFLMC8zMHAwbkVaUk42bVkzNUVJTGNidzNyMW4KTE4vd1UyQ1cxZExEWDZzUTBCRHcyazNDZkVmNTUxRDN5ZHAzU3dqUW5Qd25mVVQ1NCswMURjMG9ZOWh4MThaeQpOMWNHZVZ5VENxeFFRaS9pallNQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIMTVVNjEzR3BUWVpYclNvdEpQbnU5aTh6TXIKaUdkdUcyUTZsZWhneFhiNkZQamw2TVgzOEJObDVKMVRNUUIzUVhjZk1QcEpMVmF3UWRXLzdoeE9ONGtzOFhRcQp0M2dGL3JhVjk0TWk0azJweDE0U0I1TEE4enlJb0N4SXdkam1yUTIwL1FqNTB2V1pXV1QwbXhwTk4vRk1sdkl3CktmRVFVQkNkUnJFdzlES0xjc3J1aGZwdFhqb3Z5eWpyc0VJbHFmVUx2U2x5M2U5VzJ6YlIvWExLVXVsL1d3VFkKRW1SRzdPUVJnZXFUZWpEQWFrSFZXcGxlVmJ6bkdWZ1FTZzNWRHlSY21rUmE4a1QvcjZ1OS8zRkNmMjNXMU5pOQpkdXc1Rk4rbnExRmMyYUVrSVFjRWFGNE1oVURycm5Nd2ZxMzAyekxYVlJhbWFwb2VlNy9PRUU3U2gzaz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=","namespace":"dnhmbGV4b3M=","token":"ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklrRm5jMU5QVEdwYWJuUnRVRnAyY3paNU16UnNlVzR3TWtOSGJVRk5kMDFJUVdSUFoxYzRZemx6UTJNaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUoyZUdac1pYaHZjeUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUoyZUdac1pYaHZjeTFqYjI1MGNtOXNiR1Z5TFhSdmEyVnVMV1pzTkdKdElpd2lhM1ZpWlhKdVpYUmxjeTVwYnk5elpYSjJhV05sWVdOamIzVnVkQzl6WlhKMmFXTmxMV0ZqWTI5MWJuUXVibUZ0WlNJNkluWjRabXhsZUc5ekxXTnZiblJ5YjJ4c1pYSWlMQ0pyZFdKbGNtNWxkR1Z6TG1sdkwzTmxjblpwWTJWaFkyTnZkVzUwTDNObGNuWnBZMlV0WVdOamIzVnVkQzUxYVdRaU9pSmpaamhoTVRZNE55MWlZbUk0TFRSa05XVXRPR0ptWXkwNE9UQTJPR1EwWXpBd1pHRWlMQ0p6ZFdJaU9pSnplWE4wWlcwNmMyVnlkbWxqWldGalkyOTFiblE2ZG5obWJHVjRiM002ZG5obWJHVjRiM010WTI5dWRISnZiR3hsY2lKOS5BeTdMeDA2M3dYMEpCQWEwby1zWXZSYXVocEIySEdpRk00VHNwa3prVDdkbnBjZTEyYlVtbWR4WkJ3SkdlanNkSE5CVTlqblhxUzIyQ01QVDg5NngyVGRBS0ladjVNUFdyMWtZVFZLZWgzakZreDZCVjAtbHdMcWR4bDhxNHA0QnZXMjlyZlNseXVNemVDOVpUalJmdVF2Q3VtNmY1TzUxZ2RUNlZzaTZPMGc2UVAzc2UzNDlpeWJ4QzNDMnctaVprV2Nxa0NlTjh4a2ZKSnJ5WHZzRnNmcU5rRmNYSGtrRUxiSjY1el9xYklhdzU2MGdja1RuWnhNZDg0b1VGUGhGMkJXdVJsNFZabkRleEpHTjN3OWVhZFQzYmpPeVU5TXhMLVNiY0ZuTTRKN3R2NXFENDZ4T0hSdi0zR0J0Zi1hdWVRWkpXRk5kby1lQmhRV3dXQ3o5LUE="},"kind":"Secret","metadata":{"annotations":{"kubernetes.io/service-account.name":"vxflexos-controller","kubernetes.io/service-account.uid":"cf8a1687-bbb8-4d5e-8bfc-89068d4c00da"},"creationTimestamp":"2021-01-29T01:10:44Z","managedFields":[{"apiVersion":"v1","fieldsType":"FieldsV1","fieldsV1":{"f:data":{".":{},"f:ca.crt":{},"f:namespace":{},"f:token":{}},"f:metadata":{"f:annotations":{".":{},"f:kubernetes.io/service-account.name":{},"f:kubernetes.io/service-account.uid":{}}},"f:type":{}},"manager":"kube-controller-manager","operation":"Update","time":"2021-01-29T01:10:44Z"}],"name":"vxflexos-controller-token-fl4bm","namespace":"vxflexos","resourceVersion":"4950572","selfLink":"/api/v1/namespaces/vxflexos/secrets/vxflexos-controller-token-fl4bm","uid":"dbf1bbed-750d-4f17-890a-52efd8316ead"},"type":"kubernetes.io/service-account-token"} - kubernetes.io/service-account.name: vxflexos-controller - kubernetes.io/service-account.uid: cf8a1687-bbb8-4d5e-8bfc-89068d4c00da - creationTimestamp: "2021-01-29T01:10:44Z" - managedFields: - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:data: - .: {} - f:ca.crt: {} - f:namespace: {} - f:token: {} - f:metadata: - f:annotations: - .: {} - f:kubernetes.io/service-account.name: {} - f:kubernetes.io/service-account.uid: {} - f:type: {} - manager: kube-controller-manager - operation: Update - time: "2021-01-29T01:10:44Z" - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:metadata: - f:annotations: - f:kubectl.kubernetes.io/last-applied-configuration: {} - manager: kubectl - operation: Update - time: "2021-01-30T21:51:39Z" - name: vxflexos-controller-token-fl4bm - namespace: vxflexos - resourceVersion: "5497946" - selfLink: /api/v1/namespaces/vxflexos/secrets/vxflexos-controller-token-fl4bm - uid: dbf1bbed-750d-4f17-890a-52efd8316ead - type: kubernetes.io/service-account-token -- apiVersion: v1 - data: - password: UGFzc3dvcmQxMjM= - username: YWRtaW4= - kind: Secret - metadata: - annotations: - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"v1","data":{"password":"UGFzc3dvcmQxMjM=","username":"YWRtaW4="},"kind":"Secret","metadata":{"annotations":{},"creationTimestamp":"2021-01-12T01:01:56Z","managedFields":[{"apiVersion":"v1","fieldsType":"FieldsV1","fieldsV1":{"f:data":{".":{},"f:password":{},"f:username":{}},"f:metadata":{"f:annotations":{".":{},"f:kubectl.kubernetes.io/last-applied-configuration":{}}},"f:type":{}},"manager":"kubectl","operation":"Update","time":"2021-01-12T01:01:56Z"}],"name":"vxflexos-creds","namespace":"vxflexos","resourceVersion":"1074","selfLink":"/api/v1/namespaces/vxflexos/secrets/vxflexos-creds","uid":"a795f07a-93d7-4d3f-86ee-03f4aafacb2d"},"type":"Opaque"} - creationTimestamp: "2021-01-12T01:01:56Z" - managedFields: - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:data: - .: {} - f:password: {} - f:username: {} - f:metadata: - f:annotations: - .: {} - f:kubectl.kubernetes.io/last-applied-configuration: {} - f:type: {} - manager: kubectl - operation: Update - time: "2021-01-30T21:51:39Z" - name: vxflexos-creds - namespace: vxflexos - resourceVersion: "5497947" - selfLink: /api/v1/namespaces/vxflexos/secrets/vxflexos-creds - uid: a795f07a-93d7-4d3f-86ee-03f4aafacb2d - type: Opaque -- apiVersion: v1 - data: - ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1ERXhNakF3TlRreU5Wb1hEVE14TURFeE1EQXdOVGt5TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTE5RCjg1NHp5S1dHWUU0RW5WQzdscUkrcEI1cEtjOVBpRVNpbkR6TVMyZUczUWY4UUQ4U1FMOElQUG1GWVlyM2RBam0Kc3BFZzRxSElwNkVjVzB0S2dtWG50UmJ2RnNHSzVzU3JQY0hBejJIWjhEV1d5OXJKL1dYVHk1YmF0Q3NGWUhpRQptcnpKYnNIL2JMY3BYaFo1bys5bmIwRStSU3Q4ZTBGL1NaVEJLWTBlUGZHekZCenBSUWpWRmxPM3h5OW0xcXJhCkNkNHlmNk9TOUxjaUQyazZwOTJQMThIT1FiYmY0MWttdWNnUUFLMC8zMHAwbkVaUk42bVkzNUVJTGNidzNyMW4KTE4vd1UyQ1cxZExEWDZzUTBCRHcyazNDZkVmNTUxRDN5ZHAzU3dqUW5Qd25mVVQ1NCswMURjMG9ZOWh4MThaeQpOMWNHZVZ5VENxeFFRaS9pallNQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIMTVVNjEzR3BUWVpYclNvdEpQbnU5aTh6TXIKaUdkdUcyUTZsZWhneFhiNkZQamw2TVgzOEJObDVKMVRNUUIzUVhjZk1QcEpMVmF3UWRXLzdoeE9ONGtzOFhRcQp0M2dGL3JhVjk0TWk0azJweDE0U0I1TEE4enlJb0N4SXdkam1yUTIwL1FqNTB2V1pXV1QwbXhwTk4vRk1sdkl3CktmRVFVQkNkUnJFdzlES0xjc3J1aGZwdFhqb3Z5eWpyc0VJbHFmVUx2U2x5M2U5VzJ6YlIvWExLVXVsL1d3VFkKRW1SRzdPUVJnZXFUZWpEQWFrSFZXcGxlVmJ6bkdWZ1FTZzNWRHlSY21rUmE4a1QvcjZ1OS8zRkNmMjNXMU5pOQpkdXc1Rk4rbnExRmMyYUVrSVFjRWFGNE1oVURycm5Nd2ZxMzAyekxYVlJhbWFwb2VlNy9PRUU3U2gzaz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= - namespace: dnhmbGV4b3M= - token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklrRm5jMU5QVEdwYWJuUnRVRnAyY3paNU16UnNlVzR3TWtOSGJVRk5kMDFJUVdSUFoxYzRZemx6UTJNaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUoyZUdac1pYaHZjeUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUoyZUdac1pYaHZjeTF1YjJSbExYUnZhMlZ1TFhFM01tTjBJaXdpYTNWaVpYSnVaWFJsY3k1cGJ5OXpaWEoyYVdObFlXTmpiM1Z1ZEM5elpYSjJhV05sTFdGalkyOTFiblF1Ym1GdFpTSTZJblo0Wm14bGVHOXpMVzV2WkdVaUxDSnJkV0psY201bGRHVnpMbWx2TDNObGNuWnBZMlZoWTJOdmRXNTBMM05sY25acFkyVXRZV05qYjNWdWRDNTFhV1FpT2lKbE1qVXlPVE01TkMweVpqYzNMVFF4TjJVdE9ETmpaUzFrTnpNNVl6azBPVFl4TnpRaUxDSnpkV0lpT2lKemVYTjBaVzA2YzJWeWRtbGpaV0ZqWTI5MWJuUTZkbmhtYkdWNGIzTTZkbmhtYkdWNGIzTXRibTlrWlNKOS5vOGNLVWxJMTc1enh6Q3ZEX2NTb1Z2MUVrNndmeFNNeEJMQ18zeGZtbVNoU0JZQmZLYjlOeThNaUlJM2FPMHdHTVFuTWdNeEROV2s3ZEYzdkJCYU5HTVBrTWo1OTA4T01PaWVWNFh4TVEtR2h0SnVvYUhVSFBpLW9PaUF0T3RaeF9FNjBPUEVNSlJBeE93WEdSTHpxbU9Ed0lLUGd2Q3RWUkN6WFVFUDBIZDEzOTRwUW9iTjRjRFoxV0FhRUZKcDczbWtnR2F6S0I3Vnh4RGJVOFlnZ3ZRT1UzaFpvY25IbmN3Q0h0V3R4ODNrSDZ6MG1FZXVLWllIYVlLMlJHaHlmczhHZEk0UWN3LWQxNDgybndVSzA3UDE2TFIzWGtUV3BhWG5hZWRuc0c5TERHMG5iZ1NXTVRZNzhXeDVsRFZBaGNGajQyalI3b0Roc0lIV3l4eTA5Wmc= - kind: Secret - metadata: - annotations: - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"v1","data":{"ca.crt":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1ERXhNakF3TlRreU5Wb1hEVE14TURFeE1EQXdOVGt5TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTE5RCjg1NHp5S1dHWUU0RW5WQzdscUkrcEI1cEtjOVBpRVNpbkR6TVMyZUczUWY4UUQ4U1FMOElQUG1GWVlyM2RBam0Kc3BFZzRxSElwNkVjVzB0S2dtWG50UmJ2RnNHSzVzU3JQY0hBejJIWjhEV1d5OXJKL1dYVHk1YmF0Q3NGWUhpRQptcnpKYnNIL2JMY3BYaFo1bys5bmIwRStSU3Q4ZTBGL1NaVEJLWTBlUGZHekZCenBSUWpWRmxPM3h5OW0xcXJhCkNkNHlmNk9TOUxjaUQyazZwOTJQMThIT1FiYmY0MWttdWNnUUFLMC8zMHAwbkVaUk42bVkzNUVJTGNidzNyMW4KTE4vd1UyQ1cxZExEWDZzUTBCRHcyazNDZkVmNTUxRDN5ZHAzU3dqUW5Qd25mVVQ1NCswMURjMG9ZOWh4MThaeQpOMWNHZVZ5VENxeFFRaS9pallNQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFIMTVVNjEzR3BUWVpYclNvdEpQbnU5aTh6TXIKaUdkdUcyUTZsZWhneFhiNkZQamw2TVgzOEJObDVKMVRNUUIzUVhjZk1QcEpMVmF3UWRXLzdoeE9ONGtzOFhRcQp0M2dGL3JhVjk0TWk0azJweDE0U0I1TEE4enlJb0N4SXdkam1yUTIwL1FqNTB2V1pXV1QwbXhwTk4vRk1sdkl3CktmRVFVQkNkUnJFdzlES0xjc3J1aGZwdFhqb3Z5eWpyc0VJbHFmVUx2U2x5M2U5VzJ6YlIvWExLVXVsL1d3VFkKRW1SRzdPUVJnZXFUZWpEQWFrSFZXcGxlVmJ6bkdWZ1FTZzNWRHlSY21rUmE4a1QvcjZ1OS8zRkNmMjNXMU5pOQpkdXc1Rk4rbnExRmMyYUVrSVFjRWFGNE1oVURycm5Nd2ZxMzAyekxYVlJhbWFwb2VlNy9PRUU3U2gzaz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=","namespace":"dnhmbGV4b3M=","token":"ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklrRm5jMU5QVEdwYWJuUnRVRnAyY3paNU16UnNlVzR3TWtOSGJVRk5kMDFJUVdSUFoxYzRZemx6UTJNaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUoyZUdac1pYaHZjeUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUoyZUdac1pYaHZjeTF1YjJSbExYUnZhMlZ1TFhFM01tTjBJaXdpYTNWaVpYSnVaWFJsY3k1cGJ5OXpaWEoyYVdObFlXTmpiM1Z1ZEM5elpYSjJhV05sTFdGalkyOTFiblF1Ym1GdFpTSTZJblo0Wm14bGVHOXpMVzV2WkdVaUxDSnJkV0psY201bGRHVnpMbWx2TDNObGNuWnBZMlZoWTJOdmRXNTBMM05sY25acFkyVXRZV05qYjNWdWRDNTFhV1FpT2lKbE1qVXlPVE01TkMweVpqYzNMVFF4TjJVdE9ETmpaUzFrTnpNNVl6azBPVFl4TnpRaUxDSnpkV0lpT2lKemVYTjBaVzA2YzJWeWRtbGpaV0ZqWTI5MWJuUTZkbmhtYkdWNGIzTTZkbmhtYkdWNGIzTXRibTlrWlNKOS5vOGNLVWxJMTc1enh6Q3ZEX2NTb1Z2MUVrNndmeFNNeEJMQ18zeGZtbVNoU0JZQmZLYjlOeThNaUlJM2FPMHdHTVFuTWdNeEROV2s3ZEYzdkJCYU5HTVBrTWo1OTA4T01PaWVWNFh4TVEtR2h0SnVvYUhVSFBpLW9PaUF0T3RaeF9FNjBPUEVNSlJBeE93WEdSTHpxbU9Ed0lLUGd2Q3RWUkN6WFVFUDBIZDEzOTRwUW9iTjRjRFoxV0FhRUZKcDczbWtnR2F6S0I3Vnh4RGJVOFlnZ3ZRT1UzaFpvY25IbmN3Q0h0V3R4ODNrSDZ6MG1FZXVLWllIYVlLMlJHaHlmczhHZEk0UWN3LWQxNDgybndVSzA3UDE2TFIzWGtUV3BhWG5hZWRuc0c5TERHMG5iZ1NXTVRZNzhXeDVsRFZBaGNGajQyalI3b0Roc0lIV3l4eTA5Wmc="},"kind":"Secret","metadata":{"annotations":{"kubernetes.io/service-account.name":"vxflexos-node","kubernetes.io/service-account.uid":"e2529394-2f77-417e-83ce-d739c9496174"},"creationTimestamp":"2021-01-29T01:10:44Z","managedFields":[{"apiVersion":"v1","fieldsType":"FieldsV1","fieldsV1":{"f:data":{".":{},"f:ca.crt":{},"f:namespace":{},"f:token":{}},"f:metadata":{"f:annotations":{".":{},"f:kubernetes.io/service-account.name":{},"f:kubernetes.io/service-account.uid":{}}},"f:type":{}},"manager":"kube-controller-manager","operation":"Update","time":"2021-01-29T01:10:44Z"}],"name":"vxflexos-node-token-q72ct","namespace":"vxflexos","resourceVersion":"4950574","selfLink":"/api/v1/namespaces/vxflexos/secrets/vxflexos-node-token-q72ct","uid":"4ec6134b-3e62-4dfc-ba29-2212d3f6d9dc"},"type":"kubernetes.io/service-account-token"} - kubernetes.io/service-account.name: vxflexos-node - kubernetes.io/service-account.uid: e2529394-2f77-417e-83ce-d739c9496174 - creationTimestamp: "2021-01-29T01:10:44Z" - managedFields: - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:data: - .: {} - f:ca.crt: {} - f:namespace: {} - f:token: {} - f:metadata: - f:annotations: - .: {} - f:kubernetes.io/service-account.name: {} - f:kubernetes.io/service-account.uid: {} - f:type: {} - manager: kube-controller-manager - operation: Update - time: "2021-01-29T01:10:44Z" - - apiVersion: v1 - fieldsType: FieldsV1 - fieldsV1: - f:metadata: - f:annotations: - f:kubectl.kubernetes.io/last-applied-configuration: {} - manager: kubectl - operation: Update - time: "2021-01-30T21:51:39Z" - name: vxflexos-node-token-q72ct - namespace: vxflexos - resourceVersion: "5497948" - selfLink: /api/v1/namespaces/vxflexos/secrets/vxflexos-node-token-q72ct - uid: 4ec6134b-3e62-4dfc-ba29-2212d3f6d9dc - type: kubernetes.io/service-account-token -- apiVersion: apps/v1 - kind: Deployment - metadata: - annotations: - deployment.kubernetes.io/revision: "1" - meta.helm.sh/release-name: vxflexos - meta.helm.sh/release-namespace: vxflexos - creationTimestamp: "2021-01-29T01:10:44Z" - generation: 1 - labels: - app.kubernetes.io/managed-by: Helm - managedFields: - - apiVersion: apps/v1 - fieldsType: FieldsV1 - fieldsV1: - f:metadata: - f:annotations: - .: {} - f:meta.helm.sh/release-name: {} - f:meta.helm.sh/release-namespace: {} - f:labels: - .: {} - f:app.kubernetes.io/managed-by: {} - f:spec: - f:progressDeadlineSeconds: {} - f:replicas: {} - f:revisionHistoryLimit: {} - f:selector: - f:matchLabels: - .: {} - f:name: {} - f:strategy: - f:rollingUpdate: - .: {} - f:maxSurge: {} - f:maxUnavailable: {} - f:type: {} - f:template: - f:metadata: - f:labels: - .: {} - f:name: {} - f:spec: - f:affinity: - .: {} - f:podAntiAffinity: - .: {} - f:requiredDuringSchedulingIgnoredDuringExecution: {} - f:containers: - k:{"name":"attacher"}: - .: {} - f:args: {} - f:env: - .: {} - k:{"name":"ADDRESS"}: - .: {} - f:name: {} - f:value: {} - f:image: {} - f:imagePullPolicy: {} - f:name: {} - f:resources: {} - f:terminationMessagePath: {} - f:terminationMessagePolicy: {} - f:volumeMounts: - .: {} - k:{"mountPath":"/var/run/csi"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"name":"driver"}: - .: {} - f:args: {} - f:command: {} - f:env: - .: {} - k:{"name":"CSI_ENDPOINT"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_DEBUG"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_MODE"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_VXFLEXOS_ENABLELISTVOLUMESNAPSHOT"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_VXFLEXOS_ENABLESNAPSHOTCGDELETE"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_VXFLEXOS_ENDPOINT"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_VXFLEXOS_INSECURE"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_VXFLEXOS_PASSWORD"}: - .: {} - f:name: {} - f:valueFrom: - .: {} - f:secretKeyRef: - .: {} - f:key: {} - f:name: {} - k:{"name":"X_CSI_VXFLEXOS_SYSTEMNAME"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_VXFLEXOS_USER"}: - .: {} - f:name: {} - f:valueFrom: - .: {} - f:secretKeyRef: - .: {} - f:key: {} - f:name: {} - f:image: {} - f:imagePullPolicy: {} - f:name: {} - f:resources: {} - f:terminationMessagePath: {} - f:terminationMessagePolicy: {} - f:volumeMounts: - .: {} - k:{"mountPath":"/var/run/csi"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"mountPath":"/vxflexos-config"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"name":"provisioner"}: - .: {} - f:args: {} - f:env: - .: {} - k:{"name":"ADDRESS"}: - .: {} - f:name: {} - f:value: {} - f:image: {} - f:imagePullPolicy: {} - f:name: {} - f:resources: {} - f:terminationMessagePath: {} - f:terminationMessagePolicy: {} - f:volumeMounts: - .: {} - k:{"mountPath":"/var/run/csi"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"name":"resizer"}: - .: {} - f:args: {} - f:env: - .: {} - k:{"name":"ADDRESS"}: - .: {} - f:name: {} - f:value: {} - f:image: {} - f:imagePullPolicy: {} - f:name: {} - f:resources: {} - f:terminationMessagePath: {} - f:terminationMessagePolicy: {} - f:volumeMounts: - .: {} - k:{"mountPath":"/var/run/csi"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"name":"snapshotter"}: - .: {} - f:args: {} - f:env: - .: {} - k:{"name":"ADDRESS"}: - .: {} - f:name: {} - f:value: {} - f:image: {} - f:imagePullPolicy: {} - f:name: {} - f:resources: {} - f:terminationMessagePath: {} - f:terminationMessagePolicy: {} - f:volumeMounts: - .: {} - k:{"mountPath":"/var/run/csi"}: - .: {} - f:mountPath: {} - f:name: {} - f:dnsPolicy: {} - f:restartPolicy: {} - f:schedulerName: {} - f:securityContext: {} - f:serviceAccount: {} - f:serviceAccountName: {} - f:terminationGracePeriodSeconds: {} - f:volumes: - .: {} - k:{"name":"socket-dir"}: - .: {} - f:emptyDir: {} - f:name: {} - k:{"name":"vxflexos-config"}: - .: {} - f:name: {} - f:secret: - .: {} - f:defaultMode: {} - f:secretName: {} - manager: Go-http-client - operation: Update - time: "2021-01-29T01:10:44Z" - - apiVersion: apps/v1 - fieldsType: FieldsV1 - fieldsV1: - f:metadata: - f:annotations: - f:deployment.kubernetes.io/revision: {} - f:status: - f:availableReplicas: {} - f:conditions: - .: {} - k:{"type":"Available"}: - .: {} - f:lastTransitionTime: {} - f:lastUpdateTime: {} - f:message: {} - f:reason: {} - f:status: {} - f:type: {} - k:{"type":"Progressing"}: - .: {} - f:lastTransitionTime: {} - f:lastUpdateTime: {} - f:message: {} - f:reason: {} - f:status: {} - f:type: {} - f:observedGeneration: {} - f:readyReplicas: {} - f:replicas: {} - f:updatedReplicas: {} - manager: kube-controller-manager - operation: Update - time: "2021-01-29T01:10:49Z" - name: vxflexos-controller - namespace: vxflexos - resourceVersion: "4950672" - selfLink: /apis/apps/v1/namespaces/vxflexos/deployments/vxflexos-controller - uid: d0a7a215-e76f-44bf-9a62-932ccd97f640 - spec: - progressDeadlineSeconds: 600 - replicas: 1 - revisionHistoryLimit: 10 - selector: - matchLabels: - name: vxflexos-controller - strategy: - rollingUpdate: - maxSurge: 25% - maxUnavailable: 25% - type: RollingUpdate - template: - metadata: - creationTimestamp: null - labels: - name: vxflexos-controller - spec: - affinity: - podAntiAffinity: - requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: name - operator: In - values: - - vxflexos-controller - topologyKey: kubernetes.io/hostname - containers: - - args: - - --csi-address=$(ADDRESS) - - --v=5 - - --leader-election=true - env: - - name: ADDRESS - value: /var/run/csi/csi.sock - image: k8s.gcr.io/sig-storage/csi-attacher:v3.0.0 - imagePullPolicy: IfNotPresent - name: attacher - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/run/csi - name: socket-dir - - args: - - --csi-address=$(ADDRESS) - - --feature-gates=Topology=true - - --volume-name-prefix=k8s - - --volume-name-uuid-length=10 - - --leader-election=true - - --timeout=120s - - --v=5 - - --default-fstype=ext4 - - --extra-create-metadata - env: - - name: ADDRESS - value: /var/run/csi/csi.sock - image: k8s.gcr.io/sig-storage/csi-provisioner:v2.0.2 - imagePullPolicy: IfNotPresent - name: provisioner - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/run/csi - name: socket-dir - - args: - - --csi-address=$(ADDRESS) - - --timeout=120s - - --v=5 - - --leader-election=true - env: - - name: ADDRESS - value: /var/run/csi/csi.sock - image: k8s.gcr.io/sig-storage/csi-snapshotter:v3.0.2 - imagePullPolicy: Always - name: snapshotter - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/run/csi - name: socket-dir - - args: - - --csi-address=$(ADDRESS) - - --v=5 - - --leader-election=true - env: - - name: ADDRESS - value: /var/run/csi/csi.sock - image: quay.io/k8scsi/csi-resizer:v1.0.0 - imagePullPolicy: IfNotPresent - name: resizer - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/run/csi - name: socket-dir - - args: - - --leader-election - - --array-config=/vxflexos-config/config - command: - - /csi-vxflexos.sh - env: - - name: CSI_ENDPOINT - value: /var/run/csi/csi.sock - - name: X_CSI_MODE - value: controller - - name: X_CSI_DEBUG - value: "true" - - name: X_CSI_VXFLEXOS_ENDPOINT - value: https://10.0.0.1 - - name: X_CSI_VXFLEXOS_USER - valueFrom: - secretKeyRef: - key: username - name: vxflexos-creds - - name: X_CSI_VXFLEXOS_PASSWORD - valueFrom: - secretKeyRef: - key: password - name: vxflexos-creds - - name: X_CSI_VXFLEXOS_INSECURE - value: "true" - - name: X_CSI_VXFLEXOS_SYSTEMNAME - value: 542a2d5f5122210f - - name: X_CSI_VXFLEXOS_ENABLESNAPSHOTCGDELETE - value: "false" - - name: X_CSI_VXFLEXOS_ENABLELISTVOLUMESNAPSHOT - value: "false" - image: 10.0.0.4:5000/csi-vxflexos:latest - imagePullPolicy: Always - name: driver - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/run/csi - name: socket-dir - - mountPath: /vxflexos-config - name: vxflexos-config - dnsPolicy: ClusterFirst - restartPolicy: Always - schedulerName: default-scheduler - securityContext: {} - serviceAccount: vxflexos-controller - serviceAccountName: vxflexos-controller - terminationGracePeriodSeconds: 30 - volumes: - - emptyDir: {} - name: socket-dir - - name: vxflexos-config - secret: - defaultMode: 420 - secretName: vxflexos-config - status: - availableReplicas: 1 - conditions: - - lastTransitionTime: "2021-01-29T01:10:49Z" - lastUpdateTime: "2021-01-29T01:10:49Z" - message: Deployment has minimum availability. - reason: MinimumReplicasAvailable - status: "True" - type: Available - - lastTransitionTime: "2021-01-29T01:10:44Z" - lastUpdateTime: "2021-01-29T01:10:49Z" - message: ReplicaSet "vxflexos-controller-7947f4fbf9" has successfully progressed. - reason: NewReplicaSetAvailable - status: "True" - type: Progressing - observedGeneration: 1 - readyReplicas: 1 - replicas: 1 - updatedReplicas: 1 -- apiVersion: apps/v1 - kind: DaemonSet - metadata: - annotations: - deprecated.daemonset.template.generation: "1" - meta.helm.sh/release-name: vxflexos - meta.helm.sh/release-namespace: vxflexos - creationTimestamp: "2021-01-29T01:10:44Z" - generation: 1 - labels: - app.kubernetes.io/managed-by: Helm - managedFields: - - apiVersion: apps/v1 - fieldsType: FieldsV1 - fieldsV1: - f:metadata: - f:annotations: - .: {} - f:deprecated.daemonset.template.generation: {} - f:meta.helm.sh/release-name: {} - f:meta.helm.sh/release-namespace: {} - f:labels: - .: {} - f:app.kubernetes.io/managed-by: {} - f:spec: - f:revisionHistoryLimit: {} - f:selector: - f:matchLabels: - .: {} - f:app: {} - f:template: - f:metadata: - f:labels: - .: {} - f:app: {} - f:spec: - f:containers: - k:{"name":"driver"}: - .: {} - f:args: {} - f:command: {} - f:env: - .: {} - k:{"name":"CSI_ENDPOINT"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_ALLOW_RWO_MULTI_POD_ACCESS"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_DEBUG"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_MODE"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_PRIVATE_MOUNT_DIR"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_VXFLEXOS_ENDPOINT"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_VXFLEXOS_INSECURE"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"X_CSI_VXFLEXOS_PASSWORD"}: - .: {} - f:name: {} - f:valueFrom: - .: {} - f:secretKeyRef: - .: {} - f:key: {} - f:name: {} - k:{"name":"X_CSI_VXFLEXOS_USER"}: - .: {} - f:name: {} - f:valueFrom: - .: {} - f:secretKeyRef: - .: {} - f:key: {} - f:name: {} - f:image: {} - f:imagePullPolicy: {} - f:name: {} - f:resources: {} - f:securityContext: - .: {} - f:allowPrivilegeEscalation: {} - f:capabilities: - .: {} - f:add: {} - f:privileged: {} - f:terminationMessagePath: {} - f:terminationMessagePolicy: {} - f:volumeMounts: - .: {} - k:{"mountPath":"/dev"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"mountPath":"/var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices"}: - .: {} - f:mountPath: {} - f:mountPropagation: {} - f:name: {} - k:{"mountPath":"/var/lib/kubelet/plugins/vxflexos.emc.dell.com"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"mountPath":"/var/lib/kubelet/pods"}: - .: {} - f:mountPath: {} - f:mountPropagation: {} - f:name: {} - k:{"mountPath":"/vxflexos-config"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"name":"registrar"}: - .: {} - f:args: {} - f:env: - .: {} - k:{"name":"ADDRESS"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"KUBE_NODE_NAME"}: - .: {} - f:name: {} - f:valueFrom: - .: {} - f:fieldRef: - .: {} - f:apiVersion: {} - f:fieldPath: {} - f:image: {} - f:imagePullPolicy: {} - f:name: {} - f:resources: {} - f:terminationMessagePath: {} - f:terminationMessagePolicy: {} - f:volumeMounts: - .: {} - k:{"mountPath":"/csi"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"mountPath":"/registration"}: - .: {} - f:mountPath: {} - f:name: {} - f:dnsPolicy: {} - f:hostNetwork: {} - f:initContainers: - .: {} - k:{"name":"sdc"}: - .: {} - f:env: - .: {} - k:{"name":"MDM"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"MODE"}: - .: {} - f:name: {} - f:value: {} - k:{"name":"NODENAME"}: - .: {} - f:name: {} - f:valueFrom: - .: {} - f:fieldRef: - .: {} - f:apiVersion: {} - f:fieldPath: {} - k:{"name":"REPO_ADDRESS"}: - .: {} - f:name: {} - k:{"name":"REPO_PASSWORD"}: - .: {} - f:name: {} - f:valueFrom: - .: {} - f:secretKeyRef: - .: {} - f:key: {} - f:name: {} - k:{"name":"REPO_USER"}: - .: {} - f:name: {} - f:valueFrom: - .: {} - f:secretKeyRef: - .: {} - f:key: {} - f:name: {} - f:image: {} - f:imagePullPolicy: {} - f:name: {} - f:resources: {} - f:securityContext: - .: {} - f:privileged: {} - f:terminationMessagePath: {} - f:terminationMessagePolicy: {} - f:volumeMounts: - .: {} - k:{"mountPath":"/config"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"mountPath":"/dev"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"mountPath":"/host-os-release"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"mountPath":"/rules.d"}: - .: {} - f:mountPath: {} - f:name: {} - k:{"mountPath":"/storage"}: - .: {} - f:mountPath: {} - f:name: {} - f:restartPolicy: {} - f:schedulerName: {} - f:securityContext: {} - f:serviceAccount: {} - f:serviceAccountName: {} - f:terminationGracePeriodSeconds: {} - f:volumes: - .: {} - k:{"name":"dev"}: - .: {} - f:hostPath: - .: {} - f:path: {} - f:type: {} - f:name: {} - k:{"name":"driver-path"}: - .: {} - f:hostPath: - .: {} - f:path: {} - f:type: {} - f:name: {} - k:{"name":"os-release"}: - .: {} - f:hostPath: - .: {} - f:path: {} - f:type: {} - f:name: {} - k:{"name":"pods-path"}: - .: {} - f:hostPath: - .: {} - f:path: {} - f:type: {} - f:name: {} - k:{"name":"registration-dir"}: - .: {} - f:hostPath: - .: {} - f:path: {} - f:type: {} - f:name: {} - k:{"name":"sdc-config"}: - .: {} - f:hostPath: - .: {} - f:path: {} - f:type: {} - f:name: {} - k:{"name":"sdc-storage"}: - .: {} - f:hostPath: - .: {} - f:path: {} - f:type: {} - f:name: {} - k:{"name":"udev-d"}: - .: {} - f:hostPath: - .: {} - f:path: {} - f:type: {} - f:name: {} - k:{"name":"volumedevices-path"}: - .: {} - f:hostPath: - .: {} - f:path: {} - f:type: {} - f:name: {} - k:{"name":"vxflexos-config"}: - .: {} - f:name: {} - f:secret: - .: {} - f:defaultMode: {} - f:secretName: {} - f:updateStrategy: - f:rollingUpdate: - .: {} - f:maxUnavailable: {} - f:type: {} - manager: Go-http-client - operation: Update - time: "2021-01-29T01:10:44Z" - - apiVersion: apps/v1 - fieldsType: FieldsV1 - fieldsV1: - f:status: - f:currentNumberScheduled: {} - f:desiredNumberScheduled: {} - f:numberAvailable: {} - f:numberReady: {} - f:observedGeneration: {} - f:updatedNumberScheduled: {} - manager: kube-controller-manager - operation: Update - time: "2021-01-29T01:10:49Z" - name: vxflexos-node - namespace: vxflexos - resourceVersion: "4950674" - selfLink: /apis/apps/v1/namespaces/vxflexos/daemonsets/vxflexos-node - uid: c001955b-25c2-4026-a9bb-3255ba55d3b1 - spec: - revisionHistoryLimit: 10 - selector: - matchLabels: - app: vxflexos-node - template: - metadata: - creationTimestamp: null - labels: - app: vxflexos-node - spec: - containers: - - args: - - --array-config=/vxflexos-config/config - command: - - /csi-vxflexos.sh - env: - - name: CSI_ENDPOINT - value: unix:///var/lib/kubelet/plugins/vxflexos.emc.dell.com/csi_sock - - name: X_CSI_MODE - value: node - - name: X_CSI_DEBUG - value: "true" - - name: X_CSI_PRIVATE_MOUNT_DIR - value: /var/lib/kubelet/plugins/vxflexos.emc.dell.com/disks - - name: X_CSI_VXFLEXOS_USER - valueFrom: - secretKeyRef: - key: username - name: vxflexos-creds - - name: X_CSI_VXFLEXOS_PASSWORD - valueFrom: - secretKeyRef: - key: password - name: vxflexos-creds - - name: X_CSI_VXFLEXOS_ENDPOINT - value: https://10.0.0.1 - - name: X_CSI_VXFLEXOS_INSECURE - value: "true" - - name: X_CSI_ALLOW_RWO_MULTI_POD_ACCESS - value: "false" - image: 10.0.0.4:5000/csi-vxflexos:latest - imagePullPolicy: Always - name: driver - resources: {} - securityContext: - allowPrivilegeEscalation: true - capabilities: - add: - - SYS_ADMIN - privileged: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /var/lib/kubelet/plugins/vxflexos.emc.dell.com - name: driver-path - - mountPath: /var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices - mountPropagation: Bidirectional - name: volumedevices-path - - mountPath: /var/lib/kubelet/pods - mountPropagation: Bidirectional - name: pods-path - - mountPath: /dev - name: dev - - mountPath: /vxflexos-config - name: vxflexos-config - - args: - - --v=5 - - --csi-address=$(ADDRESS) - - --kubelet-registration-path=/var/lib/kubelet/plugins/vxflexos.emc.dell.com/csi_sock - env: - - name: ADDRESS - value: /csi/csi_sock - - name: KUBE_NODE_NAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - image: k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.0.1 - imagePullPolicy: IfNotPresent - name: registrar - resources: {} - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /registration - name: registration-dir - - mountPath: /csi - name: driver-path - dnsPolicy: ClusterFirstWithHostNet - hostNetwork: true - initContainers: - - env: - - name: NODENAME - valueFrom: - fieldRef: - apiVersion: v1 - fieldPath: spec.nodeName - - name: MODE - value: config - - name: MDM - value: 10.0.0.2,10.0.0.3 - - name: REPO_ADDRESS - - name: REPO_USER - valueFrom: - secretKeyRef: - key: username - name: sdc-repo-creds - - name: REPO_PASSWORD - valueFrom: - secretKeyRef: - key: password - name: sdc-repo-creds - image: dellemc/sdc:3.5.1.1 - imagePullPolicy: Always - name: sdc - resources: {} - securityContext: - privileged: true - terminationMessagePath: /dev/termination-log - terminationMessagePolicy: File - volumeMounts: - - mountPath: /dev - name: dev - - mountPath: /host-os-release - name: os-release - - mountPath: /storage - name: sdc-storage - - mountPath: /rules.d - name: udev-d - - mountPath: /config - name: sdc-config - restartPolicy: Always - schedulerName: default-scheduler - securityContext: {} - serviceAccount: vxflexos-node - serviceAccountName: vxflexos-node - terminationGracePeriodSeconds: 30 - volumes: - - hostPath: - path: /var/lib/kubelet/plugins_registry/ - type: DirectoryOrCreate - name: registration-dir - - hostPath: - path: /var/lib/kubelet/plugins/vxflexos.emc.dell.com - type: DirectoryOrCreate - name: driver-path - - hostPath: - path: /var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices - type: DirectoryOrCreate - name: volumedevices-path - - hostPath: - path: /var/lib/kubelet/pods - type: Directory - name: pods-path - - hostPath: - path: /dev - type: Directory - name: dev - - hostPath: - path: /var/emc-scaleio - type: DirectoryOrCreate - name: sdc-storage - - hostPath: - path: /etc/udev/rules.d - type: Directory - name: udev-d - - hostPath: - path: /etc/os-release - type: File - name: os-release - - hostPath: - path: /var/sio-config - type: DirectoryOrCreate - name: sdc-config - - name: vxflexos-config - secret: - defaultMode: 420 - secretName: vxflexos-config - updateStrategy: - rollingUpdate: - maxUnavailable: 1 - type: RollingUpdate - status: - currentNumberScheduled: 2 - desiredNumberScheduled: 2 - numberAvailable: 2 - numberMisscheduled: 0 - numberReady: 2 - observedGeneration: 1 - updatedNumberScheduled: 2 -kind: List -metadata: - resourceVersion: "" - selfLink: "" diff --git a/cmd/karavictl/cmd/testdata/kubectl_get_all_in_powermax_new.yaml b/cmd/karavictl/cmd/testdata/kubectl_get_all_in_powermax_new.yaml new file mode 100644 index 00000000..2357d71c --- /dev/null +++ b/cmd/karavictl/cmd/testdata/kubectl_get_all_in_powermax_new.yaml @@ -0,0 +1,1166 @@ +apiVersion: v1 +items: +- apiVersion: v1 + data: + ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EUXlPREUxTWpBek5Gb1hEVE14TURReU5qRTFNakF6TkZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTnBnCm9yd3EzMDBJVVRKVkFZUVYzSHJieWxjdnFPTDRSUWlIVVdhaTY0UXBzR1RwTytvNHZMd1Y0MUE3enRxVFFLM28KaUcxR2pJUDBsRkdQYXJzNXFCNkU5MkRMK2hJU2kyaFM2THJtdHI3YlVua2NKb0Z4K0djbk5JUHcxUXpjNlRhUgpoK0NpQmZKVVEzU3V4YTVGaW5wTVlYcGFqVkRVY3ZZQWJBTUMvMnFDaFhaOU82d1RjRE5LUzZoT3V6emcxaWpCClc5cUhRdXBQTFpmeDdDSk1LVEhjTG9QaEoyS29jU2tQMUpvQWIzdzNlcTF2bFcwV1BVVzBaZ3gxeWx1OU11M3cKU2ZGdStOaDJnaExJMGNzMUFHZlFGL1lKaE5XSWhCZHIvR0k2Yk5XRkJ4b1ZoaVZKazhuMUZYbHQ5U0ttY0taRgpRY3BEaDVHaXVNanZ1OEhTZWRNQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZMTWhMOWQwMXpjWUJ6SGZMWHJCMU1ndzFqUHlNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBZEhvQzlxZkRWSDl4OGJkdnZkVjIwekJOaGpyTDVWaVMxVkZBSkZaeVhMNEwwRmJpdApOTUxYRllIbEJsd3lmS2I5eER2Mzhhd1BkK1lLVWVib0tqY0NXYXVLNnNEc2pxOTltQ3p0Y3haV3RJL1RKQXM5Ckg1MGp5eCtCUnZyWGZZZEQyOXRJWHVBRDJVQmVmNk9kSmVPNnV2Mlh0V3l4UkZwbW1YNjFQdGtCL1c1RVB2VFIKbG4ySTVrb1hZOTZBakpqTWZnVkpKdUZYWjAyWUdnT3ZGaHQ4MitlMUgxY2pGdWIzbkVQTzVGZjA4bWdXdGU3Zwo1Vi8xNWhQRlZDM25iNkt4cmNydkxmTnJEZERJNGtaTlVHL0dRNDZqZXBUbVVUaFNuRGd5WlpWakllY1JHU0NWCldJNW91WU83WEx1NnQvZVZ5S1IrMVNZSUtEN2E1Wk15UDdmcgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + namespace: cG93ZXJtYXg= + token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkluVkpORjl6TXpsYVQxSk9XUzFQT0U1NmFuQlVaWEJWVFV0QlZrVlhVR1pGUjI5TmJXOTNhMWswY1UwaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUp3YjNkbGNtMWhlQ0lzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUprWldaaGRXeDBMWFJ2YTJWdUxXdzRlRFF5SWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXpaWEoyYVdObExXRmpZMjkxYm5RdWJtRnRaU0k2SW1SbFptRjFiSFFpTENKcmRXSmxjbTVsZEdWekxtbHZMM05sY25acFkyVmhZMk52ZFc1MEwzTmxjblpwWTJVdFlXTmpiM1Z1ZEM1MWFXUWlPaUkxT0RSaVlqUTBNUzAzTVRNM0xUUTJOR1V0WWpsa01pMDVaR0prWlRabU56Z3lNREFpTENKemRXSWlPaUp6ZVhOMFpXMDZjMlZ5ZG1salpXRmpZMjkxYm5RNmNHOTNaWEp0WVhnNlpHVm1ZWFZzZENKOS5RUm9OcUlnVF82cGdxZ0JTSXlFeTllOGRsYlhONUlqRnQ5bGE0U1oyZS1kRDRLMlNZVkNObnFPdGtjNlFoRDlTT0tVOEkyUHhUN1RIOU1YWW9wd09oamNnYWdGajZxTkk4a0ItVDkwY3RrbjJYeUpkSzI0Q0p2bFFYanY5Z2hFOHJfWVptN0FiM0ljb05hSk9KTGJuZFY3cDhHVnJDVkk2RUpNQnRnb2ZZLTRtTDNqSnl3SDlTOTZzeUtmVS1keWtrdTIzRldoaTk1V2laRE8tbjVvXzF5OXp2N0FjVkl5ZTBIOXhOTkJOdTVUbmFRb0NidU9GdFhYdVdpcS1XQWlfazN2NDRLU3BnT0gzYk9famxvZ0E5WFlJd1dOVDdZT05qMFRxMTVmQlJ5WUpNMzJNcmRrdEFGQ0dScUJRWlpadUJQQ1BPT2hhOHItQ2xSU09yNHNNNkE= + kind: Secret + metadata: + annotations: + kubernetes.io/service-account.name: default + kubernetes.io/service-account.uid: 584bb441-7137-464e-b9d2-9dbde6f78200 + creationTimestamp: "2021-04-28T15:49:15Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:ca.crt: {} + f:namespace: {} + f:token: {} + f:metadata: + f:annotations: + .: {} + f:kubernetes.io/service-account.name: {} + f:kubernetes.io/service-account.uid: {} + f:type: {} + manager: kube-controller-manager + operation: Update + time: "2021-04-28T15:49:15Z" + name: default-token-l8x42 + namespace: powermax + resourceVersion: "3224" + uid: 59071f98-f54e-44bb-b7fb-7f509958ca31 + type: kubernetes.io/service-account-token +- apiVersion: v1 + data: + ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EUXlPREUxTWpBek5Gb1hEVE14TURReU5qRTFNakF6TkZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTnBnCm9yd3EzMDBJVVRKVkFZUVYzSHJieWxjdnFPTDRSUWlIVVdhaTY0UXBzR1RwTytvNHZMd1Y0MUE3enRxVFFLM28KaUcxR2pJUDBsRkdQYXJzNXFCNkU5MkRMK2hJU2kyaFM2THJtdHI3YlVua2NKb0Z4K0djbk5JUHcxUXpjNlRhUgpoK0NpQmZKVVEzU3V4YTVGaW5wTVlYcGFqVkRVY3ZZQWJBTUMvMnFDaFhaOU82d1RjRE5LUzZoT3V6emcxaWpCClc5cUhRdXBQTFpmeDdDSk1LVEhjTG9QaEoyS29jU2tQMUpvQWIzdzNlcTF2bFcwV1BVVzBaZ3gxeWx1OU11M3cKU2ZGdStOaDJnaExJMGNzMUFHZlFGL1lKaE5XSWhCZHIvR0k2Yk5XRkJ4b1ZoaVZKazhuMUZYbHQ5U0ttY0taRgpRY3BEaDVHaXVNanZ1OEhTZWRNQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZMTWhMOWQwMXpjWUJ6SGZMWHJCMU1ndzFqUHlNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBZEhvQzlxZkRWSDl4OGJkdnZkVjIwekJOaGpyTDVWaVMxVkZBSkZaeVhMNEwwRmJpdApOTUxYRllIbEJsd3lmS2I5eER2Mzhhd1BkK1lLVWVib0tqY0NXYXVLNnNEc2pxOTltQ3p0Y3haV3RJL1RKQXM5Ckg1MGp5eCtCUnZyWGZZZEQyOXRJWHVBRDJVQmVmNk9kSmVPNnV2Mlh0V3l4UkZwbW1YNjFQdGtCL1c1RVB2VFIKbG4ySTVrb1hZOTZBakpqTWZnVkpKdUZYWjAyWUdnT3ZGaHQ4MitlMUgxY2pGdWIzbkVQTzVGZjA4bWdXdGU3Zwo1Vi8xNWhQRlZDM25iNkt4cmNydkxmTnJEZERJNGtaTlVHL0dRNDZqZXBUbVVUaFNuRGd5WlpWakllY1JHU0NWCldJNW91WU83WEx1NnQvZVZ5S1IrMVNZSUtEN2E1Wk15UDdmcgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + namespace: cG93ZXJtYXg= + token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkluVkpORjl6TXpsYVQxSk9XUzFQT0U1NmFuQlVaWEJWVFV0QlZrVlhVR1pGUjI5TmJXOTNhMWswY1UwaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUp3YjNkbGNtMWhlQ0lzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUp3YjNkbGNtMWhlQzFqYjI1MGNtOXNiR1Z5TFhSdmEyVnVMV1kwTlRWa0lpd2lhM1ZpWlhKdVpYUmxjeTVwYnk5elpYSjJhV05sWVdOamIzVnVkQzl6WlhKMmFXTmxMV0ZqWTI5MWJuUXVibUZ0WlNJNkluQnZkMlZ5YldGNExXTnZiblJ5YjJ4c1pYSWlMQ0pyZFdKbGNtNWxkR1Z6TG1sdkwzTmxjblpwWTJWaFkyTnZkVzUwTDNObGNuWnBZMlV0WVdOamIzVnVkQzUxYVdRaU9pSXhZVGMwWTJaak1pMDBOMlJpTFRSbE9UTXRPREZqTkMwNU1ETTFZbU5tTlRaaU9EVWlMQ0p6ZFdJaU9pSnplWE4wWlcwNmMyVnlkbWxqWldGalkyOTFiblE2Y0c5M1pYSnRZWGc2Y0c5M1pYSnRZWGd0WTI5dWRISnZiR3hsY2lKOS5zWDhsSFhsRlVPaHZ5Q3dfQzVydzZmMm82YWQxZ1ZveFA4Vl9Nd3cwQTdIdTVUTnlpV3lJVVNVLUo5MVdMZzU1b1oyZERHZmhfejBnVFk4YUtMTDMxekdQVUlPLXRzMlBWT3hKOUUyQTJxSFcyTGFRYndIOEF0UmRneWNPUjdndGVueWpua0FIV0JTb1Azel9PUHd2UVlrcm5BX0oyVE1vVlNETzJYWHB2X2RQOFA3Q2FxMmtPalpCUHc5X3VtUHFFSHZpcFNLUk5NN3JwQlBrclNxdE1aOVptVGVZeGhxWVlIS0RLR0Q1eUdXTU45eUQ0emRXS0p1T1N6VElaanQ2S2txam9DRDZkSmlnNFRpOUhNRG1RaS01UXh4ZU04aGVmM2ZCbGtZYjNxX2FBcW9Fa3hWZm5XS2J4bDJta1Vyc3JUVFdnWWlGV2R1RGlXR0pBdFJ2elE= + kind: Secret + metadata: + annotations: + kubernetes.io/service-account.name: powermax-controller + kubernetes.io/service-account.uid: 1a74cfc2-47db-4e93-81c4-9035bcf56b85 + creationTimestamp: "2021-04-28T15:49:35Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:ca.crt: {} + f:namespace: {} + f:token: {} + f:metadata: + f:annotations: + .: {} + f:kubernetes.io/service-account.name: {} + f:kubernetes.io/service-account.uid: {} + f:type: {} + manager: kube-controller-manager + operation: Update + time: "2021-04-28T15:49:35Z" + name: powermax-controller-token-f455d + namespace: powermax + resourceVersion: "3299" + uid: d9fe0869-e178-4826-b048-796ff58700e8 + type: kubernetes.io/service-account-token +- apiVersion: v1 + data: + password: password + username: username + kind: Secret + metadata: + creationTimestamp: "2021-04-28T15:49:31Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:password: {} + f:username: {} + f:type: {} + manager: kubectl-create + operation: Update + time: "2021-04-28T15:49:31Z" + name: powermax-creds + namespace: powermax + resourceVersion: "3288" + uid: 2c206bdd-6714-46a5-8ab0-3d18141a5975 + type: Opaque +- apiVersion: v1 + data: + release: SDRzSUFBQUFBQUFDLyt5OStXL2l5TFk0L3E4ZzN2ZUg5NlJPWXB1UWFTSzF2c0lFR3hOd2dvMFhmUHNxOGhic1VGNnVGOEJjemYvK1VaVVhETmdzV1hybTNkYzlhZzBOVmFkT25UcjdPV1gvdSttcWp0bThiL3JleWd3Y2RkMzgxclRkVjY5NS8rL21xeDJFMFl0aCtzQkxUS041M3lRd0FyL0NicStJNzFPOGZYLzd4ejF4ZDMzMy9mc2YzN0c3Mi9ZVmRudVBZYzF2VGFDK1o1WmhBak5DNDlFL1FqMncvY2oyM09aOWszSERTQVdnb1h1T0R3YzF2elhEU0kzaXNIbmZMTmI1ODF0VHQ5UWdnb2c3WnFRYWFxVEN6OW4yOU5DK0ttM1I4dEMzVmhUNTRmM056ZHlPckZpNzFqM254akFCdU5rYkhYcHhvSnRoOC80ZjU4MzQ1N2ZtMGd6Q0ZIdjgrdTRhTzlqVE14dzdWdGVOSHM4MC9ydm51WkZxdTJiUTRDTXZVT2RtZzNFak0zaFZkZk4vR2taZ0w4Mmc4UmhyWnVDYWtSbitkRzAzTXVlQkNtRmRONmFXSFRiUTNodTJxNFBZTU1PR3VUU0RKTEpzZDk0SXpIL0ZkbUFhamNocitJRzN0Q0ZlamFXdG9xWFY4S2U3TWdGb3FHRkRiUlJZWldqMGdCcUcxei9kNXJmbXdreFdYbUFnSXVpaGpjNEFqWUc3ZFZRNzJ3RDh2U0Q2Z3dsQWY5eHIvdm5QYjAxYlIvdk82YWN1MVVnTlF2dzZKV1FjbW9IdXVaSHBSb2ltOFEyQmRkcmZienUzLzMvNGc4Q3duekdHRVhmTEg3Zk5iMDNWdDhXQ3Vrc2NmZU9MZS9UKzgxc1RlUHFpZWUvR0FIeHJScWJqQXpVeWQ5QXJ2cng1c1V6Z20wRjRIZmtBSGhYaW5XYnp6MjhWWXlHYWdRZUFHVnducWxNYVBwTkpYM1RFUkNmQVVudno1c1piLzFFbFFLdzhlSE9CRUJQREFXK0tRTDNOaUE2dXVaTkhUUkt4bWNSWkJ0Mi82OW5kdWVaUWtUTDE1bVlybkkvQUVHaTBhT21FRUUvaDl6elplZVh4TjQxb1k3clRDVFZhVElvNU1ydWFTU3g0c3NrL3pLUWJDNDRZS2hLMVVmajIwMHpDZ2Q0aXJSa2h6RjlsN0hIRVkxSFBpWHpObWR3eGZUWTBaQlpUNUNHdkVXdlFjNmlWS2lwQWQxbGZJMjd2bU1IUW5rbmplQ2FMbUVwM0VsWDJMWU1HUzgxdUIwK0RjYXhLMzVkd2ovdjdNRnRoeE5EQVlXaHh6ZlRhMGt4YTQ0bzhqbWN0Y1dQUW5ZZ2JESDNERVpOMFgyMmdPWlN0MGVLQ0dYQ0pJWW1kMTRrM1oraTJwVW5DSFRPSS9tQUdaS0pLYlV5eHUvWlFIa2Z3NzR6b3hNWmd1TlRvTmRCdDVwQmVHVTNPV0o5QXYwUDZ3blVIMFI4am5nVGFnQVhNQU8rODkxeFNHb2l4MG9Ody9jU1Exa0RmZUk5TXJ4c3hOTFZTQlNQUld1SkszM2h6S1JtK2FVUW5VV2dRejJRTzBqNVdOOVptNUlBbEF6QTRaODRNaGtBbk9yanVzQ0NiazU2eFBMWmxpSGV2TzRkN21ybmpPNFlLYllVUU1jWmV6Um5Yc0F5YTlkQm5aKzNycllrOTZuVnRoUlpEUmVaQU9rWmNLVFNGS1R3VE1yM2htKzZJbGtFTEdWeHNEdm1hYXcyWGhreHVubXhTWSt5aEFmZkk5TWhFa2RtbElRL2ZGRGxiVjFhQTVuS2JMZDRLMEoxaE9xKzB2a0ZRMkl5WW84K3oxaERNcW5GWnpXVHVUZTJsNjQxNDB0SnBNTkNkRHE0UDB2V08wQ2ZXQ0E3b1NZRXJvY2hETy92TlZlUVVENDBHRzZPSDFtcDlZSzJWSWc4M0twUWxxWTBaVGljMG9OeGR2UFl1L1UrY1UwWWJadjZlYzlKcHBLYzJCaTNHeGtCWmFnTXhVaVEybkVrZ3FzRzdIaS9IQU5rK1FraURBNzY3OEV6MUZyZlVIY3BWK0VMUEZEeXVPK0pHYTRuSmpCRFRQYm9zcHJXR2xrS0lieHBOYlhSQ3JPRzlJemltNHl2a2tqbXlMb24wcE43aUlMOFRHckhHTlFuaDRHdnllS20zT01zWTFPRHlwZlRJejVMQ0RKcDZVMm44aUR5KzU5eU84RnR4RnNJNSt1dE5KOEE3WlJSOXhuV2FPNjZuTHNNblAwUExHSERXakxBaUtNdDYwdGtZTklVWk5YcFdwMU05Vm91RHcyNVV2ZzN0VGpLVEREQnl3bHM5YWZ0YVVpK2JzeGJyYTA1bm9VZ2dWcHpPcitMbnBUSTRZVXNxOUxjODhkNFlHdHJFVG91aGxhVnVreHZOb1ZZNllTMk5BUWYwK1R0MEV5RkNYWU9keHhkSDVJWm9XL3FBOWJUV0pINlhETWxzUEpQSmpVcDNNT1J2SUYxNU9ZM1FaNWxjRkRiT1lSTW9uNWxjTFJScERVN3djWUhINkgwOHZUMFRtbDFxTHRKWm0xR0x4V1l5aDlmUStSejUra3k4d3BuTW52Wm5xbm53Ni9FYmpOTTFjOXRlOE5aSk9uNWNqMEcvWEJKdklmK2gyTUlkbjZWZm9XK3ZFZmhXdmlRT0tBNklWZVJqdG12MHlnNXZWdHNGaDRNK01LYndjTC9qK2N3UlE2Mmx6eFdua3pBMC9HMFZRUjAya29kQXA5ZitqS0F3cmNVOE1qMFluMkJ6VlpyTkZiay9Id0hGMGdZaTBKTjJvc2hrcUVwc0hsOVV4d1NWWjd4ZFE1VTZjZm1jb1kraTlkcHZHb0hWeXpyYXl4cmFvbDBjbkV4dmZvb3ZSTmJaMUpNK3ArNklLNDBHYjNsY1VOSmpVRytFSTRkZGF2d1JmeHpTZ0dZM3FyeExKeVdqNGJtOG05dTVIVjMySGpzRDhYVVVYeUZ3UzYvUnBUdnhRTUZyaUY1bnkxSVpaN2tjMXprYzVLVm94R05GYkQ0aDFqajA0M1FBNDBteHAwcnRoU3ExM2QveDhKZkZ3eHRER3Y1TGtWaHNHeE5uT1FtS0JicXIrRE5DSkdjRXV6U2tOcGJ4WlR5VDhOb2NCOFJ0SkNIYmxtakVPbFJrSnRWdGlHN2lScWVwdDFxY2M5ckEvYm1JQjNoRm1xR3pxK1lSNFpndXkvVnVYM2NBbENXRTM4Z1I0NWtFWS9iSjNCZ01jVVUrcEtVK0dQcWF5emxNandGNmdnRTkyYVVqWTlmbmRrNnU3NmEvNTJlWW5VZW9aM21oOTlFM3BZRWl0UmM1M0sxKzdwNGpMMWsrYWsvT2FHcWxEOGJMY3Y2TW82RWU3TFExU1l5TnJoOHBNbWRCUFRxYmV1L0ZQUzdSTDVXclhwdUh2dGhNWnNGb1VlSWJQdVZablJiZm5xQS9PeWgwNlNaZEUrcGRDb2M2VnVsMTdha3Nib3dldWRLZERxRktIR0FHbktmd1pHeEl1SzNJekZ3alp2TmRlU1Y5eldXeG1kU0dlbnR1ME4vbnVRNGNJVm5lbm0yWkh5WnBIakUvdnczQ0hkcUhOeS9qZlJ6Wm5TbE4yWXEwM2lEY2UrK1ZKUkpUSkh5bFFkczFMZUFEZzZhZ0xiQktzTU9aTkFUYVlIeVh5bTM2OXowNkErNnBvSGtLRzlMYVYreHVMRHBVYUVqaUJ0bS9MWjR4aXB0RUZzSi9nekZYenBlWkxsZ3F0RGc5b0ZNdms0Y0J0NVFrS3RKNmw4QmZ6VFVIUUY4ak5ucmQyNTMxSUU4Vk91LzhQUmgwSjFUa1lTb3I3amc3M3hUbTNtOTM1YlZHUElscE9MQTBhVlhMTXlPWGcvb3RtZVUrNEM3K3hCbjRieFI1U0tnU0N5WVMrNmExeE5qb2wyelRnUXdoL2JKcm43Ym5hU21PNG1zT3dNenA5aXlZSHJuU0NJN1VYTTZmU0lxalNtM2ZHQ3gyK0NuMWRUS1o2M080RHZlQXMyOHFMUzRNYWUxcmpqRlVpUFpTZDhRRk54Q2h2WFE1MlFLemxvajhueTFQcFg5SGZNYTMxUFpzOThlVVpZcVRyUlgwYlRKL2ZBKzNBbWFneUl1N3pIWS9Ic0JDOERxcjlEdzd5Wk5ORHJXcU5aRi9sUExLVTgzdkkvNUN1MWlHVFhkV0dyRmVLaTB3U3ZHTjhKa2pKcG9qWXRCUGdINk5TbmMyeHQ0KzBwaVk4alZIVERJN25zT01DbitGenZOUXVVd1g1K2RyRXVVV3RzOFIxNFlFRW1nZm1RV082NjBKdElkTHd3RUxoU2N4bFJibUU1d2RsdUV4YVN4cnFWSTcxYUVRSG45cmwzMGNWY0l0aFlBeVZwcFg1dkdNRDNYSHFLSnR4UFNZYUNTeEc1WEhMWVhtb0grOWVlWW4za1RnK3NKQ25Bckp3ajQ4ZTJ6TzJGaGt2R0U0VXdjVHlwOGtMZzE1MGhsUDV5czlPVHlYRWQrMVJ6emUwbHJEUUpHWnlLQXRHSnN0OUExRzFNS0ZzaWR4UUxmeGpJK2h2ZDJERFdYOXphdFlyN0FMSk5mbmVFNWtwMVY4bmZLaWNNZjBPc1JNWnBhNks4WWpBdEtvODZZVGkxZ25PbS9xeXR1Yms4Yk5Vd25hTEs2YTFvV1B5eTVuUkFTTUhyNVFLL2lWNlpFUjBqc1VqS3ZtaDNoTXZKMnp5RzFQeGs4YkZQL3N3NlZCTkpNTWNJRTlmeEN3eFQ3TUhabklZZTdaOEpSUDVYRzhQN2VzNTFPY3FFUnBWZW1XbEw5UWpDMVJDd1g2STYxeFo5aXppbk43NUd2NUtjdHRDQkdpQzQ5RFBlYW84cnh6aGh4YURKWGx4bmd5MVM4VW1TaVM0cHU5WGJrcnpodXVJZVpqb0owL0d5L2NrTUFDOHJQbUdKajZnSzNIdmRxNW1DcmhRR3VKMlBPMGZ6c2VqT3Rsa3Vna0tpRW1JNW56WUF5dkRNWWQxcTdINlhrcTFNSlNhTkdaeVdKbzlIQkhiM0Z0blJZNnFYOVRuUFZDa1JUTGtOWVk1N0tDS1pNQTJ0dnR2SzZ0eUJiRzl0RFoxNjREZlNVRjJtNEo2bllXMmE5NitSZHZqY0hRR2tsNUhnZmYrc3IxdEhkUXZVQWVncEZrV0FZdGJwNUZicW5UblZBampQYXpET1BRZlRxUVFITm5sYnlaeTF1aEkxY1ZObXVRMHVqSjdpNE5oMHBHclNHdTJVaC9MQkZmdTFBSGhJOTdjMUxlRTNBVUYrN1puSDBkdHRFSU5sRGtTYVRRSUtuU1kxcXFpeVl6bWZNcThIaXMwVTFGVHRINExKdTJCL01pdStidXpmMWIyTFpTM2xWQ2RJdjB3UkFvRHJoOWxxTS9VUHdraXo3MHpaamVrSVh4S3NwcHlJcXYwT0tDb2Z0elladTduMmN4d2lUVFV6dDBRSGxZNUgrSytlOUhaYWxVRS9oU1BYT096Q3BTbXpocUIvdFVuNk9HbElDUHEyeGdtcWVaZXZOUlM3RjB1NU1ZMG0wcU8wUmFjNEw4djhjTGVWNmJSZlp6TUQ0cXY4aU9FeUkya2poZnIvYUZrUndLTklXcEQ0ZDRsR0hYNWNEMjg1dUsxTFptemhvb1BSTFRYUkhzMmNTU1gza3N6L3dodTk1WHBIWEk5TmtwejVQOE5pZmNTUmhxQ0hRQzNFRmJuY3FmRURQbE9HNC9GKzJrYXgvYTlmUjdZU0NHR2tVdTRmNU5xQytsZFdzbWc4MnZrTjhxL3F6Vzg4ZHQ1N2plZGlhS3pDVW1qL3VheXdIZFZTeXRoMjhNbWtxTUIyeDl4Tit0bWhmTjVIbG52T2tlODVQTHNubHNISXFIb2QwZHlabGY4b0F0SHFuZHM1dWs5YjViby9CdkZuKzkvZHUxYi94T3ZXS1IxdlhNQVpmcndhTTZZODlQU1U3QW1yLzJ5TUtYWVhyRGxkWXlnTzdnbHRuN2JsZlluTDlZeit6bkxQYldjOFNOS3Z0Z2Y2MU1wck1jZTdXTjBsclFSZ2x6ZzdaQXBpT2czUG1tYzZuZDN1cVNYK1Qzbis4akg3UHR2K1BMMnZoU3llb29IL1VKQmJyVFV1UWhPNVBuQmN6TGNoMGM5S1hndUQwWnlIbGNuQmpTT2hUb0RwVDVOandQYldCWXByem5aOEExSmR4SzZ6TGhuRW4xVTZTbitFR2RIT3ZFM0dhb3kvajNVM3dqeW5xRnZyT01rODhpSnZKVGdackpHTWZ6b2tJSm9QTTBFWENxaXJjK3BSWlhxOHZQOERIb2Z1bE0wVjVzcG1ldGRBZkVCajJiTTdhNEdkbm9ESUZHcjRFbWplTVowWWsrby9ienlKTTErQi9XK0dwbGtrYitSa24vcDNWb1JjTGZVQjc3R0h3SDFTcm1UUGVZejh0T2ViRkRUUmZjWklxQko3SDdKYlp6Sm1Ob0hYYUtjZFNKL1I3Tm5WYkE3SFBDVU9TTzIzd2IxUUQ1cytCTnByaEJDUXVjbEtoejZYSWVINHBTMjlkYnBLZklROEQwTFVHa3lDbXluUU55cVVwdGJDOXZoV3NPMk9pMEJYUkhPTFJacDNFWEJVems2Mmt0MHJyVGllcnkyM2xQR0UrSWJjRVJuYnB4WjlhMkVrWGlObFc0cFBvckF0QWZOMlFXNkU1MTd2N0VYaWNUa1oyS1dJZm5qcHdUNXc2WDJ0U3JyZ3NNV0RCckRZSFJqNEFwRG9IeVZqUHV6Tm9hOUdQMFZTM04wanJGZ0xUMEZ0dlNXc1BGTVg5Tm9qb1BBZ1plaFg1SDVzUWhPeEd0VjNFaDhnSUducWZ6NDN6L05PM2FsOExtK21KUEZQUkwvTmxVUHkxd3kreHpZT2FLN2tIZXphRkNuUkJzVlA5QzlveUJQdTdha0RxWVVxMG5qOXNlbkIzeEl2azZ3VVJlN0FPYUYxaFM3SXV2NG9JYTh3SkhpdjFUdEVuNWRSdExzb0Vxa3crS1BNUlVTVUZ4aVNJcWxrYURSUllyNy92a0tGNW1iUEk3UTYrWEJpR2kycVF1aTB1RGZwZThEcWVBcFNhNHlIT1RTL0FtMGRwVGlicmxwZlpHa1ZnYzZZdGRYR09OYUg4bXJoTmgwWmxKWW1mS2lVT0pGMWhLeHRya1ZEaVUyM3I3ejBKZkg5ck1qU0pEUDk5cUgvUnMxTnJQWFZwVTZoeDVDQXgwTjBpRU92aldQSUNUOTFLc042Zlg2ZHFhMDRtcjdFZDkvSE1PRDVQUEF1QUd3cUlqQ3RUNFFua2JZbmxmSGp4TGcrNDg2a1FucnZZbkR1V2QzMWhUR1dQSG9zZ0tuRGg4RmFnaHhTM0E3S2h0UGlOT20vSGtnemFBdnAyWTFOVXFaa1Z2VDZsT2NTbnRNSW9YRnBSeVBOYmZreFdIU25TSGFvdUU1UnUwbVBZTDd1a3BKQ01EYnNtNzdGS3p6OFFMTTNpaHo3Nm1aOG94d2tJa3VZcnovRnBaNk5wc2xhNi94TmZzTWRoaEhIclljM1NLdDBScVNFNEJPNW5pUTBIR1NYNktjODhUckRNK3lWdmxldFpnYUdrdWkvaGNnUEVhM1huVGlOV2VYbVBzVXpnSk9EdVdNWllTQVBmSzlRRi9JdjU5Zy9xL3dtNVhuRGtZeUZqN21ldUxLUGFSY1k2YWl1UjRJcDd3Yi9mMmlmcGJCSlJQRjRwK0h4N3FhUTRvRG9Wcmc4bWNzWmx6ZGZTUXc1R1BQZVFBZU9YN25hbllyOWJMUjNSTHBCR2NyN2lBMFZvc2x2azB1L2c0Y0N6N1VYdnl0OG1udlF2ZlhIZDFMN0hWdXpsUElhdlI3T3VnODNxUUsvRCs2K3AxKzdEcjVPZ3d0MGl3UUhlcll3T1U4KzUzWW0wQWZXV1VLMy9jenovVjlzRWN5em5SWXFRUHVEWkhnNzJlbzYzZW1CRmlZZ3oyZEhnZUl6eFV4UVlrOUwwU1JlYWV6b2lIYXZlc3RVakVHek5wbGU5NTNwdi8rRkZ6TlRxMDA4dnFKMjVHVjl6RzJlbjJoQm90ejhUMG5MMHV3OVNDK0lwTkFwM2Y2YUtEVm55cENWbjJLKzArcTY4b0hlK290dXU3UVUrdm1Xblh2RE96MHJNcnN0SGJiTnBoUjYzTHJoUXB6NlNSK2MwMHZvanNIN3pVR2srOG1oTnhQY1BjTzR3NnM2KzFTS0M1cktkS0NwWWZOZHpBTDdqV2pxNEIvbCsrem83TUx2K1h0KzBYNTNEaDlmVXN6QU9ZeWJlWE9ycW1aUG1LT3psMWRSZk1XbUtpeWx4N2xwZmJVTHFOeFhTSDhuZXZyVzZ2TjZWMHlhN0hJQnFBVUpFTW9QUnFyckVSNkdyVmY5eVZqNzg1ejN6UkZZLzJVcUdGLzRTckhZaHVmLzJWanB5ZW4zU1Z3ODFheGlHTVFpOXpsaUxoU3cyd3dPajZsazREQ1QwdVFlckVUelpwNlFOeU0yck4xZ2VHbmo3ZFZvNWtvSkNWUzNoaGExaDFJaTFEYVMwbU43UVJ1bExXWDFzelJ3ekxMdDFNSmxkbjB2TkQxeVhPWHdlNWdTVW5vWHZFUWVxc0ZLbTlVV25nR0prenROdnVmeWlYMHd2ay83SXJEd2ovTDdpdVVRZjNNNjVwcExBLytYb0dvdDhuWE12d1lIak1pK1REazUyZTdaYU8xbEp2Y1UrS3pLRlc4c1BmdVZqSFMyMUl1VDVjS0w3dXNwaElBRXp0NXpBbUY3Yi9aNDd4WGhwSEo4UTNReDc2eGdBODVPMDRoeVVkY2dYMW5TcXRnVUtJaXdPOHQyVnFTNmNwVzVYV3ZrRURVQlZtb3FzbU5DcGoyd0lPcGpKRzlhY0NlQ3I4aTlMZm1iUU90Wll4S2ExTjZRUnJRVm5PZEZZRkh2OFh5L3duMnp5cVV2VjlZUUVrVGh5K1RoY1V5OVdYaTk4ZDRKMU1LNTZYTmw2a3RwWko3VGpQekI5M2ZiQVkvazJ2VjR2UkxFbXZtWDlDME9qWDRYOW8zK3ZUVVdsYlpGcUswU1RxZHIrZDRBajgwNldEaTByMEpLNDU0UGJKL3I3TTJyWkNWV0tXYWt1MDBXTXZlcDJWTmhCZFZXcHZScTB5dm9pbXBmUVM1RW53V3RYNlU1ME94Wis1L3ZFMFkrRTduSVRGVVJNZ0RvNm5hclB5MjNrdEt6d3ZLcWc4T0JVNjR2U3NWRENUcHJ1SXRUK3pPNEVoSVZ1TWpWcGthRWlHcjdualpWbGUwM1lNMUNLTHpudEVjTDVPUkJ2bTRwWWE4WW1qeUdkZWFBdWZJRk5pdVlXQXB6aEJvTWJJNTlUcGpxKzVrNzEyV2pGV1pYYWwwbUx5cnBMc09lZTJsLzdXQzUxczlSVnBpQ3ZKbDZTYXkvcHd5bU5na3BVRWh0d0NQRXhFanBKeGhaejJRWDhpY3NNcGRudEo2bm1qRW1BMUljVEVvSUdUcG9kRnVEOWZ5ZXpYZm5vM2EwV1p2L2JJRUtXaFVjbUp3clVXQjg0dHNaVEw5YnpRbm5JQ0t3b0w0WjBsZXhCbi9zSEJkWm1zN1BraFhOOVZhdXlkMTFKVCtFNTJjVjFobDZlZElrZFZ2cTd3dTVYbWR5dE5JVC9UUmFmUENTZktaSUtTYUFSMlYwMTMwbEVsTVZTbzQzdXR5dXZXalZVY0FEUTZMNzJrMS9MVGVFaEV2RkJUNXEzdzRiSmNpY0F5RXhHTzIrYVpMMjFQRWJEY0Q2RjYwNzc0T3NFc1V1aCtTZHRkdnRZRDM2Y21NaTVPT1hGWTIySmFzdGtYdHpyeElvdStRM3Y1MzhyN05Pdk41THo4TkhtODFJLzlpblBQMjcxcTJ4R2N5WHR3SVFVd0pDWHhlS3ZNdm84eGs0ZkpUQWF5U2dOTWtkRGp6Q3JhQ0M1dm9TbnprVUFObnlVS3ZFSTdJUzdBQXlmV3RFVFh4MXJva1ZFN0xVc0hlZXJUY2NnUlhrb1VHZVhaQVl5THpjSGk4U1B4RHVPMGw1cnpLZWU3bFhWcStEekZKNWY0TU9sY2dmVjBwN00wZXZ0dEU1MzBjWmZvdDdOYktBWUNJQjlrRFBHYndGTkRhaUp3MDE5OWpzeWJzS3B2eFRtdlpZM3RmVWE3R3NkUGhQWlU2SGQ0TVczN0U2WVkrenk5cU8yQlMyWlNlNlBUbmNTZ1lIekNMV2RFSjZ4b3ZUcUJFenVkVXAwSFRod0tNc1lOaGVPdHI4dktFbjU5Mjh6VEZPTW9sQ01ST3dJbjRKTnBueEl1YXNVczJXZVJGaU9kWGxzb1JybXdaYW53bXdVRHhxdDlYbEFVR2JPZUJadzdiUVAzMjR1a3prS1ZsRFpQZHpiWlkyUDJXMkdjR2VLbno0dEhFSy8wRFg2S2k1T0wydk5jY3FtN1hQNDRQb2dQcG1IK0JyWGVmcXpWSmM4dFJUcU15YnBuWDNsN1grN2tHQThYajM3bUFLcmp5K1BQdzRrNGZJd015a3UxY2xvVmF4NjdncFZvTGRKU2lEejMyclVuRGxoQW5UWnJvVnk1cGZXTytuTXJqZUEySXhsZDVUcjdxcGRHQXp2RFAxVGt5VktuTzR1ajdVT0Q0VktuS1RkcmticGplc09lS25HKzdtUlg1QndxUEpwN29UbGduSFAxa2FnY1YyNHphcC9WNXRTcUhGZkNCK21PUkNNNjJPbFdyRDI1V1lBcDFOVVR3a0x6OS9YcWlOakNQcWxqNlNPdFNYdnRZSFg2RlQwcVNxSVdVNklkb2xnMGJaZzVkaGEyQWVVZ3U1WjZ6dHJwMVVBMGI2bTMwR1BWSTVrWTRqcmV5ZHZhYXRyQ2hrQWh3TVlZREsxUHVvNmExcFhMY0cwU1hYbWVTU0N1dmJxZVhWVkhyWXVTNGVzdExwbTk0MnJxOGF1amwxNVZIMGRNRDR1Z3pWQ21hWjF4SkdmN09uajB4blo4WGt0Qmp3VklhYllaN1R3T2ZkS3A0WUczRWQrTlJqSzVWSHE0cnpuS2NpU2xjak9TaTU2UVRsV2NqT1pKaGI2SWRFZDBWUm4xc2FTUEFrajFUK2VyY3VDZjlpaUo0cHJ0R2JuMmZpUk9GbUthcnhBN0ozeUI0em1wTEw5UTlHWlU1NUwyZTNObTYvcXhpcTlJNjBXdTcvUVdDV1paclJYRklKT1BYQi9leWxiYUEzSDJOZUtTYkNFNzhiayt3czdWNU9JSy9xYXVwZlNBUnl1dTM2UEh2bVg0SDhZY3Ayem1HbGNJRU92NGR0OG0vLzN3OFhNRHNJTDRjRFJJMGo2TVlYdmFHajVrajFnK1hsZTI4UlhVd1h1MVdGUUx6K2h5c0o3K0pUNFZpWmt5Q2MrdG4va21TOTBGei9vaWV3eFR6Wlh4bk84VVdrU1BWTlNUTDl6UEIveXhkNTNSQUwxU29KSi9QOFpYVmI1WUZmMFhqK2Y2V21maXMxRGsyVm0wS2NNb3Q3Z2YxdDVSWDBYcVIxVDBQeFQrUlFzYytrQUQ5TWl4TzZhZis1bWR4S3poTTFUcmxJZExyVFY1MS9vZldWdWhoN2llNEZWKzBQbjd2OHkvMmprWG9jS1BPM1UxSUsrUlZOcXJJcWQ2em1OUGEzM1NwVDdJNHBlVFRkeExEOFNPR2JxcUgxcGVwS04zc3AzWDA0MzB3TlozbVRPOUlUSG1iNU54bG44NmFNdy8vc29NMU91Nm41ZTdIQVpsS3pKbmpTZCswWE1JNFdTUDBZYzBtV2pFMnArMUZwQy8wc2UvVC94QWxkcUxKNXVVTXJzMkxWN04wRTlmSFhHMGYvQjBiYnA0UlF1VHZZb2ltNzlYazk0KzJteENyQzI5Tlk3VG5uVzgwM00vZmpFaDkxMnpLL3kvNUxFUWFUL2tYdTl2M2x2MGRrWXZpYnViWTBWdisxdXFJRGJENXYyL20yb1FxSWxrMlpFSjdEQktYKytvZ3ppTXpPQTVNRi90ZGZPKzJTVjc4TnZpeFhyb3ZZMmVZZkltTVBYSUM0cTMrSG5BVE45NkdLWmYvVm1lMWZOaU4ycmVFOSthZW1nSDV0SU1RdE1QdkhVQ3dabXVxZ0hUYU42L3FpQTB2elZ0UjUyYjZQMlJBSmlPZnFPSGR2NzZ4cXZ5M1BzbGZrMmc5emY2WGdDaEV3VHhyZWtIdHFNR0NMQnVCaEZ2Nm9HWjdTMWMySDdQRENMNzFkYlZ5QlJWWUJ0cSt0TEhLSWpOYjgzWXRVUGZNb1B5K3lleGEvVGYvZmZiMjFielQ3aXJPSXc4NXdGZHBtR1JQampjQXFMeC9xc3QvL3pXTk14WE5RWVJGVTRUSC81dXJxUGI1cmRzZW0vUWZTNGdPSjVodnlZREw0elNOWnJvKytZM1JQeXpEdUVmLzI2YXI2K21EamZQZXYyMXFjZm8vWndMTTJuZW8rblhpK0s5bGRlMmQrT1lqaGNrVjM1Z2htRWN3S0dlRDhGQitNMysyZzZqRUNuQnk2QWFkcmo0YkppdUdhMjhZSEVWdStwU3RRRWtYalhrZi82WkVnelNjSm9wN1pRWFBOOTBROHQralFxS1F5YWlBeS8yUS9RTzBPd2YrTGRHOFprb2ZXNGh0a3RmeWZsZ2F2RzhkRVNCNlFQSVlZaXo2dmtiZUxvS0xDK003dHNZaHFGM2xWNUJoc21uZThIOUV2SWV2Z3V5NTdtUnVZNEtDYzM1NjJaM1dQRjc2YnZyN0wyZzEzQXQ5REpQeUpSSHhLSUo1UUpLanF2NmtJYmJSWjNRemI2SGhnKzlqTFQwU3RkQ1h1RUFaQlhoUWxHZ3VpRWs4M1BnUlo3dWdmUW9xcVFPSi81QWNvZW5jdmV0bVJyYVBSeFNvUXAxeTNUVVhBWmViYkQ3S3RIMDJ0c1ZvdnFlYldZU2NpajJ5S0dRa0R3bnNNOVRBYWVtQzQ3aWVxUXl4WVU1MS84K255NDZBdE5ubVluUUhuQThLZkI5WWM0TE9NbGg0cFNodUdlbVA2U1lQdmNzWXUzeEZLUDZuRENKZTNuT0pzMDF2ekc5WWZGbzRhS2YxRWE1ZFY5enhFMzJlTU9LWEJEOFRkd28waVI5aFU4NnJ1aC9MUGY1anBCZDNkcUdiZi9qUWMvb25mSFdqMW43ZHJWL1hYRHhQYnpDci9IdlY2bU4rR1hVUWhFRXNiMTUwTFVoaHVQcDNPN04vWnh5cWZlZmRPM0tCNGUvbjVxUU92T1p6R0V6aWZXeUJ3bTk3WGI3M2o2V3J2Z2g2cVl2ZVRMZWRMdnRhMGxubzBwNnRQV29Vb3FYWU40WmIrTjR6RU9LUTY5MVBHZTJXYjIwUzBtR1htQWJ2U0JHb1VVSHJadWszY2hWRDY3V0V4TFhDWEdSdmRndEhkZGkvZHh6UWg1Zi9zQ3paSWNXTWJwWnNmdUE2enVHUmkrL2MyY3RCbm1DT2dIY2tWeThzR21aZVJvN3NKL2NXVEtDNTlROTVQTFNTN2d3Uldic3ROb0sxeCtuR2RIS2J1cWFQYUhiWnpBNnBzS3FoL3p1clhYbVhuYmhQTG16emVpdEc0OVhGWHZaWm1NK3pHZGxXTFZuVXhyelpKUElPMWNJTmhrNVlEbHFzYjZTNE51WEZxS3NZSmFCbFlyTVN6bFRmR2U4TVhXOHQzMUE0c2YzVlhwdzQvaFFNdzJLaHlyZU1laGhQbFFiN1ljSWIvWHRBd1NqQXM2YkQ2T2g5ZWl0KzFpaG9UcC9GdzIxK0syaGZtdW8zeHJxdDRiYTAxQUU5amZSVUcvZDN4cnF0NGI2VlJvS1F4cXErMXREL2YwMDFEL1RoTnlyUGE5TS9XRVlobmYrNkdEWUgvaHRSUnF3eDQ5L3B3SC9nalFnSWtLYXJJMGlWYmNnNWFHSnVaN3J3Ylh0M1lUMi9DcEw2a0FDWGVXajdwZXRheHdSSlUxLzdOS3hRQWJTN2k2bFhlQXQ3ZEQyM0ZNcmxBYmVMNGxza2NDYzIyRVVxQ2ZtUW82NXl2SXh4WlF5bE5EZW9QWC9GYXNKQkxENEh1cWhmWk5teGRDUEVPTjBkSjU3aWs1aFhCcDR2N3lGcHdqUFlCRnJpSW5TUEJma0lRajBkOXIxTDAyNzJ2QzRYL1RRZWRGdDNmaWRZdjNTRkN0MlRkeitjVTBRMTk5dno4aXlPcXBydjVySVZseGRYZjEwLzZ2QmUzR2dtL2VOc2tLNUtUMXhyRkQ3eUFmKzZhcStMYVlDZDk5WTRqL2RoZTBhOXczZURKYTJibloxSFJxSG42NWpSaXAwbHU5L3VvMEczT3Q5bzlqcUZtVCtZK2lyZW1uRVQvZWR1S1c0OUZLcngzbkEzRVUzMEZUOVdvMGp5d3ZzVFhyT1VPSFkzZzNjeUxrb0J6RXdRelRvcXFINmRzcjE5NDEvL0d6cW5oY1l0bHVHL0xQNVR6aXkwUWpNRUcwbUhRbE1OVFRENHNlbEdXanBEM016K3RuODF2alpYS21SYnFVZm9XMVBQeGttTUNNei9SejdocHAvMWdNVGZmNW5GVlkxS0poTDA0MnFVTmd1VjhJaFgyRi9aVDhkY3NuQ1VLVWMzZm9CQXBkQTkrRmhoNUhwUmxsUi82S1Y5cmRhUi9CczI0MlBZS1lEMVhhcTBLdEQ0RGphNTU1S3J0bU84bWMyQ0Nta1gzaFlLVWx1d2tpTjRxcFZQM1dQNlpLcHErWFV5TUxGSkcrOEh4ODl0QzhYalRJYW4waUsraU00Um5ZOXRLOHYyYXJ0dm5wZnlGeWVjVEh3LzJwb0p2QldqVmN2YUpRY3pndFdEVkdJY3NiQzFhZVZyWGw5d2JFVmJVdlEzZmtvRzFmcG5pL0Q5TFNnZi83U242WFJQb0pFbUlMZis3S2VHaDhRZjlXM3pYVmt1dEFCQ2s4SUpRcUY4KzhNODlWMmJSUU5uVEJSbFVpVmVLY3NVeFd1KytjNWU2VHRHclk3L3dxZkw0eTFOMU9QY3JldjJ1ZUZKRHJxNnRZNHU0RUhUTTU4UmJBclBOZ1RRUFB6UHJMVmMwbGNQTXMySis2RGFqcWV5NXZSTGsxVjN3OVBrZzhDcS9YdlE5L1UwYVF3QzhMdlUvbzRrSU5HcW1hQ01Qc0didEN2QUp0am5VOHNZd0wvZ0YwZ2RXQWFqUUlWK0dmLy82V2NRREhtcXBIRzIvZU5JdHplcnJJd2svdkc2ZlRBZGtJZWQ5ODMwckQ3UTZ2c3BBdSthSTJLOU1IcGxmTC93eUNlZWU3ZE4yQzRYUDZTVGFIdS9tQzQ0Yk1IYkQwcEpJS3lnekNTN01nYXBIUHlrVkFrVk5zMWcvS0pYMlVzbWFhcXR0OURydFBqd0k2U0xFTndYLzZ0MGZBRGUya0RjMjRhdStoa1M2bStxdG5Bam13ejNKdllhS2lHZ2ZRalArTmZ1ZzlqaGkxMFp6RUNBRy8xbksvUUQzVVZJUDQ2WEFwbFArNGJSeEorQjZPZll3QnlpblhCU2szQzhoRGRjeHdWaXZVL0dqK2JPL0N1dzhKMXpmK1k3bkp2ZHprNTVaY2V6N3c4UDBsOWJ0eVZYeDQ0UnV4ekwyeDMzTituQmtxYzdtcWI2Mnc3MTdyblZJT0h3UHZzdy9NVHcwNXJBTWF1dmI2L3VibFpxc0VOc0xVYnlLREFqRzU4RU05dE43d3BGb01MRlJrY1BiUmZRazlmSE52VitPbWhiaGRialZFOTlhRlBDblROM0o4b1BmU3plWlNnSENOMnAvMlg4WlBBVGw4ZUdLNFcxb1g3aGtvaFBMRjJmcGduQ0YrYmREcVBVNDVTQ09YOHprU1RmMlNlWDNwOWJzcFFUQThTVGV5T21JZnVsSGxpUDNJQ09YaUc1ZnM5Z2V2WHduSTk5d1NzeCsvOFMyOGs4Tk0rOS9MTTlTbEdyZ0hXNlBIanM1QVMrSDQxUzFDQjV4d29JcVRqQWpONk5KUGN0ZGovcys5VkJLWVJWbzFEaGlBT3pRQk9PQXZWNXk3UFMwL2N3MStIcnErRzRjb0xqTFBRWlo4ZStyWHFxd2JkVjlzRVJoMnEreW5Td3hGbytyTWFXZmZJLzdqTzArem5zU2VmNnNndU9lcS85QWJkNTArUnFTN0hkV2Q4SFpmKzNDa3RuZ255bVh1U1p5OThueE9aWHYrWWhUaEhvdEpkOXdiYzAxT2Rla0lPYk9CNTBURTROUGZjZTRIWVRRZGN2L3ZBMTZKMFlwZFRyc3Z5ejAvY0ZHNXordFI3R3RWQnFnVEM4eU9rd1k1bytodmRES0x3S0Uzb2dubGZwdjN4ODZnNzdWK0VSUUZtL1BUQVVMT1h3Uk0vUFhwT2wzQVVKQTdOUFFuUDlUVGVyUlR0d2szRDR6R01yY0lhVnlRclF2cHFaTzB2NGNCNXFZUmRaaStyVjBxUk1Vd1k4SVh2WG5EWGs5WkRPN3Q1OXBEQ3JRWVplTDQ2ejN6RW4wM1NOdXpBMU9FL1ZWQjNFTDVudkFOSnovZzhEQXh6ZVd6dGc1L3plV0VTSHB0MzhITStyMXJ5ZHljZjF3NFZ3clk3dlhKQVlLckdrd3VTcWtpaG9JVVdoMWZROHpTUG9oZkU3ZzBjQ2pjWm1jNkxGb2N2KzdOeWtFWFp2U0pnZUdmbHZneEpEZWFISXZlemVYVzEvTkUrUEhINEErcGFNQXdZZXY3NC8vNjcrL0RBOVhuK2YvYkgvdGRWNCtySzhRenpCOElrUldFM05Nc0dGVWorSzdZRE03emE1cVovSEJJYXpmQTk0OHAyWDcwclJOT3JyQ25neDc3OWhVTXpqaTlJQUZrWmljdVBUd2dwNmdPbmpDcTEyajV0a1RnU296d0taQjhwL0plL29idHlocnJlb2JkaEIwZWxvVFQyUThwZkQrMzg1eXpoZWw4dlQxV1lXVjZZd3RyTEVoeFY5UzhaeE9SbWQxYVUrT1o5NHdFcFVDOUlub0plbWtsMXo5emR1NUE1eDlDZGpkaHhTL2crL0M2eWkyZGpXbWtGTDBUd3dDYnVyVjV4Y0x1bTdmaDZCM2J3SlBnOUMzZ2MvSUc1UEFtK3lrWWVYK05TOGxRYncrTnJuR01hdDZ2ek5VYnp3SUNuTWVlQlRreS9admZpelNycjcvbXBGNVJiLzA5b3FTbHk2MWtHM3ZTQmwwQzc5K0dlbWlMUm5kVmV3dnNHY1dZSy91aGlGMmZpVDlSSWppYmt3NTJhQzNzY1VxT2h2cUlxVmxKYTNmZU1yaHZaM2NOZklHV1F1MkU4eElIdHpubmRNbzBZMk82Y21idGU4WFdhS1llSFZaNTZsZTZUM3lWbXlTUkJzdmJYS0RtL1UwN1lBa2d6N2dkWmdOMjhPdU1lL3ByZVVhaXc3VmZIYUpOWE9Id1BlUFBrRVM2K3E0ZWhUSmJST1pwa3oxdFdMM05JOXhwZHovSkJ6M00xVC9pcmtlMllYaHo5d0w5allmV0lsUmNzek9BcXNxQ0xILzY0cXg0RlROVXdneXQwNnRCVGFYNktLd2pORU5SNW1VdDR2ZThTbnVGcnBlcnhsSmRWV3FqQ2ZtNTdoQzg3MWNQbTRzOC9XRVNCSzRqb2xZK2FISC80VU11ZEhCekh0bkVGVEhjZVdUOXc3R3VabzViN3NzN3hxOWNRV3F3ZjVqcTZmUWQ3NVlQTWRSU29WMmxKL2lwWHY5VkRYMDAxaWdQemFnNE4wWTlwSnZzL0RuUGovOHRaZDY5MzUzeldQZXd5LzNVNktWOTdqNnREOTV6aG44UFgvOG5xTEx0NlVNRVBKKzhwZkRvUG5ENkpXaTc1VHo2aXcwcjlYMXNFcnozcmR4N0NwNVhPRzQxM0Y4OVBIdlVGTmZFNnAvS1RLK08vcERyOXU3NzZWZlZWc2MveHh5cnpIZXpNOC8rLzFFRHdOVVhVejZyTnZidmQ0ZHh1aDZQVjZFdUswYi9MdlY5Yzd1VnFMdHpWd0N6eVlXZkNQQXJzNkkyOVgrZStmRlVac2I1ZVVZMnM2ZmhSOG1BSDkzL2ozR2RvcDA1ZVJlcHp0NU8rbEFUdDhjeEQ1aG51WlJkM2pWWXB4OW5JRWxKY2x0RzdETXU2NThIdTRWdDlCUUFoanZyZklmdG1qdWhEMmcrZmJVaEU4UG55bmREajZkM2lkdWhQTnlYZnNhN0s1cmRtY1NVYS85WXNrc0dsNjZiTlAvOWZBQUFBLy85SkVBS1psOFlBQUE9PQ== + kind: Secret + metadata: + creationTimestamp: "2021-04-28T15:49:35Z" + labels: + modifiedAt: "1619639247" + name: powermax + owner: helm + status: deployed + version: "1" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:release: {} + f:metadata: + f:labels: + .: {} + f:modifiedAt: {} + f:name: {} + f:owner: {} + f:status: {} + f:version: {} + f:type: {} + manager: helm + operation: Update + time: "2021-04-28T15:49:35Z" + name: sh.helm.release.v1.powermax.v1 + namespace: powermax + resourceVersion: "3308" + uid: be2111ef-7be4-4f92-a952-1d3b65cb0559 + type: helm.sh/release.v1 +- apiVersion: apps/v1 + kind: Deployment + metadata: + annotations: + deployment.kubernetes.io/revision: "1" + meta.helm.sh/release-name: powermax + meta.helm.sh/release-namespace: powermax + creationTimestamp: "2021-04-28T15:49:35Z" + generation: 1 + labels: + app.kubernetes.io/managed-by: Helm + managedFields: + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: {} + f:meta.helm.sh/release-name: {} + f:meta.helm.sh/release-namespace: {} + f:labels: + .: {} + f:app.kubernetes.io/managed-by: {} + f:spec: + f:progressDeadlineSeconds: {} + f:replicas: {} + f:revisionHistoryLimit: {} + f:selector: {} + f:strategy: + f:rollingUpdate: + .: {} + f:maxSurge: {} + f:maxUnavailable: {} + f:type: {} + f:template: + f:metadata: + f:labels: + .: {} + f:name: {} + f:spec: + f:affinity: + .: {} + f:podAntiAffinity: + .: {} + f:requiredDuringSchedulingIgnoredDuringExecution: {} + f:containers: + k:{"name":"attacher"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"driver"}: + .: {} + f:args: {} + f:command: {} + f:env: + .: {} + k:{"name":"CSI_ENDPOINT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"SSL_CERT_DIR"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_DEBUG"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_GRPC_MAX_THREADS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_IG_MODIFY_HOSTNAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_IG_NODENAME_TEMPLATE"}: + .: {} + f:name: {} + k:{"name":"X_CSI_K8S_CLUSTER_PREFIX"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_MODE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_ARRAYS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_DEBUG"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_DRIVER_NAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_ENDPOINT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_INSECURE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_PASSWORD"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + k:{"name":"X_CSI_POWERMAX_PORTGROUPS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_PROXY_SERVICE_NAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_USER"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + k:{"name":"X_CSI_POWERMAX_VERSION"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_ReplicationContextPrefix"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_ReplicationPrefix"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_TRANSPORT_PROTOCOL"}: + .: {} + f:name: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/certs"}: + .: {} + f:mountPath: {} + f:name: {} + f:readOnly: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"provisioner"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"resizer"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"snapshotter"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + f:dnsPolicy: {} + f:restartPolicy: {} + f:schedulerName: {} + f:securityContext: {} + f:serviceAccount: {} + f:serviceAccountName: {} + f:terminationGracePeriodSeconds: {} + f:volumes: + .: {} + k:{"name":"certs"}: + .: {} + f:name: {} + f:secret: + .: {} + f:defaultMode: {} + f:optional: {} + f:secretName: {} + k:{"name":"socket-dir"}: + .: {} + f:emptyDir: {} + f:name: {} + manager: Go-http-client + operation: Update + time: "2021-04-28T15:49:35Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + f:deployment.kubernetes.io/revision: {} + f:status: + f:availableReplicas: {} + f:conditions: + .: {} + k:{"type":"Available"}: + .: {} + f:lastTransitionTime: {} + f:lastUpdateTime: {} + f:message: {} + f:reason: {} + f:status: {} + f:type: {} + k:{"type":"Progressing"}: + .: {} + f:lastTransitionTime: {} + f:lastUpdateTime: {} + f:message: {} + f:reason: {} + f:status: {} + f:type: {} + f:observedGeneration: {} + f:readyReplicas: {} + f:replicas: {} + f:updatedReplicas: {} + manager: kube-controller-manager + operation: Update + time: "2021-04-28T15:50:41Z" + name: powermax-controller + namespace: powermax + resourceVersion: "3520" + uid: c6008a28-f3d9-4eff-97e8-832ee478c428 + spec: + progressDeadlineSeconds: 600 + replicas: 2 + revisionHistoryLimit: 10 + selector: + matchLabels: + name: powermax-controller + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + creationTimestamp: null + labels: + name: powermax-controller + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - powermax-controller + topologyKey: kubernetes.io/hostname + containers: + - args: + - --csi-address=$(ADDRESS) + - --v=5 + - --timeout=180s + - --worker-threads=6 + - --leader-election + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: k8s.gcr.io/sig-storage/csi-attacher:v3.1.0 + imagePullPolicy: IfNotPresent + name: attacher + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --csi-address=$(ADDRESS) + - --volume-name-prefix=pmax + - --volume-name-uuid-length=10 + - --timeout=180s + - --worker-threads=6 + - --v=5 + - --default-fstype=ext4 + - --leader-election + - --extra-create-metadata + - --feature-gates=Topology=true + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: k8s.gcr.io/sig-storage/csi-provisioner:v2.1.0 + imagePullPolicy: IfNotPresent + name: provisioner + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --csi-address=$(ADDRESS) + - --v=5 + - --snapshot-name-prefix=pmsn + - --snapshot-name-uuid-length=10 + - --timeout=180s + - --leader-election + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: k8s.gcr.io/sig-storage/csi-snapshotter:v4.0.0 + imagePullPolicy: IfNotPresent + name: snapshotter + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --csi-address=$(ADDRESS) + - --timeout=180s + - --v=5 + - --leader-election + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: quay.io/k8scsi/csi-resizer:v1.1.0 + imagePullPolicy: IfNotPresent + name: resizer + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --leader-election + command: + - /csi-powermax.sh + env: + - name: X_CSI_POWERMAX_DRIVER_NAME + value: csi-powermax.dellemc.com + - name: CSI_ENDPOINT + value: /var/run/csi/csi.sock + - name: X_CSI_MODE + value: controller + - name: X_CSI_DEBUG + value: "true" + - name: X_CSI_POWERMAX_ENDPOINT + value: https://10.0.0.1 + - name: X_CSI_POWERMAX_USER + valueFrom: + secretKeyRef: + key: username + name: powermax-creds + - name: X_CSI_POWERMAX_PASSWORD + valueFrom: + secretKeyRef: + key: password + name: powermax-creds + - name: X_CSI_POWERMAX_VERSION + value: "90" + - name: X_CSI_POWERMAX_DEBUG + value: "false" + - name: X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION + value: "true" + - name: X_CSI_POWERMAX_INSECURE + value: none + - name: X_CSI_POWERMAX_PROXY_SERVICE_NAME + value: none + - name: X_CSI_POWERMAX_PORTGROUPS + value: iscsi_csm_cicd + - name: X_CSI_K8S_CLUSTER_PREFIX + value: CSM + - name: X_CSI_POWERMAX_ARRAYS + value: "1234567890" + - name: X_CSI_GRPC_MAX_THREADS + value: "4" + - name: X_CSI_TRANSPORT_PROTOCOL + - name: SSL_CERT_DIR + value: /certs + - name: X_CSI_IG_NODENAME_TEMPLATE + - name: X_CSI_IG_MODIFY_HOSTNAME + value: "false" + - name: X_CSI_ReplicationContextPrefix + value: powermax/ + - name: X_CSI_ReplicationPrefix + value: replication.storage.dell.com/ + image: dellemc/csi-powermax:v1.6.0 + imagePullPolicy: Always + name: driver + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - mountPath: /certs + name: certs + readOnly: true + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + serviceAccount: powermax-controller + serviceAccountName: powermax-controller + terminationGracePeriodSeconds: 30 + volumes: + - emptyDir: {} + name: socket-dir + - name: certs + secret: + defaultMode: 420 + optional: true + secretName: powermax-certs + status: + availableReplicas: 2 + conditions: + - lastTransitionTime: "2021-04-28T15:50:41Z" + lastUpdateTime: "2021-04-28T15:50:41Z" + message: Deployment has minimum availability. + reason: MinimumReplicasAvailable + status: "True" + type: Available + - lastTransitionTime: "2021-04-28T15:49:35Z" + lastUpdateTime: "2021-04-28T15:50:41Z" + message: ReplicaSet "powermax-controller-5748dddb9b" has successfully progressed. + reason: NewReplicaSetAvailable + status: "True" + type: Progressing + observedGeneration: 1 + readyReplicas: 2 + replicas: 2 + updatedReplicas: 2 +- apiVersion: apps/v1 + kind: DaemonSet + metadata: + annotations: + deprecated.daemonset.template.generation: "1" + meta.helm.sh/release-name: powermax + meta.helm.sh/release-namespace: powermax + creationTimestamp: "2021-04-28T15:49:35Z" + generation: 1 + labels: + app.kubernetes.io/managed-by: Helm + managedFields: + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: {} + f:deprecated.daemonset.template.generation: {} + f:meta.helm.sh/release-name: {} + f:meta.helm.sh/release-namespace: {} + f:labels: + .: {} + f:app.kubernetes.io/managed-by: {} + f:spec: + f:revisionHistoryLimit: {} + f:selector: {} + f:template: + f:metadata: + f:labels: + .: {} + f:app: {} + f:spec: + f:containers: + k:{"name":"driver"}: + .: {} + f:command: {} + f:env: + .: {} + k:{"name":"CSI_ENDPOINT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"SSL_CERT_DIR"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_DEBUG"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_GRPC_MAX_THREADS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_IG_MODIFY_HOSTNAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_IG_NODENAME_TEMPLATE"}: + .: {} + f:name: {} + k:{"name":"X_CSI_ISCSI_CHROOT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_K8S_CLUSTER_PREFIX"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_MODE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_ARRAYS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_DEBUG"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_DRIVER_NAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_ENDPOINT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_INSECURE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_ISCSI_ENABLE_CHAP"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_NODENAME"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:fieldRef: + .: {} + f:apiVersion: {} + f:fieldPath: {} + k:{"name":"X_CSI_POWERMAX_PASSWORD"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + k:{"name":"X_CSI_POWERMAX_PORTGROUPS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_PROXY_SERVICE_NAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_USER"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + k:{"name":"X_CSI_PRIVATE_MOUNT_DIR"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_TRANSPORT_PROTOCOL"}: + .: {} + f:name: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:securityContext: + .: {} + f:allowPrivilegeEscalation: {} + f:capabilities: + .: {} + f:add: {} + f:privileged: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/certs"}: + .: {} + f:mountPath: {} + f:name: {} + f:readOnly: {} + k:{"mountPath":"/dev"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/noderoot"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/run/dbus/system_bus_socket"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/sys"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices"}: + .: {} + f:mountPath: {} + f:mountPropagation: {} + f:name: {} + k:{"mountPath":"/var/lib/kubelet/plugins/powermax.emc.dell.com"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/var/lib/kubelet/pods"}: + .: {} + f:mountPath: {} + f:mountPropagation: {} + f:name: {} + k:{"name":"registrar"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"KUBE_NODE_NAME"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:fieldRef: + .: {} + f:apiVersion: {} + f:fieldPath: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/registration"}: + .: {} + f:mountPath: {} + f:name: {} + f:dnsPolicy: {} + f:hostIPC: {} + f:hostNetwork: {} + f:restartPolicy: {} + f:schedulerName: {} + f:securityContext: {} + f:terminationGracePeriodSeconds: {} + f:tolerations: {} + f:volumes: + .: {} + k:{"name":"certs"}: + .: {} + f:name: {} + f:secret: + .: {} + f:defaultMode: {} + f:optional: {} + f:secretName: {} + k:{"name":"dbus-socket"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"dev"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"driver-path"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"noderoot"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"pods-path"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"registration-dir"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"sys"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"volumedevices-path"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + f:updateStrategy: + f:rollingUpdate: + .: {} + f:maxUnavailable: {} + f:type: {} + manager: Go-http-client + operation: Update + time: "2021-04-28T15:49:35Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:status: + f:currentNumberScheduled: {} + f:desiredNumberScheduled: {} + f:numberAvailable: {} + f:numberReady: {} + f:observedGeneration: {} + f:updatedNumberScheduled: {} + manager: kube-controller-manager + operation: Update + time: "2021-04-28T15:58:08Z" + name: powermax-node + namespace: powermax + resourceVersion: "5022" + uid: 2f56ff2e-5e99-4557-9572-dad4126e30f3 + spec: + revisionHistoryLimit: 10 + selector: + matchLabels: + app: powermax-node + template: + metadata: + creationTimestamp: null + labels: + app: powermax-node + spec: + containers: + - command: + - /csi-powermax.sh + env: + - name: X_CSI_POWERMAX_DRIVER_NAME + value: csi-powermax.dellemc.com + - name: CSI_ENDPOINT + value: unix:///var/lib/kubelet/plugins/powermax.emc.dell.com/csi_sock + - name: X_CSI_MODE + value: node + - name: X_CSI_DEBUG + value: "true" + - name: X_CSI_PRIVATE_MOUNT_DIR + value: /var/lib/kubelet/plugins/powermax.emc.dell.com/disks + - name: X_CSI_POWERMAX_ENDPOINT + value: https://10.0.0.1 + - name: X_CSI_POWERMAX_DEBUG + value: "false" + - name: X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION + value: "true" + - name: X_CSI_POWERMAX_INSECURE + value: none + - name: X_CSI_K8S_CLUSTER_PREFIX + value: CSM + - name: X_CSI_POWERMAX_USER + valueFrom: + secretKeyRef: + key: username + name: powermax-creds + - name: X_CSI_POWERMAX_PASSWORD + valueFrom: + secretKeyRef: + key: password + name: powermax-creds + - name: X_CSI_POWERMAX_NODENAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: X_CSI_POWERMAX_ISCSI_ENABLE_CHAP + value: "false" + - name: X_CSI_POWERMAX_ARRAYS + value: "1234567890" + - name: X_CSI_POWERMAX_PROXY_SERVICE_NAME + value: none + - name: X_CSI_ISCSI_CHROOT + value: /noderoot + - name: X_CSI_GRPC_MAX_THREADS + value: "4" + - name: X_CSI_TRANSPORT_PROTOCOL + - name: SSL_CERT_DIR + value: /certs + - name: X_CSI_IG_NODENAME_TEMPLATE + - name: X_CSI_IG_MODIFY_HOSTNAME + value: "false" + - name: X_CSI_POWERMAX_PORTGROUPS + value: iscsi_csm_cicd + image: dellemc/csi-powermax:v1.6.0 + imagePullPolicy: Always + name: driver + resources: {} + securityContext: + allowPrivilegeEscalation: true + capabilities: + add: + - SYS_ADMIN + privileged: true + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/lib/kubelet/plugins/powermax.emc.dell.com + name: driver-path + - mountPath: /var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices + mountPropagation: Bidirectional + name: volumedevices-path + - mountPath: /var/lib/kubelet/pods + mountPropagation: Bidirectional + name: pods-path + - mountPath: /dev + name: dev + - mountPath: /sys + name: sys + - mountPath: /noderoot + name: noderoot + - mountPath: /certs + name: certs + readOnly: true + - mountPath: /run/dbus/system_bus_socket + name: dbus-socket + - args: + - --v=5 + - --csi-address=$(ADDRESS) + - --kubelet-registration-path=/var/lib/kubelet/plugins/powermax.emc.dell.com/csi_sock + env: + - name: ADDRESS + value: /csi/csi_sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + image: k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.1.0 + imagePullPolicy: IfNotPresent + name: registrar + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /registration + name: registration-dir + - mountPath: /csi + name: driver-path + dnsPolicy: ClusterFirstWithHostNet + hostIPC: true + hostNetwork: true + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 + tolerations: + - effect: NoExecute + key: node.kubernetes.io/memory-pressure + operator: Exists + - effect: NoExecute + key: node.kubernetes.io/disk-pressure + operator: Exists + - effect: NoExecute + key: node.kubernetes.io/network-unavailable + operator: Exists + volumes: + - hostPath: + path: /var/lib/kubelet/plugins_registry/ + type: DirectoryOrCreate + name: registration-dir + - hostPath: + path: /var/lib/kubelet/plugins/powermax.emc.dell.com + type: DirectoryOrCreate + name: driver-path + - hostPath: + path: /var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices + type: DirectoryOrCreate + name: volumedevices-path + - hostPath: + path: /var/lib/kubelet/pods + type: Directory + name: pods-path + - hostPath: + path: /dev + type: Directory + name: dev + - hostPath: + path: /sys + type: Directory + name: sys + - hostPath: + path: / + type: Directory + name: noderoot + - hostPath: + path: /run/dbus/system_bus_socket + type: Socket + name: dbus-socket + - name: certs + secret: + defaultMode: 420 + optional: true + secretName: powermax-certs + updateStrategy: + rollingUpdate: + maxUnavailable: 1 + type: RollingUpdate + status: + currentNumberScheduled: 2 + desiredNumberScheduled: 2 + numberAvailable: 2 + numberMisscheduled: 0 + numberReady: 2 + observedGeneration: 1 + updatedNumberScheduled: 2 +kind: List +metadata: + resourceVersion: "" + selfLink: "" \ No newline at end of file diff --git a/cmd/karavictl/cmd/testdata/kubectl_get_all_in_powermax_update.yaml b/cmd/karavictl/cmd/testdata/kubectl_get_all_in_powermax_update.yaml new file mode 100644 index 00000000..20312732 --- /dev/null +++ b/cmd/karavictl/cmd/testdata/kubectl_get_all_in_powermax_update.yaml @@ -0,0 +1,1530 @@ +apiVersion: v1 +items: +- apiVersion: v1 + data: + ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EVXdOVEUxTWpFeE5Wb1hEVE14TURVd016RTFNakV4TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTlNKCklQNWpkMzZ4bU5sZUs3MzJjU1BiczlrbGNNUnM3bDFNNVBpZkZHWDVwR05zRVpnc00rV3BGSEpCUEhLWmFlNEcKTlNhK2o1WnNqY2VMclBabmt3bnRUSHkyMGp4d0JRcVJjUEh1ZXF4bHNNaSswaXh5bVd3U1JDMHR3bHN5NWdGegpJU2M3UW1odEwxQjFnVVA3WHd0MkR5cmdPMHpuT21vSGwrRUl3bk5ORUhCbjZTSWxPbUd6bXFIcC9Qbzl5UkRrCnJhTXQwUXhRSGVPOXdJcWRaOC9pdEI2SWhha01zKzBsQ2hZWHlJSFJrakVQUWVmOEkzdUpTbjdpalV5cDBSdWEKSlB0aVBNd2JZdGUrd1lmL0hQVjcvTlhtVEx0ajV4SGlLSkNhaDRxd2pjZGxvNHNEQzNGT0pWZjJnWVRaN3RTSQpyVlRwd1dvc0FzU1lkQlhjbkJjQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFHbE5SQURJRW1jbk5CY0h4cUZRK0c2ZnpyejEKUzVZRjBMdW42TEduN3pkQS9uYjgxZkZJYldhb010VFBNcjJQSXdTT0xyaStqTGwwS0dnVm1JZ0tjcjEwSkpWNgpKYUVhdERUdmFpa2haazZ6bC81WnZiZ3FtT1RMRGhtMmJJS0Z0NDQ2OHMyZ3ZZbmNoVVRzYVFXR2owMHZQSGk1ClA0RjdUSGhlcnlaNDZ6dkV2RjNIb0pIUmVSdWdTbDJianFDc3hsWDVINlRqVXJGT2Mza3JzU3NlbFRVWnVLb3gKNkhnQUVxVXNMSEc3cVpBYlFKaVlEZ0s5WWdNcWticEltOXd0STlsQUFjdkwwQjZQb0lrcVNRbWpNUDF6akRmYwpiWi9NdVNwWVlISEdTbGhhd1hiWCtRcTNuZ1dIL0IyS0pVeFY5WVJsUlpKVnlndGtZb2VaSnFqYU1iVT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + namespace: cG93ZXJtYXg= + token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklqSTRNRFZTYTJwaGJrRnROemxyV1VORFdVOVBiVmhyT0hGbmEyRlZXVnBHYm05d2NuTjRaemRNZGxVaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUp3YjNkbGNtMWhlQ0lzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUprWldaaGRXeDBMWFJ2YTJWdUxXNTRZbkprSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXpaWEoyYVdObExXRmpZMjkxYm5RdWJtRnRaU0k2SW1SbFptRjFiSFFpTENKcmRXSmxjbTVsZEdWekxtbHZMM05sY25acFkyVmhZMk52ZFc1MEwzTmxjblpwWTJVdFlXTmpiM1Z1ZEM1MWFXUWlPaUprTm1WbE5HSm1NaTFtWmpaaExUUXdNV010T1dFME5TMW1OVFppTVRZeVlqVTBaamtpTENKemRXSWlPaUp6ZVhOMFpXMDZjMlZ5ZG1salpXRmpZMjkxYm5RNmNHOTNaWEp0WVhnNlpHVm1ZWFZzZENKOS5UVmR4eUlGZkNwMF84a3o5Y25zdllQeVNkZWlWdlViWWIwcm1ESEJjZUJDdjZsQnlTQjJmWjlmTmtPNXJSb1hlbUVha0Myc2dmVzV3eGJMMG5wS1UxVDFkQW55QS1uLVhodEtTQ2I2UThnc21kRjFEaTd0N014UERBVGFEMEM1Y1hCNFY2LXRNMmVSRlVCb3pMemZmMU9EZll2RWNGSjZyc04zX09LV3pPbndrX05fb1oxbGxNeXdFQWVZNTBXbnQ4UWRFQkdaOFNQWXRXVVFYalE0N09sNVFTOXRDY1VpWTFaYXRYVGwwMGpsYXhhUUgyaE1qWWkxYnlILVdZWENSbVZSUUJQWE13dDZKTU9pUUJUT3hkQ1VXOTFzYVRtLWRHTFFQeEIxNHB5UzdzQjBPbWlZUVZSc085RUd0bi1jeUFMV09sTUtvaDhNbGxWTjZCcWhKUFE= + kind: Secret + metadata: + annotations: + kubernetes.io/service-account.name: default + kubernetes.io/service-account.uid: d6ee4bf2-ff6a-401c-9a45-f56b162b54f9 + creationTimestamp: "2021-05-06T16:05:36Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:ca.crt: {} + f:namespace: {} + f:token: {} + f:metadata: + f:annotations: + .: {} + f:kubernetes.io/service-account.name: {} + f:kubernetes.io/service-account.uid: {} + f:type: {} + manager: kube-controller-manager + operation: Update + time: "2021-05-06T16:05:36Z" + name: default-token-nxbrd + namespace: powermax + resourceVersion: "305431" + selfLink: /api/v1/namespaces/powermax/secrets/default-token-nxbrd + uid: 8be028a3-dcc5-452a-a76c-878bcc49727e + type: kubernetes.io/service-account-token +- apiVersion: v1 + data: + config: W3sidXNlcm5hbWUiOiItIiwicGFzc3dvcmQiOiItIiwiaW50ZW5kZWRFbmRwb2ludCI6Imh0dHBzOi8vMTAuMC4wLjE6OTAwMCIsImVuZHBvaW50IjoiaHR0cHM6Ly9sb2NhbGhvc3Q6OTIwMCIsInN5c3RlbUlEIjoiMDAwMTk3OTAxNTAzIiwiaW5zZWN1cmUiOmZhbHNlLCJpc0RlZmF1bHQiOmZhbHNlfV0= + kind: Secret + metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"v1","data":{"config":"W3sidXNlcm5hbWUiOiItIiwicGFzc3dvcmQiOiItIiwiaW50ZW5kZWRFbmRwb2ludCI6Imh0dHBzOi8vMTAuMC4wLjE6OTAwMCIsImVuZHBvaW50IjoiaHR0cHM6Ly9sb2NhbGhvc3Q6OTIwMCIsInN5c3RlbUlEIjoiMDAwMTk3OTAxNTAzIiwiaW5zZWN1cmUiOmZhbHNlLCJpc0RlZmF1bHQiOmZhbHNlfV0="},"kind":"Secret","metadata":{"annotations":{},"creationTimestamp":null,"name":"karavi-authorization-config","namespace":"powermax"},"type":"Opaque"} + creationTimestamp: "2021-05-06T17:01:21Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:config: {} + f:metadata: + f:annotations: + .: {} + f:kubectl.kubernetes.io/last-applied-configuration: {} + f:type: {} + manager: kubectl + operation: Update + time: "2021-05-10T19:27:11Z" + name: karavi-authorization-config + namespace: powermax + resourceVersion: "1236152" + selfLink: /api/v1/namespaces/powermax/secrets/karavi-authorization-config + uid: a979891e-c7c2-4ef7-8ce2-689f9b6c652c + type: Opaque +- apiVersion: v1 + data: + ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EVXdOVEUxTWpFeE5Wb1hEVE14TURVd016RTFNakV4TlZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTlNKCklQNWpkMzZ4bU5sZUs3MzJjU1BiczlrbGNNUnM3bDFNNVBpZkZHWDVwR05zRVpnc00rV3BGSEpCUEhLWmFlNEcKTlNhK2o1WnNqY2VMclBabmt3bnRUSHkyMGp4d0JRcVJjUEh1ZXF4bHNNaSswaXh5bVd3U1JDMHR3bHN5NWdGegpJU2M3UW1odEwxQjFnVVA3WHd0MkR5cmdPMHpuT21vSGwrRUl3bk5ORUhCbjZTSWxPbUd6bXFIcC9Qbzl5UkRrCnJhTXQwUXhRSGVPOXdJcWRaOC9pdEI2SWhha01zKzBsQ2hZWHlJSFJrakVQUWVmOEkzdUpTbjdpalV5cDBSdWEKSlB0aVBNd2JZdGUrd1lmL0hQVjcvTlhtVEx0ajV4SGlLSkNhaDRxd2pjZGxvNHNEQzNGT0pWZjJnWVRaN3RTSQpyVlRwd1dvc0FzU1lkQlhjbkJjQ0F3RUFBYU1qTUNFd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFHbE5SQURJRW1jbk5CY0h4cUZRK0c2ZnpyejEKUzVZRjBMdW42TEduN3pkQS9uYjgxZkZJYldhb010VFBNcjJQSXdTT0xyaStqTGwwS0dnVm1JZ0tjcjEwSkpWNgpKYUVhdERUdmFpa2haazZ6bC81WnZiZ3FtT1RMRGhtMmJJS0Z0NDQ2OHMyZ3ZZbmNoVVRzYVFXR2owMHZQSGk1ClA0RjdUSGhlcnlaNDZ6dkV2RjNIb0pIUmVSdWdTbDJianFDc3hsWDVINlRqVXJGT2Mza3JzU3NlbFRVWnVLb3gKNkhnQUVxVXNMSEc3cVpBYlFKaVlEZ0s5WWdNcWticEltOXd0STlsQUFjdkwwQjZQb0lrcVNRbWpNUDF6akRmYwpiWi9NdVNwWVlISEdTbGhhd1hiWCtRcTNuZ1dIL0IyS0pVeFY5WVJsUlpKVnlndGtZb2VaSnFqYU1iVT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= + namespace: cG93ZXJtYXg= + token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNklqSTRNRFZTYTJwaGJrRnROemxyV1VORFdVOVBiVmhyT0hGbmEyRlZXVnBHYm05d2NuTjRaemRNZGxVaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUp3YjNkbGNtMWhlQ0lzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUp3YjNkbGNtMWhlQzFqYjI1MGNtOXNiR1Z5TFhSdmEyVnVMV3R5Tkcxeklpd2lhM1ZpWlhKdVpYUmxjeTVwYnk5elpYSjJhV05sWVdOamIzVnVkQzl6WlhKMmFXTmxMV0ZqWTI5MWJuUXVibUZ0WlNJNkluQnZkMlZ5YldGNExXTnZiblJ5YjJ4c1pYSWlMQ0pyZFdKbGNtNWxkR1Z6TG1sdkwzTmxjblpwWTJWaFkyTnZkVzUwTDNObGNuWnBZMlV0WVdOamIzVnVkQzUxYVdRaU9pSTRNekptWVRSa1ppMHdOamMzTFRSa05qWXRPR013TkMwME1UQTRNREV4WWpReVl6Y2lMQ0p6ZFdJaU9pSnplWE4wWlcwNmMyVnlkbWxqWldGalkyOTFiblE2Y0c5M1pYSnRZWGc2Y0c5M1pYSnRZWGd0WTI5dWRISnZiR3hsY2lKOS5rczZNV1FaUW9Oa0pWOFhfcmFpRTBGUVlEa2RIUklvclVwd0JMT1pia085Y0pjbDFfTVhjVUJiNG5FU2lMWDZGRVJQMDJ2TVo2Q0E5Tm92QnJTUHYwOVJPOXV2WC1sM2tITGY0UWZJcVBDWWJNaEdDU2RFMGJudmJkVXBmYkFIbnBmLVU3QU14ckF5ZHprUENQSFhGcjVUdENoWGFQb0w2MmlSc3NWa0oxXzdfaVNYTENLODZTa096c1BLT2l3NTNWNUUzV3NyT01jSGJkMWlNbElXaWo0bVlEUks4LVZxNzhidktJUkJ2ell5bUNQbHBKOXZKYzVVVHhQSFkyQk9UcC0zTHFmUEFnSXc1ZlpUNEo3QTlyRzdUYVowcWYxNDlkRnplNnNBbkFTeEc4MXFKWEI5TWZjT1FaN0tqZDFpMFlfMmxxem5STm1RN2xZZzNGOU8zRHc= + kind: Secret + metadata: + annotations: + kubernetes.io/service-account.name: powermax-controller + kubernetes.io/service-account.uid: 832fa4df-0677-4d66-8c04-4108011b42c7 + creationTimestamp: "2021-05-10T21:24:23Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:ca.crt: {} + f:namespace: {} + f:token: {} + f:metadata: + f:annotations: + .: {} + f:kubernetes.io/service-account.name: {} + f:kubernetes.io/service-account.uid: {} + f:type: {} + manager: kube-controller-manager + operation: Update + time: "2021-05-10T21:24:23Z" + name: powermax-controller-token-kr4ms + namespace: powermax + resourceVersion: "1260686" + selfLink: /api/v1/namespaces/powermax/secrets/powermax-controller-token-kr4ms + uid: f81c6944-9d30-411c-b070-6b8d104bc760 + type: kubernetes.io/service-account-token +- apiVersion: v1 + data: + password: c21j + username: c21j + kind: Secret + metadata: + creationTimestamp: "2021-05-06T16:05:39Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:password: {} + f:username: {} + f:type: {} + manager: kubectl-create + operation: Update + time: "2021-05-06T16:05:39Z" + name: powermax-creds + namespace: powermax + resourceVersion: "305440" + selfLink: /api/v1/namespaces/powermax/secrets/powermax-creds + uid: a0661380-48d3-4823-8c85-b49290f7d4a6 + type: Opaque +- apiVersion: v1 + data: + access: ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmhkV1FpT2lKcllYSmhkbWtpTENKbGVIQWlPakUyTWpBMk9ESXhNRFFzSW1semN5STZJbU52YlM1a1pXeHNMbXRoY21GMmFTSXNJbk4xWWlJNkltdGhjbUYyYVMxMFpXNWhiblFpTENKeWIyeGxjeUk2SWxSbFlTSXNJbWR5YjNWd0lqb2lRMjltWm1WbEluMC5KWk9oRDZKQ1FLUm9wdFdGaXp3eFJ5TmxBNFREZmpUbXJSeENlMGlWVWxN + refresh: ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmhkV1FpT2lKcllYSmhkbWtpTENKbGVIQWlPakUyTWpNeU56UXdORFFzSW1semN5STZJbU52YlM1a1pXeHNMbXRoY21GMmFTSXNJbk4xWWlJNkltdGhjbUYyYVMxMFpXNWhiblFpTENKeWIyeGxjeUk2SWxSbFlTSXNJbWR5YjNWd0lqb2lRMjltWm1WbEluMC5XdnI1S2ZkV181dWNaRDV4c2RsbnVocWpaZElQQXpfa21rNFdaUURRaFgw + kind: Secret + metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"v1","data":{"access":"ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmhkV1FpT2lKcllYSmhkbWtpTENKbGVIQWlPakUyTWpBMk9ESXhNRFFzSW1semN5STZJbU52YlM1a1pXeHNMbXRoY21GMmFTSXNJbk4xWWlJNkltdGhjbUYyYVMxMFpXNWhiblFpTENKeWIyeGxjeUk2SWxSbFlTSXNJbWR5YjNWd0lqb2lRMjltWm1WbEluMC5KWk9oRDZKQ1FLUm9wdFdGaXp3eFJ5TmxBNFREZmpUbXJSeENlMGlWVWxN","refresh":"ZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SmhkV1FpT2lKcllYSmhkbWtpTENKbGVIQWlPakUyTWpNeU56UXdORFFzSW1semN5STZJbU52YlM1a1pXeHNMbXRoY21GMmFTSXNJbk4xWWlJNkltdGhjbUYyYVMxMFpXNWhiblFpTENKeWIyeGxjeUk2SWxSbFlTSXNJbWR5YjNWd0lqb2lRMjltWm1WbEluMC5XdnI1S2ZkV181dWNaRDV4c2RsbnVocWpaZElQQXpfa21rNFdaUURRaFgw"},"kind":"Secret","metadata":{"annotations":{},"name":"proxy-authz-tokens","namespace":"powermax"},"type":"Opaque"} + creationTimestamp: "2021-05-06T17:00:56Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:access: {} + f:refresh: {} + f:metadata: + f:annotations: + .: {} + f:kubectl.kubernetes.io/last-applied-configuration: {} + f:type: {} + manager: kubectl + operation: Update + time: "2021-05-10T21:27:25Z" + name: proxy-authz-tokens + namespace: powermax + resourceVersion: "1261411" + selfLink: /api/v1/namespaces/powermax/secrets/proxy-authz-tokens + uid: 04e6eb6a-98e5-440a-a9c7-ece7183e06b7 + type: Opaque +- apiVersion: v1 + data: + rootCertificate.pem: "" + kind: Secret + metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"v1","data":{"rootCertificate.pem":""},"kind":"Secret","metadata":{"annotations":{},"creationTimestamp":null,"name":"proxy-server-root-certificate","namespace":"powermax"},"type":"Opaque"} + creationTimestamp: "2021-05-06T17:01:21Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:rootCertificate.pem: {} + f:metadata: + f:annotations: + .: {} + f:kubectl.kubernetes.io/last-applied-configuration: {} + f:type: {} + manager: kubectl + operation: Update + time: "2021-05-10T21:27:26Z" + name: proxy-server-root-certificate + namespace: powermax + resourceVersion: "1261413" + selfLink: /api/v1/namespaces/powermax/secrets/proxy-server-root-certificate + uid: 838f9763-f16d-4cb5-a800-be56778f7373 + type: Opaque +- apiVersion: v1 + data: + release: SDRzSUFBQUFBQUFDLyt5OSsyL2F5clk0L3E4Zzd2ZUhlNlVtdFUzb3JpTlZYMkdDalFrNHdjWVBmSHBVK1JYc01INGNQd0J6dFAvM2oyYjh3SUROSTBtNzl6MjMzYW8yaFprMWE5YXM5MXBqLzd2dGFhN1Z2bThIL3RvS1hXM1QvdFIydkJlL2ZmL3Y5b3NUUnZFUDB3cUFuMXBtKzc1TllBUitnM1Z2Y0d4RzRQY0VmdC9wM09MWUgxOUpFdTkrdmNIdTdqR3MvYWtOdExmTU1pMWd4V2c4K2tka2hFNFFPNzdYdm0relhoUnJBTFFNM3czZ29QYW5kaFJyY1JLMTc5dmxPbjkrYWh1MkZzWVFjZGVLTlZPTE5mZzUzNTRST1RlVkxkbysrdGFPNHlDNi8veDU0Y1Iyb3Q4YXZ2dlp0QUQ0ZkRBNjhwUFFzS0wyL1Q4dW0vSFBUKzJWRlVZWjl2anRsMXZzYUUvUGNPeEUyN1Q2QXR2Njc3N3Z4WnJqV1dGTGlQMVFXMWd0MW91dDhFVXpyUDlwbWFHenNzTFdZNkpib1dmRlZ2VGRjN3pZV29RYWhIWGJtdGxPMUVKN2J6bWVBUkxUaWxyV3lnclQySGE4UlN1MC9wVTRvV1cyWXI4VmhQN0tnWGkxVm82R2x0YWk3OTdhQXFDbFJTMnRWV0tWbzlFSFdoVGRmdmZhbjlwTEsxMzdvWW1JWUVRT09nTTBCdTdXMVp4OEEvRDNrdWdQRmdDRFNiLzk1ejgvdFIwRDdidWduN2JTWWkyTThOdU1rRWxraFlidnhaWVhJNW9tbndtTTdINjlJKy8rLytnYmdXSGZFd3dqdnF5KzNiVS90YlhBa1VycXJuRDBUU0FkMFB2UFQyM2dHOHYydlpjQThLa2RXMjRBdE5qYVE2Lzg4dk1QMndLQkZVYTNjUURnVVNIZWFiZi8vRlF6RnFJWitnQlk0VzJxdVpYaGM0VUtKRmRLRFFLczlGZC9ZYjRPSGpVQ0pPcUR2eEFKS1RWZDhLcUs5T3VjSUhIZG16N3Fzb1ROWmQ0Mm1jR1h2dE5iNkM0ZHF6Ti9ZWFdpeFJpTWdNNUl0a0dJeVF4K0wxRGtpNEMvNmtRWE0xd3kwaGtwTGVjbzNIb3VjK0RKb2Y2dzBsNGl1bEtreXZSV0ZicFBjeGtIUm9leTU0UzRlRkd3eDdHQXhYMDNEblIzK29VZGNKR3BjSmlxakFTZDJJQytTNjgxU1FXR3h3VTZjZmVGSFk2Y3VUeEo1b3FFYVF5WmFrcGdtd3hZNlU0M2ZCcE9FazMrdW9KN1BOeUgxWWxpbGdFdXkwZ2J0dCtWNS9JR1Y1VkpNdTlJVzVNaFkzNDRDa3hYU3JOOWRZSHUwbzdPU0V0MnlLZW1MSkV2VTMvQk1sMWJsOFV2N0REK2d4MVNxU1ozTWRYcE9TTmxFc08vYzRKTXpPRm9wVE1iWURqc01iMXltbHl3UG9GK2gvU0Y2dzdqUDhZQ0JmUWhCOWdoVHI3MVhESWFTSW5haDNDRDFKUTN3Tmo2ajJ5L0Y3TU12ZFpFTTlVNzB0clkrZ3M1SGIzcUJKbXFERWptQ2c5cG4yaGJlenQyd1lvRkdKeXpZSWNqWUJBa2JyZ2N5T2RrWjZ4TUhBWGkzZTh0NEo3bTN1UUxTMGVPU2tnWTY2d1hyR2ZhSnNQNTZMTzdDWXpPMUJuM2U0N0tTSkdxOENBYkk2MVZoc1pVZ1kzWS91alZjQ1hiWk1RY0xyYUFmTTEzUml0VG9iWlBEcVd6enNpRWUyVDdWS29xM01wVVJxK3FrcStycUVEMytPME9ieFVZN2lpYlYxbmZKR2hzVGl6UTUzbG5CT2IxdUt6bkN2K3E5YlAxeGdKbEd3d1lHaTZKRzhOc3ZSUDBTWFNDQjBaYTRrcW95c2pKZi9OVUpjTkRaOERXN0tPMU91OVlhNjBxbzYwR1pVbnVZcVpMUmlhVXU2dlgzcWYvbVhQS2FjTXUzbkpPQm9QMDFOWmtwTVFjcWl0OUtNV3F6RVZ6R2NRTmVEZmo1Wm9nMzBjRWFYREVkMWVlcWRIaFY0WkxlNnBRNnBtU3h3MVgydW9kS1owVFVyWkhqOFAwenNoV0NlbFZaK2l0UVVnTnZIY0N4Mng4alZ5eUo5YWxrSjQwT2p6a2QwSW5Ocmd1SXh3Q1habXNqQTV2bThNR1hINHFQWXF6cERHVG9WODFCajhoajI4NXR4UDhWcDZGZUluK2VqVUk4RVlaUlo5eGcrRlA2Nm5yOENuTzBEYUh2RDBuN0JqS3NwR1NXNU9oTWJOQnp4cE1wc2NhY1hDNXJTWjBvZDFKNTdJSnhtNTBaNlRkUUUrYlpYUGU0UUxkSlplcURCTFZKWDhWUDYvVTRSbGJVcU8vbGFuL3lqTFFKcElkbGxGWGhrTnRkWmRlRzRTOU1vYzhNQlp2MEUyRUJIVU5kaGxmbkpBYm9tc2JRODdYTzlQa1RUS2tjTWxjb2JZYVEyTEkzMEM2OG5vYW9jOEt0U3h0bk11bFVENXp1VnFxOGdhYzRlTVNqL0hiZUhwM0pneTMwajJrczdiakRvZk5GUjV2b1BNbDh2V1JlRVZ6aFR2dno5VHo0TS9IYnpqSjFpeHNlOGxiWituNGZqMEcvWEpadW9QOGgySUxiM0tSZm9XK3ZVN2dPL21TZWFDNklOR1FqOWx0MEN0N3ZGbHZGMXdlK3NDWUtzRDlUaFp6VjRyMGpyRlFYVEpsR2ZqYk9vWTZiS3lNZ01Gc2dqbEJZM3FIZldUN01EN0JGcG84WDZqS1lERUdxcTBQSldDazNWUlZxRWlUdVNLK3FJOEphczk0dDRZbWswbjFuS0dQb3ZlN3J6cUJOY3M2MnNzRzJxSjlITnhjYjM2SUwwUTEyZFN6UHFmaFNtdWRBYTlGWEZEUlkxQnZSR09YVytuQ0NYOGMwb0RodHBxeVR5YzFwK0dsdkZ2WXVUMWQ5aFk3QS9GMTFVQWxjTnRvMEtWNzhVREphNGhlRjh0U0ZXZWxHdGU1UE9TbGVDeGdaV3crSlRZNDlPTU1BT05KcWEvSjNhVW1kNzNmOGZCUGk0ZTNwano2bHlwejJDNG16bk1TTkFjTVR3M21oRVROQ1c1bHlsMHM1OHRrTHVPTk9RNkkyMWhHdGkzVmlVMmtLbXltMnhEZHBLM0IwSytOT0JlMGdmdnpFQThJcWp4SFoxZlBJK0lwWFZibzNZSGhBaWhMQ0wreEt5VnpHY2JzMDRVNUhPR3Fja3hMWXpnS2RJOTMyVDRMakJRRFJycFBSOVpwenUyY1hkL0xmaS9PTUQrUHlNanpRbStqYjBZRFZlNHVDN2c3L2R5N1JGN3lmTlNCbkRIMDJoaE9WdFg4R2M5QVBVaDJkVmxLekY0UXF3cHZRejA2bi9sdnhUMnAwQytUcTM1WGdMN1lYT0hBZUZuaEd5SGpXWU9SWHArZ1B6c3NkZWsyV3hQcVhScUhPbGJ0OTV5WkltM05QclUyWEpMUVpCNndROTVYQlNveFpkeFJGWGFoRS9QRnZyeFNnZTV4MkZ6dVFyMjlNSm12aTBJSGpwRXM3ODYyeWcvVExJOVluTjhXNFE3dHc2dWY4ejZPN002TW9SMVYzbXdSN3YyM3loS0ZxVEsrMXFIdG1wWHdnY25RMEJiWUZkalJYQjRCZlRqNWtzbHQ5dmN0T2dQdXFhUjVCaHZTT2xDZFhpSzVkR1RLMGhiWnZ4MmVDWXFiSkE3Q2Y0VXhWOEdYdVM1WXFZdzBPNkpUUDVlSEliK1NaVHJXKzlmQVh5OTBGMEJmSXpIN3ZidTk5U0JQbFRydjhqMllEQm1weWlpVEZXK1NuMjhHOCtDM0w5VzF4Z0tGNlRpd2RYbmR5RE5qajRmNkxaMFhQdUErL3NRRitHOVZaVVJvTWdlbU12ZXFkNlRFSEZSczA1RU1JZjJ5YjU5MjUybXJyaHJvTHNDczJlNHMyRDYxMWdtZTBqMCttTXFxcThuZHdCd3U5L2dwODNWeW1Sdnd1QUgzZ0hPdkdpTXRUWGtUNks0NVVvbnV5bkNsSlQrVW9MMzBlTVVHODQ2RS9KOGRUMlYveDBMT3QvVHViQS9IVkdXS1YrdzE5RzF5Zi93QXR4Sm1xQ3JMTDdudGZqeUNoZUNSNit3OHlmVEpvVVo2M1pySVA4cDQ1YW5oOTdGd3BWMnN3bWJJdFU1c1Ztb0hqRE44WTN6dVNxbnVTaGowRTZCZm96SGsxanpZUnhZVDA0SHVTbWx1eHd1WWNlbXZNRVVlcXBEcDh2d0NYYWE5MHZhNTBzYVVRUXJ0STd2RWNhTXpoZlp3WmJwZ3FRb1VwakhpWW9wem95bzhOb3RsYlUzdVpqb1V3aFB1bktxUG84bTRyUkpReGlyenFqeWU4NkhobW5XMGpkaytHNDlsYnFzSnVLMHlQUFN2dDgvQzFKK0svRUJjU2pNeFhUckhaNDh0V0FlTHpWY01aNXRnUXZtVHBaV3BUTW5KYkxFMjB1TnpHUXM5Wnl6Z0hiMHpDbFdGalUzR2hySFowdGhpUkNOY0tIc3lEd3dIei9rWTJ0c0QyRkRXWC8yYTlVcTdRUEVEWHVBbGJsYkgxeGt2aWwvWVBrbk1GWFpsZUZJeUppQ055RmVEV0NZR1FiNXFhLzlnVGhZM3oyUm9zL2g2V3BjK0xyZWFFekV3Ky9oU3ErRlh0ay9GU08vUU1LNWFIT014OWZmT29yQTlPVDl0VWZ4ekNKY0I4Vncyd1JYMi9FSEVsb2N3OTJTaWdIbGd3ek0rVlNiSjRkeXFuczl3b2xPMVU2ZGJNdjVDTWJaTUwxWG9qM1FtNUtodmwrZjJLRFR5VTU3YkVHTkVGd0dIZXN6VmxBVjVnUnphTEozbnhnUXEweTgwbGFxeUdsajlmYmtyenh1dUlSVmpvSjIvR0MvY2xNRVM4clB1bXBqMmdHMG0vY2E1bUNialFPOUkyUE5zY0RjWlRwcGxraUJUalpEU3NjTDdNSVpYaHhPU2M1cHhlcDZKamJCVVJuTG5paFNaZmR3MU9uelhZRVF5ODIvS3MxNnFzbXFiOGdialBVNjBGQXBBZTd1YjEzTlV4Y2E0UGpyN3huV2dyNlJDMnkxRDNjNGgrOVVzLzlLZE9SelpZN25JNCtBN1g3bVo5aTZxRnlnak1KWk4yMlNrN2JQRXJ3eUdqSFRDN0Q0ck1BNDlwQU1GZEc5ZXk1dUZ2SlU2Y2wxanM0WVpqWjZjM3NwMDZYVGNHZUc2Zy9USEN2RzFCM1ZBOUhnd0orTTlFVWR4NFlITk9kUmhXNTNnUWxXWnhpb0Qwam85cG1lNmFEcFhlTDhHajhjRzNWVG1GTTJQc21rSE1LK3lhOTdCM0wrRmJhdmtYV1ZFdDlnWWpvRHFncnRuSmY0RHhVK0tGRURmak8yUE9CaXZvcHlHb2dZcUl5MVpackFRZDduN1JSNGpUSE05dFVjSGxJZEYvcWRVL0g1U2xpbzFnWitxWnk2UldWWHVFaWZ0NElBZThQU0lGdkZKblEzTThqUXpmekh1cUxiaGtLa3AzMld5UTJRMUo4ai9CN3hRNUxVNVpEK0hrNVB5aSt3NElXRmptUStNZWw4WXlhSEkwSmoyY0l4SEZYWlREdXd3djZuS1hYdnVib0RhcHpERGs4Q0JUYXo0bGFmeXpPK3k2d05WM2tUc2dKc0pBaVhzY3NKa3l0SWpZQkRnQzdUVm1meUpDVnVONHc1ejBXNjI5ckZkejc0WGgxS2swOVFLN3QrQytsTGVkT1lLMlA0SythM2p6M285ZjlwMlRwcHRaNm9xZkdvSmVLQjdQREE4MWRiNytOWms2TlI4d0RZbi9OMjZlZkZjV1pDVGJlK1VuMXlWelZQalVEd003ZTVZeWYyU0IyejVTTytmM1RTcjk5MlpwWCt6L092dDM3NTlFL2JxRmN1c3JtY04rVUlQbnRRWkIzNUtlZ2JXNHFWUGxiNE0yeCt0OVk0SkRCZTNyZjVYcDhibS9NVjY1akJuY2JDZUsyMDFKUUNIYStVeW5lZlk2MjJVM29FMlNseVlqQTF5SFFIbExyRGNhKzMyVHBmOElyLy9jaC81bEczL0hWODJ4cGRxWGtkNXIwOG9NbVJIVlViY1hGbVVNSy9MZGZEUWw0TGpEbVNnNEhGcGFzcWJTR1JJS1BOZGVCNzYwTFF0NWNEUGdHdkt1SjNWWmFJRm0rbW4yTWp3Z3pvNU1ZaUZ3OUxYOGUrSCtFYTAvUUo5WndXbm5pVk1FbVlpUFZjd1hoQWtsUllCK1RRVmNicU90ejZrRnRlb3l5L3dNWmhCNVV6UlhoeTJiNjhORnlRbU0xK3dqclFkTytnTWdjNXNnQzVQa2psQnhoOVIrM2tVcUFiOGoydDhqVExKSUgram92K3pPclFxNDY4b2ozMEt2b3RxRlF1MmQ4cm41V2FDUk5LekpUK2RZZUJKNnYwVTJ6bFhNTFFPTjhONCtzeCtUK1pPYTJBT2VIRWs4YWR0dm9OcWdNSkY4S1l6M0tURkpVN0o5S1YwdVl3UEpia2JHQjNLVjVVUllBZTJLTkhVRE5uT0liWFM1QzUya0xmQ2RSZHNEY1lHaGlzZTI2enp1RXNpSmduTnRKWVl3eVhqcHZ4MjBSTW1FRkpYZENXM2FkeUZ0YTFVbGZsdEhTNlovb29COU1kTmhRT0dXNSs3UDdQWDZWVGlaaEpHQ3Z5SmMrSzkwVXFmK2ZWMWdTRUg1cDBSTUFjeHNLUVJVRjhieGwxWVc0TitqTEZ1cEZsV3B4aFN0dEhoT25wbnREemxyOGswK1NCaTRFVWNrQW92amJpcFpMOUlTMGtRTWZBOFc1em0rNmRaejdrV05qK1ErcEpvWE9QUFp2cHBpZHZXZ0FkelQvS084bTR1SFJtRTZLRDZGN0puTFBSeE42Wk1ZbXE5bmp4dGUzQnVMRWpVeXhTVEJHa0FHRUhrS0drZ3ZVaExlaUtJUENVTnp0RW00OWRkTE1tRm1rSTlxTW9JMDJRVnhTV3FwTm82QTVaNXJIem9rNk40bVhXb3J5eXpXWm1FaEdxVGhpS3RUT1pOOGpxYUFZNmU0cExBVDYvQm0wSnJ6MlQ2VHBDN1cxWG1jS1F2OW5GTmRLTDdrYmhPeFNVNWx5Vnl4a3NqV1JBNVdzRzYxRXc4bHR0bSs4OUJYeC9heksycVFEL2Y3aDcxYkRUYXozMWExT29jWlFSTWREZElnanI0empxQ1UvUlNiTGJuMStrNXVrc21kZmFqT2Y2NWhJZXBaeEh3UTNGSlNpSTl1VkxlUmxqUmx3ZlAwbVRJUjRNZ2szcC80bGplaGEwOVV6QnVJa21jeUV1akY1RWUwZndTekUvYTVndml0TGxBUGVoRDZOdEphVk90WWw3MjlsVHFGTmZTRHFNRmNVbXJwMlA5QTFseDZkUnc2YTVFMklISlNGbS80SUdlUWpJeTVGZUN4NjEwNTBLOE1GTVFCOXhMZHFZOEt5NGxpcTg1ejU4ckN6MkhxOVAxMS9pYWZSWTdqa09QZTQ3TzhaWkVqNmdaNEtZemZDUXFPQ1hNY1A1NWlwR1RzN3hWcldjTlI3YnVjWWpQUlJpdk1lU3JUcXdQOUJycm5NTkp4TG1KZ25HMENQZ1hmZ0NFTS9Idks5VC9OWGE3NXN6QlVNRzZ6L3hBUXJHUGd2UDBUS0ltVSttTWYzdXdUOVRmSXFKOHVsajIrd2hRVC9OQWRXbGNIMDRYck1OZXFxTkhQSTU4N0JFUHdJc3dJR2ZTb0Y0dm45QXRzVTd3Z2VvQlZ1OXdXTzdUN09QandySGNlKzNKM3lhZjlpWjhDOTNWdThaVzcrYzh4YnhHYzZpREx1dEJyc0g3cjZ2WEhjSnVrcVBqM0NMQkFjT3JqdzFRem50QUp2b1Erc29vVi81NG1IOXE3SU01bFhOaXBOZ1k4bDJlQVFjOVJ6dTlNU2VrMUJ3ZTZQQWlSbmlvaXcwbzZIdWxxc0kvWFJBUE5lNVo3MUNJTitieXV0anpvci80OXEzaGFuVGtaSmZWejl5TXJybU5zOWZ0Q1RWYWtZbnB1d2RkaHBrRkNWU0hBb2F3MTBVSHJmaEtGL1BzVjlaOTFseFJPdDFSN1RSM2c1NWZNOWV1UldkbXJXZFhacU4zMmJUampscVBXNnR5a1VtamlwdHBRaG5aUC9pWk5aNzZEU2ZpK2FaMWNCaE5abC92VUVEM09GK1RWYXc0YXJpQlgzQ3RIVjBEL0w5OG5SMlpYZUV2YjlzdnorSEs2K3Q1bUFjd1MraXVESFJOeVE1VWIzcnU2aTZZZDZSVVUvanV2Q2kzb1hRYmh4a3VIZXhmVzkxZGI4cm9rbCtQUVRRQWtTcWJRTzAzWEdNajBOV3EvN2dySDM5em52bEpWenk2SzVVUi94T3VkaUM2L2ZWWE9ncDZmdEJWRGk5dkdZY3dTcjNNMjZxTXIzVEFBYk1YMkFZRFpQUzRCSmxNbmh6S05vYlVkdHlaYjQ0TVBYTytyUnpKUUNrcjEvREN6ckFhUkZhRzBqdHNZV2hqZEtWc3NMSG5yaFJWWGJxNVFxMHZwT2U3cmt0Y3ZnNXlBeXRPUXUrRWcwU3VWYm03MVJqZ21ya3p0Ti91Znl5WHN5dmsvN29yRHdqL24zQmRvd251UjF6VHlHQi84UFVNUkw4UHVKYmh3L0JZa0tpSEp5YzcyeDBkN1pYUjRaOVVoVWV0NU1lLzg0bUJWOXFRQ24yNFZBUEQ0ekNKQUpnMktHQk1yMnovengzamd6U09RVWl2cGpJS3pDRjRLTnB4amtzNjFCcnFPMDNlQUpXUWxrZDQ3OHJVdHNIUWppWnZBcE1Cb0M3TVJGZE5HRlRHZGtRY3pCU01Ic3hFOEZUNkY1Vy9jM2tUNlIxeldsbWJOZ2pPaHJLYzY2d2FQUDR2bHZuUHRublVwZW9INGhMSXZEUjZtUzFwam04dUY3ODV3RHViVnJ3c2Jiek1iQzJiMlhHQlhUenUrMkFKL0p0ZHI1YmllWnBkTS8rQW9ERm93di9Zdmplbm83SzJ5S3dVbzh2MDNXRTd3UW40NTBzSFY1WG9LVngzd2QyVDgzV1Z0MjFGbXN5dXRJN2tvTWRlOU1tMVBwUThUZTV1eDUwcXZvaW1sZlFTNUVud1V0ZjZVNThPeFovNXdlazBZK2s3bklYRjAxTWdEVStuYXZQeTIyVXRLNElncWFnOE9CTkphWFpSS3BqTjBsM0VKcGc3WkdqS3lCWmo0dzRWbWJJWjZONWtWWlhYckIwRHRjaWk4eDRUZkdBUThaYTl1cVZHZXVKcDZsa1F1K0lIeUpSVWJTRVFhRjRVNlFueU9RMkdESFJ2ZXRCT0t5V2F3cTAxUmtyZlZKSzk1TndPMHQ5R3FaUHRnU3FQY0RYOUthbm1xajZjQ1JpWTVpV0JFYjhFRDFPSnB4VmNwV1lETUpoSy9HaUczVjJUZXQ1cUJGaFBDU2sxR2VCbTZXRUo3aTlRYy90MW1ON05XMUVXTDMwcVFtbG9WSEtpY2IzRGcwdExMTlZ5dlNCMlo3eklTZUpTZkdQSkhpUzVmM0IwWFNZdmU3NEwxemVWR3Z1WHRkU1V2cE5UWGxmWTUybTN6RkZWcnl2OGJxWDUzVXBUeXM5c1NRNTQ4VXlaVEZSVG5jQysxTk9kY2pWWmlsVDY5RjdyOHJwTlkxVVhBSjBwU2kvWnRmd3NIcElRTHpTVWVXdDh1RHhYSW5Mc1ZJTGpkbm5tYTl0VFJLendRK2orYkNDOVRER2JFbnMvcGUydVdPdEJHTkJUQlpkbXZEUnFiREd0Mk95clc1MEVpVVBmb2IzOGIrVjlodlBuU2xGK21qNWU2OGYrakhNdjJyMGEyeEhjNlZ0d29VUXdvbVRwZEt2TW9ZOHhWMGJwWEFHS3hnQk1sZEhqekdyYUNLNXZvYW55a1VpUG5tVWF2RUE3SVMzQkF5ODF0RVEzeDFyb2tWRjdMVXRIZWVyemNjZ0pYa3BWQmVYWkFZeUxyZUh5OFQzeER1dDJWN3I3SWVlN2szVjY5RHpEcDlmNE1ObGNrZk1ObDF5Wi9jTzJDVEo3M0NYNjdlSVdpcUVJcUFjRlEvd21DdlNJbm9yODdGZWZJL3NxcnB0YmNTNXJXZVA2SDlHdXhndFRzVHNUQjZRZ1pXMS80Z3pqbm1kWHRUM3c2Vnp1YmcyR1RFMGF4aWY4YWs2UVVVM3IxUm1jdU5tTUpoOTRhU1FxR0Q4U1Q3ZStybXBMK00xdE0wOHpqS2RSamtRaVJWN0VwN01CTFY3VmlsbXh6eElqeFFhenNWR01jbVhMVXVrM2l5YU1Wd2VDcUtvS1pqK0xPSC9lQmg2MkY4bmtVcFBWcnNDUTIveXhNWWV0TU80YzhkUEh4U09JVndhbU1NT2w2Vlh0ZVI2MU1qeStlQndmeEFmVHNXQ0xXbS9mMStwUzVKWmlBOFprdll1dnZMMHRkM0tLaDh0SFAvTUExZkdWeWNmaFJCdy9SZ2JscFRvRnJjbzFUMTNCU3ZVT1phdEVrWHZ0T1ZNWExLRk9tM2RRcnR6Vyt5Zjl1YlZPOE51eGdxNXlYWHpWUzJlQWsrTWZxY3AwWlREazhtVDcwSEMwTWhqYXkxdWt2ckQ5VVYrVCtjQnc4eXR5TGgyZHpMMHdQREF2dWZwSTFJNnJ0aGwxTDJwejZ0U09xK0NEZEVlcUV5UjJ2aFhyUUc2V1lBWjE5WlN3MGZ4RHZUb21kckRQNmxqbVJHdlNRVHRZazM1Rmo0cVM2ZVdNNkVZb0ZzMGFaazZkaFdOQ09jaXZwVjZ5ZG5ZMUVNMWJHUjMwV1BWWUlVYTRnWk5GVzF0RFc5Z0lxQVRZbXNPUi9VSFhVYk82Y2hXdVE2RXJ6M01aSkkxWDEvT3I2cWgxVVRZRG84T244emRjVFQxOWRmVGFxK3FUbU8xak1iUVo2aXlyTTQ2VmZGOUhqOTdZalM5cUtlaXhBQm5OdHVPOXg2RlB5UVllZUIwTHZYaXNVQ3UxandlNnE2N0djaVkzWTZYc0NTSHI0bVEwVHk3MVJXeTRrcWNwcUk4bGV4UkFwbi9JbjVVRC83QkhTWlRYYkMvSXRROWlhYnFVc255RlJKN3hCVTducFBMOFF0bWJVWjlMT3V6Tm1XK2F4NnFCS20rV2hiNHpPaFNZNTdWV0ZJTk0zM045ZUNkYldRL0V4ZGVJSzdLRjdNVEgrZ2g3VjVQTEsvamJwcGJTSXg2dHVYNlBIdnVXNDM4Y2M1eXptUnRjSlVCaTRMdDlXOExYNDhmUERjRWE0c016SU0zNk1FYmRXV2Ywa0Q5aStYUmQyY0hYVUFjZjFHSlJMVHlueTlGNnhrL3hxU2pNVWloNGJvUGNOMWtaSG5nMmx2bGptQnF1akJkOHB6SVNlcVNpa2Y3RS9iekRIM3ZUR1EzUkt3VnErZmQ5ZkZYbmk5WFJmL2w0cWE5MUlUNUxWWmxmUkpzcWpHcUwrM0h0SGZWVlpINUVUZjlENlY5MHdMRVBORVNQSFB2Q0Rnby9rMHl0Qmo1RHRVNWx0Tkk3MHpldC81NjFWV2FFR3lsZTV3ZGR2di9yL0t1OWN4RnIvTGh6VndPS0drbXR2U3B6cXBjODlyVFJKMTBad3p4K09kdkV2ZkpCNGxxUnB3V1I3Y2NHZWlmYlpUM2RTQS9zZkpjRjJ4OFJFK0V1bmVUNXA2UEcvTk92ekVDOXJvZDV1ZXRoMEk2cThQWmtHcFE5aHhCTy9oaDlTSk9wVG15Q2VXY0orU3Q3L1BzMENEVzV1M3h5S0RtM2E3UHkxUXlEN05VUkovc0h6OWVteTFlMHNQbXJLUEw1QnpYcDNhUE5wc1RHTmpxVEpPdFp4OG0rOS82TENZWHZtbC9oL3lXUGhjajZJUTk2ZjR2ZW90Y0xla204L1J3cmV0dmZTZ09KRmJYdi85M1d3bEJMWmR1SkxlQkVjZlo2UndNa1VXeUZ6NkgxNG16YTkrMGUxWWZmbGkvV1ErOXQ5RTFMc0lCbHhINVl2c1hQQjFiMjFzTW8rK3JQNnF5K24zaHgrNTc0MURZaUo3UldWaGhaUWVodlVnak84alFkV0diNy9rVURrZldwN2JqYXdrTHZqd1RBY28zUFJ1UVVyMis4cWM2OVgrRzNCSHAvWStDSEVEcEJFSi9hUWVpNFdvZ0FHMVlZQzVZUld2bmVvcVVUOUswd2RsNGNRNHN0U1FPT3FXVXZmWXpEeFByVVRqd25DbXdyckw1L0VydEYvOTEvdmJ2cnRQK0V1MHFpMkhjZjBHVWFEdW1ENHkwZ0doKysydkxQVDIzVGV0RVNFTlBSTEEzZzc5WW12bXQveXFmM2g3M25Fb0xybTg1TE92U2pPRnVqamI1dmYwTEV2K2dRL3ZIdnR2WHlZaGx3ODV3LzJGaEdndDdQdWJUUzlqMmFmcnNzMzF0NTYvaWZYY3Yxdy9RbUNLMG9Ta0k0MUE4Z09BaS9QZGc0VVJ3aEpYZ2RWTk9KbGg4TjA3UGl0Ujh1YnhKUFcya09nTVNyaC96UFB6T0NRUnJPY3FXZDhZSWZXRjVrT3k5eFNYSElSRXpvSjBHRTNnR2Evd1AvMUNvL0U1WFBIY1IyMlNzNUh5dzlXVlNPS0xRQ0FEa01jVll6ZndQZjBJRHRSL0Y5RjhNdzlLN1NHOGd3eFhRL3ZGOUIzc1AzUWZaOUw3WTJjU21oQlg5OTNoOVcvbDc1N2paL0wrZ3RYQXU5ekJNeTVRbXhhRU81Z0pMamFRR2s0VzVSTi9MeTc2SGhReThqcmJ6U3RaUlhPQUJaUmJoUUhHcGVCTW44SFBxeGIvZ2dPNG82cWNPSlA1RGM0Wm5jZldwbmh2WUFoMHlvSXNPMlhLMlFnUmNIN0w5S05MdjJkb09vZm1DYjJaUWFTWDFxSkthVXdJdmM4MHpFNmRtU3AvaytwYzV3Y2NFUHZpNW1TMUprQnh3N0ZidERYcUJFWVNBdUJCR25lRXlhc1RUL3pBNUdORHZnbnlXc081bGg5SUFYcDBtL3lObGt1ZVpYdGo4cUh5MWM5cE02S0xjZTZLNjB6Ujl2V0pNTGdyOUpXMVdlWnEvd3ljYVYvWS9WUHQ4eHNxczcyN0RyZnp6cUdmMWl2ZzRTenJsYkgxNFhYSDZOYnZCYi9PdE5aaU4rR2JWUUJFSHNiaDcwSElqaFpMWncrb3Vnb0Z6bS9hYzlwL2JCNFcrbkpxVE9ZcTd3MkZ6bS9QeEJRcS83M2I1M2o1VXJmb2k2MlV1ZXpGZkQ2UVo2U200MTJZaDNIbFZHOFFyTUwrYnJKSmtJa09MUWE1MHMyRjFXTCt0U1VxQVgyRVV2aUZFWnlVWHJwbGszY3QyRHE0MlV3ZzFDV3VZdmRzdkdkYmlnOEp5UXgxYzg4Q3pkbzBXQ2JsYnNQK0Q2Qzh1Z2w5OTU4dzZMUEVHREFONVlLVi9ZdE1vOWpUM1lUOTQ4SGNOejZoMXplZVVsWEppcXNFNVdiWVhyVDdLTWFHMDNkY09lME8wekdCM1RVZDFEZmcvV3VuQXYrM0NldlBsMi9OcExKdXVhdmV5eU1lL21zeXFzeHJPcGpIbHlLT1NkcXdTWGpsMndHbmU0UUUzeDNVc0xVVll3ejhES1plYWxtaW4rWXI2eVRieTNlMERpKy9kVmVYRGo1Rmd6RGN1SEtuNWgwY044NkM3YUR4SGRHYnNIQ01ZbG5OY0FSa09iOFd2dnNVWkRrWDhYRGJYOHJhRithNmpmR3VxM2hqclFVQVQyTjlGUXI3M2ZHdXEzaHZwVkdncERHcXIzVzBQOS9UVFVQN09FM0l1enFFMzlZUmlHazMrUUdON0ZPalZwd0FuN093MzRWNlFCRVJHeVpHMGNhNFlOS1E5TnpPM0NDRzhkLzNQa0xHN3lwQTRrMEUweDZuN1Z1Y1VSVWJMMHh6NGRTMlFnN2I1a3RBdjlsUk01dm5kdWhjckEreFdSTHhKYUN5ZUtRKzNNWE1neE4zaytwcHhTaFJJNVc3VCt2eEl0aFFDV1h5TWpjajVuV1RIMEk4UTRHMTNrbnVKekdGY0dRckpndHgxNEJzdEVSMHlVNWJrZzFLL3QzMm5YdnpqdDZzRGovZ0VXWU4zQkNMd214WnJuSTM5bldOK2ZZY1Z1aWJzL2Jnbmk5dXZkaVNTcjZ4ZzJoT3hxbnZOaUlWTnhjM1B6M2Z1dmx1QW5vV0hkdDZyNjVIUGxnV09sMWtjdThIZFBDeHdwazdmNzFnci83aTBkejd4dkNWYTRjZ3lyWnhqUU5uejNYQ3ZXb0s5OC85MXJ0ZUJlNzF2bFZuY2dpeCtqUURNcUk3NTdiOFF0dzZXZkdUM2VCOVkrdXFHdUdiZGFFdHQrNkd5emM0YjZ4dkUvdzQxY2luS1lBQ3RDZzI1YVd1QmtUSC9mK3NmM3R1SDdvZWw0VmNqZjIvK0VJMXV0MElyUVpyS1J3TklpS3lwL1hGbWhudjJ3c09MdjdVK3Q3KzIxRmh0MjloR2E5dXlUYVFFcnRyTFBTV0JxeFdjanRORG5mOVpoMVlDQ3RiSzh1QTZGM1hJVkhJb1ZEbGNPc2lIWExBdzF5c210SHlGd0RmUUFIbllVVzE2YzEvU3ZXdWx3cTAwRXo3ZmRlZzltQnRBY3R3NjlKZ1JPbzMzcHFSU2E3U1IvNW9PUVF2cUZoNVdSNUhNVWEzRlN0K3FIN2pGYk12TzAzQVpadUpya3JiZmpZMFRPOWFKUlJlTURTZEY4QktmSWJrVE83VFZiZGJ3WC95Y3lsMjllRGZ5L1dyb0YvSFhyeFE5YkZYL3ppbFVqRktGY3NIRDlhZVZyM2w1eGJHWFhFblIzM3N2R2Ricm5wMkY2WHRBL2Z1bVAwbWp2UVNMS3dCOTgyVXlOZDRpL0ZqaldKclk4NkFCRlo0UVNSY0xGZDZiMTRuZ09Db2JPbUtoYXBDcThVNVdwR3RmOTQ1dzl5dkZNeDF2OERKOHZTdlJYeTRnTHQ2L2U1NFVrT3VucU5qaTdvUThzM25wQnNHczgyRE5BaS9NK3NkVkxTVncreXJZZzdvTm11YjRuV1BFK1RiVWdpTTZTRHdKcjlPK2p3RExRcENpUHdlOHorcmlRZzhhYWJvRW8vd1p1TUtnQlcyQmRUS3hpQXYrQWZTQk5ZRnF0RWhYNDUvRC9sWlJBT2VhbWxZWGI5NjB5MnQ2dHNyVFMrOWI1N01CdVFoRjIzN2V5cVB0ZHEreGxDMzdTR2pYWmcvTXJGZitIUVR6NzNMOXZ3WEM1K2lXWFFkMy93ZlNpWng4NFJscEtCTzJFVVN3N3NUM001aFFqb1Vob2ptZUYxUk8veVZreXkxVHR2b2RjWnlTaEU2ZDVodUMrK2x1ckZZVE95Z0hXd2pMMzBjbVgwZ0pOZDRBVE8xWjBNTEhWMGt3VDZVZGhMdnpvUFV4WXJ0U2Q1UWdBL1BWenNjSWdNalNBK090NEtaVDl1RytkeVBjZGpYNU9BQ2dvMWdOckxZMnFRd3pmZFRVbzF2OW9mVy92d2J1TlN0ZTErR041cTRQZEZlUlVmdlFGOXNmemt6emdKejNseHdQUFNnUCtCOWViREE2cGdmS20rOXJtTnQvT3JlRzc5ZUFoOEFIMzhQekVjck1HZ0lubmJPNC9mLzY4MHNMUHdORS9Rd1lGVnZ3NUFNbkM4YUxQNVdKd29US0RZMFRPajhnM2xxZDJOWGw2YU5yRlRtUFVUMzBZVUNMVE1QYzdTZzk5YjU4a0tNOUt2ZG5neCtSSjVHWS9IbGkrRWRhVis0WktJVHF6ZG5HWVp3amZtSFM2akZQZVM2RUNrUERJUHYvb0QvZ1pTN045U0RPcE4yWWZlalAyaWZzSThDd25EUG9pUDJpRTVmbmVHVmlQWDRVZi9iRW96QWI4ajJkK1FMTktBN0RXaE8xZmhKUW9ET281Z2c1OTkwZ1BJUlVYV3ZHamxSYWV4ZUdmUTZjaXRNeW9iaHl5QTBsa2hYRENSYWcrOXdSQmZ1SWYvanAwQXkySzFuNW9Yb1F1OS9Rd2FOUmVEZWkrT0JZd20xQTl6SkFlajBEVG43WFl2a2Z1eDIyUlpMK01QWVZNUmZhbzhlQkhmOWg3YnVSVGxFYS9rT2w3UE4rYkMwMWMrbjJ2c0hnaHlHZitTWm4vRUFhOHhQWUhwd3pFSlJLVjdiby81SitlbXJRVDhsOUQzNDlQd1dINDUvNFBpTjFzeUE5NkQwSWpTbmVuOFpueFBVNTRmdUpuY0p1enAvN1R1QWxTTFJCQkdDTU5ka0xSZnphc01JNU8wb1FwbWZmSGJEQjVIdmRtZzZ1d0tNRk1uaDVZZXY1aitDVE1UcDdUTlJ3RmljUHdUK0p6TTQzMzYwVDdjTFBvZUFKRHE2akJFOGxMa0lFVzI0ZEx1SEJlSm1IWG1jdjZsVEprVEF2R2U5R2JGOXgzcEkzSXllK2RQV1J3NjBHR2ZxQXRjaGZ4ZTV0eVRDZTBEUGhQRFRRZFJPQ2JiMERTTno4T0E5TmFuVnI3Nk9kaVhwUkdwK1lkL1Z6TXE1ZjgvY21udFVPTnNPMVByeDBRV3ByNTVJRzBMbEFvYWFFbjBRMTBQSzJUNklXSjl4a09oWnVNTGZlSG5rUS9EbWNWSU11aWUwMjg4TWE2ZlJXU0ZpNk9SZTU3KytabTlhMTdmT0x3QjlTellKb3c4dnoyLy8xMzcrR0JId2pDL3h5Ty9hK2IxczJONjV2V040Ukpoc0orWkpZUEtwSDhWK0tFVm5TelMwMS9PeVkwbWhINDVvM2p2ZmczaUtZM2VVdkF0MFA3QzRmbUhGK1NBTEl5RXBkdkh4QlJOTWROT1ZVYXRYM1dJSEVpUkhrVXFRRlMrRC8raHU3S0JlcDZqOTZtRTU2VWhzcllkeWwvSTNLS24vTjg2MzJ6UE5WaFp2dFJCdXNnU1hCUzFmL0lJYWFmOTJmRmFXRGR0eDZRQXZYRDlDbnNaNGxVNzhMZHZRbVpTd3pkeFlpZHRvUnZ3KzhxdTNneHByVlc4RW9FajJ6aXdlbzFCN2R2Mms2dmQyUUh6NEkvc0lDbndSK1p5N1BnNjJ6azZUV3VKVSs5TVR5OXhpV21jYmU2MEdBMGp3eDRGbk1lNmNUc2ErNGczcXl6L242UWVVR0Y5ZitBanBveXRaNG40SzBBK0NtMGUrOXVxU256M0hucEpicHZFUmRtNEU4dWRuVWkva3lKNUdRK1B0b3J1WENuSWJWYTJnc3FZcVdWMVFQZjdIbXgwenYrQlZJR3VSdm1ReEk2M2tJd2JNdE1nT010MklYbmwxOW5pWEo0V05XcE45aytoWDFpVmt3U0pPdGdnM0x6ZTlXRUhZQXM0WDZVQmRoUHE3UGU4YS9aRFlVYTIzNXppalpGZ1NQd2diOUlIK0hpKzNvWXltUVZuWk01OXFKaDlUcUg5S0ROOVNJZjlESlg4NHkvR2p1dTVTZnhOL3dyRnRXUFdQdmgwZ3B2WWh1NitORzNML1dqZ0tXWlZuaURUaDE2S3UwUGNRV2hHWUk2TDNjSmJ3OWR3Z3Q4clV3OW52T3lLZ3ZWMk05ZGgvQjFwM3JjV3Z6eEI0c29jQU1SdlFsUWorTTMxekhzODRPVHhERnZnT1V0WXZzYmp2MWM1bWprdnJ4di9PWWxnaGJybTdXSjc5N0FYc1VnYXhPSDJrMVdrYjhwMUcvOTBCZExpNVBRdWxsQVEvUnRsc3YrdCtQYytQOXkxajFvM2JtY2RZOTd6SCtkVGlyVzN1UHF3STI4UzRaL0RGLy9KNnV6L09KQkRUK2N2YVh3NFR4dy9pUWF1ZVEvK1lpT0MvVi9iUTI4OGF6ZmVBZ2ZWamx2dGQ1Y096OTcxRmVVeEp1Y3lnOHVqUCtTNHZUdit1clBxcTlLQTE0NFZaa25zUXZQLy85US84RFBxYUYrVkdudXpkME9selk3bkN4R1gxT0wvbDN0L2NuVlhyN2h1bDBEekRJZGRpSE1rOEJPM3RmN2RkN0x6Nm9pTnBjcjZwRzEzQ0JPSDV6dy9tK2Mrb3ljek1lcnlYenU5OUZYY3FCOWdYM0lIY09ENU9LK3phcWtPRnQ1UG9yUEUzclhZZG4wTU5nRGZPc3ZBSHhlNGJvVmEvaDNEN1hBUXg3T25kR0hyQ1UrMzVXRUZoR3ExMEpQcDNqTEM2TGZ2WXlHcHhvcjI1L2E1YVZvL0ZPN1RBaFhicHkyLy94L0FRQUEvLzk4QWVibG1jWUFBQT09 + kind: Secret + metadata: + creationTimestamp: "2021-05-10T21:24:23Z" + labels: + modifiedAt: "1620696093" + name: powermax + owner: helm + status: deployed + version: "1" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:release: {} + f:metadata: + f:labels: + .: {} + f:modifiedAt: {} + f:name: {} + f:owner: {} + f:status: {} + f:version: {} + f:type: {} + manager: helm + operation: Update + time: "2021-05-10T21:24:23Z" + name: sh.helm.release.v1.powermax.v1 + namespace: powermax + resourceVersion: "1260706" + selfLink: /api/v1/namespaces/powermax/secrets/sh.helm.release.v1.powermax.v1 + uid: 086faf2f-ec12-4138-9b55-b2cb5c26cbe3 + type: helm.sh/release.v1 +- apiVersion: apps/v1 + kind: Deployment + metadata: + annotations: + com.dell.karavi-authorization-proxy: "true" + deployment.kubernetes.io/revision: "3" + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{"com.dell.karavi-authorization-proxy":"true","deployment.kubernetes.io/revision":"1","meta.helm.sh/release-name":"powermax","meta.helm.sh/release-namespace":"powermax"},"creationTimestamp":"2021-05-10T21:24:23Z","generation":2,"labels":{"app.kubernetes.io/managed-by":"Helm"},"managedFields":[{"apiVersion":"apps/v1","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:meta.helm.sh/release-name":{},"f:meta.helm.sh/release-namespace":{}},"f:labels":{".":{},"f:app.kubernetes.io/managed-by":{}}},"f:spec":{"f:progressDeadlineSeconds":{},"f:revisionHistoryLimit":{},"f:selector":{"f:matchLabels":{".":{},"f:name":{}}},"f:strategy":{"f:rollingUpdate":{".":{},"f:maxSurge":{},"f:maxUnavailable":{}},"f:type":{}},"f:template":{"f:metadata":{"f:labels":{".":{},"f:name":{}}},"f:spec":{"f:affinity":{".":{},"f:podAntiAffinity":{".":{},"f:requiredDuringSchedulingIgnoredDuringExecution":{}}},"f:containers":{"k:{\"name\":\"attacher\"}":{".":{},"f:args":{},"f:env":{".":{},"k:{\"name\":\"ADDRESS\"}":{".":{},"f:name":{},"f:value":{}}},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{},"f:volumeMounts":{".":{},"k:{\"mountPath\":\"/var/run/csi\"}":{".":{},"f:mountPath":{},"f:name":{}}}},"k:{\"name\":\"driver\"}":{".":{},"f:args":{},"f:command":{},"f:env":{".":{},"k:{\"name\":\"CSI_ENDPOINT\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"SSL_CERT_DIR\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_DEBUG\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_GRPC_MAX_THREADS\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_IG_MODIFY_HOSTNAME\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_IG_NODENAME_TEMPLATE\"}":{".":{},"f:name":{}},"k:{\"name\":\"X_CSI_K8S_CLUSTER_PREFIX\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_MODE\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_ARRAYS\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_DEBUG\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_DRIVER_NAME\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_ENDPOINT\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_INSECURE\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_PASSWORD\"}":{".":{},"f:name":{},"f:valueFrom":{".":{},"f:secretKeyRef":{".":{},"f:key":{},"f:name":{}}}},"k:{\"name\":\"X_CSI_POWERMAX_PORTGROUPS\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_PROXY_SERVICE_NAME\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_USER\"}":{".":{},"f:name":{},"f:valueFrom":{".":{},"f:secretKeyRef":{".":{},"f:key":{},"f:name":{}}}},"k:{\"name\":\"X_CSI_POWERMAX_VERSION\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_ReplicationContextPrefix\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_ReplicationPrefix\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_TRANSPORT_PROTOCOL\"}":{".":{},"f:name":{}}},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{},"f:volumeMounts":{".":{},"k:{\"mountPath\":\"/certs\"}":{".":{},"f:mountPath":{},"f:name":{},"f:readOnly":{}},"k:{\"mountPath\":\"/var/run/csi\"}":{".":{},"f:mountPath":{},"f:name":{}}}},"k:{\"name\":\"provisioner\"}":{".":{},"f:args":{},"f:env":{".":{},"k:{\"name\":\"ADDRESS\"}":{".":{},"f:name":{},"f:value":{}}},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{},"f:volumeMounts":{".":{},"k:{\"mountPath\":\"/var/run/csi\"}":{".":{},"f:mountPath":{},"f:name":{}}}},"k:{\"name\":\"resizer\"}":{".":{},"f:args":{},"f:env":{".":{},"k:{\"name\":\"ADDRESS\"}":{".":{},"f:name":{},"f:value":{}}},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{},"f:volumeMounts":{".":{},"k:{\"mountPath\":\"/var/run/csi\"}":{".":{},"f:mountPath":{},"f:name":{}}}},"k:{\"name\":\"snapshotter\"}":{".":{},"f:args":{},"f:env":{".":{},"k:{\"name\":\"ADDRESS\"}":{".":{},"f:name":{},"f:value":{}}},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{},"f:volumeMounts":{".":{},"k:{\"mountPath\":\"/var/run/csi\"}":{".":{},"f:mountPath":{},"f:name":{}}}}},"f:dnsPolicy":{},"f:restartPolicy":{},"f:schedulerName":{},"f:securityContext":{},"f:serviceAccount":{},"f:serviceAccountName":{},"f:terminationGracePeriodSeconds":{},"f:volumes":{".":{},"k:{\"name\":\"certs\"}":{".":{},"f:name":{},"f:secret":{".":{},"f:defaultMode":{},"f:optional":{},"f:secretName":{}}},"k:{\"name\":\"socket-dir\"}":{".":{},"f:emptyDir":{},"f:name":{}}}}}}},"manager":"Go-http-client","operation":"Update","time":"2021-05-10T21:24:23Z"},{"apiVersion":"apps/v1","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{"f:deployment.kubernetes.io/revision":{}}},"f:status":{"f:availableReplicas":{},"f:conditions":{".":{},"k:{\"type\":\"Available\"}":{".":{},"f:lastTransitionTime":{},"f:lastUpdateTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}},"k:{\"type\":\"Progressing\"}":{".":{},"f:lastTransitionTime":{},"f:lastUpdateTime":{},"f:message":{},"f:reason":{},"f:status":{},"f:type":{}}},"f:observedGeneration":{},"f:readyReplicas":{},"f:replicas":{},"f:updatedReplicas":{}}},"manager":"kube-controller-manager","operation":"Update","time":"2021-05-10T21:25:07Z"},{"apiVersion":"apps/v1","fieldsType":"FieldsV1","fieldsV1":{"f:spec":{"f:replicas":{}}},"manager":"kubectl","operation":"Update","time":"2021-05-10T21:25:07Z"}],"name":"powermax-controller","namespace":"powermax","resourceVersion":"1260925","selfLink":"/apis/apps/v1/namespaces/powermax/deployments/powermax-controller","uid":"ac3fab65-6416-4793-9f62-972ce7ee3d44"},"spec":{"progressDeadlineSeconds":600,"replicas":1,"revisionHistoryLimit":10,"selector":{"matchLabels":{"name":"powermax-controller"}},"strategy":{"rollingUpdate":{"maxSurge":"25%","maxUnavailable":"25%"},"type":"RollingUpdate"},"template":{"metadata":{"creationTimestamp":null,"labels":{"name":"powermax-controller"}},"spec":{"affinity":{"podAntiAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":[{"labelSelector":{"matchExpressions":[{"key":"name","operator":"In","values":["powermax-controller"]}]},"topologyKey":"kubernetes.io/hostname"}]}},"containers":[{"args":["--csi-address=$(ADDRESS)","--v=5","--timeout=180s","--worker-threads=6","--leader-election"],"env":[{"name":"ADDRESS","value":"/var/run/csi/csi.sock"}],"image":"k8s.gcr.io/sig-storage/csi-attacher:v3.1.0","imagePullPolicy":"IfNotPresent","name":"attacher","resources":{},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/var/run/csi","name":"socket-dir"}]},{"args":["--csi-address=$(ADDRESS)","--volume-name-prefix=mich","--volume-name-uuid-length=10","--timeout=180s","--worker-threads=6","--v=5","--default-fstype=ext4","--leader-election","--extra-create-metadata","--feature-gates=Topology=true"],"env":[{"name":"ADDRESS","value":"/var/run/csi/csi.sock"}],"image":"k8s.gcr.io/sig-storage/csi-provisioner:v2.1.0","imagePullPolicy":"IfNotPresent","name":"provisioner","resources":{},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/var/run/csi","name":"socket-dir"}]},{"args":["--csi-address=$(ADDRESS)","--v=5","--snapshot-name-prefix=pmsn","--snapshot-name-uuid-length=10","--timeout=180s","--leader-election"],"env":[{"name":"ADDRESS","value":"/var/run/csi/csi.sock"}],"image":"k8s.gcr.io/sig-storage/csi-snapshotter:v3.0.3","imagePullPolicy":"IfNotPresent","name":"snapshotter","resources":{},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/var/run/csi","name":"socket-dir"}]},{"args":["--csi-address=$(ADDRESS)","--timeout=180s","--v=5","--leader-election"],"env":[{"name":"ADDRESS","value":"/var/run/csi/csi.sock"}],"image":"quay.io/k8scsi/csi-resizer:v1.1.0","imagePullPolicy":"IfNotPresent","name":"resizer","resources":{},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/var/run/csi","name":"socket-dir"}]},{"args":["--leader-election"],"command":["/csi-powermax.sh"],"env":[{"name":"X_CSI_POWERMAX_DRIVER_NAME","value":"csi-powermax.dellemc.com"},{"name":"CSI_ENDPOINT","value":"/var/run/csi/csi.sock"},{"name":"X_CSI_MODE","value":"controller"},{"name":"X_CSI_DEBUG","value":"true"},{"name":"X_CSI_POWERMAX_ENDPOINT","value":"https://localhost:9200"},{"name":"X_CSI_POWERMAX_USER","valueFrom":{"secretKeyRef":{"key":"username","name":"powermax-creds"}}},{"name":"X_CSI_POWERMAX_PASSWORD","valueFrom":{"secretKeyRef":{"key":"password","name":"powermax-creds"}}},{"name":"X_CSI_POWERMAX_VERSION","value":"90"},{"name":"X_CSI_POWERMAX_DEBUG","value":"true"},{"name":"X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION","value":"true"},{"name":"X_CSI_POWERMAX_INSECURE","value":"none"},{"name":"X_CSI_POWERMAX_PROXY_SERVICE_NAME","value":"none"},{"name":"X_CSI_POWERMAX_PORTGROUPS","value":"powermax-port-group"},{"name":"X_CSI_K8S_CLUSTER_PREFIX","value":"MIC"},{"name":"X_CSI_POWERMAX_ARRAYS","value":"1234567890"},{"name":"X_CSI_GRPC_MAX_THREADS","value":"4"},{"name":"X_CSI_TRANSPORT_PROTOCOL"},{"name":"SSL_CERT_DIR","value":"/certs"},{"name":"X_CSI_IG_NODENAME_TEMPLATE"},{"name":"X_CSI_IG_MODIFY_HOSTNAME","value":"false"},{"name":"X_CSI_ReplicationContextPrefix","value":"powermax/"},{"name":"X_CSI_ReplicationPrefix","value":"replication.storage.dell.com/"},{"name":"CSM_CSI_POWERMAX_ENDPOINT","value":"https://10.0.0.1:9000"}],"image":"dellemc/csi-powermax:v1.6.0","imagePullPolicy":"Always","name":"driver","resources":{},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/var/run/csi","name":"socket-dir"},{"mountPath":"/certs","name":"certs","readOnly":true}]},{"env":[{"name":"PROXY_HOST","value":"proxy-host"},{"name":"INSECURE","value":"true"},{"name":"PLUGIN_IDENTIFIER","value":"powermax"},{"name":"ACCESS_TOKEN","valueFrom":{"secretKeyRef":{"key":"access","name":"proxy-authz-tokens"}}},{"name":"REFRESH_TOKEN","valueFrom":{"secretKeyRef":{"key":"refresh","name":"proxy-authz-tokens"}}}],"image":"sidecar-proxy:latest","imagePullPolicy":"Always","name":"karavi-authorization-proxy","resources":{},"volumeMounts":[{"mountPath":"/etc/karavi-authorization/config","name":"karavi-authorization-config"},{"mountPath":"/etc/karavi-authorization/root-certificates","name":"proxy-server-root-certificate"}]}],"dnsPolicy":"ClusterFirst","restartPolicy":"Always","schedulerName":"default-scheduler","securityContext":{},"serviceAccount":"powermax-controller","serviceAccountName":"powermax-controller","terminationGracePeriodSeconds":30,"volumes":[{"emptyDir":{},"name":"socket-dir"},{"name":"certs","secret":{"defaultMode":420,"optional":true,"secretName":"powermax-certs"}},{"name":"karavi-authorization-config","secret":{"secretName":"karavi-authorization-config"}},{"name":"proxy-server-root-certificate","secret":{"secretName":"proxy-server-root-certificate"}}]}}},"status":{"availableReplicas":1,"conditions":[{"lastTransitionTime":"2021-05-10T21:24:26Z","lastUpdateTime":"2021-05-10T21:24:26Z","message":"Deployment has minimum availability.","reason":"MinimumReplicasAvailable","status":"True","type":"Available"},{"lastTransitionTime":"2021-05-10T21:24:23Z","lastUpdateTime":"2021-05-10T21:24:26Z","message":"ReplicaSet \"powermax-controller-78f749847\" has successfully progressed.","reason":"NewReplicaSetAvailable","status":"True","type":"Progressing"}],"observedGeneration":2,"readyReplicas":1,"replicas":1,"updatedReplicas":1}} + meta.helm.sh/release-name: powermax + meta.helm.sh/release-namespace: powermax + creationTimestamp: "2021-05-10T21:24:23Z" + generation: 4 + labels: + app.kubernetes.io/managed-by: Helm + managedFields: + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: {} + f:meta.helm.sh/release-name: {} + f:meta.helm.sh/release-namespace: {} + f:labels: + .: {} + f:app.kubernetes.io/managed-by: {} + f:spec: + f:progressDeadlineSeconds: {} + f:revisionHistoryLimit: {} + f:selector: + f:matchLabels: + .: {} + f:name: {} + f:strategy: + f:rollingUpdate: + .: {} + f:maxSurge: {} + f:maxUnavailable: {} + f:type: {} + f:template: + f:metadata: + f:labels: + .: {} + f:name: {} + f:spec: + f:affinity: + .: {} + f:podAntiAffinity: + .: {} + f:requiredDuringSchedulingIgnoredDuringExecution: {} + f:containers: + k:{"name":"attacher"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"driver"}: + .: {} + f:args: {} + f:command: {} + f:env: + .: {} + k:{"name":"CSI_ENDPOINT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"SSL_CERT_DIR"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_DEBUG"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_GRPC_MAX_THREADS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_IG_MODIFY_HOSTNAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_IG_NODENAME_TEMPLATE"}: + .: {} + f:name: {} + k:{"name":"X_CSI_K8S_CLUSTER_PREFIX"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_MODE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_ARRAYS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_DEBUG"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_DRIVER_NAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_ENDPOINT"}: + .: {} + f:name: {} + k:{"name":"X_CSI_POWERMAX_INSECURE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_PASSWORD"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + k:{"name":"X_CSI_POWERMAX_PORTGROUPS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_PROXY_SERVICE_NAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_USER"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + k:{"name":"X_CSI_POWERMAX_VERSION"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_ReplicationContextPrefix"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_ReplicationPrefix"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_TRANSPORT_PROTOCOL"}: + .: {} + f:name: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/certs"}: + .: {} + f:mountPath: {} + f:name: {} + f:readOnly: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"provisioner"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"resizer"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"snapshotter"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + f:dnsPolicy: {} + f:restartPolicy: {} + f:schedulerName: {} + f:securityContext: {} + f:serviceAccount: {} + f:serviceAccountName: {} + f:terminationGracePeriodSeconds: {} + f:volumes: + .: {} + k:{"name":"certs"}: + .: {} + f:name: {} + f:secret: + .: {} + f:defaultMode: {} + f:optional: {} + f:secretName: {} + k:{"name":"socket-dir"}: + .: {} + f:emptyDir: {} + f:name: {} + manager: Go-http-client + operation: Update + time: "2021-05-10T21:24:23Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + f:com.dell.karavi-authorization-proxy: {} + f:kubectl.kubernetes.io/last-applied-configuration: {} + f:spec: + f:replicas: {} + f:template: + f:metadata: + f:annotations: + .: {} + f:kubectl.kubernetes.io/restartedAt: {} + f:spec: + f:containers: + k:{"name":"driver"}: + f:env: + k:{"name":"CSM_CSI_POWERMAX_ENDPOINT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_ENDPOINT"}: + f:value: {} + k:{"name":"karavi-authorization-proxy"}: + .: {} + f:env: + .: {} + k:{"name":"ACCESS_TOKEN"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + k:{"name":"INSECURE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"PLUGIN_IDENTIFIER"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"PROXY_HOST"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"REFRESH_TOKEN"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/etc/karavi-authorization/config"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/etc/karavi-authorization/root-certificates"}: + .: {} + f:mountPath: {} + f:name: {} + f:volumes: + k:{"name":"karavi-authorization-config"}: + .: {} + f:name: {} + f:secret: + .: {} + f:defaultMode: {} + f:secretName: {} + k:{"name":"proxy-server-root-certificate"}: + .: {} + f:name: {} + f:secret: + .: {} + f:defaultMode: {} + f:secretName: {} + manager: kubectl + operation: Update + time: "2021-05-10T21:27:26Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + f:deployment.kubernetes.io/revision: {} + f:status: + f:availableReplicas: {} + f:conditions: + .: {} + k:{"type":"Available"}: + .: {} + f:lastTransitionTime: {} + f:lastUpdateTime: {} + f:message: {} + f:reason: {} + f:status: {} + f:type: {} + k:{"type":"Progressing"}: + .: {} + f:lastTransitionTime: {} + f:lastUpdateTime: {} + f:message: {} + f:reason: {} + f:status: {} + f:type: {} + f:observedGeneration: {} + f:readyReplicas: {} + f:replicas: {} + f:updatedReplicas: {} + manager: kube-controller-manager + operation: Update + time: "2021-05-10T21:27:46Z" + name: powermax-controller + namespace: powermax + resourceVersion: "1261652" + selfLink: /apis/apps/v1/namespaces/powermax/deployments/powermax-controller + uid: ac3fab65-6416-4793-9f62-972ce7ee3d44 + spec: + progressDeadlineSeconds: 600 + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + name: powermax-controller + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + annotations: + kubectl.kubernetes.io/restartedAt: "2021-05-10T17:27:26-04:00" + creationTimestamp: null + labels: + name: powermax-controller + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - powermax-controller + topologyKey: kubernetes.io/hostname + containers: + - args: + - --csi-address=$(ADDRESS) + - --v=5 + - --timeout=180s + - --worker-threads=6 + - --leader-election + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: k8s.gcr.io/sig-storage/csi-attacher:v3.1.0 + imagePullPolicy: IfNotPresent + name: attacher + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --csi-address=$(ADDRESS) + - --volume-name-prefix=mich + - --volume-name-uuid-length=10 + - --timeout=180s + - --worker-threads=6 + - --v=5 + - --default-fstype=ext4 + - --leader-election + - --extra-create-metadata + - --feature-gates=Topology=true + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: k8s.gcr.io/sig-storage/csi-provisioner:v2.1.0 + imagePullPolicy: IfNotPresent + name: provisioner + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --csi-address=$(ADDRESS) + - --v=5 + - --snapshot-name-prefix=pmsn + - --snapshot-name-uuid-length=10 + - --timeout=180s + - --leader-election + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: k8s.gcr.io/sig-storage/csi-snapshotter:v3.0.3 + imagePullPolicy: IfNotPresent + name: snapshotter + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --csi-address=$(ADDRESS) + - --timeout=180s + - --v=5 + - --leader-election + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: quay.io/k8scsi/csi-resizer:v1.1.0 + imagePullPolicy: IfNotPresent + name: resizer + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --leader-election + command: + - /csi-powermax.sh + env: + - name: X_CSI_POWERMAX_DRIVER_NAME + value: csi-powermax.dellemc.com + - name: CSI_ENDPOINT + value: /var/run/csi/csi.sock + - name: X_CSI_MODE + value: controller + - name: X_CSI_DEBUG + value: "true" + - name: X_CSI_POWERMAX_ENDPOINT + value: https://localhost:9200 + - name: X_CSI_POWERMAX_USER + valueFrom: + secretKeyRef: + key: username + name: powermax-creds + - name: X_CSI_POWERMAX_PASSWORD + valueFrom: + secretKeyRef: + key: password + name: powermax-creds + - name: X_CSI_POWERMAX_VERSION + value: "90" + - name: X_CSI_POWERMAX_DEBUG + value: "true" + - name: X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION + value: "true" + - name: X_CSI_POWERMAX_INSECURE + value: none + - name: X_CSI_POWERMAX_PROXY_SERVICE_NAME + value: none + - name: X_CSI_POWERMAX_PORTGROUPS + value: powermax-port-group + - name: X_CSI_K8S_CLUSTER_PREFIX + value: MIC + - name: X_CSI_POWERMAX_ARRAYS + value: "1234567890" + - name: X_CSI_GRPC_MAX_THREADS + value: "4" + - name: X_CSI_TRANSPORT_PROTOCOL + - name: SSL_CERT_DIR + value: /certs + - name: X_CSI_IG_NODENAME_TEMPLATE + - name: X_CSI_IG_MODIFY_HOSTNAME + value: "false" + - name: X_CSI_ReplicationContextPrefix + value: powermax/ + - name: X_CSI_ReplicationPrefix + value: replication.storage.dell.com/ + - name: CSM_CSI_POWERMAX_ENDPOINT + value: https://10.0.0.1:9000 + image: dellemc/csi-powermax:v1.6.0 + imagePullPolicy: Always + name: driver + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - mountPath: /certs + name: certs + readOnly: true + - env: + - name: PROXY_HOST + value: proxy-host + - name: INSECURE + value: "true" + - name: PLUGIN_IDENTIFIER + value: powermax + - name: ACCESS_TOKEN + valueFrom: + secretKeyRef: + key: access + name: proxy-authz-tokens + - name: REFRESH_TOKEN + valueFrom: + secretKeyRef: + key: refresh + name: proxy-authz-tokens + image: sidecar-proxy:latest + imagePullPolicy: Always + name: karavi-authorization-proxy + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /etc/karavi-authorization/config + name: karavi-authorization-config + - mountPath: /etc/karavi-authorization/root-certificates + name: proxy-server-root-certificate + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + serviceAccount: powermax-controller + serviceAccountName: powermax-controller + terminationGracePeriodSeconds: 30 + volumes: + - emptyDir: {} + name: socket-dir + - name: certs + secret: + defaultMode: 420 + optional: true + secretName: powermax-certs + - name: karavi-authorization-config + secret: + defaultMode: 420 + secretName: karavi-authorization-config + - name: proxy-server-root-certificate + secret: + defaultMode: 420 + secretName: proxy-server-root-certificate + status: + availableReplicas: 1 + conditions: + - lastTransitionTime: "2021-05-10T21:24:26Z" + lastUpdateTime: "2021-05-10T21:24:26Z" + message: Deployment has minimum availability. + reason: MinimumReplicasAvailable + status: "True" + type: Available + - lastTransitionTime: "2021-05-10T21:24:23Z" + lastUpdateTime: "2021-05-10T21:27:46Z" + message: ReplicaSet "powermax-controller-6b4cd67f68" has successfully progressed. + reason: NewReplicaSetAvailable + status: "True" + type: Progressing + observedGeneration: 4 + readyReplicas: 1 + replicas: 1 + updatedReplicas: 1 +- apiVersion: apps/v1 + kind: DaemonSet + metadata: + annotations: + com.dell.karavi-authorization-proxy: "true" + deprecated.daemonset.template.generation: "3" + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"apps/v1","kind":"DaemonSet","metadata":{"annotations":{"com.dell.karavi-authorization-proxy":"true","deprecated.daemonset.template.generation":"1","meta.helm.sh/release-name":"powermax","meta.helm.sh/release-namespace":"powermax"},"creationTimestamp":"2021-05-10T21:24:23Z","generation":1,"labels":{"app.kubernetes.io/managed-by":"Helm"},"managedFields":[{"apiVersion":"apps/v1","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:deprecated.daemonset.template.generation":{},"f:meta.helm.sh/release-name":{},"f:meta.helm.sh/release-namespace":{}},"f:labels":{".":{},"f:app.kubernetes.io/managed-by":{}}},"f:spec":{"f:revisionHistoryLimit":{},"f:selector":{"f:matchLabels":{".":{},"f:app":{}}},"f:template":{"f:metadata":{"f:labels":{".":{},"f:app":{}}},"f:spec":{"f:containers":{"k:{\"name\":\"driver\"}":{".":{},"f:command":{},"f:env":{".":{},"k:{\"name\":\"CSI_ENDPOINT\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"SSL_CERT_DIR\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_DEBUG\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_GRPC_MAX_THREADS\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_IG_MODIFY_HOSTNAME\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_IG_NODENAME_TEMPLATE\"}":{".":{},"f:name":{}},"k:{\"name\":\"X_CSI_ISCSI_CHROOT\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_K8S_CLUSTER_PREFIX\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_MODE\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_ARRAYS\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_DEBUG\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_DRIVER_NAME\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_ENDPOINT\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_INSECURE\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_ISCSI_ENABLE_CHAP\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_NODENAME\"}":{".":{},"f:name":{},"f:valueFrom":{".":{},"f:fieldRef":{".":{},"f:apiVersion":{},"f:fieldPath":{}}}},"k:{\"name\":\"X_CSI_POWERMAX_PASSWORD\"}":{".":{},"f:name":{},"f:valueFrom":{".":{},"f:secretKeyRef":{".":{},"f:key":{},"f:name":{}}}},"k:{\"name\":\"X_CSI_POWERMAX_PORTGROUPS\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_PROXY_SERVICE_NAME\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_POWERMAX_USER\"}":{".":{},"f:name":{},"f:valueFrom":{".":{},"f:secretKeyRef":{".":{},"f:key":{},"f:name":{}}}},"k:{\"name\":\"X_CSI_PRIVATE_MOUNT_DIR\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"X_CSI_TRANSPORT_PROTOCOL\"}":{".":{},"f:name":{}}},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:resources":{},"f:securityContext":{".":{},"f:allowPrivilegeEscalation":{},"f:capabilities":{".":{},"f:add":{}},"f:privileged":{}},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{},"f:volumeMounts":{".":{},"k:{\"mountPath\":\"/certs\"}":{".":{},"f:mountPath":{},"f:name":{},"f:readOnly":{}},"k:{\"mountPath\":\"/dev\"}":{".":{},"f:mountPath":{},"f:name":{}},"k:{\"mountPath\":\"/noderoot\"}":{".":{},"f:mountPath":{},"f:name":{}},"k:{\"mountPath\":\"/run/dbus/system_bus_socket\"}":{".":{},"f:mountPath":{},"f:name":{}},"k:{\"mountPath\":\"/sys\"}":{".":{},"f:mountPath":{},"f:name":{}},"k:{\"mountPath\":\"/var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices\"}":{".":{},"f:mountPath":{},"f:mountPropagation":{},"f:name":{}},"k:{\"mountPath\":\"/var/lib/kubelet/plugins/powermax.emc.dell.com\"}":{".":{},"f:mountPath":{},"f:name":{}},"k:{\"mountPath\":\"/var/lib/kubelet/pods\"}":{".":{},"f:mountPath":{},"f:mountPropagation":{},"f:name":{}}}},"k:{\"name\":\"registrar\"}":{".":{},"f:args":{},"f:env":{".":{},"k:{\"name\":\"ADDRESS\"}":{".":{},"f:name":{},"f:value":{}},"k:{\"name\":\"KUBE_NODE_NAME\"}":{".":{},"f:name":{},"f:valueFrom":{".":{},"f:fieldRef":{".":{},"f:apiVersion":{},"f:fieldPath":{}}}}},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{},"f:volumeMounts":{".":{},"k:{\"mountPath\":\"/csi\"}":{".":{},"f:mountPath":{},"f:name":{}},"k:{\"mountPath\":\"/registration\"}":{".":{},"f:mountPath":{},"f:name":{}}}}},"f:dnsPolicy":{},"f:hostIPC":{},"f:hostNetwork":{},"f:restartPolicy":{},"f:schedulerName":{},"f:securityContext":{},"f:terminationGracePeriodSeconds":{},"f:tolerations":{},"f:volumes":{".":{},"k:{\"name\":\"certs\"}":{".":{},"f:name":{},"f:secret":{".":{},"f:defaultMode":{},"f:optional":{},"f:secretName":{}}},"k:{\"name\":\"dbus-socket\"}":{".":{},"f:hostPath":{".":{},"f:path":{},"f:type":{}},"f:name":{}},"k:{\"name\":\"dev\"}":{".":{},"f:hostPath":{".":{},"f:path":{},"f:type":{}},"f:name":{}},"k:{\"name\":\"driver-path\"}":{".":{},"f:hostPath":{".":{},"f:path":{},"f:type":{}},"f:name":{}},"k:{\"name\":\"noderoot\"}":{".":{},"f:hostPath":{".":{},"f:path":{},"f:type":{}},"f:name":{}},"k:{\"name\":\"pods-path\"}":{".":{},"f:hostPath":{".":{},"f:path":{},"f:type":{}},"f:name":{}},"k:{\"name\":\"registration-dir\"}":{".":{},"f:hostPath":{".":{},"f:path":{},"f:type":{}},"f:name":{}},"k:{\"name\":\"sys\"}":{".":{},"f:hostPath":{".":{},"f:path":{},"f:type":{}},"f:name":{}},"k:{\"name\":\"volumedevices-path\"}":{".":{},"f:hostPath":{".":{},"f:path":{},"f:type":{}},"f:name":{}}}}},"f:updateStrategy":{"f:rollingUpdate":{".":{},"f:maxUnavailable":{}},"f:type":{}}}},"manager":"Go-http-client","operation":"Update","time":"2021-05-10T21:24:23Z"},{"apiVersion":"apps/v1","fieldsType":"FieldsV1","fieldsV1":{"f:status":{"f:currentNumberScheduled":{},"f:desiredNumberScheduled":{},"f:numberAvailable":{},"f:numberReady":{},"f:observedGeneration":{},"f:updatedNumberScheduled":{}}},"manager":"kube-controller-manager","operation":"Update","time":"2021-05-10T21:24:26Z"}],"name":"powermax-node","namespace":"powermax","resourceVersion":"1260780","selfLink":"/apis/apps/v1/namespaces/powermax/daemonsets/powermax-node","uid":"ff7aee88-3b86-4ebf-be70-764d88403ace"},"spec":{"revisionHistoryLimit":10,"selector":{"matchLabels":{"app":"powermax-node"}},"template":{"metadata":{"creationTimestamp":null,"labels":{"app":"powermax-node"}},"spec":{"containers":[{"command":["/csi-powermax.sh"],"env":[{"name":"X_CSI_POWERMAX_DRIVER_NAME","value":"csi-powermax.dellemc.com"},{"name":"CSI_ENDPOINT","value":"unix:///var/lib/kubelet/plugins/powermax.emc.dell.com/csi_sock"},{"name":"X_CSI_MODE","value":"node"},{"name":"X_CSI_DEBUG","value":"true"},{"name":"X_CSI_PRIVATE_MOUNT_DIR","value":"/var/lib/kubelet/plugins/powermax.emc.dell.com/disks"},{"name":"X_CSI_POWERMAX_ENDPOINT","value":"https://localhost:9200"},{"name":"X_CSI_POWERMAX_DEBUG","value":"true"},{"name":"X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION","value":"true"},{"name":"X_CSI_POWERMAX_INSECURE","value":"none"},{"name":"X_CSI_K8S_CLUSTER_PREFIX","value":"MIC"},{"name":"X_CSI_POWERMAX_USER","valueFrom":{"secretKeyRef":{"key":"username","name":"powermax-creds"}}},{"name":"X_CSI_POWERMAX_PASSWORD","valueFrom":{"secretKeyRef":{"key":"password","name":"powermax-creds"}}},{"name":"X_CSI_POWERMAX_NODENAME","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"spec.nodeName"}}},{"name":"X_CSI_POWERMAX_ISCSI_ENABLE_CHAP","value":"false"},{"name":"X_CSI_POWERMAX_ARRAYS","value":"1234567890"},{"name":"X_CSI_POWERMAX_PROXY_SERVICE_NAME","value":"none"},{"name":"X_CSI_ISCSI_CHROOT","value":"/noderoot"},{"name":"X_CSI_GRPC_MAX_THREADS","value":"4"},{"name":"X_CSI_TRANSPORT_PROTOCOL"},{"name":"SSL_CERT_DIR","value":"/certs"},{"name":"X_CSI_IG_NODENAME_TEMPLATE"},{"name":"X_CSI_IG_MODIFY_HOSTNAME","value":"false"},{"name":"X_CSI_POWERMAX_PORTGROUPS","value":"powermax-port-group"}],"image":"dellemc/csi-powermax:v1.6.0","imagePullPolicy":"Always","name":"driver","resources":{},"securityContext":{"allowPrivilegeEscalation":true,"capabilities":{"add":["SYS_ADMIN"]},"privileged":true},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/var/lib/kubelet/plugins/powermax.emc.dell.com","name":"driver-path"},{"mountPath":"/var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices","mountPropagation":"Bidirectional","name":"volumedevices-path"},{"mountPath":"/var/lib/kubelet/pods","mountPropagation":"Bidirectional","name":"pods-path"},{"mountPath":"/dev","name":"dev"},{"mountPath":"/sys","name":"sys"},{"mountPath":"/noderoot","name":"noderoot"},{"mountPath":"/certs","name":"certs","readOnly":true},{"mountPath":"/run/dbus/system_bus_socket","name":"dbus-socket"}]},{"args":["--v=5","--csi-address=$(ADDRESS)","--kubelet-registration-path=/var/lib/kubelet/plugins/powermax.emc.dell.com/csi_sock"],"env":[{"name":"ADDRESS","value":"/csi/csi_sock"},{"name":"KUBE_NODE_NAME","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"spec.nodeName"}}}],"image":"k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.1.0","imagePullPolicy":"IfNotPresent","name":"registrar","resources":{},"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","volumeMounts":[{"mountPath":"/registration","name":"registration-dir"},{"mountPath":"/csi","name":"driver-path"}]},{"env":[{"name":"PROXY_HOST","value":"proxy-host"},{"name":"INSECURE","value":"true"},{"name":"PLUGIN_IDENTIFIER","value":"powermax"},{"name":"ACCESS_TOKEN","valueFrom":{"secretKeyRef":{"key":"access","name":"proxy-authz-tokens"}}},{"name":"REFRESH_TOKEN","valueFrom":{"secretKeyRef":{"key":"refresh","name":"proxy-authz-tokens"}}}],"image":"sidecar-proxy:latest","imagePullPolicy":"Always","name":"karavi-authorization-proxy","resources":{},"volumeMounts":[{"mountPath":"/etc/karavi-authorization/config","name":"karavi-authorization-config"},{"mountPath":"/etc/karavi-authorization/root-certificates","name":"proxy-server-root-certificate"}]}],"dnsPolicy":"ClusterFirstWithHostNet","hostIPC":true,"hostNetwork":true,"restartPolicy":"Always","schedulerName":"default-scheduler","securityContext":{},"terminationGracePeriodSeconds":30,"tolerations":[{"effect":"NoExecute","key":"node.kubernetes.io/memory-pressure","operator":"Exists"},{"effect":"NoExecute","key":"node.kubernetes.io/disk-pressure","operator":"Exists"},{"effect":"NoExecute","key":"node.kubernetes.io/network-unavailable","operator":"Exists"}],"volumes":[{"hostPath":{"path":"/var/lib/kubelet/plugins_registry/","type":"DirectoryOrCreate"},"name":"registration-dir"},{"hostPath":{"path":"/var/lib/kubelet/plugins/powermax.emc.dell.com","type":"DirectoryOrCreate"},"name":"driver-path"},{"hostPath":{"path":"/var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices","type":"DirectoryOrCreate"},"name":"volumedevices-path"},{"hostPath":{"path":"/var/lib/kubelet/pods","type":"Directory"},"name":"pods-path"},{"hostPath":{"path":"/dev","type":"Directory"},"name":"dev"},{"hostPath":{"path":"/sys","type":"Directory"},"name":"sys"},{"hostPath":{"path":"/","type":"Directory"},"name":"noderoot"},{"hostPath":{"path":"/run/dbus/system_bus_socket","type":"Socket"},"name":"dbus-socket"},{"name":"certs","secret":{"defaultMode":420,"optional":true,"secretName":"powermax-certs"}},{"name":"karavi-authorization-config","secret":{"secretName":"karavi-authorization-config"}},{"name":"proxy-server-root-certificate","secret":{"secretName":"proxy-server-root-certificate"}}]}},"updateStrategy":{"rollingUpdate":{"maxUnavailable":1},"type":"RollingUpdate"}},"status":{"currentNumberScheduled":2,"desiredNumberScheduled":2,"numberAvailable":2,"numberMisscheduled":0,"numberReady":2,"observedGeneration":1,"updatedNumberScheduled":2}} + meta.helm.sh/release-name: powermax + meta.helm.sh/release-namespace: powermax + creationTimestamp: "2021-05-10T21:24:23Z" + generation: 3 + labels: + app.kubernetes.io/managed-by: Helm + managedFields: + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: {} + f:deprecated.daemonset.template.generation: {} + f:meta.helm.sh/release-name: {} + f:meta.helm.sh/release-namespace: {} + f:labels: + .: {} + f:app.kubernetes.io/managed-by: {} + f:spec: + f:revisionHistoryLimit: {} + f:selector: + f:matchLabels: + .: {} + f:app: {} + f:template: + f:metadata: + f:labels: + .: {} + f:app: {} + f:spec: + f:containers: + k:{"name":"driver"}: + .: {} + f:command: {} + f:env: + .: {} + k:{"name":"CSI_ENDPOINT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"SSL_CERT_DIR"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_DEBUG"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_GRPC_MAX_THREADS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_IG_MODIFY_HOSTNAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_IG_NODENAME_TEMPLATE"}: + .: {} + f:name: {} + k:{"name":"X_CSI_ISCSI_CHROOT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_K8S_CLUSTER_PREFIX"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_MODE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_ARRAYS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_DEBUG"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_DRIVER_NAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_ENDPOINT"}: + .: {} + f:name: {} + k:{"name":"X_CSI_POWERMAX_INSECURE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_ISCSI_ENABLE_CHAP"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_NODENAME"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:fieldRef: + .: {} + f:apiVersion: {} + f:fieldPath: {} + k:{"name":"X_CSI_POWERMAX_PASSWORD"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + k:{"name":"X_CSI_POWERMAX_PORTGROUPS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_PROXY_SERVICE_NAME"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_POWERMAX_USER"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + k:{"name":"X_CSI_PRIVATE_MOUNT_DIR"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_TRANSPORT_PROTOCOL"}: + .: {} + f:name: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:securityContext: + .: {} + f:allowPrivilegeEscalation: {} + f:capabilities: + .: {} + f:add: {} + f:privileged: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/certs"}: + .: {} + f:mountPath: {} + f:name: {} + f:readOnly: {} + k:{"mountPath":"/dev"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/noderoot"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/run/dbus/system_bus_socket"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/sys"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices"}: + .: {} + f:mountPath: {} + f:mountPropagation: {} + f:name: {} + k:{"mountPath":"/var/lib/kubelet/plugins/powermax.emc.dell.com"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/var/lib/kubelet/pods"}: + .: {} + f:mountPath: {} + f:mountPropagation: {} + f:name: {} + k:{"name":"registrar"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"KUBE_NODE_NAME"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:fieldRef: + .: {} + f:apiVersion: {} + f:fieldPath: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/registration"}: + .: {} + f:mountPath: {} + f:name: {} + f:dnsPolicy: {} + f:hostIPC: {} + f:hostNetwork: {} + f:restartPolicy: {} + f:schedulerName: {} + f:securityContext: {} + f:terminationGracePeriodSeconds: {} + f:tolerations: {} + f:volumes: + .: {} + k:{"name":"certs"}: + .: {} + f:name: {} + f:secret: + .: {} + f:defaultMode: {} + f:optional: {} + f:secretName: {} + k:{"name":"dbus-socket"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"dev"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"driver-path"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"noderoot"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"pods-path"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"registration-dir"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"sys"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"volumedevices-path"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + f:updateStrategy: + f:rollingUpdate: + .: {} + f:maxUnavailable: {} + f:type: {} + manager: Go-http-client + operation: Update + time: "2021-05-10T21:24:23Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + f:com.dell.karavi-authorization-proxy: {} + f:kubectl.kubernetes.io/last-applied-configuration: {} + f:spec: + f:template: + f:metadata: + f:annotations: + .: {} + f:kubectl.kubernetes.io/restartedAt: {} + f:spec: + f:containers: + k:{"name":"driver"}: + f:env: + k:{"name":"X_CSI_POWERMAX_ENDPOINT"}: + f:value: {} + k:{"name":"karavi-authorization-proxy"}: + .: {} + f:env: + .: {} + k:{"name":"ACCESS_TOKEN"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + k:{"name":"INSECURE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"PLUGIN_IDENTIFIER"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"PROXY_HOST"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"REFRESH_TOKEN"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/etc/karavi-authorization/config"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/etc/karavi-authorization/root-certificates"}: + .: {} + f:mountPath: {} + f:name: {} + f:volumes: + k:{"name":"karavi-authorization-config"}: + .: {} + f:name: {} + f:secret: + .: {} + f:defaultMode: {} + f:secretName: {} + k:{"name":"proxy-server-root-certificate"}: + .: {} + f:name: {} + f:secret: + .: {} + f:defaultMode: {} + f:secretName: {} + manager: kubectl + operation: Update + time: "2021-05-10T21:27:26Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:status: + f:currentNumberScheduled: {} + f:desiredNumberScheduled: {} + f:numberAvailable: {} + f:numberReady: {} + f:observedGeneration: {} + f:updatedNumberScheduled: {} + manager: kube-controller-manager + operation: Update + time: "2021-05-10T21:27:43Z" + name: powermax-node + namespace: powermax + resourceVersion: "1261606" + selfLink: /apis/apps/v1/namespaces/powermax/daemonsets/powermax-node + uid: ff7aee88-3b86-4ebf-be70-764d88403ace + spec: + revisionHistoryLimit: 10 + selector: + matchLabels: + app: powermax-node + template: + metadata: + annotations: + kubectl.kubernetes.io/restartedAt: "2021-05-10T17:27:26-04:00" + creationTimestamp: null + labels: + app: powermax-node + spec: + containers: + - command: + - /csi-powermax.sh + env: + - name: X_CSI_POWERMAX_DRIVER_NAME + value: csi-powermax.dellemc.com + - name: CSI_ENDPOINT + value: unix:///var/lib/kubelet/plugins/powermax.emc.dell.com/csi_sock + - name: X_CSI_MODE + value: node + - name: X_CSI_DEBUG + value: "true" + - name: X_CSI_PRIVATE_MOUNT_DIR + value: /var/lib/kubelet/plugins/powermax.emc.dell.com/disks + - name: X_CSI_POWERMAX_ENDPOINT + value: https://localhost:9200 + - name: X_CSI_POWERMAX_DEBUG + value: "true" + - name: X_CSI_POWERMAX_SKIP_CERTIFICATE_VALIDATION + value: "true" + - name: X_CSI_POWERMAX_INSECURE + value: none + - name: X_CSI_K8S_CLUSTER_PREFIX + value: MIC + - name: X_CSI_POWERMAX_USER + valueFrom: + secretKeyRef: + key: username + name: powermax-creds + - name: X_CSI_POWERMAX_PASSWORD + valueFrom: + secretKeyRef: + key: password + name: powermax-creds + - name: X_CSI_POWERMAX_NODENAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: X_CSI_POWERMAX_ISCSI_ENABLE_CHAP + value: "false" + - name: X_CSI_POWERMAX_ARRAYS + value: "1234567890" + - name: X_CSI_POWERMAX_PROXY_SERVICE_NAME + value: none + - name: X_CSI_ISCSI_CHROOT + value: /noderoot + - name: X_CSI_GRPC_MAX_THREADS + value: "4" + - name: X_CSI_TRANSPORT_PROTOCOL + - name: SSL_CERT_DIR + value: /certs + - name: X_CSI_IG_NODENAME_TEMPLATE + - name: X_CSI_IG_MODIFY_HOSTNAME + value: "false" + - name: X_CSI_POWERMAX_PORTGROUPS + value: powermax-port-group + image: dellemc/csi-powermax:v1.6.0 + imagePullPolicy: Always + name: driver + resources: {} + securityContext: + allowPrivilegeEscalation: true + capabilities: + add: + - SYS_ADMIN + privileged: true + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/lib/kubelet/plugins/powermax.emc.dell.com + name: driver-path + - mountPath: /var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices + mountPropagation: Bidirectional + name: volumedevices-path + - mountPath: /var/lib/kubelet/pods + mountPropagation: Bidirectional + name: pods-path + - mountPath: /dev + name: dev + - mountPath: /sys + name: sys + - mountPath: /noderoot + name: noderoot + - mountPath: /certs + name: certs + readOnly: true + - mountPath: /run/dbus/system_bus_socket + name: dbus-socket + - args: + - --v=5 + - --csi-address=$(ADDRESS) + - --kubelet-registration-path=/var/lib/kubelet/plugins/powermax.emc.dell.com/csi_sock + env: + - name: ADDRESS + value: /csi/csi_sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + image: k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.1.0 + imagePullPolicy: IfNotPresent + name: registrar + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /registration + name: registration-dir + - mountPath: /csi + name: driver-path + - env: + - name: PROXY_HOST + value: proxy-host + - name: INSECURE + value: "true" + - name: PLUGIN_IDENTIFIER + value: powermax + - name: ACCESS_TOKEN + valueFrom: + secretKeyRef: + key: access + name: proxy-authz-tokens + - name: REFRESH_TOKEN + valueFrom: + secretKeyRef: + key: refresh + name: proxy-authz-tokens + image: sidecar-proxy:latest + imagePullPolicy: Always + name: karavi-authorization-proxy + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /etc/karavi-authorization/config + name: karavi-authorization-config + - mountPath: /etc/karavi-authorization/root-certificates + name: proxy-server-root-certificate + dnsPolicy: ClusterFirstWithHostNet + hostIPC: true + hostNetwork: true + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 + tolerations: + - effect: NoExecute + key: node.kubernetes.io/memory-pressure + operator: Exists + - effect: NoExecute + key: node.kubernetes.io/disk-pressure + operator: Exists + - effect: NoExecute + key: node.kubernetes.io/network-unavailable + operator: Exists + volumes: + - hostPath: + path: /var/lib/kubelet/plugins_registry/ + type: DirectoryOrCreate + name: registration-dir + - hostPath: + path: /var/lib/kubelet/plugins/powermax.emc.dell.com + type: DirectoryOrCreate + name: driver-path + - hostPath: + path: /var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices + type: DirectoryOrCreate + name: volumedevices-path + - hostPath: + path: /var/lib/kubelet/pods + type: Directory + name: pods-path + - hostPath: + path: /dev + type: Directory + name: dev + - hostPath: + path: /sys + type: Directory + name: sys + - hostPath: + path: / + type: Directory + name: noderoot + - hostPath: + path: /run/dbus/system_bus_socket + type: Socket + name: dbus-socket + - name: certs + secret: + defaultMode: 420 + optional: true + secretName: powermax-certs + - name: karavi-authorization-config + secret: + defaultMode: 420 + secretName: karavi-authorization-config + - name: proxy-server-root-certificate + secret: + defaultMode: 420 + secretName: proxy-server-root-certificate + updateStrategy: + rollingUpdate: + maxUnavailable: 1 + type: RollingUpdate + status: + currentNumberScheduled: 2 + desiredNumberScheduled: 2 + numberAvailable: 2 + numberMisscheduled: 0 + numberReady: 2 + observedGeneration: 3 + updatedNumberScheduled: 2 +kind: List +metadata: + resourceVersion: "" + selfLink: "" \ No newline at end of file diff --git a/cmd/karavictl/cmd/testdata/kubectl_get_all_in_vxflexos.yaml b/cmd/karavictl/cmd/testdata/kubectl_get_all_in_vxflexos.yaml new file mode 100644 index 00000000..6b6763b8 --- /dev/null +++ b/cmd/karavictl/cmd/testdata/kubectl_get_all_in_vxflexos.yaml @@ -0,0 +1,1037 @@ +apiVersion: v1 +items: +- apiVersion: v1 + data: + ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EUXlPREUxTWpBek5Gb1hEVE14TURReU5qRTFNakF6TkZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTnBnCm9yd3EzMDBJVVRKVkFZUVYzSHJieWxjdnFPTDRSUWlIVVdhaTY0UXBzR1RwTytvNHZMd1Y0MUE3enRxVFFLM28KaUcxR2pJUDBsRkdQYXJzNXFCNkU5MkRMK2hJU2kyaFM2THJtdHI3YlVua2NKb0Z4K0djbk5JUHcxUXpjNlRhUgpoK0NpQmZKVVEzU3V4YTVGaW5wTVlYcGFqVkRVY3ZZQWJBTUMvMnFDaFhaOU82d1RjRE5LUzZoT3V6emcxaWpCClc5cUhRdXBQTFpmeDdDSk1LVEhjTG9QaEoyS29jU2tQMUpvQWIzdzNlcTF2bFcwV1BVVzBaZ3gxeWx1OU11M3cKU2ZGdStOaDJnaExJMGNzMUFHZlFGL1lKaE5XSWhCZHIvR0k2Yk5XRkJ4b1ZoaVZKazhuMUZYbHQ5U0ttY0taRgpRY3BEaDVHaXVNanZ1OEhTZWRNQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZMTWhMOWQwMXpjWUJ6SGZMWHJCMU1ndzFqUHlNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBZEhvQzlxZkRWSDl4OGJkdnZkVjIwekJOaGpyTDVWaVMxVkZBSkZaeVhMNEwwRmJpdApOTUxYRllIbEJsd3lmS2I5eER2Mzhhd1BkK1lLVWVib0tqY0NXYXVLNnNEc2pxOTltQ3p0Y3haV3RJL1RKQXM5Ckg1MGp5eCtCUnZyWGZZZEQyOXRJWHVBRDJVQmVmNk9kSmVPNnV2Mlh0V3l4UkZwbW1YNjFQdGtCL1c1RVB2VFIKbG4ySTVrb1hZOTZBakpqTWZnVkpKdUZYWjAyWUdnT3ZGaHQ4MitlMUgxY2pGdWIzbkVQTzVGZjA4bWdXdGU3Zwo1Vi8xNWhQRlZDM25iNkt4cmNydkxmTnJEZERJNGtaTlVHL0dRNDZqZXBUbVVUaFNuRGd5WlpWakllY1JHU0NWCldJNW91WU83WEx1NnQvZVZ5S1IrMVNZSUtEN2E1Wk15UDdmcgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + namespace: dnhmbGV4b3M= + token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkluVkpORjl6TXpsYVQxSk9XUzFQT0U1NmFuQlVaWEJWVFV0QlZrVlhVR1pGUjI5TmJXOTNhMWswY1UwaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUoyZUdac1pYaHZjeUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUprWldaaGRXeDBMWFJ2YTJWdUxYTjJOR3RpSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXpaWEoyYVdObExXRmpZMjkxYm5RdWJtRnRaU0k2SW1SbFptRjFiSFFpTENKcmRXSmxjbTVsZEdWekxtbHZMM05sY25acFkyVmhZMk52ZFc1MEwzTmxjblpwWTJVdFlXTmpiM1Z1ZEM1MWFXUWlPaUl4TlRVeE9UZ3pPUzB3WlRObExUUXpZamN0T1dVM01TMDBZakkzWm1FNVpEaGpaamdpTENKemRXSWlPaUp6ZVhOMFpXMDZjMlZ5ZG1salpXRmpZMjkxYm5RNmRuaG1iR1Y0YjNNNlpHVm1ZWFZzZENKOS5NUkxsYVFiY3JPQlNEdG1VcFRHbGNwVlJsaE5TMUh5dkk3dGFrQnhJMGZNaXVhc09ZNFhoNXUzVmtUcXd6YTNvR2tDZDFWR0xOam1PakUwMlJUX3RNWGZpQUpTYUNZdEYyNnNhWGZIV2x0ckdDOHZXLTQ4U2dxUkt6dEFJZzF0ZkwxcWRsZmtpTWxhVGxmZm5KOGlaVFhfRGI2NTNyS0RSR2R1a254ZHIxQ005cTF3U0RIWkZjSlFSQUI5NEY0NG43bXlkdDA2QnFGSjZuMEZpTDlWVWRGT2hlR2xVVmp6emdXenE1ZHRtV2VCQ3RzbUczTFZxc1Fjajh6UXdpMGdZMGZYeXZMY2xFRm1QVWFNX1gyU0hGZkJacTV6TjlCUEdLQlhpV3poOFRER3BHeE50MnZmTk1OYlhWUHU4ZEZ3azVoQmVpY1I5NmxHRHlfanZVMjJZWUE= + kind: Secret + metadata: + annotations: + kubernetes.io/service-account.name: default + kubernetes.io/service-account.uid: 15519839-0e3e-43b7-9e71-4b27fa9d8cf8 + creationTimestamp: "2021-04-28T15:53:27Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:ca.crt: {} + f:namespace: {} + f:token: {} + f:metadata: + f:annotations: + .: {} + f:kubernetes.io/service-account.name: {} + f:kubernetes.io/service-account.uid: {} + f:type: {} + manager: kube-controller-manager + operation: Update + time: "2021-04-28T15:53:27Z" + name: default-token-sv4kb + namespace: vxflexos + resourceVersion: "3942" + uid: 2ac0af57-490d-4247-bb69-d4e1580a9319 + type: kubernetes.io/service-account-token +- apiVersion: v1 + data: + release: SDRzSUFBQUFBQUFDLyt5OWVaT2lTdFkvL2xZTW45OGZ6eE5SQzJEWnR6V2kveWhVRUZ1cEVwVnRhcUlDRWtyUlpCa0JGU2Z1ZS85RkpvdW80RkpsOTl6NXhyMFJFMU10dVp3ODUrVG5MSGtTL2wxMU5OdXNOcXVyelFjME42NWZ2YXRhem9kYmJmNjcrbUV0L2VEZE1EM29ScVpSYlZZcGdpTHZpYWQ3NnZ1WXJEZnJaSlA2OWtBOGZXOThxOWZJMmozeDFDU0k2bDBWYXAvcFpaalFESEI3L0E4ZkxDMHZzRnluMnF4eWpoOW9FRmFBYTN1b1VmV3U2Z2RhRVByVlpqV2I1OCs3S3BocHl3QVJicHVCWm1pQmh2NU9sZ2Q4Nno2M1JOOE5sOEQwcTgxL1ZHZEI0UG5OeDhlcEZjeEMvUUc0OXFOaFF2aTQxK09mZDlXVnVmUmplc2lIcHdmaWlFcHh3MEJ6VTNrWlZWb2pydksvTGRjSk5Nc3hsNVZSNEM2MXFWbmhuTUJjZm1qQS9MK0tzYlJXNXJMeU05VE5wV01HcHYvbVdFNWdUcGNhR3V5aE1wNVpmZ1V2cDJJNUFJYUc2VmZNbGJtTWdwbmxUQ3RMODEraHRUU05TdUJXdktXN3NoQmhsWldsNGFrMS84MVpteEJXTkwraVZYWmtKWFMwb09iN0QyOU85YTY2TUtPMXV6UXdHNEJ2WWI3aU5taTl0bVlsSzBEUE0wYTJUUWc3ZzFiMXozL2VWVFhQRWpPdXJLZ3Erc1VURC9qMDUxMFZ1bUJSYlRvaGhIZlZ3TFE5cUFYbTNxRFpqNC92TXhONjV0Si9DRHlJV0l5bFdLMytlVmZRRnJoT3NIUWhOSmNQa1dibm1pc3k3WW0yR0FFS3J2UzVPelhtblo4YUJVTzE3VTRubEJnWk5weXJFMmF1VUExU2Q0WS9kVWtrRkVtWUdXem5XOHQ2bnVvMkU2aGpkMnJXL0drZjlxRE9pak5BVGNJeCtuMUVOejVHNUZ5bjZnU3dHNzdPaWxIV1IrYlhpc1RERjR2K3c0eWV3NGt0K3FyRWJOVlIvVVdSU0FocTlFeWhKdE1QbWZqWkh4RkJ5dzQ4M1I1KzR6cThiOGc4b2NxOWtVNXRZTXRtMXBxb1F1RHduazQ5ZmVPNlBVdVJCcUVpaTRUR05pSk45bVlHQzFlNlZWKytkQWVoSm4xZm9UVitlUjFPajlSWmNmc3lkYWRjaTVnaVBncTEzc3FRNmUyTFJldWN6YS8wV20raFNmWEQrUzE1aVBvOFQ0RXRidldhR0NtVW1QVFpRRVhtSVloNkJxS0phOUdVS3Zjc3NIV25VdFJ6VkhsbzlWdlBsa0V4aEVKTjhkODZDN2RHaS9PNVZtK2hTaHRvc0pPNGpVd3ZGRm1BbkxXZWNqWWZxUkpEcUtONDNQNkluZ0VXZG9IZElFRjM4STFqZkl1RHhFOUVFOWZ0UVVBMVNHRHpNSmtYR3JZWUd0MUJScmRoaTVIaXhQMXk4OWNVV1pocjhkOXpZSXV6UWxvY2VtYXd2SnZNRjNBc3M5WW1ScVRYeEhVOEgzZUNQL1dWeW9wYjFCZkpTWk9VYVIrcU03MHJRaERWMXpvbEJEcjFGS3BTZmFiWUc2aTI2TVpIQWMwcUpSSXhYelllcUIzekZMRHgzL0xRKzhPTWFLaDNlY2gxeWNZcG1SenpvV2Uwbk9BUGpoWERIUjBGZW1KbHNvNVVtVjhaY20rdXlqR2RnTVg3Y211d2lQL3FTdStLZ1NvWHkrSGNtcFJhRCs3MFFVRDZUYWdqVEM4SldDR1QxVzd0TjZKWDRuMUZnc0U1blM3Um85OUVXMk5yc0F4aGxQRDJPdjN0YlEyMkVTbVNBZnUyL3dTaXVxZEhKK2lxQ1N0Z013Nm1SZWEzbjVGdktUOGNudEJydlpsS1RVSnRPOXYyYmJnNnNjOHBuZHFRdWlUT2pLNHdVNmhab0VwMUFzc042ekcwdVZaZFVxUU5xY3FERUxDTmhTNDF3cjR0aG9yVTgxVnBpTEU2SGx1RndPNGxlOWFBaVZ4OVRlYmpOVGhHekVQOHQ3aFdXU2JWeFhWTzlobWVmVzBmbnRLalpGdzdvLzNMOGxScXZLZmJqY1ZuOTJtbWF6ZlNMOE51K0laRW9yMVBLQkx2NmhMRzhoV29DVE9qRzJQcGtjek82L2djVUlzdzA5M1JKYmFOMzJvU3htOVB0OVhWOVhqd0tkdUZiTUl2dHhmN3RqYkYxZ3ovZlpENE1WZnRqWVJtVmFvdllwMGZUQlZiOVBVYW1LcDJJK0s2ZktqSTlGWmpHNFNSK0ZWWDhtYXJTbnlreWtLeERoelNka0lmZFp0WkEycTJNbHIxVCtrbW9Pb3owT1ZkdlNiTWRaYlpBa3E4aktZRGZ2MFcrcWc2a2VIaXNmN3UrVDJmMXBzU1dlN29HRjYzOTV6VWQ5anB6RmZ0OFFtYms4M1IvNXo5MmNrcmoxUFcrb3c4VHR2d0crQXVrZ2MwdXdMVWNheFIzMTVtRDBTa2MwRk9KZ3RWVWozZGhvUW1OY0pMOUtoRUZzWCtQandkTHcxdEdLb3NETlcxaDlZanFYSnZpK2g0c2VoSXNabDUzMlpJZzUydGdBMi9LYktBWXFwTWR2MmFzbW5aSkRSWUJzMDF3N0VQVzUvcDB1UWIxdzMrNEZyMUVhSUp4VEQ5QmY0ZDRWNmdVSTNRNlBaV09ydUJZT3B0RGFuM0wxWGlDYkIxRTE0bnRESThCSTdxS1pSSUt4Uy9NcVE2a2ZBbVJERmhXYXlJOExFdjhTdmRFU0tkMnZpcXpNVTZobWtUdDRCbDVxV3hYUktIWW94MUVJM2lTSlVVSEJPbWNmQ1EycENnSmtBQTBmUEp6OC9Sazl2UGJYY0s3TjVNaWVvelF4WmN2ZGJ6VEp2QitwRHAxTm9OK2lNaWk4VUZWbHpyYktPTzdmZnprZXhtb0V0dmJ5TWY5eE44NDllcU5NQThBeFRpQmRyMzNMZEVkZ0hXMmM1bWh1eFhJbk84UHorVE93QTI0Z09jSzJoL29UVWhISkZGRDlqaWdtdjFlS1RyWEplTzlKcnFxZXhrYXJBenlMRjFVcGQ2RUZqMFNyWG92VEU1RmlJc25la0loeUthMENNNjNYc2haejJIb3MzNGhpUnUrM1plbnIyMlhoTkRJL1VYRUNiSXRJLzJYNXdQZUo0ZTVoZGlmVHptd2FkMXU3dmplVHcyWTZzMkREVlpxS2MwSkhzQStWeGpMSGRrTStaN2N5TWZpTllkd1J0S3FxMUpkYy9vTG5aanRsSk1ZMGhON2tHMUk1QUE0UWZKenpWV1hCalN4dE50bzZkUzlSWGl2OUFWSTAycU80SThnMHBOeFBxOFIwc0wyelZma1hwUVozZ2s3em15eDRkdFlycEpiTmNGZWJaRzJJbnpVODdnZ0xac3pLVXFMNzRsdXY3emFDdzhYbU90eXIwWm5zK2llM3JSbk5obXhQSitLWG5lSDEwcHAvelliR090VTV1VldvUDltTjZBVkd3eDBtMlJRREdWSm4xZmFTeXlZL0hlelBvK3A3VFFXMVh1VVpyRXc2SEV6N0VPZGo2eHYrT3hVT3pqcWFVNnpvVTRqaEYzY3RyRlhxZjF5cXo1QWRjVlZwTEVCSHJybXZIWFV4M2JKN1MzbnAvMjV1c2U1bEl1VzRQQk52eFk3bGgvZG41NExJLzhzMjg1UHY5aFJnUjZyaW9TNmVmajNqMWVXblVDMlZTUVlEZUk2TzhjVy9kMDVNczV3eWx2SGRHYWp6WHg3M2c4bHZGMFc0d1FMbHdicDhUL0l6SXNUZVB5Z3ozczZSTGpxQ0pONnV4bXFGTWJUNmt0dm5FZHhqY29wZzdXKzdxdVNTVHkyUzdIMXk2OVVsbHlwU2ZZcWtnd1ZHVXVIV2NmUjUyMGJUMm1hWFM0bHVlcEl2ZWNmWXc4bzFlN01mZXd2Vzh6a1ZvYlREOWFkS2hKOVFYeUU3bDJaMStQWS81QTNWRUtzR1hIMTdFSVA4YUxSa2NRR3kvRENja1U0VkNDSFN5d0cwRVpmcWcyaERvclpENUdNVmFwbmlwdEZoT1dJVFRrSzlSb3FFVDFVS2NFaUczajhHanNJTFB6SFZLVlNmcFZZSDQvblRtYkYrcFgwamtoYVhwSUZHRTNUZUc5TjFFam5TSkthS0Z0VFJKOWxlbEJkZTRXNC85dVRVTkZGdHdYaXc1VVdaaXBMRU1vbzNxWU8zUFk3NS9tQ2ljazlrZUw5TEkveW16NFZxZjRwU29QQTVXRlVSR3R1dFFnZFNlbDRYbGwyRXpVci9WSTNXck1BYlU0aVBrTDUwanpjemtzLytTKzdmRGowU2czM2lYNzE0WUJpcDhCOGwxMy9TN2V3LzNSczlVZmtXaXRnU0lKQzJ6YnQ4VGlaNGZwQ0V5UG1aQURqNXNXNkUyTEMvcXkwdUJIWE5tWXlCNHZWSmtMRXB1RVlwZUcwZTJSNm1FZlpGL21KK1ZJQ3gxaEpJajh1SHovVEw1eHJRYWx5TndLT0dMWXAvaXRObXJFZVRHcU1kY09NRFdOWGNleC9JdjhpOTNlNlBJcmhRcWcwU0lYV29FZmdYeHFiUHNaZW1hdzAyTTZ5bXhEdDdjeWJJaGpoaVAvaEkzbEd2dWhPWit2OVd5TlpYRnJ0T2cxc0J1VUpnbVE2d3F1T3FMYkUySnhPT2FlUFV2SDdGdGMzcDdGdUM4UHdzTytlYnVZK0xRSXZ3dHhtYk9JUUtueFhoL0pIT2w2YmREb3RXYVozSDZXNjRtdFNneGh5RDNZbDR5WndZcmJWMUZZQWJiaDY1UlJmNVdGeUpBbVZ0bWNxUno3RXBaVkFMbzlxTnJ3NlZVK3YrZVVVWUpsSXh4bklML1cxdVRwMUdDL1Q5VnV6ek13ejVLek9tbVk2VXdhaiszYjBSU1g4TE5oT3RhSFRGeE11eUdMbnRwQys2YnVHT3kwTVJnL2wvWkZzWm1LYktvVXgzZElabWQ1eGNKQWxScWswU1kyZ3ptOS9lUytYcWlTT2pPa0RkR1gxSzNSaFd0MVRHSWZmSWRKQWxSdGh0UzdBZ3RJb1E3WUNiTDVXVCt1MVlObWQwaHdDS2ZLNTRGbVY0Z1VoRTF4L0JmazdKbDFyYjh3bkFpZHlVSWNUOVlGOXJVYjc0VUMvRjloblhiUS92Zi9vM2FvQkplT2NzNUhQbVlTendOYjNCZ1NqSkFlY3d1U0JMVmhpaFVMcFA4YU81a09TYjUzT0NiSFl2OTlwa2wxWkZjU0gvSEp5dnZnc1YxQ2UrQ2c3N0ZmTndPMlVZeTFTTzhraE5ua1RHV0ZTSlg1N2V0bzZHWnlpeGEvV3EvLzB2WXE0ZkhRa0RiK2hHMzRtc1RYMFR4NjE1aVo4dUF2cUpzOUNDajQ3V1oyelJhM211eGQ2eE1oUGZKTSt6ZnE0cHdnUy9VUDZaVWtRR0NSU1l3TlYvcWNKSUFqd3NNK3FsU25Udm9rTy8rczNFY2Z1OU4rVFowQnF4RVowbE9NWlZqUDZsam1CL3hJOC8wODltVzZnNU40aW5XVUVvbStKSGlnT0YrRWRTK05SUTdwS1BHbEY4Q0cxQTEwUmpJN3FxL0swK21ZSE9SdCtlVllaZ3VSSnF1RnZ2UlZleEhOS1pHek9KL3VUN2w0endTR003TjFWbnpTYTRNUVVGT0xZNjd6dFlyc2Y3bmVNUkd3bVRyT2g5bXFwMjZKVlc1K25JOVNiZWowcWVSNWREWGV0U2NFL0JBbTljNmswK2lONGZCR09ybXZjeExUd1BPTUo0Mk9NRHhseCttalBQVzVNWVdPMkJJbjRDVGRuRlB1WHgyT0o4SVpPKzZJeXBqa0VWL280V0xEVElnNlBXRjRia3dLYllFUW1IRkhuSnhleDdOMWJMdVQrZzVzcytHVzZ3b3JqbVY4blczVU9EWStzOFM2d0Racy9IdUxqcy92SXRyVExib3RSSHUrUDlSdHh0TFozQmtmeXpzcUsvcXFMT0FjS25jS2c1alpCL0laWkZKVmhNV0drVHFOc1V5SUw4TkpieUJNTnIwSktVaGpZaU9PSitKNHZHQ0dFMkwyS2o3ZllyMnptV0VuL2twbjQ0R2FJS1ZubFJ3TFE0WGFrTWkvejUxTDd2dnFXWTBNN250OHp0a3E4RXYvY3piMWNHektaQkcyelZZZ3d1Y3h0aWFCaTJMU1UvMnlzOXo5ZFYwV0E3TmlBTHBDWFdEaHdkbkJibDhVNGMyQi9VbnFINGJIbU5mbG9WTHJ3VXR6NjNqczZZOGZKYVczdmhYWE1KK3B2QzA0MFY4WmM4WlNaV0UyR0hwTFRhb3ZFdVRycEZicitKUXBrOW9SNnFOZHByTmlvRVQxdVU0UlAzRldNZVUreXhBR3k4dzFaaGZCdmxnMDloU1NjZGM2SmZSMFcxMk5xWHBzc2R2dUZIdXIyV2w3a3VGZ29hMUtmRjJoTm5BczRVcW9MTFBlSDlGRGZHb3A4L2pVUHVGOHdIWEV0Y2FLZ1NyM1p2cXpXOEpKeHpYTTMxKytqTk91LzhWbHl6SDk1OHFWYjFTR2VxTE05T3VsSlZmVHlNOTFsdkgwWDFZU2NxcFVXYVJPbEFtZDQ4VXZMNSsrVFpubWlWS2x6NVFuU1FrSXNTVFVIZUdMZE42S3RyU0VTZndscFdrM0tPWDhaV1dtcXNTVHdJYUVPYXF2QUN1R2dKcDVxak1zNDFlTWYwblpKVEpRbXJTQktpVXV6cFFneG5QRVIrZlE3T0tTcnEzUjdhR3dxV3ova0lES3lvTDNqMzkzUjRHcHE1a2RwWHkyZFBTTGV5Vlh4dnhmZGxWay8vckNYam5TZmttVTJFTE9pU2JWbmQ5djEzaFNzVDJvMUlUTXRwMnkvN3V5c05OdUhTNU5TSGgvcmQxSFlhQXFwa2VSZE9hNDZWMFIyYWRvZ3A0UDNldm95TzNQUzByMVdoWVI5SGRPWTBlUnhFQ242bU5WSHY0ODlKa1VtVjZEcUVFTmh0N3VTSFRzWGxqbWhtektyaVF1NFVQSm1wS1NNbnprNzIwQks4Nnh6THJIcFVDNmhQUjJOc0NsUXQyOU1xYzFhRi9tcnhrb1RHQTN5STVtcFdqNzYwdENJNWF4Vkdtem41cTdZaDRVU21ScktTdlR1WGdzTkxjUUFwSmU2U3ljbStQY1hsdW9IbkI0UXFRZ29YVm1LMUFUWHBBOHN6UVIyOWdhblRvMHVzWUsyUDQzcm92VEIvbXlIRnhhb2tqMVJUNEZwVXVOVUpPRkZjaGpadkZ6VjYveHhLUURPL3VsUUppVzRXZ3lMSndUOFhhL3pJUE94bm14YUZ0Qno2OHJrNWx5ejlkaGYwRlltNWJWL0R3Ty9jUklrNFg2RU04cFBobnQ0OUFiNEJRZjlGWEpnT3BCSUpRTE1lZUtUTThVRy9xYUxIaklqaGVGNW9va0xEQ21RMTZka0ExYTZKQzljZWJyN3FYb2NOcGxrcHRia1BtNUltMWlUSjBYMDNGZCt2RHExR2ZLeDB1T2ZyTlNwaVNOZnZtUmJ6ZjRveitpQ1oyRU0xMWFGNDZKc1hKVXgybjJnMUt5emFBZ3JYbys1UjJJdzRYNEc4dCtEbTJuc3ZrbEpVSlpHbzBlalVTVkZqdml4M2pTRU1kUStCQTZjSFQ2Q0ltTFUwZlV4bE9zeHRLUU1KNFIvUnJ0RzVMaDZjNWd0WmQwa01oNUg4ZUI2MUNoR2tHZkVqeEFCZHVUYWI0T3FjcEUvVlZBZEMwWS9sVEtVbkI2SzMxY1V2S1Q4c2dXN1RLNTdFcUhrclJWWEZZYjY5S2t1SncwaHlHOEpEYUdZMEw0L1hTeXV6THZ2bjBsblNJL0hFNzQvMnhwV09KUGZlVklTS3VKRnZaald5VDIxUzlPZXg3cjdrcnREazd4THowbUNnQmF6L1BGeDArK0puR3JIWjJOdGQ0VkhVMnFiL3MxOVVtMU45QmtHOXUralpOeXlDZjNjZm5xcWIzYkZiZkFJaTFOZXJva0JVdUNHaGNvTmd5UHJ5SWY4ek05dGlwSWs4WXgyaVNOMFlwU3BuU2t5YXFuczZLalNzZCt3TTdXYlh5OVpneHo4U0VES0g2bXMzRUo3WDdTY2U5WWF3Wll4dEtraldld0VCYWx3N2tXUFZOWmZPeGxUVWc0bGdtbU01N0FseXlHKy90NHI3eVVTdTVGaXJ6STB0bXZvOEwwL1NwOWZ2M3hNVDhlaVExbXZCQ0dZd0srbkQ2V29VbmRoazh2MXZmVmwvWVJMbStBSDBYbERZWDJrQ0JmaGM3azVKRmNQaTQ4UFpiQURLSFlQVzFMZTRWSDhmOVZ0anBiTHpNWWR4cXlUUGJrTWRuZ3hjbG1Na3Bzem5EQ3Q4K1hwdlRPNzBXMkUvdTNvMFljTTR6b3JkSHRlYm9OY0FsZGpDMWdPb0hHSzhlU3BONFZQRnlhM2tJeEtROUJiWEJRdHBINDA5QjRIY3VpYjdCd3FGTUNuYlF0S0tXN3pqNmxPTkdYTVI1ZlhNYXBzOURxVS9ocWlLL0t3eFZnTjZSS3dSREY2THM5V1llNmxCenF0T0lEblZOSGVBbmRDMVhHMSt1Mk42UUo2eFd3NjlCZ3hmaWFZRnhhbE03WlNlYzhaWitCM1ZncnVCd3pqbU80UmM5VFdSaWxwUWFLdEQ1NURBN1l4Z0pFNUJyWitWdjdBVG1lUkhxTm5xbFVhcXVlcmFFTkYwaGY0L0t0K2t4dmNTZjlDRlZXTHVGNVlidGZmU1I3V0U2bFVoRG5ZVzlVWm81ams3MXhyeTJ0a2d3UDFJUkkrVVNwOE9reXFldExyL29qY3FjMzhtNU5jVzR6MWtOa1E3K3duM0dwaWx3cktBVzlYVGxnVm5KYU9NLyttSDF4MG1OK1kxeDJlTVdWR2d4dkZNTmRWMXFSMHp1Y1k3MjR4QUxZb3FQSlBKRmVEN3V4clRnbzIwaXZ3dEVRalBMN2gxenBOaVQwR3BlL1BoYjdIZVc1c2EzS0RvSXM3M2NnSTBDSmMwUHVlVVlYdHZIMWUzbEdITXVSM2pzREt2YnJyeThabnJDTm1pcjNXT1N6Y0F6ZkdVWlhZY2hhcnhrUTJIalBqVlYyVUlBamNkdEpWL1IxSnBlRGxUWTFSWWJiaThyQXU4bnJjbGh4Y3o2UGl1T2tZenIyNWNHTlNYNGlrM1JQT0ZQT05DZ29OeTdPd1JiNTZMUFhDU2w4SUxyTytKWHJZeXd0enR1V3JvV29NK0luMXBJYjUyVk1DTXhmUFQ4a2RJalBYbWxMWDgvU1YyVjRKdGR5UlpsUzZSZ0JSSG8rbmdqOHlXdVFaMHNobjYxTXoyMFlIcFYyWG9lOXQvS1hrTDhUcFh5NUJMdnhXVXFMUE5Ndlg1NHN6UHR5OXJxVFMyak96djVQald0SUFqUXNjbkdSdlhHUWZ6RUkxZnkrS3I0MmpWOC9Nanc2VTNGTDEvYkxja0xYNTJLR0dNTVhjVDVtUWdqdDY2Nk0wQ3VERWlPY00yRDRoUko5TlI5ejFoZjdyOEFwUk9PWitEeU5GNnpUK0ZDRUg1ZmxsWkZmQVd5UkdGRmkvY3hhTDN0bGhxMTY2cnAwalBpVkVSMnlNNzdBSmdwTVQ1SUpuaFhJeG5Bb0N0d1p2M29GdXNNVnpxZlU4UGtjMUtUdks0d1JWTTg3ZlBYRVZWZERXUUVhbDF4L29BcmI1Y1pwYkZIY2tweEZYNEpYMkdmcFM2ZjdIZnFRV2EzVjhKS2NlWWFmMDErS2ljZWx4cW1NNHZ3K3d2M3U4R0tleUpRUUdiQXhWMjNqSSs3L2ZFV1o4MUhzV0ZEdUhKK3Y0elVWK05sbmNocEpyby8veU9JUlo3RTZ4bXA4YmZJYjF4RlFMSTlyTWN4Skl4b205WnhucnM4VW5vdGdHNXJ3cXNBMi9KS2NWM3c5MUowS1NlNUlyL1hxNDFxdm5kUlRsc2dnclQ4VUlLNFhrZ2UvY2oyZno1ZDlUa2I0Ykt3d3J2eWFYaFhteW9yNFg2WTdSejdiaGZTb3JFaGR4SnV5YS9ENHZFbjA5Q1JmMkpjYWErTnpzcjRLNTdrV1RaZ3lqZGJlU1hLR0srREFWN0JJYXU2Rzd2Vys1VlV5RkFNbElyY0t4ZmlxQkcrRkFTU1NSMThhZms2V3NqRHYxMFNrQ3lld3VvaHZKZGRBVDltMWEyaWlUdHU1VE05dDZKZko3YmRmUWJuMk5iMlhuaTFmcW1NeUgxMnU5Mlh5eXpBendEbjk5UzB4K0hpOE10cjJYc05TZXJYSGR6UVA0RzhFN045S3dTOHFLc2dBNFJOTU9hdndtWEt0SGpVWVBVV0RWcHpSUHJvU2RQcUZuN2h5TnA1cjk1TFo2OGZJcmhqaGwxNmhWYU54MGlwYU1mRmdKcnZMYlcxY0NiOHVyUmJObnpMZ1MyNEt0Wm1CMnVCbm11Vzg1SHBTY2luUTA2bDY3b1ZWeVkyU29mc0RmMVZocGNIUTlLdk5mMWMxQ04yMUlMME1RaGhZcjY3eERJRHArOVZtOVVPRHZsbTlxKzYrZ0lBL2RlRWE1c2lFSmdqY1pmYTVCUmVhOFZjbC9QaW5QL085V203b0JOVW1kVmMxekE4dGhBSGpqeU1QNllPNUNaNnFkMVhUMFhSb1Fzc1BWaTRNYlJNcGh6OXpneHdOY1pQMEFaakdIL0xJTmJCZHg4SVUvVHRwYTFTYitObGRkZWI2QVc4R2EzZTVxRGFEWlpqODlNcTE0My8rZVZmMVhNTjJuYUxPbHExTnpXeFJNWDI4WnB1dlMvUEQybFNiMWNWM3Yvcm5YZFVITTlQV1VvWjhXSEQvMnhQeFBiWjdQTnFCeXVQTFR0WmdPaEtIMDVFNG1FNFdZbnRNa0x3d3FYZUV5WEFxVFJvaTF4RmV1VTc5Vld6UjdWR0hlUkdJeVZUc3pCaXVBL25oeEdBbUVUMFpSM1JMR05IaWhCQTcvYW1YdmlzbTN1elJzNVVWWDFoMDhoNVZjWnNrQm9vU3dUNENOUVI2OFR1VGNidlVhZDByV094YnlHblBubjJMNzdadWtNTVozeG1XZDRVR0w0Nnk2YytINGVEWi9ablNCZUxFTkZibkNTWE1DK2diQzUxQlNsZE1Ed3REVFI3dTA0RUxvZytTRkZ0M3V0c2VEUlJZZlJ0RVQyUi8zZ2tISTJKekNGQ0w3LzQ5K1VCK3Y0KzN4KytSRkhZTmpSendjSmhMblNkdTZ2NU0weSt4K1JoTXVjSzNTSEZvbFRaTzQwUnh1citvcEJSRU5Ba29jY0d4NmdwWVNic2E3MlYzR05NYjJQdEhBL2o0SmIwNkUwc1lYN2x4bEJvWHhtNGJkSEp1MWlwNXUxQTI1b3VqYkRISG4zRW9OK2RhdmJJM0dWbEllMVFielR0STNrQmFrS0pDejJRZXFpM2ExbXRjMm02cmpaS1VsNHpmTXB5ODVXdFFwQ1g0bUJYek93WlZET29xeFVmeDIzcDVUNDNJM1JVakhHYVErMlBQUFdwZ1BXMzY4K2RNazB2ZnJuTFpqaXRiRTM1ek1yRHJzK3lHT0g3RHN4Q3Y3K0F0TUJldVpYOGN0SmJvYWQyZkR3cldrajkyL3FLZUhSMk5GOGttMTJidVR1TnJHY1ljV0hWUGp4cGJUUUs3MUVqOEZwYjRxc2VJM0lYVXUrTkRwSHRScWU1bGJ5cjUrcnB5YjFDWjcrc3NjZ25wN08wbUx4YTlNU1NtSG9ldi9oUFl2VTBteU9oQjhoakZ1bFdBVG8zZmdrNmRNV204akRzTld1aWNSS242M3lqMU4wcjlqVkovbzlRK1NsSEVYd21sOExINzN5ajFOMHI5RnBUaVd3aWxudjlHcWI4Y1N2MHpUa3g4V05QZm1ma2dmMm5tQStjVTRreE9FR2hnaG9oRklQd3dCY3NIeTMzMHJlbDk4c1ZOL0xuUnRGVnpWWHNnNDArTTR1UUUvczRwaEtZTjlyNUsybHlsWHlMMTNMVzVSRCtPREpCcjdCdWdXWHVvUDVBUDVEMkptcVhmQ2oxSFNLNWhjMFVsdEN6TnFlVUhTKzFNWHlTTCt5U3BrblhKaitKYld6ei92MEl0UWdNc3Z2dkF0M0RmNUNGYVdOdzZaVzV3anVKY3crYnE2WUdJUHp5NkNIVno5OTNXRmJKOTFidXFiZGpjYTdYNWp5cEpQRkJQZnp5UVQ5UUQrZlJIOVc3L2grLzRLNmhmU2w2NW51bjRNK3NqeURwZG1zN3lEZkRUWERvbUhGakxaVHovMHZUY1Z3M3ZBc3hIejUwc1llNGZQdVlSem5qbHZ2U0tlbHArTzFieWFyT0tLS3ZlRlh6MWQya0NxRm4ycXdzdEVNVWZla1hhdkJ2dTFYWFJkSGJrb1Q5T1pkeHN6YkUrVEI5TmQzOS8vK2I4VDJXRXY3ZmJyT1RWOTdIMFM2NXZ6dTdMc3MzS2lueHpGcFpqTkNzamM3bXlnUGtNQU5xOWIwNzZuZC9tbTFPcG9CVTFLK25nOTdzaDA0ZStwNEZjaXpmbk10cXlGelRkZ2lvMDJCZnBPZUpWVEVVTGhuNWdMZ1VYbXZ1RUxuVU5QR2hoTUhPWDFqYit2akRhUjViN2lKWndLUXVYSVRSOTNPaStvbmtXdTNSRHoyOVcvdkZXQmE2N05Dd25QL0piOVorb1phV3lOSk1QTGVPVzBOUjgwODhlcnN5bEhqK1ltc0ZiOWE3eVZsMXJBWmpGZnlMa2pmK0tZVFgrTy9RTUxmMGJMRTM4OXorTHFDb2h3VnlaVGxCRXdtNjZIQTNwREljemUzR1RheVpHZ28vbkxWMzhFUWxKNHd0bjhKREEvY0IwVW9OMWl0Rm5sMXZHOUU4cy9aQXdERFBYVS9kTHFIaU1QeVJlUU15bDB5WGdlRnJ6azBiNFdPMUt3WHgrMG5pZHNVOWhaMnAvQzZaL21pVGdXN3VOOEJrNmJzaU5jdEdmRWpmd3JZZHJsbW81SCs0TkJGNm0xSzd4S1ZENW40cHVRbmRkK1hDWGxaem5kTVhNdmdtV1puREJ5b29sbHN6NWNJWG9Nai83WnB2b0swUzRUbEJpU2ZJb2V2bm1TdkgyNXBUZWVxOTloWlJzeTkyVjhiTjhVMzZCWnMyenpFMWdPc2dmOHMvczJ0QVBYRHY5elRBL0xNZkNJZVFaUVJjU1ZXUkQvL2tKdC9PWE9YaXhOMXJ1Mm4zQjB5anpKYjRneGt1cCthSi9jUk4zOG5KSDYyWis1YS93cGI3Z1oveGU2LzRYY3JCdXQzQVRoRXNyaUI2eUxFSVJLU2orVGpiQzBscFowSnlhUnJuTnhnTmlzTjBnelBXRHBXWVZFeDc2MTZEVithQ1V0aHpEY3FhL0lqYjFRMzF1Z2lERnNPS29ISzN1WklxZ0pDaGZ1dEFVekE4OGRnRVFueGswbGVpSnBkN0NJTnlZdWJGZCtDeGIweHpIalJpYUR2Y3JXZG5XVE50MVJtYXd6MEhOOC93TG1WV3lXTjh6QWU3a0o5bnBac3daRzJGQVg5Tk42Q2Uvb0FWNkJjT21WS2NkODVTZy8rRCtJR1hEVkNvWktmZ2ZlMklzYkYrcEdJNGZad016RVRIVzBnOGtLNWgxNDl4bjJqS1hDbTFXZ21XWURaRnY4TXExbXhXYzdEeDhpdmFNWmpubTBtK2lIM2RydVUrWUhhZVRkNytqQmNSWTFvcXhySmwvVnFuc29IQ2ZuSVJERUxycjE3Ukp4d2NheEZwVTFCWm9ucVpiMEFvczB6K1lwRkxSREFOajVVZ1p2VCszQnh5ZjRXajhIMDdwTmlzbmN2ZEhyVjlEQ0ZPbVA4TzFGdm41SnNDMWJRMHA3RDhxYjlXOThSNzgyVnUxc2plN3Rwd2VrbnhmZWF2ZTMydkxwUmJkeDRjdFB4N3p5UFZoVFIvai8zdXI1bnVhenVwb3BGZ3lyUkgzM3VIYnJ5OGNQejVrRHo1bGJsWkN4OW8wSHg4ZlY5cnlFVnI2NHlMVWtVUDQ2TUZ3YWpsK1JzQ0RhWU1IeEtzSDROcG9jZSsrQ3hiRjA4cnZhT0xCUzd0VE1tbGVqNHU2dGp2MGhDM3ArNGFUNVBzY09Pei9LbkRpODdqelBuaVo4T1AzTmllVWpuWGx1ZzNMWC9pbjUzN3U5MStrZDBGNmVSOU0rbVB1L2ZXbC9mN2NhblZHbzFJaTRtMjNOMnJzdlF6US92ZExoSnVjNG5oYU1Ec2MyVWI5WHJWZzFxeGN0OERpbVdKaURCT0Jrdi9wQ2RHL2w0NFptTmpLQWQ5NmpNZHR4K01XRDdsMFBXMmE3UCszS20wWjF0SUU2SjhhTEJPRDV4cWZJTkkxYmtlQllhNU96WDMwK0w3QVRVRzcvQlQ5WlUzVHNiTER2UUxJKytUNTRFWHd0ZnBSUDJZTGVvQ1BVQTFqYWZyK2ovL3ZmNS9iYmFFekd2M2ZjZHY3KzBRbTJmeUkyVmlnUDI2QVV1VmdtWkJVc2tzZmsxUFFFN0QzYzBKMzN2bVhkdWVkZng0VVF4K3pkTzBqUTFXcGZGZ21ORkszNi9DL3czT3Q0eGE0ZTZ3WXlJOTRRRUpFa2NlVmdMTEhiOE5hbnRLL2ZOc3Z3UlB3cmQzajlDL0xzWUxXdnR0eE9MeHZnTnQ0SEFkdXdONnAvSlVPUUxsdUlhMjRxVkpjSXZMZDlDZE04VnUxeUtYSWRXMFByaUU2emp6L05LTXl3aTlDT3ZUZndvd0taay9KNnI2TXh1OXRRWHh2TWV6NzYvTzRXN1p0WFM5NHhISUZHalFSNEJuZ1ViZWNhMjN0SnhIZDllK1hKajVaUGRVZCtkLzNaVTF6Q3A4aTlhbXhraWFWNGtGQ3cxemRHeWMzZGdoTi84RW9vU0ZtSXQ3VTk2NFhuRnZVdTdGY3ZZT1A2VHZxa0pHVVpBS2I1VWFyQ0lGd2tJS0dQdGphSjUyTzkyVEU2SEcvVnhCNVpyUFN4cWJjWFVZdnkxYWM5SE11UkxGUEVYT0p5M1V4WWFkOXNzL1JkNVdIZGpHbGhmN1lsUVFlZVdjSHN4Y0libjlMbnA3dmFQK2VIZjdVVGpnOTF3V0FkQVZ6UzFEaFBIdE5HOXduSkh4eTZtTXNPVDJyR1lCSDFLY1lZczV5dkJnZnowOVpocXZ4aEl3Rml6Wlh1WG1LRGR6QmRQR1BmSEhmTCtWbzI2WUgzY2cybmM4a3Z5Nm9zcm9tQlhaeTlLWHBRUXRvZnJOQ2Zpb3hkaWI3dTVjZjB6N3d5VitVNzU2ck1jMzk3TG5Hc3hOWXo4Y2RFTVgvQ3EybGFiVERwZVZNUjJCbUdpRzBuQ2szZGR6czU4N0dCQ0VPL3ZKZDcyUDZDeVpNN0NEaVhtZmpvV0RIY3AzajNOUjk3TjQ0Ung0YitzLzF6S1dHaHExd3p2SFQrSFpBZ1c5MVg4NjlUT2RkejRYdU5QcUpKdDlIZTdTUkVEbUhydmgrTHBJL0xhVmR0NExrWVZIcU1LMnB2UzVJUGFqRXZTZ3V2VFQ4UEJuRFFsTXp6T1U5RnJ2bE9qK09NMUdmRGk4UkppOURKdzB6SHc3RHpBdWNWTlRGRE01RmJybUpDbXoxcnJUNE9wRWMxeVRmWENvZnBoYUVTL04raXZEeXh6aFI1Ui9GMlVBc1JzeXllN1N5ZXc4WHdmNVlmUGZQdHcxRHk3aUhwak1OWmo5STRyT2FrTFlNTE50MHcrQUhTUkgrbGVxV0ZML2ZmL2pJV1Awd044RlRjVU56RXl5MSsvamcrajdGMnYrbkZQT2dEdXB5eFR3dVBiKzVZbjVCd3Y5QlFMa2duL0Y3Ukp0Y0t5Z1E2OWs3Q0g4ai84MmtjSHlJOXhjOUh6dVFSTEc0ZnZNaDJsa1pYbkUyVnVhNzNmYUVUSlNaZmtkK0diMTMrR2U2M3hueHo2K2o3c3U0eGJZNy9jNjRjODFSMVptaCs5eG9MTDcwSjROc2todWZnMzFCK1c5NytGS2UxeW9tMGJTOUlHcGJ5K1pmSXdEZCsyajhmclM1WDNEMXVDSjFNOUN5S3phdEVkZE8wT01nem9zWHM3ZlRFemlKTTErNXFDNzI2WVVrSnN1bjZUM1g0SndQOThVWnhOVVF1eWN4dy92V2h3a2lBTTJCYTVoK013azk3aXV2V2VsaCtrdkhtNW0ydWRUZ3BUelpmOXZXQVUrS2EyMGZkMWVQUkV6ZUtHbUg3M3VkanRlejZkNmNXQlNuZUlmck5pM1hTZkUydmhIMjVsVHZxdG1sT2pLK1NvYWovdng5c2ovLy93QUFBUC8vdjgwTHRWbXVBQUE9 + kind: Secret + metadata: + creationTimestamp: "2021-04-28T15:53:34Z" + labels: + modifiedAt: "1619639486" + name: vxflexos + owner: helm + status: deployed + version: "1" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:release: {} + f:metadata: + f:labels: + .: {} + f:modifiedAt: {} + f:name: {} + f:owner: {} + f:status: {} + f:version: {} + f:type: {} + manager: helm + operation: Update + time: "2021-04-28T15:53:34Z" + name: sh.helm.release.v1.vxflexos.v1 + namespace: vxflexos + resourceVersion: "3992" + uid: 9f1aa23e-8f52-441b-9f32-b7595f5d0612 + type: helm.sh/release.v1 +- apiVersion: v1 + data: + MDM: MTAuMC4wLjEsMTAuMC4wLjE= + config: W3sidXNlcm5hbWUiOiJ1c2VybmFtZSIsInBhc3N3b3JkIjoicGFzc3dvcmQiLCJzeXN0ZW1JRCI6InN5c3RlbUlEIiwiZW5kcG9pbnQiOiJodHRwczovLzEwLjAuMC4xIiwiaW5zZWN1cmUiOnRydWUsImlzRGVmYXVsdCI6dHJ1ZSwibWRtIjoiMTAuMC4wLjEsMTAuMC4wLjEifV0= + kind: Secret + metadata: + creationTimestamp: "2021-04-28T15:53:30Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:config: {} + f:type: {} + manager: kubectl-create + operation: Update + time: "2021-04-28T15:53:30Z" + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + f:MDM: {} + manager: kubectl-patch + operation: Update + time: "2021-04-28T15:53:32Z" + name: vxflexos-config + namespace: vxflexos + resourceVersion: "3958" + uid: eb2bba11-34ce-49d6-9409-cddc2a665cca + type: Opaque +- apiVersion: v1 + data: + ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EUXlPREUxTWpBek5Gb1hEVE14TURReU5qRTFNakF6TkZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTnBnCm9yd3EzMDBJVVRKVkFZUVYzSHJieWxjdnFPTDRSUWlIVVdhaTY0UXBzR1RwTytvNHZMd1Y0MUE3enRxVFFLM28KaUcxR2pJUDBsRkdQYXJzNXFCNkU5MkRMK2hJU2kyaFM2THJtdHI3YlVua2NKb0Z4K0djbk5JUHcxUXpjNlRhUgpoK0NpQmZKVVEzU3V4YTVGaW5wTVlYcGFqVkRVY3ZZQWJBTUMvMnFDaFhaOU82d1RjRE5LUzZoT3V6emcxaWpCClc5cUhRdXBQTFpmeDdDSk1LVEhjTG9QaEoyS29jU2tQMUpvQWIzdzNlcTF2bFcwV1BVVzBaZ3gxeWx1OU11M3cKU2ZGdStOaDJnaExJMGNzMUFHZlFGL1lKaE5XSWhCZHIvR0k2Yk5XRkJ4b1ZoaVZKazhuMUZYbHQ5U0ttY0taRgpRY3BEaDVHaXVNanZ1OEhTZWRNQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZMTWhMOWQwMXpjWUJ6SGZMWHJCMU1ndzFqUHlNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBZEhvQzlxZkRWSDl4OGJkdnZkVjIwekJOaGpyTDVWaVMxVkZBSkZaeVhMNEwwRmJpdApOTUxYRllIbEJsd3lmS2I5eER2Mzhhd1BkK1lLVWVib0tqY0NXYXVLNnNEc2pxOTltQ3p0Y3haV3RJL1RKQXM5Ckg1MGp5eCtCUnZyWGZZZEQyOXRJWHVBRDJVQmVmNk9kSmVPNnV2Mlh0V3l4UkZwbW1YNjFQdGtCL1c1RVB2VFIKbG4ySTVrb1hZOTZBakpqTWZnVkpKdUZYWjAyWUdnT3ZGaHQ4MitlMUgxY2pGdWIzbkVQTzVGZjA4bWdXdGU3Zwo1Vi8xNWhQRlZDM25iNkt4cmNydkxmTnJEZERJNGtaTlVHL0dRNDZqZXBUbVVUaFNuRGd5WlpWakllY1JHU0NWCldJNW91WU83WEx1NnQvZVZ5S1IrMVNZSUtEN2E1Wk15UDdmcgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + namespace: dnhmbGV4b3M= + token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkluVkpORjl6TXpsYVQxSk9XUzFQT0U1NmFuQlVaWEJWVFV0QlZrVlhVR1pGUjI5TmJXOTNhMWswY1UwaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUoyZUdac1pYaHZjeUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUoyZUdac1pYaHZjeTFqYjI1MGNtOXNiR1Z5TFhSdmEyVnVMV0p5TW5oaUlpd2lhM1ZpWlhKdVpYUmxjeTVwYnk5elpYSjJhV05sWVdOamIzVnVkQzl6WlhKMmFXTmxMV0ZqWTI5MWJuUXVibUZ0WlNJNkluWjRabXhsZUc5ekxXTnZiblJ5YjJ4c1pYSWlMQ0pyZFdKbGNtNWxkR1Z6TG1sdkwzTmxjblpwWTJWaFkyTnZkVzUwTDNObGNuWnBZMlV0WVdOamIzVnVkQzUxYVdRaU9pSm1Nak5tTmpneVpTMDFZV0pqTFRRM016VXRPR1k0TUMwNVlXUTBZV0ZpTUdabU5XTWlMQ0p6ZFdJaU9pSnplWE4wWlcwNmMyVnlkbWxqWldGalkyOTFiblE2ZG5obWJHVjRiM002ZG5obWJHVjRiM010WTI5dWRISnZiR3hsY2lKOS5tTmdZLTVSZVpCelF6QklXbEdkTTdRRUNaWi1nblc0eUlpVVFkYzdFWE5DVlQ3WlI0X2k4TjBRSzhtbE84NlJDMk9VZE1vdHZnUWNtRGlBSmxneUhodW9MRXZob3prbWZuM1FZTURud2dhZlo4UHVvWUJuYnMxUlI5WHZ0WGwzekJVQzIzNTdEX3E2OXBUMUxvTkM2UFBMN3JCQ1RYVFdUVzJ6WTFLZHJGRWhJeEVNSjZZdEpib05COG1ka0s1LThtRW9RNG5jcnhtSmVZUkdNNnh2WFlvMnhscEtJSHlUUjBmVjZ2a3paNi1DeWxzRk9CSEFrWS04VHkwZzFfUXI1X1hMRERUNFJmTmdFQ0hrbFdZSWRmODJMUVI5dGJ6UUU5aVNJc0VNXzJDNG9LMFhmMGNIMW1EaXd6dzJzZmEtUTM5cmdvWE15T2duN0czM2FGY285OXc= + kind: Secret + metadata: + annotations: + kubernetes.io/service-account.name: vxflexos-controller + kubernetes.io/service-account.uid: f23f682e-5abc-4735-8f80-9ad4aab0ff5c + creationTimestamp: "2021-04-28T15:53:34Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:ca.crt: {} + f:namespace: {} + f:token: {} + f:metadata: + f:annotations: + .: {} + f:kubernetes.io/service-account.name: {} + f:kubernetes.io/service-account.uid: {} + f:type: {} + manager: kube-controller-manager + operation: Update + time: "2021-04-28T15:53:34Z" + name: vxflexos-controller-token-br2xb + namespace: vxflexos + resourceVersion: "3973" + uid: 34d61774-bfd7-4c93-b3a1-a79a94fae2aa + type: kubernetes.io/service-account-token +- apiVersion: v1 + data: + ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeE1EUXlPREUxTWpBek5Gb1hEVE14TURReU5qRTFNakF6TkZvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTnBnCm9yd3EzMDBJVVRKVkFZUVYzSHJieWxjdnFPTDRSUWlIVVdhaTY0UXBzR1RwTytvNHZMd1Y0MUE3enRxVFFLM28KaUcxR2pJUDBsRkdQYXJzNXFCNkU5MkRMK2hJU2kyaFM2THJtdHI3YlVua2NKb0Z4K0djbk5JUHcxUXpjNlRhUgpoK0NpQmZKVVEzU3V4YTVGaW5wTVlYcGFqVkRVY3ZZQWJBTUMvMnFDaFhaOU82d1RjRE5LUzZoT3V6emcxaWpCClc5cUhRdXBQTFpmeDdDSk1LVEhjTG9QaEoyS29jU2tQMUpvQWIzdzNlcTF2bFcwV1BVVzBaZ3gxeWx1OU11M3cKU2ZGdStOaDJnaExJMGNzMUFHZlFGL1lKaE5XSWhCZHIvR0k2Yk5XRkJ4b1ZoaVZKazhuMUZYbHQ5U0ttY0taRgpRY3BEaDVHaXVNanZ1OEhTZWRNQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZMTWhMOWQwMXpjWUJ6SGZMWHJCMU1ndzFqUHlNQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBZEhvQzlxZkRWSDl4OGJkdnZkVjIwekJOaGpyTDVWaVMxVkZBSkZaeVhMNEwwRmJpdApOTUxYRllIbEJsd3lmS2I5eER2Mzhhd1BkK1lLVWVib0tqY0NXYXVLNnNEc2pxOTltQ3p0Y3haV3RJL1RKQXM5Ckg1MGp5eCtCUnZyWGZZZEQyOXRJWHVBRDJVQmVmNk9kSmVPNnV2Mlh0V3l4UkZwbW1YNjFQdGtCL1c1RVB2VFIKbG4ySTVrb1hZOTZBakpqTWZnVkpKdUZYWjAyWUdnT3ZGaHQ4MitlMUgxY2pGdWIzbkVQTzVGZjA4bWdXdGU3Zwo1Vi8xNWhQRlZDM25iNkt4cmNydkxmTnJEZERJNGtaTlVHL0dRNDZqZXBUbVVUaFNuRGd5WlpWakllY1JHU0NWCldJNW91WU83WEx1NnQvZVZ5S1IrMVNZSUtEN2E1Wk15UDdmcgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + namespace: dnhmbGV4b3M= + token: ZXlKaGJHY2lPaUpTVXpJMU5pSXNJbXRwWkNJNkluVkpORjl6TXpsYVQxSk9XUzFQT0U1NmFuQlVaWEJWVFV0QlZrVlhVR1pGUjI5TmJXOTNhMWswY1UwaWZRLmV5SnBjM01pT2lKcmRXSmxjbTVsZEdWekwzTmxjblpwWTJWaFkyTnZkVzUwSWl3aWEzVmlaWEp1WlhSbGN5NXBieTl6WlhKMmFXTmxZV05qYjNWdWRDOXVZVzFsYzNCaFkyVWlPaUoyZUdac1pYaHZjeUlzSW10MVltVnlibVYwWlhNdWFXOHZjMlZ5ZG1salpXRmpZMjkxYm5RdmMyVmpjbVYwTG01aGJXVWlPaUoyZUdac1pYaHZjeTF1YjJSbExYUnZhMlZ1TFhBNGVEaDZJaXdpYTNWaVpYSnVaWFJsY3k1cGJ5OXpaWEoyYVdObFlXTmpiM1Z1ZEM5elpYSjJhV05sTFdGalkyOTFiblF1Ym1GdFpTSTZJblo0Wm14bGVHOXpMVzV2WkdVaUxDSnJkV0psY201bGRHVnpMbWx2TDNObGNuWnBZMlZoWTJOdmRXNTBMM05sY25acFkyVXRZV05qYjNWdWRDNTFhV1FpT2lJMllqWXpaRFZtTmkwNU9XRXlMVFE1TTJZdFlqWTRNQzAxTkRjeU1HTmpZak5pWmpjaUxDSnpkV0lpT2lKemVYTjBaVzA2YzJWeWRtbGpaV0ZqWTI5MWJuUTZkbmhtYkdWNGIzTTZkbmhtYkdWNGIzTXRibTlrWlNKOS50clVTY0VUb3hhdU8ydnZkZHBRZDgzQkN3VEljeFotVlpXOWlxMTZLUDZhSHVkMWhPMllkQkhxbERfcVRmdkVxZ1p0cDlYbnJfczhYa1cxOEVpbmVTUjJGRjBhNzM4dlk1NEVwQzY3QldMcnFqWDFSbWx3UlUzOGZsdkJlVU5xQ1RkR1lmZ2hXbzJ3Z2hGMms3V3ltZDFoazFOdW45QU5acDJrVGM5RDhJSlBNU2Zrb1hZNWFfNGJmNGw1VExiaXRTdFBjd3ZIckhoSlNLbVZ3QW5mWXBDRUQxT2xWN005VkUtMC1wZml2cVFMTmcwSWZ6QWxvTjJYYTlETjEteE1VaHhGeGpHekRsY19XVGtwaUZ6TjNfaUlUaWhIU25aZ3JkTzZCVUF5bXdXYXVLSEZyME9nV09xSkh6REE3ZkFEZW9aTlpEWWdJSk1ZT1JGaVBpdXp4Mmc= + kind: Secret + metadata: + annotations: + kubernetes.io/service-account.name: vxflexos-node + kubernetes.io/service-account.uid: 6b63d5f6-99a2-493f-b680-54720ccb3bf7 + creationTimestamp: "2021-04-28T15:53:34Z" + managedFields: + - apiVersion: v1 + fieldsType: FieldsV1 + fieldsV1: + f:data: + .: {} + f:ca.crt: {} + f:namespace: {} + f:token: {} + f:metadata: + f:annotations: + .: {} + f:kubernetes.io/service-account.name: {} + f:kubernetes.io/service-account.uid: {} + f:type: {} + manager: kube-controller-manager + operation: Update + time: "2021-04-28T15:53:34Z" + name: vxflexos-node-token-p8x8z + namespace: vxflexos + resourceVersion: "3977" + uid: 687f3b84-b918-415f-acb3-c8d1d1d34058 + type: kubernetes.io/service-account-token +- apiVersion: apps/v1 + kind: Deployment + metadata: + annotations: + deployment.kubernetes.io/revision: "1" + meta.helm.sh/release-name: vxflexos + meta.helm.sh/release-namespace: vxflexos + creationTimestamp: "2021-04-28T15:53:34Z" + generation: 1 + labels: + app.kubernetes.io/managed-by: Helm + managedFields: + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: {} + f:meta.helm.sh/release-name: {} + f:meta.helm.sh/release-namespace: {} + f:labels: + .: {} + f:app.kubernetes.io/managed-by: {} + f:spec: + f:progressDeadlineSeconds: {} + f:replicas: {} + f:revisionHistoryLimit: {} + f:selector: {} + f:strategy: + f:rollingUpdate: + .: {} + f:maxSurge: {} + f:maxUnavailable: {} + f:type: {} + f:template: + f:metadata: + f:labels: + .: {} + f:name: {} + f:spec: + f:affinity: + .: {} + f:podAntiAffinity: + .: {} + f:requiredDuringSchedulingIgnoredDuringExecution: {} + f:containers: + k:{"name":"attacher"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"driver"}: + .: {} + f:args: {} + f:command: {} + f:env: + .: {} + k:{"name":"CSI_ENDPOINT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_DEBUG"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_MODE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_VXFLEXOS_ENABLELISTVOLUMESNAPSHOT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_VXFLEXOS_ENABLESNAPSHOTCGDELETE"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/vxflexos-config"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"provisioner"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"resizer"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"snapshotter"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/var/run/csi"}: + .: {} + f:mountPath: {} + f:name: {} + f:dnsPolicy: {} + f:restartPolicy: {} + f:schedulerName: {} + f:securityContext: {} + f:serviceAccount: {} + f:serviceAccountName: {} + f:terminationGracePeriodSeconds: {} + f:volumes: + .: {} + k:{"name":"socket-dir"}: + .: {} + f:emptyDir: {} + f:name: {} + k:{"name":"vxflexos-config"}: + .: {} + f:name: {} + f:secret: + .: {} + f:defaultMode: {} + f:secretName: {} + manager: Go-http-client + operation: Update + time: "2021-04-28T15:53:34Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + f:deployment.kubernetes.io/revision: {} + f:status: + f:availableReplicas: {} + f:conditions: + .: {} + k:{"type":"Available"}: + .: {} + f:lastTransitionTime: {} + f:lastUpdateTime: {} + f:message: {} + f:reason: {} + f:status: {} + f:type: {} + k:{"type":"Progressing"}: + .: {} + f:lastTransitionTime: {} + f:lastUpdateTime: {} + f:message: {} + f:reason: {} + f:status: {} + f:type: {} + f:observedGeneration: {} + f:readyReplicas: {} + f:replicas: {} + f:updatedReplicas: {} + manager: kube-controller-manager + operation: Update + time: "2021-04-28T15:54:10Z" + name: vxflexos-controller + namespace: vxflexos + resourceVersion: "4169" + uid: a4e0e083-02b6-4084-b452-d2ac1f989fe3 + spec: + progressDeadlineSeconds: 600 + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + name: vxflexos-controller + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + creationTimestamp: null + labels: + name: vxflexos-controller + spec: + affinity: + podAntiAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: name + operator: In + values: + - vxflexos-controller + topologyKey: kubernetes.io/hostname + containers: + - args: + - --csi-address=$(ADDRESS) + - --v=5 + - --leader-election=true + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: k8s.gcr.io/sig-storage/csi-attacher:v3.1.0 + imagePullPolicy: IfNotPresent + name: attacher + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --csi-address=$(ADDRESS) + - --feature-gates=Topology=true + - --volume-name-prefix=k8s + - --volume-name-uuid-length=10 + - --leader-election=true + - --timeout=120s + - --v=5 + - --default-fstype=ext4 + - --extra-create-metadata + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: k8s.gcr.io/sig-storage/csi-provisioner:v2.1.0 + imagePullPolicy: IfNotPresent + name: provisioner + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --csi-address=$(ADDRESS) + - --timeout=120s + - --v=5 + - --leader-election=true + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: k8s.gcr.io/sig-storage/csi-snapshotter:v4.0.0 + imagePullPolicy: Always + name: snapshotter + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --csi-address=$(ADDRESS) + - --v=5 + - --leader-election=true + env: + - name: ADDRESS + value: /var/run/csi/csi.sock + image: quay.io/k8scsi/csi-resizer:v1.1.0 + imagePullPolicy: IfNotPresent + name: resizer + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - args: + - --leader-election + - --array-config=/vxflexos-config/config + command: + - /csi-vxflexos.sh + env: + - name: CSI_ENDPOINT + value: /var/run/csi/csi.sock + - name: X_CSI_MODE + value: controller + - name: X_CSI_DEBUG + value: "true" + - name: X_CSI_VXFLEXOS_ENABLESNAPSHOTCGDELETE + value: "false" + - name: X_CSI_VXFLEXOS_ENABLELISTVOLUMESNAPSHOT + value: "false" + image: dellemc/csi-vxflexos:v1.4.0 + imagePullPolicy: Always + name: driver + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/run/csi + name: socket-dir + - mountPath: /vxflexos-config + name: vxflexos-config + dnsPolicy: ClusterFirst + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + serviceAccount: vxflexos-controller + serviceAccountName: vxflexos-controller + terminationGracePeriodSeconds: 30 + volumes: + - emptyDir: {} + name: socket-dir + - name: vxflexos-config + secret: + defaultMode: 420 + secretName: vxflexos-config + status: + availableReplicas: 1 + conditions: + - lastTransitionTime: "2021-04-28T15:54:10Z" + lastUpdateTime: "2021-04-28T15:54:10Z" + message: Deployment has minimum availability. + reason: MinimumReplicasAvailable + status: "True" + type: Available + - lastTransitionTime: "2021-04-28T15:53:34Z" + lastUpdateTime: "2021-04-28T15:54:10Z" + message: ReplicaSet "vxflexos-controller-66bcc75977" has successfully progressed. + reason: NewReplicaSetAvailable + status: "True" + type: Progressing + observedGeneration: 1 + readyReplicas: 1 + replicas: 1 + updatedReplicas: 1 +- apiVersion: apps/v1 + kind: DaemonSet + metadata: + annotations: + deprecated.daemonset.template.generation: "1" + meta.helm.sh/release-name: vxflexos + meta.helm.sh/release-namespace: vxflexos + creationTimestamp: "2021-04-28T15:53:34Z" + generation: 1 + labels: + app.kubernetes.io/managed-by: Helm + managedFields: + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:metadata: + f:annotations: + .: {} + f:deprecated.daemonset.template.generation: {} + f:meta.helm.sh/release-name: {} + f:meta.helm.sh/release-namespace: {} + f:labels: + .: {} + f:app.kubernetes.io/managed-by: {} + f:spec: + f:revisionHistoryLimit: {} + f:selector: {} + f:template: + f:metadata: + f:labels: + .: {} + f:app: {} + f:spec: + f:containers: + k:{"name":"driver"}: + .: {} + f:args: {} + f:command: {} + f:env: + .: {} + k:{"name":"CSI_ENDPOINT"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_ALLOW_RWO_MULTI_POD_ACCESS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_DEBUG"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_MODE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"X_CSI_PRIVATE_MOUNT_DIR"}: + .: {} + f:name: {} + f:value: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:securityContext: + .: {} + f:allowPrivilegeEscalation: {} + f:capabilities: + .: {} + f:add: {} + f:privileged: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/dev"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices"}: + .: {} + f:mountPath: {} + f:mountPropagation: {} + f:name: {} + k:{"mountPath":"/var/lib/kubelet/plugins/vxflexos.emc.dell.com"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/var/lib/kubelet/pods"}: + .: {} + f:mountPath: {} + f:mountPropagation: {} + f:name: {} + k:{"mountPath":"/vxflexos-config"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"name":"registrar"}: + .: {} + f:args: {} + f:env: + .: {} + k:{"name":"ADDRESS"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"KUBE_NODE_NAME"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:fieldRef: + .: {} + f:apiVersion: {} + f:fieldPath: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/csi"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/registration"}: + .: {} + f:mountPath: {} + f:name: {} + f:dnsPolicy: {} + f:hostNetwork: {} + f:initContainers: + .: {} + k:{"name":"sdc"}: + .: {} + f:env: + .: {} + k:{"name":"HOST_DRV_CFG_PATH"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"MDM"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:secretKeyRef: + .: {} + f:key: {} + f:name: {} + k:{"name":"MODE"}: + .: {} + f:name: {} + f:value: {} + k:{"name":"NODENAME"}: + .: {} + f:name: {} + f:valueFrom: + .: {} + f:fieldRef: + .: {} + f:apiVersion: {} + f:fieldPath: {} + f:image: {} + f:imagePullPolicy: {} + f:name: {} + f:resources: {} + f:securityContext: + .: {} + f:privileged: {} + f:terminationMessagePath: {} + f:terminationMessagePolicy: {} + f:volumeMounts: + .: {} + k:{"mountPath":"/dev"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/host-os-release"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/host_drv_cfg_path"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/rules.d"}: + .: {} + f:mountPath: {} + f:name: {} + k:{"mountPath":"/storage"}: + .: {} + f:mountPath: {} + f:name: {} + f:restartPolicy: {} + f:schedulerName: {} + f:securityContext: {} + f:serviceAccount: {} + f:serviceAccountName: {} + f:terminationGracePeriodSeconds: {} + f:volumes: + .: {} + k:{"name":"dev"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"driver-path"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"os-release"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"pods-path"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"registration-dir"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"scaleio-path-opt"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"sdc-storage"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"udev-d"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"volumedevices-path"}: + .: {} + f:hostPath: + .: {} + f:path: {} + f:type: {} + f:name: {} + k:{"name":"vxflexos-config"}: + .: {} + f:name: {} + f:secret: + .: {} + f:defaultMode: {} + f:secretName: {} + f:updateStrategy: + f:rollingUpdate: + .: {} + f:maxUnavailable: {} + f:type: {} + manager: Go-http-client + operation: Update + time: "2021-04-28T15:53:34Z" + - apiVersion: apps/v1 + fieldsType: FieldsV1 + fieldsV1: + f:status: + f:currentNumberScheduled: {} + f:desiredNumberScheduled: {} + f:numberAvailable: {} + f:numberReady: {} + f:observedGeneration: {} + f:updatedNumberScheduled: {} + manager: kube-controller-manager + operation: Update + time: "2021-04-28T15:54:09Z" + name: vxflexos-node + namespace: vxflexos + resourceVersion: "4149" + uid: 9de92539-d3a0-487f-9828-6ba290e75816 + spec: + revisionHistoryLimit: 10 + selector: + matchLabels: + app: vxflexos-node + template: + metadata: + creationTimestamp: null + labels: + app: vxflexos-node + spec: + containers: + - args: + - --array-config=/vxflexos-config/config + command: + - /csi-vxflexos.sh + env: + - name: CSI_ENDPOINT + value: unix:///var/lib/kubelet/plugins/vxflexos.emc.dell.com/csi_sock + - name: X_CSI_MODE + value: node + - name: X_CSI_DEBUG + value: "true" + - name: X_CSI_PRIVATE_MOUNT_DIR + value: /var/lib/kubelet/plugins/vxflexos.emc.dell.com/disks + - name: X_CSI_ALLOW_RWO_MULTI_POD_ACCESS + value: "false" + image: dellemc/csi-vxflexos:v1.4.0 + imagePullPolicy: Always + name: driver + resources: {} + securityContext: + allowPrivilegeEscalation: true + capabilities: + add: + - SYS_ADMIN + privileged: true + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /var/lib/kubelet/plugins/vxflexos.emc.dell.com + name: driver-path + - mountPath: /var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices + mountPropagation: Bidirectional + name: volumedevices-path + - mountPath: /var/lib/kubelet/pods + mountPropagation: Bidirectional + name: pods-path + - mountPath: /dev + name: dev + - mountPath: /vxflexos-config + name: vxflexos-config + - args: + - --v=5 + - --csi-address=$(ADDRESS) + - --kubelet-registration-path=/var/lib/kubelet/plugins/vxflexos.emc.dell.com/csi_sock + env: + - name: ADDRESS + value: /csi/csi_sock + - name: KUBE_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + image: k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.1.0 + imagePullPolicy: IfNotPresent + name: registrar + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /registration + name: registration-dir + - mountPath: /csi + name: driver-path + dnsPolicy: ClusterFirstWithHostNet + hostNetwork: true + initContainers: + - env: + - name: NODENAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: MODE + value: config + - name: MDM + valueFrom: + secretKeyRef: + key: MDM + name: vxflexos-config + - name: HOST_DRV_CFG_PATH + value: /opt/emc/scaleio/sdc/bin + image: dellemc/sdc:3.5.1.1-1 + imagePullPolicy: Always + name: sdc + resources: {} + securityContext: + privileged: true + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /dev + name: dev + - mountPath: /host-os-release + name: os-release + - mountPath: /storage + name: sdc-storage + - mountPath: /rules.d + name: udev-d + - mountPath: /host_drv_cfg_path + name: scaleio-path-opt + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + serviceAccount: vxflexos-node + serviceAccountName: vxflexos-node + terminationGracePeriodSeconds: 30 + volumes: + - hostPath: + path: /var/lib/kubelet/plugins_registry/ + type: DirectoryOrCreate + name: registration-dir + - hostPath: + path: /var/lib/kubelet/plugins/vxflexos.emc.dell.com + type: DirectoryOrCreate + name: driver-path + - hostPath: + path: /var/lib/kubelet/plugins/kubernetes.io/csi/volumeDevices + type: DirectoryOrCreate + name: volumedevices-path + - hostPath: + path: /var/lib/kubelet/pods + type: Directory + name: pods-path + - hostPath: + path: /dev + type: Directory + name: dev + - hostPath: + path: /opt/emc/scaleio/sdc/bin + type: DirectoryOrCreate + name: scaleio-path-opt + - hostPath: + path: /var/emc-scaleio + type: DirectoryOrCreate + name: sdc-storage + - hostPath: + path: /etc/udev/rules.d + type: Directory + name: udev-d + - hostPath: + path: /etc/os-release + type: File + name: os-release + - name: vxflexos-config + secret: + defaultMode: 420 + secretName: vxflexos-config + updateStrategy: + rollingUpdate: + maxUnavailable: 1 + type: RollingUpdate + status: + currentNumberScheduled: 2 + desiredNumberScheduled: 2 + numberAvailable: 2 + numberMisscheduled: 0 + numberReady: 2 + observedGeneration: 1 + updatedNumberScheduled: 2 +kind: List +metadata: + resourceVersion: "" + selfLink: "" \ No newline at end of file diff --git a/cmd/proxy-server/main.go b/cmd/proxy-server/main.go index fbd579ed..445119cf 100644 --- a/cmd/proxy-server/main.go +++ b/cmd/proxy-server/main.go @@ -249,7 +249,7 @@ func run(log *logrus.Entry) error { } dh := proxy.NewDispatchHandler(log, systemHandlers) - insecure := cfg.Certificate.CrtFile == "" && cfg.Certificate.KeyFile == "" + insecure := cfg.Certificate.CrtFile == "" && cfg.Certificate.KeyFile == "" // TODO router := &web.Router{ RolesHandler: web.Adapt(rolesHandler(), web.OtelMW(tp, "roles")), diff --git a/docs/GETTING_STARTED_GUIDE.md b/docs/GETTING_STARTED_GUIDE.md index 3cadecd7..e2c0d6e4 100644 --- a/docs/GETTING_STARTED_GUIDE.md +++ b/docs/GETTING_STARTED_GUIDE.md @@ -364,7 +364,7 @@ Given a setup where Kubernetes, a storage system, a CSI driver, and Karavi Autho echo === Applying token token === kubectl apply -f /tmp/token.yaml -n $DriverNameSpace - echo === injecting sidecar in CSI driver host === + echo === injecting sidecar in all CSI driver hosts === sudo curl -k https://${AuthorizationHostIP}/install | sh ``` diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md index 0717f993..0c263b66 100644 --- a/docs/TROUBLESHOOTING.md +++ b/docs/TROUBLESHOOTING.md @@ -1,7 +1,9 @@ # Troubleshooting ## Table of Contents -- [`karavictl inject` leaves vxflexos-controller in `Pending` state](#karavictl-inject-leaves-vxflexos-controller-in-pending-state) +- `karavictl inject` leaves the following arrays controllers in pending states +- [vxflexos-controller in `Pending` state](#karavictl-inject-leaves-vxflexos-controller-in-pending-state) +- [powermax-controller in `Pending` state](#karavictl-inject-leaves-powermax-controller-in-pending-state) --- @@ -18,12 +20,24 @@ vxflexos-node-mjc74 3/3 Running 0 2m44s vxflexos-node-zgswp 3/3 Running 0 2m44s ``` +### `karavictl inject` leaves powermax-controller in `Pending` state +This situation may occur when the number of Powermax controller pods that are deployed is equal to the number of schedulable nodes. +``` +$ kubectl get pods -n powermax --show-labels + +powermax-controller-58d8779f5d-v7t56 0/6 Pending 0 25s name=powermax-controller,pod-template-hash=58d8779f5d +powermax-controller-78f749847-jqphx 5/5 Running 0 10m name=powermax-controller,pod-template-hash=78f749847 +powermax-controller-78f749847-w6vp5 5/5 Running 0 10m name=powermax-controller,pod-template-hash=78f749847 +powermax-node-gx5pk 3/3 Running 0 21s app=powermax-node,controller-revision-hash=5c4fdf478f,pod-template-generation=3 +powermax-node-k5gwc 3/3 Running 0 17s app=powermax-node,controller-revision-hash=5c4fdf478f,pod-template-generation=3 +``` + #### Resolution -To resolve this issue, we need to temporarily reduce the number of replicas that the Vxflexos driver deployment is using. +To resolve this issue, we need to temporarily reduce the number of replicas that the the driver deployment is using. 1. Edit the deployment ``` -$ kubectl edit -n deploy/vxflexos-controller +$ kubectl edit -n deploy/-controller ``` 2. Find `replicas` under the `spec` section of the deployment manifest. @@ -38,6 +52,16 @@ vxflexos-controller-696cc5945f-4t94d 6/6 Running 0 4m41s vxflexos-node-mjc74 3/3 Running 0 3m44s vxflexos-node-zgswp 3/3 Running 0 3m44s ``` +or +``` +$ kubectl get pods -n powermax --show-labels +NAME READY STATUS RESTARTS AGE LABELS +powermax-controller-58d8779f5d-cqx8d 6/6 Running 0 22s name=powermax-controller,pod-template-hash=58d8779f5d +powermax-controller-58d8779f5d-v7t56 6/6 Running 22 8m7s name=powermax-controller,pod-template-hash=58d8779f5d +powermax-node-gx5pk 3/3 Running 3 8m3s app=powermax-node,controller-revision-hash=5c4fdf478f,pod-template-generation=3 +powermax-node-k5gwc 3/3 Running 3 7m59s app=powermax-node,controller-revision-hash=5c4fdf478f,pod-template-generation=3 +``` + 6. Edit the deployment again 7. Find `replicas` under the `spec` section of the deployment manifest. 8. Increase the number of `replicas` by 1 @@ -52,3 +76,12 @@ vxflexos-controller-696cc5945f-6xxhb 6/6 Running 0 5m41s vxflexos-node-mjc74 3/3 Running 0 4m44s vxflexos-node-zgswp 3/3 Running 0 4m44s ``` +or +``` +$ kubectl get pods -n powermax --show-labels +NAME READY STATUS RESTARTS AGE LABELS +powermax-controller-58d8779f5d-cqx8d 6/6 Running 0 22s name=powermax-controller,pod-template-hash=58d8779f5d +powermax-controller-58d8779f5d-v7t56 6/6 Running 22 8m7s name=powermax-controller,pod-template-hash=58d8779f5d +powermax-node-gx5pk 3/3 Running 3 8m3s app=powermax-node,controller-revision-hash=5c4fdf478f,pod-template-generation=3 +powermax-node-k5gwc 3/3 Running 3 7m59s app=powermax-node,controller-revision-hash=5c4fdf478f,pod-template-generation=3 +``` \ No newline at end of file diff --git a/internal/proxy/powermax_handler.go b/internal/proxy/powermax_handler.go index ef089b31..a45ecd07 100644 --- a/internal/proxy/powermax_handler.go +++ b/internal/proxy/powermax_handler.go @@ -286,12 +286,41 @@ func (s *PowerMaxSystem) volumeCreateHandler(next http.Handler, enf *quota.Redis return } + defer r.Body.Close() + + var payloadTemp map[string]interface{} + if err := json.NewDecoder(bytes.NewReader(b)).Decode(&payloadTemp); err != nil { + s.handleErrorf(w, http.StatusInternalServerError, err, "decoding body") + return + } + + var op string + if action, ok := payloadTemp["editStorageGroupActionParam"]; ok { + v, ok := action.(map[string]interface{}) + if !ok && s.handleError(w, http.StatusInternalServerError, errors.New("invalid payload")) { + return + } + if _, ok := v["expandStorageGroupParam"]; ok { + op = "expandStorageGroupParam" + } + } + + // Other modification operations can pass through. + if op != "expandStorageGroupParam" { + next.ServeHTTP(w, r) + return + } + var payload powermaxAddVolumeRequest if err := json.NewDecoder(bytes.NewReader(b)).Decode(&payload); err != nil { s.handleErrorf(w, http.StatusInternalServerError, err, "decoding body") return } - defer r.Body.Close() + + if len(payload.Editstoragegroupactionparam.Expandstoragegroupparam.Addvolumeparam.Volumeattributes) == 0 { + next.ServeHTTP(w, r) + return + } capAsInt, err := strconv.ParseInt(payload.Editstoragegroupactionparam.Expandstoragegroupparam.Addvolumeparam.Volumeattributes[0].VolumeSize, 0, 64) if s.handleErrorf(w, http.StatusInternalServerError, err, "parsing int") { @@ -438,7 +467,7 @@ func (s *PowerMaxSystem) volumeCreateHandler(next http.Handler, enf *quota.Redis // volumeModifyHandler handles a modify volume request. // // The REST call is: -// PUT /univmax/restapi/91/sloprovisioning/symmetrix/000197900714/volume/003E4 +// PUT /univmax/restapi/91/sloprovisioning/symmetrix/1234567890/volume/003E4 // // The payload looks like: // {"editVolumeActionParam":{ diff --git a/internal/proxy/powermax_handler_test.go b/internal/proxy/powermax_handler_test.go index 129527f1..626414d1 100644 --- a/internal/proxy/powermax_handler_test.go +++ b/internal/proxy/powermax_handler_test.go @@ -81,7 +81,7 @@ func testPowerMaxServeHTTP(t *testing.T) { }), ) r := httptest.NewRequest(http.MethodGet, "/", nil) - r.Header.Set("Forwarded", "for=https://10.0.0.1;000197900714") + r.Header.Set("Forwarded", "for=https://10.0.0.1;1234567890") w := httptest.NewRecorder() go sut.ServeHTTP(w, r) @@ -128,9 +128,9 @@ func testPowerMaxServeHTTP(t *testing.T) { t.Fatal(err) } r := httptest.NewRequest(http.MethodGet, - "/univmax/restapi/91/sloprovisioning/symmetrix/000197900714/storagegroup/csi-CSM-Bronze-SRP_1-SG/", + "/univmax/restapi/91/sloprovisioning/symmetrix/1234567890/storagegroup/csi-CSM-Bronze-SRP_1-SG/", nil) - r.Header.Set("Forwarded", "for=https://10.0.0.1;000197900714") + r.Header.Set("Forwarded", "for=https://10.0.0.1;1234567890") addJWTToRequestHeader(t, r) w := httptest.NewRecorder() @@ -149,7 +149,7 @@ func testPowerMaxServeHTTP(t *testing.T) { ) fakeUni := fakeServer(t, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { t.Logf("fake unisphere received: %s %s", r.Method, r.URL) - if r.URL.Path == "/univmax/restapi/91/sloprovisioning/symmetrix/000197900714/storagegroup/csi-CSM-Bronze-SRP_1-SG" { + if r.URL.Path == "/univmax/restapi/91/sloprovisioning/symmetrix/1234567890/storagegroup/csi-CSM-Bronze-SRP_1-SG" { b, err := ioutil.ReadFile("testdata/powermax_create_volume_response.json") if err != nil { t.Fatal(err) @@ -182,9 +182,9 @@ func testPowerMaxServeHTTP(t *testing.T) { t.Fatal(err) } r := httptest.NewRequest(http.MethodPut, - "/univmax/restapi/91/sloprovisioning/symmetrix/000197900714/storagegroup/csi-CSM-Bronze-SRP_1-SG/", + "/univmax/restapi/91/sloprovisioning/symmetrix/1234567890/storagegroup/csi-CSM-Bronze-SRP_1-SG/", bytes.NewReader(payloadBytes)) - r.Header.Set("Forwarded", "for=https://10.0.0.1;000197900714") + r.Header.Set("Forwarded", "for=https://10.0.0.1;1234567890") addJWTToRequestHeader(t, r) w := httptest.NewRecorder() @@ -193,7 +193,7 @@ func testPowerMaxServeHTTP(t *testing.T) { if w.Result().StatusCode != http.StatusOK { t.Errorf("status: got %d, want 200", w.Result().StatusCode) } - wantExistsKey := "quota:powermax:000197900714:SRP_1:karavi-tenant:data" + wantExistsKey := "quota:powermax:1234567890:SRP_1:karavi-tenant:data" if gotExistsKey != wantExistsKey { t.Errorf("exists key: got %q, want %q", gotExistsKey, wantExistsKey) } @@ -209,14 +209,14 @@ func testPowerMaxServeHTTP(t *testing.T) { fakeUni := fakeServer(t, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { t.Logf("fake unisphere received: %s %s", r.Method, r.URL) switch r.URL.Path { - case "/univmax/restapi/91/sloprovisioning/symmetrix/000197900714/volume/003E4": + case "/univmax/restapi/91/sloprovisioning/symmetrix/1234567890/volume/003E4": b, err := ioutil.ReadFile("testdata/powermax_getvolumebyid_response.json") if err != nil { t.Fatal(err) } w.Write(b) return - case "/univmax/restapi/91/sloprovisioning/symmetrix/000197900714/storagegroup/csi-CSM-Bronze-SRP_1-SG": + case "/univmax/restapi/91/sloprovisioning/symmetrix/1234567890/storagegroup/csi-CSM-Bronze-SRP_1-SG": b, err := ioutil.ReadFile("testdata/powermax_getstoragegroup_response.json") if err != nil { t.Fatal(err) @@ -249,9 +249,9 @@ func testPowerMaxServeHTTP(t *testing.T) { t.Fatal(err) } r := httptest.NewRequest(http.MethodPut, - "/univmax/restapi/91/sloprovisioning/symmetrix/000197900714/volume/003E4/", + "/univmax/restapi/91/sloprovisioning/symmetrix/1234567890/volume/003E4/", bytes.NewReader(payloadBytes)) - r.Header.Set("Forwarded", "for=https://10.0.0.1;000197900714") + r.Header.Set("Forwarded", "for=https://10.0.0.1;1234567890") addJWTToRequestHeader(t, r) w := httptest.NewRecorder() @@ -260,7 +260,7 @@ func testPowerMaxServeHTTP(t *testing.T) { if w.Result().StatusCode != http.StatusOK { t.Errorf("status: got %d, want 200", w.Result().StatusCode) } - wantExistsKey := "quota:powermax:000197900714:SRP_1:karavi-tenant:data" + wantExistsKey := "quota:powermax:1234567890:SRP_1:karavi-tenant:data" if gotExistsKey != wantExistsKey { t.Errorf("exists key: got %q, want %q", gotExistsKey, wantExistsKey) } @@ -336,7 +336,7 @@ func withLogger(logger *logrus.Entry) powermaxHandlerOption { func withSystem(s *PowerMaxSystem) powermaxHandlerOption { return func(t *testing.T, pmh *PowerMaxHandler) { - pmh.systems["000197900714"] = s + pmh.systems["1234567890"] = s } } @@ -384,7 +384,7 @@ func fakeServer(t *testing.T, h http.Handler) *httptest.Server { func systemJSON(endpoint string) string { return fmt.Sprintf(`{ "powermax": { - "000197900714": { + "1234567890": { "endpoint": "%s", "user": "smc", "pass": "smc", @@ -398,7 +398,7 @@ func systemJSON(endpoint string) string { func systemObject(endpoint string) SystemConfig { return SystemConfig{ "powermax": Family{ - "000197900714": SystemEntry{ + "1234567890": SystemEntry{ Endpoint: endpoint, User: "smc", Password: "smc", diff --git a/internal/web/client_install_handler.go b/internal/web/client_install_handler.go index 28c1ae0e..52166272 100644 --- a/internal/web/client_install_handler.go +++ b/internal/web/client_install_handler.go @@ -20,18 +20,50 @@ func ClientInstallHandler(imageAddr, jwtSigningSecret, rootCA string, insecure b host := r.Host var sb strings.Builder - fmt.Fprintln(&sb, "kubectl get secrets,deployments,daemonsets -n vxflexos -o yaml \\") - fmt.Fprintln(&sb, " | karavictl inject \\") - fmt.Fprintf(&sb, " --image-addr %s \\\n", imageAddr) - fmt.Fprintf(&sb, " --proxy-host %s \\\n", host) - fmt.Fprintf(&sb, " --insecure=%v \\\n", insecure) + q := r.URL.Query() + pps := "" + + for _, pp := range q["proxy-port"] { + t := strings.Split(pp, ":") + pps += fmt.Sprintf(" --proxy-port %s=%s", t[0], t[1]) + } + + inject := fmt.Sprintf("karavictl inject --image-addr %s --proxy-host %s --insecure=%v %s", imageAddr, host, insecure, pps) if rootCA != "" { - fmt.Fprintf(&sb, " --root-certificate %s \\\n", rootCA) + inject += fmt.Sprintf(" --root-certificate %s", rootCA) } - fmt.Fprintln(&sb, " | kubectl apply -f -") - fmt.Fprintln(&sb, "kubectl rollout status -n vxflexos deploy/vxflexos-controller") - fmt.Fprintln(&sb, "kubectl rollout status -n vxflexos ds/vxflexos-node") - fmt.Fprintf(w, sb.String()) + checkDrivers := fmt.Sprintf(` +export DRIVERS="%s" +if [ "${DRIVERS}" == "" ]; then + export DRIVERS=$(kubectl get namespace) +fi +`, strings.Join(q["namespace"], ",")) + + vxflexos := fmt.Sprintf(` +if [[ $DRIVERS =~ "vxflexos" ]]; then + kubectl get secrets,deployments,daemonsets -n vxflexos -o yaml | %s | kubectl apply -f - + kubectl rollout restart -n vxflexos deploy/vxflexos-controller + kubectl rollout restart -n vxflexos ds/vxflexos-node + kubectl rollout status -n vxflexos deploy/vxflexos-controller + kubectl rollout status -n vxflexos ds/vxflexos-node +fi +`, inject) + + powermax := fmt.Sprintf(` +if [[ $DRIVERS =~ "powermax" ]]; then + kubectl get secrets,deployments,daemonsets -n powermax -o yaml | %s | kubectl apply -f - + kubectl rollout restart -n powermax deploy/powermax-controller + kubectl rollout restart -n powermax ds/powermax-node + kubectl rollout status -n powermax deploy/powermax-controller + kubectl rollout status -n powermax ds/powermax-node +fi +`, inject) + + fmt.Fprintln(&sb, checkDrivers) + fmt.Fprintln(&sb, powermax) + fmt.Fprintln(&sb, vxflexos) + + fmt.Fprintln(w, sb.String()) }) } diff --git a/internal/web/client_install_handler_test.go b/internal/web/client_install_handler_test.go index 0d1e4486..46eec542 100644 --- a/internal/web/client_install_handler_test.go +++ b/internal/web/client_install_handler_test.go @@ -14,9 +14,17 @@ func TestClientInstallHandler(t *testing.T) { w := httptest.NewRecorder() r := httptest.NewRequest(http.MethodGet, "/", nil) r.Host = "10.0.0.1" + + q := r.URL.Query() + q.Add("namespace", "powermax") + q.Add("namespace", "orange") + q.Add("proxy-port", "powermax:20001") + r.URL.RawQuery = q.Encode() + wantHost := fmt.Sprintf("--proxy-host %s", r.Host) imageAddr := "10.0.0.1/sidecar:latest" wantImageAddr := fmt.Sprintf("--image-addr %s", imageAddr) + // the tokens are based on time, so we can't easily test for them. wantInsecureTkn := fmt.Sprintf("--insecure") wantRootCATkn := fmt.Sprintf("--root-certificate") @@ -39,4 +47,10 @@ func TestClientInstallHandler(t *testing.T) { if !bytes.Contains(b, []byte(wantRootCATkn)) { t.Error("expected body to contain guest refresh token") } + if !bytes.Contains(b, []byte("powermax,orange")) { + t.Error("expected body to contain namepaces") + } + if !bytes.Contains(b, []byte("--proxy-port powermax=20001")) { + t.Error("expected body to contain proxy-ports") + } } diff --git a/policies/powermax_url.rego b/policies/powermax_url.rego index f4711bb7..976e8ab0 100644 --- a/policies/powermax_url.rego +++ b/policies/powermax_url.rego @@ -15,21 +15,32 @@ package karavi.authz.powermax.url allowlist = [ - "GET /univmax/restapi/version", - "GET /univmax/restapi/(90|91)/system/symmetrix/[a-f0-9]+", - "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9]+/srp", - "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9]+/storagegroup", - "POST /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9]+/storagegroup", - "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9]+/storagegroup/[a-f0-9]+", - "PUT /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9]+/storagegroup/[a-f0-9]+", - "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9]+/volume", - "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9]+/volume/[a-f0-9]+", - "PUT /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9]+/volume/[a-f0-9]+", - "DELETE /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9]+/volume/[a-f0-9]+", - "DELETE /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9]+/storagegroup/[a-f0-9]+" + "GET /univmax/restapi/version", + "GET /univmax/restapi/(90|91)/system/symmetrix/[a-f0-9A-F]+", + "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/srp", + "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/storagegroup", + "POST /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/storagegroup", + "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/storagegroup/(.+)", + "PUT /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/storagegroup/(.+)", + "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/volume", + "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/volume/[a-f0-9A-F]+", + "PUT /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/volume/[a-f0-9A-F]+", + "DELETE /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/volume/[a-f0-9A-F]+", + "DELETE /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/storagegroup/[a-f0-9A-F]+", + "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/volume/[a-f0-9A-F]+/snapshot", + "GET /univmax/restapi/91/sloprovisioning/symmetrix/[a-f0-9A-F]+/portgroup/(.+)", + "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/initiator", + "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/host/(.+)", + "GET /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/maskingview/(.+)", + "GET /univmax/restapi/(90|91)/system/symmetrix", + "GET /univmax/restapi/private/(90|91)/replication/symmetrix/[a-f0-9A-F]+/volume/[a-f0-9A-F]+/snapshot", + "GET /univmax/restapi/private/(90|91)/replication/symmetrix/[a-f0-9A-F]+/volume/", + "DELETE /univmax/restapi/(90|91)/sloprovisioning/symmetrix/[a-f0-9A-F]+/maskingview/(.+)", + "GET /univmax/restapi/(90|91)/replication/capabilities/symmetrix/", ] default allow = false + allow { regex.match(allowlist[_], sprintf("%s %s", [input.method, input.url])) }