diff --git a/glide.lock b/glide.lock index c32015f93..47e2ea319 100644 --- a/glide.lock +++ b/glide.lock @@ -1,5 +1,5 @@ -hash: 43e0d60f9180e5f4547f17c573e0b49014a4312c7cc19f20468c3c7629f7c3c7 -updated: 2019-07-16T15:11:38.705804037-04:00 +hash: ec39906d71ee6bffc9d2794220563e27bc225d2a0a84b6b78080b693f610ffa9 +updated: 2019-07-22T09:30:08.580742944-04:00 imports: - name: bitbucket.org/ww/goautoneg version: 2ae31c8b6b30d2f4c8100c20d527b571e9c433bb @@ -127,12 +127,10 @@ imports: - name: github.com/golang/protobuf version: b4deda0973fb4c70b50d226b1af49f3da59f5265 subpackages: - - jsonpb - proto - ptypes - ptypes/any - ptypes/duration - - ptypes/struct - ptypes/timestamp - name: github.com/google/btree version: 20236160a414454a9c64b6c8829381c6f4bddcaa @@ -228,8 +226,9 @@ imports: - libcontainer/user - libcontainer/utils - name: github.com/openshift/api - version: bd36f2b7c4f8baf9f59ef8f804ef3f23b23ec430 + version: 9525304a0adb725ab4a4a54539a1a6bf6cc343d3 subpackages: + - annotations - apps - apps/v1 - authorization @@ -275,7 +274,7 @@ imports: - webconsole - webconsole/v1 - name: github.com/openshift/client-go - version: c44a8b61b9f46cd9e802384dfeda0bc9942db68a + version: a85ea6a6b3a5d2dbe41582ee35695dd4683e1f02 subpackages: - apps/clientset/versioned - apps/clientset/versioned/fake @@ -353,7 +352,7 @@ imports: - template/informers/externalversions/template/v1 - template/listers/template/v1 - name: github.com/openshift/library-go - version: e48a704752ab49d1a820b658d0f3d66d41245398 + version: 83581c469d2eeb6dadfe86a4b6d8033b465ffd15 subpackages: - pkg/apps/appsserialization - pkg/apps/appsutil @@ -452,6 +451,8 @@ imports: version: 65e2d4e15006aab9813ff8769e768bbf4bb667a0 subpackages: - context + - html + - html/atom - http/httpguts - http2 - http2/hpack @@ -549,8 +550,7 @@ imports: - name: gopkg.in/yaml.v2 version: 5420a8b6744d3b0345ab293f6fcba19c978f1183 - name: k8s.io/api - version: 5b6d4ec96213966713b65f5d4aa1ee1b765f2c7c - repo: https://github.com/openshift/kubernetes-api.git + version: 40a48860b5abbba9aa891b02b32da429b08d96a0 subpackages: - admission/v1beta1 - admissionregistration/v1beta1 @@ -591,13 +591,11 @@ imports: - storage/v1alpha1 - storage/v1beta1 - name: k8s.io/apiextensions-apiserver - version: ee330a2a5c6d54e58af0defc868f1258a5c47422 - repo: https://github.com/openshift/kubernetes-apiextensions-apiserver.git + version: 53c4693659ed354d76121458fb819202dd1635fa subpackages: - pkg/features - name: k8s.io/apimachinery - version: eab709b58ad6d98573ce6daddb9f6d17487efe6c - repo: https://github.com/openshift/kubernetes-apimachinery.git + version: d7deff9243b165ee192f5551710ea4285dcfd615 subpackages: - pkg/api/apitesting - pkg/api/apitesting/fuzzer @@ -658,8 +656,7 @@ imports: - third_party/forked/golang/netutil - third_party/forked/golang/reflect - name: k8s.io/apiserver - version: 609697ced6c17aa748be8e7af619bfd99aa2e952 - repo: https://github.com/openshift/kubernetes-apiserver.git + version: 8b27c41bdbb11ff103caa673315e097bf0289171 subpackages: - pkg/admission - pkg/admission/configuration @@ -718,7 +715,6 @@ imports: - pkg/registry/generic - pkg/registry/rest - pkg/server - - pkg/server/certs - pkg/server/filters - pkg/server/healthz - pkg/server/httplog @@ -742,11 +738,9 @@ imports: - plugin/pkg/authenticator/token/webhook - plugin/pkg/authorizer/webhook - name: k8s.io/cli-runtime - version: a9444fab08246283f19c8ab752bf8cc10bf0fd18 - repo: https://github.com/openshift/kubernetes-cli-runtime.git + version: 2899ed30580fdbc8286718edb4382b529463099d subpackages: - pkg/genericclioptions - - pkg/genericclioptions/openshiftpatch - pkg/kustomize - pkg/kustomize/k8sdeps - pkg/kustomize/k8sdeps/configmapandsecret @@ -759,8 +753,7 @@ imports: - pkg/printers - pkg/resource - name: k8s.io/client-go - version: 70952d66b5d131aa0142ceaebfe6d6da51178878 - repo: https://github.com/openshift/kubernetes-client-go.git + version: 6ee68ca5fd8355d024d02f9db0b3b667e8357a0f subpackages: - discovery - discovery/cached @@ -974,38 +967,30 @@ imports: - util/workqueue - name: k8s.io/cloud-provider version: c892ea32361a3655e7bd8c06f2d02dd8ce73dd78 - repo: https://github.com/openshift/kubernetes-cloud-provider.git subpackages: - features - name: k8s.io/cluster-bootstrap version: 50662da99b70008aa395937d09b9da52a9edd041 - repo: https://github.com/openshift/kubernetes-cluster-bootstrap.git - name: k8s.io/code-generator - version: f40157d9638d05ebf65421a9bbad5a7f68878b65 - repo: https://github.com/openshift/kubernetes-code-generator.git + version: 50b561225d70b3eb79a1faafd3dfe7b1a62cbe73 - name: k8s.io/component-base version: 4a91899592f42b2f5859587cc5a676a5b94d2ee3 - repo: https://github.com/openshift/kubernetes-component-base.git subpackages: - cli/flag - config - logs - name: k8s.io/csi-api version: 693d387aa133c41adc69c717981d40df2b5c797a - repo: https://github.com/openshift/kubernetes-csi-api.git - name: k8s.io/csi-translation-lib version: ce92c5cfdd61987ea4ce3b8c279cec25d109f366 - repo: https://github.com/openshift/kubernetes-csi-translation-lib.git - name: k8s.io/gengo version: 51747d6e00da1fc578d5a333a93bb2abcbce7a95 - name: k8s.io/klog version: 8139d8cb77af419532b33dfa7dd09fbc5f1d344f - name: k8s.io/kube-aggregator - version: 0050b795891b7085b9c9e0df9677789e61fd812d - repo: https://github.com/openshift/kubernetes-kube-aggregator.git + version: da8327669ac57b6e6a06676eeb7de19c9780f76d - name: k8s.io/kube-controller-manager version: 97ed623e38350ab8a3cce36d6003ff9ab27f6669 - repo: https://github.com/openshift/kubernetes-kube-controller-manager.git - name: k8s.io/kube-openapi version: b3a7cee44a305be0a69e1b9ac03018307287e1b0 subpackages: @@ -1018,16 +1003,12 @@ imports: - pkg/util/proto/validation - name: k8s.io/kube-proxy version: 4d735c31b05439ef4136b5ee8454e62e854fac1f - repo: https://github.com/openshift/kubernetes-kube-proxy.git - name: k8s.io/kube-scheduler version: b74e9e79538d3a93ad1d1f391b9461c04a20c84e - repo: https://github.com/openshift/kubernetes-kube-scheduler.git - name: k8s.io/kubelet version: f6da02f583256d1a15cc44a101c80bfa2080a46f - repo: https://github.com/openshift/kubernetes-kubelet.git - name: k8s.io/kubernetes - version: 0a254611a05f93947e024a3916bba8e670a129dd - repo: https://github.com/openshift/kubernetes.git + version: 641856db18352033a0d96dbc99153fa3b27298e5 subpackages: - cmd/controller-manager/app - pkg/api/legacyscheme @@ -1103,16 +1084,12 @@ imports: - pkg/version - name: k8s.io/metrics version: 1bd6a4002213382a0afb4f0b96717926e5413646 - repo: https://github.com/openshift/kubernetes-metrics.git - name: k8s.io/sample-apiserver version: 236f85ce49e5a88a9b0a4eff066c5c61f51a1d95 - repo: https://github.com/openshift/kubernetes-sample-apiserver.git - name: k8s.io/sample-cli-plugin version: 59043b4d4f841e1240827a0a30aab14cdc8e4e08 - repo: https://github.com/openshift/kubernetes-sample-cli-plugin.git - name: k8s.io/sample-controller version: 324336050c979273816000d5d2c6df1ff1be9ea6 - repo: https://github.com/openshift/kubernetes-sample-controller.git - name: k8s.io/utils version: c2654d5206da6b7b6ace12841e8f359bb89b443c subpackages: diff --git a/glide.yaml b/glide.yaml index 9b310b5c0..ce61ce868 100644 --- a/glide.yaml +++ b/glide.yaml @@ -2,71 +2,49 @@ package: github.com/openshift/openshift-controller-manager import: # kube first - package: k8s.io/api - repo: https://github.com/openshift/kubernetes-api.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/apiextensions-apiserver - repo: https://github.com/openshift/kubernetes-apiextensions-apiserver.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/apimachinery - repo: https://github.com/openshift/kubernetes-apimachinery.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/apiserver - repo: https://github.com/openshift/kubernetes-apiserver.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/client-go - repo: https://github.com/openshift/kubernetes-client-go.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/cli-runtime - repo: https://github.com/openshift/kubernetes-cli-runtime.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/cloud-provider - repo: https://github.com/openshift/kubernetes-cloud-provider.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/cluster-bootstrap - repo: https://github.com/openshift/kubernetes-cluster-bootstrap.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/code-generator - repo: https://github.com/openshift/kubernetes-code-generator.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/component-base - repo: https://github.com/openshift/kubernetes-component-base.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/csi-api - repo: https://github.com/openshift/kubernetes-csi-api.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/csi-translation-lib - repo: https://github.com/openshift/kubernetes-csi-translation-lib.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/kube-aggregator - repo: https://github.com/openshift/kubernetes-kube-aggregator.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/kube-controller-manager - repo: https://github.com/openshift/kubernetes-kube-controller-manager.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/kubelet - repo: https://github.com/openshift/kubernetes-kubelet.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/kube-proxy - repo: https://github.com/openshift/kubernetes-kube-proxy.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/kube-scheduler - repo: https://github.com/openshift/kubernetes-kube-scheduler.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/metrics - repo: https://github.com/openshift/kubernetes-metrics.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/sample-apiserver - repo: https://github.com/openshift/kubernetes-sample-apiserver.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/sample-cli-plugin - repo: https://github.com/openshift/kubernetes-sample-cli-plugin.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/sample-controller - repo: https://github.com/openshift/kubernetes-sample-controller.git - version: origin-4.2-kubernetes-1.14.0 + version: kubernetes-1.14.0 - package: k8s.io/kubernetes - repo: https://github.com/openshift/kubernetes.git - version: origin-4.2-kubernetes-1.14.0 + version: v1.14.0 # this matches the 1.14 branch from kube - package: k8s.io/gengo version: 51747d6e00da1fc578d5a333a93bb2abcbce7a95 diff --git a/pkg/cmd/openshift-controller-manager/cmd.go b/pkg/cmd/openshift-controller-manager/cmd.go index aff04e15b..f9c600e8a 100644 --- a/pkg/cmd/openshift-controller-manager/cmd.go +++ b/pkg/cmd/openshift-controller-manager/cmd.go @@ -15,7 +15,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/serializer" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd/api" "k8s.io/klog" kcmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -45,7 +44,6 @@ func NewOpenShiftControllerManagerCommand(name string, out, errout io.Writer) *c Short: "Start the OpenShift controllers", Long: longDescription, Run: func(c *cobra.Command, args []string) { - rest.CommandNameOverride = name kcmdutil.CheckErr(options.Validate()) serviceability.StartProfiler() diff --git a/vendor/github.com/openshift/api/config/v1/types_infrastructure.go b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go index 314dd83ba..4632e6ada 100644 --- a/vendor/github.com/openshift/api/config/v1/types_infrastructure.go +++ b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go @@ -126,6 +126,10 @@ type PlatformStatus struct { // BareMetal contains settings specific to the BareMetal platform. // +optional BareMetal *BareMetalPlatformStatus `json:"baremetal,omitempty"` + + // OpenStack contains settings specific to the OpenStack infrastructure provider. + // +optional + OpenStack *OpenStackPlatformStatus `json:"openstack,omitempty"` } // AWSPlatformStatus holds the current status of the Amazon Web Services infrastructure provider. @@ -170,6 +174,31 @@ type BareMetalPlatformStatus struct { NodeDNSIP string `json:"nodeDNSIP,omitempty"` } +// OpenStackPlatformStatus holds the current status of the OpenStack infrastructure provider. +type OpenStackPlatformStatus struct { + // apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used + // by components inside the cluster, like kubelets using the infrastructure rather + // than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI + // points to. It is the IP for a self-hosted load balancer in front of the API servers. + APIServerInternalIP string `json:"apiServerInternalIP,omitempty"` + + // cloudName is the name of the desired OpenStack cloud in the + // client configuration file (`clouds.yaml`). + CloudName string `json:"cloudName,omitempty"` + + // ingressIP is an external IP which routes to the default ingress controller. + // The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + IngressIP string `json:"ingressIP,omitempty"` + + // nodeDNSIP is the IP address for the internal DNS used by the + // nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` + // provides name resolution for the nodes themselves. There is no DNS-as-a-service for + // OpenStack deployments. In order to minimize necessary changes to the + // datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames + // to the nodes in the cluster. + NodeDNSIP string `json:"nodeDNSIP,omitempty"` +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // InfrastructureList is diff --git a/vendor/github.com/openshift/api/config/v1/types_project.go b/vendor/github.com/openshift/api/config/v1/types_project.go index 72203d983..61152a6f7 100644 --- a/vendor/github.com/openshift/api/config/v1/types_project.go +++ b/vendor/github.com/openshift/api/config/v1/types_project.go @@ -31,6 +31,7 @@ type TemplateReference struct { // ProjectSpec holds the project creation configuration. type ProjectSpec struct { // projectRequestMessage is the string presented to a user if they are unable to request a project via the projectrequest api endpoint + // +optional ProjectRequestMessage string `json:"projectRequestMessage"` // projectRequestTemplate is the template to use for creating projects in response to projectrequest. diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go index 764c1efe5..37fdaf9f9 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go @@ -2433,6 +2433,22 @@ func (in *OpenIDIdentityProvider) DeepCopy() *OpenIDIdentityProvider { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OpenStackPlatformStatus) DeepCopyInto(out *OpenStackPlatformStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackPlatformStatus. +func (in *OpenStackPlatformStatus) DeepCopy() *OpenStackPlatformStatus { + if in == nil { + return nil + } + out := new(OpenStackPlatformStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OperandVersion) DeepCopyInto(out *OperandVersion) { *out = *in @@ -2472,6 +2488,11 @@ func (in *PlatformStatus) DeepCopyInto(out *PlatformStatus) { *out = new(BareMetalPlatformStatus) **out = **in } + if in.OpenStack != nil { + in, out := &in.OpenStack, &out.OpenStack + *out = new(OpenStackPlatformStatus) + **out = **in + } return } diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go index 8f144e719..3b33820d3 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go @@ -801,6 +801,18 @@ func (InfrastructureStatus) SwaggerDoc() map[string]string { return map_InfrastructureStatus } +var map_OpenStackPlatformStatus = map[string]string{ + "": "OpenStackPlatformStatus holds the current status of the OpenStack infrastructure provider.", + "apiServerInternalIP": "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers.", + "cloudName": "cloudName is the name of the desired OpenStack cloud in the client configuration file (`clouds.yaml`).", + "ingressIP": "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names.", + "nodeDNSIP": "nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for OpenStack deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster.", +} + +func (OpenStackPlatformStatus) SwaggerDoc() map[string]string { + return map_OpenStackPlatformStatus +} + var map_PlatformStatus = map[string]string{ "": "PlatformStatus holds the current status specific to the underlying infrastructure provider of the current cluster. Since these are used at status-level for the underlying cluster, it is supposed that only one of the status structs is set.", "type": "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform.", @@ -808,6 +820,7 @@ var map_PlatformStatus = map[string]string{ "azure": "Azure contains settings specific to the Azure infrastructure provider.", "gcp": "GCP contains settings specific to the Google Cloud Platform infrastructure provider.", "baremetal": "BareMetal contains settings specific to the BareMetal platform.", + "openstack": "OpenStack contains settings specific to the OpenStack infrastructure provider.", } func (PlatformStatus) SwaggerDoc() map[string]string { diff --git a/vendor/github.com/openshift/api/console/v1/register.go b/vendor/github.com/openshift/api/console/v1/register.go index 383c89613..7b6e1e0b6 100644 --- a/vendor/github.com/openshift/api/console/v1/register.go +++ b/vendor/github.com/openshift/api/console/v1/register.go @@ -34,6 +34,7 @@ func addKnownTypes(scheme *runtime.Scheme) error { &ConsoleLink{}, &ConsoleCLIDownload{}, &ConsoleNotification{}, + &ConsoleExternalLogLink{}, ) metav1.AddToGroupVersion(scheme, GroupVersion) return nil diff --git a/vendor/github.com/openshift/api/console/v1/types_console_external_log_links.go b/vendor/github.com/openshift/api/console/v1/types_console_external_log_links.go new file mode 100644 index 000000000..b6a1033d2 --- /dev/null +++ b/vendor/github.com/openshift/api/console/v1/types_console_external_log_links.go @@ -0,0 +1,43 @@ +package v1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ConsoleExternalLogLink is an extension for customizing OpenShift web console log links. +type ConsoleExternalLogLink struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + metav1.ObjectMeta `json:"metadata,omitempty"` + Spec ConsoleExternalLogLinkSpec `json:"spec"` +} + +// ConsoleExternalLogLinkSpec is the desired log link configuration. +// The log link will appear on the logs tab of the pod details page. +type ConsoleExternalLogLinkSpec struct { + // text is the display text for the link + Text string `json:"text"` + // hrefTemplate is an absolute secure URL (must use https) for the log link including + // variables to be replaced. Variables are specified in the URL with the format ${variableName}, + // for instance, ${containerName} and will be replaced with the corresponding values + // from the resource. Resource is a pod. + // Supported variables are: + // - ${resourceName} - name of the resource which containes the logs + // - ${resourceUID} - UID of the resource which contains the logs + // - e.g. `11111111-2222-3333-4444-555555555555` + // - ${containerName} - name of the resource's container that contains the logs + // - ${resourceNamespace} - namespace of the resource that contains the logs + // - ${podLabels} - JSON representation of labels matching the pod with the logs + // - e.g. `{"key1":"value1","key2":"value2"}` + // + // e.g., https://example.com/logs?resourceName=${resourceName}&containerName=${containerName}&resourceNamespace=${resourceNamespace}&podLabels=${podLabels} + HrefTemplate string `json:"hrefTemplate"` + // namespaceFilter is a regular expression used to restrict a log link to a + // matching set of namespaces (e.g., `^openshift-`). The string is converted + // into a regular expression using the JavaScript RegExp constructor. + // If not specified, links will be displayed for all the namespaces. + // + optional + NamespaceFilter string `json:"namespaceFilter,omitempty"` +} diff --git a/vendor/github.com/openshift/api/console/v1/types_console_link.go b/vendor/github.com/openshift/api/console/v1/types_console_link.go index ac878d023..40f9262f3 100644 --- a/vendor/github.com/openshift/api/console/v1/types_console_link.go +++ b/vendor/github.com/openshift/api/console/v1/types_console_link.go @@ -32,7 +32,8 @@ type ApplicationMenuSpec struct { Section string `json:"section"` // imageUrl is the URL for the icon used in front of the link in the application menu. // The URL must be an HTTPS URL or a Data URI. The image should be square and will be shown at 24x24 pixels. - ImageURL string `json:"imageURL"` + // +optional + ImageURL string `json:"imageURL,omitempty"` } // ConsoleLinkLocationSelector is a set of possible menu targets to which a link may be appended. diff --git a/vendor/github.com/openshift/api/console/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/console/v1/zz_generated.deepcopy.go index 626543222..d61cfcd55 100644 --- a/vendor/github.com/openshift/api/console/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/console/v1/zz_generated.deepcopy.go @@ -105,6 +105,49 @@ func (in *ConsoleCLIDownloadSpec) DeepCopy() *ConsoleCLIDownloadSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleExternalLogLink) DeepCopyInto(out *ConsoleExternalLogLink) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleExternalLogLink. +func (in *ConsoleExternalLogLink) DeepCopy() *ConsoleExternalLogLink { + if in == nil { + return nil + } + out := new(ConsoleExternalLogLink) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ConsoleExternalLogLink) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ConsoleExternalLogLinkSpec) DeepCopyInto(out *ConsoleExternalLogLinkSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConsoleExternalLogLinkSpec. +func (in *ConsoleExternalLogLinkSpec) DeepCopy() *ConsoleExternalLogLinkSpec { + if in == nil { + return nil + } + out := new(ConsoleExternalLogLinkSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ConsoleLink) DeepCopyInto(out *ConsoleLink) { *out = *in diff --git a/vendor/github.com/openshift/api/console/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/console/v1/zz_generated.swagger_doc_generated.go index 996137af0..3e65772c7 100644 --- a/vendor/github.com/openshift/api/console/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/console/v1/zz_generated.swagger_doc_generated.go @@ -49,6 +49,26 @@ func (ConsoleCLIDownloadSpec) SwaggerDoc() map[string]string { return map_ConsoleCLIDownloadSpec } +var map_ConsoleExternalLogLink = map[string]string{ + "": "ConsoleExternalLogLink is an extension for customizing OpenShift web console log links.", + "metadata": "Standard object's metadata.", +} + +func (ConsoleExternalLogLink) SwaggerDoc() map[string]string { + return map_ConsoleExternalLogLink +} + +var map_ConsoleExternalLogLinkSpec = map[string]string{ + "": "ConsoleExternalLogLinkSpec is the desired log link configuration. The log link will appear on the logs tab of the pod details page.", + "text": "text is the display text for the link", + "hrefTemplate": "hrefTemplate is an absolute secure URL (must use https) for the log link including variables to be replaced. Variables are specified in the URL with the format ${variableName}, for instance, ${containerName} and will be replaced with the corresponding values from the resource. Resource is a pod. Supported variables are: - ${resourceName} - name of the resource which containes the logs - ${resourceUID} - UID of the resource which contains the logs\n - e.g. `11111111-2222-3333-4444-555555555555`\n- ${containerName} - name of the resource's container that contains the logs - ${resourceNamespace} - namespace of the resource that contains the logs - ${podLabels} - JSON representation of labels matching the pod with the logs\n - e.g. `{\"key1\":\"value1\",\"key2\":\"value2\"}`\n\ne.g., https://example.com/logs?resourceName=${resourceName}&containerName=${containerName}&resourceNamespace=${resourceNamespace}&podLabels=${podLabels}", + "namespaceFilter": "namespaceFilter is a regular expression used to restrict a log link to a matching set of namespaces (e.g., `^openshift-`). The string is converted into a regular expression using the JavaScript RegExp constructor. If not specified, links will be displayed for all the namespaces.", +} + +func (ConsoleExternalLogLinkSpec) SwaggerDoc() map[string]string { + return map_ConsoleExternalLogLinkSpec +} + var map_ApplicationMenuSpec = map[string]string{ "": "ApplicationMenuSpec is the specification of the desired section and icon used for the link in the application menu.", "section": "section is the section of the application menu in which the link should appear.", diff --git a/vendor/github.com/openshift/api/operator/v1/types_network.go b/vendor/github.com/openshift/api/operator/v1/types_network.go index b01127bd2..cdc3fd0f9 100644 --- a/vendor/github.com/openshift/api/operator/v1/types_network.go +++ b/vendor/github.com/openshift/api/operator/v1/types_network.go @@ -221,6 +221,10 @@ type OpenShiftSDNConfig struct { // it will be provided separately. If set, you must provide it yourself. // +optional UseExternalOpenvswitch *bool `json:"useExternalOpenvswitch,omitempty"` + + // enableUnidling controls whether or not the service proxy will support idling + // and unidling of services. By default, unidling is enabled. + EnableUnidling *bool `json:"enableUnidling,omitempty"` } // KuryrConfig configures the Kuryr-Kubernetes SDN diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go index 23b8c53af..78b3f926d 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.deepcopy.go @@ -1507,6 +1507,11 @@ func (in *OpenShiftSDNConfig) DeepCopyInto(out *OpenShiftSDNConfig) { *out = new(bool) **out = **in } + if in.EnableUnidling != nil { + in, out := &in.EnableUnidling, &out.EnableUnidling + *out = new(bool) + **out = **in + } return } diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go index 723d83962..feee6b548 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go @@ -464,6 +464,7 @@ var map_OpenShiftSDNConfig = map[string]string{ "vxlanPort": "vxlanPort is the port to use for all vxlan packets. The default is 4789.", "mtu": "mtu is the mtu to use for the tunnel interface. Defaults to 1450 if unset. This must be 50 bytes smaller than the machine's uplink.", "useExternalOpenvswitch": "useExternalOpenvswitch tells the operator not to install openvswitch, because it will be provided separately. If set, you must provide it yourself.", + "enableUnidling": "enableUnidling controls whether or not the service proxy will support idling and unidling of services. By default, unidling is enabled.", } func (OpenShiftSDNConfig) SwaggerDoc() map[string]string { diff --git a/vendor/github.com/openshift/api/operator/v1alpha1/types_image_content_source_policy.go b/vendor/github.com/openshift/api/operator/v1alpha1/types_image_content_source_policy.go index 26eeef841..db5ec6ab1 100644 --- a/vendor/github.com/openshift/api/operator/v1alpha1/types_image_content_source_policy.go +++ b/vendor/github.com/openshift/api/operator/v1alpha1/types_image_content_source_policy.go @@ -7,7 +7,7 @@ import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // ImageContentSourcePolicy holds cluster-wide information about how to handle registry mirror rules. -// When multple policies are defined, the outcome of the behavior is defined on each field. +// When multiple policies are defined, the outcome of the behavior is defined on each field. type ImageContentSourcePolicy struct { metav1.TypeMeta `json:",inline"` // Standard object's metadata. @@ -24,14 +24,19 @@ type ImageContentSourcePolicySpec struct { // repositoryDigestMirrors allows images referenced by image digests in pods to be // pulled from alternative mirrored repository locations. The image pull specification // provided to the pod will be compared to the source locations described in RepositoryDigestMirrors - // and the image may be pulled down from any of the repositories in the list instead of the + // and the image may be pulled down from any of the mirrors in the list instead of the // specified repository allowing administrators to choose a potentially faster mirror. // Only image pull specifications that have an image disgest will have this behavior applied // to them - tags will continue to be pulled from the specified repository in the pull spec. - // When multiple policies are defined, any overlaps found will be merged together when the mirror - // rules are written to `/etc/containers/registries.conf`. For example, if policy A has sources `a, b, c` - // and policy B has sources `c, d, e`. Then the mirror rule written to `registries.conf` will be `a, b, c, d, e` - // where the duplicate `c` is removed. + // + // Each “source” repository is treated independently; configurations for different “source” + // repositories don’t interact. + // + // When multiple policies are defined for the same “source” repository, the sets of defined + // mirrors will be merged together, preserving the relative order of the mirrors, if possible. + // For example, if policy A has mirrors `a, b, c` and policy B has mirrors `c, d, e`, the + // mirrors will be used in the order `a, b, c, d, e`. If the orders of mirror entries conflict + // (e.g. `a, b` vs. `b, a`) the configuration is not rejected but the resulting order is unspecified. // +optional RepositoryDigestMirrors []RepositoryDigestMirrors `json:"repositoryDigestMirrors"` } @@ -47,9 +52,17 @@ type ImageContentSourcePolicyList struct { } // RepositoryDigestMirrors holds cluster-wide information about how to handle mirros in the registries config. -// Note: the mirrors only work when pulling the images that are reference by their digests. +// Note: the mirrors only work when pulling the images that are referenced by their digests. type RepositoryDigestMirrors struct { - // sources are repositories that are mirrors of each other. + // source is the repository that users refer to, e.g. in image pull specifications. + // +required + Source string `json:"source"` + // mirrors is one or more repositories that may also contain the same images. + // The order of mirrors in this list is treated as the user's desired priority, while source + // is by default considered lower priority than all mirrors. Other cluster configuration, + // including (but not limited to) other repositoryDigestMirrors objects, + // may impact the exact order mirrors are contacted in, or some mirrors may be contacted + // in parallel, so this should be considered a preference rather than a guarantee of ordering. // +optional - Sources []string `json:"sources,omitempty"` + Mirrors []string `json:"mirrors"` } diff --git a/vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.deepcopy.go index 36a17cff8..8a1bc1d2f 100644 --- a/vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.deepcopy.go @@ -275,8 +275,8 @@ func (in *OperatorStatus) DeepCopy() *OperatorStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RepositoryDigestMirrors) DeepCopyInto(out *RepositoryDigestMirrors) { *out = *in - if in.Sources != nil { - in, out := &in.Sources, &out.Sources + if in.Mirrors != nil { + in, out := &in.Mirrors, &out.Mirrors *out = make([]string, len(*in)) copy(*out, *in) } diff --git a/vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.swagger_doc_generated.go index fc80a126b..84d04215c 100644 --- a/vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/operator/v1alpha1/zz_generated.swagger_doc_generated.go @@ -136,7 +136,7 @@ func (VersionAvailability) SwaggerDoc() map[string]string { } var map_ImageContentSourcePolicy = map[string]string{ - "": "ImageContentSourcePolicy holds cluster-wide information about how to handle registry mirror rules. When multple policies are defined, the outcome of the behavior is defined on each field.", + "": "ImageContentSourcePolicy holds cluster-wide information about how to handle registry mirror rules. When multiple policies are defined, the outcome of the behavior is defined on each field.", "metadata": "Standard object's metadata.", "spec": "spec holds user settable values for configuration", } @@ -156,7 +156,7 @@ func (ImageContentSourcePolicyList) SwaggerDoc() map[string]string { var map_ImageContentSourcePolicySpec = map[string]string{ "": "ImageContentSourcePolicySpec is the specification of the ImageContentSourcePolicy CRD.", - "repositoryDigestMirrors": "repositoryDigestMirrors allows images referenced by image digests in pods to be pulled from alternative mirrored repository locations. The image pull specification provided to the pod will be compared to the source locations described in RepositoryDigestMirrors and the image may be pulled down from any of the repositories in the list instead of the specified repository allowing administrators to choose a potentially faster mirror. Only image pull specifications that have an image disgest will have this behavior applied to them - tags will continue to be pulled from the specified repository in the pull spec. When multiple policies are defined, any overlaps found will be merged together when the mirror rules are written to `/etc/containers/registries.conf`. For example, if policy A has sources `a, b, c` and policy B has sources `c, d, e`. Then the mirror rule written to `registries.conf` will be `a, b, c, d, e` where the duplicate `c` is removed.", + "repositoryDigestMirrors": "repositoryDigestMirrors allows images referenced by image digests in pods to be pulled from alternative mirrored repository locations. The image pull specification provided to the pod will be compared to the source locations described in RepositoryDigestMirrors and the image may be pulled down from any of the mirrors in the list instead of the specified repository allowing administrators to choose a potentially faster mirror. Only image pull specifications that have an image disgest will have this behavior applied to them - tags will continue to be pulled from the specified repository in the pull spec.\n\nEach “source” repository is treated independently; configurations for different “source” repositories don’t interact.\n\nWhen multiple policies are defined for the same “source” repository, the sets of defined mirrors will be merged together, preserving the relative order of the mirrors, if possible. For example, if policy A has mirrors `a, b, c` and policy B has mirrors `c, d, e`, the mirrors will be used in the order `a, b, c, d, e`. If the orders of mirror entries conflict (e.g. `a, b` vs. `b, a`) the configuration is not rejected but the resulting order is unspecified.", } func (ImageContentSourcePolicySpec) SwaggerDoc() map[string]string { @@ -164,8 +164,9 @@ func (ImageContentSourcePolicySpec) SwaggerDoc() map[string]string { } var map_RepositoryDigestMirrors = map[string]string{ - "": "RepositoryDigestMirrors holds cluster-wide information about how to handle mirros in the registries config. Note: the mirrors only work when pulling the images that are reference by their digests.", - "sources": "sources are repositories that are mirrors of each other.", + "": "RepositoryDigestMirrors holds cluster-wide information about how to handle mirros in the registries config. Note: the mirrors only work when pulling the images that are referenced by their digests.", + "source": "source is the repository that users refer to, e.g. in image pull specifications.", + "mirrors": "mirrors is one or more repositories that may also contain the same images. The order of mirrors in this list is treated as the user's desired priority, while source is by default considered lower priority than all mirrors. Other cluster configuration, including (but not limited to) other repositoryDigestMirrors objects, may impact the exact order mirrors are contacted in, or some mirrors may be contacted in parallel, so this should be considered a preference rather than a guarantee of ordering.", } func (RepositoryDigestMirrors) SwaggerDoc() map[string]string { diff --git a/vendor/github.com/openshift/client-go/glide.lock b/vendor/github.com/openshift/client-go/glide.lock index ba9a44800..b3739d131 100644 --- a/vendor/github.com/openshift/client-go/glide.lock +++ b/vendor/github.com/openshift/client-go/glide.lock @@ -1,5 +1,5 @@ hash: 595563cffda70c75833adcf07415011d115db7218cbbddc4c14f1684ad39638a -updated: 2019-06-27T10:15:52.43135905-04:00 +updated: 2019-07-20T21:53:33.024857-04:00 imports: - name: github.com/davecgh/go-spew version: 782f4967f2dc4564575ca782fe2d04090b5faca8 @@ -41,7 +41,7 @@ imports: - name: github.com/modern-go/reflect2 version: 94122c33edd36123c84d5368cfb2b69df93a0ec8 - name: github.com/openshift/api - version: de5ca909c7322bb8d06fa5a9e5604491b373da52 + version: 9525304a0adb725ab4a4a54539a1a6bf6cc343d3 subpackages: - apps/v1 - authorization/v1 diff --git a/vendor/github.com/openshift/library-go/pkg/operator/render/options/config.go b/vendor/github.com/openshift/library-go/pkg/operator/render/options/config.go index ef3ea461a..019b61ce4 100644 --- a/vendor/github.com/openshift/library-go/pkg/operator/render/options/config.go +++ b/vendor/github.com/openshift/library-go/pkg/operator/render/options/config.go @@ -20,6 +20,9 @@ type ManifestConfig struct { // Image is the pull spec of the image to use for the controller manager. Image string + // OperatorImage is the pull spec of the image to use for the operator (optional). + OperatorImage string + // ImagePullPolicy specifies the image pull policy to use for the images. ImagePullPolicy string } diff --git a/vendor/github.com/openshift/library-go/pkg/operator/render/options/manifest.go b/vendor/github.com/openshift/library-go/pkg/operator/render/options/manifest.go index e893edfaf..7c58c648b 100644 --- a/vendor/github.com/openshift/library-go/pkg/operator/render/options/manifest.go +++ b/vendor/github.com/openshift/library-go/pkg/operator/render/options/manifest.go @@ -10,7 +10,7 @@ import ( // ManifestOptions contains the values that influence manifest contents. type ManifestOptions struct { Namespace string - Image string + Image, OperatorImage string ImagePullPolicy string ConfigHostPath string ConfigFileName string @@ -37,6 +37,8 @@ func (o *ManifestOptions) AddFlags(fs *pflag.FlagSet, humanReadableComponentName fmt.Sprintf("Target namespace for phase 3 %s pods.", humanReadableComponentName)) fs.StringVar(&o.Image, "manifest-image", o.Image, fmt.Sprintf("Image to use for the %s.", humanReadableComponentName)) + fs.StringVar(&o.OperatorImage, "manifest-operator-image", o.OperatorImage, + fmt.Sprintf("Operator image to use for the %s.", humanReadableComponentName)) fs.StringVar(&o.ImagePullPolicy, "manifest-image-pull-policy", o.ImagePullPolicy, fmt.Sprintf("Image pull policy to use for the %s.", humanReadableComponentName)) fs.StringVar(&o.ConfigHostPath, "manifest-config-host-path", o.ConfigHostPath, @@ -85,6 +87,7 @@ func (o *ManifestOptions) Validate() error { func (o *ManifestOptions) ApplyTo(cfg *ManifestConfig) error { cfg.Namespace = o.Namespace cfg.Image = o.Image + cfg.OperatorImage = o.OperatorImage cfg.ImagePullPolicy = o.ImagePullPolicy cfg.ConfigHostPath = o.ConfigHostPath cfg.ConfigFileName = o.ConfigFileName diff --git a/vendor/k8s.io/api/core/v1/generated.proto b/vendor/k8s.io/api/core/v1/generated.proto index 4ea31646c..b9d569f5f 100644 --- a/vendor/k8s.io/api/core/v1/generated.proto +++ b/vendor/k8s.io/api/core/v1/generated.proto @@ -2126,9 +2126,6 @@ message NodeStatus { // List of addresses reachable to the node. // Queried from cloud provider, if available. // More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses - // Note: This field is declared as mergeable, but the merge key is not sufficiently - // unique, which can cause data corruption when it is merged. Callers should instead - // use a full-replacement patch. See http://pr.k8s.io/79391 for an example. // +optional // +patchMergeKey=type // +patchStrategy=merge diff --git a/vendor/k8s.io/api/core/v1/types.go b/vendor/k8s.io/api/core/v1/types.go index a390410b3..3af134400 100644 --- a/vendor/k8s.io/api/core/v1/types.go +++ b/vendor/k8s.io/api/core/v1/types.go @@ -4041,9 +4041,6 @@ type NodeStatus struct { // List of addresses reachable to the node. // Queried from cloud provider, if available. // More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses - // Note: This field is declared as mergeable, but the merge key is not sufficiently - // unique, which can cause data corruption when it is merged. Callers should instead - // use a full-replacement patch. See http://pr.k8s.io/79391 for an example. // +optional // +patchMergeKey=type // +patchStrategy=merge diff --git a/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go index abef2c7d0..2c5b04f29 100644 --- a/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -1128,7 +1128,7 @@ var map_NodeStatus = map[string]string{ "allocatable": "Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.", "phase": "NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.", "conditions": "Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition", - "addresses": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses Note: This field is declared as mergeable, but the merge key is not sufficiently unique, which can cause data corruption when it is merged. Callers should instead use a full-replacement patch. See http://pr.k8s.io/79391 for an example.", + "addresses": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses", "daemonEndpoints": "Endpoints of daemons running on the Node.", "nodeInfo": "Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info", "images": "List of container images on this node", diff --git a/vendor/k8s.io/api/extensions/v1beta1/types.go b/vendor/k8s.io/api/extensions/v1beta1/types.go index 562d7742a..c34ea599d 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/types.go +++ b/vendor/k8s.io/api/extensions/v1beta1/types.go @@ -1186,7 +1186,6 @@ type PodSecurityPolicyList struct { Items []PodSecurityPolicy `json:"items" protobuf:"bytes,2,rep,name=items"` } -// +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. diff --git a/vendor/k8s.io/apiextensions-apiserver/hack/openapi-violation.list b/vendor/k8s.io/apiextensions-apiserver/hack/openapi-violation.list deleted file mode 100644 index c211037ba..000000000 --- a/vendor/k8s.io/apiextensions-apiserver/hack/openapi-violation.list +++ /dev/null @@ -1,7 +0,0 @@ -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,APIResourceList,APIResources -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,Duration,Duration -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,InternalEvent,Object -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,InternalEvent,Type -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,MicroTime,Time -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,StatusCause,Type -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,Time,Time diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go index 28b5741df..a223d41ac 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go @@ -19,7 +19,6 @@ package apiserver import ( "fmt" "net/http" - "strings" "time" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" @@ -37,11 +36,9 @@ import ( apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features" "k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" - "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/version" "k8s.io/apiserver/pkg/endpoints/discovery" @@ -51,7 +48,6 @@ import ( serverstorage "k8s.io/apiserver/pkg/server/storage" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/apiserver/pkg/util/webhook" - "k8s.io/klog" ) var ( @@ -191,7 +187,6 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) c.ExtraConfig.AuthResolverWrapper, c.ExtraConfig.MasterCount, s.GenericAPIServer.Authorizer, - c.GenericConfig.RequestTimeout, ) if err != nil { return nil, err @@ -226,58 +221,6 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) go finalizingController.Run(5, context.StopCh) return nil }) - s.GenericAPIServer.AddPostStartHookOrDie("crd-discovery-available", func(context genericapiserver.PostStartHookContext) error { - if true { - return nil - } - return wait.PollImmediateUntil(100*time.Millisecond, func() (bool, error) { - // only check if we have a valid list for a given resourceversion - if !s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions().Informer().HasSynced() { - return false, nil - } - - // The returned group and resource lists might be non-nil with partial results even in the - // case of non-nil error. If API aggregation fails, we still want our other discovery information because the CRDs - // may all be present. - _, serverGroupsAndResources, discoveryErr := crdClient.Discovery().ServerGroupsAndResources() - if discoveryErr != nil { - klog.V(2).Info(discoveryErr) - } - - serverCRDs, err := s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions().Lister().List(labels.Everything()) - if err != nil { - return false, err - } - crdGroupsAndResources := sets.NewString() - for _, crd := range serverCRDs { - // Skip not active CRD - if !apiextensions.IsCRDConditionTrue(crd, apiextensions.Established) { - continue - } - for _, version := range crd.Spec.Versions { - // Skip versions that are not served - if !version.Served { - continue - } - crdGroupsAndResources.Insert(fmt.Sprintf("%s.%s.%s", crd.Spec.Names.Plural, version.Name, crd.Spec.Group)) - } - } - - discoveryGroupsAndResources := sets.NewString() - for _, resourceList := range serverGroupsAndResources { - for _, apiResource := range resourceList.APIResources { - group, version := splitGroupVersion(resourceList.GroupVersion) - discoveryGroupsAndResources.Insert(fmt.Sprintf("%s.%s.%s", apiResource.Name, version, group)) - } - } - if !discoveryGroupsAndResources.HasAll(crdGroupsAndResources.List()...) { - klog.Infof("waiting for CRD resources in discovery: %#v", crdGroupsAndResources.Difference(discoveryGroupsAndResources)) - return false, nil - } - return true, nil - }, context.StopCh) - }) - // we don't want to report healthy until we can handle all CRDs that have already been registered. Waiting for the informer // to sync makes sure that the lister will be valid before we begin. There may still be races for CRDs added after startup, // but we won't go healthy until we can handle the ones already present. @@ -290,16 +233,6 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) return s, nil } -func splitGroupVersion(gv string) (group string, version string) { - ss := strings.SplitN(gv, "/", 2) - if len(ss) == 1 { - version = ss[0] - } else { - group, version = ss[0], ss[1] - } - return -} - func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig { ret := serverstorage.NewResourceConfig() // NOTE: GroupVersions listed here will be enabled by default. Don't put alpha versions in the list. diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go index df66dbf90..c5c9a7322 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go @@ -52,8 +52,6 @@ import ( "k8s.io/apimachinery/pkg/runtime/serializer/versioning" "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/sets" - utilwaitgroup "k8s.io/apimachinery/pkg/util/waitgroup" "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/apiserver/pkg/endpoints/handlers" @@ -64,7 +62,6 @@ import ( "k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/registry/generic" genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" - genericfilters "k8s.io/apiserver/pkg/server/filters" "k8s.io/apiserver/pkg/storage/storagebackend" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/apiserver/pkg/util/webhook" @@ -103,9 +100,6 @@ type crdHandler struct { // so that we can do create on update. authorizer authorizer.Authorizer - - // request timeout we should delay storage teardown for - requestTimeout time.Duration } // crdInfo stores enough information to serve the storage for the custom resource @@ -129,8 +123,6 @@ type crdInfo struct { // storageVersion is the CRD version used when storing the object in etcd. storageVersion string - - waitGroup *utilwaitgroup.SafeWaitGroup } // crdStorageMap goes from customresourcedefinition to its storage @@ -147,8 +139,7 @@ func NewCustomResourceDefinitionHandler( serviceResolver webhook.ServiceResolver, authResolverWrapper webhook.AuthenticationInfoResolverWrapper, masterCount int, - authorizer authorizer.Authorizer, - requestTimeout time.Duration) (*crdHandler, error) { + authorizer authorizer.Authorizer) (*crdHandler, error) { ret := &crdHandler{ versionDiscoveryHandler: versionDiscoveryHandler, groupDiscoveryHandler: groupDiscoveryHandler, @@ -160,7 +151,6 @@ func NewCustomResourceDefinitionHandler( establishingController: establishingController, masterCount: masterCount, authorizer: authorizer, - requestTimeout: requestTimeout, } crdInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ UpdateFunc: ret.updateCustomResourceDefinition, @@ -179,11 +169,6 @@ func NewCustomResourceDefinitionHandler( return ret, nil } -// watches are expected to handle storage disruption gracefully, -// both on the server-side (by terminating the watch connection) -// and on the client side (by restarting the watch) -var longRunningFilter = genericfilters.BasicLongRunningRequestCheck(sets.NewString("watch"), sets.NewString()) - func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { ctx := req.Context() requestInfo, ok := apirequest.RequestInfoFrom(ctx) @@ -253,7 +238,7 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { supportedTypes = append(supportedTypes, string(types.ApplyPatchType)) } - var handlerFunc http.HandlerFunc + var handler http.HandlerFunc subresources, err := apiextensions.GetSubresourcesForVersion(crd, requestInfo.APIVersion) if err != nil { utilruntime.HandleError(err) @@ -262,19 +247,18 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { } switch { case subresource == "status" && subresources != nil && subresources.Status != nil: - handlerFunc = r.serveStatus(w, req, requestInfo, crdInfo, terminating, supportedTypes) + handler = r.serveStatus(w, req, requestInfo, crdInfo, terminating, supportedTypes) case subresource == "scale" && subresources != nil && subresources.Scale != nil: - handlerFunc = r.serveScale(w, req, requestInfo, crdInfo, terminating, supportedTypes) + handler = r.serveScale(w, req, requestInfo, crdInfo, terminating, supportedTypes) case len(subresource) == 0: - handlerFunc = r.serveResource(w, req, requestInfo, crdInfo, terminating, supportedTypes) + handler = r.serveResource(w, req, requestInfo, crdInfo, terminating, supportedTypes) default: http.Error(w, "the server could not find the requested resource", http.StatusNotFound) } - if handlerFunc != nil { - handlerFunc = metrics.InstrumentHandlerFunc(verb, requestInfo.APIGroup, requestInfo.APIVersion, resource, subresource, scope, metrics.APIServerComponent, handlerFunc) - handler := genericfilters.WithWaitGroup(handlerFunc, longRunningFilter, crdInfo.waitGroup) - handler.ServeHTTP(w, req) + if handler != nil { + handler = metrics.InstrumentHandlerFunc(verb, requestInfo.APIGroup, requestInfo.APIVersion, resource, subresource, scope, metrics.APIServerComponent, handler) + handler(w, req) return } } @@ -381,18 +365,18 @@ func (r *crdHandler) updateCustomResourceDefinition(oldObj, newObj interface{}) klog.V(4).Infof("Updating customresourcedefinition %s", oldCRD.Name) - if oldInfo, ok := storageMap[types.UID(oldCRD.UID)]; ok { - // Copy because we cannot write to storageMap without a race - // as it is used without locking elsewhere. - storageMap2 := storageMap.clone() - - // Remove from the CRD info map and store the map + // Copy because we cannot write to storageMap without a race + // as it is used without locking elsewhere. + storageMap2 := storageMap.clone() + if oldInfo, ok := storageMap2[types.UID(oldCRD.UID)]; ok { + for _, storage := range oldInfo.storages { + // destroy only the main storage. Those for the subresources share cacher and etcd clients. + storage.CustomResource.DestroyFunc() + } delete(storageMap2, types.UID(oldCRD.UID)) - r.customStorage.Store(storageMap2) - - // Tear down the old storage - go r.tearDown(oldInfo) } + + r.customStorage.Store(storageMap2) } // removeDeadStorage removes REST storage that isn't being used @@ -406,7 +390,6 @@ func (r *crdHandler) removeDeadStorage() { r.customStorageLock.Lock() defer r.customStorageLock.Unlock() - oldInfos := []*crdInfo{} storageMap := r.customStorage.Load().(crdStorageMap) // Copy because we cannot write to storageMap without a race // as it is used without locking elsewhere @@ -421,38 +404,14 @@ func (r *crdHandler) removeDeadStorage() { } if !found { klog.V(4).Infof("Removing dead CRD storage for %s/%s", s.spec.Group, s.spec.Names.Kind) - oldInfos = append(oldInfos, s) + for _, storage := range s.storages { + // destroy only the main storage. Those for the subresources share cacher and etcd clients. + storage.CustomResource.DestroyFunc() + } delete(storageMap2, uid) } } r.customStorage.Store(storageMap2) - - for _, s := range oldInfos { - go r.tearDown(s) - } -} - -// Wait up to a minute for requests to drain, then tear down storage -func (r *crdHandler) tearDown(oldInfo *crdInfo) { - requestsDrained := make(chan struct{}) - go func() { - defer close(requestsDrained) - // Allow time for in-flight requests with a handle to the old info to register themselves - time.Sleep(time.Second) - // Wait for in-flight requests to drain - oldInfo.waitGroup.Wait() - }() - - select { - case <-time.After(r.requestTimeout * 2): - klog.Warningf("timeout waiting for requests to drain for %s/%s, tearing down storage", oldInfo.spec.Group, oldInfo.spec.Names.Kind) - case <-requestsDrained: - } - - for _, storage := range oldInfo.storages { - // destroy only the main storage. Those for the subresources share cacher and etcd clients. - storage.CustomResource.DestroyFunc() - } } // GetCustomResourceListerCollectionDeleter returns the ListerCollectionDeleter of @@ -663,7 +622,6 @@ func (r *crdHandler) getOrCreateServingInfoFor(crd *apiextensions.CustomResource scaleRequestScopes: scaleScopes, statusRequestScopes: statusScopes, storageVersion: storageVersion, - waitGroup: &utilwaitgroup.SafeWaitGroup{}, } // Copy because we cannot write to storageMap without a race diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go b/vendor/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go index 4d5e9ed53..0e083f9c1 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go @@ -24,7 +24,6 @@ import ( "github.com/go-openapi/spec" "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/cache" @@ -90,29 +89,6 @@ func (c *Controller) Run(staticSpec *spec.Swagger, openAPIService *handler.OpenA return } - // create initial spec to avoid merging once per CRD on startup - crds, err := c.crdLister.List(labels.Everything()) - if err != nil { - utilruntime.HandleError(fmt.Errorf("failed to initially list all CRDs: %v", err)) - return - } - for _, crd := range crds { - if !apiextensions.IsCRDConditionTrue(crd, apiextensions.Established) { - continue - } - newSpecs, changed, err := buildVersionSpecs(crd, nil) - if err != nil { - utilruntime.HandleError(fmt.Errorf("failed to build OpenAPI spec of CRD %s: %v", crd.Name, err)) - } else if !changed { - continue - } - c.crdSpecs[crd.Name] = newSpecs - } - if err := c.updateSpecLocked(); err != nil { - utilruntime.HandleError(fmt.Errorf("failed to initially create OpenAPI spec for CRDs: %v", err)) - return - } - // only start one worker thread since its a slow moving API go wait.Until(c.runWorker, time.Second, stopCh) @@ -171,20 +147,6 @@ func (c *Controller) sync(name string) error { // compute CRD spec and see whether it changed oldSpecs := c.crdSpecs[crd.Name] - newSpecs, changed, err := buildVersionSpecs(crd, oldSpecs) - if err != nil { - return err - } - if !changed { - return nil - } - - // update specs of this CRD - c.crdSpecs[crd.Name] = newSpecs - return c.updateSpecLocked() -} - -func buildVersionSpecs(crd *apiextensions.CustomResourceDefinition, oldSpecs map[string]*spec.Swagger) (map[string]*spec.Swagger, bool, error) { newSpecs := map[string]*spec.Swagger{} anyChanged := false for _, v := range crd.Spec.Versions { @@ -193,7 +155,7 @@ func buildVersionSpecs(crd *apiextensions.CustomResourceDefinition, oldSpecs map } spec, err := BuildSwagger(crd, v.Name) if err != nil { - return nil, false, err + return err } newSpecs[v.Name] = spec if oldSpecs[v.Name] == nil || !reflect.DeepEqual(oldSpecs[v.Name], spec) { @@ -201,10 +163,12 @@ func buildVersionSpecs(crd *apiextensions.CustomResourceDefinition, oldSpecs map } } if !anyChanged && len(oldSpecs) == len(newSpecs) { - return newSpecs, false, nil + return nil } - return newSpecs, true, nil + // update specs of this CRD + c.crdSpecs[crd.Name] = newSpecs + return c.updateSpecLocked() } // updateSpecLocked aggregates all OpenAPI specs and updates openAPIService. diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion.go b/vendor/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion.go index 91342c881..743fa196a 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion.go @@ -33,10 +33,9 @@ func ConvertJSONSchemaPropsToOpenAPIv2Schema(in *apiextensions.JSONSchemaProps) } // dirty hack to temporarily set the type at the root. See continuation at the func bottom. + // TODO: remove for Kubernetes 1.15 oldRootType := in.Type if len(in.Type) == 0 { - shallowClone := *in - in = &shallowClone in.Type = "object" } @@ -112,6 +111,9 @@ func ConvertJSONSchemaPropsToOpenAPIv2Schema(in *apiextensions.JSONSchemaProps) return nil }) + // restore root level type in input, and remove it in output if we had added it + // TODO: remove with Kubernetes 1.15 + in.Type = oldRootType if len(oldRootType) == 0 { out.Type = nil } diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go b/vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go index adf8c24c1..f2b745373 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go @@ -65,5 +65,5 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS CustomResourceValidation: {Default: true, PreRelease: utilfeature.Beta}, CustomResourceSubresources: {Default: true, PreRelease: utilfeature.Beta}, CustomResourceWebhookConversion: {Default: false, PreRelease: utilfeature.Alpha}, - CustomResourcePublishOpenAPI: {Default: true, PreRelease: utilfeature.Alpha}, + CustomResourcePublishOpenAPI: {Default: false, PreRelease: utilfeature.Alpha}, } diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go b/vendor/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go index 42aa2a6cb..829640d3f 100644 --- a/vendor/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go @@ -1,4 +1,4 @@ -// +build !ignore_autogenerated_openshift +// +build !ignore_autogenerated /* Copyright The Kubernetes Authors. diff --git a/vendor/k8s.io/apiextensions-apiserver/test/integration/change_test.go b/vendor/k8s.io/apiextensions-apiserver/test/integration/change_test.go deleted file mode 100644 index 831db12ba..000000000 --- a/vendor/k8s.io/apiextensions-apiserver/test/integration/change_test.go +++ /dev/null @@ -1,162 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package integration - -import ( - "fmt" - "sync" - "testing" - "time" - - apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/test/integration/fixtures" - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/dynamic" -) - -func TestChangeCRD(t *testing.T) { - tearDown, config, _, err := fixtures.StartDefaultServer(t) - if err != nil { - t.Fatal(err) - } - defer tearDown() - config.QPS = 1000 - config.Burst = 1000 - apiExtensionsClient, err := clientset.NewForConfig(config) - if err != nil { - t.Fatal(err) - } - dynamicClient, err := dynamic.NewForConfig(config) - if err != nil { - t.Fatal(err) - } - - noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionsClient, dynamicClient) - if err != nil { - t.Fatal(err) - } - - ns := "default" - noxuNamespacedResourceClient := newNamespacedCustomResourceVersionedClient(ns, dynamicClient, noxuDefinition, "v1beta1") - - stopChan := make(chan struct{}) - - wg := &sync.WaitGroup{} - - // Set up loop to modify CRD in the background - wg.Add(1) - go func() { - defer wg.Done() - for { - select { - case <-stopChan: - return - default: - } - - noxuDefinitionToUpdate, err := apiExtensionsClient.ApiextensionsV1beta1().CustomResourceDefinitions().Get(noxuDefinition.Name, metav1.GetOptions{}) - if err != nil { - t.Fatal(err) - } - if len(noxuDefinitionToUpdate.Spec.Versions) == 1 { - v2 := noxuDefinitionToUpdate.Spec.Versions[0] - v2.Name = "v2" - v2.Served = true - v2.Storage = false - noxuDefinitionToUpdate.Spec.Versions = append(noxuDefinitionToUpdate.Spec.Versions, v2) - } else { - noxuDefinitionToUpdate.Spec.Versions = noxuDefinitionToUpdate.Spec.Versions[0:1] - } - if _, err := apiExtensionsClient.ApiextensionsV1beta1().CustomResourceDefinitions().Update(noxuDefinitionToUpdate); err != nil && !apierrors.IsConflict(err) { - t.Fatal(err) - } - time.Sleep(10 * time.Millisecond) - } - }() - - // Set up 100 loops creating and reading and watching custom resources - for i := 0; i < 100; i++ { - wg.Add(1) - go func(i int) { - defer wg.Done() - noxuInstanceToCreate := fixtures.NewNoxuInstance(ns, fmt.Sprintf("foo-%d", i)) - if _, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate, metav1.CreateOptions{}); err != nil { - t.Fatal(err) - } - for { - select { - case <-stopChan: - return - default: - if _, err := noxuNamespacedResourceClient.Get(noxuInstanceToCreate.GetName(), metav1.GetOptions{}); err != nil { - t.Fatal(err) - } - } - time.Sleep(10 * time.Millisecond) - } - }(i) - - wg.Add(1) - go func(i int) { - defer wg.Done() - for { - select { - case <-stopChan: - return - default: - w, err := noxuNamespacedResourceClient.Watch(metav1.ListOptions{}) - if err != nil { - t.Fatalf("unexpected error establishing watch: %v", err) - } - for event := range w.ResultChan() { - switch event.Type { - case watch.Added, watch.Modified, watch.Deleted: - // all expected - default: - t.Errorf("unexpected watch event: %#v", event) - } - } - } - time.Sleep(10 * time.Millisecond) - } - }(i) - } - - // Let all the established get request loops soak - time.Sleep(5 * time.Second) - - // Tear down - close(stopChan) - - // Let loops drain - drained := make(chan struct{}) - go func() { - defer close(drained) - wg.Wait() - }() - - select { - case <-drained: - case <-time.After(wait.ForeverTestTimeout): - t.Error("timed out waiting for clients to complete") - } -} diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/restmapper.go b/vendor/k8s.io/apimachinery/pkg/api/meta/restmapper.go index 914213925..41b60d731 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/meta/restmapper.go +++ b/vendor/k8s.io/apimachinery/pkg/api/meta/restmapper.go @@ -115,7 +115,6 @@ func (m *DefaultRESTMapper) AddSpecific(kind schema.GroupVersionKind, plural, si // callers to use the RESTMapper they mean. var unpluralizedSuffixes = []string{ "endpoints", - "securitycontextconstraints", } // UnsafeGuessKindToResource converts Kind to a resource name. diff --git a/vendor/k8s.io/apimachinery/pkg/api/meta/testrestmapper/patch_restmapper.go b/vendor/k8s.io/apimachinery/pkg/api/meta/testrestmapper/patch_restmapper.go deleted file mode 100644 index f21a14607..000000000 --- a/vendor/k8s.io/apimachinery/pkg/api/meta/testrestmapper/patch_restmapper.go +++ /dev/null @@ -1,53 +0,0 @@ -package testrestmapper - -import "k8s.io/apimachinery/pkg/runtime/schema" - -func init() { - rootScopedKinds[schema.GroupKind{Group: "", Kind: "SubjectAccessReview"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ResourceAccessReview"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ClusterRole"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ClusterRoleBinding"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "Image"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ImageSignature"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "OAuthAccessToken"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "OAuthAuthorizeToken"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "OAuthClient"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "OAuthClientAuthorization"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "OAuthRedirectReference"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "Project"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ProjectRequest"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ClusterNetwork"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "HostSubnet"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "NetNamespace"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "BrokerTemplateInstance"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "User"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "Identity"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "UserIdentityMapping"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "Group"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "SecurityContextConstraints"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ClusterResourceQuota"}] = true - - rootScopedKinds[schema.GroupKind{Group: "authorization.openshift.io", Kind: "SubjectAccessReview"}] = true - rootScopedKinds[schema.GroupKind{Group: "authorization.openshift.io", Kind: "ResourceAccessReview"}] = true - rootScopedKinds[schema.GroupKind{Group: "authorization.openshift.io", Kind: "ClusterRole"}] = true - rootScopedKinds[schema.GroupKind{Group: "authorization.openshift.io", Kind: "ClusterRoleBinding"}] = true - rootScopedKinds[schema.GroupKind{Group: "image.openshift.io", Kind: "Image"}] = true - rootScopedKinds[schema.GroupKind{Group: "image.openshift.io", Kind: "ImageSignature"}] = true - rootScopedKinds[schema.GroupKind{Group: "oauth.openshift.io", Kind: "OAuthAccessToken"}] = true - rootScopedKinds[schema.GroupKind{Group: "oauth.openshift.io", Kind: "OAuthAuthorizeToken"}] = true - rootScopedKinds[schema.GroupKind{Group: "oauth.openshift.io", Kind: "OAuthClient"}] = true - rootScopedKinds[schema.GroupKind{Group: "oauth.openshift.io", Kind: "OAuthClientAuthorization"}] = true - rootScopedKinds[schema.GroupKind{Group: "oauth.openshift.io", Kind: "OAuthRedirectReference"}] = true - rootScopedKinds[schema.GroupKind{Group: "project.openshift.io", Kind: "Project"}] = true - rootScopedKinds[schema.GroupKind{Group: "project.openshift.io", Kind: "ProjectRequest"}] = true - rootScopedKinds[schema.GroupKind{Group: "network.openshift.io", Kind: "ClusterNetwork"}] = true - rootScopedKinds[schema.GroupKind{Group: "network.openshift.io", Kind: "HostSubnet"}] = true - rootScopedKinds[schema.GroupKind{Group: "network.openshift.io", Kind: "NetNamespace"}] = true - rootScopedKinds[schema.GroupKind{Group: "template.openshift.io", Kind: "BrokerTemplateInstance"}] = true - rootScopedKinds[schema.GroupKind{Group: "user.openshift.io", Kind: "User"}] = true - rootScopedKinds[schema.GroupKind{Group: "user.openshift.io", Kind: "Identity"}] = true - rootScopedKinds[schema.GroupKind{Group: "user.openshift.io", Kind: "UserIdentityMapping"}] = true - rootScopedKinds[schema.GroupKind{Group: "user.openshift.io", Kind: "Group"}] = true - rootScopedKinds[schema.GroupKind{Group: "security.openshift.io", Kind: "SecurityContextConstraints"}] = true - rootScopedKinds[schema.GroupKind{Group: "quota.openshift.io", Kind: "ClusterResourceQuota"}] = true -} diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/types.go b/vendor/k8s.io/apimachinery/pkg/runtime/types.go index 3d3ebe5f9..1f7f662e0 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/types.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/types.go @@ -41,9 +41,8 @@ type TypeMeta struct { } const ( - ContentTypeJSON string = "application/json" - ContentTypeYAML string = "application/yaml" - ContentTypeProtobuf string = "application/vnd.kubernetes.protobuf" + ContentTypeJSON string = "application/json" + ContentTypeYAML string = "application/yaml" ) // RawExtension is used to hold extensions in external versions. diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go index 923cd0de5..c6517bee3 100644 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go +++ b/vendor/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go @@ -53,14 +53,7 @@ const ( // Register registers a plugin func Register(plugins *admission.Plugins) { plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return NewLifecycle(sets.NewString(metav1.NamespaceDefault, metav1.NamespaceSystem, metav1.NamespacePublic, - // user specified configuration that cannot be rebuilt - "openshift-config", - // the CVO which is the root we use to rebuild all the rest - "openshift-cluster-version", - // contains a namespaced list of all nodes in the cluster (yeah, weird. they do it for multi-tenant management I think?) - "openshift-machine-api", - )) + return NewLifecycle(sets.NewString(metav1.NamespaceDefault, metav1.NamespaceSystem, metav1.NamespacePublic)) }) } @@ -223,19 +216,7 @@ func (l *Lifecycle) ValidateInitialization() error { // accessReviewResources are resources which give a view into permissions in a namespace. Users must be allowed to create these // resources because returning "not found" errors allows someone to search for the "people I'm going to fire in 2017" namespace. var accessReviewResources = map[schema.GroupResource]bool{ - {Group: "authorization.k8s.io", Resource: "localsubjectaccessreviews"}: true, - schema.GroupResource{Group: "", Resource: "subjectaccessreviews"}: true, - schema.GroupResource{Group: "", Resource: "localsubjectaccessreviews"}: true, - schema.GroupResource{Group: "", Resource: "resourceaccessreviews"}: true, - schema.GroupResource{Group: "", Resource: "localresourceaccessreviews"}: true, - schema.GroupResource{Group: "", Resource: "selfsubjectrulesreviews"}: true, - schema.GroupResource{Group: "", Resource: "subjectrulesreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "subjectaccessreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "localsubjectaccessreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "resourceaccessreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "localresourceaccessreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "selfsubjectrulesreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "subjectrulesreviews"}: true, + {Group: "authorization.k8s.io", Resource: "localsubjectaccessreviews"}: true, } func isAccessReview(a admission.Attributes) bool { diff --git a/vendor/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/patch.go b/vendor/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/patch.go deleted file mode 100644 index 1c043777e..000000000 --- a/vendor/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/patch.go +++ /dev/null @@ -1,7 +0,0 @@ -package lifecycle - -import "k8s.io/apimachinery/pkg/runtime/schema" - -func AccessReviewResources() map[schema.GroupResource]bool { - return accessReviewResources -} diff --git a/vendor/k8s.io/apiserver/pkg/authentication/authenticatorfactory/delegating.go b/vendor/k8s.io/apiserver/pkg/authentication/authenticatorfactory/delegating.go index b70f29abb..67958c363 100644 --- a/vendor/k8s.io/apiserver/pkg/authentication/authenticatorfactory/delegating.go +++ b/vendor/k8s.io/apiserver/pkg/authentication/authenticatorfactory/delegating.go @@ -32,9 +32,9 @@ import ( "k8s.io/apiserver/pkg/authentication/request/websocket" "k8s.io/apiserver/pkg/authentication/request/x509" "k8s.io/apiserver/pkg/authentication/token/cache" - "k8s.io/apiserver/pkg/server/certs" webhooktoken "k8s.io/apiserver/plugin/pkg/authenticator/token/webhook" authenticationclient "k8s.io/client-go/kubernetes/typed/authentication/v1beta1" + "k8s.io/client-go/util/cert" ) // DelegatingAuthenticatorConfig is the minimal configuration needed to create an authenticator @@ -56,18 +56,14 @@ type DelegatingAuthenticatorConfig struct { RequestHeaderConfig *RequestHeaderConfig } -type DynamicReloadFunc func(stopCh <-chan struct{}) - -// New returns the authentication, the openapi info, dynamic reloading poststarthooks, or an error -func (c DelegatingAuthenticatorConfig) New() (authenticator.Request, *spec.SecurityDefinitions, map[string]DynamicReloadFunc, error) { +func (c DelegatingAuthenticatorConfig) New() (authenticator.Request, *spec.SecurityDefinitions, error) { authenticators := []authenticator.Request{} securityDefinitions := spec.SecurityDefinitions{} - dynamicReloadHooks := map[string]DynamicReloadFunc{} // front-proxy first, then remote // Add the front proxy authenticator if requested if c.RequestHeaderConfig != nil { - requestHeaderAuthenticator, dynamicReloadFn, err := headerrequest.NewSecure( + requestHeaderAuthenticator, err := headerrequest.NewSecure( c.RequestHeaderConfig.ClientCA, c.RequestHeaderConfig.AllowedClientNames, c.RequestHeaderConfig.UsernameHeaders, @@ -75,27 +71,26 @@ func (c DelegatingAuthenticatorConfig) New() (authenticator.Request, *spec.Secur c.RequestHeaderConfig.ExtraHeaderPrefixes, ) if err != nil { - return nil, nil, nil, err + return nil, nil, err } - dynamicReloadHooks["requestheader-reload"] = DynamicReloadFunc(dynamicReloadFn) authenticators = append(authenticators, requestHeaderAuthenticator) } // x509 client cert auth if len(c.ClientCAFile) > 0 { - dynamicVerifier := certs.NewDynamicCA(c.ClientCAFile) - if err := dynamicVerifier.CheckCerts(); err != nil { - return nil, nil, nil, fmt.Errorf("unable to load client CA file %s: %v", c.ClientCAFile, err) + clientCAs, err := cert.NewPool(c.ClientCAFile) + if err != nil { + return nil, nil, fmt.Errorf("unable to load client CA file %s: %v", c.ClientCAFile, err) } - dynamicReloadHooks["clientCA-reload"] = dynamicVerifier.Run - - authenticators = append(authenticators, x509.NewDynamic(dynamicVerifier.GetVerifier, x509.CommonNameUserConversion)) + verifyOpts := x509.DefaultVerifyOptions() + verifyOpts.Roots = clientCAs + authenticators = append(authenticators, x509.New(verifyOpts, x509.CommonNameUserConversion)) } if c.TokenAccessReviewClient != nil { tokenAuth, err := webhooktoken.NewFromInterface(c.TokenAccessReviewClient, c.APIAudiences) if err != nil { - return nil, nil, nil, err + return nil, nil, err } cachingTokenAuth := cache.New(tokenAuth, false, c.CacheTTL, c.CacheTTL) authenticators = append(authenticators, bearertoken.New(cachingTokenAuth), websocket.NewProtocolAuthenticator(cachingTokenAuth)) @@ -112,14 +107,14 @@ func (c DelegatingAuthenticatorConfig) New() (authenticator.Request, *spec.Secur if len(authenticators) == 0 { if c.Anonymous { - return anonymous.NewAuthenticator(), &securityDefinitions, dynamicReloadHooks, nil + return anonymous.NewAuthenticator(), &securityDefinitions, nil } - return nil, nil, nil, errors.New("No authentication method configured") + return nil, nil, errors.New("No authentication method configured") } authenticator := group.NewAuthenticatedGroupAdder(unionauth.New(authenticators...)) if c.Anonymous { authenticator = unionauth.NewFailOnError(authenticator, anonymous.NewAuthenticator()) } - return authenticator, &securityDefinitions, dynamicReloadHooks, nil + return authenticator, &securityDefinitions, nil } diff --git a/vendor/k8s.io/apiserver/pkg/authentication/request/headerrequest/requestheader.go b/vendor/k8s.io/apiserver/pkg/authentication/request/headerrequest/requestheader.go index eee54a087..70af861d8 100644 --- a/vendor/k8s.io/apiserver/pkg/authentication/request/headerrequest/requestheader.go +++ b/vendor/k8s.io/apiserver/pkg/authentication/request/headerrequest/requestheader.go @@ -17,7 +17,9 @@ limitations under the License. package headerrequest import ( + "crypto/x509" "fmt" + "io/ioutil" "net/http" "net/url" "strings" @@ -26,7 +28,7 @@ import ( "k8s.io/apiserver/pkg/authentication/authenticator" x509request "k8s.io/apiserver/pkg/authentication/request/x509" "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/apiserver/pkg/server/certs" + utilcert "k8s.io/client-go/util/cert" ) type requestHeaderAuthRequestHandler struct { @@ -75,25 +77,32 @@ func trimHeaders(headerNames ...string) ([]string, error) { return ret, nil } -type DynamicReloadFunc func(stopCh <-chan struct{}) - -func NewSecure(clientCA string, proxyClientNames []string, nameHeaders []string, groupHeaders []string, extraHeaderPrefixes []string) (authenticator.Request, DynamicReloadFunc, error) { +func NewSecure(clientCA string, proxyClientNames []string, nameHeaders []string, groupHeaders []string, extraHeaderPrefixes []string) (authenticator.Request, error) { headerAuthenticator, err := New(nameHeaders, groupHeaders, extraHeaderPrefixes) if err != nil { - return nil, nil, err + return nil, err } if len(clientCA) == 0 { - return nil, nil, fmt.Errorf("missing clientCA file") + return nil, fmt.Errorf("missing clientCA file") } // Wrap with an x509 verifier - dynamicVerifier := certs.NewDynamicCA(clientCA) - if err := dynamicVerifier.CheckCerts(); err != nil { - return nil, nil, fmt.Errorf("error reading %s: %v", clientCA, err) + caData, err := ioutil.ReadFile(clientCA) + if err != nil { + return nil, fmt.Errorf("error reading %s: %v", clientCA, err) + } + opts := x509request.DefaultVerifyOptions() + opts.Roots = x509.NewCertPool() + certs, err := utilcert.ParseCertsPEM(caData) + if err != nil { + return nil, fmt.Errorf("error loading certs from %s: %v", clientCA, err) + } + for _, cert := range certs { + opts.Roots.AddCert(cert) } - return x509request.NewDynamicVerifier(dynamicVerifier.GetVerifier, headerAuthenticator, sets.NewString(proxyClientNames...)), dynamicVerifier.Run, nil + return x509request.NewVerifier(opts, headerAuthenticator, sets.NewString(proxyClientNames...)), nil } func (a *requestHeaderAuthRequestHandler) AuthenticateRequest(req *http.Request) (*authenticator.Response, bool, error) { diff --git a/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go b/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go index d702c9063..5e91034aa 100644 --- a/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go +++ b/vendor/k8s.io/apiserver/pkg/authentication/request/x509/x509.go @@ -73,30 +73,16 @@ func (f UserConversionFunc) User(chain []*x509.Certificate) (*authenticator.Resp return f(chain) } -type VerifyOptionFunc func() x509.VerifyOptions - -func StaticVerifierFn(opts x509.VerifyOptions) VerifyOptionFunc { - return func() x509.VerifyOptions { - return opts - } -} - // Authenticator implements request.Authenticator by extracting user info from verified client certificates type Authenticator struct { - verifyOptionsFn VerifyOptionFunc - user UserConversion + opts x509.VerifyOptions + user UserConversion } // New returns a request.Authenticator that verifies client certificates using the provided // VerifyOptions, and converts valid certificate chains into user.Info using the provided UserConversion func New(opts x509.VerifyOptions, user UserConversion) *Authenticator { - return NewDynamic(StaticVerifierFn(opts), user) -} - -// New returns a request.Authenticator that verifies client certificates using the provided -// VerifyOptions, and converts valid certificate chains into user.Info using the provided UserConversion -func NewDynamic(verifyOptionsFn VerifyOptionFunc, user UserConversion) *Authenticator { - return &Authenticator{verifyOptionsFn, user} + return &Authenticator{opts, user} } // AuthenticateRequest authenticates the request using presented client certificates @@ -106,7 +92,7 @@ func (a *Authenticator) AuthenticateRequest(req *http.Request) (*authenticator.R } // Use intermediates, if provided - optsCopy := a.verifyOptionsFn() + optsCopy := a.opts if optsCopy.Intermediates == nil && len(req.TLS.PeerCertificates) > 1 { optsCopy.Intermediates = x509.NewCertPool() for _, intermediate := range req.TLS.PeerCertificates[1:] { @@ -138,8 +124,8 @@ func (a *Authenticator) AuthenticateRequest(req *http.Request) (*authenticator.R // Verifier implements request.Authenticator by verifying a client cert on the request, then delegating to the wrapped auth type Verifier struct { - verifyOptionsFn VerifyOptionFunc - auth authenticator.Request + opts x509.VerifyOptions + auth authenticator.Request // allowedCommonNames contains the common names which a verified certificate is allowed to have. // If empty, all verified certificates are allowed. @@ -148,12 +134,7 @@ type Verifier struct { // NewVerifier create a request.Authenticator by verifying a client cert on the request, then delegating to the wrapped auth func NewVerifier(opts x509.VerifyOptions, auth authenticator.Request, allowedCommonNames sets.String) authenticator.Request { - return NewDynamicVerifier(StaticVerifierFn(opts), auth, allowedCommonNames) -} - -// NewVerifier create a request.Authenticator by verifying a client cert on the request, then delegating to the wrapped auth -func NewDynamicVerifier(verifyOptionsFn VerifyOptionFunc, auth authenticator.Request, allowedCommonNames sets.String) authenticator.Request { - return &Verifier{verifyOptionsFn, auth, allowedCommonNames} + return &Verifier{opts, auth, allowedCommonNames} } // AuthenticateRequest verifies the presented client certificate, then delegates to the wrapped auth @@ -163,7 +144,7 @@ func (a *Verifier) AuthenticateRequest(req *http.Request) (*authenticator.Respon } // Use intermediates, if provided - optsCopy := a.verifyOptionsFn() + optsCopy := a.opts if optsCopy.Intermediates == nil && len(req.TLS.PeerCertificates) > 1 { optsCopy.Intermediates = x509.NewCertPool() for _, intermediate := range req.TLS.PeerCertificates[1:] { diff --git a/vendor/k8s.io/apiserver/pkg/authentication/serviceaccount/util.go b/vendor/k8s.io/apiserver/pkg/authentication/serviceaccount/util.go index f773b384a..1b7bbc139 100644 --- a/vendor/k8s.io/apiserver/pkg/authentication/serviceaccount/util.go +++ b/vendor/k8s.io/apiserver/pkg/authentication/serviceaccount/util.go @@ -36,27 +36,6 @@ func MakeUsername(namespace, name string) string { return ServiceAccountUsernamePrefix + namespace + ServiceAccountUsernameSeparator + name } -// MatchesUsername checks whether the provided username matches the namespace and name without -// allocating. Use this when checking a service account namespace and name against a known string. -func MatchesUsername(namespace, name string, username string) bool { - if !strings.HasPrefix(username, ServiceAccountUsernamePrefix) { - return false - } - username = strings.TrimPrefix(username, ServiceAccountUsernamePrefix) - - if !strings.HasSuffix(username, name) { - return false - } - username = strings.TrimSuffix(username, name) - - if !strings.HasPrefix(username, namespace) { - return false - } - username = strings.TrimPrefix(username, namespace) - - return username == ServiceAccountUsernameSeparator -} - var invalidUsernameErr = fmt.Errorf("Username must be in the form %s", MakeUsername("namespace", "name")) // SplitUsername returns the namespace and ServiceAccount name embedded in the given username, diff --git a/vendor/k8s.io/apiserver/pkg/authentication/serviceaccount/util_test.go b/vendor/k8s.io/apiserver/pkg/authentication/serviceaccount/util_test.go index 91c8cb0dd..14784b16c 100644 --- a/vendor/k8s.io/apiserver/pkg/authentication/serviceaccount/util_test.go +++ b/vendor/k8s.io/apiserver/pkg/authentication/serviceaccount/util_test.go @@ -62,9 +62,7 @@ func TestMakeUsername(t *testing.T) { for k, tc := range testCases { username := MakeUsername(tc.Namespace, tc.Name) - if !MatchesUsername(tc.Namespace, tc.Name, username) { - t.Errorf("%s: Expected to match username", k) - } + namespace, name, err := SplitUsername(username) if (err != nil) != tc.ExpectedErr { t.Errorf("%s: Expected error=%v, got %v", k, tc.ExpectedErr, err) @@ -82,39 +80,3 @@ func TestMakeUsername(t *testing.T) { } } } - -func TestMatchUsername(t *testing.T) { - - testCases := []struct { - TestName string - Namespace string - Name string - Username string - Expect bool - }{ - {Namespace: "foo", Name: "bar", Username: "foo", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount:", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount:foo", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount:foo:", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount:foo:bar", Expect: true}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount::bar", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount:bar", Expect: false}, - {Namespace: "foo", Name: "bar", Username: ":bar", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "foo:bar", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "", Expect: false}, - - {Namespace: "foo2", Name: "bar", Username: "system:serviceaccount:foo:bar", Expect: false}, - {Namespace: "foo", Name: "bar2", Username: "system:serviceaccount:foo:bar", Expect: false}, - {Namespace: "foo:", Name: "bar", Username: "system:serviceaccount:foo:bar", Expect: false}, - {Namespace: "foo", Name: ":bar", Username: "system:serviceaccount:foo:bar", Expect: false}, - } - - for _, tc := range testCases { - t.Run(tc.TestName, func(t *testing.T) { - actual := MatchesUsername(tc.Namespace, tc.Name, tc.Username) - if actual != tc.Expect { - t.Fatalf("unexpected match") - } - }) - } -} diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest.go index a4495b44d..74bb39c6d 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest.go @@ -370,7 +370,7 @@ func parseTimeout(str string) time.Duration { } klog.Errorf("Failed to parse %q: %v", str, err) } - return 34 * time.Second + return 30 * time.Second } func isDryRun(url *url.URL) bool { diff --git a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go index 13157406c..9ebd06786 100644 --- a/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go +++ b/vendor/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go @@ -822,10 +822,10 @@ func TestHasUID(t *testing.T) { } func TestParseTimeout(t *testing.T) { - if d := parseTimeout(""); d != 34*time.Second { + if d := parseTimeout(""); d != 30*time.Second { t.Errorf("blank timeout produces %v", d) } - if d := parseTimeout("not a timeout"); d != 34*time.Second { + if d := parseTimeout("not a timeout"); d != 30*time.Second { t.Errorf("bad timeout produces %v", d) } if d := parseTimeout("10s"); d != 10*time.Second { diff --git a/vendor/k8s.io/apiserver/pkg/server/certs/clientca.go b/vendor/k8s.io/apiserver/pkg/server/certs/clientca.go deleted file mode 100644 index f518cc79d..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/certs/clientca.go +++ /dev/null @@ -1,121 +0,0 @@ -package certs - -import ( - "crypto/x509" - "fmt" - "io/ioutil" - "reflect" - "sync/atomic" - "time" - - "k8s.io/client-go/util/cert" - - "k8s.io/klog" - - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/wait" - kubex509 "k8s.io/apiserver/pkg/authentication/request/x509" -) - -func NewDynamicCA(caBundleFilename string) *DynamicCA { - return &DynamicCA{ - caFile: caFileReference{Cert: caBundleFilename}, - } -} - -// DynamicCA dynamically loads ca bundle and provides a verifier compatible with kube x509 authentication -type DynamicCA struct { - caFile caFileReference - - currentContent caFileContent - currentValue atomic.Value -} - -type caFileReference struct { - Cert string -} - -type caFileContent struct { - Cert []byte -} - -type runtimeDynamicCA struct { - verifyOptions x509.VerifyOptions -} - -func (c *DynamicCA) GetVerifier() x509.VerifyOptions { - uncastObj := c.currentValue.Load() - if uncastObj == nil { - panic("tls: configuration not ready") - } - runtimeConfig, ok := uncastObj.(*runtimeDynamicCA) - if !ok { - panic("tls: unexpected config type") - } - return runtimeConfig.GetVerifier() -} - -func (c *DynamicCA) Run(stopCh <-chan struct{}) { - klog.Infof("Starting DynamicCA: %v", c.caFile.Cert) - defer klog.Infof("Shutting down DynamicCA: %v", c.caFile.Cert) - - go wait.Until(func() { - err := c.CheckCerts() - if err != nil { - utilruntime.HandleError(err) - } - }, 1*time.Minute, stopCh) - - <-stopCh -} - -func (c *DynamicCA) CheckCerts() error { - certBytes, err := ioutil.ReadFile(c.caFile.Cert) - if err != nil { - return err - } - if len(certBytes) == 0 { - return fmt.Errorf("ca-bundle %q must not be empty", c.caFile.Cert) - } - newContent := caFileContent{Cert: certBytes} - - if newContent.Equals(&c.currentContent) { - return nil - } - - certs, err := cert.ParseCertsPEM(newContent.Cert) - if err != nil { - return fmt.Errorf("unable to load client CA file %q: %v", c.caFile.Cert, err) - } - pool := x509.NewCertPool() - for i, crt := range certs { - pool.AddCert(crt) - klog.V(2).Infof("[%d] %q client-ca certificate: %s", i, c.caFile.Cert, getCertDetail(crt)) - } - - verifyOpts := kubex509.DefaultVerifyOptions() - verifyOpts.Roots = pool - newRuntimeConfig := &runtimeDynamicCA{verifyOptions: verifyOpts} - - c.currentValue.Store(newRuntimeConfig) - c.currentContent = newContent // this is single threaded, so we have no locking issue - - return nil -} - -func (c *caFileContent) Equals(rhs *caFileContent) bool { - if c == nil && rhs == nil { - return true - } - if c == nil && rhs != nil { - return false - } - if c != nil && rhs == nil { - return false - } - return reflect.DeepEqual(c.Cert, rhs.Cert) -} - -func (c *runtimeDynamicCA) GetVerifier() x509.VerifyOptions { - return c.verifyOptions -} diff --git a/vendor/k8s.io/apiserver/pkg/server/certs/serving.go b/vendor/k8s.io/apiserver/pkg/server/certs/serving.go deleted file mode 100644 index 26964cb73..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/certs/serving.go +++ /dev/null @@ -1,273 +0,0 @@ -package certs - -import ( - "crypto/tls" - "crypto/x509" - "errors" - "fmt" - "io/ioutil" - "net" - "reflect" - "sync/atomic" - "time" - - "k8s.io/klog" - - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/util/cert" -) - -// LoopbackClientServerNameOverride is passed to the apiserver from the loopback client in order to -// select the loopback certificate via SNI if TLS is used. -const LoopbackClientServerNameOverride = "apiserver-loopback-client" - -type CertKeyFileReference struct { - Cert string - Key string -} - -type CABundleFileReferences struct { - CABundles []string -} - -// DynamicLoader dynamically loads certificates and provides a golang tls compatible dynamic GetCertificate func. -type DynamicServingLoader struct { - // BaseTLSConfig is the static portion of the tlsConfig for serving to clients. It is copied and the copy is mutated - // based on the dynamic cert state. - BaseTLSConfig tls.Config - - ClientCA CABundleFileReferences - DefaultCertificate CertKeyFileReference - NameToCertificate map[string]*CertKeyFileReference - LoopbackCert *tls.Certificate - - currentContent dynamicCertificateContent - currentValue atomic.Value -} - -type dynamicCertificateContent struct { - ClientCA certKeyFileContent - DefaultCertificate certKeyFileContent - NameToCertificate map[string]*certKeyFileContent -} - -type certKeyFileContent struct { - Cert []byte - Key []byte -} - -type runtimeDynamicLoader struct { - tlsConfig tls.Config -} - -func (c *DynamicServingLoader) GetConfigForClient(clientHello *tls.ClientHelloInfo) (*tls.Config, error) { - uncastObj := c.currentValue.Load() - if uncastObj == nil { - return nil, errors.New("tls: configuration not ready") - } - runtimeConfig, ok := uncastObj.(*runtimeDynamicLoader) - if !ok { - return nil, errors.New("tls: unexpected config type") - } - return runtimeConfig.GetConfigForClient(clientHello) -} - -func (c *DynamicServingLoader) Run(stopCh <-chan struct{}) { - klog.Infof("Starting DynamicLoader") - defer klog.Infof("Shutting down DynamicLoader") - - go wait.Until(func() { - err := c.CheckCerts() - if err != nil { - utilruntime.HandleError(err) - } - }, 1*time.Minute, stopCh) - - <-stopCh -} - -func (c *DynamicServingLoader) CheckCerts() error { - newContent := dynamicCertificateContent{ - NameToCertificate: map[string]*certKeyFileContent{}, - } - - servingCertBytes, err := ioutil.ReadFile(c.DefaultCertificate.Cert) - if err != nil { - return err - } - servingKeyBytes, err := ioutil.ReadFile(c.DefaultCertificate.Key) - if err != nil { - return err - } - newContent.DefaultCertificate = certKeyFileContent{Cert: servingCertBytes, Key: servingKeyBytes} - if len(c.DefaultCertificate.Cert) > 0 && len(newContent.DefaultCertificate.Cert) == 0 { - return fmt.Errorf("not loading an empty default cert from %q", c.DefaultCertificate.Cert) - } - if len(c.DefaultCertificate.Key) > 0 && len(newContent.DefaultCertificate.Key) == 0 { - return fmt.Errorf("not loading an empty default key from %q", c.DefaultCertificate.Key) - } - - caBundle := []byte{} - for _, caFile := range c.ClientCA.CABundles { - clientCABytes, err := ioutil.ReadFile(caFile) - if err != nil { - return err - } - if len(clientCABytes) == 0 { - return fmt.Errorf("not loading an empty client ca bundle from %q", caFile) - } - caBundle = append(caBundle, clientCABytes...) - } - newContent.ClientCA = certKeyFileContent{Cert: caBundle} - clientCAPool := x509.NewCertPool() - if len(newContent.ClientCA.Cert) > 0 { - clientCAs, err := cert.ParseCertsPEM(newContent.ClientCA.Cert) - if err != nil { - return fmt.Errorf("unable to load client CA file: %v", err) - } - for _, cert := range clientCAs { - clientCAPool.AddCert(cert) - } - } - - for key, currRef := range c.NameToCertificate { - certBytes, err := ioutil.ReadFile(currRef.Cert) - if err != nil { - return err - } - keyBytes, err := ioutil.ReadFile(currRef.Key) - if err != nil { - return err - } - if len(currRef.Cert) > 0 && len(certBytes) == 0 { - return fmt.Errorf("not loading an empty cert from %q for %v", currRef.Cert, key) - } - if len(currRef.Key) > 0 && len(keyBytes) == 0 { - return fmt.Errorf("not loading an empty key from %q for %v", currRef.Key, key) - } - newContent.NameToCertificate[key] = &certKeyFileContent{Cert: certBytes, Key: keyBytes} - } - - if newContent.Equals(&c.currentContent) { - return nil - } - - tlsConfigCopy := c.BaseTLSConfig - tlsConfigCopy.ClientCAs = clientCAPool - tlsConfigCopy.NameToCertificate = map[string]*tls.Certificate{} - - // load main cert - if len(newContent.DefaultCertificate.Cert) != 0 || len(newContent.DefaultCertificate.Key) != 0 { - tlsCert, err := tls.X509KeyPair(newContent.DefaultCertificate.Cert, newContent.DefaultCertificate.Key) - if err != nil { - return fmt.Errorf("unable to load server certificate: %v", err) - } - tlsConfigCopy.Certificates = []tls.Certificate{tlsCert} - tlsConfigCopy.Certificates = append(tlsConfigCopy.Certificates, tlsCert) - } - - // append all named certs. Otherwise, the go tls stack will think no SNI processing - // is necessary because there is only one cert anyway. - // Moreover, if ServerCert.CertFile/ServerCert.KeyFile are not set, the first SNI - // cert will become the default cert. That's what we expect anyway. - // load SNI certs - for name, nck := range newContent.NameToCertificate { - tlsCert, err := tls.X509KeyPair(nck.Cert, nck.Key) - if err != nil { - return fmt.Errorf("failed to load SNI cert and key: %v", err) - } - tlsConfigCopy.NameToCertificate[name] = &tlsCert - } - if c.LoopbackCert != nil { - tlsConfigCopy.NameToCertificate[LoopbackClientServerNameOverride] = c.LoopbackCert - tlsConfigCopy.Certificates = append(tlsConfigCopy.Certificates, *c.LoopbackCert) - } - newRuntimeConfig := &runtimeDynamicLoader{ - tlsConfig: tlsConfigCopy, - } - - certs, err := cert.ParseCertsPEM(servingCertBytes) - if err != nil { - return err - } - for i, crt := range certs { - klog.V(2).Infof("[%d] %q serving certificate: %s", i, c.DefaultCertificate.Cert, getCertDetail(crt)) - } - - c.currentValue.Store(newRuntimeConfig) - c.currentContent = newContent // this is single threaded, so we have no locking issue - - return nil -} - -func (c *dynamicCertificateContent) Equals(rhs *dynamicCertificateContent) bool { - if c == nil && rhs == nil { - return true - } - if c == nil && rhs != nil { - return false - } - if c != nil && rhs == nil { - return false - } - cKeys := sets.StringKeySet(c.NameToCertificate) - rhsKeys := sets.StringKeySet(rhs.NameToCertificate) - if !cKeys.Equal(rhsKeys) { - return false - } - - if !c.DefaultCertificate.Equals(&rhs.DefaultCertificate) { - return false - } - if !c.ClientCA.Equals(&rhs.ClientCA) { - return false - } - for _, key := range cKeys.UnsortedList() { - if !c.NameToCertificate[key].Equals(rhs.NameToCertificate[key]) { - return false - } - } - - return true -} - -func (c *certKeyFileContent) Equals(rhs *certKeyFileContent) bool { - if c == nil && rhs == nil { - return true - } - if c == nil && rhs != nil { - return false - } - if c != nil && rhs == nil { - return false - } - return reflect.DeepEqual(c.Key, rhs.Key) && reflect.DeepEqual(c.Cert, rhs.Cert) -} - -// GetConfigForClient copied from tls.getCertificate -func (c *runtimeDynamicLoader) GetConfigForClient(hello *tls.ClientHelloInfo) (*tls.Config, error) { - tlsConfigCopy := c.tlsConfig - - // if the client set SNI information, just use our "normal" SNI flow - if len(hello.ServerName) > 0 { - return &tlsConfigCopy, nil - } - - // if the client didn't set SNI, then we need to inspect the requested IP so that we can choose - // a certificate from our list if we specifically handle that IP - host, _, err := net.SplitHostPort(hello.Conn.LocalAddr().String()) - if err != nil { - return &tlsConfigCopy, nil - } - - ipCert, ok := tlsConfigCopy.NameToCertificate[host] - if !ok { - return &tlsConfigCopy, nil - } - tlsConfigCopy.Certificates = []tls.Certificate{*ipCert} - tlsConfigCopy.NameToCertificate = nil - - return &tlsConfigCopy, nil -} diff --git a/vendor/k8s.io/apiserver/pkg/server/certs/single_certkey_pair.go b/vendor/k8s.io/apiserver/pkg/server/certs/single_certkey_pair.go deleted file mode 100644 index 8e2607b91..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/certs/single_certkey_pair.go +++ /dev/null @@ -1,128 +0,0 @@ -package certs - -import ( - "fmt" - "io/ioutil" - "sync/atomic" - "time" - - "k8s.io/klog" - - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/util/cert" -) - -// ReactionFunc is a func that can be called on a cert change -type ReactionFunc func() - -func NewDynamicCertKeyPairLoader(certFile, keyFile string, certChangeCallback ReactionFunc) *DynamicCertKeyPairLoader { - return &DynamicCertKeyPairLoader{ - fileReference: CertKeyFileReference{ - Cert: certFile, - Key: keyFile, - }, - certChangeCallback: certChangeCallback, - } -} - -// DynamicLoader dynamically loads a single cert/key pair -type DynamicCertKeyPairLoader struct { - fileReference CertKeyFileReference - - certChangeCallback ReactionFunc - currentContent certKeyFileContent - currentValue atomic.Value -} - -type runtimeCertKeyPair struct { - rawContent certKeyFileContent -} - -func (c *DynamicCertKeyPairLoader) GetRawCert() []byte { - uncastObj := c.currentValue.Load() - if uncastObj == nil { - panic("not ready") - } - runtimeConfig, ok := uncastObj.(*runtimeCertKeyPair) - if !ok { - panic("unexpected config type") - } - return runtimeConfig.GetRawCert() -} - -func (c *DynamicCertKeyPairLoader) GetRawKey() []byte { - uncastObj := c.currentValue.Load() - if uncastObj == nil { - panic("not ready") - } - runtimeConfig, ok := uncastObj.(*runtimeCertKeyPair) - if !ok { - panic("unexpected config type") - } - return runtimeConfig.GetRawKey() -} - -func (c *DynamicCertKeyPairLoader) Run(stopCh <-chan struct{}) { - klog.Infof("Starting DynamicCertKeyPairLoader") - defer klog.Infof("Shutting down DynamicCertKeyPairLoader") - - go wait.Until(func() { - err := c.CheckCerts() - if err != nil { - utilruntime.HandleError(err) - } - }, 1*time.Minute, stopCh) - - <-stopCh -} - -func (c *DynamicCertKeyPairLoader) CheckCerts() error { - servingCertBytes, err := ioutil.ReadFile(c.fileReference.Cert) - if err != nil { - return err - } - if len(servingCertBytes) == 0 { - return fmt.Errorf("cert %q must not be empty", c.fileReference.Cert) - } - servingKeyBytes, err := ioutil.ReadFile(c.fileReference.Key) - if err != nil { - return err - } - if len(servingKeyBytes) == 0 { - return fmt.Errorf("key %q must not be empty", c.fileReference.Key) - } - newContent := certKeyFileContent{Cert: servingCertBytes, Key: servingKeyBytes} - - if newContent.Equals(&c.currentContent) { - return nil - } - - newRuntimeConfig := &runtimeCertKeyPair{ - rawContent: newContent, - } - c.currentValue.Store(newRuntimeConfig) - c.currentContent = newContent // this is single threaded, so we have no locking issue - - certs, err := cert.ParseCertsPEM(newContent.Cert) - if err != nil { - return err - } - for i, crt := range certs { - klog.V(2).Infof("[%d] %q certificate: %s", i, c.fileReference.Cert, getCertDetail(crt)) - } - - if c.certChangeCallback != nil { - c.certChangeCallback() - } - - return nil -} - -func (c *runtimeCertKeyPair) GetRawCert() []byte { - return c.rawContent.Cert -} - -func (c *runtimeCertKeyPair) GetRawKey() []byte { - return c.rawContent.Key -} diff --git a/vendor/k8s.io/apiserver/pkg/server/certs/util.go b/vendor/k8s.io/apiserver/pkg/server/certs/util.go deleted file mode 100644 index 5339f4ac7..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/certs/util.go +++ /dev/null @@ -1,50 +0,0 @@ -package certs - -import ( - "crypto/x509" - "fmt" - "strings" - "time" -) - -func getCertDetail(certificate *x509.Certificate) string { - humanName := certificate.Subject.CommonName - signerHumanName := certificate.Issuer.CommonName - if certificate.Subject.CommonName == certificate.Issuer.CommonName { - signerHumanName = "" - } - - usages := []string{} - for _, curr := range certificate.ExtKeyUsage { - if curr == x509.ExtKeyUsageClientAuth { - usages = append(usages, "client") - continue - } - if curr == x509.ExtKeyUsageServerAuth { - usages = append(usages, "serving") - continue - } - - usages = append(usages, fmt.Sprintf("%d", curr)) - } - - validServingNames := []string{} - for _, ip := range certificate.IPAddresses { - validServingNames = append(validServingNames, ip.String()) - } - for _, dnsName := range certificate.DNSNames { - validServingNames = append(validServingNames, dnsName) - } - servingString := "" - if len(validServingNames) > 0 { - servingString = fmt.Sprintf(" validServingFor=[%s]", strings.Join(validServingNames, ",")) - } - - groupString := "" - if len(certificate.Subject.Organization) > 0 { - groupString = fmt.Sprintf(" groups=[%s]", strings.Join(certificate.Subject.Organization, ",")) - } - - return fmt.Sprintf("%q [%s]%s%s issuer=%q (%v to %v (now=%v))", humanName, strings.Join(usages, ","), groupString, servingString, signerHumanName, certificate.NotBefore.UTC(), certificate.NotAfter.UTC(), - time.Now().UTC()) -} diff --git a/vendor/k8s.io/apiserver/pkg/server/config.go b/vendor/k8s.io/apiserver/pkg/server/config.go index a0a91a32c..75d1276c4 100644 --- a/vendor/k8s.io/apiserver/pkg/server/config.go +++ b/vendor/k8s.io/apiserver/pkg/server/config.go @@ -18,11 +18,10 @@ package server import ( "crypto/tls" + "crypto/x509" "fmt" - "io/ioutil" "net" "net/http" - "os" goruntime "runtime" "sort" "strconv" @@ -33,8 +32,8 @@ import ( jsonpatch "github.com/evanphx/json-patch" "github.com/go-openapi/spec" "github.com/pborman/uuid" + "k8s.io/klog" - corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apimachinery/pkg/util/sets" @@ -56,18 +55,15 @@ import ( apirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/features" genericregistry "k8s.io/apiserver/pkg/registry/generic" - "k8s.io/apiserver/pkg/server/certs" genericfilters "k8s.io/apiserver/pkg/server/filters" "k8s.io/apiserver/pkg/server/healthz" "k8s.io/apiserver/pkg/server/routes" serverstore "k8s.io/apiserver/pkg/server/storage" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/informers" - "k8s.io/client-go/kubernetes" - v1 "k8s.io/client-go/kubernetes/typed/core/v1" restclient "k8s.io/client-go/rest" + certutil "k8s.io/client-go/util/cert" "k8s.io/component-base/logs" - "k8s.io/klog" openapicommon "k8s.io/kube-openapi/pkg/common" // install apis @@ -159,9 +155,6 @@ type Config struct { // If specified, long running requests such as watch will be allocated a random timeout between this value, and // twice this value. Note that it is up to the request handlers to ignore or honor this timeout. In seconds. MinRequestTimeout int - // MinimalShutdownDuration allows to block shutdown for some time, e.g. until endpoints pointing to this API server - // have converged on all node. During this time, the API server keeps serving. - MinimalShutdownDuration time.Duration // The limit on the total size increase all "copy" operations in a json // patch may cause. // This affects all places that applies json patch in the binary. @@ -187,9 +180,6 @@ type Config struct { // If not specify any in flags, then genericapiserver will only enable defaultAPIResourceConfig. MergedResourceConfig *serverstore.ResourceConfig - // EventSink receives events about the life cycle of the API server, e.g. readiness, serving, signals and termination. - EventSink EventSink - //=========================================================================== // values below here are targets for removal //=========================================================================== @@ -200,11 +190,6 @@ type Config struct { PublicAddress net.IP } -// EventSink allows to create events. -type EventSink interface { - Create(event *corev1.Event) (*corev1.Event, error) -} - type RecommendedConfig struct { Config @@ -223,14 +208,15 @@ type SecureServingInfo struct { // Listener is the secure server network listener. Listener net.Listener - // ClientCA is the certificate bundle for all the signers that you'll recognize for incoming client certificates - ClientCA certs.CABundleFileReferences + // Cert is the main server cert which is used if SNI does not match. Cert must be non-nil and is + // allowed to be in SNICerts. + Cert *tls.Certificate - DefaultCertificate certs.CertKeyFileReference - NameToCertificate map[string]*certs.CertKeyFileReference + // SNICerts are the TLS certificates by name used for SNI. + SNICerts map[string]*tls.Certificate - // LoopbackCert holds the special certificate that we create for loopback connections - LoopbackCert *tls.Certificate + // ClientCA is the certificate bundle for all the signers that you'll recognize for incoming client certificates + ClientCA *x509.CertPool // MinTLSVersion optionally overrides the minimum TLS version supported. // Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). @@ -243,9 +229,6 @@ type SecureServingInfo struct { // HTTP2MaxStreamsPerConnection is the limit that the api server imposes on each client. // A value of zero means to use the default provided by golang's HTTP/2 support. HTTP2MaxStreamsPerConnection int - - // HTTP1Only indicates that http2 should not be enabled. - HTTP1Only bool } type AuthenticationInfo struct { @@ -258,10 +241,6 @@ type AuthenticationInfo struct { // If this is true, a basic auth challenge is returned on authentication failure // TODO(roberthbailey): Remove once the server no longer supports http basic auth. SupportsBasicAuth bool - - // DynamicReloadFns are post-start hooks used to dynamically refresh authentication information. - // Only the authencation builder knows how to wire them and only this level of code knows how apply them. - DynamicReloadFns map[string]PostStartHookFunc } type AuthorizationInfo struct { @@ -287,7 +266,6 @@ func NewConfig(codecs serializer.CodecFactory) *Config { MaxMutatingRequestsInFlight: 200, RequestTimeout: time.Duration(60) * time.Second, MinRequestTimeout: 1800, - MinimalShutdownDuration: 0, // 10MB is the recommended maximum client request size in bytes // the etcd server should accept. See // https://github.com/etcd-io/etcd/blob/release-3.3/etcdserver/server.go#L90. @@ -342,7 +320,16 @@ func DefaultOpenAPIConfig(getDefinitions openapicommon.GetOpenAPIDefinitions, de func (c *AuthenticationInfo) ApplyClientCert(clientCAFile string, servingInfo *SecureServingInfo) error { if servingInfo != nil { if len(clientCAFile) > 0 { - servingInfo.ClientCA.CABundles = append(servingInfo.ClientCA.CABundles, clientCAFile) + clientCAs, err := certutil.CertsFromFile(clientCAFile) + if err != nil { + return fmt.Errorf("unable to load client CA file: %v", err) + } + if servingInfo.ClientCA == nil { + servingInfo.ClientCA = x509.NewCertPool() + } + for _, cert := range clientCAs { + servingInfo.ClientCA.AddCert(cert) + } } } @@ -424,10 +411,6 @@ func (c *Config) Complete(informers informers.SharedInformerFactory) CompletedCo c.DiscoveryAddresses = discovery.DefaultAddresses{DefaultAddress: c.ExternalAddress} } - if c.EventSink == nil { - c.EventSink = nullEventSink{} - } - AuthorizeClientBearerToken(c.LoopbackClientConfig, &c.Authentication, &c.Authorization) if c.RequestInfoResolver == nil { @@ -440,58 +423,9 @@ func (c *Config) Complete(informers informers.SharedInformerFactory) CompletedCo // Complete fills in any fields not set that are required to have valid data and can be derived // from other fields. If you're going to `ApplyOptions`, do that first. It's mutating the receiver. func (c *RecommendedConfig) Complete() CompletedConfig { - if c.ClientConfig != nil { - ref, err := eventReference() - if err != nil { - klog.Warningf("Failed to derive event reference, won't create events: %v", err) - c.EventSink = nullEventSink{} - } else { - ns := ref.Namespace - if len(ns) == 0 { - ns = "default" - } - c.EventSink = &v1.EventSinkImpl{ - Interface: kubernetes.NewForConfigOrDie(c.ClientConfig).CoreV1().Events(ns), - } - } - } - return c.Config.Complete(c.SharedInformerFactory) } -func eventReference() (*corev1.ObjectReference, error) { - ns := os.Getenv("POD_NAMESPACE") - pod := os.Getenv("POD_NAME") - if len(ns) == 0 && len(pod) > 0 { - serviceAccountNamespaceFile := "/var/run/secrets/kubernetes.io/serviceaccount/namespace" - if _, err := os.Stat(serviceAccountNamespaceFile); err == nil { - bs, err := ioutil.ReadFile(serviceAccountNamespaceFile) - if err != nil { - return nil, err - } - ns = string(bs) - } - } - if len(ns) == 0 { - pod = "" - ns = "kube-system" - } - if len(pod) == 0 { - return &corev1.ObjectReference{ - Kind: "Namespace", - Name: ns, - APIVersion: "v1", - }, nil - } - - return &corev1.ObjectReference{ - Kind: "Pod", - Namespace: ns, - Name: pod, - APIVersion: "v1", - }, nil -} - // New creates a new server which logically combines the handling chain with the passed server. // name is used to differentiate for logging. The handler chain in particular can be difficult as it starts delgating. // delegationTarget may not be nil. @@ -519,9 +453,8 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G delegationTarget: delegationTarget, HandlerChainWaitGroup: c.HandlerChainWaitGroup, - minRequestTimeout: time.Duration(c.MinRequestTimeout) * time.Second, - MinimalShutdownDuration: c.MinimalShutdownDuration, - ShutdownTimeout: c.RequestTimeout, + minRequestTimeout: time.Duration(c.MinRequestTimeout) * time.Second, + ShutdownTimeout: c.RequestTimeout, SecureServingInfo: c.SecureServing, ExternalAddress: c.ExternalAddress, @@ -542,17 +475,8 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G enableAPIResponseCompression: c.EnableAPIResponseCompression, maxRequestBodyBytes: c.MaxRequestBodyBytes, - - eventSink: c.EventSink, } - ref, err := eventReference() - if err != nil { - klog.Warningf("Failed to derive event reference, won't create events: %v", err) - c.EventSink = nullEventSink{} - } - s.eventRef = ref - for { if c.JSONPatchMaxCopyBytes <= 0 { break @@ -585,16 +509,6 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G } } - // often, authentication config is passed through multiple delegated apiservers. If the authentication - // dynamic reloads themselves conflict, we only need to register the first one because there is only one authentication - // chain. In any case where you may need more than one, you should always deconflict the names as we have - // in kube-apiserver's authentication chain versus the generic delegated one - for name, dynamicReloadFn := range c.Authentication.DynamicReloadFns { - if !s.isPostStartHookRegistered(name) { - s.AddPostStartHookOrDie(name, dynamicReloadFn) - } - } - for _, delegateCheck := range delegationTarget.HealthzChecks() { skip := false for _, existingCheck := range c.HealthzChecks { @@ -721,9 +635,3 @@ func AuthorizeClientBearerToken(loopback *restclient.Config, authn *Authenticati tokenAuthorizer := authorizerfactory.NewPrivilegedGroups(user.SystemPrivilegedGroup) authz.Authorizer = authorizerunion.New(tokenAuthorizer, authz.Authorizer) } - -type nullEventSink struct{} - -func (nullEventSink) Create(event *corev1.Event) (*corev1.Event, error) { - return nil, nil -} diff --git a/vendor/k8s.io/apiserver/pkg/server/config_selfclient.go b/vendor/k8s.io/apiserver/pkg/server/config_selfclient.go index da1b1e733..53f179527 100644 --- a/vendor/k8s.io/apiserver/pkg/server/config_selfclient.go +++ b/vendor/k8s.io/apiserver/pkg/server/config_selfclient.go @@ -20,13 +20,15 @@ import ( "fmt" "net" - "k8s.io/apiserver/pkg/server/certs" - restclient "k8s.io/client-go/rest" ) +// LoopbackClientServerNameOverride is passed to the apiserver from the loopback client in order to +// select the loopback certificate via SNI if TLS is used. +const LoopbackClientServerNameOverride = "apiserver-loopback-client" + func (s *SecureServingInfo) NewClientConfig(caCert []byte) (*restclient.Config, error) { - if s == nil { + if s == nil || (s.Cert == nil && len(s.SNICerts) == 0) { return nil, nil } @@ -57,7 +59,7 @@ func (s *SecureServingInfo) NewLoopbackClientConfig(token string, loopbackCert [ } c.BearerToken = token - c.TLSClientConfig.ServerName = certs.LoopbackClientServerNameOverride + c.TLSClientConfig.ServerName = LoopbackClientServerNameOverride return c, nil } diff --git a/vendor/k8s.io/apiserver/pkg/server/filters/waitgroup.go b/vendor/k8s.io/apiserver/pkg/server/filters/waitgroup.go index f40be0d13..b40a42272 100644 --- a/vendor/k8s.io/apiserver/pkg/server/filters/waitgroup.go +++ b/vendor/k8s.io/apiserver/pkg/server/filters/waitgroup.go @@ -18,16 +18,11 @@ package filters import ( "errors" - "fmt" "net/http" - "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" utilwaitgroup "k8s.io/apimachinery/pkg/util/waitgroup" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" apirequest "k8s.io/apiserver/pkg/endpoints/request" - "k8s.io/client-go/kubernetes/scheme" ) // WithWaitGroup adds all non long-running requests to wait group, which is used for graceful shutdown. @@ -43,13 +38,7 @@ func WithWaitGroup(handler http.Handler, longRunning apirequest.LongRunningReque if !longRunning(req, requestInfo) { if err := wg.Add(1); err != nil { - // When apiserver is shutting down, signal clients to retry - w.Header().Add("Retry-After", "1") - w.Header().Set("Content-Type", runtime.ContentTypeJSON) - w.Header().Set("X-Content-Type-Options", "nosniff") - statusErr := apierrors.NewServiceUnavailable("apiserver is shutting down").Status() - w.WriteHeader(int(statusErr.Code)) - fmt.Fprintln(w, runtime.EncodeOrDie(scheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &statusErr)) + http.Error(w, "apiserver is shutting down.", http.StatusInternalServerError) return } defer wg.Done() diff --git a/vendor/k8s.io/apiserver/pkg/server/genericapiserver.go b/vendor/k8s.io/apiserver/pkg/server/genericapiserver.go index a47a9f566..450488e13 100644 --- a/vendor/k8s.io/apiserver/pkg/server/genericapiserver.go +++ b/vendor/k8s.io/apiserver/pkg/server/genericapiserver.go @@ -19,7 +19,6 @@ package server import ( "fmt" "net/http" - "os" gpath "path" "strings" "sync" @@ -27,8 +26,8 @@ import ( systemd "github.com/coreos/go-systemd/daemon" "github.com/go-openapi/spec" + "k8s.io/klog" - corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -46,7 +45,6 @@ import ( "k8s.io/apiserver/pkg/server/routes" utilopenapi "k8s.io/apiserver/pkg/util/openapi" restclient "k8s.io/client-go/rest" - "k8s.io/klog" openapibuilder "k8s.io/kube-openapi/pkg/builder" openapicommon "k8s.io/kube-openapi/pkg/common" "k8s.io/kube-openapi/pkg/handler" @@ -147,9 +145,9 @@ type GenericAPIServer struct { preShutdownHooksCalled bool // healthz checks - healthzLock sync.Mutex - healthzChecks []healthz.HealthzChecker - healthChecksLocked bool + healthzLock sync.Mutex + healthzChecks []healthz.HealthzChecker + healthzCreated bool // auditing. The backend is started after the server starts listening. AuditBackend audit.Backend @@ -169,17 +167,9 @@ type GenericAPIServer struct { // HandlerChainWaitGroup allows you to wait for all chain handlers finish after the server shutdown. HandlerChainWaitGroup *utilwaitgroup.SafeWaitGroup - // MinimalShutdownDuration allows to block shutdown for some time, e.g. until endpoints pointing to this API server - // have converged on all node. During this time, the API server keeps serving. - MinimalShutdownDuration time.Duration - // The limit on the request body size that would be accepted and decoded in a write request. // 0 means no limit. maxRequestBodyBytes int64 - - // EventSink creates events. - eventSink EventSink - eventRef *corev1.ObjectReference } // DelegationTarget is an interface which allows for composition of API servers with top level handling that works @@ -280,58 +270,27 @@ func (s *GenericAPIServer) PrepareRun() preparedGenericAPIServer { // Run spawns the secure http server. It only returns if stopCh is closed // or the secure port cannot be listened on initially. func (s preparedGenericAPIServer) Run(stopCh <-chan struct{}) error { - delayedStopCh := make(chan struct{}) - - go func() { - defer close(delayedStopCh) - <-stopCh - - s.Eventf(corev1.EventTypeNormal, "TerminationStart", "Received signal to terminate, becoming unready, but keeping serving") - - time.Sleep(s.MinimalShutdownDuration) - - s.Eventf(corev1.EventTypeNormal, "TerminationMinimalShutdownDurationFinished", "The minimal shutdown duration of %v finished", s.MinimalShutdownDuration) - }() - - s.installReadyz(stopCh) - - // close socket after delayed stopCh - serverDoneCh, err := s.NonBlockingRun(delayedStopCh) + err := s.NonBlockingRun(stopCh) if err != nil { return err } - go func() { - <-serverDoneCh - s.Eventf(corev1.EventTypeNormal, "TerminationStoppedServing", "Server has stopped listening") - }() - <-stopCh - // run shutdown hooks directly. This includes deregistering from the kubernetes endpoint in case of kube-apiserver. err = s.RunPreShutdownHooks() if err != nil { return err } - s.Eventf(corev1.EventTypeNormal, "TerminationPreShutdownHooksFinished", "All pre-shutdown hooks have been finished") - - // wait for the delayed stopCh before closing the handler chain (it rejects everything after Wait has been called). - <-delayedStopCh // Wait for all requests to finish, which are bounded by the RequestTimeout variable. s.HandlerChainWaitGroup.Wait() - s.Eventf(corev1.EventTypeNormal, "TerminationGracefulTerminationFinished", "All pending requests processed") - - // wait for server listener to be closed - <-serverDoneCh - s.Eventf(corev1.EventTypeNormal, "TerminatingFinished", "Termination sequence finished") return nil } // NonBlockingRun spawns the secure http server. An error is // returned if the secure port cannot be listened on. -func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) (<-chan struct{}, error) { +func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) error { // Use an stop channel to allow graceful shutdown without dropping audit events // after http server shutdown. auditStopCh := make(chan struct{}) @@ -340,7 +299,7 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) (<-chan // before http server start serving. Otherwise the Backend.ProcessEvents call might block. if s.AuditBackend != nil { if err := s.AuditBackend.Run(auditStopCh); err != nil { - return nil, fmt.Errorf("failed to run the audit backend: %v", err) + return fmt.Errorf("failed to run the audit backend: %v", err) } } @@ -352,12 +311,8 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) (<-chan stoppedCh, err = s.SecureServingInfo.Serve(s.Handler, s.ShutdownTimeout, internalStopCh) if err != nil { close(internalStopCh) - return nil, err + return err } - } else { - ch := make(chan struct{}) - close(ch) - stoppedCh = ch } // Now that listener have bound successfully, it is the @@ -365,7 +320,6 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) (<-chan // ensure cleanup. go func() { <-stopCh - close(internalStopCh) if stoppedCh != nil { <-stoppedCh @@ -380,7 +334,7 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) (<-chan klog.Errorf("Unable to send systemd daemon successful start message: %v\n", err) } - return stoppedCh, nil + return nil } // installAPIResources is a private method for installing the REST storage backing each api groupversionresource @@ -517,39 +471,6 @@ func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupV } } -// Eventf creates an event with the API server as source, either in default namespace against default namespace, or -// if POD_NAME/NAMESPACE are set against that pod. -func (s *GenericAPIServer) Eventf(eventType, reason, messageFmt string, args ...interface{}) { - t := metav1.Time{Time: time.Now()} - host, _ := os.Hostname() // expicitly ignore error. Empty host is fine - - ref := *s.eventRef - if len(ref.Namespace) == 0 { - ref.Namespace = "default" // TODO: event broadcaster sets event ns to default. We have to match. Odd. - } - - e := &corev1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: fmt.Sprintf("%v.%x", ref.Name, t.UnixNano()), - Namespace: ref.Namespace, - }, - InvolvedObject: ref, - Reason: reason, - Message: fmt.Sprintf(messageFmt, args...), - FirstTimestamp: t, - LastTimestamp: t, - Count: 1, - Type: eventType, - Source: corev1.EventSource{Component: "apiserver", Host: host}, - } - - klog.V(2).Infof("Event(%#v): type: '%v' reason: '%v' %v", e.InvolvedObject, e.Type, e.Reason, e.Message) - - if _, err := s.eventSink.Create(e); err != nil { - klog.Warningf("failed to create event %s/%s: %v", e.Namespace, e.Name, err) - } -} - // NewDefaultAPIGroupInfo returns an APIGroupInfo stubbed with "normal" values // exposed for easier composition from other packages func NewDefaultAPIGroupInfo(group string, scheme *runtime.Scheme, parameterCodec runtime.ParameterCodec, codecs serializer.CodecFactory) APIGroupInfo { diff --git a/vendor/k8s.io/apiserver/pkg/server/healthz.go b/vendor/k8s.io/apiserver/pkg/server/healthz.go index a60adfa10..43e102b5c 100644 --- a/vendor/k8s.io/apiserver/pkg/server/healthz.go +++ b/vendor/k8s.io/apiserver/pkg/server/healthz.go @@ -18,7 +18,6 @@ package server import ( "fmt" - "net/http" "k8s.io/apiserver/pkg/server/healthz" ) @@ -28,7 +27,7 @@ func (s *GenericAPIServer) AddHealthzChecks(checks ...healthz.HealthzChecker) er s.healthzLock.Lock() defer s.healthzLock.Unlock() - if s.healthChecksLocked { + if s.healthzCreated { return fmt.Errorf("unable to add because the healthz endpoint has already been created") } @@ -40,35 +39,7 @@ func (s *GenericAPIServer) AddHealthzChecks(checks ...healthz.HealthzChecker) er func (s *GenericAPIServer) installHealthz() { s.healthzLock.Lock() defer s.healthzLock.Unlock() - s.healthChecksLocked = true + s.healthzCreated = true healthz.InstallHandler(s.Handler.NonGoRestfulMux, s.healthzChecks...) } - -// installReadyz creates the readyz endpoint for this server, using the defined healthz check plus a termination check -// that fails when the process is terminating. -func (s *GenericAPIServer) installReadyz(stopCh <-chan struct{}) { - s.healthzLock.Lock() - defer s.healthzLock.Unlock() - s.healthChecksLocked = true - - healthz.InstallPathHandler(s.Handler.NonGoRestfulMux, "/readyz", append([]healthz.HealthzChecker{terminationCheck{stopCh}}, s.healthzChecks...)...) -} - -// terminationCheck fails if the embedded channel is closed during termination of the process. -type terminationCheck struct { - StopCh <-chan struct{} -} - -func (terminationCheck) Name() string { - return "terminating" -} - -func (c terminationCheck) Check(req *http.Request) error { - select { - case <-c.StopCh: - return fmt.Errorf("process is terminating") - default: - } - return nil -} diff --git a/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go b/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go index 3dfe9831c..ebb3dadfb 100644 --- a/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go +++ b/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go @@ -181,7 +181,6 @@ func handleRootHealthz(checks ...HealthzChecker) http.HandlerFunc { } // always be verbose on failure if failed { - klog.V(2).Infof("%vhealthz check failed", verboseOut.String()) http.Error(w, fmt.Sprintf("%vhealthz check failed", verboseOut.String()), http.StatusInternalServerError) return } diff --git a/vendor/k8s.io/apiserver/pkg/server/options/authentication.go b/vendor/k8s.io/apiserver/pkg/server/options/authentication.go index b203fecd7..02fed5f45 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/authentication.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/authentication.go @@ -217,7 +217,7 @@ func (s *DelegatingAuthenticationOptions) ApplyTo(c *server.AuthenticationInfo, } // create authenticator - authenticator, securityDefinitions, dynamicReloadFuncs, err := cfg.New() + authenticator, securityDefinitions, err := cfg.New() if err != nil { return err } @@ -226,16 +226,6 @@ func (s *DelegatingAuthenticationOptions) ApplyTo(c *server.AuthenticationInfo, openAPIConfig.SecurityDefinitions = securityDefinitions } c.SupportsBasicAuth = false - if c.DynamicReloadFns == nil { - c.DynamicReloadFns = map[string]server.PostStartHookFunc{} - } - for k, dynamicReloadFn := range dynamicReloadFuncs { - fnCopy := dynamicReloadFn - c.DynamicReloadFns[k] = func(context server.PostStartHookContext) error { - go fnCopy(context.StopCh) - return nil - } - } return nil } diff --git a/vendor/k8s.io/apiserver/pkg/server/options/authorization.go b/vendor/k8s.io/apiserver/pkg/server/options/authorization.go index b18a50160..5d81d9e86 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/authorization.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/authorization.go @@ -187,10 +187,5 @@ func (s *DelegatingAuthorizationOptions) getClient() (kubernetes.Interface, erro clientConfig.QPS = 200 clientConfig.Burst = 400 - // make the client use protobuf - protoConfig := rest.CopyConfig(clientConfig) - protoConfig.AcceptContentTypes = "application/vnd.kubernetes.protobuf,application/json" - protoConfig.ContentType = "application/vnd.kubernetes.protobuf" - - return kubernetes.NewForConfig(protoConfig) + return kubernetes.NewForConfig(clientConfig) } diff --git a/vendor/k8s.io/apiserver/pkg/server/options/server_run_options.go b/vendor/k8s.io/apiserver/pkg/server/options/server_run_options.go index 12daad98c..02639bf93 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/server_run_options.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/server_run_options.go @@ -42,7 +42,6 @@ type ServerRunOptions struct { MaxMutatingRequestsInFlight int RequestTimeout time.Duration MinRequestTimeout int - MinimalShutdownDuration time.Duration // We intentionally did not add a flag for this option. Users of the // apiserver library can wire it to a flag. JSONPatchMaxCopyBytes int64 @@ -61,7 +60,6 @@ func NewServerRunOptions() *ServerRunOptions { MaxMutatingRequestsInFlight: defaults.MaxMutatingRequestsInFlight, RequestTimeout: defaults.RequestTimeout, MinRequestTimeout: defaults.MinRequestTimeout, - MinimalShutdownDuration: defaults.MinimalShutdownDuration, JSONPatchMaxCopyBytes: defaults.JSONPatchMaxCopyBytes, MaxRequestBodyBytes: defaults.MaxRequestBodyBytes, } @@ -75,7 +73,6 @@ func (s *ServerRunOptions) ApplyTo(c *server.Config) error { c.MaxMutatingRequestsInFlight = s.MaxMutatingRequestsInFlight c.RequestTimeout = s.RequestTimeout c.MinRequestTimeout = s.MinRequestTimeout - c.MinimalShutdownDuration = s.MinimalShutdownDuration c.JSONPatchMaxCopyBytes = s.JSONPatchMaxCopyBytes c.MaxRequestBodyBytes = s.MaxRequestBodyBytes c.PublicAddress = s.AdvertiseAddress @@ -122,10 +119,6 @@ func (s *ServerRunOptions) Validate() []error { errors = append(errors, fmt.Errorf("--min-request-timeout can not be negative value")) } - if s.MinimalShutdownDuration < 0 { - errors = append(errors, fmt.Errorf("--minimum-shutdown-duration can not be negative value")) - } - if s.JSONPatchMaxCopyBytes < 0 { errors = append(errors, fmt.Errorf("--json-patch-max-copy-bytes can not be negative value")) } @@ -181,9 +174,5 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) { "handler, which picks a randomized value above this number as the connection timeout, "+ "to spread out load.") - fs.DurationVar(&s.MinimalShutdownDuration, "minimal-shutdown-duration", s.MinimalShutdownDuration, ""+ - "Minimal duration of a graceful shutdown, e.g. to guarantee that all endpoints pointing to this API server "+ - "have converged") - utilfeature.DefaultMutableFeatureGate.AddFlag(fs) } diff --git a/vendor/k8s.io/apiserver/pkg/server/options/server_run_options_test.go b/vendor/k8s.io/apiserver/pkg/server/options/server_run_options_test.go index 4fd8b3008..bb7e61823 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/server_run_options_test.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/server_run_options_test.go @@ -136,22 +136,6 @@ func TestServerRunOptionsValidate(t *testing.T) { }, expectErr: "--max-resource-write-bytes can not be negative value", }, - { - name: "Test when MinimalShutdownDuration is negative value", - testOptions: &ServerRunOptions{ - AdvertiseAddress: net.ParseIP("192.168.10.10"), - CorsAllowedOriginList: []string{"10.10.10.100", "10.10.10.200"}, - MaxRequestsInFlight: 400, - MaxMutatingRequestsInFlight: 200, - RequestTimeout: time.Duration(2) * time.Minute, - MinRequestTimeout: 1800, - JSONPatchMaxCopyBytes: 10 * 1024 * 1024, - MaxRequestBodyBytes: 10 * 1024 * 1024, - TargetRAMMB: 65536, - MinimalShutdownDuration: -time.Second, - }, - expectErr: "--minimum-shutdown-duration can not be negative value", - }, { name: "Test when ServerRunOptions is valid", testOptions: &ServerRunOptions{ diff --git a/vendor/k8s.io/apiserver/pkg/server/options/serving.go b/vendor/k8s.io/apiserver/pkg/server/options/serving.go index 1b4484b09..9a3841012 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/serving.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/serving.go @@ -25,14 +25,13 @@ import ( "strings" "github.com/spf13/pflag" + "k8s.io/klog" utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apiserver/pkg/server" - "k8s.io/apiserver/pkg/server/certs" certutil "k8s.io/client-go/util/cert" "k8s.io/client-go/util/keyutil" cliflag "k8s.io/component-base/cli/flag" - "k8s.io/klog" ) type SecureServingOptions struct { @@ -223,10 +222,16 @@ func (s *SecureServingOptions) ApplyTo(config **server.SecureServingInfo) error } c := *config - c.NameToCertificate = map[string]*certs.CertKeyFileReference{} - c.DefaultCertificate = certs.CertKeyFileReference{ - Cert: s.ServerCert.CertKey.CertFile, - Key: s.ServerCert.CertKey.KeyFile, + serverCertFile, serverKeyFile := s.ServerCert.CertKey.CertFile, s.ServerCert.CertKey.KeyFile + // load main cert + if len(serverCertFile) != 0 || len(serverKeyFile) != 0 { + tlsCert, err := tls.LoadX509KeyPair(serverCertFile, serverKeyFile) + if err != nil { + return fmt.Errorf("unable to load server certificate: %v", err) + } + c.Cert = &tlsCert + } else if s.ServerCert.GeneratedCert != nil { + c.Cert = s.ServerCert.GeneratedCert } if len(s.CipherSuites) != 0 { @@ -244,16 +249,10 @@ func (s *SecureServingOptions) ApplyTo(config **server.SecureServingInfo) error } // load SNI certs - // holds the original filenames of the certificates. Because allow implicit specification of names, we have to read - // everything to get this to be able to drive the dynamicCertificateConfig namedTLSCerts := make([]server.NamedTLSCert, 0, len(s.SNICertKeys)) for _, nck := range s.SNICertKeys { tlsCert, err := tls.LoadX509KeyPair(nck.CertFile, nck.KeyFile) namedTLSCerts = append(namedTLSCerts, server.NamedTLSCert{ - OriginalFileName: &certs.CertKeyFileReference{ - Cert: nck.CertFile, - Key: nck.KeyFile, - }, TLSCert: tlsCert, Names: nck.Names, }) @@ -261,7 +260,7 @@ func (s *SecureServingOptions) ApplyTo(config **server.SecureServingInfo) error return fmt.Errorf("failed to load SNI cert and key: %v", err) } } - _, c.NameToCertificate, err = server.GetNamedCertificateMap(namedTLSCerts) + c.SNICerts, err = server.GetNamedCertificateMap(namedTLSCerts) if err != nil { return err } diff --git a/vendor/k8s.io/apiserver/pkg/server/options/serving_test.go b/vendor/k8s.io/apiserver/pkg/server/options/serving_test.go index 3fc31038c..3b5d7f11f 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/serving_test.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/serving_test.go @@ -17,15 +17,25 @@ limitations under the License. package options import ( + "bytes" + cryptorand "crypto/rand" + "crypto/rsa" "crypto/tls" "crypto/x509" + "crypto/x509/pkix" + "encoding/base64" + "encoding/pem" "fmt" + "io/ioutil" + "math/big" "net" + "os" "path/filepath" "reflect" "strconv" "strings" "testing" + "time" "github.com/stretchr/testify/assert" @@ -34,8 +44,6 @@ import ( "k8s.io/apimachinery/pkg/version" "k8s.io/apiserver/pkg/server" . "k8s.io/apiserver/pkg/server" - "k8s.io/apiserver/pkg/server/certs" - servingcerttesting "k8s.io/apiserver/pkg/server/options/testing" "k8s.io/client-go/discovery" restclient "k8s.io/client-go/rest" cliflag "k8s.io/component-base/cli/flag" @@ -50,8 +58,13 @@ func setUp(t *testing.T) Config { return *config } +type TestCertSpec struct { + host string + names, ips []string // in certificate +} + type NamedTestCertSpec struct { - servingcerttesting.TestCertSpec + TestCertSpec explicitNames []string // as --tls-sni-cert-key explicit names } @@ -70,8 +83,8 @@ func TestGetNamedCertificateMap(t *testing.T) { // only one cert certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, }, }, @@ -83,9 +96,9 @@ func TestGetNamedCertificateMap(t *testing.T) { // ips are ignored certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", - IPs: []string{"1.2.3.4"}, + TestCertSpec: TestCertSpec{ + host: "test.com", + ips: []string{"1.2.3.4"}, }, }, }, @@ -97,13 +110,13 @@ func TestGetNamedCertificateMap(t *testing.T) { // two certs with the same name certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, }, { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, }, }, @@ -115,13 +128,13 @@ func TestGetNamedCertificateMap(t *testing.T) { // two certs with different names certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test2.com", + TestCertSpec: TestCertSpec{ + host: "test2.com", }, }, { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test1.com", + TestCertSpec: TestCertSpec{ + host: "test1.com", }, }, }, @@ -134,13 +147,13 @@ func TestGetNamedCertificateMap(t *testing.T) { // two certs with the same name, explicit trumps certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, }, { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, explicitNames: []string{"test.com"}, }, @@ -153,15 +166,15 @@ func TestGetNamedCertificateMap(t *testing.T) { // certs with partial overlap; ips are ignored certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "a", - Names: []string{"a.test.com", "test.com"}, + TestCertSpec: TestCertSpec{ + host: "a", + names: []string{"a.test.com", "test.com"}, }, }, { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "b", - Names: []string{"b.test.com", "test.com"}, + TestCertSpec: TestCertSpec{ + host: "b", + names: []string{"b.test.com", "test.com"}, }, }, }, @@ -175,16 +188,16 @@ func TestGetNamedCertificateMap(t *testing.T) { // wildcards certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "a", - Names: []string{"a.test.com", "test.com"}, + TestCertSpec: TestCertSpec{ + host: "a", + names: []string{"a.test.com", "test.com"}, }, explicitNames: []string{"*.test.com", "test.com"}, }, { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "b", - Names: []string{"b.test.com", "test.com"}, + TestCertSpec: TestCertSpec{ + host: "b", + names: []string{"b.test.com", "test.com"}, }, explicitNames: []string{"dev.test.com", "test.com"}, }}, @@ -201,7 +214,7 @@ NextTest: var namedTLSCerts []NamedTLSCert bySignature := map[string]int{} // index in test.certs by cert signature for j, c := range test.certs { - cert, err := servingcerttesting.CreateTestTLSCerts(c.TestCertSpec) + cert, err := createTestTLSCerts(c.TestCertSpec) if err != nil { t.Errorf("%d - failed to create cert %d: %v", i, j, err) continue NextTest @@ -212,7 +225,7 @@ NextTest: Names: c.explicitNames, }) - sig, err := servingcerttesting.CertSignature(cert) + sig, err := certSignature(cert) if err != nil { t.Errorf("%d - failed to get signature for %d: %v", i, j, err) continue NextTest @@ -220,7 +233,7 @@ NextTest: bySignature[sig] = j } - certMap, _, err := GetNamedCertificateMap(namedTLSCerts) + certMap, err := GetNamedCertificateMap(namedTLSCerts) if err == nil && len(test.errorString) != 0 { t.Errorf("%d - expected no error, got: %v", i, err) } else if err != nil && err.Error() != test.errorString { @@ -231,7 +244,7 @@ NextTest: x509Certs, err := x509.ParseCertificates(cert.Certificate[0]) assert.NoError(t, err, "%d - invalid certificate for %q", i, name) assert.True(t, len(x509Certs) > 0, "%d - expected at least one x509 cert in tls cert for %q", i, name) - got[name] = bySignature[servingcerttesting.X509CertSignature(x509Certs[0])] + got[name] = bySignature[x509CertSignature(x509Certs[0])] } assert.EqualValues(t, test.expected, got, "%d - wrong certificate map", i) @@ -241,7 +254,7 @@ NextTest: func TestServerRunWithSNI(t *testing.T) { tests := map[string]struct { - Cert servingcerttesting.TestCertSpec + Cert TestCertSpec SNICerts []NamedTestCertSpec ExpectedCertIndex int @@ -253,44 +266,44 @@ func TestServerRunWithSNI(t *testing.T) { ExpectLoopbackClientError bool }{ "only one cert": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - IPs: []string{"127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + ips: []string{"127.0.0.1"}, }, ExpectedCertIndex: -1, }, "cert with multiple alternate names": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - Names: []string{"test.com"}, - IPs: []string{"127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + names: []string{"test.com"}, + ips: []string{"127.0.0.1"}, }, ExpectedCertIndex: -1, ServerName: "test.com", }, "one SNI and the default cert with the same name": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - IPs: []string{"127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + ips: []string{"127.0.0.1"}, }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "localhost", + TestCertSpec: TestCertSpec{ + host: "localhost", }, }, }, ExpectedCertIndex: 0, }, "matching SNI cert": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - IPs: []string{"127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + ips: []string{"127.0.0.1"}, }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, }, }, @@ -300,15 +313,15 @@ func TestServerRunWithSNI(t *testing.T) { "matching IP in SNI cert and the server cert": { // IPs must not be passed via SNI. Hence, the ServerName in the // HELLO packet is empty and the server should select the non-SNI cert. - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - IPs: []string{"10.0.0.1", "127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + ips: []string{"10.0.0.1", "127.0.0.1"}, }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", - IPs: []string{"10.0.0.1"}, + TestCertSpec: TestCertSpec{ + host: "test.com", + ips: []string{"10.0.0.1"}, }, }, }, @@ -316,15 +329,15 @@ func TestServerRunWithSNI(t *testing.T) { ServerName: "10.0.0.1", }, "wildcards": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - IPs: []string{"127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + ips: []string{"127.0.0.1"}, }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", - Names: []string{"*.test.com"}, + TestCertSpec: TestCertSpec{ + host: "test.com", + names: []string{"*.test.com"}, }, }, }, @@ -333,55 +346,55 @@ func TestServerRunWithSNI(t *testing.T) { }, "loopback: LoopbackClientServerNameOverride not on any cert": { - Cert: servingcerttesting.TestCertSpec{ - Host: "test.com", + Cert: TestCertSpec{ + host: "test.com", }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "localhost", + TestCertSpec: TestCertSpec{ + host: "localhost", }, }, }, ExpectedCertIndex: 0, }, "loopback: LoopbackClientServerNameOverride on server cert": { - Cert: servingcerttesting.TestCertSpec{ - Host: certs.LoopbackClientServerNameOverride, + Cert: TestCertSpec{ + host: server.LoopbackClientServerNameOverride, }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "localhost", + TestCertSpec: TestCertSpec{ + host: "localhost", }, }, }, ExpectedCertIndex: 0, }, "loopback: LoopbackClientServerNameOverride on SNI cert": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", + Cert: TestCertSpec{ + host: "localhost", }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: certs.LoopbackClientServerNameOverride, + TestCertSpec: TestCertSpec{ + host: server.LoopbackClientServerNameOverride, }, }, }, ExpectedCertIndex: -1, }, "loopback: bind to 0.0.0.0 => loopback uses localhost": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", + Cert: TestCertSpec{ + host: "localhost", }, ExpectedCertIndex: -1, LoopbackClientBindAddressOverride: "0.0.0.0", }, } - specToName := func(spec servingcerttesting.TestCertSpec) string { - name := spec.Host + "_" + strings.Join(spec.Names, ",") + "_" + strings.Join(spec.IPs, ",") + specToName := func(spec TestCertSpec) string { + name := spec.host + "_" + strings.Join(spec.names, ",") + "_" + strings.Join(spec.ips, ",") return strings.Replace(name, "*", "star", -1) } @@ -393,11 +406,11 @@ func TestServerRunWithSNI(t *testing.T) { certDir := "testdata/" + specToName(test.Cert) serverCertBundleFile := filepath.Join(certDir, "cert") serverKeyFile := filepath.Join(certDir, "key") - err := servingcerttesting.GetOrCreateTestCertFiles(serverCertBundleFile, serverKeyFile, test.Cert) + err := getOrCreateTestCertFiles(serverCertBundleFile, serverKeyFile, test.Cert) if err != nil { t.Fatalf("failed to create server cert: %v", err) } - ca, err := servingcerttesting.CACertFromBundle(serverCertBundleFile) + ca, err := caCertFromBundle(serverCertBundleFile) if err != nil { t.Fatalf("failed to extract ca cert from server cert bundle: %v", err) } @@ -405,7 +418,7 @@ func TestServerRunWithSNI(t *testing.T) { // create SNI certs var namedCertKeys []cliflag.NamedCertKey - serverSig, err := servingcerttesting.CertFileSignature(serverCertBundleFile, serverKeyFile) + serverSig, err := certFileSignature(serverCertBundleFile, serverKeyFile) if err != nil { t.Fatalf("failed to get server cert signature: %v", err) } @@ -416,7 +429,7 @@ func TestServerRunWithSNI(t *testing.T) { sniDir := filepath.Join(certDir, specToName(c.TestCertSpec)) certBundleFile := filepath.Join(sniDir, "cert") keyFile := filepath.Join(sniDir, "key") - err := servingcerttesting.GetOrCreateTestCertFiles(certBundleFile, keyFile, c.TestCertSpec) + err := getOrCreateTestCertFiles(certBundleFile, keyFile, c.TestCertSpec) if err != nil { t.Fatalf("failed to create SNI cert %d: %v", j, err) } @@ -427,14 +440,14 @@ func TestServerRunWithSNI(t *testing.T) { Names: c.explicitNames, }) - ca, err := servingcerttesting.CACertFromBundle(certBundleFile) + ca, err := caCertFromBundle(certBundleFile) if err != nil { t.Fatalf("failed to extract ca cert from SNI cert %d: %v", j, err) } caCerts = append(caCerts, ca) // store index in namedCertKeys with the signature as the key - sig, err := servingcerttesting.CertFileSignature(certBundleFile, keyFile) + sig, err := certFileSignature(certBundleFile, keyFile) if err != nil { t.Fatalf("failed get SNI cert %d signature: %v", j, err) } @@ -515,7 +528,7 @@ func TestServerRunWithSNI(t *testing.T) { defer conn.Close() // check returned server certificate - sig := servingcerttesting.X509CertSignature(conn.ConnectionState().PeerCertificates[0]) + sig := x509CertSignature(conn.ConnectionState().PeerCertificates[0]) gotCertIndex, found := signatures[sig] if !found { t.Errorf("unknown signature returned from server: %s", sig) @@ -550,11 +563,97 @@ func TestServerRunWithSNI(t *testing.T) { if expected := &v; !reflect.DeepEqual(got, expected) { t.Errorf("loopback client didn't get correct version info: expected=%v got=%v", expected, got) } - }) } } +func parseIPList(ips []string) []net.IP { + var netIPs []net.IP + for _, ip := range ips { + netIPs = append(netIPs, net.ParseIP(ip)) + } + return netIPs +} + +func createTestTLSCerts(spec TestCertSpec) (tlsCert tls.Certificate, err error) { + certPem, keyPem, err := generateSelfSignedCertKey(spec.host, parseIPList(spec.ips), spec.names) + if err != nil { + return tlsCert, err + } + + tlsCert, err = tls.X509KeyPair(certPem, keyPem) + return tlsCert, err +} + +func getOrCreateTestCertFiles(certFileName, keyFileName string, spec TestCertSpec) (err error) { + if _, err := os.Stat(certFileName); err == nil { + if _, err := os.Stat(keyFileName); err == nil { + return nil + } + } + + certPem, keyPem, err := generateSelfSignedCertKey(spec.host, parseIPList(spec.ips), spec.names) + if err != nil { + return err + } + + os.MkdirAll(filepath.Dir(certFileName), os.FileMode(0755)) + err = ioutil.WriteFile(certFileName, certPem, os.FileMode(0755)) + if err != nil { + return err + } + + os.MkdirAll(filepath.Dir(keyFileName), os.FileMode(0755)) + err = ioutil.WriteFile(keyFileName, keyPem, os.FileMode(0755)) + if err != nil { + return err + } + + return nil +} + +func caCertFromBundle(bundlePath string) (*x509.Certificate, error) { + pemData, err := ioutil.ReadFile(bundlePath) + if err != nil { + return nil, err + } + + // fetch last block + var block *pem.Block + for { + var nextBlock *pem.Block + nextBlock, pemData = pem.Decode(pemData) + if nextBlock == nil { + if block == nil { + return nil, fmt.Errorf("no certificate found in %q", bundlePath) + + } + return x509.ParseCertificate(block.Bytes) + } + block = nextBlock + } +} + +func x509CertSignature(cert *x509.Certificate) string { + return base64.StdEncoding.EncodeToString(cert.Signature) +} + +func certFileSignature(certFile, keyFile string) (string, error) { + cert, err := tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return "", err + } + return certSignature(cert) +} + +func certSignature(cert tls.Certificate) (string, error) { + x509Certs, err := x509.ParseCertificates(cert.Certificate[0]) + if err != nil { + return "", err + } + return x509CertSignature(x509Certs[0]), nil +} + func fakeVersion() version.Info { return version.Info{ Major: "42", @@ -564,3 +663,55 @@ func fakeVersion() version.Info { GitTreeState: "Dirty", } } + +// generateSelfSignedCertKey creates a self-signed certificate and key for the given host. +// Host may be an IP or a DNS name +// You may also specify additional subject alt names (either ip or dns names) for the certificate +func generateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS []string) ([]byte, []byte, error) { + priv, err := rsa.GenerateKey(cryptorand.Reader, 2048) + if err != nil { + return nil, nil, err + } + + template := x509.Certificate{ + SerialNumber: big.NewInt(1), + Subject: pkix.Name{ + CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()), + }, + NotBefore: time.Unix(0, 0), + NotAfter: time.Now().Add(time.Hour * 24 * 365 * 100), + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + BasicConstraintsValid: true, + IsCA: true, + } + + if ip := net.ParseIP(host); ip != nil { + template.IPAddresses = append(template.IPAddresses, ip) + } else { + template.DNSNames = append(template.DNSNames, host) + } + + template.IPAddresses = append(template.IPAddresses, alternateIPs...) + template.DNSNames = append(template.DNSNames, alternateDNS...) + + derBytes, err := x509.CreateCertificate(cryptorand.Reader, &template, &template, &priv.PublicKey, priv) + if err != nil { + return nil, nil, err + } + + // Generate cert + certBuffer := bytes.Buffer{} + if err := pem.Encode(&certBuffer, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}); err != nil { + return nil, nil, err + } + + // Generate key + keyBuffer := bytes.Buffer{} + if err := pem.Encode(&keyBuffer, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { + return nil, nil, err + } + + return certBuffer.Bytes(), keyBuffer.Bytes(), nil +} diff --git a/vendor/k8s.io/apiserver/pkg/server/options/serving_with_loopback.go b/vendor/k8s.io/apiserver/pkg/server/options/serving_with_loopback.go index ae47ce548..7f1920642 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/serving_with_loopback.go +++ b/vendor/k8s.io/apiserver/pkg/server/options/serving_with_loopback.go @@ -21,7 +21,6 @@ import ( "fmt" "github.com/pborman/uuid" - "k8s.io/apiserver/pkg/server/certs" "k8s.io/apiserver/pkg/server" "k8s.io/client-go/rest" @@ -52,7 +51,7 @@ func (s *SecureServingOptionsWithLoopback) ApplyTo(secureServingInfo **server.Se // create self-signed cert+key with the fake server.LoopbackClientServerNameOverride and // let the server return it when the loopback client connects. - certPem, keyPem, err := certutil.GenerateSelfSignedCertKey(certs.LoopbackClientServerNameOverride, nil, nil) + certPem, keyPem, err := certutil.GenerateSelfSignedCertKey(server.LoopbackClientServerNameOverride, nil, nil) if err != nil { return fmt.Errorf("failed to generate self-signed certificate for loopback connection: %v", err) } @@ -72,7 +71,7 @@ func (s *SecureServingOptionsWithLoopback) ApplyTo(secureServingInfo **server.Se default: *loopbackClientConfig = secureLoopbackClientConfig - (*secureServingInfo).LoopbackCert = &tlsCert + (*secureServingInfo).SNICerts[server.LoopbackClientServerNameOverride] = &tlsCert } return nil diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/cert index f03753fd7..fade595fc 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/cert @@ -1,20 +1,20 @@ -----BEGIN CERTIFICATE----- MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAvMS0wKwYDVQQDDCRhcGlz -ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE1NTE0NjE2MTEwIBcNNzAwMTAxMDAwMDAw -WhgPMjExOTAyMDUxNzMzMzFaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj -ay1jbGllbnRAMTU1MTQ2MTYxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBANLDA8hPGaFWjGXhwQr0nGmAEeEJtyEvRGz+OBzljbvVoprxXtkVFZZ/kTvp -XST5e2HXffZyYFi8krnCzWOnOmFSnI2QlfhQoEEXnuT0qkbeydbIJykknwjgHjXA -gWSqgklaH2eSJ92ADwmxEajwka/GzSL4xY5vOa3mz7mI4WwASbWU1YGDXJQxkZ76 -QLamokI5w7FdBPoupyMlMjy7hVL9sueiRpnTcASQ4X75MeAog/YBTS71+FjzguTL -Hil6rhFn8euesiOqXw6Vv1JGZFxuD5/qlsFf8YM+MGHkMbgwE80P7Pleem11cTRw -GIMdH5YoJE6zZzuDjwrD+sPDvxECAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG +ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE0OTYzMzA2NTYwIBcNNzAwMTAxMDAwMDAw +WhgPMjExNzA1MDgxNTI0MTZaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj +ay1jbGllbnRAMTQ5NjMzMDY1NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMScrdc+XlUPHsDvnN2fFxSSQrhrKBlrHBcelaiFwR1vWt2EXxErVUoRGA+1 +jvQ5Y4NePS46Zpq2N+yibiWjaC0fsS4W2UvPAfdD4nxOp5SaTBy5A0XI+JU8QmbI +Rls+C/fSeYaXSKp5Jq41uTKGc+QwT9pqCeV7N74DSc6kvNh7mIBc4YCOzMnhQq5H +KQVCeDPURxfh7Ew+v13dLYDq7V6O1jBjfg3Rm/RRFnM78kcc51QTOo9ZSs5HgahU +eM4YirHz8ujswhgxzH43TeOGds3McGKv1HMHKJKinX02IHJBqV6U5y/AH92wi0Sp +IKgJ4GJaj/Vda/kPUtf5cL2sOt0CAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG A1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wJAYDVR0RBB0wG4IZ -YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEAifij -rr7l+SIRHu7V6epRGuqKqSHSzOPW5jAIP+zg7eWyAXECzNS+8OfSS+8ZnX+VyT0P -2yKtAxiKYQX+OIWc+CvpjhrPpwUTuyGu4zx5YuUDetidsWQFgvCURU7E9430HX/O -4lVH7yPepjJYxocQ8up4Do6PhRYPah7EnhptOOgqDbkNH+NfJf1Clk+U54Wt88BZ -xH2J5a+kyoSOilcrDasF4T3AzMJ/EujShd1l8ZeZj/Ue7iaeJMYjmCSzFR5+dxFS -jYNXZTsqx4pD5wPzRuMTpBgwxC8gsZ/e+0Sv1NvTJaD9vUI99RlTHO/8Xzmz/okl -GTuj1HyeySAydsof1Q== +YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEALlZe +LJ3i6WQhpgV3jPWuIBTXJ0bb3cbYnk4JLWYW9sIjMakfAlZK9VrfRZKOhI8DsGsG +PVcYOyc5TQM0JkcsCKajyA6HktpMFEtxBfSJOlRAdvvj1GtRnifcA5xBqn1SzL2H +tFx5etii70spZD3jDht2bKLZmL2NbGGVOWiKdtz6qR+V9U4F+uYCq+phKgnLeDz3 +RiMIGvDpliWU/R1jgdi3RENtP8QGhjiwVDGYJBB26ZQGDkd4HYPZj9bROMknnRFk +fbP/P+cmvXrwScvrXLFkNQe/4LfJAJnod4ropQ84z/Cu2JaFbJau4TSlbp57y9ON +7fpK9SV4bTCyO34Uew== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/key index 48e3ea9ed..6eae7eb18 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA0sMDyE8ZoVaMZeHBCvScaYAR4Qm3IS9EbP44HOWNu9WimvFe -2RUVln+RO+ldJPl7Ydd99nJgWLySucLNY6c6YVKcjZCV+FCgQRee5PSqRt7J1sgn -KSSfCOAeNcCBZKqCSVofZ5In3YAPCbERqPCRr8bNIvjFjm85rebPuYjhbABJtZTV -gYNclDGRnvpAtqaiQjnDsV0E+i6nIyUyPLuFUv2y56JGmdNwBJDhfvkx4CiD9gFN -LvX4WPOC5MseKXquEWfx656yI6pfDpW/UkZkXG4Pn+qWwV/xgz4wYeQxuDATzQ/s -+V56bXVxNHAYgx0fligkTrNnO4OPCsP6w8O/EQIDAQABAoIBAGt9KiCuttOh4FjV -mi6MMnlb58JtwggaozszLEsQiAiUHCoJj+YG6sumo9t6WRbSZiqwTH20N48KHYq/ -3yBD2XJpP46zfsj11cVc1pzOa0lZtnbj/ZTuKG3OX5nqZBODIo9mdz3LPKmq9gBr -XiZbCvIq4dREK/1InJIkdSyastzxG7DQSDgNeNLLkkPuxm5vStWRceQjkgNCjNda -6lYwI3JekArB+VXt9MiiOvtrUbJJt6/ZcsLvlOvNGdHvJS2EqFhr5Jq65ePGvuzT -TKrtQ+dq1j4ch/+9ogdext+LOpEZ/rKO3xQ9SNmWmbbKQpZB6wJirX7ph/nqrri9 -+rDIhUECgYEA69qlAS/SoU60E50PzYKDNw1zsx8PImBGDOx6bHLtRT5PbzDzvC8d -olJCoKPaGhNnOjzXZXexrxICtHs2GXB9zDYJDoqBP/cCgL0JheSuA9rTKIbRS801 -ICkamYrrLa6SM4cQHh71DHGWTspAPvBzfZPP21OcD1bu0x47b9A4j1MCgYEA5MOv -DjhHlGwPCfWnNw37hSYYugLCoAGMUvAksY9FSrkfeqppZJynQsz3lcx9edsBbRDl -/omJ9IKa+wbdBXvC/szgsBqnjSUVZ4sgrZ2uE6I2T1EU1ZUmg91B/obvAxXWIGRJ -ci8ek242PWUhzsjqkqhpz2cAQHXHR5nW8kSFv4sCgYEAtrFVsTanFHZPfQXjcNBQ -7bsIzU4YvgsPGAGxzwGzEzjx9PJZSoLAlLTdkWt6jUpMYsswGhP+Wds8pyrtvATs -HNwaZd4Zwj+G+8vybXm25ZuCh1jvFKVvKmtMhHUcOPWJoEpVzM80CCCQSpXV8Cr3 -euWdU4pPT36KXpSDe9gxh6sCgYAt+K0LHIA18WksRTNvOt4aqcc6Sie2Y9lBKYUW -MYZpN759thUr5Ncv82Sls8xbWol003qEpjsU6dIfNAfifDZ5Yc6dVR3qnVMp1amh -ehhrVaO4WMDpEuoEgcgrUA5j/lVjeQPRcGqikflQaSxcE8Af7Lwms7o3OfPsDZxG -X0LJdQKBgATT+JS2XRcPp0Gsdb/jhxzEh7D9dETm0XtiNFOG91Vout9S4BPWHuYv -KT0+zVMCyg4YKUJB8MTVuKsdmXXrBv/iVW+I12Wtb4Y8AUc/FPl+Qg+QLr+z8x6t -JSIFw0YuGcJNxX9+meZywcVWe7RTJuMsHp7A/3FnNoWr6c5WQdhP +MIIEpgIBAAKCAQEAxJyt1z5eVQ8ewO+c3Z8XFJJCuGsoGWscFx6VqIXBHW9a3YRf +EStVShEYD7WO9Dljg149LjpmmrY37KJuJaNoLR+xLhbZS88B90PifE6nlJpMHLkD +Rcj4lTxCZshGWz4L99J5hpdIqnkmrjW5MoZz5DBP2moJ5Xs3vgNJzqS82HuYgFzh +gI7MyeFCrkcpBUJ4M9RHF+HsTD6/Xd0tgOrtXo7WMGN+DdGb9FEWczvyRxznVBM6 +j1lKzkeBqFR4zhiKsfPy6OzCGDHMfjdN44Z2zcxwYq/UcwcokqKdfTYgckGpXpTn +L8Af3bCLRKkgqAngYlqP9V1r+Q9S1/lwvaw63QIDAQABAoIBAQCCiJ9mM3M/t80s +PSmBflk9gCmp9QLndVRuCRFFlJ/1IfRK89KGPKXgid7WtyzU+rEWC+BEq+NpPid9 +BQ5qEMZehxcESYk1KpfciYZ6D2J1Z8e2niMNFvPraNmREdCcTWJ2w5eJgzFsdQj4 +SpTNdbTFwEmT8ijl4dvNXLOI7ZivhJ1vVGW2qUJQyR5xo+GuXZZVVJW6vndkzHoA +SJDSii4PMAisibu+Uw8JQM1rYFD2olvSWSnjz+kCk2IbrqhVPOW9PoYETn2DxXfY +0miUGq4KwtNjFnqJO+CDTJL6Y7LrZbKdSVTKfiY5ReLckWhx4RKn01T9RhsrS979 +bee+iynlAoGBAOVDKy9t3kN7FTQJyMGa3QAVUV8B5OPUIyuUOhzMrbIFECtYFXxY +jsnRNf1i2PbVsl9WDrPikNCVyn5Tf4xU7YUH7/Jo+Ha978Fu9tNf95RK+A2GKtiO +8jQa6nkII8Fmql9o3xjCEQD0VBirrm1h3sbC3ylKL4u+yC0a6W7vFRRfAoGBANuK +tIvCRGoEyn8nzSXUez7+/9sIwU7jV6lXL7qgdukr7o/ZBqer48CDlehXU48yiVpB +TuMZnloj/Ndf9X07t/yYwfCP7lpdq6lR7EhG5yS0WjgHjv5+QKLVA7ocrEufgBKA +Wdb+96eyOb1bgBMprtYA8wbhblhut8rk+i8SkdpDAoGBAJPxY0XI/VvIamdZRP6C +Y8iw+QB5JW5Lr6JolZOOFSxCjiuaPMswDnx3kAKCLgYi4mcZDoXQV6jycGhSk4VI +LLni5FkmmeduK/BEHe1LCWXddvKrOKzkmbE8CUCvGvurt5e4AfdlDDn0cOw2pWma +dXsHt6BaahIgu+Y3bpmSmKS7AoGBAJGlhX2qleSX5RdSemD8g/8ZAPh46HXDkSaA +9uMjDYBHau73ldiqyl+vbEZFmOPJLSI5bXJwToOSmGzx9lTsx3TGivNjKUe+GOIt +vUl98F6DX88IBK+FZrAgDWbtGsjYugiMKg3d/MK+FFwxVdhgsOK8on4QFDqKyVfL +bMbJ1QUtAoGBAK4nM5GZyefXylAnq+pzGTStu0Q1AVzN0iWO0G0Q6gaItvk82Scf +wVoEGE9a2pDCR1I1mbJn1jRxd6/GtXvR4TJSxPILS+B8aZFkxl9WIWjv/mnKJkVL +PmSNPbieuban9TRBu6nQfWOfLMHmBnG/QXbx2X1WCRoXjICT41gJ5et3 -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/cert index fb9d661c6..3fb375592 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxMjAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -MlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCrKOdmF5x2F20IQTM9VDNX2uYy46ESLm4aWCNB -84ULr735NtJVRwHJaYVJd4Os6xbf1lLq4yBmXEyOH2h62XHimlNh4rvsF9OtlCQU -+7kJU7ZtOcjHqplJjlD7t9sIE2H6tctuQp0lxiMTWKS5dcU1DNW55hCEWGujw4Tn -ZB8OIA+ce/+b0wyIWNuRHmUKWExwS276eBc9gmPxppHFQqg9sxivYh9BVD0WNVj4 -qSUvUmomEMUlw0lLdVmQ8IxOVDzelnlEssPWlnqz4XZG+nhb6qYR79HBvO4A+J6F -dpLWuLfLZz/Eqp2QnZrVq28txKoyz7TQs9t7kd2/yskVnodlAgMBAAGjTjBMMA4G +bGhvc3RAMTQ5NjMzMDY1NzAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +N1owHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTcwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDhpeY6j6ujZc2W0paC9pmVHlEhbnsH/L0N3JjA +WooyZWgsARSlv95Vh2M1gVymu7mah3HHzQkVe6vN5bfngOO4A2d3fxYP0304+3YE +TCariZzcEk9Ot90VHNasTVMOqZ2qdGRUvEXbpRWlIhA+T9FgNxpBDQV5yb5w67Dl +kBM22wn5l/YM/4HqSOTVQON1SmmLUPlnWtzxVRDKPzI2zxpKkzW4U1bYgdwM/Xeo +B2GjU+1UsBlJWGrRQhCkiFuZ92agls1bsu3+PE2leoQf6vZE+pc0m89v0lqlcgOQ +TcI19BFvLjUneDbu4kFZWDO+f23hhEcHut26IXtOoAIvk9uhAgMBAAGjTjBMMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAW+ao -mOU69+Mc5aq9G7n8Ugr7fM7tnTMS+2FUXGvSjzxckjb96KBtpjUPFpRdFSExYpaV -uLNK84JpFpypmurTCXRj3687JSm7linPr5K3n0DTaaF87G+MXErwXDcOUz89BLAm -xnZRCdJKAytZloNFR3mFb2p65O/Xo/wlhF6yx1MwHNF/uinLJdINhvPk4qae6od8 -WPrqKDrSPKaZw/rSgBzBPAK6bQRmtXqwdQjjnPI3bbeSRonqaVqX7VFdhNJgPf1P -c3GfrlynsxD90eLMAWOmVGMRZkhDKviDXsYVh4HUx5O4+U5HG3p1CwWHlHKiywY/ -ELhtjVoRehPFuOIFEQ== +AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAHlVy +2H1FxDXAJKeZkFCNAHOiThcm79s7P8+BXnYbQMgdHAiQIQFQDDwbntA607m0FRoZ +1H1n/rzkRXRrNJRPEd3aSnurq6oMMZa1Pai4e2f+kyThpIw6FtI2y/Jb7lKB428g +9AHtKSd71MEArOvWHi1IcX6rmH/vU5ezBgPpjtEC/5bI8PJMqr2osesjppKwwwjf +BTq+AjvxltPDb+fykto41IMzpM7KRO/vat/dZ5OZZOhDpbJlAAWUfCdlWcL0kqTt +ok+biBB4xShOwpSyKCmJg4otlvN7qJ34fCjYkQY+PXzGS6YV34Wj64F8mReTt4LO +glampIa1cLUWPMlYPQ== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/key index bfaab72fd..f9f40c6df 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAqyjnZhecdhdtCEEzPVQzV9rmMuOhEi5uGlgjQfOFC6+9+TbS -VUcByWmFSXeDrOsW39ZS6uMgZlxMjh9oetlx4ppTYeK77BfTrZQkFPu5CVO2bTnI -x6qZSY5Q+7fbCBNh+rXLbkKdJcYjE1ikuXXFNQzVueYQhFhro8OE52QfDiAPnHv/ -m9MMiFjbkR5lClhMcEtu+ngXPYJj8aaRxUKoPbMYr2IfQVQ9FjVY+KklL1JqJhDF -JcNJS3VZkPCMTlQ83pZ5RLLD1pZ6s+F2Rvp4W+qmEe/RwbzuAPiehXaS1ri3y2c/ -xKqdkJ2a1atvLcSqMs+00LPbe5Hdv8rJFZ6HZQIDAQABAoIBAQCEsq/EjSW2wK69 -qZ8KO0+bG5FBfw2PxQOD1TVwmlZaGySUJJapmuWdu/ukW85wr8sKO2YJyZGDCqgn -v94G8LLE1pUy3NCJWGe6uZHH2uk4e/iBcj1h37f8OSQ8I+zis/RQpcVUdLzVXmov -Q5hiWRZN7Od+uwmvMcYyLxHJO+x/y8ILEhYnlub1lgwK2xJQTXapKmn6Jza+b38T -lN1QMRry31sE7JCLNGeuTUBmStr6/cop90O7fg7zcAFtNVNwCfMze5Dyw/Uib2X2 -E0IXQKFbQMVELMzHv4NZRTSViKXRF/6q1mGBRycqZ6vI1RLVCB6VrvH7YVzyMe0L -dCcNuWF5AoGBAOHU/RZLsS5fYVkJqxLaOesn3un/sKWLJypTMzI5CxRCropskliW -wZkehMRc0limbQX1CX2Iw8z0e9xA+6kfqCjW4Udq5EJRtDt2UjTV03V0rslgktW1 -qPWtRULXCTtJEtcWAPRHUfj+JvlmMBy1lUtIdZfZfhTsaLCzVz0xvmpjAoGBAMIG -O6SSLhu5/xwQaHuOY0pDsUcI8OU36ZeJ+ZnoL4A1xhm7YdI3Jhv/kKn0IBIa/r0Z -l8BwmdGurYbMa7/lju4VepYNak2cmg4eck3k8NXr1AS7q+F41cAnuQ1fBB0cA2lT -N2qEhxWa9saYlJs+R3nupaZzh8IrAOm/xXKg2k2XAoGBAMvbkHtH6LGLuDy/1YY3 -KIF2hGuHPNazPq+eW2DCzZWEfDrIt3Lw4+JtAjyf7eHImjH+eIqxos6pBAZXQtXw -lcQH9WSawWJ8js3+iUbYnwIwSnfOjb4NNnBP8W3c36B83lz6p/HbT8wM4PHRpSzF -XfePeVeSJZaNshOQUPgUp2cxAoGAGZyPBPNS6NANj9vOnvi1vJjg7tqMSgWubRWG -gD14/7iZdM4aZJBpFGsQ4o5aKWms1LNrJ7j1ZQtk1pVnZ8ZarqzhKKuOq74PS+vS -9NtSuzpNG27WioXT2XCk6dHwDhOjk6SrfQEPf9eb2a1MeI2pC7xn22gGtKfOkAyD -eNUo2/MCgYA/piWrauh8Rgr8zSZT5LGfGJhqvgRTHxo5/TNf2R57LKg5PLIbDm/2 -JnZ0T7WfDGjl9dpJ21rVOVtGTzz5+YMm9w3Fn5Ob0KWbt2cbWH0j05ZyNKJVD4iJ -y2WwXBYwQCkoOVddIbt0Jctfz8bt2kJYiZypLlcmOzegX+MM9l9+Gg== +MIIEpAIBAAKCAQEA4aXmOo+ro2XNltKWgvaZlR5RIW57B/y9DdyYwFqKMmVoLAEU +pb/eVYdjNYFcpru5modxx80JFXurzeW354DjuANnd38WD9N9OPt2BEwmq4mc3BJP +TrfdFRzWrE1TDqmdqnRkVLxF26UVpSIQPk/RYDcaQQ0Fecm+cOuw5ZATNtsJ+Zf2 +DP+B6kjk1UDjdUppi1D5Z1rc8VUQyj8yNs8aSpM1uFNW2IHcDP13qAdho1PtVLAZ +SVhq0UIQpIhbmfdmoJbNW7Lt/jxNpXqEH+r2RPqXNJvPb9JapXIDkE3CNfQRby41 +J3g27uJBWVgzvn9t4YRHB7rduiF7TqACL5PboQIDAQABAoIBABg+G6MVBmqyqEjY +7SS627tCm5LM7Njp1WHk3mBkGc7aSDvaDd7U400rE4SPFmYvavxoKtg9dglh1Q50 +7LIpjc2aSAZ1l+gxX5W8pmxFxi3NxhV6vhyF8nGvPH0cfZzoqjDC+niEFblIXi/0 +newj5SnCIcb1YC46d4RoPgQb24ScBiQi3DeuqiDPQO3cyePyr5TEpeL4djB8YgK3 +yAgKFotsox1sMz1r0AX4JdoC2cYBh6qmGs+qdkMYW3O5XKjkkWS7dglqHIchhsrr +P38kuyp30fMrE40+5G9hKi3WO/nl3FP/eDM8BD60QF1edXobszfd8BsVnrBfbfjP +wDP51rECgYEA5/hLWVPXvTkSJeWzkEYx2PvubClr4fZE8j4oYTikD3q86R6UkEhe +c/yZd9WNBgwUrLG4SV3TaqEWvyUEnsaNbI1YK7e4PrhMSLLZ0G040jW8TA1SE2kT +fnJ5g4ZRWTNvksBTcs3QtMC8FzFazQ7gKIYz+SXopxeww5D8T/ok/WUCgYEA+QXz +/mYUnUMt4kWfcMDDbiYCgVSJK71E5M5qH2yxjB7NFLcl0+udQ5FrrW2YEgr3DnSV +Okbg4ZcmdnjCOU7Xu5BlU0GWe5lXiOBf0sUxrNU3OY5voVPYgSXJgTPRzguTpetA +2Liv/7x5dZ0krIKRTCKWu0iwcdOOaPrEouln740CgYBcrrckXLyBLTFUFP/2sCUw +hhBQBQjGwsfvZehqV+AtEyQxnHdNYqzieNW0rI1pEiCck3GHVsam/vAAtUCwU7Kj +4aGN7hzeanKIRXWDsnAWhUPTuyrE+KHCTujAJUWRd1yn7NIqt5Mg9TTxq1WVQtFL +P7u6W2wmfu+wY9h79/0ZhQKBgQCQoRt/wmvwlmbcxxD+HIakv6Cu2pk8dRXBSf0q +uSc5OV5kzKZEudBBwQDn3gH3YLTyiVVuXmIXw4DMSACN5jO3tPqUa0BqErpbPe2J +bYwXVFJZtFczPI4/G+I3jxAoemLLd6HW/RUDE8T7QUReiQq4TFJ8/Y+03GkWoaZ4 +89SwtQKBgQCmWHxz0eXQk3YRk0kupSrK88pZoc9wvcWYhzkiQpP6+hYPxH+n+U6s +NjHnQAVlRUIP0VisQRkBC4iy2ca/gVVhKgygVBuHC97fKAHlpUlO6Y7Ow031stAy +K3zrTjuVwsz8C6bFCxHl5ojP+0cSoK7qej09vj/te1DNvkYuE/0j4Q== -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/cert index aa567b371..8fb51107f 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/cert @@ -1,20 +1,20 @@ -----BEGIN CERTIFICATE----- MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAvMS0wKwYDVQQDDCRhcGlz -ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE1NTE0NjE2MTQwIBcNNzAwMTAxMDAwMDAw -WhgPMjExOTAyMDUxNzMzMzRaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj -ay1jbGllbnRAMTU1MTQ2MTYxNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMrQ1GVa2g73UTCLjPPtp2rHk4awf8MEnKktncYMXbwYVdPV96/d5UumhOEX -rOjylMR2WZvkxhr4pn1Tl6emC/yFMbI4J32tRgFtIR0yNq8wFmVKsjFbF0+tnYzP -iux4rm0mo3gxsGL2ku7MoAWE4o2td2jXdJqvQ74ZD+zdQDshVLdCKWNinROwaHm1 -0ItX+d0q33gITtxE97g4065jIhhlj3bSA9EhvTWIPn/N/yV5Wg2GnVoElF90zMsq -O51JWvCJc7ctuVuqe2KmASDHIEW9VRuNJHlNQQ2mls2if5aPxPqijm6pQ6D7JN+j -NUK7ujyqztcEQlAAr2pWwfiU7TECAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG +ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE0OTYzMzA2NTgwIBcNNzAwMTAxMDAwMDAw +WhgPMjExNzA1MDgxNTI0MThaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj +ay1jbGllbnRAMTQ5NjMzMDY1ODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAPGTpeR8wkr9yxMV8LLI7UaImRF6T0ZT2HL7cmjZDbV3Ow9L8UXvlQ0SdKbT +ph2IU5Ww4h3xSiXXXGh0FSXALs1Ieg8DmMYKHNcnOXpShwuXBJ0NCpPSLnAO+2hg +Jq+ULvBTGjQhvCX+cjI5IquYp0sSbERS/+46cGrwWoye67Z9Xo6enNjHG8YZf35B +Wspvm0awUw1KcXkp+lJ9zoblBeXm+uXdMhzEyRpghRslwvtPKyU8YhTN63p0Ru1E +Kig3pctotL2n1/7+tR8yhjEstLiydHYWhLkX6wsUv+rNirUGVUBjF5VFtERzMPRK +0dh/hs3v2JSby56IxRcqqTSzvfECAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG A1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wJAYDVR0RBB0wG4IZ -YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEAcuDD -1KgI9gzAa62/NNV4eUsF1Sp4VLQ4J7PsecW9NxHkHHuZQrTcQPc7WCiEnUQVNq0t -YRT3WN1zQkf9e4UV1DB+RpezzwkVXNAjHgHQP+xY6LtEbgHK0qTEuecqWEjAzpKs -6wIrE7/4HQSE7i2BGSPBZqlZGSY3rHUi/mwVslWpITbZvcVXLKfHyOwcUK8D6vL4 -8V6KIQjG6n4Mt3D6fZvA96tNdoJfdYeVhAzGcFbQEIU0S5vk5rOv/ExkFx6XTyej -4M4eXgNnBAczHdn9LPhmdwE1ihw8gbSotBeg6wgECsdMY0VXwEXYABtsh7j3Z9Hs -jSjHEb9uzP6jdJt06Q== +YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEAEEd0 +MOqC0POVtxGCy/BHR6sVcf1r1BVTt28p7u1yJIdrOKuknlILt9iSNfFcNPRWIP+u +7SNPT8td6yViBgn7UMjvFxZgQn6kTsgTfdRV7eMxoX/jYzt0g44k0oVGv+xiJ+8q +m5Ng+tMOMuY1+JganxNad3mwdff4uKxXuVQsV+mjXBwaJHIdxBmCFqg/dGB60lyb +fxFjuTAT8xyL+UE3VUoCLFdNDgIsm0v3uj8nBsASW1LeZSbMQKUJXGlvEpj5U89d +B9ZouygfISPKQ02WYYDfSmtGCqX5sFZRh2uSPp0/UPUB+hUk7C0KN6TgsB9kOAD1 +Sa0X3+KhMRVOk7riaQ== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/key index 7d11d65ae..8b9712cf0 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAytDUZVraDvdRMIuM8+2naseThrB/wwScqS2dxgxdvBhV09X3 -r93lS6aE4Res6PKUxHZZm+TGGvimfVOXp6YL/IUxsjgnfa1GAW0hHTI2rzAWZUqy -MVsXT62djM+K7HiubSajeDGwYvaS7sygBYTija13aNd0mq9DvhkP7N1AOyFUt0Ip -Y2KdE7BoebXQi1f53SrfeAhO3ET3uDjTrmMiGGWPdtID0SG9NYg+f83/JXlaDYad -WgSUX3TMyyo7nUla8Ilzty25W6p7YqYBIMcgRb1VG40keU1BDaaWzaJ/lo/E+qKO -bqlDoPsk36M1Qru6PKrO1wRCUACvalbB+JTtMQIDAQABAoIBAQCllKKi8O5wI4gc -awIzr8XsDm4qG3TjQaOpFz3lD/mC9Bc2MEzcPvvRrGx13L9lG49Lahg0hy0ZngFG -9nUtAQpuKkvtZZ0QJOOvjGnpjTJKCqduIPKkCutYOLUU3ehcsRYutMnm+iI4WXiS -D2thtiDEbGe9p5FiLE7RJ2LyDZw/6L0q/jobRnRM9CPio0jzjLSp/l8XAAcrLRjD -JyJ+I3BDhhdUCmpkdK/eH11WHtYK+J43c61Dc0YxewD00rbUPoKYq0D9/VFbEjrB -ckiDAokmpftGoHZiJUigNfQOk8IYCrxd6WWUJtTb6aLsPm8/B33xy8BXLp096gpZ -UqKgWUYBAoGBAOqBrv4Ee8yJfXceQ1NbTnz0SLq7vlE6tFCjbMhij4g7BITgfd5U -QcZKOYJtSfnNsHVOf0vS+pVT/mDlpOZLCRlDsspGZrgT0eRBkEP4KOsqIPu03mGv -D1xuyjcXZt1Mjl9oucFQo/2s3So+g0zYRxc0vUt3XJgEwr3DlYdqnfJRAoGBAN1n -knJLku2iDsRoLtnhZ2AGyXWX7O3yO2zFJzFD9gT/NZLwJ+9GLBJUv9wKa1nHFLgO -xiYXoIfynEU1iQdWWYs+ByVWKffPYGle8d+tmxAt72Qe19ig+K4crb3sQIBfPExK -MbOrjoFNkBU7epj9QM9oIN7TqZ2EOaahxPJUwrThAoGACLhbznxSMi/mp3hLnpzl -lUXsMm1qzVB2hg0drXHkzncLWvmSFKNjcsEt1EjGGHDqn+IUX7hvsv/VlLrVX+7o -XrUiv9zQUwYBpxA9Ehn3Q49kfJekMVO2KYTBJj1LiO0g2jFlvueFwZgc/UYn0cK1 -GgrPAzBkFA8RQsc0Fz4Cs5ECgYAucRJL/URFqm+0jTH+rARWJTZO/15Ijz4d08Ej -2WCarbncJ5oI28xU0AgqrNjVzSewcBDqXpxix+Y1skQbEObZiVpQX6GQBKTxlWPh -CnZzT19evgWCwElJpGRhaVQiWVe5nPqN+Jd80fs+KOrPepgEqY/zjayPiPPa2yYH -uvXYoQKBgQCyIrkA8sKYDbqC/uipgFiJWNK5C8g7424Ue0zLa12Y/P8ToVDrtSJT -3Fera5vKuCeQo9COcIxaC66pKTeRxx0fcEmrjKxluK/oqM1wxMNomTqiEIP1IgFQ -l2ZGPZ8lXMaN07TlHaKYxcJuUrQNBFe2PWuJ1IO8Zu1EJMrkHyAlZA== +MIIEpQIBAAKCAQEA8ZOl5HzCSv3LExXwssjtRoiZEXpPRlPYcvtyaNkNtXc7D0vx +Re+VDRJ0ptOmHYhTlbDiHfFKJddcaHQVJcAuzUh6DwOYxgoc1yc5elKHC5cEnQ0K +k9IucA77aGAmr5Qu8FMaNCG8Jf5yMjkiq5inSxJsRFL/7jpwavBajJ7rtn1ejp6c +2Mcbxhl/fkFaym+bRrBTDUpxeSn6Un3OhuUF5eb65d0yHMTJGmCFGyXC+08rJTxi +FM3renRG7UQqKDely2i0vafX/v61HzKGMSy0uLJ0dhaEuRfrCxS/6s2KtQZVQGMX +lUW0RHMw9ErR2H+Gze/YlJvLnojFFyqpNLO98QIDAQABAoIBAQCu+8LrSU83ILSr +I3ZRGmd8cs9lMJIhn/Ql/Wq29ZoPesjl4J1oig0OBfNHMAGgXLImuJRhGfkahe+i +nYr/6EA+ZCQ9od5UfNi9I+VnbEXzqDUoSV0DC/ilJMUIqrT68zw4ygkt/82YO8Ge +DXLGlvF+2F5h8zj854msfGMqfqbAbJDynA0ZDuq8SORUb/1RIiAZRrABZ1n6HsXv +cZb12wcycbxKTPfISkJDJ+PUVmCcm/eO3jLDgy2hAY5bCG6+HIO/N407Ze83TA81 +nBRM2WEA9BJbRmmB2yAEy2aJamT5lo5qORElmW0gEpAEceRgYi/VjPyvwjOw7IW3 +SlEDaYbNAoGBAPzt80mwWzgLH0SIqUadXbJILqZ1j/0sCr4r9CfIPppbZckaXbaC +iokh3dRaVBndI8z/aPz5+wmvNjqxQ4Jz+411ILK7G0ogYRJcTaQB7Vc2QTPtdu3t +HE1xCktyTAcyVJtrVYfpqaAKZ/eEnDmatxrMW1nmnFlZxBZErnSAjMl7AoGBAPSC +anORXVXqbM6d7XKXiXYLkagmB92LP36DQ3OXiVIH3CD2weItRvqup9+nIdMJMDyN +PR9CXSQXclFjVqpgPFKEAUNcGbTea45Kykw07CUYEdYRXRYtij0hhsRon+T6vsE7 +eEQQySG0ub6cTsFi/AuxWlPCkQLIhfCkVW4kvqyDAoGBAKBXEGXkgM9Ubav6nqT/ +WciNbdVkrbUnWGAaaRtXHCiqTCpiponu03f/mirmYG5M/EcWmy3UI0qOYmhuu4dV +k2CnoeTsLG6ffCoxjZ6tAhLJeCg9H6nRKKIHSSlu+beONoiYUI5qmHe2YRZOYOM7 +q1w3tKmXQgJ6n44mWBnO7HFFAoGBAJF5Rnyb8Dw9zZ7gt3WGU3K4T2ELv4JAZvaO +goMzlbAInR+/sHsxFRnw8FBQz/8PaHOeVM9UXLYsfQePYvDbcQhnIZlCIslJzBRM +yy+sDRPEzlfe3NNlJOpaGCSjWv6RcQzmpRdaJVC4hgqyVOkaS3tpeaR8Dmrpg0c5 +ftqZYhihAoGAMRbt+21F1BD3AGDseGIg4MQIEPfk7nh/cVFBcnXAqV49dmm1/g7G +L2itzJlTb1oOnlY9qBksocvnj3w8hsrWFvt/s0wv1e3uUJ1elCb18Rm4UQtr9td6 +XFqEgDaDYyj1iEmn+PrjQc+DqHn6JySLW4LTM82KWwDnMttvwLFhaOM= -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/cert index a1626dbbc..a402b3e80 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxMjAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -MlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDpFbJZhjnd/Q2UXW0AhBLJSz30mpVaVgpttoJw -KO4Ae4lkc0OFFHElzgltbPRBLBqFnIum6vP3BwTyxGo7ISGqADdUFHYgnkkFtq3X -tsToDm2j5n3BMsDPMsZgf9rKcKm8fHpqrS7ljit+Xp1oHfIuW8QLTJqTRMNcjMzp -u2xHKPG84J9A+W11FDDJ8NtIrH4qEnJH9ux0Kosy+VFzTasNapNTb1X0JBTDgteK -ck+oKv0T53NQnFF0A/Y6w6NEtV2SN36Om2bTtNOUrtmEAcx7+ldXHFn841Nr7Ev4 -P3Dfoj3KRv9oFj5Z3yvNz/G++MZHtUoYcNSQ7rv8jcm/r7pZAgMBAAGjTjBMMA4G +bGhvc3RAMTQ5NjMzMDY1NjAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +NlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTYwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDozgb3GKC3n9wREqYUm92/T0+NnEYkaWOitXAH +BW/Gj9PAF4sggnAey62H7mkBaUpw3s3RXyrqnRqrXVWvWgbSpf0Elp3zfos4raEf +hgWhqMh/SEf5ETHNRyfebxTSeQYRuZsvAPEsRWKf3AKFEykfW9y/GnKYM1elL0nx +Fgh0tq943epjHuzKfVWp8LxnFd7fyL+BQsvBNnYz0SH0F9oTUU3nDCS6Os/+EtNQ +SjP54HQ78XczI9AMvsFUS7yFEQdM8VW9uYhdv/Oyi9SLywhOCHSnV9buJ6F8URzO +B5Cawdteew7U+EAXbEwY2D84NARF/J8iA3Eh7+UKd27WA+pJAgMBAAGjTjBMMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAslMa -ioN0mqxCpMeSIoHQfEt25w2nVFMi1chWMuwGFP2V2tl7dJgs4DYyzSB7/2IBYmxL -WqgQH3rXk1TZUfdoOyjjks60EAtrtuby1QlQKAWckhclgB3s9s2G1P+c/JeXHM2b -8TaTjfb7ukKB3M1oZVq3/yKvyMVa+4XTTN2GyU+smifH65BE3uF5KJSGMW4eqkxT -G5lmOxTo8/onNB2XNSVFispW8z3x/cJW5vXw37aaEuBJeaJnZARk87UfAGvWbowC -AOyf0KQxI4q2j9LnK3Co6pOIc1XHMT04Nf9FOsCOWYwTvJJtGrzC2ulKRE2AVJ/E -IFko8n2DmztSrQsYrg== +AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEA5vjR +Q4Rjx8ko8+Zt9gRceKCVWEmdZLGkjwdW04YaIcrh41svm+tgxwUMdQ2beNjUbLZX +DAVvK99HiANBc9Ee4DyQFkLI2z0EiAJpuxMjZlyzMmKLeijOkIkxYIshhfc2Y2Fr +NIf6OXmFBEjqsudxkQiGfSqc443GseJmmiuhW3JR1a6ARgut4AtPsPv2TijX7tcR +Z9tjzAMiubNDQq0g/Eh9vLZkv8tNTqoJ5N5XV8jcovNWRcIIzl+lXBfy0o68LwO4 +Hn/MzcMxOdbNfFw5nMaDuQK4oO0vT3D9nedQkdV3keLZtagN9/PO1XtkCSQ5q7Le +LS6fs5zA/9sR2kEuGw== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/key index dd55d3817..91de1492f 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA6RWyWYY53f0NlF1tAIQSyUs99JqVWlYKbbaCcCjuAHuJZHND -hRRxJc4JbWz0QSwahZyLpurz9wcE8sRqOyEhqgA3VBR2IJ5JBbat17bE6A5to+Z9 -wTLAzzLGYH/aynCpvHx6aq0u5Y4rfl6daB3yLlvEC0yak0TDXIzM6btsRyjxvOCf -QPltdRQwyfDbSKx+KhJyR/bsdCqLMvlRc02rDWqTU29V9CQUw4LXinJPqCr9E+dz -UJxRdAP2OsOjRLVdkjd+jptm07TTlK7ZhAHMe/pXVxxZ/ONTa+xL+D9w36I9ykb/ -aBY+Wd8rzc/xvvjGR7VKGHDUkO67/I3Jv6+6WQIDAQABAoIBAFovyPiW1SEt3uk/ -VQPUFqjIckqI3a08iYB2E/Zt/9kz869oYgHGLRmhpUgv1jq5Y/G65tZJJui4UJPW -p/wFD8+FkeL4n9RzKnIJgy5qS7o2ivnWH2Z3yt7hGJ0SG4glG6gQyhUouXKdFfsp -hOJaY/DIFQ0CMPU2sBjJaiguGvFVC1tFdZKxTur+n4gT6Npydzul4jKXEwRBooCS -+wdpthtpaEvVMbUdIpT1NBApZXp+0W/ZMPxWxldeKFn2QmnICZ46898J5Jx779A/ -Yvrmi3tRpL/IvkQBqsMkCy3KAUd7bs0bRqWjwS95scdu69KdElBZP8DfnLSLFlPn -U0tUvwECgYEA9BaUfUEZXijfzcX2LXwF+H4fg2gYbi1Xnkt9ThF86QLw+QGzDpjE -ibsDp1jIoVLByLEMZW6qN+2qjiq73OUCIIp1JdNm+Jsv6l7OVvQg+h2kQ7zdsAKG -9Vrv8R65jcAnxnsqbLWhQTb4KKk/rc6nNiweP5ZXMErdhbAvofWvQskCgYEA9HWm -PHKxGYgI6RiUXMUV9XJ5d2Z9LWDslJEsdxeLxUfCWnvB/1U/M02NQECMh21LM6Hi -ngzVYaUnzOUEhTetY5zDEoxDb5cG7+l2b1uMXAf9HWvKbLYYnow+LINqzOsOQqVT -afZ/A+2hR9Id/hptf2pwk5AEoJPDh292iK2scxECgYEAgR1soLEN5TQD5wp/hWHk -mqTEsLMgsS9E+NP/zYsMowlORLm0aNVAqYaGkUAyqLtpDGszHniijAEpRhiu1VNC -g8oZ289u2bTlbLmHtpFe3E9PtBE0x0Ue9KyM3eQdzTDHGYPPVj/hs+iK7p9QsvTs -mIhP29z/8+i2M2CWYbrfYZkCgYEA5uOz5gYBpXapy9cuUczIJ7I+bXq8oj6YVN4l -HDp+Bg/3zlRzb8FJVyBZWCVfVY3x6Etvag3/ACHoTIrGUTi8KIhoar1V+DCyGajs -9tKF6GqXM9GaOEFpUV5uXsak+fTM3D+gYEWzw7cOjHI1Z8n4P879kzIEXNITbHjn -gMJgTbECgYEAjhvyw6eyk0Gnxn4iIALPRnxk8O8FxkbT+gLybsHjxMgowe/3vg7E -y+u6vECmClzXxynk+6sKcDWN/8eAZ9mzn64rmm94WVkuCpXlKNhSlm1yW9iQc7BL -uuGiQ3hzIcqzFSLj7gIf7AeJ6lrxJvIzAnEr00fKTP1E+DV6aAdgr+8= +MIIEpQIBAAKCAQEA6M4G9xigt5/cERKmFJvdv09PjZxGJGljorVwBwVvxo/TwBeL +IIJwHsuth+5pAWlKcN7N0V8q6p0aq11Vr1oG0qX9BJad836LOK2hH4YFoajIf0hH ++RExzUcn3m8U0nkGEbmbLwDxLEVin9wChRMpH1vcvxpymDNXpS9J8RYIdLaveN3q +Yx7syn1VqfC8ZxXe38i/gULLwTZ2M9Eh9BfaE1FN5wwkujrP/hLTUEoz+eB0O/F3 +MyPQDL7BVEu8hREHTPFVvbmIXb/zsovUi8sITgh0p1fW7iehfFEczgeQmsHbXnsO +1PhAF2xMGNg/ODQERfyfIgNxIe/lCndu1gPqSQIDAQABAoIBAQDBke1Ar32SsJzu +pS7qm975HxzqhjHcPLTXqT0I2YBi/Vv3sJvB4DMRqBEVoSo2PjHjP56qpBKvGQn/ +yo9gSd66b8G9eu7Cc0mXSudZqror/IcZLiSJ974NDUkdLgeGKZLeUhGyN3pQcTDb +8rc1pwTeSid1zqvR2X7ankNA7i0BvP6UXlvWM8kUvfFDwPXhHPZtkFELc4TeGIzB +e/l9Uk0DAgplkhM32s+0rTZ7wmcSUK9eh7/kiQCUKvdCVwegsK9iCVMaYIMggut1 +3KEHuVIbuLdjFu/tF4SN85funMIPxD7rKf38aDrR1vhQc5tq88dKwVrD8EANcA/f +34mAWSIBAoGBAPZLAGJ2McxIoK7ymyvGdNta0glzzbww20xLB3MHYpo+cgff4DN0 +3nA/es49So1m/r0MKjnC0qxVMceTrU4u43nROwbLNlFBZ8hzoEVobCCoykWKkhQO +hS6PkxBZ2s8nsSQCr3X+CpHd+JqT7Y98ydWVnE+kDOFIPr16j1SbBJS5AoGBAPH6 +73BDmHk4fBb9J2edNtx+7/1/+Lbb96qyy7LnA9zxdXgqjeZwFW/tNjtD2l+TPWlR +O1L0NkfnhzWPd7rDlQA7Tzr0TLF/H34+ycbaorc22M6GEg9zJwRY42EGbYJE5uRZ +Sq4jXOTOAta/lb+UjqWI7eYyH89SKlYcDut1VVoRAoGBANucUvJ427yBAi4dC3nE +EszJNcHR7aAhnFlyCWlrK2PHzJvy5xJa4kEKiXE+u6xMK1bccwZgDsQ1jxabOowd +SR6FD3HmXz+i52yYlU9uZgPVHc9WWRzjOaQjx4lr5ayTguNONbArXrdkStlikBBC +wCHfrqpg6E80wSTpFMbnFvWZAoGAPNSDOqqTeu27LCBJtp9r+jQi6owwHu/fK9c0 +o+21J+a/TA0OjP5iNTfhqTZegCZIiuAz1J+1wY+visRdKeMe4ucF/OELIpe9eAQa +v1WZEAvGpuxHQAEHru0Vg/+UqeneTUsxHeOf55juV8Pjxjx3O5/XhkXVf029fNYi +3ggqA7ECgYEAgowePEGL7l27raa6F9h4wuosfuFFdrrcOJeGxNV9jAe2s2KKoQFO +lCv/AcCsRepf9G235TqQ+if8a4p7OsHL9kxOspKBJKnwq3u+jgcJTl+HLWgnDjIc +Yk2xlnRC4N4OiGQrxjOmFXQdXiBK3T4CJnw5g0MynrdwiJCCCnEIG+A= -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/cert index f12dd8af1..e477a0f1b 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDFTCCAf2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxNzAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -N1owHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTcwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDEEQd6arkM654iC4aXORLAKz4hMOXbwXB9kauR -T3xeMyULHsIkC9jH248y+pfELMfk2ELHcvAeaS3qFoZ1LFJYfWnyJJo97JpDPDg9 -nUhk5YiYEXWpUoJ+n+baRcxm7oyg5eG0Oyy2qd+kXoyzX7JC2IDGmvT3oC29t5ce -KlXVclDW+lzbHYy0qJAg+al5v2Dcz835WUPDe91XAlDYq88sV4xESFuiafDcgg4r -uGvgm/Tvhc+Ve66RXKGAcTh6LHYkcuaWcjc5deimkdv7pfyJFtRS6/Co/QbSlQRf -e5yWxgqCGBpnxaE3O4lTnYEKFyKk5hchwoY/MZSLrWUJ0P9JAgMBAAGjWjBYMA4G +bGhvc3RAMTQ5NjMzMDY1OTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +OVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTkwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQD2NQ2T3x1nBhqWOCjiED71R+j80XsFxSMZXNJB +wUCCGZysf6OGO6M+NYZ2qov58gfGrcZYBJWwuSRF+0NeoVzkCu3AJkTKXSdtv2vi +M248yBUhvwPwbTcoMyG7p6LhLlmlPpP/7n9yVfVtRzFgy4UPYAlJmTnakk9jDKXM +gi717BjntQ01+2I/HIZls5B5vLwWuHtWrdng39Evn1RwtJrLUVJE5b6/+otvokXB +DpKMb/aI230uw9D3Csi+6iAKK9JuhCEe/S3ezJWg5SugG6UrwGBLZYavXP7iiB9p +u32XIe8lMqQfsiur7iCQehwxTdMJ7uR5STS5eqfoV2SdnlN/AgMBAAGjWjBYMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD AQH/MCAGA1UdEQQZMBeCCWxvY2FsaG9zdIcECgAAAYcEfwAAATANBgkqhkiG9w0B -AQsFAAOCAQEAomgRUKZGiw+cUvn/HbqL14PNWKpbY/KjLQib675Qv8BrfDDKGPTF -sfoN4f0RSxikwxzwn0hm2oc/vOiMR+d8AdDrJvBjnKUdAAWMSlpnVLgi7I1weydw -Cua5DX0EENzgJtoXBaSnVSDKAfFwarIChEVYqqUe3e4UU50kSaH29DPDpxctgDie -r1mNE77P0BnDRflGF+5J1PoA6nFJUJc9uEwd2fw3qhjBNGaKGD11KjzqxC+ihAW0 -fgBqjP+YUDZH7+jtSMW8wLPW6tfxGFYK0yFclFxKREOv5tY7Hd0UMpy/hsooEl/+ -b3+9Q/j+16l2t9TzyYl3no6cVj8VwOjP1g== +AQsFAAOCAQEAuVVTMV237szi8c9Oy5ulsmgYkp6MqfkKryy6Zi6r5UtJAWToAFu3 +dvHKnSQNgiWDewVKn+pMGNZuo3o6PGxdq/E2ZQ6/oCxNRThb7hC5IK4Yot40EUQ4 +ZavrmON0velXZJ3MwbzSzstLnJCR3maO+Ko0KPC/u4LADCQyeVrEZ4IP/RPQ2KZt +mdmeHTm53tLPrcNSnaoW+tMs6JxAT30xOLnjwYfEtbMCVhGB+aHQIGFS620qZ+dn +oTqrjempIIos0Vu68ZhCaDwgB9FiNtFMplxrBvOIfWO1Dz9AwPxP1fCMlZwtFJt8 +vuRu05WPJelfnEKXIuGhuGf369xyfw5cIA== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/key index efcd27b09..27ddac795 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAxBEHemq5DOueIguGlzkSwCs+ITDl28FwfZGrkU98XjMlCx7C -JAvYx9uPMvqXxCzH5NhCx3LwHmkt6haGdSxSWH1p8iSaPeyaQzw4PZ1IZOWImBF1 -qVKCfp/m2kXMZu6MoOXhtDsstqnfpF6Ms1+yQtiAxpr096AtvbeXHipV1XJQ1vpc -2x2MtKiQIPmpeb9g3M/N+VlDw3vdVwJQ2KvPLFeMREhbomnw3IIOK7hr4Jv074XP -lXuukVyhgHE4eix2JHLmlnI3OXXoppHb+6X8iRbUUuvwqP0G0pUEX3uclsYKghga -Z8WhNzuJU52BChcipOYXIcKGPzGUi61lCdD/SQIDAQABAoIBACi8IQGeCrRUf5Yz -LtNcWDj0wwPCVP9DQUvVZ//Ys84eciPNUCiNDYz4YNgGmGF5rE4vYDBwANNQpulr -pKPTgYhBBjH4yNL0xVgSutySQOg1iBuQBRIYwmPsdNoEhmMcTLthB3Oal7+bq4tK -2ZCq4S5iLN8Wcq6/6MDx08PAp/SgXm6dyyaj8zoTMU4CMd+4/oxVOhLk8MJXHXXD -QDi/uDHSpZ3AY0T9ZJl9MDURn3ZLljdoAHft6FJIdbK/BfZCtgc+tlKaADIRDkJB -HiBjgRxsOdiGIUwwkx1FsEMCojkszmywIxx/Y/whAZ0GStsC9zSxEoQwgLOL+xTw -uX8SRwECgYEA5IA+ElZcNEqZW6xyyrGPxezMCYZbJsBsGTVJpKMnN2h+0eBMw2W6 -+WxFFpYXeh4p0QE7z9BrGhsXcjLXvV/om6ihU4P8HOLH6cbBSlk/AqdEJ07Z+0g4 -JqTZhNJoVuCgo4DopvuGahvSM+YppcsXbBs4lLvZfWeMp1Oq2IkrK+UCgYEA26mI -XbAXMfI2GQ7Ic6cxJFA0+1jW8A1xPIT6vbtilQdT7OvXeg2+INKS0fBxVEfNp++G -ngD1gE2k/0L7YqL5676DGwTrEf1P1P9pri8oE3QSohjTze03zZFwo8l8djkFrFDu -LRf4Nknx8xh40n9qdp6UZ9OnXP8dSAzFNd6Vd5UCgYEAiLIHcCTlyAqQr/z8NzH+ -FqPQdCpCQW5/vJzaT3mjLkx/AcMzaPlk323b7uUfali9H2GjjHDcgaOPZSvxUEMd -/nDlAfdFTWqFud7DJ104irfR18oeMWtE3ClmT0UoUkDTGL03cR2rjbLTD2UzqRFU -E8I9GQ0/0PuvczJkVGHKx9kCgYAZWIR9mvXyM2p+lbAXeDE5aW/TmLqkVEi+nPF5 -twd2/rN2YPgqAy/vBZ0fUEkjWm2mdQLpdF7fgRYKxiXPidKgmwjxsy2Uk9AEWbxN -9u7+36POxGKcHkUUGTYQEA2mbonzChuRZHSlfv7F+Aro7v7P1Rh2qntjRaSRTbfr -sVU5yQKBgQC6VbCAlThNxdf9f26hR7mudkPVtr34V36H1PV+k45Gc5l2zGwJHb0l -wIF5H/APsSnSB1Lcjlmr1pr8YwO5acXEb4AzJX9W1f/827yC0rzFiUxAXGq8IvJ4 -Uc07SaaQdjIALH3qDAJbIO6yebV68w1qEyEALc1nRLJsaDcle+tuow== +MIIEpgIBAAKCAQEA9jUNk98dZwYaljgo4hA+9Ufo/NF7BcUjGVzSQcFAghmcrH+j +hjujPjWGdqqL+fIHxq3GWASVsLkkRftDXqFc5ArtwCZEyl0nbb9r4jNuPMgVIb8D +8G03KDMhu6ei4S5ZpT6T/+5/clX1bUcxYMuFD2AJSZk52pJPYwylzIIu9ewY57UN +NftiPxyGZbOQeby8Frh7Vq3Z4N/RL59UcLSay1FSROW+v/qLb6JFwQ6SjG/2iNt9 +LsPQ9wrIvuogCivSboQhHv0t3syVoOUroBulK8BgS2WGr1z+4ogfabt9lyHvJTKk +H7Irq+4gkHocMU3TCe7keUk0uXqn6FdknZ5TfwIDAQABAoIBAQDKBSg58HZAxcpk +/nnVXL08KCAt6nlGd8bgFcDUgYy78+YRyL3V8/NzpRnLHw+yLH1i8c3xBPoKwy/X +WF+kM0V0PN9urjf90Ef9DneoaMkIiKiGQyUpT4RVsPb58oh8urqGE33/H6RlndC/ +NQ54PSbWQdf9EwRcq3cGcCdPUnbUA6Ur/m03kIWYMnPKZeXqTCA8AMfsLuoXyf3G +H9Q/ReGWok2fOkw8I/2D2HOXh+vnPoOOWbxf75DAt7tk2tRrgvQ7cI6TOJo6AImD +E1rHU7lrVhyo2AK+8BfjihGgtgt1qCwEeviuJn20wRQwTpi3r+aflaVCgsZADoc5 +6bEkjP/pAoGBAPZVyIIg4W44lHz7xu0DMAbdK2CwaYPPhEewVNTCmtq6wvP/CKz/ +gZRv7HLFrEAPuMuSPi0+0lzbUf4IfHeP79jzPEsoHlzaSyKVho91uttsTYGRS0yD +M2Kd7uavXH/lRR16h6TlGRgNTAfWh8I+WimzBi1IHP8LQPv9hS5CUseLAoGBAP/d +/FLXTQJ4bsb3Yune/xoerrMo05cUY8BM6WZ3s2wdPSMnTkh921CyzGzfWLpDHrww +rFBrbs0O7YijRU5gjwddxVMT/qcwNEETEWw38X3kfPx8TCYKT5OsD3HoiTKMUVJG +ehdADEm8mh918pgSvW/hvFaW98rIWjVwTt9djkJdAoGBAOkQJJMp9N/J3IOb24wn +desomn/yqQIy9p61MK3UKZtFFGqyI006uSjt9DJq4BwEQ/0nMniwdWuxfhPxh4G/ +x1fmWmdpX8DOMERaYGOfKdms0HAEPc/4Wke10XCk/clr7EaFxYy3zVQ6UHMiAHRB +diD55qA1GGoeBa/lH3qy+YsdAoGBAKP4j65LGaf+pAdQHIyCAvurNAvOmyKTx4VC +BMVM6qfbaQWxN8LPHRBvNQCEdWkQgI7bpmH3J0+0RFcvQsgCq0ZuOnmOM8DS7HnT +jXPLujASkGKCCY7LRsn9FvzJp7rEH41Zav6hZf6PJjoJLUl1oP8lK7xWDUBf+yeJ +7JHKc9NlAoGBAMhca2WXdxX1R61zdjqa7Da9fC1a8cdkPHsN9CA6ZMxGgfrbZHsY +YbqPhjuupOJe5B5MZ12oRqye3u6SuzoJMcSBOjKMLX/ME5fOxNRiAGgm1WEbDeFJ +3+ZyymShyUbpRLOg4fUC1vptzSJ1i93rXOZI6Vs0rWMj+PKDEbmFLiT8 -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert index 04f1c4679..bdeb4090c 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDDDCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNTUxNDYxNjE4MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTkwMjA1MTczMzM4 -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNTUxNDYxNjE4MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAnxZMbMyZyqo8bHLl0jIec0a1BLX5eATduBdGk3Kx -MSZRCqi3JSSb5Z0Ec8rrc0DaMPwEO6RrXyOJAK54rpIRVcPB/z5kSVphZV1/IEdW -sFzs+Uq51e01vdg4epjcETXdVeNOwyAXHnK4LzYSOBsp16CRgzzomKh/KGHOu7qx -d5XtQB0O0Non+rY1lwt1pKDEEKZL+5yrnViTMSImotho3HJdr185wF1bps/OBvqw -ZtPfk/RECkOviGrqocPI7wkZWBnimygniadd/3t7fKv9b0UVEOo0l22jtrhrY4Lt -lRv3oCvxostJ5LYuCVKfkg/nmD+//Min1DSw558p0fMaRwIDAQABo1MwUTAOBgNV +LmNvbUAxNDk2MzMwNjU5MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE5 +WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU5MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAwRrWvzL0zR9OFg1ipRU+Pvd9v+WN4ILKxU2jxlut +vZOevsyxflzRNOQImejpdXEtA/yZTKNYOdU+dMdPDdSsMPFzRgzQfiJDKqJw4jB+ +SF2XROuZEYMjxoJtueAGnw1DO9tgzn40NtHrPJNKadrYljEF+zycNLcPf78GK/ug ++5rK5MkpNVmxO4yjqxk5ZB3KD4Gol3RaheVKYmTfjNIAO0wk8O2NbvG/JxOPTpDS +aElgpfdy3Bxv4JJpjgNKrHEUYUqkwlqmrinTw8MSfKJq0MJ8nIx8HRojrYrf6Jh8 +zDpPYuqlUygcwSz0sQEY6UceaupQmlvDT9QLLVBm6aOibQIDAQABo1MwUTAOBgNV HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB /zAZBgNVHREEEjAQggh0ZXN0LmNvbYcECgAAATANBgkqhkiG9w0BAQsFAAOCAQEA -gmzYUGlxNpWGGWbgMyYB0eVAPBopTgno2BDCQ7+gfhn/fw+LPhp4Upan110U9J0O -klBpI3r9pXq1RXzEB03otwyEy1PKMIh5FzxKg21AAAZAQm0CyDDSCgYf6S4Beow2 -tpgH5u49ZhNVZtDYJtI87KXqW13i6xMA2vz7c4dnMln/SugHxVPb0a8jkpB2GrS+ -GYm48g2QJDQ3Fx/iTwm2b0+LVW+/YbdVMN8aNxuFmi3n3GZ9HT1v7NNyieE6VQ3/ -T+hOJXwFThG3EbxrGuQWqFpFGvrmQNllUp7sUVBS64YsOlHSLCejpWnkmPyhUMRm -nMz6pU2/DHLE6+fA5lpzJA== +jdyL+g1UlZ9UsnYA60iu3n9O8nzUU13z6d3TR3vFBiaTAiVYgcEoL5BmhZgn5jcW +AlQqmVicma4rypK50GZL7/fJBwiaUjkGNBh4ybfO2TRyXbmTCtMg+1FUe/LptxD4 +IWvJvf/Y7Vv/Lb1Gh0MXUcNeyLThletz6tJI3NAQX3meZm2J6/PBoERP7KXo7C4F +K21/V3aD8Zj7gs7LQLePz14ARAuovd/LDFmAHBcL3EIXiegDGe2c34IKupTPiysE +KIWAgOWSBQ9iZw4Ak7eFSDPIO9Xj1X+D1Bcb2EMcYw/9xJt8JFAqFFjMHPcKxCkQ +oY+IHfc38TMOEeAr8N+W2g== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key index 20ef7db2d..146d1f7b1 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAnxZMbMyZyqo8bHLl0jIec0a1BLX5eATduBdGk3KxMSZRCqi3 -JSSb5Z0Ec8rrc0DaMPwEO6RrXyOJAK54rpIRVcPB/z5kSVphZV1/IEdWsFzs+Uq5 -1e01vdg4epjcETXdVeNOwyAXHnK4LzYSOBsp16CRgzzomKh/KGHOu7qxd5XtQB0O -0Non+rY1lwt1pKDEEKZL+5yrnViTMSImotho3HJdr185wF1bps/OBvqwZtPfk/RE -CkOviGrqocPI7wkZWBnimygniadd/3t7fKv9b0UVEOo0l22jtrhrY4LtlRv3oCvx -ostJ5LYuCVKfkg/nmD+//Min1DSw558p0fMaRwIDAQABAoIBACdw59GxiA9u1Twt -4DyUoGgEB6z7ULYovq99VcoIjVWaIk16Nq3Gvb/XhdsPXABe+7lZQdNnmBcmQDkj -CFh/bjzNI7OcTFDDT5JJ89KU3TEsWLQViq02+jPu/1GlxCmgKRe6GzTVJ+Ysmu1Z -gnrWgTEsZecbmq7+V0gzt4Vja8wxw1O42agBt9f3LNkvsbVb5aNBOd91q2Q5zRqY -TVCExtawJmIkpKHxfF/09A+G0GVsqaRQ7AM7FC2H3QwOri7XpJLpKM0r7hZrAgfn -09n0TqnR8PNB+p9igGY1DP2alk1T3w297jFBLGIvEwCZ85/TbhNlXXNksGP0MZSA -/r6H4cECgYEA0dksmvEt3+mnNvCPiiR2C5xTEamYYt2wfi+VrLcV5uDJDA5l7y+4 -DxAXUSFtcG7t1m6SIvty+TmtKzPA6JUB45DuHI3C3KN5XDTD6m1eCT/5G4DBejmX -KXnyb6dlPoJOdak3XFirDfhwsGVDQoV7VTVKE9Atai4sorCGjfiiq2sCgYEAwhMt -wJ9WEXZKCNq4wTIOUBn3w3KrgK7vyAxt+XeDHdkDvX0Av05gAA5RUZecH+LE5nfG -9gK6qdHEAmyxKb/oZqTLyz8cAiIpFYkEhY++QFihY/2FZ8jlevuFhfc9AgNkEF8d -/Yrsd10niT4CsThVVGPp79lh1IQNg63qzYTCP5UCgYAabQvl8ytAwE7TZ1XcIp1O -9v+rAL107c/1BA8IMgIrEfGfeAy0I0E9fFxDVj9O4llHIKN8jke7RN0ezKSlZWZY -fv7NT7jTSi7VQrvNQLqP1aOMKBm1R51WlsnF78GbLpOs04NqOKxJ1Rhzzjy7Gs4e -O9i5SAUAExKB5lL7e+0YQwKBgQCoLaaAPZOAHlmZwrBH+vCcSWSDYmNsaCwx11OV -0xM0UlMDace0AF8ArWeapR8OIp0ueq1XkpXfg3+v+jCsVTk3eaeAwXesAZ5Ioyvf -8eiUKjnxREjO3zC9mijjJpUfoYCdD1AV3sV7yqXwMGR03rRTJSIcTuyQFL8BVT0c -S+do4QKBgQCEXYWrV2BU3wt/fmuyb82f0LZVP6ODNNxCWR/3PD9fclUJT1G6H/Pf -rXBR1bsJB7MHUpfaop/DJT+FcaJiVf0gmQlsSEaV0zq8nfanP4BtgAsnR0r86PHr -RyjDgD+q3xawqeEdYXwftpElBkJeaxrJrrypL1SGI50h7ymS6xAFeg== +MIIEpAIBAAKCAQEAwRrWvzL0zR9OFg1ipRU+Pvd9v+WN4ILKxU2jxlutvZOevsyx +flzRNOQImejpdXEtA/yZTKNYOdU+dMdPDdSsMPFzRgzQfiJDKqJw4jB+SF2XROuZ +EYMjxoJtueAGnw1DO9tgzn40NtHrPJNKadrYljEF+zycNLcPf78GK/ug+5rK5Mkp +NVmxO4yjqxk5ZB3KD4Gol3RaheVKYmTfjNIAO0wk8O2NbvG/JxOPTpDSaElgpfdy +3Bxv4JJpjgNKrHEUYUqkwlqmrinTw8MSfKJq0MJ8nIx8HRojrYrf6Jh8zDpPYuql +UygcwSz0sQEY6UceaupQmlvDT9QLLVBm6aOibQIDAQABAoIBACeo73oNaSHH0C3P +SfdFyab9BaKn7t+xfRvQulY+9gv9iZj+SWX+gikuvGV/5JLuT6SF+KY41iHqng01 +8hKRH1xd+qLkdt2xA8J54l1SQF10e2D4UlO6b1qR5x9J15JLEwf0IonGecrYikvC +pIHhJKKUJvpWlG5vOouuHAJkh8ekwz17cEle6IOPY+p9hiivk80npUzbdybnHK26 +pNGPICich8sUWNaiSUia/TCwIDzU4NkNhsOxoV/QZOTOFnHl4lR81dSeptdVusPg +JdC0+VCMc8wGgXdDqWxPzDdT7CIGNZcqpltBEe/27QPVYxckK3kDkOFRXshD5lPv +56USHrECgYEA9pB5ChHu9JqkedN8QgUfipl/doAOz80vghG0gi+wvkeD/XrzXaES +rXlkGJFKbPkTGhemSzBPQNEbpQa8Y+h+GfKLHux+Kd7pWRym4vXojxeJyaCCG73i +d2qtoHi5QeZOY36AJT7bq3T1ZKHG157vEXRghth+ozpzb1w+KeO1ZNcCgYEAyH6j +FpowWYdsPljqx+7SfoPdes/LGtfIWnGRM12C6H2Lb9FX6l1yIMNJQgYhyRPSbifL +uArj/Jf9LskaaRYHvjXbtBANHHU92kBZszMj3x437otADwL9iWsV/cyIDkei5QTl +fP//M5RSZj2WyRQJ8hXTA7Ya5e3rGJYlHQ1aRlsCgYBJMK2dXaFvHpCAUVTrTBYG +0HXTuUOsT54woAzTMFDoytXVYq/nNS8UK5qY6FgNbQpMjoSggSClfu0T2aIGjjcQ +gLznWxBAYZknCKhJavGzuCsAnRLCJWWaSSJtJijn9POD+UMUy0nt5XQKgTNDQjx5 +E/CrVoyQ64LkpZ8WVC++VQKBgQCLUMu8cem03FAPxrNluAKWHMTyiJ8mCNjUV+PA +YHMNX+dbDIlddg9OysQF18L0OQzYtFhvi0m+hFJOhzkN2lwJBN2kch7aLnGLTXnG +9nsvl4zf+ezKQZaxPTLrx4qm+YosP0nDoRLQ4XicSKGVGZKLoDSfeJOaP8dDr1kc +peGbzwKBgQC3Tz57NVbIDa3SdMlpgV5iUj+AQ4Q4OLxAWzePttic1+nalQyFLMBI +dq4HytJEen/CK/XwelHpMfMv/t2bZcqags+Epm9Qhd7jLMaFsmrscmdjXdp41kRR +KOjZHBUuhK7HfeBLJ7oLGDlXHvtfwC59DRLipYrtJLG4Etkcjfav8Q== -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/cert index d824148da..ab75f495b 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDDzCCAfegAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxNjAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -NlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTYwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCqbwwWgCpr0Wh23sDkjV/V4VdRXbxFESuJreMg -yz4xThDjh3TedhdxNd1i04RD/N8AASwZnDCtfpV2MAwU7eYRWN2IQS9ggy2xw5bB -8glbRnT07QLEYPG/yHeTFyh4B47ZJOkWl2qK5OyvWnBAT6a/Xl+aCypdW1soURHx -dqLoYIjFNziWlE4EHx5ApvFRyg/tZR86eEuaaF4FiIMT0XcyMpINLs5ihdRXymDr -bw5pThT+JdsJwoFBhynbksLYZijBkznq6uRxr1wc+AEFkZXRqgPB/CSXPFfPILgp -scQfpXoikTZKu/orYyYtlMPvajZx7dULWeh0jAKNTFhQD+MZAgMBAAGjVDBSMA4G +bGhvc3RAMTQ5NjMzMDY1NDAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +NFowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTQwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQD8AqsPL2/NyBR9LSPSkLedA2pI5DeQ+z7Zfp9K +8EmbCcawXZabrkPCr0LwNyylynssZXqGLYWvwpl8zGk0E2Gr++diIg17uZ4lZUKN +jYhGdV8Y1Bx2Wl1At4LLe+bmxv01hslT4EDRzHfZU/wy/gTtYMJLuQOKqddW3lkV +FXNgJOVGmIm1tehwDCJhL9NIyQcy6w4i86e5B8q+pk3V95mOlKR7lHhk1ZFsMCKh +TCYG/qyu+ZUkKvZCoyV9SwuaN8Df3TT6MYSX2ulvmze2okfePwTeKMpwudrfn440 +0TWrWKJuMdNe9bHXsvhvPZlqBCouIqPC1KiuMg+Pcx0laz9BAgMBAAGjVDBSMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD AQH/MBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsFAAOC -AQEANrA8IDEH7oof4pK7fxbU55sLXSRFsFH2WM4F50azSVzYGivNQeD7AgP9mfWK -pJXcaGq1z6s55BBgYWNI/dK9P6jmLsh7r9buUXb+Jnf+vVLolhqPglBLZYNPlsKU -uC5SBuTJCp0leoeYKda1vU/uBkOQ5aZkiqWKXyNI0oBDqRjtAeeDuiKn2AStRJ3g -1nyAhyjcNSfptryzR4vNJHbqKKHbB0xX79LOHgzgOxPxoPHbs6+dylbZrnNw8H83 -kqHYuweAc3NJBvMfWXSEpMCqOnpQXbddh6Vi86CGqrf3UrliQs7tksFTxmYpPKfJ -htGEHLMhzlzUESg0uiBo2QDCnQ== +AQEAXHWVJ8fuPrF7Bgj3i7fyH0wE6mHeUMSy/bxXdbrkY/H1wGMxHZa8uAodXeNa +Nb3pBzroqZcVWjkh56knGgeZE4vmkWWZZ3G0Bj5jr3kzhZ9Tpd1LyFOhIdUttHPs +DOVfD7AIl3v4xlMDwlYYQKrt1LzHZX1n7sJHJK1s5pL/lB9PdUGka6XLXo7meKPL +KluKBF729MfwBx/GNrQEh4Hw9/KVnBisKKdWqowrKzVzGj3hv2q+wCxDuUZyl7Cs +nw07CGIn+t7+5/jRyEoIwUiOydvaOFkXgOpWxHQVEj+7Hw+rstDbMDQ2+p4LpJjC +bLBrGtpaitmhTPyT+SSR7AZisg== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/key index 09e769e18..fbb247fd7 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAqm8MFoAqa9Fodt7A5I1f1eFXUV28RREria3jIMs+MU4Q44d0 -3nYXcTXdYtOEQ/zfAAEsGZwwrX6VdjAMFO3mEVjdiEEvYIMtscOWwfIJW0Z09O0C -xGDxv8h3kxcoeAeO2STpFpdqiuTsr1pwQE+mv15fmgsqXVtbKFER8Xai6GCIxTc4 -lpROBB8eQKbxUcoP7WUfOnhLmmheBYiDE9F3MjKSDS7OYoXUV8pg628OaU4U/iXb -CcKBQYcp25LC2GYowZM56urkca9cHPgBBZGV0aoDwfwklzxXzyC4KbHEH6V6IpE2 -Srv6K2MmLZTD72o2ce3VC1nodIwCjUxYUA/jGQIDAQABAoIBAHfqQAgIz1Ai+6w/ -WFq2ucpDjWs7V38E8KwjQ55MQgrw0WM1aF4pmp7V9llVV0d6wPBA4uV2Bq3bVY/d -iHKlW+2yp9P5gTsXsOvVINp+0GR/M0UtCXhgeVel1bQRZDDnqHNRzApQKO9m2L0c -FcS6Bim5XeyFlJ4w6/d26vgIr+Bs/UkJnWZ6HTNU8HmAu7RwY+2ozOk6GT8D2hgk -/V2dECvodIvv+prSS13VMkk7IDx3WBSuKccCyeqYyxH1JOWpwzfzOi0Vh7HovdIf -HeBiR2Ci6eBjDQqSdllbUOfspJ7cXUkDhVtysBtcuyF+Jo2n5qbRUWk1dZjQoeHt -v61Om00CgYEA2OsZs9DUaXtAlqXhMxDCcrpR0Ui7MazNKmzdQ9IuBQ1qjOLJ7SO2 -SXk2pe1bQ1KSPSJIysch5A9zbu6Huk7sDJp+60dMkx75Qgqu5YwOkzgD20ozU4QG -+fDNajAtmIi35Dcga3OGgrA+NL7rHtoHq3JSxc1LutqjqWl84NPY0IcCgYEAySPx -qCXtLNbOEGePsIMmwfrkeiztNIa7AHP4jxUqfr8YpCU2F3ctzNuQmqaYUXejN8Qz -R98zxsx/PMunPBCFeDsvf9IsDSOEuEskYc1mHquw2/CgMnvbhDXYnnawrRrtoRUR -uI2aQccqkeUysmRvTg1YvHkSa7l8Lwr5PxKmt18CgYEAjPQoXXpDrM9UZxAfSCmJ -0TdVVyNl0J+zKfBXz2xSTyIqrKXqBNiB6TiE1ElqVlLfiC4xEuNXGHUZ02nYdK44 -IPB7rLNGBQvJeKqsf6kFB5EMoICU3Z4bUmqxcGEiH84ngHp57JjDPUT9BxVQf1m6 -RiQhuTrwDNlqI/nSFd5TMx0CgYAe4aPimyAU+E3e+ud2xEwZEDov/+HTZLQlV6jb -3vYNS62u1f++DpA7maJT/Cv6phGrKDZvXHeImDEY1nOwpyC22u9qAoy8360q1m6Z -jX2WS+n1erY9ygJkBBhkC/kIOtAtIRz9ZtA+NSP2DmiANydXpnjvRu9rFqlYV6j4 -5BYwpQKBgQCNXYTXCbRE5C2wvNnRggCpJgbZ49gPiDGI7860VEZka1jp6fGovGQ0 -GCrgm2Cwy90hqPAANX4RL+eMSS7DvYhJjmb7wZe7luzA2kbpj0fqkR+5zMtaNZg4 -hnBGlNipJ9BHjyfBUttb1R8LPTOZm0dd2yKYESvIqsbO7QicB3etAg== +MIIEpQIBAAKCAQEA/AKrDy9vzcgUfS0j0pC3nQNqSOQ3kPs+2X6fSvBJmwnGsF2W +m65Dwq9C8Dcspcp7LGV6hi2Fr8KZfMxpNBNhq/vnYiINe7meJWVCjY2IRnVfGNQc +dlpdQLeCy3vm5sb9NYbJU+BA0cx32VP8Mv4E7WDCS7kDiqnXVt5ZFRVzYCTlRpiJ +tbXocAwiYS/TSMkHMusOIvOnuQfKvqZN1feZjpSke5R4ZNWRbDAioUwmBv6srvmV +JCr2QqMlfUsLmjfA3900+jGEl9rpb5s3tqJH3j8E3ijKcLna35+ONNE1q1iibjHT +XvWx17L4bz2ZagQqLiKjwtSorjIPj3MdJWs/QQIDAQABAoIBACnOZ4JFZE7G+l8p +td+gklVB08fz1CQBChQapWJRKmTF4mgvnmSFLEiHupsPDCEUzgo3a3QG6T6XEc9a +Obmh3Xoid+gXrhTwXgPmIHxLFmhZ4ETGK1KW+xFZYCFRlKSELk1K5us7MIWdXeR3 +wkbTTQ30F0dokeXW9xo6GJ0eyd0Q7ZHzePI+Gh9ORLNeRdyk7Px6cFuDtox78r7b +teQMGNeEWtdJArWIbjxPprp84uo4qb876W2TBCt/rrFp1CRfUXtjSYQXTEsvon76 +is64X3lQhZR3HCbtjbRVhq76aNJQweVIO9CHkeLwyzGc/PyblNJNM1blIWbgQHvy +Zr8kYAECgYEA/0e4gCGohQILo4E1EnhWuHwKPACsBHkQ/D3JT2H/yo8IZUvnsPZJ +0iNhDnnPi892Xe9n7q8LG+9FVO8OYghfiF4n66dAEO8J0UFsA5CLNGr69noQEUvq +GJdOvX+NGFOzCaoX8ld3xTt9V+pvMFVPFKIoy6bns4PJlllG88vgweECgYEA/LiW +UKYomY3T8e7KgCIilkNrKWYv2qCKgoXMHerI+gz9BvcSdDRz7GHpkV9ZP9GJuJ3n +uLHdUNkFam5jtpwfqjiBvrINgqu8/jesPeocxQwJf3x5iGazxUCEK5YonePyuxih +e3pR+ez1b3wjBfVshs8tg58F0OdO3qVu+IZM6WECgYEAz+Ie7DD8o7vjsHWSu4TF +0hwo1W4Spt3UKCVEn2GFxPUveBYVCjW2Lerjqb8mdYsvsBU6hNOE722s/xphkxGQ +gmNyjOO5N1EBpKdrB4gY5EnOLxN9rCgu7XGiDI0nYE0gulkKgS4becEVNJfTjf+a +k4nuQNGdU8GZUtdHAVfgouECgYEA5ksrJxkTPEKjFf89ZyA0FmwfVh15lCfhsGlO +hSCzvjFhzhwOI/i8fncHCeMyiFZgwuyaAZOLkyYAqmkn0ntY25wcl3LXnvDzC1Ie +UllpmCKM8TCz6xlzzlcpWjK+lornYZljZgskcrR9P/eGTuLD3+Ehn6Sk/yYZmAh3 +JF/17GECgYEA2x7fCZN+wr+CmG74GFdNnghqOkQQ9JleGOseHM+JIRD3J3WkuZ9x +Dfhe68OEaUBsmB3ttDiHQ5mS+YyXIZ2st6/0KQ7v6jEM3CwUoq+SZUqV8FEIBf0+ +r3yQI5sB/ZxWvsshLtlLUgdAby+ava8mG9M5RwUjp8kdmzlkCa54cc8= -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/cert index 9a3886e04..38a95960f 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxNDAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -NFowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTQwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDQTNsxcAF6xI6xIfd7fSKqi3YfurIODqBvF46g -5WzpSfJDAgmrla2PvPmDpL39AVcmawzWp0p++cOug8GJzJ2B6clVD9ahTRLGaDHU -R6BQo8A+cxGL7v9xCF9KXumXl6VHMaym5JzRV6Q9hpBzeYho0mLXdTRjDeuCJDIg -MeqHp8azm12zDmtNcgROqrYN3CU5Lr9UWXhXrAzujZVz6i5pzX2T/Y9JnztrgvRd -HA3dHwxPAl6pijNPlcB70quSJeREuEkfhsVJeNgVeft0aW0siT9ufAxgE3r77mvb -CPalDI0csFR+mbh5HGixRriBliwYCIYKkntWa2PgMA7X3PafAgMBAAGjTjBMMA4G +bGhvc3RAMTQ5NjMzMDY1NTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +NVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDfzQINLvjB3E/ea9+PW5SLys8Q4JqE9HUwLTJY +obQ6jqf4BTxtQWRpyu+uO3ALT+oCYifZGSlyYbBnnrCNClbwZYAHT6OkDD7f9w/q +xCYMosgvZhCCILHfolCYdFLMlYQg+pz4O+ct89J1pqyhEQBZRkUTLrXwqNUOfT1a +uBPbIkXBlBn9yG3c9zj7uRiSEiDA6ZcfxDLh2RCEjZezUfL0EExU/ZHCVghew9cg +OQ8T9dpMzCSQf8rG/higV4BZA66KCC+ETm2VXkqgWxJre+bnELHGXbiQxP5t21Jt +ZXjjYcUs1YluS0nLBJiZdn1lYGM2Nok8JAKzg19XYnlsPJXfAgMBAAGjTjBMMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEATPkS -yrltyn3xyXjyoLJaL12gCf+dnB9hH95vPSZHrCHrLa9WvBRMkXEnKMb+p0hPnJK0 -xlB40aRJI6GCEEOs2bltI6KoGCyQtSmNe4dq2WqEXlOd4Koi4c/+1bZLRcC5nnpp -1CkgCeiuzh7BgOh7wi+XGtnmINNKnMJ3Tp9I28SpU3NV8lJO22BsdFwIDAgrAsJH -r4/68mIlur0xEvpKv3axzFO82DihcKZBXyW9rMP3VfRxZhHGcI9CXmmWB7WOxCrN -FDl9d/yYpYvjdvRPNGmRYyvXb3gfwEqmy+znONRjVinuPaandtI5zslq6CrJ1A62 -Ont8W/Eb0vfs4cJrkw== +AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAIAyV +xfmc5DMKgPUt2y6GLICybnI07SaNdzZf/5L3nM9b20Q26VLdZK4TbFsBhR4lfFPU +F4oVwvYbw1bPT9u9RSy0wLRz8a/mJJX/cmh+OBhYJf7nrGuvYADHfi8zhfvnmgIG +6PFezabzKgz5jkr0rbj32mP6sPpN1dzeDWESl7rcCfS1UHX4dlCKxnRqAYUXS4Kz +f4VMQV8y9Q00/D9fH5xLxg2jyHVc+LfD9tA1r0EJKCB7p612k96YGFFqYqxQOYmr +/Ut+EN0w/YMHuzMjhaEi+9T6r/VMYr3l8B8U1z0PYPFbbvMCGZUf53cBEjjxjg4n +sQgzzTc/yfYXGcVVcA== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/key index 30d7a1092..f243fbc9f 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA0EzbMXABesSOsSH3e30iqot2H7qyDg6gbxeOoOVs6UnyQwIJ -q5Wtj7z5g6S9/QFXJmsM1qdKfvnDroPBicydgenJVQ/WoU0Sxmgx1EegUKPAPnMR -i+7/cQhfSl7pl5elRzGspuSc0VekPYaQc3mIaNJi13U0Yw3rgiQyIDHqh6fGs5td -sw5rTXIETqq2DdwlOS6/VFl4V6wM7o2Vc+ouac19k/2PSZ87a4L0XRwN3R8MTwJe -qYozT5XAe9KrkiXkRLhJH4bFSXjYFXn7dGltLIk/bnwMYBN6++5r2wj2pQyNHLBU -fpm4eRxosUa4gZYsGAiGCpJ7Vmtj4DAO19z2nwIDAQABAoIBAAef+JobroIu9cY4 -JxYHI6C4kC9jJydqk6bdZuQu4ci8Yzjetznntb3APiX6ftXnGaiXXJXy88AoJmiZ -/BiuO8nIpA0QElw/NQO8Rq6tnIm3JM9kaO0FZ6Zclxhi1wwsielMQTSuw6rKGYID -DgCcH0kvAl0+thc2KDvQVWFmUl56zcWpkRLc4kZbu+97cv3G1EFfGGchYgvEcv2g -YpC+7rZ1n+ZHbQKscWHgsFUcp7oGt3kZRZI4iNffmvqwztOvENNwvJE5dMA0hJQm -tdhjPtCcO5GUWsPKDispeEVMEycRJti/lBhXM0oMW2XuXlcbWp3bm1sGqhuXRulQ -eRFntokCgYEA0H62dptBOQCJQ4jouS8fLy60wJ0rkC5txYFiGY3sT+NZtsn0AKnC -Spjc6mGQcCg+ezaAeM7doGZfiZ2BmVWnZvDJ+T8Er2nUj6dwzv2ZFDDMh3olHPT5 -/jhckyAGWgo5Dq01KAHwSYk0y7Xrn9N9vtQG0kqnbjtXncbECMf3zbsCgYEA/8LI -pwU9A9rw1Or1eo064HbAPCg1kj4bFxQGpe26fE8jz8Ni8z4ROSOHLVNDY8vhJ11d -AtO6Azv4w7IN5QuGcEFNmq+GdpcMq2LoM0h91pkGOTOgosjPpdMU13mPNYG3cCWX -eAwM0ibmElVWleh/wLDvUzccw6lIONt9DoFaOm0CgYAYb5FxCzc0uBReXvBvq88q -132FyaXuaxKggE6AEjstDcdY/ghj/4Fu/sV9jtu/2WehRzz9a7lb8EOoPFaRIxHQ -pc32MWWaLXwlLgmxqNVFIYcHJdCtuSSHoBFxiOJVsTcIulItkzSXWcZfTb4E6GOn -dvApu2guKjRVoJMfOFiZuwKBgQDOrbk4PyNvWh4D8VsuDbLmcRAnjNa9tzJtE+HL -dLCeg9WMr3fm2OFSK0OxfPeYTclE5k2jWzWWJ4B/pANWdFnPnPX5ap5edvHmDadW -yd3m7QH6d5337g7fEhRli/YOZyS1m6srd5FkwcpqRkwSGDAkpta/iGnWM5YJXFVS -w3UGgQKBgF/GITiMEWAnSU6EehS+C8MIhi98543dEZP6fOltGfrfdagjZaL8A9Ae -VepZHBZw8u0wgrhE/moz9ncdgdSNWVxmdgK5MhTLjQrcPE/APG09XMS75TjwoU27 -QXqRUViicNgI4V3Gjwe9quspyozrMzqbTxLcKvsNidkiy0etGCz3 +MIIEpAIBAAKCAQEA380CDS74wdxP3mvfj1uUi8rPEOCahPR1MC0yWKG0Oo6n+AU8 +bUFkacrvrjtwC0/qAmIn2RkpcmGwZ56wjQpW8GWAB0+jpAw+3/cP6sQmDKLIL2YQ +giCx36JQmHRSzJWEIPqc+DvnLfPSdaasoREAWUZFEy618KjVDn09WrgT2yJFwZQZ +/cht3Pc4+7kYkhIgwOmXH8Qy4dkQhI2Xs1Hy9BBMVP2RwlYIXsPXIDkPE/XaTMwk +kH/Kxv4YoFeAWQOuiggvhE5tlV5KoFsSa3vm5xCxxl24kMT+bdtSbWV442HFLNWJ +bktJywSYmXZ9ZWBjNjaJPCQCs4NfV2J5bDyV3wIDAQABAoIBADoAbsyt5MiRaZ2y +hXEpAfms6Tdtjn5wwMJopEi2N/iJKl0sNjn2naiRcMbOHr6/yl0txTgNvmEnkkl4 +pjcXe+q305ORf06v4ce3x0dH6LiTo6AtKpAfGxpjfdHVK/Rbt6+4Y+At3j9Zlqzp +MopX1qhMfvB2xa6GgxlLOhB97p926VtKYOEoDke8uP48HJTabeiFKpn76k+0HwS0 +J58Kb647DM1rqGpZW17dPb2ovi2eznATMeAgveNvVaXipUCsqnrJI+ywrLP4TBll +Mly+DZ42e1YnM+rd0tzgC/YNO8h7lF3YnthdQ77h3Yw09cvtmHPEuURgGiHIH5IY +HlYKBEkCgYEA7KXOLnufN1J7QG9CqsWhKI+ZBGGTd3LmXMHTM1tLpFcQaRNd/kxg +NVo8y4VEpCdatKj+yRe3wPZ8rO/Q074Rzys4VyTP8BNn9YjtttbP8zBDmLqkXAAc +xVKNDiuFQ40HSIdexZVP/YVCp210q6YG3OPoT4W9QvjfPHMfzW+2euUCgYEA8hpB +PMyl/RL2WHQHdKRRss0k8AWjtoKzepRkzrwptzgFOQZSmuvfdiPStp126iCinzag +EPsCo3T/1E1Fj4LgOIPhRd/ibXYSAParxmmx3rMTrBwo3TRf2c9nZPKAygsMNF59 +T5ySJzU6tWE0PEtCIITW+WnQeORPzW3vE0nSzXMCgYEAwHyBP8foEryxahDVvkgw +NOjQgwLHS0KXY914Z+6bkVoMDBvnuV/wZZU3nCeTVJ56JjbLv0/edENJ1/Tc/E4+ ++C7kjeVwiYuPZOVyzeTekqWwZftyky64ODxUZbE6nV6KDRGnIbm4rbMGK19ZpgDO +1j8/B+f1sRLzqZzOwnBako0CgYAVSR2nPM7zOzGRgVIOfUv5jnPK7pQAPemNw3JB +guWgCDrdUqL8n/RbrLaf+6Qy3X+uw9y64XbP7D956PlOrtEL5vxtaku8F/9pOkbM +AQr0a4Y1QZyOJkavHb8XbwLHwMTn7c7Sqw9mhxWMUOmIy40a0tMbxqPfnSMvCpVU +es8f5QKBgQCeFljjAnEQpuUduug/DAScAjTEbJD/18wAu1PuIM/+/zFEVaOs5w0z +uHiiPq3fiaaoBQHZofd8mxsugfLYftAP25Qw8X/WgWPg4CLGz3Br3HgnV6RyWXr6 +R600l5lWe/ZU5epjEsToc20H9z9TbXaSKWMZiMIaMnAeboSfTtQY3g== -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/cert index de567f374..d87b91f55 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNTUxNDYxNjIwMCAXDTcwMDEwMTAwMDAwMFoYDzIxMTkwMjA1MTczMzQw -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNTUxNDYxNjIwMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAz1uHVK6M57XEhMEChJOAM5yxWPU/Y/CavfDpbc/S -OJQm35eUoydbvvmLLJ0gqBBZro6P3pb+OaxTm+4QjG7He+NayZtUVHMz9zrys8Pi -Z1g1aZr2PE5+bm/ZKoO0bvPD/7xzbV4DaOwAtIUT74pELbW75rQB+8uPidMcO4yB -7vwJ9k/KyeUglR7+yPr8JQUWlf1IWnxcAaE+7qJpOThCWoId+6R66pDhEkLsr7Pb -T4lexW1jpkX+LRlAWNmjGebwzYCs1QQwsi4+liDuwnJSfRPG17/dvL+8BqOIqGI3 -RiMJKY9eqSut4xwg3FYKRS09kAV+EudTvfbD1JXMy0pcPQIDAQABo00wSzAOBgNV +LmNvbUAxNDk2MzMwNjU4MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE4 +WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU4MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAtNQ9DkyC1Dza3OYBLcCPeJNKC8BvYVVTL+FFzpS5 +AEPNdNA/Ezk42SBWNvaY+HYBrZniOSVMkTPFT9i5sT8bBBrUUvwGk1r6tpXDlHw3 +/S7QThqZLkGcAscmahp0mWnIIGcJxZBVMR1cfFbYNumNR9UyjUDQumCb8hlT3q0n +pEH3CL3jRpdcFolczotUzGk9u07v81gIWgQVCyYYu3WuuRjviLq8SVoHlAWvVsdW +rGcG1LS/OKAgECYVUxs1Qauw5VjlXPGkY7gOOnjNcl3IHZU2+7dGFw1gBf+gEC5E +/qr2fI7Lwx7R71sY0PANuuDLGfrCAaCjG3HZ01MC5Ktx8wIDAQABo00wSzAOBgNV HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAh6r0t5Dd -7NL5sReOTErM3CmioLEId/9Kbqz+7fsBkMn6tC82e21tMcoZ5p+UgK7mCISa9e6C -TBa6/zEm6T1eZYHhb6Rd7uHzFIJoRSnr9uyRfLWJBJw3Q/8vSPQgITX/t53V4Y5e -QUePaOHOzRxkeUIOAGfrRCoPyvJ8EjKOeWUzg8E/raJBM5zupcTIIInYjpQAnYxS -vByNvGDaFAOqsp+1omeLz4zaoUT6S0lHxvfDB8iQAZh0iOjkCNKSaZFn7BAjbWQ9 -OtNZKmigyHgUhi318pLdUdoDbtoCRua6icdHLTCQW0ClxqY5VgXY1v5FOvaA+N9E -P0Jlr2ItsNGgqQ== +/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEApTrZW/xo +EMiNgBnRyqR0wHXpuQS/V5h75CtDKE4/Yl57cQlh30SX10anRgNpeBmaZjyFQp0P +3MAQoxUh8rOeQBcqZp7TiIXAk8w4rYWpFx59GGgiO5yD1vOj+9cIvAFDR0Fe1kbb +kLo8s93l4yNFTdxIIIDMgNpPcp2620wkecR3PwRV1jlM/7nMfgfRJagN2+Xq7mKC +ELzGatuXBpiy+jwCirmgmE8/MxbFbsR9L4EdW1kdYhRT+rnSNIEN3zI8GXWIH9Hu +91cGTgKiz1znXtlmLAaIoGTahv23YUV7tbQlrtZDZjpqvTN6yM3vS0HIoSxQnT2l +yizQSNuYSUD4HA== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/key index ab6acf966..00d37caad 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAz1uHVK6M57XEhMEChJOAM5yxWPU/Y/CavfDpbc/SOJQm35eU -oydbvvmLLJ0gqBBZro6P3pb+OaxTm+4QjG7He+NayZtUVHMz9zrys8PiZ1g1aZr2 -PE5+bm/ZKoO0bvPD/7xzbV4DaOwAtIUT74pELbW75rQB+8uPidMcO4yB7vwJ9k/K -yeUglR7+yPr8JQUWlf1IWnxcAaE+7qJpOThCWoId+6R66pDhEkLsr7PbT4lexW1j -pkX+LRlAWNmjGebwzYCs1QQwsi4+liDuwnJSfRPG17/dvL+8BqOIqGI3RiMJKY9e -qSut4xwg3FYKRS09kAV+EudTvfbD1JXMy0pcPQIDAQABAoIBAE5lopLns6pfVL+E -YblSMyRQV9T0VFUqwLaTgQ3dhvORP+lFXBMbbFqV6oKhnZktJVsT110m5VNUzf+k -UGln8M/sM4UJzyZmr/0HMn+4zb6Y4QjeZ76BRtfmPcsPJIbWbwIfc9yjsNJYeCPI -NLNaKVDG5xXgdOeIHOrVAFWbV/zMa1x8JGO4UDufwwA8fn092TGkBIwh0m6FVFqc -Qvd9fM0YRusa4At7FUIKGvW1UXCs38DOzsHWSNEUBSySHr9Mm1xskku0D3Tg5lqT -oDXoTgaQgSEeZYyQQozreEHmTleL7AOwdUWB+LsPGeKW+5anBkdUArhkhwxiZJPQ -sqYlmdkCgYEA2tShhtaY9kK+n26Z+IfPyL83MZNNw5/gTQtABIbvqYtwayMBINrC -Xz0gpRLbrd6TKowpGhFGnFsSSVfUdwaYscEoJoteXO6bu9ydRq7oKoHcoa38z1l5 -iAzlzVLGGBwj+VDqyl7lrnlIJa9Sg41m2FgYha5HKQDaZr9qKfn9cv8CgYEA8pQE -Vys58MuWq2+gUc625qaYPBhDAUQlNzxLAbNABL+5xnuiQ/K4sxUtOJedHABXq1TT -eCFVUJf5jTix58SVnHUMZI/hGUlyiA+uZrOtKSu6UfcpdSMtlNAqfgL9y6oWKxBo -pSwsrrY5BBB38UiEM1qTSkyKL9AAxJV/i6+4PMMCgYEAonv7q/kv/rq0fAFNxmJh -gHeq7d6ogTb2/334/OOMlOF6ibKmJdUJOlpTIP8Nqt53e8Iyyq5FNdfRji/vDKoT -OvlnbKdTW8G4VReMmG1K6jUes9ZSv0t6l/CruXdaq5BJjdftXnJ0LMbVMVYq+I9H -7CANpUUwhVuiz2QV2jFLZdUCgYB6R3rYpgWTCE1vJdne4yD3q8rZoDFGlh9cdJwq -wzzmJ+9xyijFr7jDLU2aVXLxBosq5pui1sq20aUONyIW/tWcBLS2jICfypJdW+pC -AxiqxEwrvTe8wHrdpQGGe+OLorWCB8d4W4g6mcir79FGY5Ogf2v37BVMfMGmVuXw -eCebGQKBgFNC28uo0PsgJHWwhnJT/5myP3A+/5it3bPJpHn1b9JsIQTAcBYvf51a -UGmHxNu96x8uZETq9t2Ydqkq4qwhBI9jDZIyMHGBgYTOFmCD32BQ99LkH6sQ7t0g -iZc3xriB/kSaKsPDIaN1Q3WoG09E+sn+3ldvPdVeCYQIHamY0HaM +MIIEpQIBAAKCAQEAtNQ9DkyC1Dza3OYBLcCPeJNKC8BvYVVTL+FFzpS5AEPNdNA/ +Ezk42SBWNvaY+HYBrZniOSVMkTPFT9i5sT8bBBrUUvwGk1r6tpXDlHw3/S7QThqZ +LkGcAscmahp0mWnIIGcJxZBVMR1cfFbYNumNR9UyjUDQumCb8hlT3q0npEH3CL3j +RpdcFolczotUzGk9u07v81gIWgQVCyYYu3WuuRjviLq8SVoHlAWvVsdWrGcG1LS/ +OKAgECYVUxs1Qauw5VjlXPGkY7gOOnjNcl3IHZU2+7dGFw1gBf+gEC5E/qr2fI7L +wx7R71sY0PANuuDLGfrCAaCjG3HZ01MC5Ktx8wIDAQABAoIBAQCE4IjVHwfsKaOy +OxmWoy9KLQF2TTwLTAXK40DGoqanOSuasQQIfj313zs7PE4AFcb56GBCGdR/xokx +OVKKmpKhm412RVgXo/0jej2zuOvzkhjjq8vwH6oiqHDj+vi/WuoCVXTqxjqz0p2J +iM9s2oZEyLdS8NPwgNlXN6FXuemtWsao5ramsG8c0XM08zWazkrLGXf63dsNlEoL +9zzpP2nNx1DVVDTUhN3mpJE60IG0niBE1X3CuIrq4A/hIOut6qa9VgdOtnnwsAyG +hB3ZITeoaRowedmREUSSuzXnWkfHSa5yJoRlhje4mV+RRdhZ+1DSa1jzn1ZtZhjV +1/6KQWOxAoGBAMdTlTm+9c3rtqZVgva1WfwRpfd2B+HAy/LuBQMSNEmMXn5ooJSK +05eXMoCQC/+3fArCjYl+I7u9GHFKa4JeLjzWbqPbski5cTEHXIINGsnE9OI5pug9 +EbiZvSeimlL9Lw2BUQVW777cfz0esI+Tg514mn43gV633BWZH/AP3LHtAoGBAOg+ +R2EnDs60m0d0apR4kuZkoJDfF+uYgqyD+SMDDzgBSr4IDvWRzKAhYn+R1HsWeOxi +U+8kx5zmDVw+GHg397FcTIVfnuQKwmBZU/XC7oKVu6wshMXFbXUSQMmIuDbu5xmZ +1uZvMHtdszDwBWn5zGRSM3oXSQcwburJ6f1KSbdfAoGBAJE/8jUzV5GoG+BX3eiD +vL/36FZMt2+l+7jaA+L6CAo0dMNu4N190LTdpBqVXXkJryV0Iom31rg/EqmzzmYg +1VbV96gGN4PRRo+wypOmkwfHM6AK3PrNTbWUqodQcV7aSshvnKfkcy5FJZ9XVtg5 +aaZ9tS8WqXppRsKiY+ie1nb9AoGBALtl1Y8NRyOAFHP5+i5HhLGnrPB5NAIFFBxE +eXnI9DTKxhbExd1dgnILvkEV2RBhN732MagcU33FHC68ZF5NOu7AfXZ5i+qSy/mW +2urKGk8Ap2jsm05CWmpHCkQUsCCTcaL0wbU7LzG8j+UDKDs1N7oTojn4JBNK/5Uw +zEB3+zedAoGAYAI8WQm20ElzbBB8MqL31zM3LZ5Dp/GIjPWhjwEOsGt2oCSrLxC0 +xcYRq73St5RS78uGSJxAQaMQna52idifxRE6D3IyAvsMAbn1q+LCqST9zy5jzmO8 +tUNvhnkJs1jdDjIzWVtbtMWb7/5wWANx5989B1+QWU14Qmb7uziMVR8= -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert index a26c3cf99..4870aab78 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDEjCCAfqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNTUxNDYxNjE1MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTkwMjA1MTczMzM1 -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNTUxNDYxNjE1MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA7TZNU7qZLXGwPO5t7zzlOnpy8KX0f3ry/kF230sS -A3mtP/KOxcFNbZVYYpgkgZMVy2001Jg3jDkw1lJfIuojRNToyl34Hij+XKE1MBg1 -lH28V4mwSZrJj3fElci6zFro3r2cnLq/mQTUx08XxhlWQFcocIfccEvusp7eDBk4 -wUSJGO+gffwudWKbTZ6Uz8wnvNsX7Q8H3jpVYjPaPzfzAB6pDWftFX4xag+IxQS5 -gvLpnGm8ik5ch40B/34lE4LLqHYMpBxr7Wb7cv8jCi09EbaSd/DoxqEX7y4NjoeV -DF7qaratQthv3hnCrSfhH8dSEjsxH/YNifIw5PuSZOYbKwIDAQABo1kwVzAOBgNV +LmNvbUAxNDk2MzMwNjYwMCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDIw +WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjYwMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAwLNxhHFPJFGnDoOnt/ELutNthoJNYLwus52+GLD1 +VYDDBA7766rzAxK8wGF9vGbXZX7L1uW3VJyJJLzZR1bBTdeOWXpyscz+33+jETbn +Eg2Dp7KbdFAFw66B90vxLbHKbQtH63VtNg9lh+d0K4QI6SGFlI/Mv9VWawpKk1P5 +X1cgl1EgR5e4kIgQsrkO+MRc0SLZG/s9MvThrHVlZLWPjRaiqk1GDxvBjfcBoPzZ +0jOHhWLJGWZcwXZ5brqPcqn+YMceXQlxrjxJvyq02DEWjtfimu7qoZ3+fgQy4rJ0 +GzPaDvwnkwvJQ2iN59mcybfg6AoblCOt1ypIqouMrI/J3QIDAQABo1kwVzAOBgNV HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB /zAfBgNVHREEGDAWggh0ZXN0LmNvbYIKKi50ZXN0LmNvbTANBgkqhkiG9w0BAQsF -AAOCAQEAA9roGtBBFU/gc9uCF9L66s9HyPCfu11URDAduhIN+7Us8qbTW7epknYN -/rKJh8vhW0oty2CMRifDhbt1n//hOPiZ++n72EPbb0ikU3dXD7AIcGQvJXPYFaCH -47uBGYUOb1an9MBv1QQqdZwEbIDN8mdN1EQMHLHV7XOQIbEtyyzKmSKDFzNow4OL -rB/eIGhA6rEyyAv0hhf2Rd5KcJh70RRkhL58nwRP/9Btot1VAKLCID75SvdCbggV -ZpYlaG3Lx78EdpORPkidj8qYNy+8Uu+wX/RMqluv6tSjSmgXYuJvq06pe8lbfCxm -PGosie8zEYVnH4nt7ekhoA6wb6qx7g== +AAOCAQEAGQ+K0dnTaX5Ry9PLA6M8yrMhq5gnX2RfyIMXCuFfMqjdju4BkTR+6zm2 +El8Z6glQ6QsKYHR4XhlhHFOP+gGyaTrsDSV2qCgphJmtn6QWOSfEmBRNNCTpMXfS +5Ek/2dXItMjmnMdDOqcLofQyIIQFE9VpLyaFN0n1w9k6EscwSxsMiBVFwOhHpBex +BPJnrKBDWNVHjgocUI3YzN2TzzRxVxB/xc5+Sl/jnpguad+q/wjFgpr9p2a4yAS7 +W5bXcA1S4iSp8uKVv0JM/cfFlF094ft88A/SIt8Sn8BmeOGQtSk/sf5mFbr7TRqE +oDuKNM5AIM/fClQdlbKo7xpcJCiRkQ== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/key index 58931d1a4..e0653fc3a 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA7TZNU7qZLXGwPO5t7zzlOnpy8KX0f3ry/kF230sSA3mtP/KO -xcFNbZVYYpgkgZMVy2001Jg3jDkw1lJfIuojRNToyl34Hij+XKE1MBg1lH28V4mw -SZrJj3fElci6zFro3r2cnLq/mQTUx08XxhlWQFcocIfccEvusp7eDBk4wUSJGO+g -ffwudWKbTZ6Uz8wnvNsX7Q8H3jpVYjPaPzfzAB6pDWftFX4xag+IxQS5gvLpnGm8 -ik5ch40B/34lE4LLqHYMpBxr7Wb7cv8jCi09EbaSd/DoxqEX7y4NjoeVDF7qarat -Qthv3hnCrSfhH8dSEjsxH/YNifIw5PuSZOYbKwIDAQABAoIBADBqJN4x95GO4qmN -AGMTyrVkyJDVTlG2hmHeeqSYbdTHwNSMbRdvnJ4BHUkCRHEt1ATxBRde+fdktNMJ -fOFjaE9kJR8ojruZIlFFldV7G3RzNT2onJJpRTpC95yam4WaCG1txck3VGOm2MbV -HcUQ5sm7AEX3dMZ2uQE765YMj8jiD33vX+zYQy8XB4R/04j7+C4QDL76btUxUUy6 -Vhdvz6oQerRSGtgnJss1sNQ1RVokGjaLK5dZ4EedWMD/kQS3845ZLqZy4QLaA3ai -gjRTM++dN9v0kNldvqz9B0mM65dMz981gOJYlHMaim+aJH0dhpN4t+hNEA4/Jr5G -mXijSAECgYEA8kbYoTCgscYra3OzBRfrsXyk135JM0Nn+AYfHIPzWWR4svMAeRBO -sjsgdVk4kUca+TMBFBy3zrftOt2bKLcq47SvHWOq39f+y9fhdxrDlTd7jFMhsvLi -+dls2pbnPcp+nmZ3KzaoDvq67hWsAldUWP/79N+ryS0ibcmiAwG6xNECgYEA+qYE -DXXtjbEp5JtPiqZuhpg+7NpswyhK5CJJ+C+ExTVeNu4QMkr3LCcKGVslFZDKsDU/ -lWTox/bdoJSPWV6fGNOvuCOhLL1PkUcY6L4B/sPaulT0UvUlxbAr/PJXDkvSEtRf -9y3/jzXDUVXdeeXOxLBFJFixTaOQR3Fy0/7KjzsCgYBdN+UiIBO0UwthzKKU0x9c -qxjB0VVY5Bac174guqRnQMEwGU+VRTECYr2aaTnarAE04OsJUgNnBl3AyINqpw9Z -javTIwYcGn9u7yFRMnsObsqas2HD+LBcccvwTx+qJr+RMtunROBk4xQJh00nmXJa -zCOllGoEfdlBZNNxVLkIAQKBgQC0CETG6lqLuKHvmwLCAxNGR9qCw8z1TF6miF57 -Dp6eC9w1Nj+Z8DCjnRLq7YWwfMSpVkXqZ4WwA4hjC/H+7jD2Yy5G5AijmwKoxdmF -at0CAel8hwLLB1xvJ0AhOmv/T8R/U93uLDLwyVwWcsdXBBLFQhsXpUENFBvQxRMG -ZG9X+wKBgQCJRb25V7KNlkslNQdqvgli4lOHsa/PrEbCRA6ssqm9tNSLSvsmt+7I -TMC8QrvKjH4K2/OxXpcpgYOOpuDuZPgMuD8IdzSNWQPHYMQQAISLNTKFVbGekqE4 -A+cpV5+IdH6Lgp4zEdQpaDL0u/lFGr3D5CQV9r+doVvcNUmd3p5ICA== +MIIEowIBAAKCAQEAwLNxhHFPJFGnDoOnt/ELutNthoJNYLwus52+GLD1VYDDBA77 +66rzAxK8wGF9vGbXZX7L1uW3VJyJJLzZR1bBTdeOWXpyscz+33+jETbnEg2Dp7Kb +dFAFw66B90vxLbHKbQtH63VtNg9lh+d0K4QI6SGFlI/Mv9VWawpKk1P5X1cgl1Eg +R5e4kIgQsrkO+MRc0SLZG/s9MvThrHVlZLWPjRaiqk1GDxvBjfcBoPzZ0jOHhWLJ +GWZcwXZ5brqPcqn+YMceXQlxrjxJvyq02DEWjtfimu7qoZ3+fgQy4rJ0GzPaDvwn +kwvJQ2iN59mcybfg6AoblCOt1ypIqouMrI/J3QIDAQABAoIBADlQ5lHTdgvCcaMC +i89NVgTSwEAC38sHDgkEwTcM41v0OY0qe8nkBfYDC7tZBBIWsLiSl0Sq/PWgvbX8 +qc/rQQHLPJ7mqdiytZh6mWEUaHRZKrClklFtP9mtPSD2KJ1DxYbblR+2xK4QtE1R +DZ+n3RKikt3WS7s/VD3wSLA7iO/PMJ+ER3kPxZWsVYJw6KpmR8U/v881eM7NGoK3 +SwYSqXfcRidNOl68Je3vm3MpK7SiPEOX9AGJUXlkpjJcyOqEE+X23wNSZUpKT+i7 +NIrXaEml1nKlTRMlDWi5ZPqzhpguc5Nmn0Tu+01ZClwcu+/7b4C5tkIjXQnyjXsO +0o1EqcECgYEAyEJwGl6KvvYaRsBiFRWIN1950S87O0grOnwb3/FedW4CEf9Lm/Xj +653HTe3zYAJDlsRFCOQ/KXi6nUjAAv8DAydKWmr5EonNj+VXT0Sw32N681lDMPzK +4csJek2bWt2alKbachKAq/gr00837HELl1ALr1X3a3HXr6hZHNjUHpECgYEA9lZq +tXDDV+emyIf/O9LwDUkctHc06qD+uBfiuW0DqVeYPE7E3QPsPzyjnwSfqmgYlpKm +Ku60MfmAVXT8kUSBUuY9ph5AOE/5LwkM3ONc34UBtkruzHUccGXuXelUzmnAQLhi +ZJiWJJrHYICcOZNzd9UmqYye66lyzp9NWe7ttI0CgYB8qYcZkzLxz0fqNUaZc275 +cXDmvG016SYn4SyFCr9PgKy/QVpy+u3oNa7lHzR61s32Y7XJ5DRBf8tDsA7/jnn0 +k5fgk2j7llcltZHVYaBtX4MhS7bdHvC5AGik/vyv4vWghgHEMypwYyv8/fqFMJYT +mpu7iVtdQmAPFFBs+bmKUQKBgQC4Hm8znkzjbymhyMRkmo0B4RurZ04N8LdyMags +n+aUs/v9V4KdD0mNGm3RdUtBuvxlzsaUYEYe9DWPqhj9Gw7uP1jkyMeHT38YQNN0 +ZhwMlQVqkydZek7/U7COUNAqV7Byr14bglD2mxlab8ZU4njzoEV9hLVjvwsolLjj +90mEIQKBgF/IE4+wL9sdeQ7MGanYHFzQtyKxWnRzCGWDkHV9InGZ2I7O3AeqDC76 +fXhiRoRbBMSgddyOYTUoaPhwgqPGoC9H/3ZHnyx5fokl0FTNfzk1mnY1n1HD2roR +p76hbMs+TjIGG+lNDso3WuV21Gn+vynDVO9FQumgeaEc+CLXpwEq -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/cert index 4c0b67a14..e9de284e5 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDGTCCAgGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxMjAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -MlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDMgyIUbD5nj2q5GcqzvmCmwvjN+v60av6wQwgN -aAaMdJMtCjDWan1GPoYj+uLDQO9ytCxu6BNT8iC89MH7+Dv4CApK1r4OyxL1N9yx -1C9rwxYDlXEUegd5Z9yONvfqjZplQYbAhOJAOqFgaMS1yncatMgCwoCbagn396N3 -wnpoK1i0zbL+K+bdR64xCQmlMZk8atF03rUNp+hRzp/B1GxfwzVzb6POy9hOVk7h -mSs3A9u0ON/lQ+Nbo4e+HFUMmEdWyVpWZXf4guTddSfjyB5VWXsQJ0XXPFqllxPP -ETZGoi0+JMPmDlTfZd27Gno+BPfyQNke5Wh6T5VOfBOs4IXLAgMBAAGjXjBcMA4G +bGhvc3RAMTQ5NjMzMDY1ODAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +OFowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTgwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDO4DuzjpGF3Em7sIrAv6/19KyTVLxV4jM0XX8G +S8Uo04oyovHnHqfCDd+yaGs1glxD95eqZ5kZDgQNXhn+oZkNvcPJJ8O2tPhHwvjC +PR3KzNL3dFMo6+7BCmBRIVvSNHkkZ5lyoOSE7deGvoKl3KuEWUGwUiGnPx95snCD +HPfgHYto1zSI2NbdnF4hRuOiSFhettMZiwpXEYGhcMh1RYDYxPf+5/XcFz3VCdpF +1COXSYIS2r60H08dH1u6rO1iliJaRh+jqk998exdi0TwJvVTiaubMRZxtGkPNxjE +tSukjDA9UaqAFBnireXj2qc+a6B7AMsoTymn8Ka6QJyt+3ZdAgMBAAGjXjBcMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD AQH/MCQGA1UdEQQdMBuCCWxvY2FsaG9zdIIIdGVzdC5jb22HBH8AAAEwDQYJKoZI -hvcNAQELBQADggEBAGaRiH2ETOtCbS6hV8lpzNXVk2rzZIf2uOxigv9dCr1f7CR2 -u3QlqN9gUAR5doXhKH3NSn5DDOZKdhbtanude+Hu+WeV03wizv24rJ2CcHWLN+vy -CnK7dP0CAB8/bpgKz2509l3lSpYJ23tVKCRL5VsmAcNqQPEqd7YXIobfEdsG7j+s -t0GEPXOiMdkLFa/fkuy5TG5ufoh7ahXOuDrdpB4zwAPT+FEzAxFo+lgAXFtboMOw -KM3Y9bkuFZbom9BWHp1D6F4JulQ7fHqSDgjl9or6OLRnOEmfrTnTjYIapgH0LbKB -pcxdtMeQ7+ytiPIRxPv6+tBNXFSDDx1APrFnMHs= +hvcNAQELBQADggEBAAOc/JL/2xfnPAcwzxvF/ssYK6EpjD6plG+OhlIj5UiXo/z4 +5IcLCg+N1P7dGaiSMfI/hIM+M/z24QMk6gXFMrVUFh6sm49dNmTry4Qsyp8Up5HD +ettKLaWG3YA08VeqJ0C2xsFh7nJnrlzQad1dwtnj6ActWx/2g8SFkfpQYLba/YI/ +YC3biwKGY9P7lmCP5p4234blenJHJW5hbwNyLManvEA9O39Rr4oph2Z1YtmpsNM/ +p+xioLTx7oFMtRkBBpmzSKJgLAqCxVg7P+MzjS1s3W49QLI8F1sZ+mXBrZxbALhQ +TtOjvUx+vb6Gihkzn8XkGdbgsiOTMBoT0EmIBJE= -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/key index d5d26d84c..5016e338c 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAzIMiFGw+Z49quRnKs75gpsL4zfr+tGr+sEMIDWgGjHSTLQow -1mp9Rj6GI/riw0DvcrQsbugTU/IgvPTB+/g7+AgKSta+DssS9TfcsdQva8MWA5Vx -FHoHeWfcjjb36o2aZUGGwITiQDqhYGjEtcp3GrTIAsKAm2oJ9/ejd8J6aCtYtM2y -/ivm3UeuMQkJpTGZPGrRdN61DafoUc6fwdRsX8M1c2+jzsvYTlZO4ZkrNwPbtDjf -5UPjW6OHvhxVDJhHVslaVmV3+ILk3XUn48geVVl7ECdF1zxapZcTzxE2RqItPiTD -5g5U32Xduxp6PgT38kDZHuVoek+VTnwTrOCFywIDAQABAoIBAH1j8WNAMsrgHfk7 -nRKzqSLV7CKuv7fy2hFMKAXAQDOhzhMRanwscn69GxW4X4yDpcxYN94QILmZfQUd -tEo/GtWqaFUWcRU04XzEMWY+yIxz4m10FQ8O+sIvMgVoIn0HMSDgGjSzxNzIleU8 -l082wev356H5i0y+qToF9Y4aCV8QC2ovtx8D0yOik9LyHzPnrXg+zQio553/BXjn -s6w/Bb3CGRAIuNnfjarJjU2yib4jrapMZmWcdWoyf6UV7evksEvil/kDtR/QaZZc -bB/fAeF3bvTbQxgFrs68Aqr7qEO1gxFQ6fkUxp98nlL2wnsj60D/f9hIfXS4b7YZ -feGv7sECgYEA1cczs+oWnmy1re5qG4HiFEjzpjKH0n4nwHag2Qc+LGjRTDIeJ8K9 -HSHKp+WvoDlui86frH/OniOzvs95+YBmrfZU7aKT838R67DdP3TTulkU+K8SvAWM -1e1F6C2tP5MSdQReJV2Ph9YqhdZJTFDQ7AUublrZq9IBl8KTxgloH1sCgYEA9Odw -oKFCPGBgg7J/ArDOIMlWsbQjiGrwjnSV1jKwVTaeLZb7+t1a/r4nUi2LIMtR1OKx -XjJbbEtK1yRlQNDlFQJMXVaJPmv51ted5MMINLwndGzDZcA/5J0iFGh7h0oIjBuG -wsJACRzvkVZnxKcRk6+9Ylg/BnbagbdTGCPY7lECgYEAv4PuNcgI63TIbkGgnXQG -bdXNMZ8jPtf2FN4xyzxJ3s8ocfKUQVqcwXR8cV27sPbCqk05jvgQymuBo/eLdpIp -ar+75gg4M3QrQdL44thutgsIVqHBTuBKA3zFm/MPulyvtFVtYlwnMbIT9kK697uO -72LU7dhGGT/SXXrbmBblSPECgYAnGVga3QP1HbHq9LFgXZfbFinYHxlZKzGSnLxb -QSZzxE+GmcdK6tIfP36JmSnQJ4W+Bh8pGcMMzAx7wpzDt1YLf51vfWRV6ekuSqgz -oIuL18o4xTCA6yuINSn+thuaotAwhiiCqX6NteftfSz98WpV+MW0kMAnKQyDjyAe -B4MXsQKBgQDGi/tiTAhnCx7orgrUaFQSiJp7wkPxygBmhU2et9ZIGmzXVX3B67uU -UrQCIm+BHyJOsxHXUOO7wqOr1r12pB5JxHRxtdzdysGqPKK1RK5uIQ0Yb2y5uozc -xY4VY6s+lXBFk+SKg62QaBWcQ4gCSMqbOJ2cKdN3SuNqQmPHInhIGg== +MIIEowIBAAKCAQEAzuA7s46RhdxJu7CKwL+v9fSsk1S8VeIzNF1/BkvFKNOKMqLx +5x6nwg3fsmhrNYJcQ/eXqmeZGQ4EDV4Z/qGZDb3DySfDtrT4R8L4wj0dyszS93RT +KOvuwQpgUSFb0jR5JGeZcqDkhO3Xhr6CpdyrhFlBsFIhpz8febJwgxz34B2LaNc0 +iNjW3ZxeIUbjokhYXrbTGYsKVxGBoXDIdUWA2MT3/uf13Bc91QnaRdQjl0mCEtq+ +tB9PHR9buqztYpYiWkYfo6pPffHsXYtE8Cb1U4mrmzEWcbRpDzcYxLUrpIwwPVGq +gBQZ4q3l49qnPmugewDLKE8pp/CmukCcrft2XQIDAQABAoIBAQC4LgSZAKXook32 +zt9JaZ+T/yih5r/iSofB6DeN+GloxqT0HgP1+2Hpr4ZoBPTl59CTJlyd9qvkFYlg +CVZlT6O/CyLC9ScWhBnDcf8cl2LtydtNOgBLn3mp3b4QnP1tsQ/lbGK+HiY1frby +nKweVM9S/lAwVX7mspkoNMhcwq6glLL1QnJmLfmHtsOik4e+eD051aYI4OcfkFFo +T5f6Jg5oNC0L9x+ona1avfD2eBmXmUv8kV4+NSeu+pM+hWnc6r5XnHdXgo0Fu+nf +CQ6wUkyXQAmANI/qo+73G3lEZ7KA9mqrCTbM8sulC4c7+Qpb1vHjuz7pSMj57k67 +tI2lPGW1AoGBAPDdooMFZIq6n7wt160MlYDhLujcPaMzgiXWPg9TOLzuWrSZleGH +k818LTXKlQP2ffVADlwHvyi0E7yZVzmG2Xt6Gi8lkGIP5LZK81BlsBspX00bvJCM +VeyE6flSwLA86bQt8spYNAOMMc12F2i3y+YkoKfQmgMiG3H7RjM4Yeq3AoGBANvf +3bh7iHs74oZz40em/W+LdAFBE29FeCloqIXnueHVTLdpHFepmp5OBxogkaYJlVOF +0B/cl8sYn/6CtqKHzhCcCc8V/54O15n/yNRMru4GU0Z5mhaxWvypJM3WXTVvC612 +ODM7shXtFQAF5kgeGSDFOepUG1XRPqPjBmSOFiOLAoGAL/kkzg276bmj6PoEc+4G +tOWkzzJWgHPY3ypdr/W2XkLnBAN3C7VSJeIuqwEPTvvAOKGqen/8feHn8G9mJQoL +tQErx+omaLGbrwcckQ2/1pkV5yi4FN4umu4aH9Nwl2l6bq2cJtsMeQxqOu7jWLMK +xGrVKLduhWM8riYK5Fa9gd8CgYByWA+UOxoVDGWXinjt8FfoRFuFs3QJ79S3pCfP +y1yNp0GIOG9230r7fJSQ79MOx/kSQIqlpzCBfELoNs4H5Bwz4xHu0f/nEMzq12x3 +i5GFU2DHS8Hofz9UGhp7uTkr6p3mDY7YhfjtEihTpL3HT2+97RNbW3YDwReUXyIZ +9RJqVQKBgEQzEKMFpA5NTzs4BanS8372XXKBRhP0CCTcxS23k/kkYFd0Swnsmv+s +ZCJhV5B1Uz0aSK9jfvCaEfwHjdhxfyYBzoXYVxaxphwNY1Vq7QaEzzyXWKDK3beS +9pwnZf6bEQEvvXyJ3ssqLaHWCoViHe0h/Atsj6UOYhQt5mXzZDEK -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/cert index 2b823d28f..f678ca992 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNTUxNDYxNjExMCAXDTcwMDEwMTAwMDAwMFoYDzIxMTkwMjA1MTczMzMx -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNTUxNDYxNjExMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAsFbTfGciwihsEvt2/U/+qWtkU118Hj6GKtIta307 -SDABJ27fXrhPCM6zPmRP4S7VYv2n91pCuGwXSDQqcBbkgQPtIGRbqoqDZYEy6yf3 -ohNrnykiZ8R62wXngXSKVE7KSII40HxUtXSQ1cRAJFFmcXz67iYt+7FLdX0HYU3r -1NQ4kPMk9MlH2VGf6n+ALxVKCLtg2RGdySjo/91vxyks/+ACPK8dXDTMjjuuVUNi -9nlzZQ7Rz/6w9uoyfNQdxQD1UZLlzNOjFfRDCDMeioxbJqzOFA8kal0ZJXB80Enb -WjblAMWF5s1mLjl3HQtwQL9yfUZ7S366EKw55gIF/2oT/QIDAQABo00wSzAOBgNV +LmNvbUAxNDk2MzMwNjU1MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE1 +WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU1MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEApFk4QTS28tu20CSV1s0aCC7kV7p/V8XziC5g98OI +GO9s8uVrzc51xsnJ3Y3+Xnx43x9G9VjgSNhPAuE7+/UnP6iAkZZV0mOD3xwwILwy +JK6gZOcZzd9BX9JldSnjv64r5peg5mzdhNqpRs0i3oPcfriW0sGkzl6IQlsowGoS +eDkO6+Z0IpQDo4CqcWond78LDyvqwbfFReyHEtz8D17sciGni6QPK3kGBFDiO0Ay +keV4GqEXw13ryKzVun/haLmekRf8svAU8+pjpHY0uc1cv0l0nTIZdwnp2EIF0msa +EKYyUUpcuFkMQTToYzj9LaIQmvAGIVIouNAydbheBifySwIDAQABo00wSzAOBgNV HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAORi61mQ0 -dve+w1i3Z+OMSwguc6crBLFRLV0CXit3N47ZCPjrkMFo+2Vhrnj5RXeKzKGMxunP -KCfwDeFg1bYf5C0a96eWuN8AIl7tR9maDUNQGqTK+0nWkR/YV+hyI5aZ4uuSjA9t -ErY/QZM12yVQGLOliQotXP6qLFuUIvH3oaiOrH7YbAnISy7y7LM88Ig4yOnDNYIY -Xc2dMtyXDO4IQNr460FzxAHb92sT/kSVzRaXVPCGzm3COdR4HDVq50Rq7F3ydaXM -3aQaDzeYlqSJiCSx0X+KmWVBzuhbphilTbVxpFjphiwwd7RGHvyH4fiAAeTO1syP -LwmyPNJqpcTJYA== +/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAWlrvejAW +DpKWBfgQpJLpL56v6dFkCjhThtvDrfvpx/gL0p2QQOIrgD7o+/+fmockmpphf8zc +lAFS/M2IuuvJUN7qvq/4pnUa527LsQFIQSG4GhNfHHdKfISLdjgy7LRlmjLnnSu3 +9qa5KvJg9SIWpe41LbeQPB8fLYNuF+tPzrI7QLp/VbMSSyNz4wzpdk8/+r+3KmU8 +D1SEQcaEIg7/YlyJ7TZiWiFlZRFcObE11lRYo6tnh8t2e7s0IqC1JwiAmCk0j0iZ +kHE8yND+CuO8QVDxnmu86STL+q0ldZL6C/1lLlnKFKLp+bZfW+s+kds7lDSmUMDi +CbImL3sIf6clIg== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/key index 8d82e5ea8..4e996b7c7 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAsFbTfGciwihsEvt2/U/+qWtkU118Hj6GKtIta307SDABJ27f -XrhPCM6zPmRP4S7VYv2n91pCuGwXSDQqcBbkgQPtIGRbqoqDZYEy6yf3ohNrnyki -Z8R62wXngXSKVE7KSII40HxUtXSQ1cRAJFFmcXz67iYt+7FLdX0HYU3r1NQ4kPMk -9MlH2VGf6n+ALxVKCLtg2RGdySjo/91vxyks/+ACPK8dXDTMjjuuVUNi9nlzZQ7R -z/6w9uoyfNQdxQD1UZLlzNOjFfRDCDMeioxbJqzOFA8kal0ZJXB80EnbWjblAMWF -5s1mLjl3HQtwQL9yfUZ7S366EKw55gIF/2oT/QIDAQABAoIBAGuo1v3AygvYOgNs -27zUNhqhomLzVG/ypF9IasqRbrwn8sxseJuP01EBQZX6EHre6RDC5OWzicCm3aAL -mU1N7LyH9SIto3l/j7FNLBU+FYYybSaDKqpH3uoRtMHosPvADugt+RnwjpcqT7Lz -WmXR/MWVFG6JiNF98SAN8Y+Kz0zkMQE4WcjKcQclkniA2oLYDdDGUGTOVrCBjuDY -vWu8Yv9HDwdTPUVT+O9ymt2+KJQxdw47YWhjOX1KbF5Q6Bdh3gxD4tYj1NpLWyCw -13M71U0qQDd9U0vhewZWb1Xqy5FkXf2b+09aXPOK2goDJy2CIvvBdpN4P/WQ7D3g -jzO3IoECgYEA24VZSjPUoAQSp4ScZfkkrqPRUG/K/JhovcLOaPu1P6NkwpyWYvEq -biE/Z5plUNxIH2tW12iptINWNYeo02KXDSLZljfCbBux1UlmZ0TJO1kjQ0tdXQUL -fCOUfAdJPI8ZSHCXC7yi5+pQ9x64HUIB3aiowSYXzkHKTOll6EBAkaUCgYEAzaR7 -GVHVFrBTQTHjSa+3omAnP3SfFHc0acVQjdEY4LiGHErvubk3k3TsCTQrI9KfnDLt -cVu1giR5B155LZ3nP77smod8eocXu0os9700xrw20aNR3dutpnpDDXoJVnfjzW6Q -81k+wqlOZgMAUhhZnVc1/I1dlWWXDn6qNe4BuXkCgYEAtN7EWR0nfcidTiU3b9W9 -4Z7cYbgaudEhy+hshZePGSYZaTf3uQIYAbGnOke+XseBLVIVtVppKXBlYamq8rBy -4MHsIZdDvCt9dM0LcN7+JsYlBddcz73OXrQ6LY8bSqhlHoiWC3ebihZIK7TF4mV2 -gBntIWeviaQvePt9mcUG7nkCgYA7f8WmM8klwWq1SEvs/AxzzMJOV93XPA5MNCz0 -e3VpP7p94SivYem0nnXUy+VXfg90UD/nNpOzzf2+phUFn9RS21j19RGNGh1BsVqF -a5cjkT2DNm/vcyoxKtrPwWmGPTYKMF18K2w/QmFOnruvBSCYp60VH4neOgCUzw1M -gUq6cQKBgQCEARl1ylzIWBTbrFdusspXQL4dN9vSQqHeuKTU5HApYoN3ee0q8d3v -dyunGU7zWwii/hzZQ/3VmokRsAcqS/W7qbqau6/EX7FHp82bJ4CimKNe3U8R/LAS -qzMrNASbPtfrRU6ePRmNIIKa7/KwxpukfsZw3wiJPM6KyVHN/+f6ng== +MIIEpAIBAAKCAQEApFk4QTS28tu20CSV1s0aCC7kV7p/V8XziC5g98OIGO9s8uVr +zc51xsnJ3Y3+Xnx43x9G9VjgSNhPAuE7+/UnP6iAkZZV0mOD3xwwILwyJK6gZOcZ +zd9BX9JldSnjv64r5peg5mzdhNqpRs0i3oPcfriW0sGkzl6IQlsowGoSeDkO6+Z0 +IpQDo4CqcWond78LDyvqwbfFReyHEtz8D17sciGni6QPK3kGBFDiO0AykeV4GqEX +w13ryKzVun/haLmekRf8svAU8+pjpHY0uc1cv0l0nTIZdwnp2EIF0msaEKYyUUpc +uFkMQTToYzj9LaIQmvAGIVIouNAydbheBifySwIDAQABAoIBAC07+UXJMomJe7my +OCOU9BNIhMS4qhAIhcz3puzKvozOaVg5WQCeUMBUDeGTEW4EKGiQ/UDOI30pPCX4 +xD/G6/STdj+b9ycfCM7BvWVlJw/9mFvtV6bYSfALwq0KyIqbb63aEgkZ8aZ9YJYC +JBTGiku+lpSPg8LhNfO9j2vWRhsceFEtdkv18T9sCSOQTYIrDKFdbxsl49A/D9WZ +YERYVWmWsSHl4CkKAzrQRMIrREgYJk5R3Qt0Qk+3a4BYlmDG6/5Ayfi0sx+bpcK+ +255GbRPhe9rTUI6uIc57q7TxGOIG+ekTVqkL87bVR8+oLY/5ARW3jXedB+Th2ku4 +/JziseECgYEAx77MOmRPx5ggNQqmSfcaxozmX8Cil6pEZRQxdtdgum9QnyXhG5q9 +J8Onw2o5+u+KsTmXIx4CdcA+fL4Z9D/g6GHsi87lJT6KhdHGAmPsEVFQYc0kme3X +hEfGppP4G4haHBzhNh5V9CxlZ7aHsB9J/LGZ2Utz+kvGHE/8GKiERNMCgYEA0qJj +8pdnnObFW4x+/TrOzf9jxAyB7xp3ZTp1gayzmrG4cQr5OMhAZEXG5t1JOg5SvQXh +LRWDr21BtbizJoFcAe0FzMdWIR8fz8RfqiFlfZSnMBnkhQrngu8CghAkg3g0h0m1 +tSSpaqQGVRdOFG1A/HSjiNdsBpqLGxejdUfZkakCgYEAuIAFdr4nbu6WeUf/93w3 +EEUfmjx+MudES7VORz6EC1E8v/QmLPBOXkd8U6VwLthKXI8cioRysz9CuMiDgrfq +T9v7udv+jtto6listJKFgC2CuQPbFg+6LWZ7GGy/FPdqfGM0p19395V2iUjxpn4Q +QkfuGud2FjEdqhM7ga9OlZ8CgYEAvwXM1NYgfnf/Jh6NkEREBygFJ2gccmazPxe8 +N4UTQUjJt6M3EBrz4rwxPXAUF9WjjY+GfieTzIWuYQqHVnVcptZ5OxTQdKtQY1F5 +XMZ6z2AAG6xvxYR1HxZ5VNEk/CIIqWTcqNH93xuwLn07L2VB2XJCWTjc3ERNwZ03 +fYZStzkCgYBtXFo7OC80f6xRDa1NfQfP4vP6dMczZBZBx2A/rCybwtQsJ40duEB2 +hGmgqIrRfh7H7KC8W792xzE1PKUXztTzxxpIr7Ho/nDUWzambMi39EYyBJ6Fp7z2 +RkPJFDkAYDpx/v357886y7HFz8pUUNd+z9V9CLemVqhjBWmIaLEX/w== -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/cert b/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/cert index d25eb475e..28870c9ae 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/cert +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxMjAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -MlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCo9eRiaPZns2qWDZJER/mSvSICEfDCphbL0oDj -sKfAfG35UAHDDBInLpMVoKmCgCQluJtGJZiTH+Cg3BM475LX+EC/sO8fcZH3BgxX -vQZsRisxtThzOTfKeJnMqR6Fp2a1fdwY43zdPeAaUIHpV+RzkU/T9mneYelhQDUr -4WoS7Ts/77guZkdx79hEmIO7xY0icWInfBfzwdGi+7m4X7crpGl2VUb2YGaSGbcA -OaCkEO3P8v4Mi0fFq/OEIYKbYCZ0mzsAnESqJ/taa8VfdBB0DKSOmIpcxeCKmDLw -13LFFi5mTdWuoC6XpF7ZpJ06CjXNw7wk0KAez/irpzIp7xtNAgMBAAGjTjBMMA4G +bGhvc3RAMTQ5NjMzMDY1NTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +NVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCmZQErnj8vlA5uvizHXnGmvDCpeOkc5Ldbj0Hz +zqTCiwOSTBeestdN6oLKvxJVlvyO3UQJxhJWr00QRwdCYIvLIDmiBQjb7ciOPcl8 +WdLjBtZ36288E9P1nVwFi2RwLo/XzZlCYX0aRe/SM7/h5zzNxBR6FdRvtI1d5as4 +qiGdj7TqCFIJ/8jaBfxlusjEJd+xc0Cn8IAmSpPJYCCDmxjAzw0D12Ui3toTFHUI +J9BA7iXTVvMbfau8KQJTPeu/HQ4zgU//4GW1Qo52gNzfY37iliZaG3HTWD1pxTFO +qdDuprFIffsQrQ7mHAkGnAExxZYc2cE4UF+ME8dV0/6nTQA1AgMBAAGjTjBMMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAjTnf -lVCyRwAyAC/RQPwUNsg4RCBsuPr0ekXfmZ8mQv4ZJKpbLMuYcocifE/xMi3afsyp -5vVUdLP/3qETZUVA0X/a+K/s01G9dLxONi/zH8uqFscArWw7izlrVuCWpSpvCMBI -HNcQ3fE2hU4aOOL3JVxziyerzUmlA4a0sHo8vgusDL1BYq1BJt/YkiNeOo5iLdZT -syPLhv/EOymvS36PizVSBwhp7jQjEtxAhk1l4XPNcgAv5FH188gR/uzud0np3zPq -DUCLExB764mWeum+z56GZXK2LHaMihk897bpaT069a+ldh6oYwZBrJMHlHOI7KHt -ADqlVrG92Bq33E209w== +AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAdUUo +i0A3ttsTca5n9OY4EbDPQz7uAhXkihwoG2YeqnucrNXg+SaS+7hFA9sa1gY5NmDF +96OvmQLBEXVz3uLEiv2KGtY5yiAo6iTtk2gtoGAloULEJ018XGQ0yNuDWUfRLyc9 +5nA8CBPEnBR7MjO6XhvvFMbAjtXoDKFqVeq3okXbL7ygUjlpwv+Sbps+DjQdmnIQ +A90S7gcFqaCmy2KnzADartasIImy/78R9r68UdJrsmyy/aPNnJ/9AbbU8Z20JFcu +clKOENaKJe/o1nOVzZA2E2oVElT++2wNfomDN5ae77cLoCjZPOBArFlhwyk16YIa +wX3ITLz6Ibr9Iy7DvA== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/key b/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/key index 72fc75793..1f4e63735 100644 --- a/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/key +++ b/vendor/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAqPXkYmj2Z7Nqlg2SREf5kr0iAhHwwqYWy9KA47CnwHxt+VAB -wwwSJy6TFaCpgoAkJbibRiWYkx/goNwTOO+S1/hAv7DvH3GR9wYMV70GbEYrMbU4 -czk3yniZzKkehadmtX3cGON83T3gGlCB6Vfkc5FP0/Zp3mHpYUA1K+FqEu07P++4 -LmZHce/YRJiDu8WNInFiJ3wX88HRovu5uF+3K6RpdlVG9mBmkhm3ADmgpBDtz/L+ -DItHxavzhCGCm2AmdJs7AJxEqif7WmvFX3QQdAykjpiKXMXgipgy8NdyxRYuZk3V -rqAul6Re2aSdOgo1zcO8JNCgHs/4q6cyKe8bTQIDAQABAoIBADjFrsDWbf04Txcu -ZjhlStngjT3O02xELKK+D6ryH9vQs48zL/Re6PabcrawrmR4NC0sk5gFZ/f/nRXP -/PGDpn7FHtSKWj7hhV9Qe/M7Q548EaV5NAebcUCqN1uKdAQK1LslGECQp9MbSGLv -LEfAzbV7XSxmvvoHQkj4LyWYb3D+E3QDGL2mroRcpj6t8Qd6m7EXKAvpbnF/YF2l -9Ky6qsALaqCrg950/WjfvNQE3VOfzmYtjXGqlh7JhLhAzLFu6L2z0GxhZthNgYJy -J/OfTJzKNkUIBjGNSqG5xv+HUXw+e069y+IEp3+5Kre8v/xzapI0I4z+mZhwMtnR -JH2BAOECgYEA3q/0hZQr/stOiFlz71yR/s9818CfH6SNU/12y9OVLepVtw57Q5Ex -oAKEFMplLJhMXrLFqfM13Ov2cwpUm91oSweZfJHgfcDYi31XqIYBKIJkHqu46gvw -DVnpH3+AHfkZC/WjNWpPuJwORK6XCTI5zURGb+Aamq7lV/reHYZoDzkCgYEAwjxp -lRs0gQtoWlqsbJjSB5Q+l4yX3YCaV2M0eooz/rhcHcOVvlF3yKqodVnoG4x7MRPO -wuiQuGjswzIi3u1bfsnf5rk0/bRmTlk3kKytUf0WhURq8NlSZjEEKhvDjPmnOqEz -ZtQc07l6MkquEXn4M42zf239l1V1tYLgm0lnGLUCgYEAwUgx0VtJUG7ALCKQORq8 -8VDASDe9JWba8CKYYNO1sNOrMCbWoE++peZpI+6EIE/UQYGjhR4/CxCXqUQ3Kc3j -vvPKqc+n7R5cFb5mPjSJftKl+eUMq8BOzBfU+uzck6dosPO0hCFRLqfsznpHR8kb -WGnBRUtbbBUPpOxuq2vEmCkCgYAea4e9qn0WmMrHG9xVRbnfJgCHi6VdM374oLjf -WDW8dvM2ViNloyy3aMLpXiNT7TR+AzQmonXH6+boyzla4KGrwcInSGpcMZy0OJTT -O7gJVzHnvUdiYSbeil60mZSOx6rBK+349M9u+WWB6uBILGoK6O5rzrYgtWmx+8Vh -jKVw4QKBgQCkaIpzr09sNPWyKD4qxp4c5Cm6mqhGVdvFiFNbrGqGm/4HMXTc7nrd -6wLti1EWq6+Q6neSy91+JSBHkd6l3xLXSEtc28wWvIX4T8daEZyccb0hJps+Bk+d -pHRnkgqNgoxkvZlB4MxrSSJg6x8YKrIV8dUHxpXyG7wPDwm/LDs7wA== +MIIEowIBAAKCAQEApmUBK54/L5QObr4sx15xprwwqXjpHOS3W49B886kwosDkkwX +nrLXTeqCyr8SVZb8jt1ECcYSVq9NEEcHQmCLyyA5ogUI2+3Ijj3JfFnS4wbWd+tv +PBPT9Z1cBYtkcC6P182ZQmF9GkXv0jO/4ec8zcQUehXUb7SNXeWrOKohnY+06ghS +Cf/I2gX8ZbrIxCXfsXNAp/CAJkqTyWAgg5sYwM8NA9dlIt7aExR1CCfQQO4l01bz +G32rvCkCUz3rvx0OM4FP/+BltUKOdoDc32N+4pYmWhtx01g9acUxTqnQ7qaxSH37 +EK0O5hwJBpwBMcWWHNnBOFBfjBPHVdP+p00ANQIDAQABAoIBAEqbVTgCf2BM6V+8 +Q4WtEhZpoQQL47IB1zjldfPkfrl/7T0Ggzy0AZe9A6H2pDjeNyWzjlM3jXdyqIIY +5udbNLMCIvVDfqJl7pvgllv8RnNm2HjyhnCQj2Q8h0sxIfqu1e40EHjUD2zdWNeO +PoYC0Z+NQIUxDox7jzs/xFLm7aWgVTYk86iFa0/uYwnCQpGHR5OkBOhVdkqBMUrH +7hPIoKgLNHT8/jhugv+GamtAmys1KoqIvZsc/XQCMPVmE55n0OBtooQ3fhBXJC0x +UZgJGKNLSjxt7uxHb/BQk5DtFJmPck0derMNkM8WQ6o/XSjlSiKtsct8c7us/c7r +9OFkcy0CgYEAwB6uKr3Al1IM16t6yEEdfrNc/koJ9AQ3sVHSE5CjFBLMs6gL+Feo +r3oFUglY1QB6v+5YUVsLovJLMHuH1x7fKHmd0Fmx75uVzurG2JdKwCiV39PPKYjr +238Yw3Nk6IllPCn+SOIvPDhiuvPwX8FylKGPjsi7AHphKN0f9EEnL6cCgYEA3biT +l8yvpgPpZrpTaMlotKvZkTKtb212a5EdHn0bk5fSM9xaRcumRsWd9eWGutHpMbZx +wj1jAFaGDleBl08zHAr5jsY7i1C3CFKFEUbYR5Qu5+Ot/gdEyO2+j0ehluPOBFad +P514bnWpdct8Khv2dW3OJMzVdFM7M06MXkQFLMMCgYAugT63qecMuhfRvPijsN9q +5BAGnfV60+qHSb8IbWKMYWCbvHnpS47Rqz/Oc+TE6rDL9O38A4X1k6EPw1dGg3qR +WZ8R6CRiU88Xn00y8Kxvh2OAIs1qyHIPV9yusygiAeA3iBK9ocK9WQjNKG9vPmx1 +/gW6Emzx2K3cLmqlvX+20QKBgA82yCHlcLQSlqRu6qRJFb83/5DgCliYCUUuSvI5 +oXfKNilK2ILri3hVvRYPbuRI3RiFLV8nuTBfv4kiZgkM7TPiaOdsIM/ZdQXEK89Y +riSTPXi5/cltlEG5VpccUjE5ZnyTuOyRkJ77weoMUXPOQWYjZ77Ms2TtBSXrIOSj +BDvjAoGBALAag/LXYvi7l4xIuUMuo1HC4YXZVSqDM7kftLdSUGOl/zGV/0QkSh76 +KCVOwXOCmzFeImrZYYDf4uu1wW7paprNaCV6EiChhRgCrjkZIpyw6RHAGshp3a3e +BjXCIHOW5TsWRdR+IvjzIMp9tbHCEvjSw0jDm3JiaSYGRD1AldhV -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/options/testing/certs.go b/vendor/k8s.io/apiserver/pkg/server/options/testing/certs.go deleted file mode 100644 index 5be50a442..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/options/testing/certs.go +++ /dev/null @@ -1,179 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package testing - -import ( - "bytes" - cryptorand "crypto/rand" - "crypto/rsa" - "crypto/tls" - "crypto/x509" - "crypto/x509/pkix" - "encoding/base64" - "encoding/pem" - "fmt" - "io/ioutil" - "math/big" - "net" - "os" - "path/filepath" - "time" -) - -type TestCertSpec struct { - Host string - Names, IPs []string // in certificate -} - -func parseIPList(ips []string) []net.IP { - var netIPs []net.IP - for _, ip := range ips { - netIPs = append(netIPs, net.ParseIP(ip)) - } - return netIPs -} - -func CreateTestTLSCerts(spec TestCertSpec) (tlsCert tls.Certificate, err error) { - certPem, keyPem, err := generateSelfSignedCertKey(spec.Host, parseIPList(spec.IPs), spec.Names) - if err != nil { - return tlsCert, err - } - - tlsCert, err = tls.X509KeyPair(certPem, keyPem) - return tlsCert, err -} - -func GetOrCreateTestCertFiles(certFileName, keyFileName string, spec TestCertSpec) (err error) { - if _, err := os.Stat(certFileName); err == nil { - if _, err := os.Stat(keyFileName); err == nil { - return nil - } - } - - certPem, keyPem, err := generateSelfSignedCertKey(spec.Host, parseIPList(spec.IPs), spec.Names) - if err != nil { - return err - } - - os.MkdirAll(filepath.Dir(certFileName), os.FileMode(0755)) - err = ioutil.WriteFile(certFileName, certPem, os.FileMode(0755)) - if err != nil { - return err - } - - os.MkdirAll(filepath.Dir(keyFileName), os.FileMode(0755)) - err = ioutil.WriteFile(keyFileName, keyPem, os.FileMode(0755)) - if err != nil { - return err - } - - return nil -} - -func CACertFromBundle(bundlePath string) (*x509.Certificate, error) { - pemData, err := ioutil.ReadFile(bundlePath) - if err != nil { - return nil, err - } - - // fetch last block - var block *pem.Block - for { - var nextBlock *pem.Block - nextBlock, pemData = pem.Decode(pemData) - if nextBlock == nil { - if block == nil { - return nil, fmt.Errorf("no certificate found in %q", bundlePath) - - } - return x509.ParseCertificate(block.Bytes) - } - block = nextBlock - } -} - -func X509CertSignature(cert *x509.Certificate) string { - return base64.StdEncoding.EncodeToString(cert.Signature) -} - -func CertFileSignature(certFile, keyFile string) (string, error) { - cert, err := tls.LoadX509KeyPair(certFile, keyFile) - if err != nil { - return "", err - } - return CertSignature(cert) -} - -func CertSignature(cert tls.Certificate) (string, error) { - x509Certs, err := x509.ParseCertificates(cert.Certificate[0]) - if err != nil { - return "", err - } - return X509CertSignature(x509Certs[0]), nil -} - -// generateSelfSignedCertKey creates a self-signed certificate and key for the given host. -// Host may be an IP or a DNS name -// You may also specify additional subject alt names (either ip or dns names) for the certificate -func generateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS []string) ([]byte, []byte, error) { - priv, err := rsa.GenerateKey(cryptorand.Reader, 2048) - if err != nil { - return nil, nil, err - } - - template := x509.Certificate{ - SerialNumber: big.NewInt(1), - Subject: pkix.Name{ - CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()), - }, - NotBefore: time.Unix(0, 0), - NotAfter: time.Now().Add(time.Hour * 24 * 365 * 100), - - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, - ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, - BasicConstraintsValid: true, - IsCA: true, - } - - if ip := net.ParseIP(host); ip != nil { - template.IPAddresses = append(template.IPAddresses, ip) - } else { - template.DNSNames = append(template.DNSNames, host) - } - - template.IPAddresses = append(template.IPAddresses, alternateIPs...) - template.DNSNames = append(template.DNSNames, alternateDNS...) - - derBytes, err := x509.CreateCertificate(cryptorand.Reader, &template, &template, &priv.PublicKey, priv) - if err != nil { - return nil, nil, err - } - - // Generate cert - certBuffer := bytes.Buffer{} - if err := pem.Encode(&certBuffer, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}); err != nil { - return nil, nil, err - } - - // Generate key - keyBuffer := bytes.Buffer{} - if err := pem.Encode(&keyBuffer, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { - return nil, nil, err - } - - return certBuffer.Bytes(), keyBuffer.Bytes(), nil -} diff --git a/vendor/k8s.io/apiserver/pkg/server/patch.go b/vendor/k8s.io/apiserver/pkg/server/patch.go deleted file mode 100644 index a4f8db7cc..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/patch.go +++ /dev/null @@ -1,5 +0,0 @@ -package server - -func (s *GenericAPIServer) RemoveOpenAPIData() { - s.openAPIConfig = nil -} diff --git a/vendor/k8s.io/apiserver/pkg/server/routes/openapi.go b/vendor/k8s.io/apiserver/pkg/server/routes/openapi.go index 2abd0f387..23bbee99f 100644 --- a/vendor/k8s.io/apiserver/pkg/server/routes/openapi.go +++ b/vendor/k8s.io/apiserver/pkg/server/routes/openapi.go @@ -17,8 +17,6 @@ limitations under the License. package routes import ( - "strings" - restful "github.com/emicklei/go-restful" "github.com/go-openapi/spec" "k8s.io/klog" @@ -40,19 +38,6 @@ func (oa OpenAPI) Install(c *restful.Container, mux *mux.PathRecorderMux) (*hand if err != nil { klog.Fatalf("Failed to build open api spec for root: %v", err) } - - // we shadow ClustResourceQuotas, RoleBindingRestrictions, and SecurityContextContstraints - // with a CRD. This loop removes all CRQ,RBR, SCC paths - // from the OpenAPI spec such that they don't conflict with the CRD - // apiextensions-apiserver spec during merging. - for pth := range spec.Paths.Paths { - if strings.HasPrefix(pth, "/apis/quota.openshift.io/v1/clusterresourcequotas") || - strings.Contains(pth, "rolebindingrestrictions") || - strings.HasPrefix(pth, "/apis/security.openshift.io/v1/securitycontextconstraints") { - delete(spec.Paths.Paths, pth) - } - } - openAPIVersionedService, err := handler.RegisterOpenAPIVersionedService(spec, "/openapi/v2", mux) if err != nil { klog.Fatalf("Failed to register versioned open api spec for root: %v", err) diff --git a/vendor/k8s.io/apiserver/pkg/server/secure_serving.go b/vendor/k8s.io/apiserver/pkg/server/secure_serving.go index 3e9da7816..b3dce77fd 100644 --- a/vendor/k8s.io/apiserver/pkg/server/secure_serving.go +++ b/vendor/k8s.io/apiserver/pkg/server/secure_serving.go @@ -23,16 +23,14 @@ import ( "fmt" "net" "net/http" - "os" "strings" "time" "golang.org/x/net/http2" + "k8s.io/klog" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/validation" - servercerts "k8s.io/apiserver/pkg/server/certs" - "k8s.io/klog" ) const ( @@ -51,58 +49,42 @@ func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Dur Addr: s.Listener.Addr().String(), Handler: handler, MaxHeaderBytes: 1 << 20, - } - - baseTLSConfig := tls.Config{ - // Can't use SSLv3 because of POODLE and BEAST - // Can't use TLSv1.0 because of POODLE and BEAST using CBC cipher - // Can't use TLSv1.1 because of RC4 cipher usage - MinVersion: tls.VersionTLS12, - // enable HTTP2 for go's 1.7 HTTP Server - NextProtos: []string{"h2", "http/1.1"}, - } - - if s.HTTP1Only { - klog.Info("Forcing use of http/1.1 only") - if err := os.Setenv("GODEBUG", "http2server=0"); err != nil { - return nil, err - } - baseTLSConfig.NextProtos = []string{"http/1.1"} + TLSConfig: &tls.Config{ + NameToCertificate: s.SNICerts, + // Can't use SSLv3 because of POODLE and BEAST + // Can't use TLSv1.0 because of POODLE and BEAST using CBC cipher + // Can't use TLSv1.1 because of RC4 cipher usage + MinVersion: tls.VersionTLS12, + // enable HTTP2 for go's 1.7 HTTP Server + NextProtos: []string{"h2", "http/1.1"}, + }, } if s.MinTLSVersion > 0 { - baseTLSConfig.MinVersion = s.MinTLSVersion + secureServer.TLSConfig.MinVersion = s.MinTLSVersion } if len(s.CipherSuites) > 0 { - baseTLSConfig.CipherSuites = s.CipherSuites - } - if len(s.ClientCA.CABundles) > 0 { - // Populate PeerCertificates in requests, but don't reject connections without certificates - // This allows certificates to be validated by authenticators, while still allowing other auth types - baseTLSConfig.ClientAuth = tls.RequestClientCert + secureServer.TLSConfig.CipherSuites = s.CipherSuites } - // this option overrides the provided certs - // TODO this should be mutually exclusive, but I'm not sure what that will do today - if len(s.ClientCA.CABundles) > 0 || s.LoopbackCert != nil || s.NameToCertificate != nil || len(s.DefaultCertificate.Key) != 0 || len(s.DefaultCertificate.Cert) != 0 { - loader := servercerts.DynamicServingLoader{ - ClientCA: s.ClientCA, - DefaultCertificate: s.DefaultCertificate, - NameToCertificate: s.NameToCertificate, - LoopbackCert: s.LoopbackCert, - } - loader.BaseTLSConfig = baseTLSConfig // set a copy so that further changes don't get reflected + if s.Cert != nil { + secureServer.TLSConfig.Certificates = []tls.Certificate{*s.Cert} + } - // need to load the certs at least once - if err := loader.CheckCerts(); err != nil { - return nil, err - } - go loader.Run(stopCh) + // append all named certs. Otherwise, the go tls stack will think no SNI processing + // is necessary because there is only one cert anyway. + // Moreover, if ServerCert.CertFile/ServerCert.KeyFile are not set, the first SNI + // cert will become the default cert. That's what we expect anyway. + for _, c := range s.SNICerts { + secureServer.TLSConfig.Certificates = append(secureServer.TLSConfig.Certificates, *c) + } - // now wire the server for certificates - secureServer.TLSConfig = &tls.Config{ - GetConfigForClient: loader.GetConfigForClient, - } + if s.ClientCA != nil { + // Populate PeerCertificates in requests, but don't reject connections without certificates + // This allows certificates to be validated by authenticators, while still allowing other auth types + secureServer.TLSConfig.ClientAuth = tls.RequestClientCert + // Specify allowed CAs for client certificates + secureServer.TLSConfig.ClientCAs = s.ClientCA } // At least 99% of serialized resources in surveyed clusters were smaller than 256kb. @@ -126,11 +108,9 @@ func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Dur // increase the connection buffer size from the 1MB default to handle the specified number of concurrent streams http2Options.MaxUploadBufferPerConnection = http2Options.MaxUploadBufferPerStream * int32(http2Options.MaxConcurrentStreams) - if !s.HTTP1Only { - // apply settings to the server - if err := http2.ConfigureServer(secureServer, http2Options); err != nil { - return nil, fmt.Errorf("error configuring http2: %v", err) - } + // apply settings to the server + if err := http2.ConfigureServer(secureServer, http2Options); err != nil { + return nil, fmt.Errorf("error configuring http2: %v", err) } klog.Infof("Serving securely on %s", secureServer.Addr) @@ -187,10 +167,6 @@ func RunServer( } type NamedTLSCert struct { - // OriginalFileName is an optional string that can be used to provide the original backing files in the GetNamedCertificateMap - // return value - OriginalFileName *servercerts.CertKeyFileReference - TLSCert tls.Certificate // Names is a list of domain patterns: fully qualified domain names, possibly prefixed with @@ -201,10 +177,9 @@ type NamedTLSCert struct { // GetNamedCertificateMap returns a map of *tls.Certificate by name. It's // suitable for use in tls.Config#NamedCertificates. Returns an error if any of the certs // cannot be loaded. Returns nil if len(certs) == 0 -func GetNamedCertificateMap(certs []NamedTLSCert) (map[string]*tls.Certificate, map[string]*servercerts.CertKeyFileReference, error) { +func GetNamedCertificateMap(certs []NamedTLSCert) (map[string]*tls.Certificate, error) { // register certs with implicit names first, reverse order such that earlier trump over the later byName := map[string]*tls.Certificate{} - fileByName := map[string]*servercerts.CertKeyFileReference{} for i := len(certs) - 1; i >= 0; i-- { if len(certs[i].Names) > 0 { continue @@ -213,20 +188,18 @@ func GetNamedCertificateMap(certs []NamedTLSCert) (map[string]*tls.Certificate, // read names from certificate common names and DNS names if len(cert.Certificate) == 0 { - return nil, nil, fmt.Errorf("empty SNI certificate, skipping") + return nil, fmt.Errorf("empty SNI certificate, skipping") } x509Cert, err := x509.ParseCertificate(cert.Certificate[0]) if err != nil { - return nil, nil, fmt.Errorf("parse error for SNI certificate: %v", err) + return nil, fmt.Errorf("parse error for SNI certificate: %v", err) } cn := x509Cert.Subject.CommonName if cn == "*" || len(validation.IsDNS1123Subdomain(strings.TrimPrefix(cn, "*."))) == 0 { byName[cn] = cert - fileByName[cn] = certs[i].OriginalFileName } for _, san := range x509Cert.DNSNames { byName[san] = cert - fileByName[san] = certs[i].OriginalFileName } // intentionally all IPs in the cert are ignored as SNI forbids passing IPs // to select a cert. Before go 1.6 the tls happily passed IPs as SNI values. @@ -238,11 +211,10 @@ func GetNamedCertificateMap(certs []NamedTLSCert) (map[string]*tls.Certificate, namedCert := &certs[i] for _, name := range namedCert.Names { byName[name] = &certs[i].TLSCert - fileByName[name] = certs[i].OriginalFileName } } - return byName, fileByName, nil + return byName, nil } // tcpKeepAliveListener sets TCP keep-alive timeouts on accepted diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/cert deleted file mode 100755 index fade595fc..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/cert +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAvMS0wKwYDVQQDDCRhcGlz -ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE0OTYzMzA2NTYwIBcNNzAwMTAxMDAwMDAw -WhgPMjExNzA1MDgxNTI0MTZaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj -ay1jbGllbnRAMTQ5NjMzMDY1NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMScrdc+XlUPHsDvnN2fFxSSQrhrKBlrHBcelaiFwR1vWt2EXxErVUoRGA+1 -jvQ5Y4NePS46Zpq2N+yibiWjaC0fsS4W2UvPAfdD4nxOp5SaTBy5A0XI+JU8QmbI -Rls+C/fSeYaXSKp5Jq41uTKGc+QwT9pqCeV7N74DSc6kvNh7mIBc4YCOzMnhQq5H -KQVCeDPURxfh7Ew+v13dLYDq7V6O1jBjfg3Rm/RRFnM78kcc51QTOo9ZSs5HgahU -eM4YirHz8ujswhgxzH43TeOGds3McGKv1HMHKJKinX02IHJBqV6U5y/AH92wi0Sp -IKgJ4GJaj/Vda/kPUtf5cL2sOt0CAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG -A1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wJAYDVR0RBB0wG4IZ -YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEALlZe -LJ3i6WQhpgV3jPWuIBTXJ0bb3cbYnk4JLWYW9sIjMakfAlZK9VrfRZKOhI8DsGsG -PVcYOyc5TQM0JkcsCKajyA6HktpMFEtxBfSJOlRAdvvj1GtRnifcA5xBqn1SzL2H -tFx5etii70spZD3jDht2bKLZmL2NbGGVOWiKdtz6qR+V9U4F+uYCq+phKgnLeDz3 -RiMIGvDpliWU/R1jgdi3RENtP8QGhjiwVDGYJBB26ZQGDkd4HYPZj9bROMknnRFk -fbP/P+cmvXrwScvrXLFkNQe/4LfJAJnod4ropQ84z/Cu2JaFbJau4TSlbp57y9ON -7fpK9SV4bTCyO34Uew== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/key deleted file mode 100755 index 6eae7eb18..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpgIBAAKCAQEAxJyt1z5eVQ8ewO+c3Z8XFJJCuGsoGWscFx6VqIXBHW9a3YRf -EStVShEYD7WO9Dljg149LjpmmrY37KJuJaNoLR+xLhbZS88B90PifE6nlJpMHLkD -Rcj4lTxCZshGWz4L99J5hpdIqnkmrjW5MoZz5DBP2moJ5Xs3vgNJzqS82HuYgFzh -gI7MyeFCrkcpBUJ4M9RHF+HsTD6/Xd0tgOrtXo7WMGN+DdGb9FEWczvyRxznVBM6 -j1lKzkeBqFR4zhiKsfPy6OzCGDHMfjdN44Z2zcxwYq/UcwcokqKdfTYgckGpXpTn -L8Af3bCLRKkgqAngYlqP9V1r+Q9S1/lwvaw63QIDAQABAoIBAQCCiJ9mM3M/t80s -PSmBflk9gCmp9QLndVRuCRFFlJ/1IfRK89KGPKXgid7WtyzU+rEWC+BEq+NpPid9 -BQ5qEMZehxcESYk1KpfciYZ6D2J1Z8e2niMNFvPraNmREdCcTWJ2w5eJgzFsdQj4 -SpTNdbTFwEmT8ijl4dvNXLOI7ZivhJ1vVGW2qUJQyR5xo+GuXZZVVJW6vndkzHoA -SJDSii4PMAisibu+Uw8JQM1rYFD2olvSWSnjz+kCk2IbrqhVPOW9PoYETn2DxXfY -0miUGq4KwtNjFnqJO+CDTJL6Y7LrZbKdSVTKfiY5ReLckWhx4RKn01T9RhsrS979 -bee+iynlAoGBAOVDKy9t3kN7FTQJyMGa3QAVUV8B5OPUIyuUOhzMrbIFECtYFXxY -jsnRNf1i2PbVsl9WDrPikNCVyn5Tf4xU7YUH7/Jo+Ha978Fu9tNf95RK+A2GKtiO -8jQa6nkII8Fmql9o3xjCEQD0VBirrm1h3sbC3ylKL4u+yC0a6W7vFRRfAoGBANuK -tIvCRGoEyn8nzSXUez7+/9sIwU7jV6lXL7qgdukr7o/ZBqer48CDlehXU48yiVpB -TuMZnloj/Ndf9X07t/yYwfCP7lpdq6lR7EhG5yS0WjgHjv5+QKLVA7ocrEufgBKA -Wdb+96eyOb1bgBMprtYA8wbhblhut8rk+i8SkdpDAoGBAJPxY0XI/VvIamdZRP6C -Y8iw+QB5JW5Lr6JolZOOFSxCjiuaPMswDnx3kAKCLgYi4mcZDoXQV6jycGhSk4VI -LLni5FkmmeduK/BEHe1LCWXddvKrOKzkmbE8CUCvGvurt5e4AfdlDDn0cOw2pWma -dXsHt6BaahIgu+Y3bpmSmKS7AoGBAJGlhX2qleSX5RdSemD8g/8ZAPh46HXDkSaA -9uMjDYBHau73ldiqyl+vbEZFmOPJLSI5bXJwToOSmGzx9lTsx3TGivNjKUe+GOIt -vUl98F6DX88IBK+FZrAgDWbtGsjYugiMKg3d/MK+FFwxVdhgsOK8on4QFDqKyVfL -bMbJ1QUtAoGBAK4nM5GZyefXylAnq+pzGTStu0Q1AVzN0iWO0G0Q6gaItvk82Scf -wVoEGE9a2pDCR1I1mbJn1jRxd6/GtXvR4TJSxPILS+B8aZFkxl9WIWjv/mnKJkVL -PmSNPbieuban9TRBu6nQfWOfLMHmBnG/QXbx2X1WCRoXjICT41gJ5et3 ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/cert deleted file mode 100755 index 3fb375592..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1NzAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -N1owHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTcwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDhpeY6j6ujZc2W0paC9pmVHlEhbnsH/L0N3JjA -WooyZWgsARSlv95Vh2M1gVymu7mah3HHzQkVe6vN5bfngOO4A2d3fxYP0304+3YE -TCariZzcEk9Ot90VHNasTVMOqZ2qdGRUvEXbpRWlIhA+T9FgNxpBDQV5yb5w67Dl -kBM22wn5l/YM/4HqSOTVQON1SmmLUPlnWtzxVRDKPzI2zxpKkzW4U1bYgdwM/Xeo -B2GjU+1UsBlJWGrRQhCkiFuZ92agls1bsu3+PE2leoQf6vZE+pc0m89v0lqlcgOQ -TcI19BFvLjUneDbu4kFZWDO+f23hhEcHut26IXtOoAIvk9uhAgMBAAGjTjBMMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAHlVy -2H1FxDXAJKeZkFCNAHOiThcm79s7P8+BXnYbQMgdHAiQIQFQDDwbntA607m0FRoZ -1H1n/rzkRXRrNJRPEd3aSnurq6oMMZa1Pai4e2f+kyThpIw6FtI2y/Jb7lKB428g -9AHtKSd71MEArOvWHi1IcX6rmH/vU5ezBgPpjtEC/5bI8PJMqr2osesjppKwwwjf -BTq+AjvxltPDb+fykto41IMzpM7KRO/vat/dZ5OZZOhDpbJlAAWUfCdlWcL0kqTt -ok+biBB4xShOwpSyKCmJg4otlvN7qJ34fCjYkQY+PXzGS6YV34Wj64F8mReTt4LO -glampIa1cLUWPMlYPQ== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/key deleted file mode 100755 index f9f40c6df..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA4aXmOo+ro2XNltKWgvaZlR5RIW57B/y9DdyYwFqKMmVoLAEU -pb/eVYdjNYFcpru5modxx80JFXurzeW354DjuANnd38WD9N9OPt2BEwmq4mc3BJP -TrfdFRzWrE1TDqmdqnRkVLxF26UVpSIQPk/RYDcaQQ0Fecm+cOuw5ZATNtsJ+Zf2 -DP+B6kjk1UDjdUppi1D5Z1rc8VUQyj8yNs8aSpM1uFNW2IHcDP13qAdho1PtVLAZ -SVhq0UIQpIhbmfdmoJbNW7Lt/jxNpXqEH+r2RPqXNJvPb9JapXIDkE3CNfQRby41 -J3g27uJBWVgzvn9t4YRHB7rduiF7TqACL5PboQIDAQABAoIBABg+G6MVBmqyqEjY -7SS627tCm5LM7Njp1WHk3mBkGc7aSDvaDd7U400rE4SPFmYvavxoKtg9dglh1Q50 -7LIpjc2aSAZ1l+gxX5W8pmxFxi3NxhV6vhyF8nGvPH0cfZzoqjDC+niEFblIXi/0 -newj5SnCIcb1YC46d4RoPgQb24ScBiQi3DeuqiDPQO3cyePyr5TEpeL4djB8YgK3 -yAgKFotsox1sMz1r0AX4JdoC2cYBh6qmGs+qdkMYW3O5XKjkkWS7dglqHIchhsrr -P38kuyp30fMrE40+5G9hKi3WO/nl3FP/eDM8BD60QF1edXobszfd8BsVnrBfbfjP -wDP51rECgYEA5/hLWVPXvTkSJeWzkEYx2PvubClr4fZE8j4oYTikD3q86R6UkEhe -c/yZd9WNBgwUrLG4SV3TaqEWvyUEnsaNbI1YK7e4PrhMSLLZ0G040jW8TA1SE2kT -fnJ5g4ZRWTNvksBTcs3QtMC8FzFazQ7gKIYz+SXopxeww5D8T/ok/WUCgYEA+QXz -/mYUnUMt4kWfcMDDbiYCgVSJK71E5M5qH2yxjB7NFLcl0+udQ5FrrW2YEgr3DnSV -Okbg4ZcmdnjCOU7Xu5BlU0GWe5lXiOBf0sUxrNU3OY5voVPYgSXJgTPRzguTpetA -2Liv/7x5dZ0krIKRTCKWu0iwcdOOaPrEouln740CgYBcrrckXLyBLTFUFP/2sCUw -hhBQBQjGwsfvZehqV+AtEyQxnHdNYqzieNW0rI1pEiCck3GHVsam/vAAtUCwU7Kj -4aGN7hzeanKIRXWDsnAWhUPTuyrE+KHCTujAJUWRd1yn7NIqt5Mg9TTxq1WVQtFL -P7u6W2wmfu+wY9h79/0ZhQKBgQCQoRt/wmvwlmbcxxD+HIakv6Cu2pk8dRXBSf0q -uSc5OV5kzKZEudBBwQDn3gH3YLTyiVVuXmIXw4DMSACN5jO3tPqUa0BqErpbPe2J -bYwXVFJZtFczPI4/G+I3jxAoemLLd6HW/RUDE8T7QUReiQq4TFJ8/Y+03GkWoaZ4 -89SwtQKBgQCmWHxz0eXQk3YRk0kupSrK88pZoc9wvcWYhzkiQpP6+hYPxH+n+U6s -NjHnQAVlRUIP0VisQRkBC4iy2ca/gVVhKgygVBuHC97fKAHlpUlO6Y7Ow031stAy -K3zrTjuVwsz8C6bFCxHl5ojP+0cSoK7qej09vj/te1DNvkYuE/0j4Q== ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/cert deleted file mode 100755 index 8fb51107f..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/cert +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAvMS0wKwYDVQQDDCRhcGlz -ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE0OTYzMzA2NTgwIBcNNzAwMTAxMDAwMDAw -WhgPMjExNzA1MDgxNTI0MThaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj -ay1jbGllbnRAMTQ5NjMzMDY1ODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAPGTpeR8wkr9yxMV8LLI7UaImRF6T0ZT2HL7cmjZDbV3Ow9L8UXvlQ0SdKbT -ph2IU5Ww4h3xSiXXXGh0FSXALs1Ieg8DmMYKHNcnOXpShwuXBJ0NCpPSLnAO+2hg -Jq+ULvBTGjQhvCX+cjI5IquYp0sSbERS/+46cGrwWoye67Z9Xo6enNjHG8YZf35B -Wspvm0awUw1KcXkp+lJ9zoblBeXm+uXdMhzEyRpghRslwvtPKyU8YhTN63p0Ru1E -Kig3pctotL2n1/7+tR8yhjEstLiydHYWhLkX6wsUv+rNirUGVUBjF5VFtERzMPRK -0dh/hs3v2JSby56IxRcqqTSzvfECAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG -A1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wJAYDVR0RBB0wG4IZ -YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEAEEd0 -MOqC0POVtxGCy/BHR6sVcf1r1BVTt28p7u1yJIdrOKuknlILt9iSNfFcNPRWIP+u -7SNPT8td6yViBgn7UMjvFxZgQn6kTsgTfdRV7eMxoX/jYzt0g44k0oVGv+xiJ+8q -m5Ng+tMOMuY1+JganxNad3mwdff4uKxXuVQsV+mjXBwaJHIdxBmCFqg/dGB60lyb -fxFjuTAT8xyL+UE3VUoCLFdNDgIsm0v3uj8nBsASW1LeZSbMQKUJXGlvEpj5U89d -B9ZouygfISPKQ02WYYDfSmtGCqX5sFZRh2uSPp0/UPUB+hUk7C0KN6TgsB9kOAD1 -Sa0X3+KhMRVOk7riaQ== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/key deleted file mode 100755 index 8b9712cf0..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA8ZOl5HzCSv3LExXwssjtRoiZEXpPRlPYcvtyaNkNtXc7D0vx -Re+VDRJ0ptOmHYhTlbDiHfFKJddcaHQVJcAuzUh6DwOYxgoc1yc5elKHC5cEnQ0K -k9IucA77aGAmr5Qu8FMaNCG8Jf5yMjkiq5inSxJsRFL/7jpwavBajJ7rtn1ejp6c -2Mcbxhl/fkFaym+bRrBTDUpxeSn6Un3OhuUF5eb65d0yHMTJGmCFGyXC+08rJTxi -FM3renRG7UQqKDely2i0vafX/v61HzKGMSy0uLJ0dhaEuRfrCxS/6s2KtQZVQGMX -lUW0RHMw9ErR2H+Gze/YlJvLnojFFyqpNLO98QIDAQABAoIBAQCu+8LrSU83ILSr -I3ZRGmd8cs9lMJIhn/Ql/Wq29ZoPesjl4J1oig0OBfNHMAGgXLImuJRhGfkahe+i -nYr/6EA+ZCQ9od5UfNi9I+VnbEXzqDUoSV0DC/ilJMUIqrT68zw4ygkt/82YO8Ge -DXLGlvF+2F5h8zj854msfGMqfqbAbJDynA0ZDuq8SORUb/1RIiAZRrABZ1n6HsXv -cZb12wcycbxKTPfISkJDJ+PUVmCcm/eO3jLDgy2hAY5bCG6+HIO/N407Ze83TA81 -nBRM2WEA9BJbRmmB2yAEy2aJamT5lo5qORElmW0gEpAEceRgYi/VjPyvwjOw7IW3 -SlEDaYbNAoGBAPzt80mwWzgLH0SIqUadXbJILqZ1j/0sCr4r9CfIPppbZckaXbaC -iokh3dRaVBndI8z/aPz5+wmvNjqxQ4Jz+411ILK7G0ogYRJcTaQB7Vc2QTPtdu3t -HE1xCktyTAcyVJtrVYfpqaAKZ/eEnDmatxrMW1nmnFlZxBZErnSAjMl7AoGBAPSC -anORXVXqbM6d7XKXiXYLkagmB92LP36DQ3OXiVIH3CD2weItRvqup9+nIdMJMDyN -PR9CXSQXclFjVqpgPFKEAUNcGbTea45Kykw07CUYEdYRXRYtij0hhsRon+T6vsE7 -eEQQySG0ub6cTsFi/AuxWlPCkQLIhfCkVW4kvqyDAoGBAKBXEGXkgM9Ubav6nqT/ -WciNbdVkrbUnWGAaaRtXHCiqTCpiponu03f/mirmYG5M/EcWmy3UI0qOYmhuu4dV -k2CnoeTsLG6ffCoxjZ6tAhLJeCg9H6nRKKIHSSlu+beONoiYUI5qmHe2YRZOYOM7 -q1w3tKmXQgJ6n44mWBnO7HFFAoGBAJF5Rnyb8Dw9zZ7gt3WGU3K4T2ELv4JAZvaO -goMzlbAInR+/sHsxFRnw8FBQz/8PaHOeVM9UXLYsfQePYvDbcQhnIZlCIslJzBRM -yy+sDRPEzlfe3NNlJOpaGCSjWv6RcQzmpRdaJVC4hgqyVOkaS3tpeaR8Dmrpg0c5 -ftqZYhihAoGAMRbt+21F1BD3AGDseGIg4MQIEPfk7nh/cVFBcnXAqV49dmm1/g7G -L2itzJlTb1oOnlY9qBksocvnj3w8hsrWFvt/s0wv1e3uUJ1elCb18Rm4UQtr9td6 -XFqEgDaDYyj1iEmn+PrjQc+DqHn6JySLW4LTM82KWwDnMttvwLFhaOM= ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/cert deleted file mode 100755 index a402b3e80..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1NjAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -NlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTYwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDozgb3GKC3n9wREqYUm92/T0+NnEYkaWOitXAH -BW/Gj9PAF4sggnAey62H7mkBaUpw3s3RXyrqnRqrXVWvWgbSpf0Elp3zfos4raEf -hgWhqMh/SEf5ETHNRyfebxTSeQYRuZsvAPEsRWKf3AKFEykfW9y/GnKYM1elL0nx -Fgh0tq943epjHuzKfVWp8LxnFd7fyL+BQsvBNnYz0SH0F9oTUU3nDCS6Os/+EtNQ -SjP54HQ78XczI9AMvsFUS7yFEQdM8VW9uYhdv/Oyi9SLywhOCHSnV9buJ6F8URzO -B5Cawdteew7U+EAXbEwY2D84NARF/J8iA3Eh7+UKd27WA+pJAgMBAAGjTjBMMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEA5vjR -Q4Rjx8ko8+Zt9gRceKCVWEmdZLGkjwdW04YaIcrh41svm+tgxwUMdQ2beNjUbLZX -DAVvK99HiANBc9Ee4DyQFkLI2z0EiAJpuxMjZlyzMmKLeijOkIkxYIshhfc2Y2Fr -NIf6OXmFBEjqsudxkQiGfSqc443GseJmmiuhW3JR1a6ARgut4AtPsPv2TijX7tcR -Z9tjzAMiubNDQq0g/Eh9vLZkv8tNTqoJ5N5XV8jcovNWRcIIzl+lXBfy0o68LwO4 -Hn/MzcMxOdbNfFw5nMaDuQK4oO0vT3D9nedQkdV3keLZtagN9/PO1XtkCSQ5q7Le -LS6fs5zA/9sR2kEuGw== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/key deleted file mode 100755 index 91de1492f..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA6M4G9xigt5/cERKmFJvdv09PjZxGJGljorVwBwVvxo/TwBeL -IIJwHsuth+5pAWlKcN7N0V8q6p0aq11Vr1oG0qX9BJad836LOK2hH4YFoajIf0hH -+RExzUcn3m8U0nkGEbmbLwDxLEVin9wChRMpH1vcvxpymDNXpS9J8RYIdLaveN3q -Yx7syn1VqfC8ZxXe38i/gULLwTZ2M9Eh9BfaE1FN5wwkujrP/hLTUEoz+eB0O/F3 -MyPQDL7BVEu8hREHTPFVvbmIXb/zsovUi8sITgh0p1fW7iehfFEczgeQmsHbXnsO -1PhAF2xMGNg/ODQERfyfIgNxIe/lCndu1gPqSQIDAQABAoIBAQDBke1Ar32SsJzu -pS7qm975HxzqhjHcPLTXqT0I2YBi/Vv3sJvB4DMRqBEVoSo2PjHjP56qpBKvGQn/ -yo9gSd66b8G9eu7Cc0mXSudZqror/IcZLiSJ974NDUkdLgeGKZLeUhGyN3pQcTDb -8rc1pwTeSid1zqvR2X7ankNA7i0BvP6UXlvWM8kUvfFDwPXhHPZtkFELc4TeGIzB -e/l9Uk0DAgplkhM32s+0rTZ7wmcSUK9eh7/kiQCUKvdCVwegsK9iCVMaYIMggut1 -3KEHuVIbuLdjFu/tF4SN85funMIPxD7rKf38aDrR1vhQc5tq88dKwVrD8EANcA/f -34mAWSIBAoGBAPZLAGJ2McxIoK7ymyvGdNta0glzzbww20xLB3MHYpo+cgff4DN0 -3nA/es49So1m/r0MKjnC0qxVMceTrU4u43nROwbLNlFBZ8hzoEVobCCoykWKkhQO -hS6PkxBZ2s8nsSQCr3X+CpHd+JqT7Y98ydWVnE+kDOFIPr16j1SbBJS5AoGBAPH6 -73BDmHk4fBb9J2edNtx+7/1/+Lbb96qyy7LnA9zxdXgqjeZwFW/tNjtD2l+TPWlR -O1L0NkfnhzWPd7rDlQA7Tzr0TLF/H34+ycbaorc22M6GEg9zJwRY42EGbYJE5uRZ -Sq4jXOTOAta/lb+UjqWI7eYyH89SKlYcDut1VVoRAoGBANucUvJ427yBAi4dC3nE -EszJNcHR7aAhnFlyCWlrK2PHzJvy5xJa4kEKiXE+u6xMK1bccwZgDsQ1jxabOowd -SR6FD3HmXz+i52yYlU9uZgPVHc9WWRzjOaQjx4lr5ayTguNONbArXrdkStlikBBC -wCHfrqpg6E80wSTpFMbnFvWZAoGAPNSDOqqTeu27LCBJtp9r+jQi6owwHu/fK9c0 -o+21J+a/TA0OjP5iNTfhqTZegCZIiuAz1J+1wY+visRdKeMe4ucF/OELIpe9eAQa -v1WZEAvGpuxHQAEHru0Vg/+UqeneTUsxHeOf55juV8Pjxjx3O5/XhkXVf029fNYi -3ggqA7ECgYEAgowePEGL7l27raa6F9h4wuosfuFFdrrcOJeGxNV9jAe2s2KKoQFO -lCv/AcCsRepf9G235TqQ+if8a4p7OsHL9kxOspKBJKnwq3u+jgcJTl+HLWgnDjIc -Yk2xlnRC4N4OiGQrxjOmFXQdXiBK3T4CJnw5g0MynrdwiJCCCnEIG+A= ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/cert deleted file mode 100755 index e477a0f1b..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDFTCCAf2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1OTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -OVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTkwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQD2NQ2T3x1nBhqWOCjiED71R+j80XsFxSMZXNJB -wUCCGZysf6OGO6M+NYZ2qov58gfGrcZYBJWwuSRF+0NeoVzkCu3AJkTKXSdtv2vi -M248yBUhvwPwbTcoMyG7p6LhLlmlPpP/7n9yVfVtRzFgy4UPYAlJmTnakk9jDKXM -gi717BjntQ01+2I/HIZls5B5vLwWuHtWrdng39Evn1RwtJrLUVJE5b6/+otvokXB -DpKMb/aI230uw9D3Csi+6iAKK9JuhCEe/S3ezJWg5SugG6UrwGBLZYavXP7iiB9p -u32XIe8lMqQfsiur7iCQehwxTdMJ7uR5STS5eqfoV2SdnlN/AgMBAAGjWjBYMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MCAGA1UdEQQZMBeCCWxvY2FsaG9zdIcECgAAAYcEfwAAATANBgkqhkiG9w0B -AQsFAAOCAQEAuVVTMV237szi8c9Oy5ulsmgYkp6MqfkKryy6Zi6r5UtJAWToAFu3 -dvHKnSQNgiWDewVKn+pMGNZuo3o6PGxdq/E2ZQ6/oCxNRThb7hC5IK4Yot40EUQ4 -ZavrmON0velXZJ3MwbzSzstLnJCR3maO+Ko0KPC/u4LADCQyeVrEZ4IP/RPQ2KZt -mdmeHTm53tLPrcNSnaoW+tMs6JxAT30xOLnjwYfEtbMCVhGB+aHQIGFS620qZ+dn -oTqrjempIIos0Vu68ZhCaDwgB9FiNtFMplxrBvOIfWO1Dz9AwPxP1fCMlZwtFJt8 -vuRu05WPJelfnEKXIuGhuGf369xyfw5cIA== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/key deleted file mode 100755 index 27ddac795..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpgIBAAKCAQEA9jUNk98dZwYaljgo4hA+9Ufo/NF7BcUjGVzSQcFAghmcrH+j -hjujPjWGdqqL+fIHxq3GWASVsLkkRftDXqFc5ArtwCZEyl0nbb9r4jNuPMgVIb8D -8G03KDMhu6ei4S5ZpT6T/+5/clX1bUcxYMuFD2AJSZk52pJPYwylzIIu9ewY57UN -NftiPxyGZbOQeby8Frh7Vq3Z4N/RL59UcLSay1FSROW+v/qLb6JFwQ6SjG/2iNt9 -LsPQ9wrIvuogCivSboQhHv0t3syVoOUroBulK8BgS2WGr1z+4ogfabt9lyHvJTKk -H7Irq+4gkHocMU3TCe7keUk0uXqn6FdknZ5TfwIDAQABAoIBAQDKBSg58HZAxcpk -/nnVXL08KCAt6nlGd8bgFcDUgYy78+YRyL3V8/NzpRnLHw+yLH1i8c3xBPoKwy/X -WF+kM0V0PN9urjf90Ef9DneoaMkIiKiGQyUpT4RVsPb58oh8urqGE33/H6RlndC/ -NQ54PSbWQdf9EwRcq3cGcCdPUnbUA6Ur/m03kIWYMnPKZeXqTCA8AMfsLuoXyf3G -H9Q/ReGWok2fOkw8I/2D2HOXh+vnPoOOWbxf75DAt7tk2tRrgvQ7cI6TOJo6AImD -E1rHU7lrVhyo2AK+8BfjihGgtgt1qCwEeviuJn20wRQwTpi3r+aflaVCgsZADoc5 -6bEkjP/pAoGBAPZVyIIg4W44lHz7xu0DMAbdK2CwaYPPhEewVNTCmtq6wvP/CKz/ -gZRv7HLFrEAPuMuSPi0+0lzbUf4IfHeP79jzPEsoHlzaSyKVho91uttsTYGRS0yD -M2Kd7uavXH/lRR16h6TlGRgNTAfWh8I+WimzBi1IHP8LQPv9hS5CUseLAoGBAP/d -/FLXTQJ4bsb3Yune/xoerrMo05cUY8BM6WZ3s2wdPSMnTkh921CyzGzfWLpDHrww -rFBrbs0O7YijRU5gjwddxVMT/qcwNEETEWw38X3kfPx8TCYKT5OsD3HoiTKMUVJG -ehdADEm8mh918pgSvW/hvFaW98rIWjVwTt9djkJdAoGBAOkQJJMp9N/J3IOb24wn -desomn/yqQIy9p61MK3UKZtFFGqyI006uSjt9DJq4BwEQ/0nMniwdWuxfhPxh4G/ -x1fmWmdpX8DOMERaYGOfKdms0HAEPc/4Wke10XCk/clr7EaFxYy3zVQ6UHMiAHRB -diD55qA1GGoeBa/lH3qy+YsdAoGBAKP4j65LGaf+pAdQHIyCAvurNAvOmyKTx4VC -BMVM6qfbaQWxN8LPHRBvNQCEdWkQgI7bpmH3J0+0RFcvQsgCq0ZuOnmOM8DS7HnT -jXPLujASkGKCCY7LRsn9FvzJp7rEH41Zav6hZf6PJjoJLUl1oP8lK7xWDUBf+yeJ -7JHKc9NlAoGBAMhca2WXdxX1R61zdjqa7Da9fC1a8cdkPHsN9CA6ZMxGgfrbZHsY -YbqPhjuupOJe5B5MZ12oRqye3u6SuzoJMcSBOjKMLX/ME5fOxNRiAGgm1WEbDeFJ -3+ZyymShyUbpRLOg4fUC1vptzSJ1i93rXOZI6Vs0rWMj+PKDEbmFLiT8 ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert deleted file mode 100755 index bdeb4090c..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNDk2MzMwNjU5MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE5 -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU5MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAwRrWvzL0zR9OFg1ipRU+Pvd9v+WN4ILKxU2jxlut -vZOevsyxflzRNOQImejpdXEtA/yZTKNYOdU+dMdPDdSsMPFzRgzQfiJDKqJw4jB+ -SF2XROuZEYMjxoJtueAGnw1DO9tgzn40NtHrPJNKadrYljEF+zycNLcPf78GK/ug -+5rK5MkpNVmxO4yjqxk5ZB3KD4Gol3RaheVKYmTfjNIAO0wk8O2NbvG/JxOPTpDS -aElgpfdy3Bxv4JJpjgNKrHEUYUqkwlqmrinTw8MSfKJq0MJ8nIx8HRojrYrf6Jh8 -zDpPYuqlUygcwSz0sQEY6UceaupQmlvDT9QLLVBm6aOibQIDAQABo1MwUTAOBgNV -HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zAZBgNVHREEEjAQggh0ZXN0LmNvbYcECgAAATANBgkqhkiG9w0BAQsFAAOCAQEA -jdyL+g1UlZ9UsnYA60iu3n9O8nzUU13z6d3TR3vFBiaTAiVYgcEoL5BmhZgn5jcW -AlQqmVicma4rypK50GZL7/fJBwiaUjkGNBh4ybfO2TRyXbmTCtMg+1FUe/LptxD4 -IWvJvf/Y7Vv/Lb1Gh0MXUcNeyLThletz6tJI3NAQX3meZm2J6/PBoERP7KXo7C4F -K21/V3aD8Zj7gs7LQLePz14ARAuovd/LDFmAHBcL3EIXiegDGe2c34IKupTPiysE -KIWAgOWSBQ9iZw4Ak7eFSDPIO9Xj1X+D1Bcb2EMcYw/9xJt8JFAqFFjMHPcKxCkQ -oY+IHfc38TMOEeAr8N+W2g== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key deleted file mode 100755 index 146d1f7b1..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAwRrWvzL0zR9OFg1ipRU+Pvd9v+WN4ILKxU2jxlutvZOevsyx -flzRNOQImejpdXEtA/yZTKNYOdU+dMdPDdSsMPFzRgzQfiJDKqJw4jB+SF2XROuZ -EYMjxoJtueAGnw1DO9tgzn40NtHrPJNKadrYljEF+zycNLcPf78GK/ug+5rK5Mkp -NVmxO4yjqxk5ZB3KD4Gol3RaheVKYmTfjNIAO0wk8O2NbvG/JxOPTpDSaElgpfdy -3Bxv4JJpjgNKrHEUYUqkwlqmrinTw8MSfKJq0MJ8nIx8HRojrYrf6Jh8zDpPYuql -UygcwSz0sQEY6UceaupQmlvDT9QLLVBm6aOibQIDAQABAoIBACeo73oNaSHH0C3P -SfdFyab9BaKn7t+xfRvQulY+9gv9iZj+SWX+gikuvGV/5JLuT6SF+KY41iHqng01 -8hKRH1xd+qLkdt2xA8J54l1SQF10e2D4UlO6b1qR5x9J15JLEwf0IonGecrYikvC -pIHhJKKUJvpWlG5vOouuHAJkh8ekwz17cEle6IOPY+p9hiivk80npUzbdybnHK26 -pNGPICich8sUWNaiSUia/TCwIDzU4NkNhsOxoV/QZOTOFnHl4lR81dSeptdVusPg -JdC0+VCMc8wGgXdDqWxPzDdT7CIGNZcqpltBEe/27QPVYxckK3kDkOFRXshD5lPv -56USHrECgYEA9pB5ChHu9JqkedN8QgUfipl/doAOz80vghG0gi+wvkeD/XrzXaES -rXlkGJFKbPkTGhemSzBPQNEbpQa8Y+h+GfKLHux+Kd7pWRym4vXojxeJyaCCG73i -d2qtoHi5QeZOY36AJT7bq3T1ZKHG157vEXRghth+ozpzb1w+KeO1ZNcCgYEAyH6j -FpowWYdsPljqx+7SfoPdes/LGtfIWnGRM12C6H2Lb9FX6l1yIMNJQgYhyRPSbifL -uArj/Jf9LskaaRYHvjXbtBANHHU92kBZszMj3x437otADwL9iWsV/cyIDkei5QTl -fP//M5RSZj2WyRQJ8hXTA7Ya5e3rGJYlHQ1aRlsCgYBJMK2dXaFvHpCAUVTrTBYG -0HXTuUOsT54woAzTMFDoytXVYq/nNS8UK5qY6FgNbQpMjoSggSClfu0T2aIGjjcQ -gLznWxBAYZknCKhJavGzuCsAnRLCJWWaSSJtJijn9POD+UMUy0nt5XQKgTNDQjx5 -E/CrVoyQ64LkpZ8WVC++VQKBgQCLUMu8cem03FAPxrNluAKWHMTyiJ8mCNjUV+PA -YHMNX+dbDIlddg9OysQF18L0OQzYtFhvi0m+hFJOhzkN2lwJBN2kch7aLnGLTXnG -9nsvl4zf+ezKQZaxPTLrx4qm+YosP0nDoRLQ4XicSKGVGZKLoDSfeJOaP8dDr1kc -peGbzwKBgQC3Tz57NVbIDa3SdMlpgV5iUj+AQ4Q4OLxAWzePttic1+nalQyFLMBI -dq4HytJEen/CK/XwelHpMfMv/t2bZcqags+Epm9Qhd7jLMaFsmrscmdjXdp41kRR -KOjZHBUuhK7HfeBLJ7oLGDlXHvtfwC59DRLipYrtJLG4Etkcjfav8Q== ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/cert deleted file mode 100755 index ab75f495b..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDDzCCAfegAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1NDAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -NFowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTQwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQD8AqsPL2/NyBR9LSPSkLedA2pI5DeQ+z7Zfp9K -8EmbCcawXZabrkPCr0LwNyylynssZXqGLYWvwpl8zGk0E2Gr++diIg17uZ4lZUKN -jYhGdV8Y1Bx2Wl1At4LLe+bmxv01hslT4EDRzHfZU/wy/gTtYMJLuQOKqddW3lkV -FXNgJOVGmIm1tehwDCJhL9NIyQcy6w4i86e5B8q+pk3V95mOlKR7lHhk1ZFsMCKh -TCYG/qyu+ZUkKvZCoyV9SwuaN8Df3TT6MYSX2ulvmze2okfePwTeKMpwudrfn440 -0TWrWKJuMdNe9bHXsvhvPZlqBCouIqPC1KiuMg+Pcx0laz9BAgMBAAGjVDBSMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsFAAOC -AQEAXHWVJ8fuPrF7Bgj3i7fyH0wE6mHeUMSy/bxXdbrkY/H1wGMxHZa8uAodXeNa -Nb3pBzroqZcVWjkh56knGgeZE4vmkWWZZ3G0Bj5jr3kzhZ9Tpd1LyFOhIdUttHPs -DOVfD7AIl3v4xlMDwlYYQKrt1LzHZX1n7sJHJK1s5pL/lB9PdUGka6XLXo7meKPL -KluKBF729MfwBx/GNrQEh4Hw9/KVnBisKKdWqowrKzVzGj3hv2q+wCxDuUZyl7Cs -nw07CGIn+t7+5/jRyEoIwUiOydvaOFkXgOpWxHQVEj+7Hw+rstDbMDQ2+p4LpJjC -bLBrGtpaitmhTPyT+SSR7AZisg== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/key deleted file mode 100755 index fbb247fd7..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA/AKrDy9vzcgUfS0j0pC3nQNqSOQ3kPs+2X6fSvBJmwnGsF2W -m65Dwq9C8Dcspcp7LGV6hi2Fr8KZfMxpNBNhq/vnYiINe7meJWVCjY2IRnVfGNQc -dlpdQLeCy3vm5sb9NYbJU+BA0cx32VP8Mv4E7WDCS7kDiqnXVt5ZFRVzYCTlRpiJ -tbXocAwiYS/TSMkHMusOIvOnuQfKvqZN1feZjpSke5R4ZNWRbDAioUwmBv6srvmV -JCr2QqMlfUsLmjfA3900+jGEl9rpb5s3tqJH3j8E3ijKcLna35+ONNE1q1iibjHT -XvWx17L4bz2ZagQqLiKjwtSorjIPj3MdJWs/QQIDAQABAoIBACnOZ4JFZE7G+l8p -td+gklVB08fz1CQBChQapWJRKmTF4mgvnmSFLEiHupsPDCEUzgo3a3QG6T6XEc9a -Obmh3Xoid+gXrhTwXgPmIHxLFmhZ4ETGK1KW+xFZYCFRlKSELk1K5us7MIWdXeR3 -wkbTTQ30F0dokeXW9xo6GJ0eyd0Q7ZHzePI+Gh9ORLNeRdyk7Px6cFuDtox78r7b -teQMGNeEWtdJArWIbjxPprp84uo4qb876W2TBCt/rrFp1CRfUXtjSYQXTEsvon76 -is64X3lQhZR3HCbtjbRVhq76aNJQweVIO9CHkeLwyzGc/PyblNJNM1blIWbgQHvy -Zr8kYAECgYEA/0e4gCGohQILo4E1EnhWuHwKPACsBHkQ/D3JT2H/yo8IZUvnsPZJ -0iNhDnnPi892Xe9n7q8LG+9FVO8OYghfiF4n66dAEO8J0UFsA5CLNGr69noQEUvq -GJdOvX+NGFOzCaoX8ld3xTt9V+pvMFVPFKIoy6bns4PJlllG88vgweECgYEA/LiW -UKYomY3T8e7KgCIilkNrKWYv2qCKgoXMHerI+gz9BvcSdDRz7GHpkV9ZP9GJuJ3n -uLHdUNkFam5jtpwfqjiBvrINgqu8/jesPeocxQwJf3x5iGazxUCEK5YonePyuxih -e3pR+ez1b3wjBfVshs8tg58F0OdO3qVu+IZM6WECgYEAz+Ie7DD8o7vjsHWSu4TF -0hwo1W4Spt3UKCVEn2GFxPUveBYVCjW2Lerjqb8mdYsvsBU6hNOE722s/xphkxGQ -gmNyjOO5N1EBpKdrB4gY5EnOLxN9rCgu7XGiDI0nYE0gulkKgS4becEVNJfTjf+a -k4nuQNGdU8GZUtdHAVfgouECgYEA5ksrJxkTPEKjFf89ZyA0FmwfVh15lCfhsGlO -hSCzvjFhzhwOI/i8fncHCeMyiFZgwuyaAZOLkyYAqmkn0ntY25wcl3LXnvDzC1Ie -UllpmCKM8TCz6xlzzlcpWjK+lornYZljZgskcrR9P/eGTuLD3+Ehn6Sk/yYZmAh3 -JF/17GECgYEA2x7fCZN+wr+CmG74GFdNnghqOkQQ9JleGOseHM+JIRD3J3WkuZ9x -Dfhe68OEaUBsmB3ttDiHQ5mS+YyXIZ2st6/0KQ7v6jEM3CwUoq+SZUqV8FEIBf0+ -r3yQI5sB/ZxWvsshLtlLUgdAby+ava8mG9M5RwUjp8kdmzlkCa54cc8= ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/cert deleted file mode 100755 index 38a95960f..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1NTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -NVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTUwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDfzQINLvjB3E/ea9+PW5SLys8Q4JqE9HUwLTJY -obQ6jqf4BTxtQWRpyu+uO3ALT+oCYifZGSlyYbBnnrCNClbwZYAHT6OkDD7f9w/q -xCYMosgvZhCCILHfolCYdFLMlYQg+pz4O+ct89J1pqyhEQBZRkUTLrXwqNUOfT1a -uBPbIkXBlBn9yG3c9zj7uRiSEiDA6ZcfxDLh2RCEjZezUfL0EExU/ZHCVghew9cg -OQ8T9dpMzCSQf8rG/higV4BZA66KCC+ETm2VXkqgWxJre+bnELHGXbiQxP5t21Jt -ZXjjYcUs1YluS0nLBJiZdn1lYGM2Nok8JAKzg19XYnlsPJXfAgMBAAGjTjBMMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAIAyV -xfmc5DMKgPUt2y6GLICybnI07SaNdzZf/5L3nM9b20Q26VLdZK4TbFsBhR4lfFPU -F4oVwvYbw1bPT9u9RSy0wLRz8a/mJJX/cmh+OBhYJf7nrGuvYADHfi8zhfvnmgIG -6PFezabzKgz5jkr0rbj32mP6sPpN1dzeDWESl7rcCfS1UHX4dlCKxnRqAYUXS4Kz -f4VMQV8y9Q00/D9fH5xLxg2jyHVc+LfD9tA1r0EJKCB7p612k96YGFFqYqxQOYmr -/Ut+EN0w/YMHuzMjhaEi+9T6r/VMYr3l8B8U1z0PYPFbbvMCGZUf53cBEjjxjg4n -sQgzzTc/yfYXGcVVcA== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/key deleted file mode 100755 index f243fbc9f..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA380CDS74wdxP3mvfj1uUi8rPEOCahPR1MC0yWKG0Oo6n+AU8 -bUFkacrvrjtwC0/qAmIn2RkpcmGwZ56wjQpW8GWAB0+jpAw+3/cP6sQmDKLIL2YQ -giCx36JQmHRSzJWEIPqc+DvnLfPSdaasoREAWUZFEy618KjVDn09WrgT2yJFwZQZ -/cht3Pc4+7kYkhIgwOmXH8Qy4dkQhI2Xs1Hy9BBMVP2RwlYIXsPXIDkPE/XaTMwk -kH/Kxv4YoFeAWQOuiggvhE5tlV5KoFsSa3vm5xCxxl24kMT+bdtSbWV442HFLNWJ -bktJywSYmXZ9ZWBjNjaJPCQCs4NfV2J5bDyV3wIDAQABAoIBADoAbsyt5MiRaZ2y -hXEpAfms6Tdtjn5wwMJopEi2N/iJKl0sNjn2naiRcMbOHr6/yl0txTgNvmEnkkl4 -pjcXe+q305ORf06v4ce3x0dH6LiTo6AtKpAfGxpjfdHVK/Rbt6+4Y+At3j9Zlqzp -MopX1qhMfvB2xa6GgxlLOhB97p926VtKYOEoDke8uP48HJTabeiFKpn76k+0HwS0 -J58Kb647DM1rqGpZW17dPb2ovi2eznATMeAgveNvVaXipUCsqnrJI+ywrLP4TBll -Mly+DZ42e1YnM+rd0tzgC/YNO8h7lF3YnthdQ77h3Yw09cvtmHPEuURgGiHIH5IY -HlYKBEkCgYEA7KXOLnufN1J7QG9CqsWhKI+ZBGGTd3LmXMHTM1tLpFcQaRNd/kxg -NVo8y4VEpCdatKj+yRe3wPZ8rO/Q074Rzys4VyTP8BNn9YjtttbP8zBDmLqkXAAc -xVKNDiuFQ40HSIdexZVP/YVCp210q6YG3OPoT4W9QvjfPHMfzW+2euUCgYEA8hpB -PMyl/RL2WHQHdKRRss0k8AWjtoKzepRkzrwptzgFOQZSmuvfdiPStp126iCinzag -EPsCo3T/1E1Fj4LgOIPhRd/ibXYSAParxmmx3rMTrBwo3TRf2c9nZPKAygsMNF59 -T5ySJzU6tWE0PEtCIITW+WnQeORPzW3vE0nSzXMCgYEAwHyBP8foEryxahDVvkgw -NOjQgwLHS0KXY914Z+6bkVoMDBvnuV/wZZU3nCeTVJ56JjbLv0/edENJ1/Tc/E4+ -+C7kjeVwiYuPZOVyzeTekqWwZftyky64ODxUZbE6nV6KDRGnIbm4rbMGK19ZpgDO -1j8/B+f1sRLzqZzOwnBako0CgYAVSR2nPM7zOzGRgVIOfUv5jnPK7pQAPemNw3JB -guWgCDrdUqL8n/RbrLaf+6Qy3X+uw9y64XbP7D956PlOrtEL5vxtaku8F/9pOkbM -AQr0a4Y1QZyOJkavHb8XbwLHwMTn7c7Sqw9mhxWMUOmIy40a0tMbxqPfnSMvCpVU -es8f5QKBgQCeFljjAnEQpuUduug/DAScAjTEbJD/18wAu1PuIM/+/zFEVaOs5w0z -uHiiPq3fiaaoBQHZofd8mxsugfLYftAP25Qw8X/WgWPg4CLGz3Br3HgnV6RyWXr6 -R600l5lWe/ZU5epjEsToc20H9z9TbXaSKWMZiMIaMnAeboSfTtQY3g== ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/cert deleted file mode 100755 index d87b91f55..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNDk2MzMwNjU4MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE4 -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU4MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAtNQ9DkyC1Dza3OYBLcCPeJNKC8BvYVVTL+FFzpS5 -AEPNdNA/Ezk42SBWNvaY+HYBrZniOSVMkTPFT9i5sT8bBBrUUvwGk1r6tpXDlHw3 -/S7QThqZLkGcAscmahp0mWnIIGcJxZBVMR1cfFbYNumNR9UyjUDQumCb8hlT3q0n -pEH3CL3jRpdcFolczotUzGk9u07v81gIWgQVCyYYu3WuuRjviLq8SVoHlAWvVsdW -rGcG1LS/OKAgECYVUxs1Qauw5VjlXPGkY7gOOnjNcl3IHZU2+7dGFw1gBf+gEC5E -/qr2fI7Lwx7R71sY0PANuuDLGfrCAaCjG3HZ01MC5Ktx8wIDAQABo00wSzAOBgNV -HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEApTrZW/xo -EMiNgBnRyqR0wHXpuQS/V5h75CtDKE4/Yl57cQlh30SX10anRgNpeBmaZjyFQp0P -3MAQoxUh8rOeQBcqZp7TiIXAk8w4rYWpFx59GGgiO5yD1vOj+9cIvAFDR0Fe1kbb -kLo8s93l4yNFTdxIIIDMgNpPcp2620wkecR3PwRV1jlM/7nMfgfRJagN2+Xq7mKC -ELzGatuXBpiy+jwCirmgmE8/MxbFbsR9L4EdW1kdYhRT+rnSNIEN3zI8GXWIH9Hu -91cGTgKiz1znXtlmLAaIoGTahv23YUV7tbQlrtZDZjpqvTN6yM3vS0HIoSxQnT2l -yizQSNuYSUD4HA== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/key deleted file mode 100755 index 00d37caad..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEAtNQ9DkyC1Dza3OYBLcCPeJNKC8BvYVVTL+FFzpS5AEPNdNA/ -Ezk42SBWNvaY+HYBrZniOSVMkTPFT9i5sT8bBBrUUvwGk1r6tpXDlHw3/S7QThqZ -LkGcAscmahp0mWnIIGcJxZBVMR1cfFbYNumNR9UyjUDQumCb8hlT3q0npEH3CL3j -RpdcFolczotUzGk9u07v81gIWgQVCyYYu3WuuRjviLq8SVoHlAWvVsdWrGcG1LS/ -OKAgECYVUxs1Qauw5VjlXPGkY7gOOnjNcl3IHZU2+7dGFw1gBf+gEC5E/qr2fI7L -wx7R71sY0PANuuDLGfrCAaCjG3HZ01MC5Ktx8wIDAQABAoIBAQCE4IjVHwfsKaOy -OxmWoy9KLQF2TTwLTAXK40DGoqanOSuasQQIfj313zs7PE4AFcb56GBCGdR/xokx -OVKKmpKhm412RVgXo/0jej2zuOvzkhjjq8vwH6oiqHDj+vi/WuoCVXTqxjqz0p2J -iM9s2oZEyLdS8NPwgNlXN6FXuemtWsao5ramsG8c0XM08zWazkrLGXf63dsNlEoL -9zzpP2nNx1DVVDTUhN3mpJE60IG0niBE1X3CuIrq4A/hIOut6qa9VgdOtnnwsAyG -hB3ZITeoaRowedmREUSSuzXnWkfHSa5yJoRlhje4mV+RRdhZ+1DSa1jzn1ZtZhjV -1/6KQWOxAoGBAMdTlTm+9c3rtqZVgva1WfwRpfd2B+HAy/LuBQMSNEmMXn5ooJSK -05eXMoCQC/+3fArCjYl+I7u9GHFKa4JeLjzWbqPbski5cTEHXIINGsnE9OI5pug9 -EbiZvSeimlL9Lw2BUQVW777cfz0esI+Tg514mn43gV633BWZH/AP3LHtAoGBAOg+ -R2EnDs60m0d0apR4kuZkoJDfF+uYgqyD+SMDDzgBSr4IDvWRzKAhYn+R1HsWeOxi -U+8kx5zmDVw+GHg397FcTIVfnuQKwmBZU/XC7oKVu6wshMXFbXUSQMmIuDbu5xmZ -1uZvMHtdszDwBWn5zGRSM3oXSQcwburJ6f1KSbdfAoGBAJE/8jUzV5GoG+BX3eiD -vL/36FZMt2+l+7jaA+L6CAo0dMNu4N190LTdpBqVXXkJryV0Iom31rg/EqmzzmYg -1VbV96gGN4PRRo+wypOmkwfHM6AK3PrNTbWUqodQcV7aSshvnKfkcy5FJZ9XVtg5 -aaZ9tS8WqXppRsKiY+ie1nb9AoGBALtl1Y8NRyOAFHP5+i5HhLGnrPB5NAIFFBxE -eXnI9DTKxhbExd1dgnILvkEV2RBhN732MagcU33FHC68ZF5NOu7AfXZ5i+qSy/mW -2urKGk8Ap2jsm05CWmpHCkQUsCCTcaL0wbU7LzG8j+UDKDs1N7oTojn4JBNK/5Uw -zEB3+zedAoGAYAI8WQm20ElzbBB8MqL31zM3LZ5Dp/GIjPWhjwEOsGt2oCSrLxC0 -xcYRq73St5RS78uGSJxAQaMQna52idifxRE6D3IyAvsMAbn1q+LCqST9zy5jzmO8 -tUNvhnkJs1jdDjIzWVtbtMWb7/5wWANx5989B1+QWU14Qmb7uziMVR8= ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert deleted file mode 100755 index 4870aab78..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDEjCCAfqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNDk2MzMwNjYwMCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDIw -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjYwMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAwLNxhHFPJFGnDoOnt/ELutNthoJNYLwus52+GLD1 -VYDDBA7766rzAxK8wGF9vGbXZX7L1uW3VJyJJLzZR1bBTdeOWXpyscz+33+jETbn -Eg2Dp7KbdFAFw66B90vxLbHKbQtH63VtNg9lh+d0K4QI6SGFlI/Mv9VWawpKk1P5 -X1cgl1EgR5e4kIgQsrkO+MRc0SLZG/s9MvThrHVlZLWPjRaiqk1GDxvBjfcBoPzZ -0jOHhWLJGWZcwXZ5brqPcqn+YMceXQlxrjxJvyq02DEWjtfimu7qoZ3+fgQy4rJ0 -GzPaDvwnkwvJQ2iN59mcybfg6AoblCOt1ypIqouMrI/J3QIDAQABo1kwVzAOBgNV -HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zAfBgNVHREEGDAWggh0ZXN0LmNvbYIKKi50ZXN0LmNvbTANBgkqhkiG9w0BAQsF -AAOCAQEAGQ+K0dnTaX5Ry9PLA6M8yrMhq5gnX2RfyIMXCuFfMqjdju4BkTR+6zm2 -El8Z6glQ6QsKYHR4XhlhHFOP+gGyaTrsDSV2qCgphJmtn6QWOSfEmBRNNCTpMXfS -5Ek/2dXItMjmnMdDOqcLofQyIIQFE9VpLyaFN0n1w9k6EscwSxsMiBVFwOhHpBex -BPJnrKBDWNVHjgocUI3YzN2TzzRxVxB/xc5+Sl/jnpguad+q/wjFgpr9p2a4yAS7 -W5bXcA1S4iSp8uKVv0JM/cfFlF094ft88A/SIt8Sn8BmeOGQtSk/sf5mFbr7TRqE -oDuKNM5AIM/fClQdlbKo7xpcJCiRkQ== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/key deleted file mode 100755 index e0653fc3a..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAwLNxhHFPJFGnDoOnt/ELutNthoJNYLwus52+GLD1VYDDBA77 -66rzAxK8wGF9vGbXZX7L1uW3VJyJJLzZR1bBTdeOWXpyscz+33+jETbnEg2Dp7Kb -dFAFw66B90vxLbHKbQtH63VtNg9lh+d0K4QI6SGFlI/Mv9VWawpKk1P5X1cgl1Eg -R5e4kIgQsrkO+MRc0SLZG/s9MvThrHVlZLWPjRaiqk1GDxvBjfcBoPzZ0jOHhWLJ -GWZcwXZ5brqPcqn+YMceXQlxrjxJvyq02DEWjtfimu7qoZ3+fgQy4rJ0GzPaDvwn -kwvJQ2iN59mcybfg6AoblCOt1ypIqouMrI/J3QIDAQABAoIBADlQ5lHTdgvCcaMC -i89NVgTSwEAC38sHDgkEwTcM41v0OY0qe8nkBfYDC7tZBBIWsLiSl0Sq/PWgvbX8 -qc/rQQHLPJ7mqdiytZh6mWEUaHRZKrClklFtP9mtPSD2KJ1DxYbblR+2xK4QtE1R -DZ+n3RKikt3WS7s/VD3wSLA7iO/PMJ+ER3kPxZWsVYJw6KpmR8U/v881eM7NGoK3 -SwYSqXfcRidNOl68Je3vm3MpK7SiPEOX9AGJUXlkpjJcyOqEE+X23wNSZUpKT+i7 -NIrXaEml1nKlTRMlDWi5ZPqzhpguc5Nmn0Tu+01ZClwcu+/7b4C5tkIjXQnyjXsO -0o1EqcECgYEAyEJwGl6KvvYaRsBiFRWIN1950S87O0grOnwb3/FedW4CEf9Lm/Xj -653HTe3zYAJDlsRFCOQ/KXi6nUjAAv8DAydKWmr5EonNj+VXT0Sw32N681lDMPzK -4csJek2bWt2alKbachKAq/gr00837HELl1ALr1X3a3HXr6hZHNjUHpECgYEA9lZq -tXDDV+emyIf/O9LwDUkctHc06qD+uBfiuW0DqVeYPE7E3QPsPzyjnwSfqmgYlpKm -Ku60MfmAVXT8kUSBUuY9ph5AOE/5LwkM3ONc34UBtkruzHUccGXuXelUzmnAQLhi -ZJiWJJrHYICcOZNzd9UmqYye66lyzp9NWe7ttI0CgYB8qYcZkzLxz0fqNUaZc275 -cXDmvG016SYn4SyFCr9PgKy/QVpy+u3oNa7lHzR61s32Y7XJ5DRBf8tDsA7/jnn0 -k5fgk2j7llcltZHVYaBtX4MhS7bdHvC5AGik/vyv4vWghgHEMypwYyv8/fqFMJYT -mpu7iVtdQmAPFFBs+bmKUQKBgQC4Hm8znkzjbymhyMRkmo0B4RurZ04N8LdyMags -n+aUs/v9V4KdD0mNGm3RdUtBuvxlzsaUYEYe9DWPqhj9Gw7uP1jkyMeHT38YQNN0 -ZhwMlQVqkydZek7/U7COUNAqV7Byr14bglD2mxlab8ZU4njzoEV9hLVjvwsolLjj -90mEIQKBgF/IE4+wL9sdeQ7MGanYHFzQtyKxWnRzCGWDkHV9InGZ2I7O3AeqDC76 -fXhiRoRbBMSgddyOYTUoaPhwgqPGoC9H/3ZHnyx5fokl0FTNfzk1mnY1n1HD2roR -p76hbMs+TjIGG+lNDso3WuV21Gn+vynDVO9FQumgeaEc+CLXpwEq ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/cert deleted file mode 100755 index e9de284e5..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDGTCCAgGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1ODAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -OFowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTgwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDO4DuzjpGF3Em7sIrAv6/19KyTVLxV4jM0XX8G -S8Uo04oyovHnHqfCDd+yaGs1glxD95eqZ5kZDgQNXhn+oZkNvcPJJ8O2tPhHwvjC -PR3KzNL3dFMo6+7BCmBRIVvSNHkkZ5lyoOSE7deGvoKl3KuEWUGwUiGnPx95snCD -HPfgHYto1zSI2NbdnF4hRuOiSFhettMZiwpXEYGhcMh1RYDYxPf+5/XcFz3VCdpF -1COXSYIS2r60H08dH1u6rO1iliJaRh+jqk998exdi0TwJvVTiaubMRZxtGkPNxjE -tSukjDA9UaqAFBnireXj2qc+a6B7AMsoTymn8Ka6QJyt+3ZdAgMBAAGjXjBcMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MCQGA1UdEQQdMBuCCWxvY2FsaG9zdIIIdGVzdC5jb22HBH8AAAEwDQYJKoZI -hvcNAQELBQADggEBAAOc/JL/2xfnPAcwzxvF/ssYK6EpjD6plG+OhlIj5UiXo/z4 -5IcLCg+N1P7dGaiSMfI/hIM+M/z24QMk6gXFMrVUFh6sm49dNmTry4Qsyp8Up5HD -ettKLaWG3YA08VeqJ0C2xsFh7nJnrlzQad1dwtnj6ActWx/2g8SFkfpQYLba/YI/ -YC3biwKGY9P7lmCP5p4234blenJHJW5hbwNyLManvEA9O39Rr4oph2Z1YtmpsNM/ -p+xioLTx7oFMtRkBBpmzSKJgLAqCxVg7P+MzjS1s3W49QLI8F1sZ+mXBrZxbALhQ -TtOjvUx+vb6Gihkzn8XkGdbgsiOTMBoT0EmIBJE= ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/key deleted file mode 100755 index 5016e338c..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAzuA7s46RhdxJu7CKwL+v9fSsk1S8VeIzNF1/BkvFKNOKMqLx -5x6nwg3fsmhrNYJcQ/eXqmeZGQ4EDV4Z/qGZDb3DySfDtrT4R8L4wj0dyszS93RT -KOvuwQpgUSFb0jR5JGeZcqDkhO3Xhr6CpdyrhFlBsFIhpz8febJwgxz34B2LaNc0 -iNjW3ZxeIUbjokhYXrbTGYsKVxGBoXDIdUWA2MT3/uf13Bc91QnaRdQjl0mCEtq+ -tB9PHR9buqztYpYiWkYfo6pPffHsXYtE8Cb1U4mrmzEWcbRpDzcYxLUrpIwwPVGq -gBQZ4q3l49qnPmugewDLKE8pp/CmukCcrft2XQIDAQABAoIBAQC4LgSZAKXook32 -zt9JaZ+T/yih5r/iSofB6DeN+GloxqT0HgP1+2Hpr4ZoBPTl59CTJlyd9qvkFYlg -CVZlT6O/CyLC9ScWhBnDcf8cl2LtydtNOgBLn3mp3b4QnP1tsQ/lbGK+HiY1frby -nKweVM9S/lAwVX7mspkoNMhcwq6glLL1QnJmLfmHtsOik4e+eD051aYI4OcfkFFo -T5f6Jg5oNC0L9x+ona1avfD2eBmXmUv8kV4+NSeu+pM+hWnc6r5XnHdXgo0Fu+nf -CQ6wUkyXQAmANI/qo+73G3lEZ7KA9mqrCTbM8sulC4c7+Qpb1vHjuz7pSMj57k67 -tI2lPGW1AoGBAPDdooMFZIq6n7wt160MlYDhLujcPaMzgiXWPg9TOLzuWrSZleGH -k818LTXKlQP2ffVADlwHvyi0E7yZVzmG2Xt6Gi8lkGIP5LZK81BlsBspX00bvJCM -VeyE6flSwLA86bQt8spYNAOMMc12F2i3y+YkoKfQmgMiG3H7RjM4Yeq3AoGBANvf -3bh7iHs74oZz40em/W+LdAFBE29FeCloqIXnueHVTLdpHFepmp5OBxogkaYJlVOF -0B/cl8sYn/6CtqKHzhCcCc8V/54O15n/yNRMru4GU0Z5mhaxWvypJM3WXTVvC612 -ODM7shXtFQAF5kgeGSDFOepUG1XRPqPjBmSOFiOLAoGAL/kkzg276bmj6PoEc+4G -tOWkzzJWgHPY3ypdr/W2XkLnBAN3C7VSJeIuqwEPTvvAOKGqen/8feHn8G9mJQoL -tQErx+omaLGbrwcckQ2/1pkV5yi4FN4umu4aH9Nwl2l6bq2cJtsMeQxqOu7jWLMK -xGrVKLduhWM8riYK5Fa9gd8CgYByWA+UOxoVDGWXinjt8FfoRFuFs3QJ79S3pCfP -y1yNp0GIOG9230r7fJSQ79MOx/kSQIqlpzCBfELoNs4H5Bwz4xHu0f/nEMzq12x3 -i5GFU2DHS8Hofz9UGhp7uTkr6p3mDY7YhfjtEihTpL3HT2+97RNbW3YDwReUXyIZ -9RJqVQKBgEQzEKMFpA5NTzs4BanS8372XXKBRhP0CCTcxS23k/kkYFd0Swnsmv+s -ZCJhV5B1Uz0aSK9jfvCaEfwHjdhxfyYBzoXYVxaxphwNY1Vq7QaEzzyXWKDK3beS -9pwnZf6bEQEvvXyJ3ssqLaHWCoViHe0h/Atsj6UOYhQt5mXzZDEK ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/cert deleted file mode 100755 index f678ca992..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNDk2MzMwNjU1MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE1 -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU1MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEApFk4QTS28tu20CSV1s0aCC7kV7p/V8XziC5g98OI -GO9s8uVrzc51xsnJ3Y3+Xnx43x9G9VjgSNhPAuE7+/UnP6iAkZZV0mOD3xwwILwy -JK6gZOcZzd9BX9JldSnjv64r5peg5mzdhNqpRs0i3oPcfriW0sGkzl6IQlsowGoS -eDkO6+Z0IpQDo4CqcWond78LDyvqwbfFReyHEtz8D17sciGni6QPK3kGBFDiO0Ay -keV4GqEXw13ryKzVun/haLmekRf8svAU8+pjpHY0uc1cv0l0nTIZdwnp2EIF0msa -EKYyUUpcuFkMQTToYzj9LaIQmvAGIVIouNAydbheBifySwIDAQABo00wSzAOBgNV -HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAWlrvejAW -DpKWBfgQpJLpL56v6dFkCjhThtvDrfvpx/gL0p2QQOIrgD7o+/+fmockmpphf8zc -lAFS/M2IuuvJUN7qvq/4pnUa527LsQFIQSG4GhNfHHdKfISLdjgy7LRlmjLnnSu3 -9qa5KvJg9SIWpe41LbeQPB8fLYNuF+tPzrI7QLp/VbMSSyNz4wzpdk8/+r+3KmU8 -D1SEQcaEIg7/YlyJ7TZiWiFlZRFcObE11lRYo6tnh8t2e7s0IqC1JwiAmCk0j0iZ -kHE8yND+CuO8QVDxnmu86STL+q0ldZL6C/1lLlnKFKLp+bZfW+s+kds7lDSmUMDi -CbImL3sIf6clIg== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/key deleted file mode 100755 index 4e996b7c7..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEApFk4QTS28tu20CSV1s0aCC7kV7p/V8XziC5g98OIGO9s8uVr -zc51xsnJ3Y3+Xnx43x9G9VjgSNhPAuE7+/UnP6iAkZZV0mOD3xwwILwyJK6gZOcZ -zd9BX9JldSnjv64r5peg5mzdhNqpRs0i3oPcfriW0sGkzl6IQlsowGoSeDkO6+Z0 -IpQDo4CqcWond78LDyvqwbfFReyHEtz8D17sciGni6QPK3kGBFDiO0AykeV4GqEX -w13ryKzVun/haLmekRf8svAU8+pjpHY0uc1cv0l0nTIZdwnp2EIF0msaEKYyUUpc -uFkMQTToYzj9LaIQmvAGIVIouNAydbheBifySwIDAQABAoIBAC07+UXJMomJe7my -OCOU9BNIhMS4qhAIhcz3puzKvozOaVg5WQCeUMBUDeGTEW4EKGiQ/UDOI30pPCX4 -xD/G6/STdj+b9ycfCM7BvWVlJw/9mFvtV6bYSfALwq0KyIqbb63aEgkZ8aZ9YJYC -JBTGiku+lpSPg8LhNfO9j2vWRhsceFEtdkv18T9sCSOQTYIrDKFdbxsl49A/D9WZ -YERYVWmWsSHl4CkKAzrQRMIrREgYJk5R3Qt0Qk+3a4BYlmDG6/5Ayfi0sx+bpcK+ -255GbRPhe9rTUI6uIc57q7TxGOIG+ekTVqkL87bVR8+oLY/5ARW3jXedB+Th2ku4 -/JziseECgYEAx77MOmRPx5ggNQqmSfcaxozmX8Cil6pEZRQxdtdgum9QnyXhG5q9 -J8Onw2o5+u+KsTmXIx4CdcA+fL4Z9D/g6GHsi87lJT6KhdHGAmPsEVFQYc0kme3X -hEfGppP4G4haHBzhNh5V9CxlZ7aHsB9J/LGZ2Utz+kvGHE/8GKiERNMCgYEA0qJj -8pdnnObFW4x+/TrOzf9jxAyB7xp3ZTp1gayzmrG4cQr5OMhAZEXG5t1JOg5SvQXh -LRWDr21BtbizJoFcAe0FzMdWIR8fz8RfqiFlfZSnMBnkhQrngu8CghAkg3g0h0m1 -tSSpaqQGVRdOFG1A/HSjiNdsBpqLGxejdUfZkakCgYEAuIAFdr4nbu6WeUf/93w3 -EEUfmjx+MudES7VORz6EC1E8v/QmLPBOXkd8U6VwLthKXI8cioRysz9CuMiDgrfq -T9v7udv+jtto6listJKFgC2CuQPbFg+6LWZ7GGy/FPdqfGM0p19395V2iUjxpn4Q -QkfuGud2FjEdqhM7ga9OlZ8CgYEAvwXM1NYgfnf/Jh6NkEREBygFJ2gccmazPxe8 -N4UTQUjJt6M3EBrz4rwxPXAUF9WjjY+GfieTzIWuYQqHVnVcptZ5OxTQdKtQY1F5 -XMZ6z2AAG6xvxYR1HxZ5VNEk/CIIqWTcqNH93xuwLn07L2VB2XJCWTjc3ERNwZ03 -fYZStzkCgYBtXFo7OC80f6xRDa1NfQfP4vP6dMczZBZBx2A/rCybwtQsJ40duEB2 -hGmgqIrRfh7H7KC8W792xzE1PKUXztTzxxpIr7Ho/nDUWzambMi39EYyBJ6Fp7z2 -RkPJFDkAYDpx/v357886y7HFz8pUUNd+z9V9CLemVqhjBWmIaLEX/w== ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/cert b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/cert deleted file mode 100755 index 28870c9ae..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1NTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -NVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTUwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCmZQErnj8vlA5uvizHXnGmvDCpeOkc5Ldbj0Hz -zqTCiwOSTBeestdN6oLKvxJVlvyO3UQJxhJWr00QRwdCYIvLIDmiBQjb7ciOPcl8 -WdLjBtZ36288E9P1nVwFi2RwLo/XzZlCYX0aRe/SM7/h5zzNxBR6FdRvtI1d5as4 -qiGdj7TqCFIJ/8jaBfxlusjEJd+xc0Cn8IAmSpPJYCCDmxjAzw0D12Ui3toTFHUI -J9BA7iXTVvMbfau8KQJTPeu/HQ4zgU//4GW1Qo52gNzfY37iliZaG3HTWD1pxTFO -qdDuprFIffsQrQ7mHAkGnAExxZYc2cE4UF+ME8dV0/6nTQA1AgMBAAGjTjBMMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAdUUo -i0A3ttsTca5n9OY4EbDPQz7uAhXkihwoG2YeqnucrNXg+SaS+7hFA9sa1gY5NmDF -96OvmQLBEXVz3uLEiv2KGtY5yiAo6iTtk2gtoGAloULEJ018XGQ0yNuDWUfRLyc9 -5nA8CBPEnBR7MjO6XhvvFMbAjtXoDKFqVeq3okXbL7ygUjlpwv+Sbps+DjQdmnIQ -A90S7gcFqaCmy2KnzADartasIImy/78R9r68UdJrsmyy/aPNnJ/9AbbU8Z20JFcu -clKOENaKJe/o1nOVzZA2E2oVElT++2wNfomDN5ae77cLoCjZPOBArFlhwyk16YIa -wX3ITLz6Ibr9Iy7DvA== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/key b/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/key deleted file mode 100755 index 1f4e63735..000000000 --- a/vendor/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEApmUBK54/L5QObr4sx15xprwwqXjpHOS3W49B886kwosDkkwX -nrLXTeqCyr8SVZb8jt1ECcYSVq9NEEcHQmCLyyA5ogUI2+3Ijj3JfFnS4wbWd+tv -PBPT9Z1cBYtkcC6P182ZQmF9GkXv0jO/4ec8zcQUehXUb7SNXeWrOKohnY+06ghS -Cf/I2gX8ZbrIxCXfsXNAp/CAJkqTyWAgg5sYwM8NA9dlIt7aExR1CCfQQO4l01bz -G32rvCkCUz3rvx0OM4FP/+BltUKOdoDc32N+4pYmWhtx01g9acUxTqnQ7qaxSH37 -EK0O5hwJBpwBMcWWHNnBOFBfjBPHVdP+p00ANQIDAQABAoIBAEqbVTgCf2BM6V+8 -Q4WtEhZpoQQL47IB1zjldfPkfrl/7T0Ggzy0AZe9A6H2pDjeNyWzjlM3jXdyqIIY -5udbNLMCIvVDfqJl7pvgllv8RnNm2HjyhnCQj2Q8h0sxIfqu1e40EHjUD2zdWNeO -PoYC0Z+NQIUxDox7jzs/xFLm7aWgVTYk86iFa0/uYwnCQpGHR5OkBOhVdkqBMUrH -7hPIoKgLNHT8/jhugv+GamtAmys1KoqIvZsc/XQCMPVmE55n0OBtooQ3fhBXJC0x -UZgJGKNLSjxt7uxHb/BQk5DtFJmPck0derMNkM8WQ6o/XSjlSiKtsct8c7us/c7r -9OFkcy0CgYEAwB6uKr3Al1IM16t6yEEdfrNc/koJ9AQ3sVHSE5CjFBLMs6gL+Feo -r3oFUglY1QB6v+5YUVsLovJLMHuH1x7fKHmd0Fmx75uVzurG2JdKwCiV39PPKYjr -238Yw3Nk6IllPCn+SOIvPDhiuvPwX8FylKGPjsi7AHphKN0f9EEnL6cCgYEA3biT -l8yvpgPpZrpTaMlotKvZkTKtb212a5EdHn0bk5fSM9xaRcumRsWd9eWGutHpMbZx -wj1jAFaGDleBl08zHAr5jsY7i1C3CFKFEUbYR5Qu5+Ot/gdEyO2+j0ehluPOBFad -P514bnWpdct8Khv2dW3OJMzVdFM7M06MXkQFLMMCgYAugT63qecMuhfRvPijsN9q -5BAGnfV60+qHSb8IbWKMYWCbvHnpS47Rqz/Oc+TE6rDL9O38A4X1k6EPw1dGg3qR -WZ8R6CRiU88Xn00y8Kxvh2OAIs1qyHIPV9yusygiAeA3iBK9ocK9WQjNKG9vPmx1 -/gW6Emzx2K3cLmqlvX+20QKBgA82yCHlcLQSlqRu6qRJFb83/5DgCliYCUUuSvI5 -oXfKNilK2ILri3hVvRYPbuRI3RiFLV8nuTBfv4kiZgkM7TPiaOdsIM/ZdQXEK89Y -riSTPXi5/cltlEG5VpccUjE5ZnyTuOyRkJ77weoMUXPOQWYjZ77Ms2TtBSXrIOSj -BDvjAoGBALAag/LXYvi7l4xIuUMuo1HC4YXZVSqDM7kftLdSUGOl/zGV/0QkSh76 -KCVOwXOCmzFeImrZYYDf4uu1wW7paprNaCV6EiChhRgCrjkZIpyw6RHAGshp3a3e -BjXCIHOW5TsWRdR+IvjzIMp9tbHCEvjSw0jDm3JiaSYGRD1AldhV ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go b/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go index 0e63405be..0f5c0848d 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go +++ b/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher.go @@ -268,7 +268,6 @@ func NewCacherFromConfig(config Config) *Cacher { cacher.stopWg.Add(1) go func() { defer cacher.stopWg.Done() - defer cacher.terminateAllWatchers() wait.Until( func() { if !cacher.isStopped() { diff --git a/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher_whitebox_test.go b/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher_whitebox_test.go index a2a2dc598..2de915eb5 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher_whitebox_test.go +++ b/vendor/k8s.io/apiserver/pkg/storage/cacher/cacher_whitebox_test.go @@ -443,39 +443,3 @@ func TestWatcherNotGoingBackInTime(t *testing.T) { } } } - -func TestCacheWatcherStoppedOnDestroy(t *testing.T) { - backingStorage := &dummyStorage{} - cacher, _ := newTestCacher(backingStorage, 1000) - defer cacher.Stop() - - // Wait until cacher is initialized. - cacher.ready.wait() - - w, err := cacher.Watch(context.Background(), "pods/ns", "0", storage.Everything) - if err != nil { - t.Fatalf("Failed to create watch: %v", err) - } - - watchClosed := make(chan struct{}) - go func() { - defer close(watchClosed) - for event := range w.ResultChan() { - switch event.Type { - case watch.Added, watch.Modified, watch.Deleted: - // ok - default: - t.Errorf("unexpected event %#v", event) - } - } - }() - - cacher.Stop() - - select { - case <-watchClosed: - case <-time.After(wait.ForeverTestTimeout): - t.Errorf("timed out waiting for watch to close") - } - -} \ No newline at end of file diff --git a/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/grpc_service_unix_test.go b/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/grpc_service_unix_test.go index 60ea6369b..430ef2a1a 100644 --- a/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/grpc_service_unix_test.go +++ b/vendor/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/grpc_service_unix_test.go @@ -24,7 +24,6 @@ import ( "encoding/base64" "fmt" "net" - "os" "reflect" "sync" "testing" @@ -32,6 +31,7 @@ import ( "google.golang.org/grpc" + "k8s.io/apimachinery/pkg/util/uuid" kmsapi "k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1" ) @@ -39,8 +39,6 @@ import ( // Since the Dial to kms-plugin is non-blocking we expect the construction of gRPC service to succeed even when // kms-plugin is not yet up - dialing happens in the background. func TestKMSPluginLateStart(t *testing.T) { - t.Skip("Test is unsuitable for running in a CPU contended environment") - t.Parallel() callTimeout := 3 * time.Second endpoint := getSocketName() @@ -67,8 +65,6 @@ func TestKMSPluginLateStart(t *testing.T) { // TestTimeout tests behaviour of the kube-apiserver based on the supplied timeout and delayed start of kms-plugin. func TestTimeouts(t *testing.T) { - t.Skip("Test is unsuitable for running in a CPU contended environment") - t.Parallel() var testCases = []struct { desc string @@ -169,8 +165,6 @@ func TestTimeouts(t *testing.T) { // TestIntermittentConnectionLoss tests the scenario where the connection with kms-plugin is intermittently lost. func TestIntermittentConnectionLoss(t *testing.T) { - t.Skip("Test is unsuitable for running in a CPU contended environment") - t.Parallel() var ( wg1 sync.WaitGroup @@ -243,7 +237,7 @@ func TestUnsupportedVersion(t *testing.T) { } defer f.server.Stop() - s, err := NewGRPCService(endpoint, 20*time.Second) + s, err := NewGRPCService(endpoint, 1*time.Second) if err != nil { t.Fatal(err) } @@ -257,7 +251,7 @@ func TestUnsupportedVersion(t *testing.T) { destroyService(s) - s, err = NewGRPCService(endpoint, 20*time.Second) + s, err = NewGRPCService(endpoint, 1*time.Second) if err != nil { t.Fatal(err) } @@ -282,7 +276,7 @@ func TestGRPCService(t *testing.T) { defer f.server.Stop() // Create the gRPC client service. - service, err := NewGRPCService(endpoint, 15*time.Second) + service, err := NewGRPCService(endpoint, 1*time.Second) if err != nil { t.Fatalf("failed to create envelope service, error: %v", err) } @@ -359,21 +353,8 @@ func destroyService(service Service) { } } -var ( - uniqueSocketLock sync.Mutex - uniqueSocket int -) - -// getSocketName returns a unique UNIX socket filename each time func getSocketName() string { - uniqueSocketLock.Lock() - defer uniqueSocketLock.Unlock() - uniqueSocket++ - // ensure the socket is removed before running - if err := os.Remove(fmt.Sprintf("@%d.sock", uniqueSocket)); err != nil && !os.IsNotExist(err) { - panic(fmt.Sprintf("unable to remove socket from previous test run: %v", err)) - } - return fmt.Sprintf("unix:///@%d.sock", uniqueSocket) + return fmt.Sprintf("unix:///@%s.sock", uuid.NewUUID()) } // Test all those invalid configuration for KMS provider. @@ -398,7 +379,7 @@ func TestInvalidConfiguration(t *testing.T) { for _, testCase := range invalidConfigs { t.Run(testCase.name, func(t *testing.T) { f.apiVersion = testCase.apiVersion - _, err := NewGRPCService(testCase.endpoint, 20*time.Second) + _, err := NewGRPCService(testCase.endpoint, 1*time.Second) if err == nil { t.Fatalf("should fail to create envelope service for %s.", testCase.name) } diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go index 80db87afb..34b1f8e3a 100644 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go +++ b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go @@ -27,7 +27,6 @@ import ( "github.com/spf13/pflag" "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" "k8s.io/client-go/discovery" diskcached "k8s.io/client-go/discovery/cached/disk" "k8s.io/client-go/rest" @@ -251,12 +250,7 @@ func (f *ConfigFlags) ToRESTMapper() (meta.RESTMapper, error) { // AddFlags binds client configuration flags to a given flagset func (f *ConfigFlags) AddFlags(flags *pflag.FlagSet) { if f.KubeConfig != nil { - if !openshiftpatch.IsOC { - flags.StringVar(f.KubeConfig, "kubeconfig", *f.KubeConfig, "Path to the kubeconfig file to use for CLI requests.") - } else { - flags.StringVar(f.KubeConfig, "kubeconfig", *f.KubeConfig, "Path to the kubeconfig file to use for CLI requests.") - flags.StringVar(f.KubeConfig, OpenShiftKubeConfigFlagName, *f.KubeConfig, "Path to the kubeconfig file to use for CLI requests.") - } + flags.StringVar(f.KubeConfig, "kubeconfig", *f.KubeConfig, "Path to the kubeconfig file to use for CLI requests.") } if f.CacheDir != nil { flags.StringVar(f.CacheDir, flagHTTPCacheDir, *f.CacheDir, "Default HTTP cache directory") diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch/patch_openshift.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch/patch_openshift.go deleted file mode 100644 index 6dba9c78b..000000000 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch/patch_openshift.go +++ /dev/null @@ -1,34 +0,0 @@ -package openshiftpatch - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -var IsOC = false - -var OAPIToGroupifiedGVK func(gvk *schema.GroupVersionKind) - -func FixOAPIGroupifiedGVK(gvk *schema.GroupVersionKind) { - if OAPIToGroupifiedGVK != nil { - OAPIToGroupifiedGVK(gvk) - } -} - -var OAPIToGroupified func(uncast runtime.Object, gvk *schema.GroupVersionKind) - -func FixOAPIGroupKind(uncast runtime.Object, gvk *schema.GroupVersionKind) { - if OAPIToGroupified != nil { - OAPIToGroupified(uncast, gvk) - } -} - -var IsOAPIFn func(gvk schema.GroupVersionKind) bool - -func IsOAPI(gvk schema.GroupVersionKind) bool { - if IsOAPIFn == nil { - return false - } - - return IsOAPIFn(gvk) -} diff --git a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/patch_config_flags.go b/vendor/k8s.io/cli-runtime/pkg/genericclioptions/patch_config_flags.go deleted file mode 100644 index c607a9214..000000000 --- a/vendor/k8s.io/cli-runtime/pkg/genericclioptions/patch_config_flags.go +++ /dev/null @@ -1,16 +0,0 @@ -package genericclioptions - -import "fmt" - -// OpenShiftKubeConfigFlagName exists only so that we can track down all non-standard offenders -const OpenShiftKubeConfigFlagName = "config" - -func NewErrConfigurationMissing() error { - return fmt.Errorf(`Missing or incomplete configuration info. Please login or point to an existing, complete config file: - - 1. Via the command-line flag --config - 2. Via the KUBECONFIG environment variable - 3. In your home directory as ~/.kube/config - -To view or setup config directly use the 'config' command.`) -} diff --git a/vendor/k8s.io/cli-runtime/pkg/printers/json.go b/vendor/k8s.io/cli-runtime/pkg/printers/json.go index 09a77a31b..bb5bec748 100644 --- a/vendor/k8s.io/cli-runtime/pkg/printers/json.go +++ b/vendor/k8s.io/cli-runtime/pkg/printers/json.go @@ -24,7 +24,7 @@ import ( "reflect" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" + "sigs.k8s.io/yaml" ) @@ -55,9 +55,6 @@ func (p *JSONPrinter) PrintObj(obj runtime.Object, w io.Writer) error { if obj.GetObjectKind().GroupVersionKind().Empty() { return fmt.Errorf("missing apiVersion or kind; try GetObjectKind().SetGroupVersionKind() if you know the type") } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - return fmt.Errorf("attempt to print an ungroupified object: %v", obj.GetObjectKind().GroupVersionKind()) - } data, err := json.MarshalIndent(obj, "", " ") if err != nil { @@ -95,9 +92,6 @@ func (p *YAMLPrinter) PrintObj(obj runtime.Object, w io.Writer) error { if obj.GetObjectKind().GroupVersionKind().Empty() { return fmt.Errorf("missing apiVersion or kind; try GetObjectKind().SetGroupVersionKind() if you know the type") } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - return fmt.Errorf("attempt to print an ungroupified object: %v", obj.GetObjectKind().GroupVersionKind()) - } output, err := yaml.Marshal(obj) if err != nil { diff --git a/vendor/k8s.io/cli-runtime/pkg/printers/jsonpath.go b/vendor/k8s.io/cli-runtime/pkg/printers/jsonpath.go index c2633c6a4..333b9c334 100644 --- a/vendor/k8s.io/cli-runtime/pkg/printers/jsonpath.go +++ b/vendor/k8s.io/cli-runtime/pkg/printers/jsonpath.go @@ -24,7 +24,6 @@ import ( "reflect" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" "k8s.io/client-go/util/jsonpath" ) @@ -122,9 +121,6 @@ func (j *JSONPathPrinter) PrintObj(obj runtime.Object, w io.Writer) error { if InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { return fmt.Errorf(InternalObjectPrinterErr) } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - return fmt.Errorf("attempt to print an ungroupified object: %v", obj.GetObjectKind().GroupVersionKind()) - } var queryObj interface{} = obj if unstructured, ok := obj.(runtime.Unstructured); ok { diff --git a/vendor/k8s.io/cli-runtime/pkg/printers/name.go b/vendor/k8s.io/cli-runtime/pkg/printers/name.go index e9fa17637..d04c5c6bb 100644 --- a/vendor/k8s.io/cli-runtime/pkg/printers/name.go +++ b/vendor/k8s.io/cli-runtime/pkg/printers/name.go @@ -26,7 +26,6 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" ) // NamePrinter is an implementation of ResourcePrinter which outputs "resource/name" pair of an object. @@ -73,9 +72,6 @@ func (p *NamePrinter) PrintObj(obj runtime.Object, w io.Writer) error { if obj.GetObjectKind().GroupVersionKind().Empty() { return fmt.Errorf("missing apiVersion or kind; try GetObjectKind().SetGroupVersionKind() if you know the type") } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - return fmt.Errorf("attempt to print an ungroupified object: %v", obj.GetObjectKind().GroupVersionKind()) - } name := "" if acc, err := meta.Accessor(obj); err == nil { diff --git a/vendor/k8s.io/cli-runtime/pkg/printers/patch_sourcechecker.go b/vendor/k8s.io/cli-runtime/pkg/printers/patch_sourcechecker.go deleted file mode 100644 index 138082040..000000000 --- a/vendor/k8s.io/cli-runtime/pkg/printers/patch_sourcechecker.go +++ /dev/null @@ -1,18 +0,0 @@ -package printers - -func init() { - disallowedPackagePrefixes = append(disallowedPackagePrefixes, - "github.com/openshift/origin/pkg/apps/apis/", - "github.com/openshift/origin/pkg/authorization/apis/", - "github.com/openshift/origin/pkg/build/apis/", - "github.com/openshift/origin/pkg/image/apis/", - "github.com/openshift/origin/pkg/network/apis/", - "github.com/openshift/origin/pkg/oauth/apis/", - "github.com/openshift/origin/pkg/project/apis/", - "github.com/openshift/origin/pkg/quota/apis/", - "github.com/openshift/origin/pkg/route/apis/", - "github.com/openshift/origin/pkg/security/apis/", - "github.com/openshift/origin/pkg/template/apis/", - "github.com/openshift/origin/pkg/user/apis/", - ) -} diff --git a/vendor/k8s.io/cli-runtime/pkg/printers/template.go b/vendor/k8s.io/cli-runtime/pkg/printers/template.go index f43a1d43d..ccff54226 100644 --- a/vendor/k8s.io/cli-runtime/pkg/printers/template.go +++ b/vendor/k8s.io/cli-runtime/pkg/printers/template.go @@ -25,7 +25,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/json" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" ) // GoTemplatePrinter is an implementation of ResourcePrinter which formats data with a Go Template. @@ -65,10 +64,6 @@ func (p *GoTemplatePrinter) PrintObj(obj runtime.Object, w io.Writer) error { return fmt.Errorf(InternalObjectPrinterErr) } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - return fmt.Errorf("attempt to print an ungroupified object: %v", obj.GetObjectKind().GroupVersionKind()) - } - var data []byte var err error data, err = json.Marshal(obj) diff --git a/vendor/k8s.io/cli-runtime/pkg/printers/typesetter.go b/vendor/k8s.io/cli-runtime/pkg/printers/typesetter.go index a71490314..8d2d9b56e 100644 --- a/vendor/k8s.io/cli-runtime/pkg/printers/typesetter.go +++ b/vendor/k8s.io/cli-runtime/pkg/printers/typesetter.go @@ -21,7 +21,7 @@ import ( "io" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" + "k8s.io/apimachinery/pkg/runtime/schema" ) // TypeSetterPrinter is an implementation of ResourcePrinter wraps another printer with types set on the objects @@ -42,14 +42,13 @@ func (p *TypeSetterPrinter) PrintObj(obj runtime.Object, w io.Writer) error { if obj == nil { return p.Delegate.PrintObj(obj, w) } - if !obj.GetObjectKind().GroupVersionKind().Empty() && !openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { + if !obj.GetObjectKind().GroupVersionKind().Empty() { return p.Delegate.PrintObj(obj, w) } // we were empty coming in, make sure we're empty going out. This makes the call thread-unsafe - existingGVK := obj.GetObjectKind().GroupVersionKind() defer func() { - obj.GetObjectKind().SetGroupVersionKind(existingGVK) + obj.GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{}) }() gvks, _, err := p.Typer.ObjectKinds(obj) @@ -69,13 +68,6 @@ func (p *TypeSetterPrinter) PrintObj(obj runtime.Object, w io.Writer) error { break } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - gvk := obj.GetObjectKind().GroupVersionKind() - openshiftpatch.FixOAPIGroupifiedGVK(&gvk) - obj.GetObjectKind().SetGroupVersionKind(gvk) - return p.Delegate.PrintObj(obj, w) - } - return p.Delegate.PrintObj(obj, w) } diff --git a/vendor/k8s.io/cli-runtime/pkg/resource/mapper.go b/vendor/k8s.io/cli-runtime/pkg/resource/mapper.go index 2cb9b194b..962f37711 100644 --- a/vendor/k8s.io/cli-runtime/pkg/resource/mapper.go +++ b/vendor/k8s.io/cli-runtime/pkg/resource/mapper.go @@ -22,7 +22,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" ) // Mapper is a convenience struct for holding references to the interfaces @@ -44,7 +43,6 @@ func (m *mapper) infoForData(data []byte, source string) (*Info, error) { if err != nil { return nil, fmt.Errorf("unable to decode %q: %v", source, err) } - openshiftpatch.FixOAPIGroupKind(obj, gvk) name, _ := metadataAccessor.Name(obj) namespace, _ := metadataAccessor.Namespace(obj) @@ -93,7 +91,6 @@ func (m *mapper) infoForObject(obj runtime.Object, typer runtime.ObjectTyper, pr if len(groupVersionKinds) > 1 && len(preferredGVKs) > 0 { gvk = preferredObjectKind(groupVersionKinds, preferredGVKs) } - openshiftpatch.FixOAPIGroupKind(obj, &gvk) name, _ := metadataAccessor.Name(obj) namespace, _ := metadataAccessor.Namespace(obj) diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go index 6f0bea7e8..a259d27ae 100644 --- a/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go +++ b/vendor/k8s.io/client-go/informers/extensions/v1beta1/interface.go @@ -30,8 +30,6 @@ type Interface interface { Deployments() DeploymentInformer // Ingresses returns a IngressInformer. Ingresses() IngressInformer - // NetworkPolicies returns a NetworkPolicyInformer. - NetworkPolicies() NetworkPolicyInformer // PodSecurityPolicies returns a PodSecurityPolicyInformer. PodSecurityPolicies() PodSecurityPolicyInformer // ReplicaSets returns a ReplicaSetInformer. @@ -64,11 +62,6 @@ func (v *version) Ingresses() IngressInformer { return &ingressInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} } -// NetworkPolicies returns a NetworkPolicyInformer. -func (v *version) NetworkPolicies() NetworkPolicyInformer { - return &networkPolicyInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} -} - // PodSecurityPolicies returns a PodSecurityPolicyInformer. func (v *version) PodSecurityPolicies() PodSecurityPolicyInformer { return &podSecurityPolicyInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} diff --git a/vendor/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go b/vendor/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go deleted file mode 100644 index 92f4f0400..000000000 --- a/vendor/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package v1beta1 - -import ( - time "time" - - extensionsv1beta1 "k8s.io/api/extensions/v1beta1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - watch "k8s.io/apimachinery/pkg/watch" - internalinterfaces "k8s.io/client-go/informers/internalinterfaces" - kubernetes "k8s.io/client-go/kubernetes" - v1beta1 "k8s.io/client-go/listers/extensions/v1beta1" - cache "k8s.io/client-go/tools/cache" -) - -// NetworkPolicyInformer provides access to a shared informer and lister for -// NetworkPolicies. -type NetworkPolicyInformer interface { - Informer() cache.SharedIndexInformer - Lister() v1beta1.NetworkPolicyLister -} - -type networkPolicyInformer struct { - factory internalinterfaces.SharedInformerFactory - tweakListOptions internalinterfaces.TweakListOptionsFunc - namespace string -} - -// NewNetworkPolicyInformer constructs a new informer for NetworkPolicy type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewNetworkPolicyInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { - return NewFilteredNetworkPolicyInformer(client, namespace, resyncPeriod, indexers, nil) -} - -// NewFilteredNetworkPolicyInformer constructs a new informer for NetworkPolicy type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewFilteredNetworkPolicyInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { - return cache.NewSharedIndexInformer( - &cache.ListWatch{ - ListFunc: func(options v1.ListOptions) (runtime.Object, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.ExtensionsV1beta1().NetworkPolicies(namespace).List(options) - }, - WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.ExtensionsV1beta1().NetworkPolicies(namespace).Watch(options) - }, - }, - &extensionsv1beta1.NetworkPolicy{}, - resyncPeriod, - indexers, - ) -} - -func (f *networkPolicyInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { - return NewFilteredNetworkPolicyInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) -} - -func (f *networkPolicyInformer) Informer() cache.SharedIndexInformer { - return f.factory.InformerFor(&extensionsv1beta1.NetworkPolicy{}, f.defaultInformer) -} - -func (f *networkPolicyInformer) Lister() v1beta1.NetworkPolicyLister { - return v1beta1.NewNetworkPolicyLister(f.Informer().GetIndexer()) -} diff --git a/vendor/k8s.io/client-go/informers/generic.go b/vendor/k8s.io/client-go/informers/generic.go index 8b986a963..fd5811cd6 100644 --- a/vendor/k8s.io/client-go/informers/generic.go +++ b/vendor/k8s.io/client-go/informers/generic.go @@ -206,8 +206,6 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().Deployments().Informer()}, nil case extensionsv1beta1.SchemeGroupVersion.WithResource("ingresses"): return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().Ingresses().Informer()}, nil - case extensionsv1beta1.SchemeGroupVersion.WithResource("networkpolicies"): - return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().NetworkPolicies().Informer()}, nil case extensionsv1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies"): return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().PodSecurityPolicies().Informer()}, nil case extensionsv1beta1.SchemeGroupVersion.WithResource("replicasets"): diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go index 4fca2e525..0e9edf5cc 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go @@ -30,7 +30,6 @@ type ExtensionsV1beta1Interface interface { DaemonSetsGetter DeploymentsGetter IngressesGetter - NetworkPoliciesGetter PodSecurityPoliciesGetter ReplicaSetsGetter } @@ -52,10 +51,6 @@ func (c *ExtensionsV1beta1Client) Ingresses(namespace string) IngressInterface { return newIngresses(c, namespace) } -func (c *ExtensionsV1beta1Client) NetworkPolicies(namespace string) NetworkPolicyInterface { - return newNetworkPolicies(c, namespace) -} - func (c *ExtensionsV1beta1Client) PodSecurityPolicies() PodSecurityPolicyInterface { return newPodSecurityPolicies(c) } diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go index 36c0d51bc..0282c0b49 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go @@ -40,10 +40,6 @@ func (c *FakeExtensionsV1beta1) Ingresses(namespace string) v1beta1.IngressInter return &FakeIngresses{c, namespace} } -func (c *FakeExtensionsV1beta1) NetworkPolicies(namespace string) v1beta1.NetworkPolicyInterface { - return &FakeNetworkPolicies{c, namespace} -} - func (c *FakeExtensionsV1beta1) PodSecurityPolicies() v1beta1.PodSecurityPolicyInterface { return &FakePodSecurityPolicies{c} } diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_networkpolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_networkpolicy.go deleted file mode 100644 index 7f4d4a555..000000000 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_networkpolicy.go +++ /dev/null @@ -1,128 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package fake - -import ( - v1beta1 "k8s.io/api/extensions/v1beta1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - testing "k8s.io/client-go/testing" -) - -// FakeNetworkPolicies implements NetworkPolicyInterface -type FakeNetworkPolicies struct { - Fake *FakeExtensionsV1beta1 - ns string -} - -var networkpoliciesResource = schema.GroupVersionResource{Group: "extensions", Version: "v1beta1", Resource: "networkpolicies"} - -var networkpoliciesKind = schema.GroupVersionKind{Group: "extensions", Version: "v1beta1", Kind: "NetworkPolicy"} - -// Get takes name of the networkPolicy, and returns the corresponding networkPolicy object, and an error if there is any. -func (c *FakeNetworkPolicies) Get(name string, options v1.GetOptions) (result *v1beta1.NetworkPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewGetAction(networkpoliciesResource, c.ns, name), &v1beta1.NetworkPolicy{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.NetworkPolicy), err -} - -// List takes label and field selectors, and returns the list of NetworkPolicies that match those selectors. -func (c *FakeNetworkPolicies) List(opts v1.ListOptions) (result *v1beta1.NetworkPolicyList, err error) { - obj, err := c.Fake. - Invokes(testing.NewListAction(networkpoliciesResource, networkpoliciesKind, c.ns, opts), &v1beta1.NetworkPolicyList{}) - - if obj == nil { - return nil, err - } - - label, _, _ := testing.ExtractFromListOptions(opts) - if label == nil { - label = labels.Everything() - } - list := &v1beta1.NetworkPolicyList{ListMeta: obj.(*v1beta1.NetworkPolicyList).ListMeta} - for _, item := range obj.(*v1beta1.NetworkPolicyList).Items { - if label.Matches(labels.Set(item.Labels)) { - list.Items = append(list.Items, item) - } - } - return list, err -} - -// Watch returns a watch.Interface that watches the requested networkPolicies. -func (c *FakeNetworkPolicies) Watch(opts v1.ListOptions) (watch.Interface, error) { - return c.Fake. - InvokesWatch(testing.NewWatchAction(networkpoliciesResource, c.ns, opts)) - -} - -// Create takes the representation of a networkPolicy and creates it. Returns the server's representation of the networkPolicy, and an error, if there is any. -func (c *FakeNetworkPolicies) Create(networkPolicy *v1beta1.NetworkPolicy) (result *v1beta1.NetworkPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewCreateAction(networkpoliciesResource, c.ns, networkPolicy), &v1beta1.NetworkPolicy{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.NetworkPolicy), err -} - -// Update takes the representation of a networkPolicy and updates it. Returns the server's representation of the networkPolicy, and an error, if there is any. -func (c *FakeNetworkPolicies) Update(networkPolicy *v1beta1.NetworkPolicy) (result *v1beta1.NetworkPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewUpdateAction(networkpoliciesResource, c.ns, networkPolicy), &v1beta1.NetworkPolicy{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.NetworkPolicy), err -} - -// Delete takes name of the networkPolicy and deletes it. Returns an error if one occurs. -func (c *FakeNetworkPolicies) Delete(name string, options *v1.DeleteOptions) error { - _, err := c.Fake. - Invokes(testing.NewDeleteAction(networkpoliciesResource, c.ns, name), &v1beta1.NetworkPolicy{}) - - return err -} - -// DeleteCollection deletes a collection of objects. -func (c *FakeNetworkPolicies) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(networkpoliciesResource, c.ns, listOptions) - - _, err := c.Fake.Invokes(action, &v1beta1.NetworkPolicyList{}) - return err -} - -// Patch applies the patch and returns the patched networkPolicy. -func (c *FakeNetworkPolicies) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.NetworkPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(networkpoliciesResource, c.ns, name, pt, data, subresources...), &v1beta1.NetworkPolicy{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.NetworkPolicy), err -} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go index 41d28f041..cfaeebd05 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go @@ -22,8 +22,6 @@ type DaemonSetExpansion interface{} type IngressExpansion interface{} -type NetworkPolicyExpansion interface{} - type PodSecurityPolicyExpansion interface{} type ReplicaSetExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go deleted file mode 100644 index 0607e2dd4..000000000 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go +++ /dev/null @@ -1,174 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1beta1 - -import ( - "time" - - v1beta1 "k8s.io/api/extensions/v1beta1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - scheme "k8s.io/client-go/kubernetes/scheme" - rest "k8s.io/client-go/rest" -) - -// NetworkPoliciesGetter has a method to return a NetworkPolicyInterface. -// A group's client should implement this interface. -type NetworkPoliciesGetter interface { - NetworkPolicies(namespace string) NetworkPolicyInterface -} - -// NetworkPolicyInterface has methods to work with NetworkPolicy resources. -type NetworkPolicyInterface interface { - Create(*v1beta1.NetworkPolicy) (*v1beta1.NetworkPolicy, error) - Update(*v1beta1.NetworkPolicy) (*v1beta1.NetworkPolicy, error) - Delete(name string, options *v1.DeleteOptions) error - DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error - Get(name string, options v1.GetOptions) (*v1beta1.NetworkPolicy, error) - List(opts v1.ListOptions) (*v1beta1.NetworkPolicyList, error) - Watch(opts v1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.NetworkPolicy, err error) - NetworkPolicyExpansion -} - -// networkPolicies implements NetworkPolicyInterface -type networkPolicies struct { - client rest.Interface - ns string -} - -// newNetworkPolicies returns a NetworkPolicies -func newNetworkPolicies(c *ExtensionsV1beta1Client, namespace string) *networkPolicies { - return &networkPolicies{ - client: c.RESTClient(), - ns: namespace, - } -} - -// Get takes name of the networkPolicy, and returns the corresponding networkPolicy object, and an error if there is any. -func (c *networkPolicies) Get(name string, options v1.GetOptions) (result *v1beta1.NetworkPolicy, err error) { - result = &v1beta1.NetworkPolicy{} - err = c.client.Get(). - Namespace(c.ns). - Resource("networkpolicies"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of NetworkPolicies that match those selectors. -func (c *networkPolicies) List(opts v1.ListOptions) (result *v1beta1.NetworkPolicyList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1beta1.NetworkPolicyList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("networkpolicies"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested networkPolicies. -func (c *networkPolicies) Watch(opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("networkpolicies"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch() -} - -// Create takes the representation of a networkPolicy and creates it. Returns the server's representation of the networkPolicy, and an error, if there is any. -func (c *networkPolicies) Create(networkPolicy *v1beta1.NetworkPolicy) (result *v1beta1.NetworkPolicy, err error) { - result = &v1beta1.NetworkPolicy{} - err = c.client.Post(). - Namespace(c.ns). - Resource("networkpolicies"). - Body(networkPolicy). - Do(). - Into(result) - return -} - -// Update takes the representation of a networkPolicy and updates it. Returns the server's representation of the networkPolicy, and an error, if there is any. -func (c *networkPolicies) Update(networkPolicy *v1beta1.NetworkPolicy) (result *v1beta1.NetworkPolicy, err error) { - result = &v1beta1.NetworkPolicy{} - err = c.client.Put(). - Namespace(c.ns). - Resource("networkpolicies"). - Name(networkPolicy.Name). - Body(networkPolicy). - Do(). - Into(result) - return -} - -// Delete takes name of the networkPolicy and deletes it. Returns an error if one occurs. -func (c *networkPolicies) Delete(name string, options *v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("networkpolicies"). - Name(name). - Body(options). - Do(). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *networkPolicies) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("networkpolicies"). - VersionedParams(&listOptions, scheme.ParameterCodec). - Timeout(timeout). - Body(options). - Do(). - Error() -} - -// Patch applies the patch and returns the patched networkPolicy. -func (c *networkPolicies) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.NetworkPolicy, err error) { - result = &v1beta1.NetworkPolicy{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("networkpolicies"). - SubResource(subresources...). - Name(name). - Body(data). - Do(). - Into(result) - return -} diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go index 6d55ae9b8..d5c2a7a7d 100644 --- a/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go @@ -26,14 +26,6 @@ type IngressListerExpansion interface{} // IngressNamespaceLister. type IngressNamespaceListerExpansion interface{} -// NetworkPolicyListerExpansion allows custom methods to be added to -// NetworkPolicyLister. -type NetworkPolicyListerExpansion interface{} - -// NetworkPolicyNamespaceListerExpansion allows custom methods to be added to -// NetworkPolicyNamespaceLister. -type NetworkPolicyNamespaceListerExpansion interface{} - // PodSecurityPolicyListerExpansion allows custom methods to be added to // PodSecurityPolicyLister. type PodSecurityPolicyListerExpansion interface{} diff --git a/vendor/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go b/vendor/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go deleted file mode 100644 index 782f521ad..000000000 --- a/vendor/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go +++ /dev/null @@ -1,94 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by lister-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1beta1 "k8s.io/api/extensions/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/client-go/tools/cache" -) - -// NetworkPolicyLister helps list NetworkPolicies. -type NetworkPolicyLister interface { - // List lists all NetworkPolicies in the indexer. - List(selector labels.Selector) (ret []*v1beta1.NetworkPolicy, err error) - // NetworkPolicies returns an object that can list and get NetworkPolicies. - NetworkPolicies(namespace string) NetworkPolicyNamespaceLister - NetworkPolicyListerExpansion -} - -// networkPolicyLister implements the NetworkPolicyLister interface. -type networkPolicyLister struct { - indexer cache.Indexer -} - -// NewNetworkPolicyLister returns a new NetworkPolicyLister. -func NewNetworkPolicyLister(indexer cache.Indexer) NetworkPolicyLister { - return &networkPolicyLister{indexer: indexer} -} - -// List lists all NetworkPolicies in the indexer. -func (s *networkPolicyLister) List(selector labels.Selector) (ret []*v1beta1.NetworkPolicy, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.NetworkPolicy)) - }) - return ret, err -} - -// NetworkPolicies returns an object that can list and get NetworkPolicies. -func (s *networkPolicyLister) NetworkPolicies(namespace string) NetworkPolicyNamespaceLister { - return networkPolicyNamespaceLister{indexer: s.indexer, namespace: namespace} -} - -// NetworkPolicyNamespaceLister helps list and get NetworkPolicies. -type NetworkPolicyNamespaceLister interface { - // List lists all NetworkPolicies in the indexer for a given namespace. - List(selector labels.Selector) (ret []*v1beta1.NetworkPolicy, err error) - // Get retrieves the NetworkPolicy from the indexer for a given namespace and name. - Get(name string) (*v1beta1.NetworkPolicy, error) - NetworkPolicyNamespaceListerExpansion -} - -// networkPolicyNamespaceLister implements the NetworkPolicyNamespaceLister -// interface. -type networkPolicyNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all NetworkPolicies in the indexer for a given namespace. -func (s networkPolicyNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.NetworkPolicy, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.NetworkPolicy)) - }) - return ret, err -} - -// Get retrieves the NetworkPolicy from the indexer for a given namespace and name. -func (s networkPolicyNamespaceLister) Get(name string) (*v1beta1.NetworkPolicy, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1beta1.Resource("networkpolicy"), name) - } - return obj.(*v1beta1.NetworkPolicy), nil -} diff --git a/vendor/k8s.io/client-go/rest/config.go b/vendor/k8s.io/client-go/rest/config.go index 6a543ae49..3f6b9bc23 100644 --- a/vendor/k8s.io/client-go/rest/config.go +++ b/vendor/k8s.io/client-go/rest/config.go @@ -366,9 +366,6 @@ func adjustVersion(v string) string { return seg[0] } -// CommandNameOverride allows to override the command reported in user-agent. -var CommandNameOverride = "" - // adjustCommand returns the last component of the // OS-specific command path for use in User-Agent. func adjustCommand(p string) string { @@ -376,9 +373,6 @@ func adjustCommand(p string) string { if len(p) == 0 { return "unknown" } - if len(CommandNameOverride) > 0 { - return CommandNameOverride - } return filepath.Base(p) } diff --git a/vendor/k8s.io/client-go/scale/client.go b/vendor/k8s.io/client-go/scale/client.go index b410cb52e..3a3e8fc9e 100644 --- a/vendor/k8s.io/client-go/scale/client.go +++ b/vendor/k8s.io/client-go/scale/client.go @@ -89,8 +89,6 @@ func (c *scaleClient) pathAndVersionFor(resource schema.GroupResource) (string, return "", gvr, fmt.Errorf("unable to get full preferred group-version-resource for %s: %v", resource.String(), err) } - gvr = correctOapiDeploymentConfig(gvr) // TODO(directxman12): remove when /oapi is removed - groupVer := gvr.GroupVersion() // we need to set the API path based on GroupVersion (defaulting to the legacy path if none is set) diff --git a/vendor/k8s.io/client-go/scale/patch_dc.go b/vendor/k8s.io/client-go/scale/patch_dc.go deleted file mode 100644 index da2330c8e..000000000 --- a/vendor/k8s.io/client-go/scale/patch_dc.go +++ /dev/null @@ -1,28 +0,0 @@ -package scale - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" -) - -var dcGVR = schema.GroupVersionResource{ - Group: "", - Version: "v1", - Resource: "deploymentconfigs", -} - -var groupedDCGVR = schema.GroupVersionResource{ - Group: "apps.openshift.io", - Version: "v1", - Resource: "deploymentconfigs", -} - -func correctOapiDeploymentConfig(gvr schema.GroupVersionResource) schema.GroupVersionResource { - // TODO(directxman12): this is a dirty, dirty hack because oapi just appears in discovery as "/v1", like - // the kube core API. We can remove it if/when we get rid of the legacy oapi group entirely. It makes me - // cry a bit inside, but such is life. - if gvr == dcGVR { - return groupedDCGVR - } - - return gvr -} diff --git a/vendor/k8s.io/client-go/tools/cache/mutation_detector.go b/vendor/k8s.io/client-go/tools/cache/mutation_detector.go index f03738a10..adb5b8be8 100644 --- a/vendor/k8s.io/client-go/tools/cache/mutation_detector.go +++ b/vendor/k8s.io/client-go/tools/cache/mutation_detector.go @@ -114,7 +114,7 @@ func (d *defaultCacheMutationDetector) CompareObjects() { altered := false for i, obj := range d.cachedObjs { if !reflect.DeepEqual(obj.cached, obj.copied) { - fmt.Printf("CACHE %s[%d] ALTERED!\n%v\n", d.name, i, diff.ObjectGoPrintSideBySide(obj.cached, obj.copied)) + fmt.Printf("CACHE %s[%d] ALTERED!\n%v\n", d.name, i, diff.ObjectDiff(obj.cached, obj.copied)) altered = true } } diff --git a/vendor/k8s.io/client-go/tools/cache/reflector.go b/vendor/k8s.io/client-go/tools/cache/reflector.go index 54d0a2a94..c43b7fc52 100644 --- a/vendor/k8s.io/client-go/tools/cache/reflector.go +++ b/vendor/k8s.io/client-go/tools/cache/reflector.go @@ -286,12 +286,7 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error { if err := r.watchHandler(w, &resourceVersion, resyncerrc, stopCh); err != nil { if err != errorStopRequested { - switch { - case apierrs.IsResourceExpired(err): - klog.V(4).Infof("%s: watch of %v ended with: %v", r.name, r.expectedType, err) - default: - klog.Warningf("%s: watch of %v ended with: %v", r.name, r.expectedType, err) - } + klog.Warningf("%s: watch of %v ended with: %v", r.name, r.expectedType, err) } return nil } diff --git a/vendor/k8s.io/client-go/tools/clientcmd/client_config.go b/vendor/k8s.io/client-go/tools/clientcmd/client_config.go index 885113596..a7b8c1c6e 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/client_config.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/client_config.go @@ -35,7 +35,7 @@ import ( var ( // ClusterDefaults has the same behavior as the old EnvVar and DefaultCluster fields // DEPRECATED will be replaced - ClusterDefaults = clientcmdapi.Cluster{Server: os.Getenv("KUBERNETES_MASTER")} + ClusterDefaults = clientcmdapi.Cluster{Server: getDefaultServer()} // DefaultClientConfig represents the legacy behavior of this package for defaulting // DEPRECATED will be replace DefaultClientConfig = DirectClientConfig{*clientcmdapi.NewConfig(), "", &ConfigOverrides{ @@ -43,6 +43,15 @@ var ( }, nil, NewDefaultClientConfigLoadingRules(), promptedCredentials{}} ) +// getDefaultServer returns a default setting for DefaultClientConfig +// DEPRECATED +func getDefaultServer() string { + if server := os.Getenv("KUBERNETES_MASTER"); len(server) > 0 { + return server + } + return "http://localhost:8080" +} + // ClientConfig is used to make it easy to get an api server client type ClientConfig interface { // RawConfig returns the merged result of all overrides diff --git a/vendor/k8s.io/client-go/tools/clientcmd/config.go b/vendor/k8s.io/client-go/tools/clientcmd/config.go index 914160158..b8cc39688 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/config.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/config.go @@ -22,6 +22,7 @@ import ( "path" "path/filepath" "reflect" + "sort" "k8s.io/klog" @@ -155,6 +156,17 @@ func NewDefaultPathOptions() *PathOptions { // that means that this code will only write into a single file. If you want to relativizePaths, you must provide a fully qualified path in any // modified element. func ModifyConfig(configAccess ConfigAccess, newConfig clientcmdapi.Config, relativizePaths bool) error { + possibleSources := configAccess.GetLoadingPrecedence() + // sort the possible kubeconfig files so we always "lock" in the same order + // to avoid deadlock (note: this can fail w/ symlinks, but... come on). + sort.Strings(possibleSources) + for _, filename := range possibleSources { + if err := lockFile(filename); err != nil { + return err + } + defer unlockFile(filename) + } + startingConfig, err := configAccess.GetStartingConfig() if err != nil { return err diff --git a/vendor/k8s.io/client-go/tools/clientcmd/loader.go b/vendor/k8s.io/client-go/tools/clientcmd/loader.go index d78bcc865..7e928a918 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/loader.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/loader.go @@ -420,6 +420,33 @@ func WriteToFile(config clientcmdapi.Config, filename string) error { return nil } +func lockFile(filename string) error { + // TODO: find a way to do this with actual file locks. Will + // probably need separate solution for windows and Linux. + + // Make sure the dir exists before we try to create a lock file. + dir := filepath.Dir(filename) + if _, err := os.Stat(dir); os.IsNotExist(err) { + if err = os.MkdirAll(dir, 0755); err != nil { + return err + } + } + f, err := os.OpenFile(lockName(filename), os.O_CREATE|os.O_EXCL, 0) + if err != nil { + return err + } + f.Close() + return nil +} + +func unlockFile(filename string) error { + return os.Remove(lockName(filename)) +} + +func lockName(filename string) string { + return filename + ".lock" +} + // Write serializes the config to yaml. // Encapsulates serialization without assuming the destination is a file. func Write(config clientcmdapi.Config) ([]byte, error) { diff --git a/vendor/k8s.io/client-go/tools/clientcmd/loader_test.go b/vendor/k8s.io/client-go/tools/clientcmd/loader_test.go index 79ddbb9bd..461d970bf 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/loader_test.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/loader_test.go @@ -560,6 +560,22 @@ func TestMigratingFileSourceMissingSkip(t *testing.T) { } } +func TestFileLocking(t *testing.T) { + f, _ := ioutil.TempFile("", "") + defer os.Remove(f.Name()) + + err := lockFile(f.Name()) + if err != nil { + t.Errorf("unexpected error while locking file: %v", err) + } + defer unlockFile(f.Name()) + + err = lockFile(f.Name()) + if err == nil { + t.Error("expected error while locking file.") + } +} + func Example_noMergingOnExplicitPaths() { commandLineFile, _ := ioutil.TempFile("", "") defer os.Remove(commandLineFile.Name()) diff --git a/vendor/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go b/vendor/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go index 07660a75b..18980744f 100644 --- a/vendor/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go +++ b/vendor/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go @@ -38,14 +38,8 @@ import ( // NameSystems returns the name system used by the generators in this package. func NameSystems() namer.NameSystems { - // If you change this, make sure you get the other instances in listers and informers pluralExceptions := map[string]string{ - "DNS": "DNSes", - "DNSList": "DNSList", - "Endpoints": "Endpoints", - "Features": "Features", - "FeaturesList": "FeaturesList", - "SecurityContextConstraints": "SecurityContextConstraints", + "Endpoints": "Endpoints", } lowercaseNamer := namer.NewAllLowercasePluralNamer(pluralExceptions) @@ -55,18 +49,6 @@ func NameSystems() namer.NameSystems { // you can put your fully qualified package like // to generate a name that doesn't conflict with your group. // "k8s.io/apis/events/v1beta1.Event": "EventResource" - "github.com/openshift/origin/pkg/build/apis/build/v1.Build": "BuildResource", - "github.com/openshift/origin/pkg/build/apis/build.Build": "BuildResource", - "github.com/openshift/origin/pkg/image/apis/image/v1.Image": "ImageResource", - "github.com/openshift/origin/pkg/image/apis/image.Image": "ImageResource", - "github.com/openshift/origin/pkg/project/apis/project/v1.Project": "ProjectResource", - "github.com/openshift/origin/pkg/project/apis/project.Project": "ProjectResource", - "github.com/openshift/origin/pkg/route/apis/route/v1.Route": "RouteResource", - "github.com/openshift/origin/pkg/route/apis/route.Route": "RouteResource", - "github.com/openshift/origin/pkg/template/apis/template/v1.Template": "TemplateResource", - "github.com/openshift/origin/pkg/template/apis/template.Template": "TemplateResource", - "github.com/openshift/origin/pkg/user/apis/user/v1.User": "UserResource", - "github.com/openshift/origin/pkg/user/apis/user.User": "UserResource", }, KeyFunc: func(t *types.Type) string { return t.Name.Package + "." + t.Name.Name @@ -79,18 +61,6 @@ func NameSystems() namer.NameSystems { // you can put your fully qualified package like // to generate a name that doesn't conflict with your group. // "k8s.io/apis/events/v1beta1.Event": "eventResource" - "github.com/openshift/origin/pkg/build/apis/build/v1.Build": "buildResource", - "github.com/openshift/origin/pkg/build/apis/build.Build": "buildResource", - "github.com/openshift/origin/pkg/image/apis/image/v1.Image": "imageResource", - "github.com/openshift/origin/pkg/image/apis/image.Image": "imageResource", - "github.com/openshift/origin/pkg/project/apis/project/v1.Project": "projectResource", - "github.com/openshift/origin/pkg/project/apis/project.Project": "projectResource", - "github.com/openshift/origin/pkg/route/apis/route/v1.Route": "routeResource", - "github.com/openshift/origin/pkg/route/apis/route.Route": "routeResource", - "github.com/openshift/origin/pkg/template/apis/template/v1.Template": "templateResource", - "github.com/openshift/origin/pkg/template/apis/template.Template": "templateResource", - "github.com/openshift/origin/pkg/user/apis/user/v1.User": "userResource", - "github.com/openshift/origin/pkg/user/apis/user.User": "userResource", }, KeyFunc: func(t *types.Type) string { return t.Name.Package + "." + t.Name.Name diff --git a/vendor/k8s.io/code-generator/cmd/informer-gen/generators/generic.go b/vendor/k8s.io/code-generator/cmd/informer-gen/generators/generic.go index efc0c18fa..cad907990 100644 --- a/vendor/k8s.io/code-generator/cmd/informer-gen/generators/generic.go +++ b/vendor/k8s.io/code-generator/cmd/informer-gen/generators/generic.go @@ -51,12 +51,7 @@ func (g *genericGenerator) Filter(c *generator.Context, t *types.Type) bool { func (g *genericGenerator) Namers(c *generator.Context) namer.NameSystems { pluralExceptions := map[string]string{ - "DNS": "DNSes", - "DNSList": "DNSList", - "Endpoints": "Endpoints", - "Features": "Features", - "FeaturesList": "FeaturesList", - "SecurityContextConstraints": "SecurityContextConstraints", + "Endpoints": "Endpoints", } return namer.NameSystems{ "raw": namer.NewRawNamer(g.outputPackage, g.imports), diff --git a/vendor/k8s.io/code-generator/cmd/informer-gen/generators/packages.go b/vendor/k8s.io/code-generator/cmd/informer-gen/generators/packages.go index 72b32dbe6..cfb91ceba 100644 --- a/vendor/k8s.io/code-generator/cmd/informer-gen/generators/packages.go +++ b/vendor/k8s.io/code-generator/cmd/informer-gen/generators/packages.go @@ -36,12 +36,7 @@ import ( // NameSystems returns the name system used by the generators in this package. func NameSystems() namer.NameSystems { pluralExceptions := map[string]string{ - "DNS": "DNSes", - "DNSList": "DNSList", - "Endpoints": "Endpoints", - "Features": "Features", - "FeaturesList": "FeaturesList", - "SecurityContextConstraints": "SecurityContextConstraints", + "Endpoints": "Endpoints", } return namer.NameSystems{ "public": namer.NewPublicNamer(0), diff --git a/vendor/k8s.io/code-generator/cmd/lister-gen/generators/lister.go b/vendor/k8s.io/code-generator/cmd/lister-gen/generators/lister.go index 5ddd7314b..c8ed5ad4d 100644 --- a/vendor/k8s.io/code-generator/cmd/lister-gen/generators/lister.go +++ b/vendor/k8s.io/code-generator/cmd/lister-gen/generators/lister.go @@ -36,12 +36,7 @@ import ( // NameSystems returns the name system used by the generators in this package. func NameSystems() namer.NameSystems { pluralExceptions := map[string]string{ - "DNS": "DNSes", - "DNSList": "DNSList", - "Endpoints": "Endpoints", - "Features": "Features", - "FeaturesList": "FeaturesList", - "SecurityContextConstraints": "SecurityContextConstraints", + "Endpoints": "Endpoints", } return namer.NameSystems{ "public": namer.NewPublicNamer(0), diff --git a/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go b/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go index 889b5f73f..a135cd93e 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go @@ -18,25 +18,17 @@ package apiserver import ( "net/http" - "strings" "time" - "k8s.io/klog" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime/schema" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/wait" genericapiserver "k8s.io/apiserver/pkg/server" - "k8s.io/apiserver/pkg/server/certs" serverstorage "k8s.io/apiserver/pkg/server/storage" "k8s.io/client-go/pkg/version" "k8s.io/kube-aggregator/pkg/apis/apiregistration" - apiregistrationapi "k8s.io/kube-aggregator/pkg/apis/apiregistration" - v1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1" aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" "k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset" @@ -69,8 +61,8 @@ const legacyAPIServiceName = "v1." type ExtraConfig struct { // ProxyClientCert/Key are the client cert used to identify this proxy. Backing APIServices use // this to confirm the proxy's identity - ProxyClientCert string - ProxyClientKey string + ProxyClientCert []byte + ProxyClientKey []byte // If present, the Dial method will be used for dialing out to delegate // apiservers. @@ -105,8 +97,8 @@ type APIAggregator struct { // proxyClientCert/Key are the client cert used to identify this proxy. Backing APIServices use // this to confirm the proxy's identity - proxyClientCert certFunc - proxyClientKey certFunc + proxyClientCert []byte + proxyClientKey []byte proxyTransport *http.Transport // proxyHandlers are the proxy handlers that are currently registered, keyed by apiservice.name @@ -114,9 +106,6 @@ type APIAggregator struct { // handledGroups are the groups that already have routes handledGroups sets.String - // handledAlwaysLocalDelegatePaths are the URL paths that already have routes registered - handledAlwaysLocalDelegatePaths sets.String - // lister is used to add group handling for /apis/ aggregator lookups based on // controller state lister listers.APIServiceLister @@ -168,15 +157,16 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg ) s := &APIAggregator{ - GenericAPIServer: genericServer, - delegateHandler: delegationTarget.UnprotectedHandler(), - proxyTransport: c.ExtraConfig.ProxyTransport, - proxyHandlers: map[string]*proxyHandler{}, - handledGroups: sets.String{}, - handledAlwaysLocalDelegatePaths: sets.String{}, - lister: informerFactory.Apiregistration().InternalVersion().APIServices().Lister(), - APIRegistrationInformers: informerFactory, - serviceResolver: c.ExtraConfig.ServiceResolver, + GenericAPIServer: genericServer, + delegateHandler: delegationTarget.UnprotectedHandler(), + proxyClientCert: c.ExtraConfig.ProxyClientCert, + proxyClientKey: c.ExtraConfig.ProxyClientKey, + proxyTransport: c.ExtraConfig.ProxyTransport, + proxyHandlers: map[string]*proxyHandler{}, + handledGroups: sets.String{}, + lister: informerFactory.Apiregistration().InternalVersion().APIServices().Lister(), + APIRegistrationInformers: informerFactory, + serviceResolver: c.ExtraConfig.ServiceResolver, } apiGroupInfo := apiservicerest.NewRESTStorage(c.GenericConfig.MergedResourceConfig, c.GenericConfig.RESTOptionsGetter) @@ -192,31 +182,15 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandle("/apis/", apisHandler) apiserviceRegistrationController := NewAPIServiceRegistrationController(informerFactory.Apiregistration().InternalVersion().APIServices(), s) - aggregatorProxyCerts := certs.NewDynamicCertKeyPairLoader(c.ExtraConfig.ProxyClientCert, c.ExtraConfig.ProxyClientKey, apiserviceRegistrationController.resyncAll) - if err := aggregatorProxyCerts.CheckCerts(); err != nil { - return nil, err - } - s.proxyClientCert = aggregatorProxyCerts.GetRawCert - s.proxyClientKey = aggregatorProxyCerts.GetRawKey - - availableController, err := statuscontrollers.NewAvailableConditionController( + availableController := statuscontrollers.NewAvailableConditionController( informerFactory.Apiregistration().InternalVersion().APIServices(), c.GenericConfig.SharedInformerFactory.Core().V1().Services(), c.GenericConfig.SharedInformerFactory.Core().V1().Endpoints(), apiregistrationClient.Apiregistration(), c.ExtraConfig.ProxyTransport, - aggregatorProxyCerts.GetRawCert, - aggregatorProxyCerts.GetRawKey, s.serviceResolver, ) - if err != nil { - return nil, err - } - s.GenericAPIServer.AddPostStartHookOrDie("aggregator-reload-proxy-client-cert", func(context genericapiserver.PostStartHookContext) error { - go aggregatorProxyCerts.Run(context.StopCh) - return nil - }) s.GenericAPIServer.AddPostStartHookOrDie("start-kube-aggregator-informers", func(context genericapiserver.PostStartHookContext) error { informerFactory.Start(context.StopCh) c.GenericConfig.SharedInformerFactory.Start(context.StopCh) @@ -231,33 +205,6 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg go availableController.Run(5, context.StopCh) return nil }) - s.GenericAPIServer.AddPostStartHook("apiservice-wait-for-first-sync", func(context genericapiserver.PostStartHookContext) error { - // when the aggregator first starts, it should make sure that it has proxy handlers for all the known good API services at this time - // we only need to do this once. - err := wait.PollImmediateUntil(100*time.Millisecond, func() (bool, error) { - // fix race - handledAPIServices := sets.StringKeySet(s.proxyHandlers) - apiservices, err := s.lister.List(labels.Everything()) - if err != nil { - return false, err - } - expectedAPIServices := sets.NewString() - for _, apiservice := range apiservices { - if apiregistrationapi.IsAPIServiceConditionTrue(apiservice, apiregistrationapi.Available) { - expectedAPIServices.Insert(apiservice.Name) - } - } - - notYetHandledAPIServices := expectedAPIServices.Difference(handledAPIServices) - if len(notYetHandledAPIServices) == 0 { - return true, nil - } - klog.Infof("still waiting on handling APIServices: %v", strings.Join(notYetHandledAPIServices.List(), ",")) - - return false, nil - }, context.StopCh) - return err - }) if openAPIConfig != nil { specDownloader := openapiaggregator.NewDownloader() @@ -310,16 +257,9 @@ func (s *APIAggregator) AddAPIService(apiService *apiregistration.APIService) er } proxyHandler.updateAPIService(apiService) if s.openAPIAggregationController != nil { - // this is calling a controller. It should already handle being async. - go func() { - defer utilruntime.HandleCrash() - s.openAPIAggregationController.AddAPIService(proxyHandler, apiService) - }() + s.openAPIAggregationController.AddAPIService(proxyHandler, apiService) } - // we want to update the registration bit last after all the pieces are wired together - defer func() { - s.proxyHandlers[apiService.Name] = proxyHandler - }() + s.proxyHandlers[apiService.Name] = proxyHandler s.GenericAPIServer.Handler.NonGoRestfulMux.Handle(proxyPath, proxyHandler) s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandlePrefix(proxyPath+"/", proxyHandler) @@ -333,18 +273,6 @@ func (s *APIAggregator) AddAPIService(apiService *apiregistration.APIService) er return nil } - // For some resources we always want to delegate to local API server. - // These resources have to exists as CRD to be served locally. - for _, alwaysLocalDelegatePath := range alwaysLocalDelegatePathPrefixes.List() { - if s.handledAlwaysLocalDelegatePaths.Has(alwaysLocalDelegatePath) { - continue - } - s.GenericAPIServer.Handler.NonGoRestfulMux.Handle(alwaysLocalDelegatePath, proxyHandler.localDelegate) - // Always use local delegate for this prefix - s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandlePrefix(alwaysLocalDelegatePath+"/", proxyHandler.localDelegate) - s.handledAlwaysLocalDelegatePaths.Insert(alwaysLocalDelegatePath) - } - // it's time to register the group aggregation endpoint groupPath := "/apis/" + apiService.Spec.Group groupDiscoveryHandler := &apiGroupHandler{ diff --git a/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go b/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go index 26d83af3b..b74143fea 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go @@ -20,13 +20,13 @@ import ( "fmt" "time" + "k8s.io/klog" + apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" - "k8s.io/klog" "k8s.io/kube-aggregator/pkg/apis/apiregistration" informers "k8s.io/kube-aggregator/pkg/client/informers/internalversion/apiregistration/internalversion" @@ -169,15 +169,3 @@ func (c *APIServiceRegistrationController) deleteAPIService(obj interface{}) { klog.V(4).Infof("Deleting %q", castObj.Name) c.enqueue(castObj) } - -// resyncAll queues all apiservices to be rehandled. -func (c *APIServiceRegistrationController) resyncAll() { - apiServices, err := c.apiServiceLister.List(labels.Everything()) - if err != nil { - utilruntime.HandleError(err) - return - } - for _, apiService := range apiServices { - c.addAPIService(apiService) - } -} diff --git a/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go b/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go index f736f2d68..ee3433212 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go @@ -22,8 +22,9 @@ import ( "net/url" "sync/atomic" + "k8s.io/klog" + "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/httpstream" "k8s.io/apimachinery/pkg/util/httpstream/spdy" utilnet "k8s.io/apimachinery/pkg/util/net" @@ -35,14 +36,11 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" restclient "k8s.io/client-go/rest" "k8s.io/client-go/transport" - "k8s.io/klog" apiregistrationapi "k8s.io/kube-aggregator/pkg/apis/apiregistration" ) const aggregatorComponent string = "aggregator" -type certFunc func() []byte - // proxyHandler provides a http.Handler which will proxy traffic to locations // specified by items implementing Redirector. type proxyHandler struct { @@ -51,8 +49,8 @@ type proxyHandler struct { // proxyClientCert/Key are the client cert used to identify this proxy. Backing APIServices use // this to confirm the proxy's identity - proxyClientCert certFunc - proxyClientKey certFunc + proxyClientCert []byte + proxyClientKey []byte proxyTransport *http.Transport // Endpoints based routing to map from cluster IP to routable IP @@ -111,14 +109,6 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { return } - // some groupResources should always be delegated - if requestInfo, ok := genericapirequest.RequestInfoFrom(req.Context()); ok { - if alwaysLocalDelegateGroupResource[schema.GroupResource{Group: requestInfo.APIGroup, Resource: requestInfo.Resource}] { - r.localDelegate.ServeHTTP(w, req) - return - } - } - if !handlingInfo.serviceAvailable { proxyError(w, req, "service unavailable", http.StatusServiceUnavailable) return @@ -229,8 +219,8 @@ func (r *proxyHandler) updateAPIService(apiService *apiregistrationapi.APIServic TLSClientConfig: restclient.TLSClientConfig{ Insecure: apiService.Spec.InsecureSkipTLSVerify, ServerName: apiService.Spec.Service.Name + "." + apiService.Spec.Service.Namespace + ".svc", - CertData: r.proxyClientCert(), - KeyData: r.proxyClientKey(), + CertData: r.proxyClientCert, + KeyData: r.proxyClientKey, CAData: apiService.Spec.CABundle, }, }, diff --git a/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go b/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go index 757da04c9..aa54adfff 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go +++ b/vendor/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go @@ -88,10 +88,6 @@ func (r *mockedRouter) ResolveEndpoint(namespace, name string) (*url.URL, error) return &url.URL{Scheme: "https", Host: r.destinationHost}, r.err } -func emptyCert() []byte { - return []byte{} -} - func TestProxyHandler(t *testing.T) { target := &targetHTTPHandler{} targetServer := httptest.NewUnstartedServer(target) @@ -279,8 +275,6 @@ func TestProxyHandler(t *testing.T) { localDelegate: http.NewServeMux(), serviceResolver: serviceResolver, proxyTransport: &http.Transport{}, - proxyClientCert: emptyCert, - proxyClientKey: emptyCert, } server := httptest.NewServer(contextHandler(handler, tc.user)) defer server.Close() @@ -424,8 +418,6 @@ func TestProxyUpgrade(t *testing.T) { proxyHandler := &proxyHandler{ serviceResolver: &mockedRouter{destinationHost: serverURL.Host}, proxyTransport: &http.Transport{}, - proxyClientCert: emptyCert, - proxyClientKey: emptyCert, } proxyHandler.updateAPIService(tc.APIService) aggregator := httptest.NewServer(contextHandler(proxyHandler, &user.DefaultInfo{Name: "username"})) diff --git a/vendor/k8s.io/kube-aggregator/pkg/apiserver/patch_always_local_delegate.go b/vendor/k8s.io/kube-aggregator/pkg/apiserver/patch_always_local_delegate.go deleted file mode 100644 index f7169c0d1..000000000 --- a/vendor/k8s.io/kube-aggregator/pkg/apiserver/patch_always_local_delegate.go +++ /dev/null @@ -1,49 +0,0 @@ -package apiserver - -import ( - "fmt" - "strings" - - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/sets" -) - -// alwaysLocalDelegatePrefixes specify a list of API paths that we want to delegate to Kubernetes API server -// instead of handling with OpenShift API server. -var alwaysLocalDelegatePathPrefixes = sets.NewString() - -// AddAlwaysLocalDelegateForPrefix will cause the given URL prefix always be served by local API server (kube apiserver). -// This allows to move some resources from aggregated API server into CRD. -func AddAlwaysLocalDelegateForPrefix(prefix string) { - if alwaysLocalDelegatePathPrefixes.Has(prefix) { - return - } - alwaysLocalDelegatePathPrefixes.Insert(prefix) -} - -var overlappingGroupVersion = map[schema.GroupVersion]bool{} - -// AddOverlappingGroupVersion will stop the CRD registration controller from trying to manage an APIService. -func AddOverlappingGroupVersion(groupVersion schema.GroupVersion) { - overlappingGroupVersion[groupVersion] = true -} - -var alwaysLocalDelegateGroupResource = map[schema.GroupResource]bool{} - -func AddAlwaysLocalDelegateGroupResource(groupResource schema.GroupResource) { - alwaysLocalDelegateGroupResource[groupResource] = true -} - -func APIServiceAlreadyExists(groupVersion schema.GroupVersion) bool { - if overlappingGroupVersion[groupVersion] { - return true - } - - testPrefix := fmt.Sprintf("/apis/%s/%s/", groupVersion.Group, groupVersion.Version) - for _, prefix := range alwaysLocalDelegatePathPrefixes.List() { - if strings.HasPrefix(prefix, testPrefix) { - return true - } - } - return false -} diff --git a/vendor/k8s.io/kube-aggregator/pkg/cmd/server/start.go b/vendor/k8s.io/kube-aggregator/pkg/cmd/server/start.go index f67470a84..9dd8d7021 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/cmd/server/start.go +++ b/vendor/k8s.io/kube-aggregator/pkg/cmd/server/start.go @@ -19,6 +19,7 @@ package server import ( "fmt" "io" + "io/ioutil" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -141,8 +142,15 @@ func (o AggregatorOptions) RunAggregator(stopCh <-chan struct{}) error { }, } - config.ExtraConfig.ProxyClientCert = o.ProxyClientCertFile - config.ExtraConfig.ProxyClientKey = o.ProxyClientKeyFile + var err error + config.ExtraConfig.ProxyClientCert, err = ioutil.ReadFile(o.ProxyClientCertFile) + if err != nil { + return err + } + config.ExtraConfig.ProxyClientKey, err = ioutil.ReadFile(o.ProxyClientKeyFile) + if err != nil { + return err + } server, err := config.Complete().NewWithDelegate(genericapiserver.NewEmptyDelegate()) if err != nil { diff --git a/vendor/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go b/vendor/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go index 7fb0dcb97..c360e4b0f 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go +++ b/vendor/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go @@ -202,16 +202,15 @@ func (s *specAggregator) tryUpdatingServiceSpecs(specInfo *openAPISpecInfo) erro if specInfo == nil { return fmt.Errorf("invalid input: specInfo must be non-nil") } - origSpecInfo, existedBefore := s.openAPISpecs[specInfo.apiService.Name] - s.openAPISpecs[specInfo.apiService.Name] = specInfo - + orgSpecInfo, exists := s.openAPISpecs[specInfo.apiService.Name] // Skip aggregation if OpenAPI spec didn't change - if existedBefore && origSpecInfo != nil && origSpecInfo.etag == specInfo.etag { + if exists && orgSpecInfo != nil && orgSpecInfo.etag == specInfo.etag { return nil } + s.openAPISpecs[specInfo.apiService.Name] = specInfo if err := s.updateOpenAPISpec(); err != nil { - if existedBefore { - s.openAPISpecs[specInfo.apiService.Name] = origSpecInfo + if exists { + s.openAPISpecs[specInfo.apiService.Name] = orgSpecInfo } else { delete(s.openAPISpecs, specInfo.apiService.Name) } diff --git a/vendor/k8s.io/kube-aggregator/pkg/controllers/openapi/controller.go b/vendor/k8s.io/kube-aggregator/pkg/controllers/openapi/controller.go index 6e1dac7b9..ea8de1215 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/controllers/openapi/controller.go +++ b/vendor/k8s.io/kube-aggregator/pkg/controllers/openapi/controller.go @@ -99,13 +99,7 @@ func (c *AggregationController) processNextWorkItem() bool { return false } - if aggregator.IsLocalAPIService(key.(string)) { - // for local delegation targets that are aggregated once per second, log at - // higher level to avoid flooding the log - klog.V(5).Infof("OpenAPI AggregationController: Processing item %s", key) - } else { - klog.Infof("OpenAPI AggregationController: Processing item %s", key) - } + klog.Infof("OpenAPI AggregationController: Processing item %s", key) action, err := c.syncHandler(key.(string)) if err == nil { diff --git a/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go b/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go index 004032f65..acbd5c089 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go +++ b/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go @@ -17,12 +17,15 @@ limitations under the License. package apiserver import ( + "crypto/tls" "fmt" "net/http" "net/url" "time" - v1 "k8s.io/api/core/v1" + "k8s.io/klog" + + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/equality" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" @@ -33,11 +36,9 @@ import ( "k8s.io/apimachinery/pkg/util/wait" v1informers "k8s.io/client-go/informers/core/v1" v1listers "k8s.io/client-go/listers/core/v1" - "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" - "k8s.io/client-go/transport" "k8s.io/client-go/util/workqueue" - "k8s.io/klog" + "k8s.io/kube-aggregator/pkg/apis/apiregistration" apiregistrationclient "k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset/typed/apiregistration/internalversion" informers "k8s.io/kube-aggregator/pkg/client/informers/internalversion/apiregistration/internalversion" @@ -45,8 +46,6 @@ import ( "k8s.io/kube-aggregator/pkg/controllers" ) -type certFunc func() []byte - // ServiceResolver knows how to convert a service reference into an actual location. type ServiceResolver interface { ResolveEndpoint(namespace, name string) (*url.URL, error) @@ -66,9 +65,7 @@ type AvailableConditionController struct { endpointsLister v1listers.EndpointsLister endpointsSynced cache.InformerSynced - proxyTransport *http.Transport - proxyClientCert certFunc - proxyClientKey certFunc + discoveryClient *http.Client serviceResolver ServiceResolver // To allow injection for testing. @@ -84,10 +81,8 @@ func NewAvailableConditionController( endpointsInformer v1informers.EndpointsInformer, apiServiceClient apiregistrationclient.APIServicesGetter, proxyTransport *http.Transport, - proxyClientCert certFunc, - proxyClientKey certFunc, serviceResolver ServiceResolver, -) (*AvailableConditionController, error) { +) *AvailableConditionController { c := &AvailableConditionController{ apiServiceClient: apiServiceClient, apiServiceLister: apiServiceInformer.Lister(), @@ -103,11 +98,22 @@ func NewAvailableConditionController( // the maximum disruption time to a minimum, but it does prevent hot loops. workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 30*time.Second), "AvailableConditionController"), - proxyTransport: proxyTransport, - proxyClientCert: proxyClientCert, - proxyClientKey: proxyClientKey, } + // construct an http client that will ignore TLS verification (if someone owns the network and messes with your status + // that's not so bad) and sets a very short timeout. + discoveryClient := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, + // the request should happen quickly. + Timeout: 5 * time.Second, + } + if proxyTransport != nil { + discoveryClient.Transport = proxyTransport + } + c.discoveryClient = discoveryClient + // resync on this one because it is low cardinality and rechecking the actual discovery // allows us to detect health in a more timely fashion when network connectivity to // nodes is snipped, but the network still attempts to route there. See @@ -134,7 +140,7 @@ func NewAvailableConditionController( c.syncFn = c.sync - return c, nil + return c } func (c *AvailableConditionController) sync(key string) error { @@ -146,29 +152,6 @@ func (c *AvailableConditionController) sync(key string) error { return err } - // if a particular transport was specified, use that otherwise build one - // construct an http client that will ignore TLS verification (if someone owns the network and messes with your status - // that's not so bad) and sets a very short timeout. This is a best effort GET that provides no additional information - restConfig := &rest.Config{ - TLSClientConfig: rest.TLSClientConfig{ - Insecure: true, - CertData: c.proxyClientCert(), - KeyData: c.proxyClientKey(), - }, - } - if c.proxyTransport != nil && c.proxyTransport.DialContext != nil { - restConfig.Dial = c.proxyTransport.DialContext - } - restTransport, err := rest.TransportFor(restConfig) - if err != nil { - panic(err) - } - discoveryClient := &http.Client{ - Transport: restTransport, - // the request should happen quickly. - Timeout: 5 * time.Second, - } - apiService := originalAPIService.DeepCopy() availableCondition := apiregistration.APIServiceCondition{ @@ -252,70 +235,33 @@ func (c *AvailableConditionController) sync(key string) error { } // actually try to hit the discovery endpoint when it isn't local and when we're routing as a service. if apiService.Spec.Service != nil && c.serviceResolver != nil { - attempts := 5 - results := make(chan error, attempts) - for i := 0; i < attempts; i++ { - go func() { - discoveryURL, err := c.serviceResolver.ResolveEndpoint(apiService.Spec.Service.Namespace, apiService.Spec.Service.Name) - if err != nil { - results <- err - return - } - - errCh := make(chan error) - go func() { - newReq, err := http.NewRequest("GET", discoveryURL.String(), nil) - if err != nil { - errCh <- err - return - } - - // setting the system-masters identity ensures that we will always have access rights - transport.SetAuthProxyHeaders(newReq, "system:kube-aggregator", []string{"system:masters"}, nil) - resp, err := discoveryClient.Do(newReq) - if resp != nil { - resp.Body.Close() - // we should always been in the 200s or 300s - if resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusMultipleChoices { - errCh <- fmt.Errorf("bad status from %v: %v", discoveryURL, resp.StatusCode) - return - } - } - - errCh <- err - }() - - select { - case err = <-errCh: - if err != nil { - results <- fmt.Errorf("failing or missing response from %v: %v", discoveryURL, err) - return - } - - // we had trouble with slow dial and DNS responses causing us to wait too long. - // we added this as insurance - case <-time.After(6 * time.Second): - results <- fmt.Errorf("timed out waiting for %v", discoveryURL) - return - } - - results <- nil - }() + discoveryURL, err := c.serviceResolver.ResolveEndpoint(apiService.Spec.Service.Namespace, apiService.Spec.Service.Name) + if err != nil { + return err } - var lastError error - for i := 0; i < attempts; i++ { - lastError = <-results - // if we had at least one success, we are successful overall and we can return now - if lastError == nil { - break + errCh := make(chan error) + go func() { + resp, err := c.discoveryClient.Get(discoveryURL.String()) + if resp != nil { + resp.Body.Close() } + errCh <- err + }() + + select { + case err = <-errCh: + + // we had trouble with slow dial and DNS responses causing us to wait too long. + // we added this as insurance + case <-time.After(6 * time.Second): + err = fmt.Errorf("timed out waiting for %v", discoveryURL) } - if lastError != nil { + if err != nil { availableCondition.Status = apiregistration.ConditionFalse availableCondition.Reason = "FailedDiscoveryCheck" - availableCondition.Message = lastError.Error() + availableCondition.Message = fmt.Sprintf("no response from %v: %v", discoveryURL, err) apiregistration.SetAPIServiceCondition(apiService, availableCondition) _, updateErr := updateAPIServiceStatus(c.apiServiceClient, originalAPIService, apiService) if updateErr != nil { @@ -323,7 +269,7 @@ func (c *AvailableConditionController) sync(key string) error { } // force a requeue to make it very obvious that this will be retried at some point in the future // along with other requeues done via service change, endpoint change, and resync - return lastError + return err } } diff --git a/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller_test.go b/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller_test.go index 9bf624e9c..5feec0e18 100644 --- a/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller_test.go +++ b/vendor/k8s.io/kube-aggregator/pkg/controllers/status/available_controller_test.go @@ -17,15 +17,11 @@ limitations under the License. package apiserver import ( - "net/http" - "net/http/httptest" - "net/url" - "strings" "testing" "github.com/davecgh/go-spew/spew" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1listers "k8s.io/client-go/listers/core/v1" clienttesting "k8s.io/client-go/testing" @@ -90,12 +86,10 @@ func TestSync(t *testing.T) { tests := []struct { name string - apiServiceName string - apiServices []*apiregistration.APIService - services []*v1.Service - endpoints []*v1.Endpoints - forceDiscoveryFail bool - + apiServiceName string + apiServices []*apiregistration.APIService + services []*v1.Service + endpoints []*v1.Endpoints expectedAvailability apiregistration.APIServiceCondition }{ { @@ -180,98 +174,66 @@ func TestSync(t *testing.T) { Message: `all checks passed`, }, }, - { - name: "remote-bad-return", - apiServiceName: "remote.group", - apiServices: []*apiregistration.APIService{newRemoteAPIService("remote.group")}, - services: []*v1.Service{newService("foo", "bar")}, - endpoints: []*v1.Endpoints{newEndpointsWithAddress("foo", "bar")}, - forceDiscoveryFail: true, - expectedAvailability: apiregistration.APIServiceCondition{ - Type: apiregistration.Available, - Status: apiregistration.ConditionFalse, - Reason: "FailedDiscoveryCheck", - Message: `failing or missing response from`, - }, - }, } for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - fakeClient := fake.NewSimpleClientset() - apiServiceIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) - serviceIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) - endpointsIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) - for _, obj := range tc.apiServices { - apiServiceIndexer.Add(obj) - } - for _, obj := range tc.services { - serviceIndexer.Add(obj) - } - for _, obj := range tc.endpoints { - endpointsIndexer.Add(obj) - } - - testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if !tc.forceDiscoveryFail { - w.WriteHeader(http.StatusOK) - } - w.WriteHeader(http.StatusForbidden) - })) - defer testServer.Close() - - c := AvailableConditionController{ - apiServiceClient: fakeClient.Apiregistration(), - apiServiceLister: listers.NewAPIServiceLister(apiServiceIndexer), - serviceLister: v1listers.NewServiceLister(serviceIndexer), - endpointsLister: v1listers.NewEndpointsLister(endpointsIndexer), - proxyClientCert: emptyCert, - proxyClientKey: emptyCert, - serviceResolver: &fakeServiceResolver{url: testServer.URL}, - } - c.sync(tc.apiServiceName) - - // ought to have one action writing status - if e, a := 1, len(fakeClient.Actions()); e != a { - t.Fatalf("%v expected %v, got %v", tc.name, e, fakeClient.Actions()) - } - - action, ok := fakeClient.Actions()[0].(clienttesting.UpdateAction) - if !ok { - t.Fatalf("%v got %v", tc.name, ok) - } - - if e, a := 1, len(action.GetObject().(*apiregistration.APIService).Status.Conditions); e != a { - t.Fatalf("%v expected %v, got %v", tc.name, e, action.GetObject()) - } - condition := action.GetObject().(*apiregistration.APIService).Status.Conditions[0] - if e, a := tc.expectedAvailability.Type, condition.Type; e != a { - t.Errorf("%v expected %v, got %#v", tc.name, e, condition) - } - if e, a := tc.expectedAvailability.Status, condition.Status; e != a { - t.Errorf("%v expected %v, got %#v", tc.name, e, condition) - } - if e, a := tc.expectedAvailability.Reason, condition.Reason; e != a { - t.Errorf("%v expected %v, got %#v", tc.name, e, condition) - } - if e, a := tc.expectedAvailability.Message, condition.Message; !strings.HasPrefix(a, e) { - t.Errorf("%v expected %v, got %#v", tc.name, e, condition) - } - if condition.LastTransitionTime.IsZero() { - t.Error("expected lastTransitionTime to be non-zero") - } - }) + fakeClient := fake.NewSimpleClientset() + apiServiceIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) + serviceIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) + endpointsIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) + for _, obj := range tc.apiServices { + apiServiceIndexer.Add(obj) + } + for _, obj := range tc.services { + serviceIndexer.Add(obj) + } + for _, obj := range tc.endpoints { + endpointsIndexer.Add(obj) + } + + c := AvailableConditionController{ + apiServiceClient: fakeClient.Apiregistration(), + apiServiceLister: listers.NewAPIServiceLister(apiServiceIndexer), + serviceLister: v1listers.NewServiceLister(serviceIndexer), + endpointsLister: v1listers.NewEndpointsLister(endpointsIndexer), + } + c.sync(tc.apiServiceName) + + // ought to have one action writing status + if e, a := 1, len(fakeClient.Actions()); e != a { + t.Errorf("%v expected %v, got %v", tc.name, e, fakeClient.Actions()) + continue + } + + action, ok := fakeClient.Actions()[0].(clienttesting.UpdateAction) + if !ok { + t.Errorf("%v got %v", tc.name, ok) + continue + } + + if e, a := 1, len(action.GetObject().(*apiregistration.APIService).Status.Conditions); e != a { + t.Errorf("%v expected %v, got %v", tc.name, e, action.GetObject()) + continue + } + condition := action.GetObject().(*apiregistration.APIService).Status.Conditions[0] + if e, a := tc.expectedAvailability.Type, condition.Type; e != a { + t.Errorf("%v expected %v, got %#v", tc.name, e, condition) + } + if e, a := tc.expectedAvailability.Status, condition.Status; e != a { + t.Errorf("%v expected %v, got %#v", tc.name, e, condition) + } + if e, a := tc.expectedAvailability.Reason, condition.Reason; e != a { + t.Errorf("%v expected %v, got %#v", tc.name, e, condition) + } + if e, a := tc.expectedAvailability.Message, condition.Message; e != a { + t.Errorf("%v expected %v, got %#v", tc.name, e, condition) + } + if condition.LastTransitionTime.IsZero() { + t.Error("expected lastTransitionTime to be non-zero") + } } } -type fakeServiceResolver struct { - url string -} - -func (f *fakeServiceResolver) ResolveEndpoint(namespace, name string) (*url.URL, error) { - return url.Parse(f.url) -} - func TestUpdateAPIServiceStatus(t *testing.T) { foo := &apiregistration.APIService{Status: apiregistration.APIServiceStatus{Conditions: []apiregistration.APIServiceCondition{{Type: "foo"}}}} bar := &apiregistration.APIService{Status: apiregistration.APIServiceStatus{Conditions: []apiregistration.APIServiceCondition{{Type: "bar"}}}} @@ -287,8 +249,5 @@ func TestUpdateAPIServiceStatus(t *testing.T) { if e, a := 1, len(fakeClient.Actions()); e != a { t.Error(spew.Sdump(fakeClient.Actions())) } -} -func emptyCert() []byte { - return []byte{} } diff --git a/vendor/k8s.io/kubernetes/.gitignore b/vendor/k8s.io/kubernetes/.gitignore index bff93f262..88675afae 100644 --- a/vendor/k8s.io/kubernetes/.gitignore +++ b/vendor/k8s.io/kubernetes/.gitignore @@ -110,11 +110,16 @@ kubernetes.tar.gz # generated files in any directory # TODO(thockin): uncomment this when we stop committing the generated files. #zz_generated.* +zz_generated.openapi.go +# TODO(roycaihw): remove this when we stop committing the generated definition +!staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go +zz_generated_*_test.go # make-related metadata /.make/ # Just in time generated data in the source, should never be committed +/test/e2e/generated/bindata.go # This file used by some vendor repos (e.g. github.com/go-openapi/...) to store secret variables and should not be ignored !\.drone\.sec diff --git a/vendor/k8s.io/kubernetes/api/openapi-spec/swagger.json b/vendor/k8s.io/kubernetes/api/openapi-spec/swagger.json index 755857951..2de9fa523 100644 --- a/vendor/k8s.io/kubernetes/api/openapi-spec/swagger.json +++ b/vendor/k8s.io/kubernetes/api/openapi-spec/swagger.json @@ -8347,7 +8347,7 @@ "description": "NodeStatus is information about the current status of a node.", "properties": { "addresses": { - "description": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses Note: This field is declared as mergeable, but the merge key is not sufficiently unique, which can cause data corruption when it is merged. Callers should instead use a full-replacement patch. See http://pr.k8s.io/79391 for an example.", + "description": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses", "items": { "$ref": "#/definitions/io.k8s.api.core.v1.NodeAddress" }, diff --git a/vendor/k8s.io/kubernetes/cmd/cloud-controller-manager/app/controllermanager.go b/vendor/k8s.io/kubernetes/cmd/cloud-controller-manager/app/controllermanager.go index 87deff35e..26710bbb9 100644 --- a/vendor/k8s.io/kubernetes/cmd/cloud-controller-manager/app/controllermanager.go +++ b/vendor/k8s.io/kubernetes/cmd/cloud-controller-manager/app/controllermanager.go @@ -25,7 +25,6 @@ import ( "github.com/spf13/cobra" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/apimachinery/pkg/util/wait" @@ -110,16 +109,6 @@ the cloud specific control loops shipped with Kubernetes.`, // Run runs the ExternalCMServer. This should never exit. func Run(c *cloudcontrollerconfig.CompletedConfig, stopCh <-chan struct{}) error { - ctx, cancel := context.WithCancel(context.TODO()) - defer cancel() - go func() { - select { - case <-stopCh: - cancel() - case <-ctx.Done(): - } - }() - // To help debugging, immediately log version klog.Infof("Version: %+v", version.Get()) @@ -158,13 +147,9 @@ func Run(c *cloudcontrollerconfig.CompletedConfig, stopCh <-chan struct{}) error if c.SecureServing != nil { unsecuredMux := genericcontrollermanager.NewBaseHandler(&c.ComponentConfig.Generic.Debugging, checks...) handler := genericcontrollermanager.BuildHandlerChain(unsecuredMux, &c.Authorization, &c.Authentication) - if serverStoppedCh, err := c.SecureServing.Serve(handler, 0, stopCh); err != nil { + // TODO: handle stoppedCh returned by c.SecureServing.Serve + if _, err := c.SecureServing.Serve(handler, 0, stopCh); err != nil { return err - } else { - defer func() { - cancel() - <-serverStoppedCh - }() } } if c.InsecureServing != nil { @@ -218,15 +203,13 @@ func Run(c *cloudcontrollerconfig.CompletedConfig, stopCh <-chan struct{}) error Callbacks: leaderelection.LeaderCallbacks{ OnStartedLeading: run, OnStoppedLeading: func() { - cancel() - utilruntime.HandleError(fmt.Errorf("leaderelection lost")) + klog.Fatalf("leaderelection lost") }, }, WatchDog: electionChecker, Name: "cloud-controller-manager", }) - - return nil + panic("unreachable") } // startControllers starts the cloud specific controller loops. diff --git a/vendor/k8s.io/kubernetes/cmd/genkubedocs/gen_kube_docs.go b/vendor/k8s.io/kubernetes/cmd/genkubedocs/gen_kube_docs.go index 815957c71..12f2de4f2 100644 --- a/vendor/k8s.io/kubernetes/cmd/genkubedocs/gen_kube_docs.go +++ b/vendor/k8s.io/kubernetes/cmd/genkubedocs/gen_kube_docs.go @@ -58,7 +58,7 @@ func main() { doc.GenMarkdownTree(apiserver, outDir) case "kube-controller-manager": // generate docs for kube-controller-manager - controllermanager := cmapp.NewControllerManagerCommand(server.SetupSignalHandler()) + controllermanager := cmapp.NewControllerManagerCommand() doc.GenMarkdownTree(controllermanager, outDir) case "cloud-controller-manager": // generate docs for cloud-controller-manager @@ -70,7 +70,7 @@ func main() { doc.GenMarkdownTree(proxy, outDir) case "kube-scheduler": // generate docs for kube-scheduler - scheduler := schapp.NewSchedulerCommand(server.SetupSignalHandler()) + scheduler := schapp.NewSchedulerCommand() doc.GenMarkdownTree(scheduler, outDir) case "kubelet": // generate docs for kubelet diff --git a/vendor/k8s.io/kubernetes/cmd/genman/gen_kube_man.go b/vendor/k8s.io/kubernetes/cmd/genman/gen_kube_man.go index dc14bc67d..62ceaab52 100644 --- a/vendor/k8s.io/kubernetes/cmd/genman/gen_kube_man.go +++ b/vendor/k8s.io/kubernetes/cmd/genman/gen_kube_man.go @@ -70,7 +70,7 @@ func main() { } case "kube-controller-manager": // generate manpage for kube-controller-manager - controllermanager := cmapp.NewControllerManagerCommand(server.SetupSignalHandler()) + controllermanager := cmapp.NewControllerManagerCommand() genMarkdown(controllermanager, "", outDir) for _, c := range controllermanager.Commands() { genMarkdown(c, "kube-controller-manager", outDir) @@ -91,7 +91,7 @@ func main() { } case "kube-scheduler": // generate manpage for kube-scheduler - scheduler := schapp.NewSchedulerCommand(server.SetupSignalHandler()) + scheduler := schapp.NewSchedulerCommand() genMarkdown(scheduler, "", outDir) for _, c := range scheduler.Commands() { genMarkdown(c, "kube-scheduler", outDir) diff --git a/vendor/k8s.io/kubernetes/cmd/hyperkube/main.go b/vendor/k8s.io/kubernetes/cmd/hyperkube/main.go index b0fc661d6..0c54a7099 100644 --- a/vendor/k8s.io/kubernetes/cmd/hyperkube/main.go +++ b/vendor/k8s.io/kubernetes/cmd/hyperkube/main.go @@ -94,7 +94,7 @@ func NewHyperKubeCommand(stopCh <-chan struct{}) (*cobra.Command, []func() *cobr return ret } controller := func() *cobra.Command { - ret := kubecontrollermanager.NewControllerManagerCommand(stopCh) + ret := kubecontrollermanager.NewControllerManagerCommand() // add back some unfortunate aliases that should be removed ret.Aliases = []string{"controller-manager"} return ret @@ -106,7 +106,7 @@ func NewHyperKubeCommand(stopCh <-chan struct{}) (*cobra.Command, []func() *cobr return ret } scheduler := func() *cobra.Command { - ret := kubescheduler.NewSchedulerCommand(stopCh) + ret := kubescheduler.NewSchedulerCommand() // add back some unfortunate aliases that should be removed ret.Aliases = []string{"scheduler"} return ret diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go index ec9b1f576..2cedb55cd 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/aggregator.go @@ -21,6 +21,7 @@ package app import ( "fmt" + "io/ioutil" "net/http" "strings" "sync" @@ -41,7 +42,7 @@ import ( kubeexternalinformers "k8s.io/client-go/informers" "k8s.io/client-go/tools/cache" "k8s.io/kube-aggregator/pkg/apis/apiregistration" - v1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1" aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" @@ -90,14 +91,26 @@ func createAggregatorConfig( return nil, err } + var certBytes, keyBytes []byte + if len(commandOptions.ProxyClientCertFile) > 0 && len(commandOptions.ProxyClientKeyFile) > 0 { + certBytes, err = ioutil.ReadFile(commandOptions.ProxyClientCertFile) + if err != nil { + return nil, err + } + keyBytes, err = ioutil.ReadFile(commandOptions.ProxyClientKeyFile) + if err != nil { + return nil, err + } + } + aggregatorConfig := &aggregatorapiserver.Config{ GenericConfig: &genericapiserver.RecommendedConfig{ Config: genericConfig, SharedInformerFactory: externalInformers, }, ExtraConfig: aggregatorapiserver.ExtraConfig{ - ProxyClientCert: commandOptions.ProxyClientCertFile, - ProxyClientKey: commandOptions.ProxyClientKeyFile, + ProxyClientCert: certBytes, + ProxyClientKey: keyBytes, ServiceResolver: serviceResolver, ProxyTransport: proxyTransport, }, diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/options.go b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/options.go index 0183ce61e..1ba2092f0 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/options.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/options/options.go @@ -71,8 +71,6 @@ type ServerRunOptions struct { ServiceAccountSigningKeyFile string ServiceAccountIssuer serviceaccount.TokenGenerator ServiceAccountTokenMaxExpiration time.Duration - - OpenShiftConfig string } // NewServerRunOptions creates a new ServerRunOptions object with default parameters @@ -230,9 +228,5 @@ func (s *ServerRunOptions) Flags() (fss cliflag.NamedFlagSets) { fs.StringVar(&s.ServiceAccountSigningKeyFile, "service-account-signing-key-file", s.ServiceAccountSigningKeyFile, ""+ "Path to the file that contains the current private key of the service account token issuer. The issuer will sign issued ID tokens with this private key. (Requires the 'TokenRequest' feature gate.)") - fs.StringVar(&s.OpenShiftConfig, "openshift-config", s.OpenShiftConfig, "config for openshift") - fs.MarkDeprecated("openshift-config", "to be removed") - fs.MarkHidden("openshift-config") - return fss } diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/patch_openshift.go b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/patch_openshift.go deleted file mode 100644 index c1183c3e7..000000000 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/patch_openshift.go +++ /dev/null @@ -1,33 +0,0 @@ -package app - -import ( - "k8s.io/apiserver/pkg/admission" - genericapiserver "k8s.io/apiserver/pkg/server" - clientgoinformers "k8s.io/client-go/informers" - "k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver" - "k8s.io/kubernetes/pkg/master" -) - -var OpenShiftKubeAPIServerConfigPatch openshiftkubeapiserver.KubeAPIServerConfigFunc = nil - -type KubeAPIServerServerFunc func(server *master.Master) error - -func PatchKubeAPIServerConfig(config *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) (genericapiserver.DelegationTarget, error) { - if OpenShiftKubeAPIServerConfigPatch == nil { - return genericapiserver.NewEmptyDelegate(), nil - } - - return OpenShiftKubeAPIServerConfigPatch(config, versionedInformers, pluginInitializers) -} - -var OpenShiftKubeAPIServerServerPatch KubeAPIServerServerFunc = nil - -func PatchKubeAPIServerServer(server *master.Master) error { - if OpenShiftKubeAPIServerServerPatch == nil { - return nil - } - - return OpenShiftKubeAPIServerServerPatch(server) -} - -var StartingDelegate genericapiserver.DelegationTarget = genericapiserver.NewEmptyDelegate() diff --git a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go index 52da9757f..26ba8903e 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-apiserver/app/server.go @@ -31,20 +31,11 @@ import ( "strings" "time" - "k8s.io/kubernetes/openshift-kube-apiserver/configdefault" - "k8s.io/kubernetes/openshift-kube-apiserver/enablement" - "k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver" - "github.com/go-openapi/spec" "github.com/spf13/cobra" - cloudprovider "k8s.io/cloud-provider" - cliflag "k8s.io/component-base/cli/flag" - "k8s.io/component-base/cli/globalflag" - "k8s.io/klog" - corev1 "k8s.io/api/core/v1" extensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilerrors "k8s.io/apimachinery/pkg/util/errors" utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apimachinery/pkg/util/sets" @@ -53,7 +44,6 @@ import ( "k8s.io/apiserver/pkg/authentication/authenticator" "k8s.io/apiserver/pkg/authorization/authorizer" openapinamer "k8s.io/apiserver/pkg/endpoints/openapi" - "k8s.io/apiserver/pkg/endpoints/request" genericapiserver "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/server/filters" serveroptions "k8s.io/apiserver/pkg/server/options" @@ -64,12 +54,14 @@ import ( clientgoinformers "k8s.io/client-go/informers" clientgoclientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/util/keyutil" + cloudprovider "k8s.io/cloud-provider" + cliflag "k8s.io/component-base/cli/flag" + "k8s.io/component-base/cli/globalflag" + "k8s.io/klog" aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" "k8s.io/kubernetes/cmd/kube-apiserver/app/options" "k8s.io/kubernetes/pkg/api/legacyscheme" - "k8s.io/kubernetes/pkg/apis/core" - v1 "k8s.io/kubernetes/pkg/apis/core/v1" "k8s.io/kubernetes/pkg/capabilities" serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount" generatedopenapi "k8s.io/kubernetes/pkg/generated/openapi" @@ -83,7 +75,6 @@ import ( "k8s.io/kubernetes/pkg/master/reconcilers" "k8s.io/kubernetes/pkg/master/tunneler" "k8s.io/kubernetes/pkg/registry/cachesize" - eventstorage "k8s.io/kubernetes/pkg/registry/core/event/storage" rbacrest "k8s.io/kubernetes/pkg/registry/rbac/rest" "k8s.io/kubernetes/pkg/serviceaccount" utilflag "k8s.io/kubernetes/pkg/util/flag" @@ -110,31 +101,6 @@ cluster's shared state through which all other components interact.`, verflag.PrintAndExitIfRequested() utilflag.PrintFlags(cmd.Flags()) - if len(s.OpenShiftConfig) > 0 { - enablement.ForceOpenShift() - openshiftConfig, err := enablement.GetOpenshiftConfig(s.OpenShiftConfig) - if err != nil { - klog.Fatal(err) - } - - // this forces a patch to be called - // TODO we're going to try to remove bits of the patching. - configPatchFn, serverPatchContext := openshiftkubeapiserver.NewOpenShiftKubeAPIServerConfigPatch(genericapiserver.NewEmptyDelegate(), openshiftConfig) - OpenShiftKubeAPIServerConfigPatch = configPatchFn - OpenShiftKubeAPIServerServerPatch = serverPatchContext.PatchServer - - args, err := openshiftkubeapiserver.ConfigToFlags(openshiftConfig) - if err != nil { - return err - } - // hopefully this resets the flags? - if err := cmd.ParseFlags(args); err != nil { - return err - } - - enablement.ForceGlobalInitializationForOpenShift(s) - } - // set default options completedOptions, err := Complete(s) if err != nil { @@ -205,7 +171,7 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan if err != nil { return nil, err } - apiExtensionsServer, err := createAPIExtensionsServer(apiExtensionsConfig, StartingDelegate) + apiExtensionsServer, err := createAPIExtensionsServer(apiExtensionsConfig, genericapiserver.NewEmptyDelegate()) if err != nil { return nil, err } @@ -215,10 +181,6 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan return nil, err } - if err := PatchKubeAPIServerServer(kubeAPIServer); err != nil { - return nil, err - } - // otherwise go down the normal path of standing the aggregator up in front of the API server // this wires up openapi kubeAPIServer.GenericAPIServer.PrepareRun() @@ -357,9 +319,6 @@ func CreateKubeAPIServerConfig( return } - eventStorage := eventstorage.NewREST(genericConfig.RESTOptionsGetter, uint64(s.EventTTL.Seconds())) - genericConfig.EventSink = eventRegistrySink{eventStorage} - config = &master.Config{ GenericConfig: genericConfig, ExtraConfig: master.ExtraConfig{ @@ -410,7 +369,6 @@ func CreateKubeAPIServerConfig( func buildGenericConfig( s *options.ServerRunOptions, proxyTransport *http.Transport, - ) ( genericConfig *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, @@ -483,7 +441,7 @@ func buildGenericConfig( } versionedInformers = clientgoinformers.NewSharedInformerFactory(clientgoExternalClient, 10*time.Minute) - genericConfig.Authentication.Authenticator, genericConfig.OpenAPIConfig.SecurityDefinitions, genericConfig.Authentication.DynamicReloadFns, err = BuildAuthenticator(s, clientgoExternalClient, versionedInformers) + genericConfig.Authentication.Authenticator, genericConfig.OpenAPIConfig.SecurityDefinitions, err = BuildAuthenticator(s, clientgoExternalClient, versionedInformers) if err != nil { lastErr = fmt.Errorf("invalid authentication config: %v", err) return @@ -527,15 +485,6 @@ func buildGenericConfig( return } - StartingDelegate, err = PatchKubeAPIServerConfig(genericConfig, versionedInformers, &pluginInitializers) - if err != nil { - lastErr = fmt.Errorf("failed to patch: %v", err) - return - } - - if enablement.IsOpenShift() { - configdefault.SetAdmissionDefaults(s, versionedInformers, clientgoExternalClient) - } err = s.Admission.ApplyTo( genericConfig, versionedInformers, @@ -549,7 +498,7 @@ func buildGenericConfig( } // BuildAuthenticator constructs the authenticator -func BuildAuthenticator(s *options.ServerRunOptions, extclient clientgoclientset.Interface, versionedInformer clientgoinformers.SharedInformerFactory) (authenticator.Request, *spec.SecurityDefinitions, map[string]genericapiserver.PostStartHookFunc, error) { +func BuildAuthenticator(s *options.ServerRunOptions, extclient clientgoclientset.Interface, versionedInformer clientgoinformers.SharedInformerFactory) (authenticator.Request, *spec.SecurityDefinitions, error) { authenticatorConfig := s.Authentication.ToAuthenticationConfig() if s.Authentication.ServiceAccounts.Lookup { authenticatorConfig.ServiceAccountTokenGetter = serviceaccountcontroller.NewGetterFromClient( @@ -560,7 +509,7 @@ func BuildAuthenticator(s *options.ServerRunOptions, extclient clientgoclientset ) } authenticatorConfig.BootstrapTokenAuthenticator = bootstrap.NewTokenAuthenticator( - versionedInformer.Core().V1().Secrets().Lister().Secrets(metav1.NamespaceSystem), + versionedInformer.Core().V1().Secrets().Lister().Secrets(v1.NamespaceSystem), ) return authenticatorConfig.New() @@ -705,35 +654,3 @@ func readCAorNil(file string) ([]byte, error) { } return ioutil.ReadFile(file) } - -// eventRegistrySink wraps an event registry in order to be used as direct event sync, without going through the API. -type eventRegistrySink struct { - *eventstorage.REST -} - -var _ genericapiserver.EventSink = eventRegistrySink{} - -func (s eventRegistrySink) Create(v1event *corev1.Event) (*corev1.Event, error) { - ctx := request.WithNamespace(request.NewContext(), v1event.Namespace) - - var event core.Event - if err := v1.Convert_v1_Event_To_core_Event(v1event, &event, nil); err != nil { - return nil, err - } - - obj, err := s.REST.Create(ctx, &event, nil, &metav1.CreateOptions{}) - if err != nil { - return nil, err - } - ret, ok := obj.(*core.Event) - if !ok { - return nil, fmt.Errorf("expected corev1.Event, got %T", obj) - } - - var v1ret corev1.Event - if err := v1.Convert_core_Event_To_v1_Event(ret, &v1ret, nil); err != nil { - return nil, err - } - - return &v1ret, nil -} diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/apps.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/apps.go index 47556567d..d59c34a05 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/apps.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/apps.go @@ -37,10 +37,7 @@ func startDaemonSetController(ctx ControllerContext) (http.Handler, bool, error) if !ctx.AvailableResources[schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "daemonsets"}] { return nil, false, nil } - dsc, err := daemon.NewNodeSelectorAwareDaemonSetsController( - ctx.OpenShiftContext.OpenShiftDefaultProjectNodeSelector, - ctx.OpenShiftContext.KubeDefaultProjectNodeSelector, - ctx.InformerFactory.Core().V1().Namespaces(), + dsc, err := daemon.NewDaemonSetsController( ctx.InformerFactory.Apps().V1().DaemonSets(), ctx.InformerFactory.Apps().V1().ControllerRevisions(), ctx.InformerFactory.Core().V1().Pods(), diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/config/config.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/config/config.go index 266cbefd6..d3125b4a5 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/config/config.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/config/config.go @@ -26,8 +26,6 @@ import ( // Config is the main context object for the controller manager. type Config struct { - OpenShiftContext OpenShiftContext - ComponentConfig kubectrlmgrconfig.KubeControllerManagerConfiguration SecureServing *apiserver.SecureServingInfo diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/config/patch.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/config/patch.go deleted file mode 100644 index a7112d003..000000000 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/config/patch.go +++ /dev/null @@ -1,9 +0,0 @@ -package config - -// OpenShiftContext is additional context that we need to launch the kube-controller-manager for openshift. -// Basically, this holds our additional config information. -type OpenShiftContext struct { - OpenShiftConfig string - OpenShiftDefaultProjectNodeSelector string - KubeDefaultProjectNodeSelector string -} diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go index 6e189227f..b6a0c9e56 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/controllermanager.go @@ -60,6 +60,7 @@ import ( serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount" "k8s.io/kubernetes/pkg/serviceaccount" "k8s.io/kubernetes/pkg/util/configz" + utilflag "k8s.io/kubernetes/pkg/util/flag" "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/pkg/version/verflag" ) @@ -79,7 +80,7 @@ const ( ) // NewControllerManagerCommand creates a *cobra.Command object with default parameters -func NewControllerManagerCommand(stopCh <-chan struct{}) *cobra.Command { +func NewControllerManagerCommand() *cobra.Command { s, err := options.NewKubeControllerManagerOptions() if err != nil { klog.Fatalf("unable to initialize command options: %v", err) @@ -97,11 +98,7 @@ Kubernetes today are the replication controller, endpoints controller, namespace controller, and serviceaccounts controller.`, Run: func(cmd *cobra.Command, args []string) { verflag.PrintAndExitIfRequested() - - if err := ShimFlagsForOpenShift(s); err != nil { - fmt.Fprintf(os.Stderr, "%v\n", err) - os.Exit(1) - } + utilflag.PrintFlags(cmd.Flags()) c, err := s.Config(KnownControllers(), ControllersDisabledByDefault.List()) if err != nil { @@ -109,12 +106,7 @@ controller, and serviceaccounts controller.`, os.Exit(1) } - if err := ShimForOpenShift(s, c); err != nil { - fmt.Fprintf(os.Stderr, "%v\n", err) - os.Exit(1) - } - - if err := Run(c.Complete(), stopCh); err != nil { + if err := Run(c.Complete(), wait.NeverStop); err != nil { fmt.Fprintf(os.Stderr, "%v\n", err) os.Exit(1) } @@ -159,16 +151,6 @@ func ResyncPeriod(c *config.CompletedConfig) func() time.Duration { // Run runs the KubeControllerManagerOptions. This should never exit. func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { - ctx, cancel := context.WithCancel(context.TODO()) - defer cancel() - go func() { - select { - case <-stopCh: - cancel() - case <-ctx.Done(): - } - }() - // To help debugging, immediately log version klog.Infof("Version: %+v", version.Get()) @@ -192,20 +174,16 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { if c.SecureServing != nil { unsecuredMux = genericcontrollermanager.NewBaseHandler(&c.ComponentConfig.Generic.Debugging, checks...) handler := genericcontrollermanager.BuildHandlerChain(unsecuredMux, &c.Authorization, &c.Authentication) - if serverStoppedCh, err := c.SecureServing.Serve(handler, 0, ctx.Done()); err != nil { + // TODO: handle stoppedCh returned by c.SecureServing.Serve + if _, err := c.SecureServing.Serve(handler, 0, stopCh); err != nil { return err - } else { - defer func() { - cancel() - <-serverStoppedCh - }() } } if c.InsecureServing != nil { unsecuredMux = genericcontrollermanager.NewBaseHandler(&c.ComponentConfig.Generic.Debugging, checks...) insecureSuperuserAuthn := server.AuthenticationInfo{Authenticator: &server.InsecureSuperuser{}} handler := genericcontrollermanager.BuildHandlerChain(unsecuredMux, nil, &insecureSuperuserAuthn) - if err := c.InsecureServing.Serve(handler, 0, ctx.Done()); err != nil { + if err := c.InsecureServing.Serve(handler, 0, stopCh); err != nil { return err } } @@ -236,10 +214,6 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { } saTokenControllerInitFunc := serviceAccountTokenControllerStarter{rootClientBuilder: rootClientBuilder}.startServiceAccountTokenController - if err := createPVRecyclerSA(c.OpenShiftContext.OpenShiftConfig, rootClientBuilder); err != nil { - klog.Fatalf("error creating recycler serviceaccount: %v", err) - } - if err := StartControllers(controllerContext, saTokenControllerInitFunc, NewControllerInitializers(controllerContext.LoopMode), unsecuredMux); err != nil { klog.Fatalf("error starting controllers: %v", err) } @@ -275,7 +249,7 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { klog.Fatalf("error creating lock: %v", err) } - leaderelection.RunOrDie(ctx, leaderelection.LeaderElectionConfig{ + leaderelection.RunOrDie(context.TODO(), leaderelection.LeaderElectionConfig{ Lock: rl, LeaseDuration: c.ComponentConfig.Generic.LeaderElection.LeaseDuration.Duration, RenewDeadline: c.ComponentConfig.Generic.LeaderElection.RenewDeadline.Duration, @@ -283,20 +257,16 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error { Callbacks: leaderelection.LeaderCallbacks{ OnStartedLeading: run, OnStoppedLeading: func() { - cancel() - utilruntime.HandleError(fmt.Errorf("leaderelection lost")) + klog.Fatalf("leaderelection lost") }, }, WatchDog: electionChecker, Name: "kube-controller-manager", }) - - return nil + panic("unreachable") } type ControllerContext struct { - OpenShiftContext config.OpenShiftContext - // ClientBuilder will provide a client for this controller to use ClientBuilder controller.ControllerClientBuilder @@ -446,12 +416,7 @@ func GetAvailableResources(clientBuilder controller.ControllerClientBuilder) (ma // the shared-informers client and token controller. func CreateControllerContext(s *config.CompletedConfig, rootClientBuilder, clientBuilder controller.ControllerClientBuilder, stop <-chan struct{}) (ControllerContext, error) { versionedClient := rootClientBuilder.ClientOrDie("shared-informers") - var sharedInformers informers.SharedInformerFactory - if InformerFactoryOverride == nil { - sharedInformers = informers.NewSharedInformerFactory(versionedClient, ResyncPeriod(s)()) - } else { - sharedInformers = InformerFactoryOverride - } + sharedInformers := informers.NewSharedInformerFactory(versionedClient, ResyncPeriod(s)()) // If apiserver is not running we should wait for some time and fail only then. This is particularly // important when we start apiserver and controller manager at the same time. @@ -479,7 +444,6 @@ func CreateControllerContext(s *config.CompletedConfig, rootClientBuilder, clien } ctx := ControllerContext{ - OpenShiftContext: s.OpenShiftContext, ClientBuilder: clientBuilder, InformerFactory: sharedInformers, ComponentConfig: s.ComponentConfig, @@ -575,10 +539,10 @@ func (c serviceAccountTokenControllerStarter) startServiceAccountTokenController ctx.InformerFactory.Core().V1().ServiceAccounts(), ctx.InformerFactory.Core().V1().Secrets(), c.rootClientBuilder.ClientOrDie("tokens-controller"), - applyOpenShiftServiceServingCertCA(serviceaccountcontroller.TokensControllerOptions{ + serviceaccountcontroller.TokensControllerOptions{ TokenGenerator: tokenGenerator, RootCA: rootCA, - }), + }, ) if err != nil { return nil, true, fmt.Errorf("error creating Tokens controller: %v", err) diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/options.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/options.go index 44c41eae4..211e03262 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/options.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/options/options.go @@ -84,9 +84,8 @@ type KubeControllerManagerOptions struct { Authentication *apiserveroptions.DelegatingAuthenticationOptions Authorization *apiserveroptions.DelegatingAuthorizationOptions - Master string - Kubeconfig string - OpenShiftContext kubecontrollerconfig.OpenShiftContext + Master string + Kubeconfig string } // NewKubeControllerManagerOptions creates a new KubeControllerManagerOptions with a default config. @@ -236,11 +235,6 @@ func (s *KubeControllerManagerOptions) Flags(allControllers []string, disabledBy fs := fss.FlagSet("misc") fs.StringVar(&s.Master, "master", s.Master, "The address of the Kubernetes API server (overrides any value in kubeconfig).") fs.StringVar(&s.Kubeconfig, "kubeconfig", s.Kubeconfig, "Path to kubeconfig file with authorization and master location information.") - var dummy string - fs.MarkDeprecated("insecure-experimental-approve-all-kubelet-csrs-for-group", "This flag does nothing.") - fs.StringVar(&dummy, "insecure-experimental-approve-all-kubelet-csrs-for-group", "", "This flag does nothing.") - fs.StringVar(&s.OpenShiftContext.OpenShiftConfig, "openshift-config", s.OpenShiftContext.OpenShiftConfig, "indicates that this process should be compatible with openshift start master") - fs.MarkHidden("openshift-config") utilfeature.DefaultMutableFeatureGate.AddFlag(fss.FlagSet("generic")) return fss @@ -334,8 +328,6 @@ func (s *KubeControllerManagerOptions) ApplyTo(c *kubecontrollerconfig.Config) e c.ComponentConfig.Generic.Port = int32(s.InsecureServing.BindPort) c.ComponentConfig.Generic.Address = s.InsecureServing.BindAddress.String() - c.OpenShiftContext = s.OpenShiftContext - return nil } diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch.go deleted file mode 100644 index 69051b115..000000000 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch.go +++ /dev/null @@ -1,70 +0,0 @@ -package app - -import ( - "path" - - "k8s.io/client-go/informers" - "k8s.io/klog" - "k8s.io/kubernetes/cmd/kube-controller-manager/app/config" - "k8s.io/kubernetes/cmd/kube-controller-manager/app/options" - utilflag "k8s.io/kubernetes/pkg/util/flag" -) - -var InformerFactoryOverride informers.SharedInformerFactory - -func ShimForOpenShift(controllerManagerOptions *options.KubeControllerManagerOptions, controllerManager *config.Config) error { - if len(controllerManager.OpenShiftContext.OpenShiftConfig) == 0 { - return nil - } - - // TODO this gets removed when no longer take flags and no longer build a recycler template - openshiftConfig, err := getOpenShiftConfig(controllerManager.OpenShiftContext.OpenShiftConfig) - if err != nil { - return err - } - - // TODO this should be replaced by using a flex volume to inject service serving cert CAs into pods instead of adding it to the sa token - if err := applyOpenShiftServiceServingCertCAFunc(path.Dir(controllerManager.OpenShiftContext.OpenShiftConfig), openshiftConfig); err != nil { - return err - } - - // skip GC on some openshift resources - // TODO this should be replaced by discovery information in some way - if err := applyOpenShiftGCConfig(controllerManager); err != nil { - return err - } - - // Overwrite the informers, because we have our custom generic informers for quota. - // TODO update quota to create its own informer like garbage collection - if informers, err := newInformerFactory(controllerManager.Kubeconfig); err != nil { - return err - } else { - InformerFactoryOverride = informers - } - - return nil -} - -func ShimFlagsForOpenShift(controllerManagerOptions *options.KubeControllerManagerOptions) error { - if len(controllerManagerOptions.OpenShiftContext.OpenShiftConfig) == 0 { - return nil - } - - // TODO this gets removed when no longer take flags and no longer build a recycler template - openshiftConfig, err := getOpenShiftConfig(controllerManagerOptions.OpenShiftContext.OpenShiftConfig) - if err != nil { - return err - } - // apply the config based controller manager flags. They will override. - // TODO this should be replaced by the installer setting up the flags for us - if err := applyOpenShiftConfigFlags(controllerManagerOptions, openshiftConfig); err != nil { - return err - } - - for name, fs := range controllerManagerOptions.Flags(KnownControllers(), ControllersDisabledByDefault.List()).FlagSets { - klog.V(1).Infof("FLAGSET: %s", name) - utilflag.PrintFlags(fs) - } - - return nil -} diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_flags.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_flags.go deleted file mode 100644 index 5f0e20e54..000000000 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_flags.go +++ /dev/null @@ -1,123 +0,0 @@ -package app - -import ( - "fmt" - "io/ioutil" - - kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/apimachinery/pkg/util/json" - "k8s.io/apimachinery/pkg/util/validation/field" - kyaml "k8s.io/apimachinery/pkg/util/yaml" - "k8s.io/component-base/cli/flag" - "k8s.io/kubernetes/cmd/kube-controller-manager/app/options" -) - -func getOpenShiftConfig(configFile string) (map[string]interface{}, error) { - configBytes, err := ioutil.ReadFile(configFile) - if err != nil { - return nil, err - } - jsonBytes, err := kyaml.ToJSON(configBytes) - if err != nil { - return nil, err - } - config := map[string]interface{}{} - if err := json.Unmarshal(jsonBytes, &config); err != nil { - return nil, err - } - - return config, nil -} - -func applyOpenShiftConfigFlags(controllerManagerOptions *options.KubeControllerManagerOptions, openshiftConfig map[string]interface{}) error { - if err := applyOpenShiftConfigControllerArgs(controllerManagerOptions, openshiftConfig); err != nil { - return err - } - if err := applyOpenShiftConfigDefaultProjectSelector(controllerManagerOptions, openshiftConfig); err != nil { - return err - } - if err := applyOpenShiftConfigKubeDefaultProjectSelector(controllerManagerOptions, openshiftConfig); err != nil { - return err - } - return nil -} - -func applyOpenShiftConfigDefaultProjectSelector(controllerManagerOptions *options.KubeControllerManagerOptions, openshiftConfig map[string]interface{}) error { - projectConfig, ok := openshiftConfig["projectConfig"] - if !ok { - return nil - } - - castProjectConfig := projectConfig.(map[string]interface{}) - defaultNodeSelector, ok := castProjectConfig["defaultNodeSelector"] - if !ok { - return nil - } - controllerManagerOptions.OpenShiftContext.OpenShiftDefaultProjectNodeSelector = defaultNodeSelector.(string) - - return nil -} - -// this is an optimization. It can be filled in later. Looks like there are several special cases for this plugin upstream -// TODO find this -func applyOpenShiftConfigKubeDefaultProjectSelector(controllerManagerOptions *options.KubeControllerManagerOptions, openshiftConfig map[string]interface{}) error { - controllerManagerOptions.OpenShiftContext.KubeDefaultProjectNodeSelector = "" - return nil -} - -func applyOpenShiftConfigControllerArgs(controllerManagerOptions *options.KubeControllerManagerOptions, openshiftConfig map[string]interface{}) error { - var controllerArgs interface{} - kubeMasterConfig, ok := openshiftConfig["kubernetesMasterConfig"] - if !ok { - controllerArgs, ok = openshiftConfig["extendedArguments"] - if !ok || controllerArgs == nil { - return nil - } - } else { - castKubeMasterConfig := kubeMasterConfig.(map[string]interface{}) - controllerArgs, ok = castKubeMasterConfig["controllerArguments"] - if !ok || controllerArgs == nil { - controllerArgs, ok = openshiftConfig["extendedArguments"] - if !ok || controllerArgs == nil { - return nil - } - } - } - - args := map[string][]string{} - for key, value := range controllerArgs.(map[string]interface{}) { - for _, arrayValue := range value.([]interface{}) { - args[key] = append(args[key], arrayValue.(string)) - } - } - if err := applyFlags(args, controllerManagerOptions.Flags(KnownControllers(), ControllersDisabledByDefault.List())); len(err) > 0 { - return kerrors.NewAggregate(err) - } - return nil -} - -// applyFlags stores the provided arguments onto a flag set, reporting any errors -// encountered during the process. -func applyFlags(args map[string][]string, flags flag.NamedFlagSets) []error { - var errs []error - for key, value := range args { - found := false - // since flags are now groupped into sets we need to check each and every - // single of them and complain only if we don't find the flag at all - for _, fs := range flags.FlagSets { - if flag := fs.Lookup(key); flag != nil { - for _, s := range value { - if err := flag.Value.Set(s); err != nil { - errs = append(errs, field.Invalid(field.NewPath(key), s, fmt.Sprintf("could not be set: %v", err))) - break - } - } - found = true - } - } - if !found { - errs = append(errs, field.Invalid(field.NewPath("flag"), key, "is not a valid flag")) - } - } - return errs -} diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_gc.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_gc.go deleted file mode 100644 index 4e33d98de..000000000 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_gc.go +++ /dev/null @@ -1,45 +0,0 @@ -package app - -import ( - "k8s.io/kubernetes/cmd/kube-controller-manager/app/config" - kubectrlmgrconfig "k8s.io/kubernetes/pkg/controller/apis/config" -) - -func applyOpenShiftGCConfig(controllerManager *config.Config) error { - // TODO make this configurable or discoverable. This is going to prevent us from running the stock GC controller - // IF YOU ADD ANYTHING TO THIS LIST, MAKE SURE THAT YOU UPDATE THEIR STRATEGIES TO PREVENT GC FINALIZERS - controllerManager.ComponentConfig.GarbageCollectorController.GCIgnoredResources = append(controllerManager.ComponentConfig.GarbageCollectorController.GCIgnoredResources, - // explicitly disabled from GC for now - not enough value to track them - kubectrlmgrconfig.GroupResource{Group: "authorization.openshift.io", Resource: "rolebindingrestrictions"}, - kubectrlmgrconfig.GroupResource{Group: "network.openshift.io", Resource: "clusternetworks"}, - kubectrlmgrconfig.GroupResource{Group: "network.openshift.io", Resource: "egressnetworkpolicies"}, - kubectrlmgrconfig.GroupResource{Group: "network.openshift.io", Resource: "hostsubnets"}, - kubectrlmgrconfig.GroupResource{Group: "network.openshift.io", Resource: "netnamespaces"}, - kubectrlmgrconfig.GroupResource{Group: "oauth.openshift.io", Resource: "oauthclientauthorizations"}, - kubectrlmgrconfig.GroupResource{Group: "oauth.openshift.io", Resource: "oauthclients"}, - kubectrlmgrconfig.GroupResource{Group: "quota.openshift.io", Resource: "clusterresourcequotas"}, - kubectrlmgrconfig.GroupResource{Group: "user.openshift.io", Resource: "groups"}, - kubectrlmgrconfig.GroupResource{Group: "user.openshift.io", Resource: "identities"}, - kubectrlmgrconfig.GroupResource{Group: "user.openshift.io", Resource: "users"}, - kubectrlmgrconfig.GroupResource{Group: "image.openshift.io", Resource: "images"}, - - // virtual resource - kubectrlmgrconfig.GroupResource{Group: "project.openshift.io", Resource: "projects"}, - // virtual and unwatchable resource, surfaced via rbac.authorization.k8s.io objects - kubectrlmgrconfig.GroupResource{Group: "authorization.openshift.io", Resource: "clusterroles"}, - kubectrlmgrconfig.GroupResource{Group: "authorization.openshift.io", Resource: "clusterrolebindings"}, - kubectrlmgrconfig.GroupResource{Group: "authorization.openshift.io", Resource: "roles"}, - kubectrlmgrconfig.GroupResource{Group: "authorization.openshift.io", Resource: "rolebindings"}, - // these resources contain security information in their names, and we don't need to track them - kubectrlmgrconfig.GroupResource{Group: "oauth.openshift.io", Resource: "oauthaccesstokens"}, - kubectrlmgrconfig.GroupResource{Group: "oauth.openshift.io", Resource: "oauthauthorizetokens"}, - // exposed already as extensions v1beta1 by other controllers - kubectrlmgrconfig.GroupResource{Group: "apps", Resource: "deployments"}, - // exposed as autoscaling v1 - kubectrlmgrconfig.GroupResource{Group: "extensions", Resource: "horizontalpodautoscalers"}, - // exposed as security.openshift.io v1 - kubectrlmgrconfig.GroupResource{Group: "", Resource: "securitycontextconstraints"}, - ) - - return nil -} diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_informers_openshift.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_informers_openshift.go deleted file mode 100644 index 2edbc0a52..000000000 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_informers_openshift.go +++ /dev/null @@ -1,285 +0,0 @@ -package app - -import ( - "time" - - "k8s.io/klog" - - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/client-go/informers" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/rest" - - appclient "github.com/openshift/client-go/apps/clientset/versioned" - appinformer "github.com/openshift/client-go/apps/informers/externalversions" - authorizationclient "github.com/openshift/client-go/authorization/clientset/versioned" - authorizationinformer "github.com/openshift/client-go/authorization/informers/externalversions" - buildclient "github.com/openshift/client-go/build/clientset/versioned" - buildinformer "github.com/openshift/client-go/build/informers/externalversions" - imageclient "github.com/openshift/client-go/image/clientset/versioned" - imageinformer "github.com/openshift/client-go/image/informers/externalversions" - networkclient "github.com/openshift/client-go/network/clientset/versioned" - networkinformer "github.com/openshift/client-go/network/informers/externalversions" - oauthclient "github.com/openshift/client-go/oauth/clientset/versioned" - oauthinformer "github.com/openshift/client-go/oauth/informers/externalversions" - quotaclient "github.com/openshift/client-go/quota/clientset/versioned" - quotainformer "github.com/openshift/client-go/quota/informers/externalversions" - routeclient "github.com/openshift/client-go/route/clientset/versioned" - routeinformer "github.com/openshift/client-go/route/informers/externalversions" - securityclient "github.com/openshift/client-go/security/clientset/versioned" - securityinformer "github.com/openshift/client-go/security/informers/externalversions" - templateclient "github.com/openshift/client-go/template/clientset/versioned" - templateinformer "github.com/openshift/client-go/template/informers/externalversions" - userclient "github.com/openshift/client-go/user/clientset/versioned" - userinformer "github.com/openshift/client-go/user/informers/externalversions" -) - -type externalKubeInformersWithExtraGenerics struct { - informers.SharedInformerFactory - genericResourceInformer GenericResourceInformer -} - -func (i externalKubeInformersWithExtraGenerics) ForResource(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.genericResourceInformer.ForResource(resource) -} - -func (i externalKubeInformersWithExtraGenerics) Start(stopCh <-chan struct{}) { - i.SharedInformerFactory.Start(stopCh) - i.genericResourceInformer.Start(stopCh) -} - -type GenericResourceInformer interface { - ForResource(resource schema.GroupVersionResource) (informers.GenericInformer, error) - Start(stopCh <-chan struct{}) -} - -// genericResourceInformerFunc will handle a cast to a matching type -type genericResourceInformerFunc func(resource schema.GroupVersionResource) (informers.GenericInformer, error) - -func (fn genericResourceInformerFunc) ForResource(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return fn(resource) -} - -// this is a temporary condition until we rewrite enough of generation to auto-conform to the required interface and no longer need the internal version shim -func (fn genericResourceInformerFunc) Start(stopCh <-chan struct{}) {} - -type genericInformers struct { - // this is a temporary condition until we rewrite enough of generation to auto-conform to the required interface and no longer need the internal version shim - startFn func(stopCh <-chan struct{}) - generic []GenericResourceInformer -} - -func newGenericInformers(startFn func(stopCh <-chan struct{}), informers ...GenericResourceInformer) genericInformers { - return genericInformers{ - startFn: startFn, - generic: informers, - } -} - -func (i genericInformers) ForResource(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - var firstErr error - for _, generic := range i.generic { - informer, err := generic.ForResource(resource) - if err == nil { - return informer, nil - } - if firstErr == nil { - firstErr = err - } - } - klog.V(4).Infof("Couldn't find informer for %v", resource) - return nil, firstErr -} - -func (i genericInformers) Start(stopCh <-chan struct{}) { - i.startFn(stopCh) - for _, generic := range i.generic { - generic.Start(stopCh) - } -} - -// informers is a convenient way for us to keep track of the informers, but -// is intentionally private. We don't want to leak it out further than this package. -// Everything else should say what it wants. -type combinedInformers struct { - externalKubeInformers informers.SharedInformerFactory - appInformers appinformer.SharedInformerFactory - authorizationInformers authorizationinformer.SharedInformerFactory - buildInformers buildinformer.SharedInformerFactory - imageInformers imageinformer.SharedInformerFactory - networkInformers networkinformer.SharedInformerFactory - oauthInformers oauthinformer.SharedInformerFactory - quotaInformers quotainformer.SharedInformerFactory - routeInformers routeinformer.SharedInformerFactory - securityInformers securityinformer.SharedInformerFactory - templateInformers templateinformer.SharedInformerFactory - userInformers userinformer.SharedInformerFactory -} - -func newInformerFactory(clientConfig *rest.Config) (informers.SharedInformerFactory, error) { - kubeClient, err := kubernetes.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - appClient, err := appclient.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - authorizationClient, err := authorizationclient.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - buildClient, err := buildclient.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - imageClient, err := imageclient.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - networkClient, err := networkclient.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - oauthClient, err := oauthclient.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - quotaClient, err := quotaclient.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - routerClient, err := routeclient.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - securityClient, err := securityclient.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - templateClient, err := templateclient.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - userClient, err := userclient.NewForConfig(clientConfig) - if err != nil { - return nil, err - } - - // TODO find a single place to create and start informers. During the 1.7 rebase this will come more naturally in a config object, - // before then we should try to eliminate our direct to storage access. It's making us do weird things. - const defaultInformerResyncPeriod = 10 * time.Minute - - ci := &combinedInformers{ - externalKubeInformers: informers.NewSharedInformerFactory(kubeClient, defaultInformerResyncPeriod), - appInformers: appinformer.NewSharedInformerFactory(appClient, defaultInformerResyncPeriod), - authorizationInformers: authorizationinformer.NewSharedInformerFactory(authorizationClient, defaultInformerResyncPeriod), - buildInformers: buildinformer.NewSharedInformerFactory(buildClient, defaultInformerResyncPeriod), - imageInformers: imageinformer.NewSharedInformerFactory(imageClient, defaultInformerResyncPeriod), - networkInformers: networkinformer.NewSharedInformerFactory(networkClient, defaultInformerResyncPeriod), - oauthInformers: oauthinformer.NewSharedInformerFactory(oauthClient, defaultInformerResyncPeriod), - quotaInformers: quotainformer.NewSharedInformerFactory(quotaClient, defaultInformerResyncPeriod), - routeInformers: routeinformer.NewSharedInformerFactory(routerClient, defaultInformerResyncPeriod), - securityInformers: securityinformer.NewSharedInformerFactory(securityClient, defaultInformerResyncPeriod), - templateInformers: templateinformer.NewSharedInformerFactory(templateClient, defaultInformerResyncPeriod), - userInformers: userinformer.NewSharedInformerFactory(userClient, defaultInformerResyncPeriod), - } - - return externalKubeInformersWithExtraGenerics{ - SharedInformerFactory: ci.GetExternalKubeInformers(), - genericResourceInformer: ci.ToGenericInformer(), - }, nil -} - -func (i *combinedInformers) GetExternalKubeInformers() informers.SharedInformerFactory { - return i.externalKubeInformers -} -func (i *combinedInformers) GetAppInformers() appinformer.SharedInformerFactory { - return i.appInformers -} -func (i *combinedInformers) GetAuthorizationInformers() authorizationinformer.SharedInformerFactory { - return i.authorizationInformers -} -func (i *combinedInformers) GetBuildInformers() buildinformer.SharedInformerFactory { - return i.buildInformers -} -func (i *combinedInformers) GetImageInformers() imageinformer.SharedInformerFactory { - return i.imageInformers -} -func (i *combinedInformers) GetNetworkInformers() networkinformer.SharedInformerFactory { - return i.networkInformers -} -func (i *combinedInformers) GetOauthInformers() oauthinformer.SharedInformerFactory { - return i.oauthInformers -} -func (i *combinedInformers) GetQuotaInformers() quotainformer.SharedInformerFactory { - return i.quotaInformers -} -func (i *combinedInformers) GetRouteInformers() routeinformer.SharedInformerFactory { - return i.routeInformers -} -func (i *combinedInformers) GetSecurityInformers() securityinformer.SharedInformerFactory { - return i.securityInformers -} -func (i *combinedInformers) GetTemplateInformers() templateinformer.SharedInformerFactory { - return i.templateInformers -} -func (i *combinedInformers) GetUserInformers() userinformer.SharedInformerFactory { - return i.userInformers -} - -// Start initializes all requested informers. -func (i *combinedInformers) Start(stopCh <-chan struct{}) { - i.externalKubeInformers.Start(stopCh) - i.appInformers.Start(stopCh) - i.authorizationInformers.Start(stopCh) - i.buildInformers.Start(stopCh) - i.imageInformers.Start(stopCh) - i.networkInformers.Start(stopCh) - i.oauthInformers.Start(stopCh) - i.quotaInformers.Start(stopCh) - i.routeInformers.Start(stopCh) - i.securityInformers.Start(stopCh) - i.templateInformers.Start(stopCh) - i.userInformers.Start(stopCh) -} - -func (i *combinedInformers) ToGenericInformer() GenericResourceInformer { - return newGenericInformers( - i.Start, - i.GetExternalKubeInformers(), - genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.GetAppInformers().ForResource(resource) - }), - genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.GetAuthorizationInformers().ForResource(resource) - }), - genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.GetBuildInformers().ForResource(resource) - }), - genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.GetImageInformers().ForResource(resource) - }), - genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.GetNetworkInformers().ForResource(resource) - }), - genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.GetOauthInformers().ForResource(resource) - }), - genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.GetQuotaInformers().ForResource(resource) - }), - genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.GetRouteInformers().ForResource(resource) - }), - genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.GetSecurityInformers().ForResource(resource) - }), - genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.GetTemplateInformers().ForResource(resource) - }), - genericResourceInformerFunc(func(resource schema.GroupVersionResource) (informers.GenericInformer, error) { - return i.GetUserInformers().ForResource(resource) - }), - ) -} diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_recycler.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_recycler.go deleted file mode 100644 index 7858f015e..000000000 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_recycler.go +++ /dev/null @@ -1,38 +0,0 @@ -package app - -import ( - v1 "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/controller" -) - -func createPVRecyclerSA(openshiftConfig string, clientBuilder controller.ControllerClientBuilder) error { - if len(openshiftConfig) == 0 { - return nil - } - - // the service account passed for the recyclable volume plugins needs to exist. We want to do this via the init function, but its a kube init function - // for the rebase, create that service account here - coreClient, err := clientBuilder.Client("pv-recycler-controller-creator") - if err != nil { - return err - } - - // Create the namespace if we can't verify it exists. - // Tolerate errors, since we don't know whether this component has namespace creation permissions. - if _, err := coreClient.CoreV1().Namespaces().Create(&v1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: "openshift-infra"}}); err != nil { - - } - - // Create the service account - _, err = coreClient.CoreV1().ServiceAccounts("openshift-infra").Create(&v1.ServiceAccount{ObjectMeta: metav1.ObjectMeta{Namespace: "openshift-infra", Name: "pv-recycler-controller"}}) - if apierrors.IsAlreadyExists(err) { - return nil - } - if err != nil { - return err - } - - return nil -} diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_satoken.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_satoken.go deleted file mode 100644 index 82f1bb9b3..000000000 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/app/patch_satoken.go +++ /dev/null @@ -1,87 +0,0 @@ -package app - -import ( - "fmt" - "io/ioutil" - "path/filepath" - - certutil "k8s.io/client-go/util/cert" - serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount" -) - -var applyOpenShiftServiceServingCertCA = func(in serviceaccountcontroller.TokensControllerOptions) serviceaccountcontroller.TokensControllerOptions { - return in -} - -func applyOpenShiftServiceServingCertCAFunc(openshiftConfigBase string, openshiftConfig map[string]interface{}) error { - serviceServingCertCAFilename := getServiceServingCertCAFilename(openshiftConfig) - if len(serviceServingCertCAFilename) == 0 { - return nil - } - - resolvePath(&serviceServingCertCAFilename, openshiftConfigBase) - - serviceServingCA, err := ioutil.ReadFile(serviceServingCertCAFilename) - if err != nil { - return fmt.Errorf("error reading ca file for Service Serving Certificate Signer: %s: %v", serviceServingCertCAFilename, err) - } - if _, err := certutil.ParseCertsPEM(serviceServingCA); err != nil { - return fmt.Errorf("error parsing ca file for Service Serving Certificate Signer: %s: %v", serviceServingCertCAFilename, err) - } - - applyOpenShiftServiceServingCertCA = func(controllerOptions serviceaccountcontroller.TokensControllerOptions) serviceaccountcontroller.TokensControllerOptions { - if len(serviceServingCA) == 0 { - return controllerOptions - } - - // if we have a rootCA bundle add that too. The rootCA will be used when hitting the default master service, since those are signed - // using a different CA by default. The rootCA's key is more closely guarded than ours and if it is compromised, that power could - // be used to change the trusted signers for every pod anyway, so we're already effectively trusting it. - if len(controllerOptions.RootCA) > 0 { - controllerOptions.ServiceServingCA = append(controllerOptions.ServiceServingCA, controllerOptions.RootCA...) - controllerOptions.ServiceServingCA = append(controllerOptions.ServiceServingCA, []byte("\n")...) - } - controllerOptions.ServiceServingCA = append(controllerOptions.ServiceServingCA, serviceServingCA...) - - return controllerOptions - } - - return nil -} - -func getServiceServingCertCAFilename(config map[string]interface{}) string { - controllerConfig, ok := config["controllerConfig"] - if !ok { - sscConfig, ok := config["serviceServingCert"] - if !ok { - return "" - } - sscConfigMap := sscConfig.(map[string]interface{}) - return sscConfigMap["certFile"].(string) - } - controllerConfigMap := controllerConfig.(map[string]interface{}) - sscConfig, ok := controllerConfigMap["serviceServingCert"] - if !ok { - return "" - } - sscConfigMap := sscConfig.(map[string]interface{}) - signerConfig, ok := sscConfigMap["signer"] - if !ok { - return "" - } - signerConfigMap := signerConfig.(map[string]interface{}) - return signerConfigMap["certFile"].(string) -} - -// resolvePath updates the given refs to be absolute paths, relative to the given base directory -func resolvePath(ref *string, base string) error { - // Don't resolve empty paths - if len(*ref) > 0 { - // Don't resolve absolute paths - if !filepath.IsAbs(*ref) { - *ref = filepath.Join(base, *ref) - } - } - - return nil -} diff --git a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/controller-manager.go b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/controller-manager.go index 79e07d8f3..b5f94549b 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/controller-manager.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-controller-manager/controller-manager.go @@ -26,7 +26,6 @@ import ( "os" "time" - "k8s.io/apiserver/pkg/server" "k8s.io/component-base/logs" "k8s.io/kubernetes/cmd/kube-controller-manager/app" _ "k8s.io/kubernetes/pkg/util/prometheusclientgo" // load all the prometheus client-go plugin @@ -36,7 +35,7 @@ import ( func main() { rand.Seed(time.Now().UnixNano()) - command := app.NewControllerManagerCommand(server.SetupSignalHandler()) + command := app.NewControllerManagerCommand() // TODO: once we switch everything over to Cobra commands, we can go back to calling // utilflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the diff --git a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server_patch.go b/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server_patch.go deleted file mode 100644 index 81c933a04..000000000 --- a/vendor/k8s.io/kubernetes/cmd/kube-proxy/app/server_patch.go +++ /dev/null @@ -1,9 +0,0 @@ -package app - -import ( - kubeproxyconfig "k8s.io/kubernetes/pkg/proxy/apis/config" -) - -func (o *Options) GetConfig() *kubeproxyconfig.KubeProxyConfiguration { - return o.config -} diff --git a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/server.go b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/server.go index 9929de48c..48a30d74c 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/server.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/app/server.go @@ -59,7 +59,7 @@ import ( ) // NewSchedulerCommand creates a *cobra.Command object with default parameters -func NewSchedulerCommand(stopCh <-chan struct{}) *cobra.Command { +func NewSchedulerCommand() *cobra.Command { opts, err := options.NewOptions() if err != nil { klog.Fatalf("unable to initialize command options: %v", err) @@ -75,7 +75,7 @@ constraints, affinity and anti-affinity specifications, data locality, inter-wor interference, deadlines, and so on. Workload-specific requirements will be exposed through the API as necessary.`, Run: func(cmd *cobra.Command, args []string) { - if err := runCommand(cmd, args, opts, stopCh); err != nil { + if err := runCommand(cmd, args, opts); err != nil { fmt.Fprintf(os.Stderr, "%v\n", err) os.Exit(1) } @@ -106,7 +106,7 @@ through the API as necessary.`, } // runCommand runs the scheduler. -func runCommand(cmd *cobra.Command, args []string, opts *options.Options, stopCh <-chan struct{}) error { +func runCommand(cmd *cobra.Command, args []string, opts *options.Options) error { verflag.PrintAndExitIfRequested() utilflag.PrintFlags(cmd.Flags()) @@ -133,6 +133,8 @@ func runCommand(cmd *cobra.Command, args []string, opts *options.Options, stopCh os.Exit(1) } + stopCh := make(chan struct{}) + // Get the completed config cc := c.Complete() @@ -157,15 +159,6 @@ func runCommand(cmd *cobra.Command, args []string, opts *options.Options, stopCh func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}) error { // To help debugging, immediately log version klog.V(1).Infof("Starting Kubernetes Scheduler version %+v", version.Get()) - ctx, cancel := context.WithCancel(context.TODO()) - defer cancel() - go func() { - select { - case <-stopCh: - cancel() - case <-ctx.Done(): - } - }() // Create the scheduler. sched, err := scheduler.New(cc.Client, @@ -219,14 +212,10 @@ func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}) error } if cc.SecureServing != nil { handler := buildHandlerChain(newHealthzHandler(&cc.ComponentConfig, false, checks...), cc.Authentication.Authenticator, cc.Authorization.Authorizer) - if serverStoppedCh, err := cc.SecureServing.Serve(handler, 0, stopCh); err != nil { + // TODO: handle stoppedCh returned by c.SecureServing.Serve + if _, err := cc.SecureServing.Serve(handler, 0, stopCh); err != nil { // fail early for secure handlers, removing the old error loop from above return fmt.Errorf("failed to start secure server: %v", err) - } else { - defer func() { - cancel() - <-serverStoppedCh - }() } } @@ -238,12 +227,27 @@ func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}) error cc.InformerFactory.WaitForCacheSync(stopCh) controller.WaitForCacheSync("scheduler", stopCh, cc.PodInformer.Informer().HasSynced) + // Prepare a reusable runCommand function. + run := func(ctx context.Context) { + sched.Run() + <-ctx.Done() + } + + ctx, cancel := context.WithCancel(context.TODO()) // TODO once Run() accepts a context, it should be used here + defer cancel() + + go func() { + select { + case <-stopCh: + cancel() + case <-ctx.Done(): + } + }() + // If leader election is enabled, runCommand via LeaderElector until done and exit. if cc.LeaderElection != nil { cc.LeaderElection.Callbacks = leaderelection.LeaderCallbacks{ - OnStartedLeading: func(context.Context) { - sched.Run() - }, + OnStartedLeading: run, OnStoppedLeading: func() { utilruntime.HandleError(fmt.Errorf("lost master")) }, @@ -254,12 +258,13 @@ func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}) error } leaderElector.Run(ctx) - } else { - // Leader election is disabled, so runCommand inline until done. - sched.Run() + + return fmt.Errorf("lost lease") } - return nil + // Leader election is disabled, so runCommand inline until done. + run(ctx) + return fmt.Errorf("finished without leader elect") } // buildHandlerChain wraps the given handler with the standard filters. diff --git a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/scheduler.go b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/scheduler.go index 01bdc9a86..5f4af458d 100644 --- a/vendor/k8s.io/kubernetes/cmd/kube-scheduler/scheduler.go +++ b/vendor/k8s.io/kubernetes/cmd/kube-scheduler/scheduler.go @@ -24,7 +24,6 @@ import ( "github.com/spf13/pflag" - "k8s.io/apiserver/pkg/server" cliflag "k8s.io/component-base/cli/flag" "k8s.io/component-base/logs" "k8s.io/kubernetes/cmd/kube-scheduler/app" @@ -35,7 +34,7 @@ import ( func main() { rand.Seed(time.Now().UnixNano()) - command := app.NewSchedulerCommand(server.SetupSignalHandler()) + command := app.NewSchedulerCommand() // TODO: once we switch everything over to Cobra commands, we can go back to calling // utilflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the diff --git a/vendor/k8s.io/kubernetes/cmd/kubeadm/app/util/config/testdata/defaulting/controlplane/defaulted.yaml b/vendor/k8s.io/kubernetes/cmd/kubeadm/app/util/config/testdata/defaulting/controlplane/defaulted.yaml index 4ea43b5fd..813b161c9 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubeadm/app/util/config/testdata/defaulting/controlplane/defaulted.yaml +++ b/vendor/k8s.io/kubernetes/cmd/kubeadm/app/util/config/testdata/defaulting/controlplane/defaulted.yaml @@ -101,7 +101,7 @@ cgroupsPerQOS: true clusterDNS: - 10.192.0.10 clusterDomain: cluster.global -configMapAndSecretChangeDetectionStrategy: Cache +configMapAndSecretChangeDetectionStrategy: Watch containerLogMaxFiles: 5 containerLogMaxSize: 10Mi contentType: application/vnd.kubernetes.protobuf diff --git a/vendor/k8s.io/kubernetes/cmd/kubeadm/app/util/config/testdata/defaulting/controlplane/defaulted_non_linux.yaml b/vendor/k8s.io/kubernetes/cmd/kubeadm/app/util/config/testdata/defaulting/controlplane/defaulted_non_linux.yaml index 5e4833c3e..c3124af1f 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubeadm/app/util/config/testdata/defaulting/controlplane/defaulted_non_linux.yaml +++ b/vendor/k8s.io/kubernetes/cmd/kubeadm/app/util/config/testdata/defaulting/controlplane/defaulted_non_linux.yaml @@ -101,7 +101,7 @@ cgroupsPerQOS: true clusterDNS: - 10.192.0.10 clusterDomain: cluster.global -configMapAndSecretChangeDetectionStrategy: Cache +configMapAndSecretChangeDetectionStrategy: Watch containerLogMaxFiles: 5 containerLogMaxSize: 10Mi contentType: application/vnd.kubernetes.protobuf diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/BUILD b/vendor/k8s.io/kubernetes/cmd/kubelet/app/BUILD index 5e9cf6fc8..a837a646d 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/BUILD +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/app/BUILD @@ -113,7 +113,6 @@ go_library( "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/auth.go b/vendor/k8s.io/kubernetes/cmd/kubelet/app/auth.go index 362de5256..14cb0da3e 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/auth.go +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/app/auth.go @@ -76,8 +76,7 @@ func BuildAuthn(client authenticationclient.TokenReviewInterface, authn kubeletc authenticatorConfig.TokenAccessReviewClient = client } - // ignore dynamic reload. We may want this in the future - authenticator, _, _, err := authenticatorConfig.New() + authenticator, _, err := authenticatorConfig.New() return authenticator, err } diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/patch_volumequota.go b/vendor/k8s.io/kubernetes/cmd/kubelet/app/patch_volumequota.go deleted file mode 100644 index 87c991421..000000000 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/patch_volumequota.go +++ /dev/null @@ -1,127 +0,0 @@ -package app - -import ( - "errors" - "fmt" - "io/ioutil" - "os" - - "gopkg.in/yaml.v2" - - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - "k8s.io/klog" - "k8s.io/kubernetes/pkg/volume" - "k8s.io/kubernetes/pkg/volume/emptydirquota" -) - -var ( - volumeConfigKind = "VolumeConfig" - volumeConfigAPIVersion = "kubelet.config.openshift.io/v1" -) - -// Miror the TypeMeta from k8s since it doesn't have yaml tags. -// We don't really use this right now anyway. We just want -// the on-disk format of the config to be right in case we -// do want to version/parse the config in the k8s way later. -type TypeMeta struct { - Kind string `yaml:"kind"` - APIVersion string `yaml:"apiVersion"` -} - -// VolumeConfig contains options for configuring volumes on the node. -type VolumeConfig struct { - TypeMeta `yaml:"typeMeta,inline"` - - // LocalQuota contains options for controlling local volume quota on the node. - LocalQuota LocalQuota `yaml:"localQuota"` -} - -// LocalQuota contains options for controlling local volume quota on the node. -type LocalQuota struct { - // perFSGroup can be specified to enable a quota on local storage use per unique FSGroup ID. - // At present this is only implemented for emptyDir volumes, and if the underlying - // volumeDirectory is on an XFS filesystem. - PerFSGroup string `yaml:"perFSGroup"` -} - -// THIS IS PART OF AN OPENSHIFT CARRY PATCH -// PatchVolumePluginsForLocalQuota checks if the node config specifies a local storage -// perFSGroup quota, and if so will test that the volumeDirectory is on a -// filesystem suitable for quota enforcement. If checks pass the k8s emptyDir -// volume plugin will be replaced with a wrapper version which adds quota -// functionality. -func PatchVolumePluginsForLocalQuota(rootdir string, plugins *[]volume.VolumePlugin) error { - // This is hardcoded in the short term so the we can pull the - // node and volume config files out of the same configmap - volumeConfigFilePath := "/etc/origin/node/volume-config.yaml" - - stat, err := os.Stat(volumeConfigFilePath) - if os.IsNotExist(err) { - return nil - } - if stat.Size() == 0 { - return nil - } - - volumeConfigFile, err := ioutil.ReadFile(volumeConfigFilePath) - if err != nil { - return fmt.Errorf("failed to read %s: %v", volumeConfigFilePath, err) - } - - var volumeConfig VolumeConfig - err = yaml.Unmarshal(volumeConfigFile, &volumeConfig) - if err != nil { - return fmt.Errorf("failed to unmarshal %s: %v", volumeConfigFilePath, err) - } - - if volumeConfig.Kind != volumeConfigKind || volumeConfig.APIVersion != volumeConfigAPIVersion { - return fmt.Errorf("expected kind \"%s\" and apiVersion \"%s\" for volume config file", volumeConfigKind, volumeConfigAPIVersion) - } - - quota, err := resource.ParseQuantity(volumeConfig.LocalQuota.PerFSGroup) - if err != nil { - return fmt.Errorf("unable to parse \"%s\" as a quantity", volumeConfig.LocalQuota.PerFSGroup) - } - - if quota.Value() <= 0 { - return fmt.Errorf("perFSGroup must be a positive quantity") - } - - klog.V(2).Info("replacing empty-dir volume plugin with quota wrapper") - - quotaApplicator, err := emptydirquota.NewQuotaApplicator(rootdir) - if err != nil { - return fmt.Errorf("could not set local quota: %v", err) - } - - // Create a volume spec with emptyDir we can use to search for the - // emptyDir plugin with CanSupport() - emptyDirSpec := &volume.Spec{ - Volume: &v1.Volume{ - VolumeSource: v1.VolumeSource{ - EmptyDir: &v1.EmptyDirVolumeSource{}, - }, - }, - } - - wrappedEmptyDirPlugin := false - for idx, plugin := range *plugins { - // Can't really do type checking or use a constant here as they are not exported: - if plugin.CanSupport(emptyDirSpec) { - wrapper := emptydirquota.EmptyDirQuotaPlugin{ - VolumePlugin: plugin, - Quota: quota, - QuotaApplicator: quotaApplicator, - } - (*plugins)[idx] = &wrapper - wrappedEmptyDirPlugin = true - } - } - - if !wrappedEmptyDirPlugin { - klog.Fatal(errors.New("no plugin handling EmptyDir was found, unable to apply local quotas")) - } - - return nil -} diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/patch_volumes.go b/vendor/k8s.io/kubernetes/cmd/kubelet/app/patch_volumes.go deleted file mode 100644 index d7b2bf5a3..000000000 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/patch_volumes.go +++ /dev/null @@ -1,3 +0,0 @@ -package app - -var ProbeVolumePlugins = probeVolumePlugins diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/plugins.go b/vendor/k8s.io/kubernetes/cmd/kubelet/app/plugins.go index 7a5687fce..5f8ceed7b 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/plugins.go +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/app/plugins.go @@ -62,7 +62,7 @@ import ( ) // ProbeVolumePlugins collects all volume plugins into an easy to use list. -func probeVolumePlugins() []volume.VolumePlugin { +func ProbeVolumePlugins() []volume.VolumePlugin { allPlugins := []volume.VolumePlugin{} // The list of plugins to probe is decided by the kubelet binary, not diff --git a/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go b/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go index 51b051831..69f0e35d0 100644 --- a/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go +++ b/vendor/k8s.io/kubernetes/cmd/kubelet/app/server.go @@ -30,7 +30,6 @@ import ( "path" "path/filepath" "strconv" - "strings" "time" "github.com/coreos/go-systemd/daemon" @@ -41,7 +40,6 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" @@ -392,7 +390,7 @@ func UnsecuredDependencies(s *options.KubeletServer) (*kubelet.Dependencies, err } } - deps := &kubelet.Dependencies{ + return &kubelet.Dependencies{ Auth: nil, // default does not enforce auth[nz] CAdvisorInterface: nil, // cadvisor.New launches background processes (bg http.ListenAndServe, and some bg cleaners), not set here Cloud: nil, // cloud provider might start background processes @@ -407,14 +405,7 @@ func UnsecuredDependencies(s *options.KubeletServer) (*kubelet.Dependencies, err OSInterface: kubecontainer.RealOS{}, VolumePlugins: ProbeVolumePlugins(), DynamicPluginProber: GetDynamicPluginProber(s.VolumePluginDir, pluginRunner), - TLSOptions: tlsOptions, - } - - if err := PatchVolumePluginsForLocalQuota(s.RootDirectory, &deps.VolumePlugins); err != nil { - return nil, fmt.Errorf("Local quota setup failed: %v", err) - } - - return deps, nil + TLSOptions: tlsOptions}, nil } // Run runs the specified KubeletServer with the given Dependencies. This should never exit. @@ -766,11 +757,6 @@ func buildKubeletClientConfig(s *options.KubeletServer, nodeName types.NodeName) return nil, nil, err } - // use the correct content type for cert rotation, but don't set QPS - setContentTypeForClient(certConfig, s.ContentType) - - kubeClientConfigOverrides(s, clientConfig) - clientCertificateManager, err := buildClientCertificateManager(certConfig, clientConfig, s.CertDirectory, nodeName) if err != nil { return nil, nil, err @@ -778,6 +764,7 @@ func buildKubeletClientConfig(s *options.KubeletServer, nodeName types.NodeName) // the rotating transport will use the cert from the cert manager instead of these files transportConfig := restclient.AnonymousClientConfig(clientConfig) + kubeClientConfigOverrides(s, transportConfig) // we set exitAfter to five minutes because we use this client configuration to request new certs - if we are unable // to request new certs, we will be unable to continue normal operation. Exiting the process allows a wrapper @@ -849,7 +836,7 @@ func buildClientCertificateManager(certConfig, clientConfig *restclient.Config, } func kubeClientConfigOverrides(s *options.KubeletServer, clientConfig *restclient.Config) { - setContentTypeForClient(clientConfig, s.ContentType) + clientConfig.ContentType = s.ContentType // Override kubeconfig qps/burst settings from flags clientConfig.QPS = float32(s.KubeAPIQPS) clientConfig.Burst = int(s.KubeAPIBurst) @@ -943,21 +930,6 @@ func InitializeTLS(kf *options.KubeletFlags, kc *kubeletconfiginternal.KubeletCo return tlsOptions, nil } -// setContentTypeForClient sets the appropritae content type into the rest config -// and handles defaulting AcceptContentTypes based on that input. -func setContentTypeForClient(cfg *restclient.Config, contentType string) { - if len(contentType) == 0 { - return - } - cfg.ContentType = contentType - switch contentType { - case runtime.ContentTypeProtobuf: - cfg.AcceptContentTypes = strings.Join([]string{runtime.ContentTypeProtobuf, runtime.ContentTypeJSON}, ",") - default: - // otherwise let the rest client perform defaulting - } -} - // RunKubelet is responsible for setting up and running a kubelet. It is used in three different applications: // 1 Integration tests // 2 Kubelet binary diff --git a/vendor/k8s.io/kubernetes/hack/openapi-violation.list b/vendor/k8s.io/kubernetes/hack/openapi-violation.list deleted file mode 100644 index 4fae72c7a..000000000 --- a/vendor/k8s.io/kubernetes/hack/openapi-violation.list +++ /dev/null @@ -1,173 +0,0 @@ -API rule violation: names_match,k8s.io/api/authorization/v1beta1,SubjectAccessReviewSpec,Groups -API rule violation: names_match,k8s.io/api/core/v1,AzureDiskVolumeSource,DataDiskURI -API rule violation: names_match,k8s.io/api/core/v1,ContainerStatus,LastTerminationState -API rule violation: names_match,k8s.io/api/core/v1,DaemonEndpoint,Port -API rule violation: names_match,k8s.io/api/core/v1,Event,ReportingController -API rule violation: names_match,k8s.io/api/core/v1,FCVolumeSource,WWIDs -API rule violation: names_match,k8s.io/api/core/v1,GlusterfsPersistentVolumeSource,EndpointsName -API rule violation: names_match,k8s.io/api/core/v1,GlusterfsVolumeSource,EndpointsName -API rule violation: names_match,k8s.io/api/core/v1,ISCSIPersistentVolumeSource,DiscoveryCHAPAuth -API rule violation: names_match,k8s.io/api/core/v1,ISCSIPersistentVolumeSource,SessionCHAPAuth -API rule violation: names_match,k8s.io/api/core/v1,ISCSIVolumeSource,DiscoveryCHAPAuth -API rule violation: names_match,k8s.io/api/core/v1,ISCSIVolumeSource,SessionCHAPAuth -API rule violation: names_match,k8s.io/api/core/v1,NodeResources,Capacity -API rule violation: names_match,k8s.io/api/core/v1,NodeSpec,DoNotUse_ExternalID -API rule violation: names_match,k8s.io/api/core/v1,PersistentVolumeSource,CephFS -API rule violation: names_match,k8s.io/api/core/v1,PersistentVolumeSource,StorageOS -API rule violation: names_match,k8s.io/api/core/v1,PodSpec,DeprecatedServiceAccount -API rule violation: names_match,k8s.io/api/core/v1,RBDPersistentVolumeSource,CephMonitors -API rule violation: names_match,k8s.io/api/core/v1,RBDPersistentVolumeSource,RBDImage -API rule violation: names_match,k8s.io/api/core/v1,RBDPersistentVolumeSource,RBDPool -API rule violation: names_match,k8s.io/api/core/v1,RBDPersistentVolumeSource,RadosUser -API rule violation: names_match,k8s.io/api/core/v1,RBDVolumeSource,CephMonitors -API rule violation: names_match,k8s.io/api/core/v1,RBDVolumeSource,RBDImage -API rule violation: names_match,k8s.io/api/core/v1,RBDVolumeSource,RBDPool -API rule violation: names_match,k8s.io/api/core/v1,RBDVolumeSource,RadosUser -API rule violation: names_match,k8s.io/api/core/v1,VolumeSource,CephFS -API rule violation: names_match,k8s.io/api/core/v1,VolumeSource,StorageOS -API rule violation: names_match,k8s.io/api/policy/v1beta1,PodDisruptionBudgetStatus,PodDisruptionsAllowed -API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,CustomResourceColumnDefinition,JSONPath -API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSON,Raw -API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaProps,Ref -API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaProps,Schema -API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrArray,JSONSchemas -API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrArray,Schema -API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrBool,Allows -API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrBool,Schema -API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrStringArray,Property -API rule violation: names_match,k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1,JSONSchemaPropsOrStringArray,Schema -API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,Format -API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,d -API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,i -API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,Quantity,s -API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,int64Amount,scale -API rule violation: names_match,k8s.io/apimachinery/pkg/api/resource,int64Amount,value -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,APIResourceList,APIResources -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,Duration,Duration -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,InternalEvent,Object -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,InternalEvent,Type -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,MicroTime,Time -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,StatusCause,Type -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,Time,Time -API rule violation: names_match,k8s.io/apimachinery/pkg/runtime,RawExtension,Raw -API rule violation: names_match,k8s.io/apimachinery/pkg/runtime,Unknown,ContentEncoding -API rule violation: names_match,k8s.io/apimachinery/pkg/runtime,Unknown,ContentType -API rule violation: names_match,k8s.io/apimachinery/pkg/runtime,Unknown,Raw -API rule violation: names_match,k8s.io/apimachinery/pkg/util/intstr,IntOrString,IntVal -API rule violation: names_match,k8s.io/apimachinery/pkg/util/intstr,IntOrString,StrVal -API rule violation: names_match,k8s.io/apimachinery/pkg/util/intstr,IntOrString,Type -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,AttachDetachControllerConfiguration,DisableAttachDetachReconcilerSync -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,AttachDetachControllerConfiguration,ReconcilerSyncLoopPeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,CSRSigningControllerConfiguration,ClusterSigningCertFile -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,CSRSigningControllerConfiguration,ClusterSigningDuration -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,CSRSigningControllerConfiguration,ClusterSigningKeyFile -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,CloudProviderConfiguration,CloudConfigFile -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,CloudProviderConfiguration,Name -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,DaemonSetControllerConfiguration,ConcurrentDaemonSetSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,DeploymentControllerConfiguration,ConcurrentDeploymentSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,DeploymentControllerConfiguration,DeploymentControllerSyncPeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,DeprecatedControllerConfiguration,DeletingPodsBurst -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,DeprecatedControllerConfiguration,DeletingPodsQPS -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,DeprecatedControllerConfiguration,RegisterRetryCount -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,EndpointControllerConfiguration,ConcurrentEndpointSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GarbageCollectorControllerConfiguration,ConcurrentGCSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GarbageCollectorControllerConfiguration,EnableGarbageCollector -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GarbageCollectorControllerConfiguration,GCIgnoredResources -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GenericControllerManagerConfiguration,Address -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GenericControllerManagerConfiguration,ClientConnection -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GenericControllerManagerConfiguration,ControllerStartInterval -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GenericControllerManagerConfiguration,Controllers -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GenericControllerManagerConfiguration,Debugging -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GenericControllerManagerConfiguration,LeaderElection -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GenericControllerManagerConfiguration,MinResyncPeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GenericControllerManagerConfiguration,Port -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GroupResource,Group -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,GroupResource,Resource -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,HPAControllerConfiguration,HorizontalPodAutoscalerCPUInitializationPeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,HPAControllerConfiguration,HorizontalPodAutoscalerDownscaleForbiddenWindow -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,HPAControllerConfiguration,HorizontalPodAutoscalerDownscaleStabilizationWindow -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,HPAControllerConfiguration,HorizontalPodAutoscalerInitialReadinessDelay -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,HPAControllerConfiguration,HorizontalPodAutoscalerSyncPeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,HPAControllerConfiguration,HorizontalPodAutoscalerTolerance -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,HPAControllerConfiguration,HorizontalPodAutoscalerUpscaleForbiddenWindow -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,HPAControllerConfiguration,HorizontalPodAutoscalerUseRESTClients -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,JobControllerConfiguration,ConcurrentJobSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,AllocateNodeCIDRs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,AllowUntaggedCloud -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,CIDRAllocatorType -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,CloudProvider -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,ClusterCIDR -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,ClusterName -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,ConfigureCloudRoutes -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,ExternalCloudVolumePlugin -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,NodeMonitorPeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,NodeSyncPeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,RouteReconciliationPeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeCloudSharedConfiguration,UseServiceAccountCredentials -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,AttachDetachController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,CSRSigningController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,DaemonSetController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,DeploymentController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,DeprecatedController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,EndpointController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,GarbageCollectorController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,Generic -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,HPAController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,JobController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,KubeCloudShared -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,NamespaceController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,NodeIPAMController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,NodeLifecycleController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,PersistentVolumeBinderController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,PodGCController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,ReplicaSetController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,ReplicationController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,ResourceQuotaController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,SAController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,ServiceController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,KubeControllerManagerConfiguration,TTLAfterFinishedController -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NamespaceControllerConfiguration,ConcurrentNamespaceSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NamespaceControllerConfiguration,NamespaceSyncPeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NodeIPAMControllerConfiguration,NodeCIDRMaskSize -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NodeIPAMControllerConfiguration,ServiceCIDR -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NodeLifecycleControllerConfiguration,EnableTaintManager -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NodeLifecycleControllerConfiguration,LargeClusterSizeThreshold -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NodeLifecycleControllerConfiguration,NodeEvictionRate -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NodeLifecycleControllerConfiguration,NodeMonitorGracePeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NodeLifecycleControllerConfiguration,NodeStartupGracePeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NodeLifecycleControllerConfiguration,PodEvictionTimeout -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NodeLifecycleControllerConfiguration,SecondaryNodeEvictionRate -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,NodeLifecycleControllerConfiguration,UnhealthyZoneThreshold -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,PersistentVolumeBinderControllerConfiguration,PVClaimBinderSyncPeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,PersistentVolumeBinderControllerConfiguration,VolumeConfiguration -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,PersistentVolumeRecyclerConfiguration,IncrementTimeoutHostPath -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,PersistentVolumeRecyclerConfiguration,IncrementTimeoutNFS -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,PersistentVolumeRecyclerConfiguration,MaximumRetry -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,PersistentVolumeRecyclerConfiguration,MinimumTimeoutHostPath -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,PersistentVolumeRecyclerConfiguration,MinimumTimeoutNFS -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,PersistentVolumeRecyclerConfiguration,PodTemplateFilePathHostPath -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,PersistentVolumeRecyclerConfiguration,PodTemplateFilePathNFS -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,PodGCControllerConfiguration,TerminatedPodGCThreshold -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,ReplicaSetControllerConfiguration,ConcurrentRSSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,ReplicationControllerConfiguration,ConcurrentRCSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,ResourceQuotaControllerConfiguration,ConcurrentResourceQuotaSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,ResourceQuotaControllerConfiguration,ResourceQuotaSyncPeriod -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,SAControllerConfiguration,ConcurrentSATokenSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,SAControllerConfiguration,RootCAFile -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,SAControllerConfiguration,ServiceAccountKeyFile -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,ServiceControllerConfiguration,ConcurrentServiceSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,TTLAfterFinishedControllerConfiguration,ConcurrentTTLSyncs -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,VolumeConfiguration,EnableDynamicProvisioning -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,VolumeConfiguration,EnableHostPathProvisioning -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,VolumeConfiguration,FlexVolumePluginDir -API rule violation: names_match,k8s.io/kube-controller-manager/config/v1alpha1,VolumeConfiguration,PersistentVolumeRecyclerConfiguration -API rule violation: names_match,k8s.io/kube-proxy/config/v1alpha1,KubeProxyConfiguration,IPTables -API rule violation: names_match,k8s.io/kubelet/config/v1beta1,KubeletConfiguration,IPTablesDropBit -API rule violation: names_match,k8s.io/kubelet/config/v1beta1,KubeletConfiguration,IPTablesMasqueradeBit -API rule violation: names_match,k8s.io/kubelet/config/v1beta1,KubeletConfiguration,ResolverConfig -API rule violation: names_match,k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config/v1alpha1,CloudControllerManagerConfiguration,Generic -API rule violation: names_match,k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config/v1alpha1,CloudControllerManagerConfiguration,KubeCloudShared -API rule violation: names_match,k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config/v1alpha1,CloudControllerManagerConfiguration,NodeStatusUpdateFrequency -API rule violation: names_match,k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config/v1alpha1,CloudControllerManagerConfiguration,ServiceController -API rule violation: names_match,k8s.io/metrics/pkg/apis/custom_metrics/v1beta1,MetricValue,WindowSeconds -API rule violation: names_match,k8s.io/metrics/pkg/apis/external_metrics/v1beta1,ExternalMetricValue,WindowSeconds diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/groupcache_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/groupcache_test.go deleted file mode 100644 index acd711067..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/groupcache_test.go +++ /dev/null @@ -1,24 +0,0 @@ -package restrictusers - -import ( - userv1 "github.com/openshift/api/user/v1" -) - -type fakeGroupCache struct { - groups []userv1.Group -} - -func (g fakeGroupCache) GroupsFor(user string) ([]*userv1.Group, error) { - ret := []*userv1.Group{} - for i := range g.groups { - group := &g.groups[i] - for _, currUser := range group.Users { - if user == currUser { - ret = append(ret, group) - break - } - } - - } - return ret, nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/intializers.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/intializers.go deleted file mode 100644 index d3fdcde4a..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/intializers.go +++ /dev/null @@ -1,28 +0,0 @@ -package restrictusers - -import ( - "k8s.io/apiserver/pkg/admission" - - userinformer "github.com/openshift/client-go/user/informers/externalversions" -) - -func NewInitializer(userInformer userinformer.SharedInformerFactory) admission.PluginInitializer { - return &localInitializer{userInformer: userInformer} -} - -type WantsUserInformer interface { - SetUserInformer(userinformer.SharedInformerFactory) - admission.InitializationValidator -} - -type localInitializer struct { - userInformer userinformer.SharedInformerFactory -} - -// Initialize will check the initialization interfaces implemented by each plugin -// and provide the appropriate initialization data -func (i *localInitializer) Initialize(plugin admission.Interface) { - if wants, ok := plugin.(WantsUserInformer); ok { - wants.SetUserInformer(i.userInformer) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers.go deleted file mode 100644 index 968b7f18f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers.go +++ /dev/null @@ -1,232 +0,0 @@ -package restrictusers - -import ( - "errors" - "fmt" - "io" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - kerrors "k8s.io/apimachinery/pkg/util/errors" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/rest" - "k8s.io/klog" - "k8s.io/kubernetes/pkg/apis/rbac" - - userv1 "github.com/openshift/api/user/v1" - authorizationtypedclient "github.com/openshift/client-go/authorization/clientset/versioned/typed/authorization/v1" - userclient "github.com/openshift/client-go/user/clientset/versioned" - userinformer "github.com/openshift/client-go/user/informers/externalversions" - "github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/usercache" -) - -func Register(plugins *admission.Plugins) { - plugins.Register("authorization.openshift.io/RestrictSubjectBindings", - func(config io.Reader) (admission.Interface, error) { - return NewRestrictUsersAdmission() - }) -} - -type GroupCache interface { - GroupsFor(string) ([]*userv1.Group, error) -} - -// restrictUsersAdmission implements admission.ValidateInterface and enforces -// restrictions on adding rolebindings in a project to permit only designated -// subjects. -type restrictUsersAdmission struct { - *admission.Handler - - roleBindingRestrictionsGetter authorizationtypedclient.RoleBindingRestrictionsGetter - userClient userclient.Interface - kubeClient kubernetes.Interface - groupCache GroupCache -} - -var _ = admissionrestconfig.WantsRESTClientConfig(&restrictUsersAdmission{}) -var _ = WantsUserInformer(&restrictUsersAdmission{}) -var _ = initializer.WantsExternalKubeClientSet(&restrictUsersAdmission{}) -var _ = admission.ValidationInterface(&restrictUsersAdmission{}) - -// NewRestrictUsersAdmission configures an admission plugin that enforces -// restrictions on adding role bindings in a project. -func NewRestrictUsersAdmission() (admission.Interface, error) { - return &restrictUsersAdmission{ - Handler: admission.NewHandler(admission.Create, admission.Update), - }, nil -} - -func (q *restrictUsersAdmission) SetExternalKubeClientSet(c kubernetes.Interface) { - q.kubeClient = c -} - -func (q *restrictUsersAdmission) SetRESTClientConfig(restClientConfig rest.Config) { - var err error - - // RoleBindingRestriction is served using CRD resource any status update must use JSON - jsonClientConfig := rest.CopyConfig(&restClientConfig) - jsonClientConfig.ContentConfig.AcceptContentTypes = "application/json" - jsonClientConfig.ContentConfig.ContentType = "application/json" - - q.roleBindingRestrictionsGetter, err = authorizationtypedclient.NewForConfig(jsonClientConfig) - if err != nil { - utilruntime.HandleError(err) - return - } - - q.userClient, err = userclient.NewForConfig(&restClientConfig) - if err != nil { - utilruntime.HandleError(err) - return - } -} - -func (q *restrictUsersAdmission) SetUserInformer(userInformers userinformer.SharedInformerFactory) { - q.groupCache = usercache.NewGroupCache(userInformers.User().V1().Groups()) -} - -// subjectsDelta returns the relative complement of elementsToIgnore in -// elements (i.e., elements∖elementsToIgnore). -func subjectsDelta(elementsToIgnore, elements []rbac.Subject) []rbac.Subject { - result := []rbac.Subject{} - - for _, el := range elements { - keep := true - for _, skipEl := range elementsToIgnore { - if el == skipEl { - keep = false - break - } - } - if keep { - result = append(result, el) - } - } - - return result -} - -// Admit makes admission decisions that enforce restrictions on adding -// project-scoped role-bindings. In order for a role binding to be permitted, -// each subject in the binding must be matched by some rolebinding restriction -// in the namespace. -func (q *restrictUsersAdmission) Validate(a admission.Attributes, _ admission.ObjectInterfaces) (err error) { - - // We only care about rolebindings - if a.GetResource().GroupResource() != rbac.Resource("rolebindings") { - return nil - } - - // Ignore all operations that correspond to subresource actions. - if len(a.GetSubresource()) != 0 { - return nil - } - - ns := a.GetNamespace() - // Ignore cluster-level resources. - if len(ns) == 0 { - return nil - } - - var oldSubjects []rbac.Subject - - obj, oldObj := a.GetObject(), a.GetOldObject() - - rolebinding, ok := obj.(*rbac.RoleBinding) - if !ok { - return admission.NewForbidden(a, - fmt.Errorf("wrong object type for new rolebinding: %T", obj)) - } - - if len(rolebinding.Subjects) == 0 { - klog.V(4).Infof("No new subjects; admitting") - return nil - } - - if oldObj != nil { - oldrolebinding, ok := oldObj.(*rbac.RoleBinding) - if !ok { - return admission.NewForbidden(a, - fmt.Errorf("wrong object type for old rolebinding: %T", oldObj)) - } - oldSubjects = oldrolebinding.Subjects - } - - klog.V(4).Infof("Handling rolebinding %s/%s", - rolebinding.Namespace, rolebinding.Name) - - newSubjects := subjectsDelta(oldSubjects, rolebinding.Subjects) - if len(newSubjects) == 0 { - klog.V(4).Infof("No new subjects; admitting") - return nil - } - - // RoleBindingRestrictions admission plugin is DefaultAllow, hence RBRs can't use an informer, - // because it's impossible to know if cache is up-to-date - roleBindingRestrictionList, err := q.roleBindingRestrictionsGetter.RoleBindingRestrictions(ns). - List(metav1.ListOptions{}) - if err != nil { - return admission.NewForbidden(a, fmt.Errorf("could not list rolebinding restrictions: %v", err)) - } - if len(roleBindingRestrictionList.Items) == 0 { - klog.V(4).Infof("No rolebinding restrictions specified; admitting") - return nil - } - - checkers := []SubjectChecker{} - for _, rbr := range roleBindingRestrictionList.Items { - checker, err := NewSubjectChecker(&rbr.Spec) - if err != nil { - return admission.NewForbidden(a, fmt.Errorf("could not create rolebinding restriction subject checker: %v", err)) - } - checkers = append(checkers, checker) - } - - roleBindingRestrictionContext, err := newRoleBindingRestrictionContext(ns, - q.kubeClient, q.userClient.UserV1(), q.groupCache) - if err != nil { - return admission.NewForbidden(a, fmt.Errorf("could not create rolebinding restriction context: %v", err)) - } - - checker := NewUnionSubjectChecker(checkers) - - errs := []error{} - for _, subject := range newSubjects { - allowed, err := checker.Allowed(subject, roleBindingRestrictionContext) - if err != nil { - errs = append(errs, err) - } - if !allowed { - errs = append(errs, - fmt.Errorf("rolebindings to %s %q are not allowed in project %q", - subject.Kind, subject.Name, ns)) - } - } - if len(errs) != 0 { - return admission.NewForbidden(a, kerrors.NewAggregate(errs)) - } - - klog.V(4).Infof("All new subjects are allowed; admitting") - - return nil -} - -func (q *restrictUsersAdmission) ValidateInitialization() error { - if q.kubeClient == nil { - return errors.New("RestrictUsersAdmission plugin requires a Kubernetes client") - } - if q.roleBindingRestrictionsGetter == nil { - return errors.New("RestrictUsersAdmission plugin requires an OpenShift client") - } - if q.userClient == nil { - return errors.New("RestrictUsersAdmission plugin requires an OpenShift user client") - } - if q.groupCache == nil { - return errors.New("RestrictUsersAdmission plugin requires a group cache") - } - - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers_test.go deleted file mode 100644 index 4b165e37b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/restrictusers_test.go +++ /dev/null @@ -1,402 +0,0 @@ -package restrictusers - -import ( - "fmt" - "strings" - "testing" - - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/client-go/kubernetes/fake" - "k8s.io/kubernetes/pkg/apis/rbac" - - authorizationv1 "github.com/openshift/api/authorization/v1" - userv1 "github.com/openshift/api/user/v1" - fakeauthorizationclient "github.com/openshift/client-go/authorization/clientset/versioned/fake" - fakeuserclient "github.com/openshift/client-go/user/clientset/versioned/fake" -) - -func TestAdmission(t *testing.T) { - var ( - userAlice = userv1.User{ - ObjectMeta: metav1.ObjectMeta{ - Name: "Alice", - Labels: map[string]string{"foo": "bar"}, - }, - } - userAliceSubj = rbac.Subject{ - Kind: rbac.UserKind, - Name: "Alice", - } - - userBob = userv1.User{ - ObjectMeta: metav1.ObjectMeta{Name: "Bob"}, - Groups: []string{"group"}, - } - userBobSubj = rbac.Subject{ - Kind: rbac.UserKind, - Name: "Bob", - } - - group = userv1.Group{ - ObjectMeta: metav1.ObjectMeta{ - Name: "group", - Labels: map[string]string{"baz": "quux"}, - }, - Users: []string{userBobSubj.Name}, - } - groupSubj = rbac.Subject{ - Kind: rbac.GroupKind, - Name: "group", - } - - serviceaccount = corev1.ServiceAccount{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "serviceaccount", - Labels: map[string]string{"xyzzy": "thud"}, - }, - } - serviceaccountSubj = rbac.Subject{ - Kind: rbac.ServiceAccountKind, - Namespace: "namespace", - Name: "serviceaccount", - } - ) - - testCases := []struct { - name string - expectedErr string - - object runtime.Object - oldObject runtime.Object - kind schema.GroupVersionKind - resource schema.GroupVersionResource - namespace string - subresource string - kubeObjects []runtime.Object - authorizationObjects []runtime.Object - userObjects []runtime.Object - }{ - { - name: "ignore (allow) if subresource is nonempty", - object: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{userAliceSubj}, - }, - oldObject: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{}, - }, - kind: rbac.Kind("RoleBinding").WithVersion("version"), - resource: rbac.Resource("rolebindings").WithVersion("version"), - namespace: "namespace", - subresource: "subresource", - kubeObjects: []runtime.Object{ - &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "namespace", - }, - }, - }, - }, - { - name: "ignore (allow) cluster-scoped rolebinding", - object: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{userAliceSubj}, - RoleRef: rbac.RoleRef{Name: "name"}, - }, - oldObject: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{}, - }, - kind: rbac.Kind("RoleBinding").WithVersion("version"), - resource: rbac.Resource("rolebindings").WithVersion("version"), - namespace: "", - subresource: "", - kubeObjects: []runtime.Object{ - &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "namespace", - }, - }, - }, - }, - { - name: "allow if the namespace has no rolebinding restrictions", - object: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{ - userAliceSubj, - userBobSubj, - groupSubj, - serviceaccountSubj, - }, - RoleRef: rbac.RoleRef{Name: "name"}, - }, - oldObject: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{}, - RoleRef: rbac.RoleRef{Name: "name"}, - }, - kind: rbac.Kind("RoleBinding").WithVersion("version"), - resource: rbac.Resource("rolebindings").WithVersion("version"), - namespace: "namespace", - subresource: "", - kubeObjects: []runtime.Object{ - &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "namespace", - }, - }, - }, - }, - { - name: "allow if any rolebinding with the subject already exists", - object: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{ - userAliceSubj, - groupSubj, - serviceaccountSubj, - }, - RoleRef: rbac.RoleRef{Name: "name"}, - }, - oldObject: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{ - userAliceSubj, - groupSubj, - serviceaccountSubj, - }, - RoleRef: rbac.RoleRef{Name: "name"}, - }, - kind: rbac.Kind("RoleBinding").WithVersion("version"), - resource: rbac.Resource("rolebindings").WithVersion("version"), - namespace: "namespace", - subresource: "", - kubeObjects: []runtime.Object{ - &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "namespace", - }, - }, - }, - authorizationObjects: []runtime.Object{ - &authorizationv1.RoleBindingRestriction{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bogus-matcher", - Namespace: "namespace", - }, - Spec: authorizationv1.RoleBindingRestrictionSpec{ - UserRestriction: &authorizationv1.UserRestriction{}, - }, - }, - }, - }, - { - name: "allow a user, group, or service account in a rolebinding if a literal matches", - object: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{ - userAliceSubj, - serviceaccountSubj, - groupSubj, - }, - RoleRef: rbac.RoleRef{Name: "name"}, - }, - oldObject: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{}, - RoleRef: rbac.RoleRef{Name: "name"}, - }, - kind: rbac.Kind("RoleBinding").WithVersion("version"), - resource: rbac.Resource("rolebindings").WithVersion("version"), - namespace: "namespace", - subresource: "", - kubeObjects: []runtime.Object{ - &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "namespace", - }, - }, - }, - authorizationObjects: []runtime.Object{ - &authorizationv1.RoleBindingRestriction{ - ObjectMeta: metav1.ObjectMeta{ - Name: "match-users", - Namespace: "namespace", - }, - Spec: authorizationv1.RoleBindingRestrictionSpec{ - UserRestriction: &authorizationv1.UserRestriction{ - Users: []string{userAlice.Name}, - }, - }, - }, - &authorizationv1.RoleBindingRestriction{ - ObjectMeta: metav1.ObjectMeta{ - Name: "match-groups", - Namespace: "namespace", - }, - Spec: authorizationv1.RoleBindingRestrictionSpec{ - GroupRestriction: &authorizationv1.GroupRestriction{ - Groups: []string{group.Name}, - }, - }, - }, - &authorizationv1.RoleBindingRestriction{ - ObjectMeta: metav1.ObjectMeta{ - Name: "match-serviceaccounts", - Namespace: "namespace", - }, - Spec: authorizationv1.RoleBindingRestrictionSpec{ - ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ - ServiceAccounts: []authorizationv1.ServiceAccountReference{ - { - Name: serviceaccount.Name, - Namespace: serviceaccount.Namespace, - }, - }, - }, - }, - }, - }, - }, - { - name: "prohibit user without a matching user literal", - expectedErr: fmt.Sprintf("rolebindings to %s %q are not allowed", - userAliceSubj.Kind, userAliceSubj.Name), - object: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{ - userAliceSubj, - }, - RoleRef: rbac.RoleRef{Name: "name"}, - }, - oldObject: &rbac.RoleBinding{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "rolebinding", - }, - Subjects: []rbac.Subject{}, - RoleRef: rbac.RoleRef{Name: "name"}, - }, - kind: rbac.Kind("RoleBinding").WithVersion("version"), - resource: rbac.Resource("rolebindings").WithVersion("version"), - namespace: "namespace", - subresource: "", - kubeObjects: []runtime.Object{ - &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "namespace", - }, - }, - }, - authorizationObjects: []runtime.Object{ - &authorizationv1.RoleBindingRestriction{ - ObjectMeta: metav1.ObjectMeta{ - Name: "match-users-bob", - Namespace: "namespace", - }, - Spec: authorizationv1.RoleBindingRestrictionSpec{ - UserRestriction: &authorizationv1.UserRestriction{ - Users: []string{userBobSubj.Name}, - }, - }, - }, - }, - userObjects: []runtime.Object{ - &userAlice, - &userBob, - }, - }, - } - - stopCh := make(chan struct{}) - defer close(stopCh) - - for _, tc := range testCases { - kclientset := fake.NewSimpleClientset(tc.kubeObjects...) - fakeUserClient := fakeuserclient.NewSimpleClientset(tc.userObjects...) - fakeAuthorizationClient := fakeauthorizationclient.NewSimpleClientset(tc.authorizationObjects...) - - plugin, err := NewRestrictUsersAdmission() - if err != nil { - t.Errorf("unexpected error initializing admission plugin: %v", err) - } - - plugin.(*restrictUsersAdmission).kubeClient = kclientset - plugin.(*restrictUsersAdmission).roleBindingRestrictionsGetter = fakeAuthorizationClient.AuthorizationV1() - plugin.(*restrictUsersAdmission).userClient = fakeUserClient - plugin.(*restrictUsersAdmission).groupCache = fakeGroupCache{} - - err = admission.ValidateInitialization(plugin) - if err != nil { - t.Errorf("unexpected error validating admission plugin: %v", err) - } - - attributes := admission.NewAttributesRecord( - tc.object, - tc.oldObject, - tc.kind, - tc.namespace, - tc.name, - tc.resource, - tc.subresource, - admission.Create, - false, - &user.DefaultInfo{}, - ) - - err = plugin.(admission.ValidationInterface).Validate(attributes, nil) - switch { - case len(tc.expectedErr) == 0 && err == nil: - case len(tc.expectedErr) == 0 && err != nil: - t.Errorf("%s: unexpected error: %v", tc.name, err) - case len(tc.expectedErr) != 0 && err == nil: - t.Errorf("%s: missing error: %v", tc.name, tc.expectedErr) - case len(tc.expectedErr) != 0 && err != nil && - !strings.Contains(err.Error(), tc.expectedErr): - t.Errorf("%s: missing error: expected %v, got %v", - tc.name, tc.expectedErr, err) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker.go deleted file mode 100644 index 649374d41..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker.go +++ /dev/null @@ -1,302 +0,0 @@ -package restrictusers - -import ( - "fmt" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/kubernetes" - "k8s.io/kubernetes/pkg/apis/rbac" - - authorizationv1 "github.com/openshift/api/authorization/v1" - userv1 "github.com/openshift/api/user/v1" - userclient "github.com/openshift/client-go/user/clientset/versioned/typed/user/v1" -) - -// SubjectChecker determines whether rolebindings on a subject (user, group, or -// service account) are allowed in a project. -type SubjectChecker interface { - Allowed(rbac.Subject, *RoleBindingRestrictionContext) (bool, error) -} - -// UnionSubjectChecker represents the union of zero or more SubjectCheckers. -type UnionSubjectChecker []SubjectChecker - -// NewUnionSubjectChecker returns a new UnionSubjectChecker. -func NewUnionSubjectChecker(checkers []SubjectChecker) UnionSubjectChecker { - return UnionSubjectChecker(checkers) -} - -// Allowed determines whether the given subject is allowed in rolebindings in -// the project. -func (checkers UnionSubjectChecker) Allowed(subject rbac.Subject, ctx *RoleBindingRestrictionContext) (bool, error) { - errs := []error{} - for _, checker := range []SubjectChecker(checkers) { - allowed, err := checker.Allowed(subject, ctx) - if err != nil { - errs = append(errs, err) - } else if allowed { - return true, nil - } - } - - return false, kerrors.NewAggregate(errs) -} - -// RoleBindingRestrictionContext holds context that is used when determining -// whether a RoleBindingRestriction allows rolebindings on a particular subject. -type RoleBindingRestrictionContext struct { - userClient userclient.UserV1Interface - kclient kubernetes.Interface - - // groupCache maps user name to groups. - groupCache GroupCache - - // userToLabels maps user name to labels.Set. - userToLabelSet map[string]labels.Set - - // groupToLabels maps group name to labels.Set. - groupToLabelSet map[string]labels.Set - - // namespace is the namespace for which the RoleBindingRestriction makes - // determinations. - namespace string -} - -// NewRoleBindingRestrictionContext returns a new RoleBindingRestrictionContext -// object. -func newRoleBindingRestrictionContext(ns string, kc kubernetes.Interface, userClient userclient.UserV1Interface, groupCache GroupCache) (*RoleBindingRestrictionContext, error) { - return &RoleBindingRestrictionContext{ - namespace: ns, - kclient: kc, - userClient: userClient, - groupCache: groupCache, - userToLabelSet: map[string]labels.Set{}, - groupToLabelSet: map[string]labels.Set{}, - }, nil -} - -// labelSetForUser returns the label set for the given user subject. -func (ctx *RoleBindingRestrictionContext) labelSetForUser(subject rbac.Subject) (labels.Set, error) { - if subject.Kind != rbac.UserKind { - return labels.Set{}, fmt.Errorf("not a user: %q", subject.Name) - } - - labelSet, ok := ctx.userToLabelSet[subject.Name] - if ok { - return labelSet, nil - } - - user, err := ctx.userClient.Users().Get(subject.Name, metav1.GetOptions{}) - if err != nil { - return labels.Set{}, err - } - - ctx.userToLabelSet[subject.Name] = labels.Set(user.Labels) - - return ctx.userToLabelSet[subject.Name], nil -} - -// groupsForUser returns the groups for the given user subject. -func (ctx *RoleBindingRestrictionContext) groupsForUser(subject rbac.Subject) ([]*userv1.Group, error) { - if subject.Kind != rbac.UserKind { - return []*userv1.Group{}, fmt.Errorf("not a user: %q", subject.Name) - } - - return ctx.groupCache.GroupsFor(subject.Name) -} - -// labelSetForGroup returns the label set for the given group subject. -func (ctx *RoleBindingRestrictionContext) labelSetForGroup(subject rbac.Subject) (labels.Set, error) { - if subject.Kind != rbac.GroupKind { - return labels.Set{}, fmt.Errorf("not a group: %q", subject.Name) - } - - labelSet, ok := ctx.groupToLabelSet[subject.Name] - if ok { - return labelSet, nil - } - - group, err := ctx.userClient.Groups().Get(subject.Name, metav1.GetOptions{}) - if err != nil { - return labels.Set{}, err - } - - ctx.groupToLabelSet[subject.Name] = labels.Set(group.Labels) - - return ctx.groupToLabelSet[subject.Name], nil -} - -// UserSubjectChecker determines whether a user subject is allowed in -// rolebindings in the project. -type UserSubjectChecker struct { - userRestriction *authorizationv1.UserRestriction -} - -// NewUserSubjectChecker returns a new UserSubjectChecker. -func NewUserSubjectChecker(userRestriction *authorizationv1.UserRestriction) UserSubjectChecker { - return UserSubjectChecker{userRestriction: userRestriction} -} - -// Allowed determines whether the given user subject is allowed in rolebindings -// in the project. -func (checker UserSubjectChecker) Allowed(subject rbac.Subject, ctx *RoleBindingRestrictionContext) (bool, error) { - if subject.Kind != rbac.UserKind { - return false, nil - } - - for _, userName := range checker.userRestriction.Users { - if subject.Name == userName { - return true, nil - } - } - - if len(checker.userRestriction.Groups) != 0 { - subjectGroups, err := ctx.groupsForUser(subject) - if err != nil { - return false, err - } - - for _, groupName := range checker.userRestriction.Groups { - for _, group := range subjectGroups { - if group.Name == groupName { - return true, nil - } - } - } - } - - if len(checker.userRestriction.Selectors) != 0 { - labelSet, err := ctx.labelSetForUser(subject) - if err != nil { - return false, err - } - - for _, labelSelector := range checker.userRestriction.Selectors { - selector, err := metav1.LabelSelectorAsSelector(&labelSelector) - if err != nil { - return false, err - } - - if selector.Matches(labelSet) { - return true, nil - } - } - } - - return false, nil -} - -// GroupSubjectChecker determines whether a group subject is allowed in -// rolebindings in the project. -type GroupSubjectChecker struct { - groupRestriction *authorizationv1.GroupRestriction -} - -// NewGroupSubjectChecker returns a new GroupSubjectChecker. -func NewGroupSubjectChecker(groupRestriction *authorizationv1.GroupRestriction) GroupSubjectChecker { - return GroupSubjectChecker{groupRestriction: groupRestriction} -} - -// Allowed determines whether the given group subject is allowed in rolebindings -// in the project. -func (checker GroupSubjectChecker) Allowed(subject rbac.Subject, ctx *RoleBindingRestrictionContext) (bool, error) { - if subject.Kind != rbac.GroupKind { - return false, nil - } - - for _, groupName := range checker.groupRestriction.Groups { - if subject.Name == groupName { - return true, nil - } - } - - if len(checker.groupRestriction.Selectors) != 0 { - labelSet, err := ctx.labelSetForGroup(subject) - if err != nil { - return false, err - } - - for _, labelSelector := range checker.groupRestriction.Selectors { - selector, err := metav1.LabelSelectorAsSelector(&labelSelector) - if err != nil { - return false, err - } - - if selector.Matches(labelSet) { - return true, nil - } - } - } - - return false, nil -} - -// ServiceAccountSubjectChecker determines whether a serviceaccount subject is -// allowed in rolebindings in the project. -type ServiceAccountSubjectChecker struct { - serviceAccountRestriction *authorizationv1.ServiceAccountRestriction -} - -// NewServiceAccountSubjectChecker returns a new ServiceAccountSubjectChecker. -func NewServiceAccountSubjectChecker(serviceAccountRestriction *authorizationv1.ServiceAccountRestriction) ServiceAccountSubjectChecker { - return ServiceAccountSubjectChecker{ - serviceAccountRestriction: serviceAccountRestriction, - } -} - -// Allowed determines whether the given serviceaccount subject is allowed in -// rolebindings in the project. -func (checker ServiceAccountSubjectChecker) Allowed(subject rbac.Subject, ctx *RoleBindingRestrictionContext) (bool, error) { - if subject.Kind != rbac.ServiceAccountKind { - return false, nil - } - - subjectNamespace := subject.Namespace - if len(subjectNamespace) == 0 { - // If a RoleBinding has a subject that is a ServiceAccount with - // no namespace specified, the namespace will be defaulted to - // that of the RoleBinding. However, admission control plug-ins - // execute before this happens, so in order not to reject such - // subjects erroneously, we copy the logic here of using the - // RoleBinding's namespace if the subject's is empty. - subjectNamespace = ctx.namespace - } - - for _, namespace := range checker.serviceAccountRestriction.Namespaces { - if subjectNamespace == namespace { - return true, nil - } - } - - for _, serviceAccountRef := range checker.serviceAccountRestriction.ServiceAccounts { - serviceAccountNamespace := serviceAccountRef.Namespace - if len(serviceAccountNamespace) == 0 { - serviceAccountNamespace = ctx.namespace - } - - if subject.Name == serviceAccountRef.Name && - subjectNamespace == serviceAccountNamespace { - return true, nil - } - } - - return false, nil -} - -// NewSubjectChecker returns a new SubjectChecker. -func NewSubjectChecker(spec *authorizationv1.RoleBindingRestrictionSpec) (SubjectChecker, error) { - switch { - case spec.UserRestriction != nil: - return NewUserSubjectChecker(spec.UserRestriction), nil - - case spec.GroupRestriction != nil: - return NewGroupSubjectChecker(spec.GroupRestriction), nil - - case spec.ServiceAccountRestriction != nil: - return NewServiceAccountSubjectChecker(spec.ServiceAccountRestriction), nil - } - - return nil, fmt.Errorf("invalid RoleBindingRestrictionSpec: %v", spec) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker_test.go deleted file mode 100644 index 4580d3582..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/subjectchecker_test.go +++ /dev/null @@ -1,349 +0,0 @@ -package restrictusers - -import ( - "testing" - "time" - - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/kubernetes/fake" - "k8s.io/kubernetes/pkg/apis/rbac" - - authorizationv1 "github.com/openshift/api/authorization/v1" - userv1 "github.com/openshift/api/user/v1" - fakeuserclient "github.com/openshift/client-go/user/clientset/versioned/fake" -) - -func mustNewSubjectChecker(t *testing.T, spec *authorizationv1.RoleBindingRestrictionSpec) SubjectChecker { - checker, err := NewSubjectChecker(spec) - if err != nil { - t.Errorf("unexpected error from NewChecker: %v, spec: %#v", err, spec) - } - - return checker -} - -func TestSubjectCheckers(t *testing.T) { - var ( - userBobRef = rbac.Subject{ - Kind: rbac.UserKind, - Name: "Bob", - } - userAliceRef = rbac.Subject{ - Kind: rbac.UserKind, - Name: "Alice", - } - groupRef = rbac.Subject{ - Kind: rbac.GroupKind, - Name: "group", - } - serviceaccountRef = rbac.Subject{ - Kind: rbac.ServiceAccountKind, - Namespace: "namespace", - Name: "serviceaccount", - } - group = userv1.Group{ - ObjectMeta: metav1.ObjectMeta{ - Name: "group", - Labels: map[string]string{"baz": "quux"}, - }, - Users: []string{userBobRef.Name}, - } - userObjects = []runtime.Object{ - &userv1.User{ - ObjectMeta: metav1.ObjectMeta{ - Name: "Alice", - Labels: map[string]string{"foo": "bar"}, - }, - }, - &userv1.User{ - ObjectMeta: metav1.ObjectMeta{Name: "Bob"}, - Groups: []string{"group"}, - }, - &group, - } - kubeObjects = []runtime.Object{ - &corev1.ServiceAccount{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "namespace", - Name: "serviceaccount", - Labels: map[string]string{"xyzzy": "thud"}, - }, - }, - } - ) - - testCases := []struct { - name string - checker SubjectChecker - subject rbac.Subject - shouldAllow bool - }{ - { - name: "allow regular user by literal name match", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - UserRestriction: &authorizationv1.UserRestriction{ - Users: []string{userAliceRef.Name}, - }, - }), - subject: userAliceRef, - shouldAllow: true, - }, - { - name: "allow regular user by group membership", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - UserRestriction: &authorizationv1.UserRestriction{ - Groups: []string{groupRef.Name}, - }, - }), - subject: userBobRef, - shouldAllow: true, - }, - { - name: "prohibit regular user when another user matches on group membership", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - UserRestriction: &authorizationv1.UserRestriction{ - Groups: []string{groupRef.Name}, - }, - }), - subject: userAliceRef, - shouldAllow: false, - }, - { - name: "allow regular user by label selector match", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - UserRestriction: &authorizationv1.UserRestriction{ - Selectors: []metav1.LabelSelector{ - {MatchLabels: map[string]string{"foo": "bar"}}, - }, - }, - }), - subject: userAliceRef, - shouldAllow: true, - }, - { - name: "prohibit regular user when another user matches on label selector", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - UserRestriction: &authorizationv1.UserRestriction{ - Selectors: []metav1.LabelSelector{ - {MatchLabels: map[string]string{"foo": "bar"}}, - }, - }, - }), - subject: userBobRef, - shouldAllow: false, - }, - { - name: "allow regular group by literal name match", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - GroupRestriction: &authorizationv1.GroupRestriction{ - Groups: []string{groupRef.Name}, - }, - }), - subject: groupRef, - shouldAllow: true, - }, - { - name: "allow regular group by label selector match", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - GroupRestriction: &authorizationv1.GroupRestriction{ - Selectors: []metav1.LabelSelector{ - {MatchLabels: map[string]string{"baz": "quux"}}, - }, - }, - }), - subject: groupRef, - shouldAllow: true, - }, - { - name: "allow service account with explicit namespace by match on literal name and explicit namespace", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ - ServiceAccounts: []authorizationv1.ServiceAccountReference{ - { - Name: serviceaccountRef.Name, - Namespace: serviceaccountRef.Namespace, - }, - }, - }, - }), - subject: serviceaccountRef, - shouldAllow: true, - }, - { - name: "allow service account with explicit namespace by match on literal name and implicit namespace", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ - ServiceAccounts: []authorizationv1.ServiceAccountReference{ - {Name: serviceaccountRef.Name}, - }, - }, - }), - subject: serviceaccountRef, - shouldAllow: true, - }, - { - name: "prohibit service account with explicit namespace where literal name matches but explicit namespace does not", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ - ServiceAccounts: []authorizationv1.ServiceAccountReference{ - { - Namespace: serviceaccountRef.Namespace, - Name: serviceaccountRef.Name, - }, - }, - }, - }), - subject: rbac.Subject{ - Kind: rbac.ServiceAccountKind, - Namespace: "othernamespace", - Name: serviceaccountRef.Name, - }, - shouldAllow: false, - }, - { - name: "prohibit service account with explicit namespace where literal name matches but implicit namespace does not", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ - ServiceAccounts: []authorizationv1.ServiceAccountReference{ - {Name: serviceaccountRef.Name}, - }, - }, - }), - subject: rbac.Subject{ - Kind: rbac.ServiceAccountKind, - Namespace: "othernamespace", - Name: serviceaccountRef.Name, - }, - shouldAllow: false, - }, - { - name: "allow service account with implicit namespace by match on literal name and explicit namespace", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ - ServiceAccounts: []authorizationv1.ServiceAccountReference{ - { - Name: serviceaccountRef.Name, - Namespace: serviceaccountRef.Namespace, - }, - }, - }, - }), - subject: rbac.Subject{ - Kind: rbac.ServiceAccountKind, - Name: serviceaccountRef.Name, - }, - shouldAllow: true, - }, - { - name: "allow service account with implicit namespace by match on literal name and implicit namespace", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ - ServiceAccounts: []authorizationv1.ServiceAccountReference{ - {Name: serviceaccountRef.Name}, - }, - }, - }), - subject: rbac.Subject{ - Kind: rbac.ServiceAccountKind, - Name: serviceaccountRef.Name, - }, - shouldAllow: true, - }, - { - name: "prohibit service account with implicit namespace where literal name matches but explicit namespace does not", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ - ServiceAccounts: []authorizationv1.ServiceAccountReference{ - { - Namespace: "othernamespace", - Name: serviceaccountRef.Name, - }, - }, - }, - }), - subject: rbac.Subject{ - Kind: rbac.ServiceAccountKind, - Name: serviceaccountRef.Name, - }, - shouldAllow: false, - }, - { - name: "prohibit service account with explicit namespace where explicit namespace matches but literal name does not", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ - ServiceAccounts: []authorizationv1.ServiceAccountReference{ - { - Namespace: serviceaccountRef.Namespace, - Name: "othername", - }, - }, - }, - }), - subject: serviceaccountRef, - shouldAllow: false, - }, - { - name: "allow service account by match on namespace", - checker: mustNewSubjectChecker(t, - &authorizationv1.RoleBindingRestrictionSpec{ - ServiceAccountRestriction: &authorizationv1.ServiceAccountRestriction{ - Namespaces: []string{serviceaccountRef.Namespace}, - }, - }), - subject: serviceaccountRef, - shouldAllow: true, - }, - } - - stopCh := make(chan struct{}) - defer close(stopCh) - - kclient := fake.NewSimpleClientset(kubeObjects...) - fakeUserClient := fakeuserclient.NewSimpleClientset(userObjects...) - groupCache := fakeGroupCache{groups: []userv1.Group{group}} - // This is a terrible, horrible, no-good, very bad hack to avoid a race - // condition between the test "allow regular user by group membership" - // and the group cache's initialisation. - for { - if groups, _ := groupCache.GroupsFor(group.Users[0]); len(groups) == 1 { - break - } - time.Sleep(10 * time.Millisecond) - } - - ctx, err := newRoleBindingRestrictionContext("namespace", - kclient, fakeUserClient.UserV1(), groupCache) - if err != nil { - t.Errorf("unexpected error: %v", err) - } - - for _, tc := range testCases { - allowed, err := tc.checker.Allowed(tc.subject, ctx) - if err != nil { - t.Errorf("test case %v: unexpected error: %v", tc.name, err) - } - if allowed && !tc.shouldAllow { - t.Errorf("test case %v: subject allowed but should be prohibited", tc.name) - } - if !allowed && tc.shouldAllow { - t.Errorf("test case %v: subject prohibited but should be allowed", tc.name) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/usercache/groups.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/usercache/groups.go deleted file mode 100644 index 791bfc3ab..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/usercache/groups.go +++ /dev/null @@ -1,49 +0,0 @@ -package usercache - -import ( - "fmt" - - "k8s.io/client-go/tools/cache" - - userapi "github.com/openshift/api/user/v1" - userinformer "github.com/openshift/client-go/user/informers/externalversions/user/v1" -) - -// GroupCache is a skin on an indexer to provide the reverse index from user to groups. -// Once we work out a cleaner way to extend a lister, this should live there. -type GroupCache struct { - indexer cache.Indexer -} - -const ByUserIndexName = "ByUser" - -// ByUserIndexKeys is cache.IndexFunc for Groups that will index groups by User, so that a direct cache lookup -// using a User.Name will return all Groups that User is a member of -func ByUserIndexKeys(obj interface{}) ([]string, error) { - group, ok := obj.(*userapi.Group) - if !ok { - return nil, fmt.Errorf("unexpected type: %v", obj) - } - - return group.Users, nil -} - -func NewGroupCache(groupInformer userinformer.GroupInformer) *GroupCache { - return &GroupCache{ - indexer: groupInformer.Informer().GetIndexer(), - } -} - -func (c *GroupCache) GroupsFor(username string) ([]*userapi.Group, error) { - objs, err := c.indexer.ByIndex(ByUserIndexName, username) - if err != nil { - return nil, err - } - - groups := make([]*userapi.Group, len(objs)) - for i := range objs { - groups[i] = objs[i].(*userapi.Group) - } - - return groups, nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/doc.go deleted file mode 100644 index 7f2a6f888..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package api is the internal version of the API. -package clusterresourceoverride diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/name.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/name.go deleted file mode 100644 index f136def58..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/name.go +++ /dev/null @@ -1,4 +0,0 @@ -package clusterresourceoverride - -const PluginName = "autoscaling.openshift.io/ClusterResourceOverride" -const ConfigKind = "ClusterResourceOverrideConfig" diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/register.go deleted file mode 100644 index 5308853cf..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/register.go +++ /dev/null @@ -1,23 +0,0 @@ -package clusterresourceoverride - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -var GroupVersion = schema.GroupVersion{Group: "autoscaling.openshift.io", Version: runtime.APIVersionInternal} - -var ( - schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - Install = schemeBuilder.AddToScheme -) - -// Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &ClusterResourceOverrideConfig{}, - ) - return nil -} - -func (obj *ClusterResourceOverrideConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/types.go deleted file mode 100644 index 3718e265c..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/types.go +++ /dev/null @@ -1,24 +0,0 @@ -package clusterresourceoverride - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ClusterResourceOverrideConfig is the configuration for the ClusterResourceOverride -// admission controller which overrides user-provided container request/limit values. -type ClusterResourceOverrideConfig struct { - metav1.TypeMeta - // For each of the following, if a non-zero ratio is specified then the initial - // value (if any) in the pod spec is overwritten according to the ratio. - // LimitRange defaults are merged prior to the override. - // - // LimitCPUToMemoryPercent (if > 0) overrides the CPU limit to a ratio of the memory limit; - // 100% overrides CPU to 1 core per 1GiB of RAM. This is done before overriding the CPU request. - LimitCPUToMemoryPercent int64 - // CPURequestToLimitPercent (if > 0) overrides CPU request to a percentage of CPU limit - CPURequestToLimitPercent int64 - // MemoryRequestToLimitPercent (if > 0) overrides memory request to a percentage of memory limit - MemoryRequestToLimitPercent int64 -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/doc.go deleted file mode 100644 index 124d5620f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package v1 is the v1 version of the API. -package v1 diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/register.go deleted file mode 100644 index 2a2c58430..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/register.go +++ /dev/null @@ -1,27 +0,0 @@ -package v1 - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride" -) - -func (obj *ClusterResourceOverrideConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } - -var GroupVersion = schema.GroupVersion{Group: "autoscaling.openshift.io", Version: "v1"} - -var ( - schemeBuilder = runtime.NewSchemeBuilder( - addKnownTypes, - clusterresourceoverride.Install, - ) - Install = schemeBuilder.AddToScheme -) - -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &ClusterResourceOverrideConfig{}, - ) - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/swagger_doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/swagger_doc.go deleted file mode 100644 index f909b0db2..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/swagger_doc.go +++ /dev/null @@ -1,17 +0,0 @@ -package v1 - -// This file contains methods that can be used by the go-restful package to generate Swagger -// documentation for the object types found in 'types.go' This file is automatically generated -// by hack/update-generated-swagger-descriptions.sh and should be run after a full build of OpenShift. -// ==== DO NOT EDIT THIS FILE MANUALLY ==== - -var map_ClusterResourceOverrideConfig = map[string]string{ - "": "ClusterResourceOverrideConfig is the configuration for the ClusterResourceOverride admission controller which overrides user-provided container request/limit values.", - "limitCPUToMemoryPercent": "For each of the following, if a non-zero ratio is specified then the initial value (if any) in the pod spec is overwritten according to the ratio. LimitRange defaults are merged prior to the override.\n\nLimitCPUToMemoryPercent (if > 0) overrides the CPU limit to a ratio of the memory limit; 100% overrides CPU to 1 core per 1GiB of RAM. This is done before overriding the CPU request.", - "cpuRequestToLimitPercent": "CPURequestToLimitPercent (if > 0) overrides CPU request to a percentage of CPU limit", - "memoryRequestToLimitPercent": "MemoryRequestToLimitPercent (if > 0) overrides memory request to a percentage of memory limit", -} - -func (ClusterResourceOverrideConfig) SwaggerDoc() map[string]string { - return map_ClusterResourceOverrideConfig -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/types.go deleted file mode 100644 index 9a5603417..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/types.go +++ /dev/null @@ -1,24 +0,0 @@ -package v1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ClusterResourceOverrideConfig is the configuration for the ClusterResourceOverride -// admission controller which overrides user-provided container request/limit values. -type ClusterResourceOverrideConfig struct { - metav1.TypeMeta `json:",inline"` - // For each of the following, if a non-zero ratio is specified then the initial - // value (if any) in the pod spec is overwritten according to the ratio. - // LimitRange defaults are merged prior to the override. - // - // LimitCPUToMemoryPercent (if > 0) overrides the CPU limit to a ratio of the memory limit; - // 100% overrides CPU to 1 core per 1GiB of RAM. This is done before overriding the CPU request. - LimitCPUToMemoryPercent int64 `json:"limitCPUToMemoryPercent"` - // CPURequestToLimitPercent (if > 0) overrides CPU request to a percentage of CPU limit - CPURequestToLimitPercent int64 `json:"cpuRequestToLimitPercent"` - // MemoryRequestToLimitPercent (if > 0) overrides memory request to a percentage of memory limit - MemoryRequestToLimitPercent int64 `json:"memoryRequestToLimitPercent"` -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.deepcopy.go deleted file mode 100644 index 14255bad2..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1/zz_generated.deepcopy.go +++ /dev/null @@ -1,34 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterResourceOverrideConfig) DeepCopyInto(out *ClusterResourceOverrideConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterResourceOverrideConfig. -func (in *ClusterResourceOverrideConfig) DeepCopy() *ClusterResourceOverrideConfig { - if in == nil { - return nil - } - out := new(ClusterResourceOverrideConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ClusterResourceOverrideConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/validation/validation.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/validation/validation.go deleted file mode 100644 index 14cdcdd58..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/validation/validation.go +++ /dev/null @@ -1,27 +0,0 @@ -package validation - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride" -) - -func Validate(config *clusterresourceoverride.ClusterResourceOverrideConfig) field.ErrorList { - allErrs := field.ErrorList{} - if config == nil { - return allErrs - } - if config.LimitCPUToMemoryPercent == 0 && config.CPURequestToLimitPercent == 0 && config.MemoryRequestToLimitPercent == 0 { - allErrs = append(allErrs, field.Forbidden(field.NewPath(clusterresourceoverride.PluginName), "plugin enabled but no percentages were specified")) - } - if config.LimitCPUToMemoryPercent < 0 { - allErrs = append(allErrs, field.Invalid(field.NewPath(clusterresourceoverride.PluginName, "LimitCPUToMemoryPercent"), config.LimitCPUToMemoryPercent, "must be positive")) - } - if config.CPURequestToLimitPercent < 0 || config.CPURequestToLimitPercent > 100 { - allErrs = append(allErrs, field.Invalid(field.NewPath(clusterresourceoverride.PluginName, "CPURequestToLimitPercent"), config.CPURequestToLimitPercent, "must be between 0 and 100")) - } - if config.MemoryRequestToLimitPercent < 0 || config.MemoryRequestToLimitPercent > 100 { - allErrs = append(allErrs, field.Invalid(field.NewPath(clusterresourceoverride.PluginName, "MemoryRequestToLimitPercent"), config.MemoryRequestToLimitPercent, "must be between 0 and 100")) - } - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/zz_generated.deepcopy.go deleted file mode 100644 index 09414272c..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/zz_generated.deepcopy.go +++ /dev/null @@ -1,34 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package clusterresourceoverride - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterResourceOverrideConfig) DeepCopyInto(out *ClusterResourceOverrideConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterResourceOverrideConfig. -func (in *ClusterResourceOverrideConfig) DeepCopy() *ClusterResourceOverrideConfig { - if in == nil { - return nil - } - out := new(ClusterResourceOverrideConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ClusterResourceOverrideConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/doc.go deleted file mode 100644 index 2eb498613..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package api is the internal version of the API. -package runonceduration diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/register.go deleted file mode 100644 index 379c2be1e..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/register.go +++ /dev/null @@ -1,34 +0,0 @@ -package runonceduration - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// SchemeGroupVersion is group version used to register these objects -var GroupVersion = schema.GroupVersion{Group: "autoscaling.openshift.io", Version: runtime.APIVersionInternal} - -// Kind takes an unqualified kind and returns back a Group qualified GroupKind -func Kind(kind string) schema.GroupKind { - return GroupVersion.WithKind(kind).GroupKind() -} - -// Resource takes an unqualified resource and returns back a Group qualified GroupResource -func Resource(resource string) schema.GroupResource { - return GroupVersion.WithResource(resource).GroupResource() -} - -var ( - schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - Install = schemeBuilder.AddToScheme -) - -// Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &RunOnceDurationConfig{}, - ) - return nil -} - -func (obj *RunOnceDurationConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/types.go deleted file mode 100644 index 56422befa..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/types.go +++ /dev/null @@ -1,26 +0,0 @@ -package runonceduration - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// RunOnceDurationConfig is the configuration for the RunOnceDuration plugin. -// It specifies a maximum value for ActiveDeadlineSeconds for a run-once pod. -// The project that contains the pod may specify a different setting. That setting will -// take precedence over the one configured for the plugin here. -type RunOnceDurationConfig struct { - metav1.TypeMeta - - // ActiveDeadlineSecondsLimit is the maximum value to set on containers of run-once pods - // Only a positive value is valid. Absence of a value means that the plugin - // won't make any changes to the pod - ActiveDeadlineSecondsLimit *int64 -} - -// ActiveDeadlineSecondsLimitAnnotation can be set on a project to limit the number of -// seconds that a run-once pod can be active in that project -// TODO: this label needs to change to reflect its function. It's a limit, not an override. -// It is kept this way for compatibility. Only change it in a new version of the API. -const ActiveDeadlineSecondsLimitAnnotation = "openshift.io/active-deadline-seconds-override" diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/conversion.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/conversion.go deleted file mode 100644 index 5109d606d..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/conversion.go +++ /dev/null @@ -1,21 +0,0 @@ -package v1 - -import ( - "k8s.io/apimachinery/pkg/conversion" - "k8s.io/apimachinery/pkg/runtime" - - internal "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" -) - -func addConversionFuncs(scheme *runtime.Scheme) error { - return scheme.AddConversionFuncs( - func(in *RunOnceDurationConfig, out *internal.RunOnceDurationConfig, s conversion.Scope) error { - out.ActiveDeadlineSecondsLimit = in.ActiveDeadlineSecondsOverride - return nil - }, - func(in *internal.RunOnceDurationConfig, out *RunOnceDurationConfig, s conversion.Scope) error { - out.ActiveDeadlineSecondsOverride = in.ActiveDeadlineSecondsLimit - return nil - }, - ) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/doc.go deleted file mode 100644 index 124d5620f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package v1 is the v1 version of the API. -package v1 diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/register.go deleted file mode 100644 index 51c9a20cf..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/register.go +++ /dev/null @@ -1,29 +0,0 @@ -package v1 - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" -) - -func (obj *RunOnceDurationConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } - -var GroupVersion = schema.GroupVersion{Group: "autoscaling.openshift.io", Version: "v1"} - -var ( - schemeBuilder = runtime.NewSchemeBuilder( - addKnownTypes, - runonceduration.Install, - - addConversionFuncs, - ) - Install = schemeBuilder.AddToScheme -) - -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &RunOnceDurationConfig{}, - ) - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/swagger_doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/swagger_doc.go deleted file mode 100644 index 1cb7c3cdb..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/swagger_doc.go +++ /dev/null @@ -1,15 +0,0 @@ -package v1 - -// This file contains methods that can be used by the go-restful package to generate Swagger -// documentation for the object types found in 'types.go' This file is automatically generated -// by hack/update-generated-swagger-descriptions.sh and should be run after a full build of OpenShift. -// ==== DO NOT EDIT THIS FILE MANUALLY ==== - -var map_RunOnceDurationConfig = map[string]string{ - "": "RunOnceDurationConfig is the configuration for the RunOnceDuration plugin. It specifies a maximum value for ActiveDeadlineSeconds for a run-once pod. The project that contains the pod may specify a different setting. That setting will take precedence over the one configured for the plugin here.", - "activeDeadlineSecondsOverride": "ActiveDeadlineSecondsOverride is the maximum value to set on containers of run-once pods Only a positive value is valid. Absence of a value means that the plugin won't make any changes to the pod It is kept this way for compatibility. Only change it in a new version of the API.", -} - -func (RunOnceDurationConfig) SwaggerDoc() map[string]string { - return map_RunOnceDurationConfig -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/types.go deleted file mode 100644 index 4cfa3823b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/types.go +++ /dev/null @@ -1,22 +0,0 @@ -package v1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// RunOnceDurationConfig is the configuration for the RunOnceDuration plugin. -// It specifies a maximum value for ActiveDeadlineSeconds for a run-once pod. -// The project that contains the pod may specify a different setting. That setting will -// take precedence over the one configured for the plugin here. -type RunOnceDurationConfig struct { - metav1.TypeMeta `json:",inline"` - - // ActiveDeadlineSecondsOverride is the maximum value to set on containers of run-once pods - // Only a positive value is valid. Absence of a value means that the plugin - // won't make any changes to the pod - // TODO: change the external name of this field to reflect that it is a limit, not an override - // It is kept this way for compatibility. Only change it in a new version of the API. - ActiveDeadlineSecondsOverride *int64 `json:"activeDeadlineSecondsOverride,omitempty" description:"maximum value for activeDeadlineSeconds in run-once pods"` -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.deepcopy.go deleted file mode 100644 index 3000ba62b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1/zz_generated.deepcopy.go +++ /dev/null @@ -1,39 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RunOnceDurationConfig) DeepCopyInto(out *RunOnceDurationConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.ActiveDeadlineSecondsOverride != nil { - in, out := &in.ActiveDeadlineSecondsOverride, &out.ActiveDeadlineSecondsOverride - *out = new(int64) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunOnceDurationConfig. -func (in *RunOnceDurationConfig) DeepCopy() *RunOnceDurationConfig { - if in == nil { - return nil - } - out := new(RunOnceDurationConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *RunOnceDurationConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation.go deleted file mode 100644 index 2291e3483..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation.go +++ /dev/null @@ -1,18 +0,0 @@ -package validation - -import ( - "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" - "k8s.io/apimachinery/pkg/util/validation/field" -) - -// ValidateRunOnceDurationConfig validates the RunOnceDuration plugin configuration -func ValidateRunOnceDurationConfig(config *runonceduration.RunOnceDurationConfig) field.ErrorList { - allErrs := field.ErrorList{} - if config == nil || config.ActiveDeadlineSecondsLimit == nil { - return allErrs - } - if *config.ActiveDeadlineSecondsLimit <= 0 { - allErrs = append(allErrs, field.Invalid(field.NewPath("activeDeadlineSecondsOverride"), config.ActiveDeadlineSecondsLimit, "must be greater than 0")) - } - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation_test.go deleted file mode 100644 index 2b640a1db..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation/validation_test.go +++ /dev/null @@ -1,29 +0,0 @@ -package validation - -import ( - "testing" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" -) - -func TestRunOnceDurationConfigValidation(t *testing.T) { - // Check invalid duration returns an error - var invalidSecs int64 = -1 - invalidConfig := &runonceduration.RunOnceDurationConfig{ - ActiveDeadlineSecondsLimit: &invalidSecs, - } - errs := ValidateRunOnceDurationConfig(invalidConfig) - if len(errs) == 0 { - t.Errorf("Did not get expected error on invalid config") - } - - // Check that valid duration returns no error - var validSecs int64 = 5 - validConfig := &runonceduration.RunOnceDurationConfig{ - ActiveDeadlineSecondsLimit: &validSecs, - } - errs = ValidateRunOnceDurationConfig(validConfig) - if len(errs) > 0 { - t.Errorf("Unexpected error on valid config") - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/zz_generated.deepcopy.go deleted file mode 100644 index bbb978de8..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/zz_generated.deepcopy.go +++ /dev/null @@ -1,39 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package runonceduration - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RunOnceDurationConfig) DeepCopyInto(out *RunOnceDurationConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.ActiveDeadlineSecondsLimit != nil { - in, out := &in.ActiveDeadlineSecondsLimit, &out.ActiveDeadlineSecondsLimit - *out = new(int64) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RunOnceDurationConfig. -func (in *RunOnceDurationConfig) DeepCopy() *RunOnceDurationConfig { - if in == nil { - return nil - } - out := new(RunOnceDurationConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *RunOnceDurationConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission.go deleted file mode 100644 index 8c6032ac6..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission.go +++ /dev/null @@ -1,340 +0,0 @@ -package clusterresourceoverride - -import ( - "fmt" - "io" - "strings" - - "github.com/openshift/library-go/pkg/config/helpers" - v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1" - - "k8s.io/klog" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/client-go/informers" - "k8s.io/client-go/kubernetes" - corev1listers "k8s.io/client-go/listers/core/v1" - coreapi "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/kubernetes/plugin/pkg/admission/limitranger" - - api "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/validation" -) - -const ( - clusterResourceOverrideAnnotation = "autoscaling.openshift.io/cluster-resource-override-enabled" - cpuBaseScaleFactor = 1000.0 / (1024.0 * 1024.0 * 1024.0) // 1000 milliCores per 1GiB -) - -var ( - cpuFloor = resource.MustParse("1m") - memFloor = resource.MustParse("1Mi") -) - -func Register(plugins *admission.Plugins) { - plugins.Register(api.PluginName, - func(config io.Reader) (admission.Interface, error) { - pluginConfig, err := ReadConfig(config) - if err != nil { - return nil, err - } - if pluginConfig == nil { - klog.Infof("Admission plugin %q is not configured so it will be disabled.", api.PluginName) - return nil, nil - } - return newClusterResourceOverride(pluginConfig) - }) -} - -type internalConfig struct { - limitCPUToMemoryRatio float64 - cpuRequestToLimitRatio float64 - memoryRequestToLimitRatio float64 -} -type clusterResourceOverridePlugin struct { - *admission.Handler - config *internalConfig - nsLister corev1listers.NamespaceLister - LimitRanger *limitranger.LimitRanger - limitRangesLister corev1listers.LimitRangeLister -} - -var _ = initializer.WantsExternalKubeInformerFactory(&clusterResourceOverridePlugin{}) -var _ = initializer.WantsExternalKubeClientSet(&clusterResourceOverridePlugin{}) -var _ = admission.MutationInterface(&clusterResourceOverridePlugin{}) -var _ = admission.ValidationInterface(&clusterResourceOverridePlugin{}) - -// newClusterResourceOverride returns an admission controller for containers that -// configurably overrides container resource request/limits -func newClusterResourceOverride(config *api.ClusterResourceOverrideConfig) (admission.Interface, error) { - klog.V(2).Infof("%s admission controller loaded with config: %v", api.PluginName, config) - var internal *internalConfig - if config != nil { - internal = &internalConfig{ - limitCPUToMemoryRatio: float64(config.LimitCPUToMemoryPercent) / 100, - cpuRequestToLimitRatio: float64(config.CPURequestToLimitPercent) / 100, - memoryRequestToLimitRatio: float64(config.MemoryRequestToLimitPercent) / 100, - } - } - - limitRanger, err := limitranger.NewLimitRanger(nil) - if err != nil { - return nil, err - } - - return &clusterResourceOverridePlugin{ - Handler: admission.NewHandler(admission.Create), - config: internal, - LimitRanger: limitRanger, - }, nil -} - -func (d *clusterResourceOverridePlugin) SetExternalKubeClientSet(c kubernetes.Interface) { - d.LimitRanger.SetExternalKubeClientSet(c) -} - -func (d *clusterResourceOverridePlugin) SetExternalKubeInformerFactory(kubeInformers informers.SharedInformerFactory) { - d.LimitRanger.SetExternalKubeInformerFactory(kubeInformers) - d.limitRangesLister = kubeInformers.Core().V1().LimitRanges().Lister() - d.nsLister = kubeInformers.Core().V1().Namespaces().Lister() -} - -func ReadConfig(configFile io.Reader) (*api.ClusterResourceOverrideConfig, error) { - obj, err := helpers.ReadYAMLToInternal(configFile, api.Install, v1.Install) - if err != nil { - klog.V(5).Infof("%s error reading config: %v", api.PluginName, err) - return nil, err - } - if obj == nil { - return nil, nil - } - config, ok := obj.(*api.ClusterResourceOverrideConfig) - if !ok { - return nil, fmt.Errorf("unexpected config object: %#v", obj) - } - klog.V(5).Infof("%s config is: %v", api.PluginName, config) - if errs := validation.Validate(config); len(errs) > 0 { - return nil, errs.ToAggregate() - } - - return config, nil -} - -func (a *clusterResourceOverridePlugin) ValidateInitialization() error { - if a.nsLister == nil { - return fmt.Errorf("%s did not get a namespace lister", api.PluginName) - } - return a.LimitRanger.ValidateInitialization() -} - -// this a real shame to be special cased. -var ( - forbiddenNames = []string{"openshift", "kubernetes", "kube"} - forbiddenPrefixes = []string{"openshift-", "kubernetes-", "kube-"} -) - -func isExemptedNamespace(name string) bool { - for _, s := range forbiddenNames { - if name == s { - return true - } - } - for _, s := range forbiddenPrefixes { - if strings.HasPrefix(name, s) { - return true - } - } - return false -} - -func (a *clusterResourceOverridePlugin) Admit(attr admission.Attributes, o admission.ObjectInterfaces) error { - return a.admit(attr, true, o) -} - -func (a *clusterResourceOverridePlugin) Validate(attr admission.Attributes, o admission.ObjectInterfaces) error { - return a.admit(attr, false, o) -} - -// TODO this will need to update when we have pod requests/limits -func (a *clusterResourceOverridePlugin) admit(attr admission.Attributes, mutationAllowed bool, o admission.ObjectInterfaces) error { - klog.V(6).Infof("%s admission controller is invoked", api.PluginName) - if a.config == nil || attr.GetResource().GroupResource() != coreapi.Resource("pods") || attr.GetSubresource() != "" { - return nil // not applicable - } - pod, ok := attr.GetObject().(*coreapi.Pod) - if !ok { - return admission.NewForbidden(attr, fmt.Errorf("unexpected object: %#v", attr.GetObject())) - } - klog.V(5).Infof("%s is looking at creating pod %s in project %s", api.PluginName, pod.Name, attr.GetNamespace()) - - // allow annotations on project to override - ns, err := a.nsLister.Get(attr.GetNamespace()) - if err != nil { - klog.Warningf("%s got an error retrieving namespace: %v", api.PluginName, err) - return admission.NewForbidden(attr, err) // this should not happen though - } - - projectEnabledPlugin, exists := ns.Annotations[clusterResourceOverrideAnnotation] - if exists && projectEnabledPlugin != "true" { - klog.V(5).Infof("%s is disabled for project %s", api.PluginName, attr.GetNamespace()) - return nil // disabled for this project, do nothing - } - - if isExemptedNamespace(ns.Name) { - klog.V(5).Infof("%s is skipping exempted project %s", api.PluginName, attr.GetNamespace()) - return nil // project is exempted, do nothing - } - - namespaceLimits := []*corev1.LimitRange{} - - if a.limitRangesLister != nil { - limits, err := a.limitRangesLister.LimitRanges(attr.GetNamespace()).List(labels.Everything()) - if err != nil { - return err - } - namespaceLimits = limits - } - - // Don't mutate resource requirements below the namespace - // limit minimums. - nsCPUFloor := minResourceLimits(namespaceLimits, corev1.ResourceCPU) - nsMemFloor := minResourceLimits(namespaceLimits, corev1.ResourceMemory) - - // Reuse LimitRanger logic to apply limit/req defaults from the project. Ignore validation - // errors, assume that LimitRanger will run after this plugin to validate. - klog.V(5).Infof("%s: initial pod limits are: %#v", api.PluginName, pod.Spec) - if err := a.LimitRanger.Admit(attr, o); err != nil { - klog.V(5).Infof("%s: error from LimitRanger: %#v", api.PluginName, err) - } - klog.V(5).Infof("%s: pod limits after LimitRanger: %#v", api.PluginName, pod.Spec) - for i := range pod.Spec.InitContainers { - if err := updateContainerResources(a.config, &pod.Spec.InitContainers[i], nsCPUFloor, nsMemFloor, mutationAllowed); err != nil { - return admission.NewForbidden(attr, fmt.Errorf("spec.initContainers[%d].%v", i, err)) - } - } - for i := range pod.Spec.Containers { - if err := updateContainerResources(a.config, &pod.Spec.Containers[i], nsCPUFloor, nsMemFloor, mutationAllowed); err != nil { - return admission.NewForbidden(attr, fmt.Errorf("spec.containers[%d].%v", i, err)) - } - } - klog.V(5).Infof("%s: pod limits after overrides are: %#v", api.PluginName, pod.Spec) - return nil -} - -func updateContainerResources(config *internalConfig, container *coreapi.Container, nsCPUFloor, nsMemFloor *resource.Quantity, mutationAllowed bool) error { - resources := container.Resources - memLimit, memFound := resources.Limits[coreapi.ResourceMemory] - if memFound && config.memoryRequestToLimitRatio != 0 { - // memory is measured in whole bytes. - // the plugin rounds down to the nearest MiB rather than bytes to improve ease of use for end-users. - amount := memLimit.Value() * int64(config.memoryRequestToLimitRatio*100) / 100 - // TODO: move into resource.Quantity - var mod int64 - switch memLimit.Format { - case resource.BinarySI: - mod = 1024 * 1024 - default: - mod = 1000 * 1000 - } - if rem := amount % mod; rem != 0 { - amount = amount - rem - } - q := resource.NewQuantity(int64(amount), memLimit.Format) - if memFloor.Cmp(*q) > 0 { - q = memFloor.Copy() - } - if nsMemFloor != nil && q.Cmp(*nsMemFloor) < 0 { - klog.V(5).Infof("%s: %s pod limit %q below namespace limit; setting limit to %q", api.PluginName, corev1.ResourceMemory, q.String(), nsMemFloor.String()) - q = nsMemFloor.Copy() - } - if err := applyQuantity(resources.Requests, corev1.ResourceMemory, *q, mutationAllowed); err != nil { - return fmt.Errorf("resources.requests.%s %v", corev1.ResourceMemory, err) - } - } - if memFound && config.limitCPUToMemoryRatio != 0 { - amount := float64(memLimit.Value()) * config.limitCPUToMemoryRatio * cpuBaseScaleFactor - q := resource.NewMilliQuantity(int64(amount), resource.DecimalSI) - if cpuFloor.Cmp(*q) > 0 { - q = cpuFloor.Copy() - } - if nsCPUFloor != nil && q.Cmp(*nsCPUFloor) < 0 { - klog.V(5).Infof("%s: %s pod limit %q below namespace limit; setting limit to %q", api.PluginName, corev1.ResourceCPU, q.String(), nsCPUFloor.String()) - q = nsCPUFloor.Copy() - } - if err := applyQuantity(resources.Limits, corev1.ResourceCPU, *q, mutationAllowed); err != nil { - return fmt.Errorf("resources.limits.%s %v", corev1.ResourceCPU, err) - } - } - - cpuLimit, cpuFound := resources.Limits[coreapi.ResourceCPU] - if cpuFound && config.cpuRequestToLimitRatio != 0 { - amount := float64(cpuLimit.MilliValue()) * config.cpuRequestToLimitRatio - q := resource.NewMilliQuantity(int64(amount), cpuLimit.Format) - if cpuFloor.Cmp(*q) > 0 { - q = cpuFloor.Copy() - } - if nsCPUFloor != nil && q.Cmp(*nsCPUFloor) < 0 { - klog.V(5).Infof("%s: %s pod limit %q below namespace limit; setting limit to %q", api.PluginName, corev1.ResourceCPU, q.String(), nsCPUFloor.String()) - q = nsCPUFloor.Copy() - } - if err := applyQuantity(resources.Requests, corev1.ResourceCPU, *q, mutationAllowed); err != nil { - return fmt.Errorf("resources.requests.%s %v", corev1.ResourceCPU, err) - } - } - - return nil -} - -func applyQuantity(l coreapi.ResourceList, r corev1.ResourceName, v resource.Quantity, mutationAllowed bool) error { - if mutationAllowed { - l[coreapi.ResourceName(r)] = v - return nil - } - - if oldValue, ok := l[coreapi.ResourceName(r)]; !ok { - return fmt.Errorf("mutated, expected: %v, now absent", v) - } else if oldValue.Cmp(v) != 0 { - return fmt.Errorf("mutated, expected: %v, got %v", v, oldValue) - } - - return nil -} - -// minResourceLimits finds the Min limit for resourceName. Nil is -// returned if limitRanges is empty or limits contains no resourceName -// limits. -func minResourceLimits(limitRanges []*corev1.LimitRange, resourceName corev1.ResourceName) *resource.Quantity { - limits := []*resource.Quantity{} - - for _, limitRange := range limitRanges { - for _, limit := range limitRange.Spec.Limits { - if limit.Type == corev1.LimitTypeContainer { - if limit, found := limit.Min[resourceName]; found { - limits = append(limits, limit.Copy()) - } - } - } - } - - if len(limits) == 0 { - return nil - } - - return minQuantity(limits) -} - -func minQuantity(quantities []*resource.Quantity) *resource.Quantity { - min := quantities[0].Copy() - - for i := range quantities { - if quantities[i].Cmp(*min) < 0 { - min = quantities[i].Copy() - } - } - - return min -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission_test.go deleted file mode 100644 index 82bbe2e99..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/admission_test.go +++ /dev/null @@ -1,506 +0,0 @@ -package clusterresourceoverride - -import ( - "bytes" - "fmt" - "io" - "reflect" - "testing" - - "github.com/openshift/library-go/pkg/config/helpers" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride" - clusterresourceoverridev1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/clusterresourceoverride/validation" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/authentication/user" - corev1listers "k8s.io/client-go/listers/core/v1" - "k8s.io/client-go/tools/cache" - kapi "k8s.io/kubernetes/pkg/apis/core" -) - -const ( - yamlConfig = ` -apiVersion: autoscaling.openshift.io/v1 -kind: ClusterResourceOverrideConfig -limitCPUToMemoryPercent: 100 -cpuRequestToLimitPercent: 10 -memoryRequestToLimitPercent: 25 -` - invalidConfig = ` -apiVersion: autoscaling.openshift.io/v1 -kind: ClusterResourceOverrideConfig -cpuRequestToLimitPercent: 200 -` - invalidConfig2 = ` -apiVersion: autoscaling.openshift.io/v1 -kind: ClusterResourceOverrideConfig -` -) - -var ( - deserializedYamlConfig = &clusterresourceoverride.ClusterResourceOverrideConfig{ - LimitCPUToMemoryPercent: 100, - CPURequestToLimitPercent: 10, - MemoryRequestToLimitPercent: 25, - } -) - -func TestConfigReader(t *testing.T) { - initialConfig := testConfig(10, 20, 30) - serializedConfig, serializationErr := helpers.WriteYAML(initialConfig, clusterresourceoverridev1.Install) - if serializationErr != nil { - t.Fatalf("WriteYAML: config serialize failed: %v", serializationErr) - } - - tests := []struct { - name string - config io.Reader - expectErr bool - expectNil bool - expectInvalid bool - expectedConfig *clusterresourceoverride.ClusterResourceOverrideConfig - }{ - { - name: "process nil config", - config: nil, - expectNil: true, - }, { - name: "deserialize initialConfig yaml", - config: bytes.NewReader(serializedConfig), - expectedConfig: initialConfig, - }, { - name: "completely broken config", - config: bytes.NewReader([]byte("asdfasdfasdF")), - expectErr: true, - }, { - name: "deserialize yamlConfig", - config: bytes.NewReader([]byte(yamlConfig)), - expectedConfig: deserializedYamlConfig, - }, { - name: "choke on out-of-bounds ratio", - config: bytes.NewReader([]byte(invalidConfig)), - expectInvalid: true, - expectErr: true, - }, { - name: "complain about no settings", - config: bytes.NewReader([]byte(invalidConfig2)), - expectInvalid: true, - expectErr: true, - }, - } - for _, test := range tests { - config, err := ReadConfig(test.config) - if test.expectErr && err == nil { - t.Errorf("%s: expected error", test.name) - } else if !test.expectErr && err != nil { - t.Errorf("%s: expected no error, saw %v", test.name, err) - } - if err == nil { - if test.expectNil && config != nil { - t.Errorf("%s: expected nil config, but saw: %v", test.name, config) - } else if !test.expectNil && config == nil { - t.Errorf("%s: expected config, but got nil", test.name) - } - } - if config != nil { - if test.expectedConfig != nil && *test.expectedConfig != *config { - t.Errorf("%s: expected %v from reader, but got %v", test.name, test.expectErr, config) - } - if err := validation.Validate(config); test.expectInvalid && len(err) == 0 { - t.Errorf("%s: expected validation to fail, but it passed", test.name) - } else if !test.expectInvalid && len(err) > 0 { - t.Errorf("%s: expected validation to pass, but it failed with %v", test.name, err) - } - } - } -} - -func TestLimitRequestAdmission(t *testing.T) { - tests := []struct { - name string - config *clusterresourceoverride.ClusterResourceOverrideConfig - pod *kapi.Pod - expectedMemRequest resource.Quantity - expectedCpuLimit resource.Quantity - expectedCpuRequest resource.Quantity - namespace *corev1.Namespace - namespaceLimits []*corev1.LimitRange - }{ - { - name: "ignore pods that have no memory limit specified", - config: testConfig(100, 50, 50), - pod: testBestEffortPod(), - expectedMemRequest: resource.MustParse("0"), - expectedCpuLimit: resource.MustParse("0"), - expectedCpuRequest: resource.MustParse("0"), - namespace: fakeNamespace(true), - }, - { - name: "with namespace limits, ignore pods that have no memory limit specified", - config: testConfig(100, 50, 50), - pod: testBestEffortPod(), - expectedMemRequest: resource.MustParse("0"), - expectedCpuLimit: resource.MustParse("0"), - expectedCpuRequest: resource.MustParse("0"), - namespace: fakeNamespace(true), - namespaceLimits: []*corev1.LimitRange{ - fakeMinCPULimitRange("567m"), - fakeMinCPULimitRange("678m"), - fakeMinMemoryLimitRange("700Gi"), - fakeMinMemoryLimitRange("456Gi"), - }, - }, - { - name: "test floor for memory and cpu", - config: testConfig(100, 50, 50), - pod: testPod("1Mi", "0", "0", "0"), - expectedMemRequest: resource.MustParse("1Mi"), - expectedCpuLimit: resource.MustParse("1m"), - expectedCpuRequest: resource.MustParse("1m"), - namespace: fakeNamespace(true), - }, - { - name: "with namespace limits, test floor for memory and cpu", - config: testConfig(100, 50, 50), - pod: testPod("1Mi", "0", "0", "0"), - expectedMemRequest: resource.MustParse("456Gi"), - expectedCpuLimit: resource.MustParse("567m"), - expectedCpuRequest: resource.MustParse("567m"), - namespace: fakeNamespace(true), - namespaceLimits: []*corev1.LimitRange{ - fakeMinCPULimitRange("567m"), - fakeMinCPULimitRange("678m"), - fakeMinMemoryLimitRange("700Gi"), - fakeMinMemoryLimitRange("456Gi"), - }, - }, - { - name: "nil config", - config: nil, - pod: testPod("1", "1", "1", "1"), - expectedMemRequest: resource.MustParse("1"), - expectedCpuLimit: resource.MustParse("1"), - expectedCpuRequest: resource.MustParse("1"), - namespace: fakeNamespace(true), - }, - { - name: "with namespace limits, nil config", - config: nil, - pod: testPod("1", "1", "1", "1"), - expectedMemRequest: resource.MustParse("1"), - expectedCpuLimit: resource.MustParse("1"), - expectedCpuRequest: resource.MustParse("1"), - namespace: fakeNamespace(true), - namespaceLimits: []*corev1.LimitRange{ - fakeMinCPULimitRange("567m"), - fakeMinCPULimitRange("678m"), - fakeMinMemoryLimitRange("700Gi"), - fakeMinMemoryLimitRange("456Gi"), - }, - }, - { - name: "all values are adjusted", - config: testConfig(100, 50, 50), - pod: testPod("1Gi", "0", "2000m", "0"), - expectedMemRequest: resource.MustParse("512Mi"), - expectedCpuLimit: resource.MustParse("1"), - expectedCpuRequest: resource.MustParse("500m"), - namespace: fakeNamespace(true), - }, - { - name: "with namespace limits, all values are adjusted to floor of namespace limits", - config: testConfig(100, 50, 50), - pod: testPod("1Gi", "0", "2000m", "0"), - expectedMemRequest: resource.MustParse("456Gi"), - expectedCpuLimit: resource.MustParse("10567m"), - expectedCpuRequest: resource.MustParse("10567m"), - namespace: fakeNamespace(true), - namespaceLimits: []*corev1.LimitRange{ - fakeMinCPULimitRange("10567m"), - fakeMinCPULimitRange("20678m"), - fakeMinMemoryLimitRange("700Gi"), - fakeMinMemoryLimitRange("456Gi"), - }, - }, - { - name: "just requests are adjusted", - config: testConfig(0, 50, 50), - pod: testPod("10Mi", "0", "50m", "0"), - expectedMemRequest: resource.MustParse("5Mi"), - expectedCpuLimit: resource.MustParse("50m"), - expectedCpuRequest: resource.MustParse("25m"), - namespace: fakeNamespace(true), - }, - { - name: "with namespace limits, all requests are adjusted to floor of namespace limits", - config: testConfig(0, 50, 50), - pod: testPod("10Mi", "0", "50m", "0"), - expectedMemRequest: resource.MustParse("456Gi"), - expectedCpuLimit: resource.MustParse("50m"), - expectedCpuRequest: resource.MustParse("10567m"), - namespace: fakeNamespace(true), - namespaceLimits: []*corev1.LimitRange{ - fakeMinCPULimitRange("10567m"), - fakeMinCPULimitRange("20678m"), - fakeMinMemoryLimitRange("700Gi"), - fakeMinMemoryLimitRange("456Gi"), - }, - }, - { - name: "project annotation disables overrides", - config: testConfig(0, 50, 50), - pod: testPod("10Mi", "0", "50m", "0"), - expectedMemRequest: resource.MustParse("0"), - expectedCpuLimit: resource.MustParse("50m"), - expectedCpuRequest: resource.MustParse("0"), - namespace: fakeNamespace(false), - }, - { - name: "with namespace limits, project annotation disables overrides", - config: testConfig(0, 50, 50), - pod: testPod("10Mi", "0", "50m", "0"), - expectedMemRequest: resource.MustParse("0"), - expectedCpuLimit: resource.MustParse("50m"), - expectedCpuRequest: resource.MustParse("0"), - namespace: fakeNamespace(false), - namespaceLimits: []*corev1.LimitRange{ - fakeMinCPULimitRange("10567m"), - fakeMinCPULimitRange("20678m"), - fakeMinMemoryLimitRange("700Gi"), - fakeMinMemoryLimitRange("456Gi"), - }, - }, - { - name: "large values don't overflow", - config: testConfig(100, 50, 50), - pod: testPod("1Ti", "0", "0", "0"), - expectedMemRequest: resource.MustParse("512Gi"), - expectedCpuLimit: resource.MustParse("1024"), - expectedCpuRequest: resource.MustParse("512"), - namespace: fakeNamespace(true), - }, - { - name: "little values mess things up", - config: testConfig(500, 10, 10), - pod: testPod("1.024Mi", "0", "0", "0"), - expectedMemRequest: resource.MustParse("1Mi"), - expectedCpuLimit: resource.MustParse("5m"), - expectedCpuRequest: resource.MustParse("1m"), - namespace: fakeNamespace(true), - }, - { - name: "test fractional memory requests round up", - config: testConfig(500, 10, 60), - pod: testPod("512Mi", "0", "0", "0"), - expectedMemRequest: resource.MustParse("307Mi"), - expectedCpuLimit: resource.MustParse("2.5"), - expectedCpuRequest: resource.MustParse("250m"), - namespace: fakeNamespace(true), - }, - { - name: "test only containers types are considered with namespace limits", - config: testConfig(100, 50, 50), - pod: testPod("1Gi", "0", "2000m", "0"), - expectedMemRequest: resource.MustParse("512Mi"), - expectedCpuLimit: resource.MustParse("1"), - expectedCpuRequest: resource.MustParse("500m"), - namespace: fakeNamespace(true), - namespaceLimits: []*corev1.LimitRange{ - fakeMinStorageLimitRange("1567Mi"), - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - c, err := newClusterResourceOverride(test.config) - if err != nil { - t.Fatalf("%s: config de/serialize failed: %v", test.name, err) - } - // Override LimitRanger with limits from test case - c.(*clusterResourceOverridePlugin).limitRangesLister = fakeLimitRangeLister{ - namespaceLister: fakeLimitRangeNamespaceLister{ - limits: test.namespaceLimits, - }, - } - c.(*clusterResourceOverridePlugin).nsLister = fakeNamespaceLister(test.namespace) - attrs := admission.NewAttributesRecord(test.pod, nil, schema.GroupVersionKind{}, test.namespace.Name, "name", kapi.Resource("pods").WithVersion("version"), "", admission.Create, false, fakeUser()) - clone := test.pod.DeepCopy() - if err = c.(admission.MutationInterface).Admit(attrs, nil); err != nil { - t.Fatalf("%s: admission controller returned error: %v", test.name, err) - } - if err = c.(admission.ValidationInterface).Validate(attrs, nil); err != nil { - t.Fatalf("%s: admission controller returned error: %v", test.name, err) - } - - if !reflect.DeepEqual(test.pod, clone) { - attrs := admission.NewAttributesRecord(clone, nil, schema.GroupVersionKind{}, test.namespace.Name, "name", kapi.Resource("pods").WithVersion("version"), "", admission.Create, false, fakeUser()) - if err = c.(admission.ValidationInterface).Validate(attrs, nil); err == nil { - t.Fatalf("%s: admission controller returned no error, but should", test.name) - } - } - - resources := test.pod.Spec.InitContainers[0].Resources // only test one container - if actual := resources.Requests[kapi.ResourceMemory]; test.expectedMemRequest.Cmp(actual) != 0 { - t.Errorf("%s: memory requests do not match; %v should be %v", test.name, actual, test.expectedMemRequest) - } - if actual := resources.Requests[kapi.ResourceCPU]; test.expectedCpuRequest.Cmp(actual) != 0 { - t.Errorf("%s: cpu requests do not match; %v should be %v", test.name, actual, test.expectedCpuRequest) - } - if actual := resources.Limits[kapi.ResourceCPU]; test.expectedCpuLimit.Cmp(actual) != 0 { - t.Errorf("%s: cpu limits do not match; %v should be %v", test.name, actual, test.expectedCpuLimit) - } - - resources = test.pod.Spec.Containers[0].Resources // only test one container - if actual := resources.Requests[kapi.ResourceMemory]; test.expectedMemRequest.Cmp(actual) != 0 { - t.Errorf("%s: memory requests do not match; %v should be %v", test.name, actual, test.expectedMemRequest) - } - if actual := resources.Requests[kapi.ResourceCPU]; test.expectedCpuRequest.Cmp(actual) != 0 { - t.Errorf("%s: cpu requests do not match; %v should be %v", test.name, actual, test.expectedCpuRequest) - } - if actual := resources.Limits[kapi.ResourceCPU]; test.expectedCpuLimit.Cmp(actual) != 0 { - t.Errorf("%s: cpu limits do not match; %v should be %v", test.name, actual, test.expectedCpuLimit) - } - }) - } -} - -func testBestEffortPod() *kapi.Pod { - return &kapi.Pod{ - Spec: kapi.PodSpec{ - InitContainers: []kapi.Container{ - { - Resources: kapi.ResourceRequirements{}, - }, - }, - Containers: []kapi.Container{ - { - Resources: kapi.ResourceRequirements{}, - }, - }, - }, - } -} - -func testPod(memLimit string, memRequest string, cpuLimit string, cpuRequest string) *kapi.Pod { - return &kapi.Pod{ - Spec: kapi.PodSpec{ - InitContainers: []kapi.Container{ - { - Resources: kapi.ResourceRequirements{ - Limits: kapi.ResourceList{ - kapi.ResourceCPU: resource.MustParse(cpuLimit), - kapi.ResourceMemory: resource.MustParse(memLimit), - }, - Requests: kapi.ResourceList{ - kapi.ResourceCPU: resource.MustParse(cpuRequest), - kapi.ResourceMemory: resource.MustParse(memRequest), - }, - }, - }, - }, - Containers: []kapi.Container{ - { - Resources: kapi.ResourceRequirements{ - Limits: kapi.ResourceList{ - kapi.ResourceCPU: resource.MustParse(cpuLimit), - kapi.ResourceMemory: resource.MustParse(memLimit), - }, - Requests: kapi.ResourceList{ - kapi.ResourceCPU: resource.MustParse(cpuRequest), - kapi.ResourceMemory: resource.MustParse(memRequest), - }, - }, - }, - }, - }, - } -} - -func fakeUser() user.Info { - return &user.DefaultInfo{ - Name: "testuser", - } -} - -var nsIndex = 0 - -func fakeNamespace(pluginEnabled bool) *corev1.Namespace { - nsIndex++ - ns := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: fmt.Sprintf("fakeNS%d", nsIndex), - Annotations: map[string]string{}, - }, - } - if !pluginEnabled { - ns.Annotations[clusterResourceOverrideAnnotation] = "false" - } - return ns -} - -func fakeNamespaceLister(ns *corev1.Namespace) corev1listers.NamespaceLister { - indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{}) - indexer.Add(ns) - return corev1listers.NewNamespaceLister(indexer) -} - -func testConfig(lc2mr int64, cr2lr int64, mr2lr int64) *clusterresourceoverride.ClusterResourceOverrideConfig { - return &clusterresourceoverride.ClusterResourceOverrideConfig{ - LimitCPUToMemoryPercent: lc2mr, - CPURequestToLimitPercent: cr2lr, - MemoryRequestToLimitPercent: mr2lr, - } -} - -func fakeMinLimitRange(limitType corev1.LimitType, resourceType corev1.ResourceName, limits ...string) *corev1.LimitRange { - r := &corev1.LimitRange{} - - for i := range limits { - rl := corev1.ResourceList{} - rl[resourceType] = resource.MustParse(limits[i]) - r.Spec.Limits = append(r.Spec.Limits, - corev1.LimitRangeItem{ - Type: limitType, - Min: rl, - }, - ) - } - - return r -} - -func fakeMinMemoryLimitRange(limits ...string) *corev1.LimitRange { - return fakeMinLimitRange(corev1.LimitTypeContainer, corev1.ResourceMemory, limits...) -} - -func fakeMinCPULimitRange(limits ...string) *corev1.LimitRange { - return fakeMinLimitRange(corev1.LimitTypeContainer, corev1.ResourceCPU, limits...) -} - -func fakeMinStorageLimitRange(limits ...string) *corev1.LimitRange { - return fakeMinLimitRange(corev1.LimitTypePersistentVolumeClaim, corev1.ResourceStorage, limits...) -} - -type fakeLimitRangeLister struct { - corev1listers.LimitRangeLister - namespaceLister fakeLimitRangeNamespaceLister -} - -type fakeLimitRangeNamespaceLister struct { - corev1listers.LimitRangeNamespaceLister - limits []*corev1.LimitRange -} - -func (f fakeLimitRangeLister) LimitRanges(namespace string) corev1listers.LimitRangeNamespaceLister { - return f.namespaceLister -} - -func (f fakeLimitRangeNamespaceLister) List(selector labels.Selector) ([]*corev1.LimitRange, error) { - return f.limits, nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/doc.go deleted file mode 100644 index aaf2176af..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride/doc.go +++ /dev/null @@ -1,8 +0,0 @@ -package clusterresourceoverride - -// The ClusterResourceOverride plugin is only active when admission control config is supplied for it. -// The plugin allows administrators to override user-provided container request/limit values -// in order to control overcommit and optionally pin CPU to memory. -// The plugin's actions can be disabled per-project with the project annotation -// autoscaling.openshift.io/cluster-resource-override-enabled="false", so cluster admins -// can exempt infrastructure projects and such from the overrides. diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission.go deleted file mode 100644 index 967da3f9a..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission.go +++ /dev/null @@ -1,147 +0,0 @@ -package runonceduration - -import ( - "errors" - "fmt" - "io" - "strconv" - - "k8s.io/klog" - - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/client-go/informers" - kapi "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/utils/integer" - - "github.com/openshift/library-go/pkg/config/helpers" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" - v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration/validation" - corev1listers "k8s.io/client-go/listers/core/v1" -) - -func Register(plugins *admission.Plugins) { - plugins.Register("autoscaling.openshift.io/RunOnceDuration", - func(config io.Reader) (admission.Interface, error) { - pluginConfig, err := readConfig(config) - if err != nil { - return nil, err - } - if pluginConfig == nil { - klog.Infof("Admission plugin %q is not configured so it will be disabled.", "autoscaling.openshift.io/RunOnceDuration") - return nil, nil - } - return NewRunOnceDuration(pluginConfig), nil - }) -} - -func readConfig(reader io.Reader) (*runonceduration.RunOnceDurationConfig, error) { - obj, err := helpers.ReadYAMLToInternal(reader, runonceduration.Install, v1.Install) - if err != nil { - return nil, err - } - if obj == nil { - return nil, nil - } - config, ok := obj.(*runonceduration.RunOnceDurationConfig) - if !ok { - return nil, fmt.Errorf("unexpected config object %#v", obj) - } - errs := validation.ValidateRunOnceDurationConfig(config) - if len(errs) > 0 { - return nil, errs.ToAggregate() - } - return config, nil -} - -// NewRunOnceDuration creates a new RunOnceDuration admission plugin -func NewRunOnceDuration(config *runonceduration.RunOnceDurationConfig) admission.Interface { - return &runOnceDuration{ - Handler: admission.NewHandler(admission.Create), - config: config, - } -} - -type runOnceDuration struct { - *admission.Handler - config *runonceduration.RunOnceDurationConfig - nsLister corev1listers.NamespaceLister -} - -var _ = initializer.WantsExternalKubeInformerFactory(&runOnceDuration{}) - -func (a *runOnceDuration) Admit(attributes admission.Attributes, _ admission.ObjectInterfaces) error { - switch { - case a.config == nil, - attributes.GetResource().GroupResource() != kapi.Resource("pods"), - len(attributes.GetSubresource()) > 0: - return nil - } - pod, ok := attributes.GetObject().(*kapi.Pod) - if !ok { - return admission.NewForbidden(attributes, fmt.Errorf("unexpected object: %#v", attributes.GetObject())) - } - - // Only update pods with a restart policy of Never or OnFailure - switch pod.Spec.RestartPolicy { - case kapi.RestartPolicyNever, - kapi.RestartPolicyOnFailure: - // continue - default: - return nil - } - - appliedProjectLimit, err := a.applyProjectAnnotationLimit(attributes.GetNamespace(), pod) - if err != nil { - return admission.NewForbidden(attributes, err) - } - - if !appliedProjectLimit && a.config.ActiveDeadlineSecondsLimit != nil { - pod.Spec.ActiveDeadlineSeconds = int64MinP(a.config.ActiveDeadlineSecondsLimit, pod.Spec.ActiveDeadlineSeconds) - } - return nil -} - -func (a *runOnceDuration) SetExternalKubeInformerFactory(kubeInformers informers.SharedInformerFactory) { - a.nsLister = kubeInformers.Core().V1().Namespaces().Lister() -} - -func (a *runOnceDuration) ValidateInitialization() error { - if a.nsLister == nil { - return errors.New("autoscaling.openshift.io/RunOnceDuration plugin requires a namespace listers") - } - return nil -} - -func (a *runOnceDuration) applyProjectAnnotationLimit(namespace string, pod *kapi.Pod) (bool, error) { - ns, err := a.nsLister.Get(namespace) - if err != nil { - return false, fmt.Errorf("error looking up pod namespace: %v", err) - } - if ns.Annotations == nil { - return false, nil - } - limit, hasLimit := ns.Annotations[runonceduration.ActiveDeadlineSecondsLimitAnnotation] - if !hasLimit { - return false, nil - } - limitInt64, err := strconv.ParseInt(limit, 10, 64) - if err != nil { - return false, fmt.Errorf("cannot parse the ActiveDeadlineSeconds limit (%s) for project %s: %v", limit, ns.Name, err) - } - pod.Spec.ActiveDeadlineSeconds = int64MinP(&limitInt64, pod.Spec.ActiveDeadlineSeconds) - return true, nil -} - -func int64MinP(a, b *int64) *int64 { - switch { - case a == nil: - return b - case b == nil: - return a - default: - c := integer.Int64Min(*a, *b) - return &c - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission_test.go deleted file mode 100644 index d29633ab0..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/runonceduration/admission_test.go +++ /dev/null @@ -1,214 +0,0 @@ -package runonceduration - -import ( - "bytes" - "testing" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apiserver/pkg/admission" - corev1listers "k8s.io/client-go/listers/core/v1" - "k8s.io/client-go/tools/cache" - kapi "k8s.io/kubernetes/pkg/apis/core" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/apis/runonceduration" -) - -func fakeNamespaceLister(projectAnnotations map[string]string) corev1listers.NamespaceLister { - indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{}) - ns := &corev1.Namespace{} - ns.Name = "default" - ns.Annotations = projectAnnotations - indexer.Add(ns) - return corev1listers.NewNamespaceLister(indexer) -} - -func testConfig(n *int64) *runonceduration.RunOnceDurationConfig { - return &runonceduration.RunOnceDurationConfig{ - ActiveDeadlineSecondsLimit: n, - } -} - -func testRunOncePod() *kapi.Pod { - pod := &kapi.Pod{} - pod.Spec.RestartPolicy = kapi.RestartPolicyNever - return pod -} - -func testRestartOnFailurePod() *kapi.Pod { - pod := &kapi.Pod{} - pod.Spec.RestartPolicy = kapi.RestartPolicyOnFailure - return pod -} - -func testRunOncePodWithDuration(n int64) *kapi.Pod { - pod := testRunOncePod() - pod.Spec.ActiveDeadlineSeconds = &n - return pod -} - -func testRestartAlwaysPod() *kapi.Pod { - pod := &kapi.Pod{} - pod.Spec.RestartPolicy = kapi.RestartPolicyAlways - return pod -} - -func int64p(n int64) *int64 { - return &n -} - -func TestRunOnceDurationAdmit(t *testing.T) { - tests := []struct { - name string - config *runonceduration.RunOnceDurationConfig - pod *kapi.Pod - projectAnnotations map[string]string - expectedActiveDeadlineSeconds *int64 - }{ - { - name: "expect globally configured duration to be set", - config: testConfig(int64p(10)), - pod: testRunOncePod(), - expectedActiveDeadlineSeconds: int64p(10), - }, - { - name: "empty config, no duration to be set", - config: testConfig(nil), - pod: testRunOncePod(), - expectedActiveDeadlineSeconds: nil, - }, - { - name: "expect configured duration to not limit lower existing duration", - config: testConfig(int64p(10)), - pod: testRunOncePodWithDuration(5), - expectedActiveDeadlineSeconds: int64p(5), - }, - { - name: "expect empty config to not limit existing duration", - config: testConfig(nil), - pod: testRunOncePodWithDuration(5), - expectedActiveDeadlineSeconds: int64p(5), - }, - { - name: "expect project limit to be used with nil global value", - config: testConfig(nil), - pod: testRunOncePodWithDuration(2000), - projectAnnotations: map[string]string{ - runonceduration.ActiveDeadlineSecondsLimitAnnotation: "1000", - }, - expectedActiveDeadlineSeconds: int64p(1000), - }, - { - name: "expect project limit to not limit a smaller set value", - config: testConfig(nil), - pod: testRunOncePodWithDuration(10), - projectAnnotations: map[string]string{ - runonceduration.ActiveDeadlineSecondsLimitAnnotation: "1000", - }, - expectedActiveDeadlineSeconds: int64p(10), - }, - { - name: "expect project limit to have priority over global config value", - config: testConfig(int64p(10)), - pod: testRunOncePodWithDuration(2000), - projectAnnotations: map[string]string{ - runonceduration.ActiveDeadlineSecondsLimitAnnotation: "1000", - }, - expectedActiveDeadlineSeconds: int64p(1000), - }, - { - name: "make no change to a pod that is not a run-once pod", - config: testConfig(int64p(10)), - pod: testRestartAlwaysPod(), - expectedActiveDeadlineSeconds: nil, - }, - { - name: "update a pod that has a RestartOnFailure policy", - config: testConfig(int64p(10)), - pod: testRestartOnFailurePod(), - expectedActiveDeadlineSeconds: int64p(10), - }, - } - - for _, tc := range tests { - admissionPlugin := NewRunOnceDuration(tc.config) - admissionPlugin.(*runOnceDuration).nsLister = fakeNamespaceLister(tc.projectAnnotations) - pod := tc.pod - attrs := admission.NewAttributesRecord(pod, nil, kapi.Kind("Pod").WithVersion("version"), "default", "test", kapi.Resource("pods").WithVersion("version"), "", admission.Create, false, nil) - if err := admissionPlugin.(admission.MutationInterface).Admit(attrs, nil); err != nil { - t.Errorf("%s: unexpected mutating admission error: %v", tc.name, err) - continue - } - - switch { - case tc.expectedActiveDeadlineSeconds == nil && pod.Spec.ActiveDeadlineSeconds == nil: - // continue - case tc.expectedActiveDeadlineSeconds == nil && pod.Spec.ActiveDeadlineSeconds != nil: - t.Errorf("%s: expected nil ActiveDeadlineSeconds. Got: %d", tc.name, *pod.Spec.ActiveDeadlineSeconds) - case tc.expectedActiveDeadlineSeconds != nil && pod.Spec.ActiveDeadlineSeconds == nil: - t.Errorf("%s: unexpected nil ActiveDeadlineSeconds.", tc.name) - case *pod.Spec.ActiveDeadlineSeconds != *tc.expectedActiveDeadlineSeconds: - t.Errorf("%s: unexpected active deadline seconds: %d", tc.name, *pod.Spec.ActiveDeadlineSeconds) - } - } -} - -func TestReadConfig(t *testing.T) { - configStr := `apiVersion: autoscaling.openshift.io/v1 -kind: RunOnceDurationConfig -activeDeadlineSecondsOverride: 3600 -` - buf := bytes.NewBufferString(configStr) - config, err := readConfig(buf) - if err != nil { - t.Fatalf("unexpected error reading config: %v", err) - } - if config.ActiveDeadlineSecondsLimit == nil { - t.Fatalf("nil value for ActiveDeadlineSecondsLimit") - } - if *config.ActiveDeadlineSecondsLimit != 3600 { - t.Errorf("unexpected value for ActiveDeadlineSecondsLimit: %d", config.ActiveDeadlineSecondsLimit) - } -} - -func TestInt64MinP(t *testing.T) { - ten := int64(10) - twenty := int64(20) - tests := []struct { - a, b, expected *int64 - }{ - { - a: &ten, - b: nil, - expected: &ten, - }, - { - a: nil, - b: &ten, - expected: &ten, - }, - { - a: &ten, - b: &twenty, - expected: &ten, - }, - { - a: nil, - b: nil, - expected: nil, - }, - } - - for _, test := range tests { - actual := int64MinP(test.a, test.b) - switch { - case actual == nil && test.expected != nil, - test.expected == nil && actual != nil: - t.Errorf("unexpected %v for %#v", actual, test) - continue - case actual == nil: - continue - case *actual != *test.expected: - t.Errorf("unexpected: %v for %#v", actual, test) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/runonceduration/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/runonceduration/doc.go deleted file mode 100644 index c289b04fa..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/runonceduration/doc.go +++ /dev/null @@ -1,22 +0,0 @@ -/* -Package runonceduration contains the RunOnceDuration admission control plugin. -The plugin allows overriding the ActiveDeadlineSeconds for pods that have a -RestartPolicy of RestartPolicyNever (run once). If configured to allow a project -annotation override, and an annotation exists in the pod's namespace of: - - openshift.io/active-deadline-seconds-override - -the value of the annotation will take precedence over the globally configured -value in the plugin's configuration. - - -Configuration - -The plugin is configured via a RunOnceDurationConfig object: - - apiVersion: v1 - kind: RunOnceDurationConfig - enabled: true - activeDeadlineSecondsOverride: 3600 -*/ -package runonceduration diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/OWNERS deleted file mode 100644 index bca360b14..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/OWNERS +++ /dev/null @@ -1,6 +0,0 @@ -reviewers: - - deads2k - - sttts -approvers: - - deads2k - - sttts diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver.go deleted file mode 100644 index ccfd5f6b0..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver.go +++ /dev/null @@ -1,139 +0,0 @@ -package apiserver - -import ( - "fmt" - "strings" - - configv1 "github.com/openshift/api/config/v1" - configv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1" - - "k8s.io/apimachinery/pkg/api/validation" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -func toAPIServerV1(uncastObj runtime.Object) (*configv1.APIServer, field.ErrorList) { - if uncastObj == nil { - return nil, nil - } - - errs := field.ErrorList{} - - obj, ok := uncastObj.(*configv1.APIServer) - if !ok { - return nil, append(errs, - field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"APIServer"}), - field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) - } - - return obj, nil -} - -type apiserverV1 struct { - infrastructureGetter func() configv1client.InfrastructuresGetter -} - -func (a apiserverV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { - obj, errs := toAPIServerV1(uncastObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) - errs = append(errs, validateAPIServerSpecCreate(obj.Spec)...) - errs = append(errs, a.validateSNINames(obj)...) - - return errs -} - -func (a apiserverV1) validateSNINames(obj *configv1.APIServer) field.ErrorList { - errs := field.ErrorList{} - if len(obj.Spec.ServingCerts.NamedCertificates) == 0 { - return errs - } - - infrastructure, err := a.infrastructureGetter().Infrastructures().Get("cluster", metav1.GetOptions{}) - if err != nil { - errs = append(errs, field.InternalError(field.NewPath("metadata"), err)) - } - for i, currSNI := range obj.Spec.ServingCerts.NamedCertificates { - // if names are specified, confirm they do not match - // if names are not specified, the cert can still match, but only the operator resolves the secrets down. We gain a lot of benefit by being sure - // we don't allow an explicit override of these values - for j, currName := range currSNI.Names { - path := field.NewPath("spec").Child("servingCerts").Index(i).Child("names").Index(j) - if currName == infrastructure.Status.APIServerInternalURL { - errs = append(errs, field.Invalid(path, currName, fmt.Sprintf("may not match internal loadbalancer: %q", infrastructure.Status.APIServerInternalURL))) - continue - } - if strings.HasSuffix(currName, ".*") { - withoutSuffix := currName[0 : len(currName)-2] - if strings.HasPrefix(infrastructure.Status.APIServerInternalURL, withoutSuffix) { - errs = append(errs, field.Invalid(path, currName, fmt.Sprintf("may not match internal loadbalancer: %q", infrastructure.Status.APIServerInternalURL))) - } - } - } - } - - return errs -} - -func (a apiserverV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toAPIServerV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toAPIServerV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - errs = append(errs, validateAPIServerSpecUpdate(obj.Spec, oldObj.Spec)...) - errs = append(errs, a.validateSNINames(obj)...) - - return errs -} - -func (apiserverV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toAPIServerV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toAPIServerV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - errs = append(errs, validateAPIServerStatus(obj.Status)...) - - return errs -} - -func validateAPIServerSpecCreate(spec configv1.APIServerSpec) field.ErrorList { - errs := field.ErrorList{} - - //TODO: Add validation code, if needed - - return errs -} - -func validateAPIServerSpecUpdate(newSpec, oldSpec configv1.APIServerSpec) field.ErrorList { - errs := field.ErrorList{} - - // TODO: Add validation code, if needed - - return errs -} - -func validateAPIServerStatus(status configv1.APIServerStatus) field.ErrorList { - errs := field.ErrorList{} - - // TODO - - return errs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver_test.go deleted file mode 100644 index 156761f86..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validate_apiserver_test.go +++ /dev/null @@ -1,117 +0,0 @@ -package apiserver - -import ( - "testing" - - "k8s.io/apimachinery/pkg/util/validation/field" - - configv1 "github.com/openshift/api/config/v1" - configclientfake "github.com/openshift/client-go/config/clientset/versioned/fake" - configv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func TestValidateSNINames(t *testing.T) { - expectNoErrors := func(t *testing.T, errs field.ErrorList) { - t.Helper() - if len(errs) > 0 { - t.Fatal(errs) - } - } - - tests := []struct { - name string - - internalName string - apiserver *configv1.APIServer - - validateErrors func(t *testing.T, errs field.ErrorList) - }{ - { - name: "no sni", - internalName: "internal.host.com", - apiserver: &configv1.APIServer{}, - validateErrors: expectNoErrors, - }, - { - name: "allowed sni", - internalName: "internal.host.com", - apiserver: &configv1.APIServer{ - Spec: configv1.APIServerSpec{ - ServingCerts: configv1.APIServerServingCerts{ - NamedCertificates: []configv1.APIServerNamedServingCert{ - { - Names: []string{"external.host.com", "somwhere.else.*"}, - }, - }, - }, - }, - }, - validateErrors: expectNoErrors, - }, - { - name: "directly invalid sni", - internalName: "internal.host.com", - apiserver: &configv1.APIServer{ - Spec: configv1.APIServerSpec{ - ServingCerts: configv1.APIServerServingCerts{ - NamedCertificates: []configv1.APIServerNamedServingCert{ - {Names: []string{"external.host.com", "somwhere.else.*"}}, - {Names: []string{"foo.bar", "internal.host.com"}}, - }, - }, - }, - }, - validateErrors: func(t *testing.T, errs field.ErrorList) { - t.Helper() - if len(errs) != 1 { - t.Fatal(errs) - } - if errs[0].Error() != `spec.servingCerts[1].names[1]: Invalid value: "internal.host.com": may not match internal loadbalancer: "internal.host.com"` { - t.Error(errs[0]) - } - }, - }, - { - name: "wildcard invalid sni", - internalName: "internal.host.com", - apiserver: &configv1.APIServer{ - Spec: configv1.APIServerSpec{ - ServingCerts: configv1.APIServerServingCerts{ - NamedCertificates: []configv1.APIServerNamedServingCert{ - {Names: []string{"internal.*"}}, - }, - }, - }, - }, - validateErrors: func(t *testing.T, errs field.ErrorList) { - t.Helper() - if len(errs) != 1 { - t.Fatal(errs) - } - if errs[0].Error() != `spec.servingCerts[0].names[0]: Invalid value: "internal.*": may not match internal loadbalancer: "internal.host.com"` { - t.Error(errs[0]) - } - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - fakeclient := configclientfake.NewSimpleClientset(&configv1.Infrastructure{ - ObjectMeta: metav1.ObjectMeta{Name: "cluster"}, - Status: configv1.InfrastructureStatus{ - APIServerInternalURL: test.internalName, - }, - }) - - instance := apiserverV1{ - infrastructureGetter: func() configv1client.InfrastructuresGetter { - return fakeclient.ConfigV1() - }, - } - test.validateErrors(t, instance.validateSNINames(test.apiserver)) - }) - - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validation_wrapper.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validation_wrapper.go deleted file mode 100644 index 06e9e04c1..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver/validation_wrapper.go +++ /dev/null @@ -1,76 +0,0 @@ -package apiserver - -import ( - "fmt" - "io" - - configv1 "github.com/openshift/api/config/v1" - configv1client "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1" - "github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" - - "k8s.io/apimachinery/pkg/runtime/schema" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apiserver/pkg/admission" - "k8s.io/client-go/rest" -) - -const PluginName = "config.openshift.io/ValidateAPIServer" - -// Register registers a plugin -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return NewValidateAPIServer() - }) -} - -type validateCustomResourceWithClient struct { - admission.ValidationInterface - - infrastructureGetter configv1client.InfrastructuresGetter -} - -func NewValidateAPIServer() (admission.Interface, error) { - ret := &validateCustomResourceWithClient{} - - delegate, err := customresourcevalidation.NewValidator( - map[schema.GroupResource]bool{ - configv1.GroupVersion.WithResource("apiservers").GroupResource(): true, - }, - map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ - configv1.GroupVersion.WithKind("APIServer"): apiserverV1{infrastructureGetter: ret.getInfrastructureGetter}, - }) - if err != nil { - return nil, err - } - ret.ValidationInterface = delegate - - return ret, nil -} - -var _ admissionrestconfig.WantsRESTClientConfig = &validateCustomResourceWithClient{} - -func (a *validateCustomResourceWithClient) getInfrastructureGetter() configv1client.InfrastructuresGetter { - return a.infrastructureGetter -} - -func (a *validateCustomResourceWithClient) SetRESTClientConfig(restClientConfig rest.Config) { - var err error - a.infrastructureGetter, err = configv1client.NewForConfig(&restClientConfig) - if err != nil { - utilruntime.HandleError(err) - return - } -} - -func (a *validateCustomResourceWithClient) ValidateInitialization() error { - if a.infrastructureGetter == nil { - return fmt.Errorf(PluginName + " needs an infrastructureGetter") - } - - if initializationValidator, ok := a.ValidationInterface.(admission.InitializationValidator); ok { - return initializationValidator.ValidateInitialization() - } - - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/attributes.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/attributes.go deleted file mode 100644 index f72b89a63..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/attributes.go +++ /dev/null @@ -1,53 +0,0 @@ -package customresourcevalidation - -import ( - "k8s.io/apimachinery/pkg/runtime" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apiserver/pkg/admission" - - authorizationv1 "github.com/openshift/api/authorization/v1" - configv1 "github.com/openshift/api/config/v1" - quotav1 "github.com/openshift/api/quota/v1" - securityv1 "github.com/openshift/api/security/v1" -) - -// unstructuredUnpackingAttributes tries to convert to a real object in the config scheme -type unstructuredUnpackingAttributes struct { - admission.Attributes -} - -func (a *unstructuredUnpackingAttributes) GetObject() runtime.Object { - return toBestObjectPossible(a.Attributes.GetObject()) -} - -func (a *unstructuredUnpackingAttributes) GetOldObject() runtime.Object { - return toBestObjectPossible(a.Attributes.GetOldObject()) -} - -// toBestObjectPossible tries to convert to a real object in the supported scheme -func toBestObjectPossible(orig runtime.Object) runtime.Object { - unstructuredOrig, ok := orig.(runtime.Unstructured) - if !ok { - return orig - } - - targetObj, err := supportedObjectsScheme.New(unstructuredOrig.GetObjectKind().GroupVersionKind()) - if err != nil { - utilruntime.HandleError(err) - return unstructuredOrig - } - if err := runtime.DefaultUnstructuredConverter.FromUnstructured(unstructuredOrig.UnstructuredContent(), targetObj); err != nil { - utilruntime.HandleError(err) - return unstructuredOrig - } - return targetObj -} - -var supportedObjectsScheme = runtime.NewScheme() - -func init() { - utilruntime.Must(configv1.Install(supportedObjectsScheme)) - utilruntime.Must(quotav1.Install(supportedObjectsScheme)) - utilruntime.Must(securityv1.Install(supportedObjectsScheme)) - utilruntime.Must(authorizationv1.Install(supportedObjectsScheme)) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/authentication/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/authentication/OWNERS deleted file mode 100644 index 9cd743a88..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/authentication/OWNERS +++ /dev/null @@ -1,8 +0,0 @@ -reviewers: - - enj - - ericavonb - - mrogers950 - - sallyom - - stlaz -approvers: - - enj diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication.go deleted file mode 100644 index 94e9828cb..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication.go +++ /dev/null @@ -1,133 +0,0 @@ -package authentication - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/api/validation" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - - configv1 "github.com/openshift/api/config/v1" - crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -const PluginName = "config.openshift.io/ValidateAuthentication" - -// Register registers a plugin -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return crvalidation.NewValidator( - map[schema.GroupResource]bool{ - configv1.GroupVersion.WithResource("authentications").GroupResource(): true, - }, - map[schema.GroupVersionKind]crvalidation.ObjectValidator{ - configv1.GroupVersion.WithKind("Authentication"): authenticationV1{}, - }) - }) -} - -func toAuthenticationV1(uncastObj runtime.Object) (*configv1.Authentication, field.ErrorList) { - if uncastObj == nil { - return nil, nil - } - - obj, ok := uncastObj.(*configv1.Authentication) - if !ok { - return nil, field.ErrorList{ - field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"Authentication"}), - field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"}), - } - } - - return obj, nil -} - -type authenticationV1 struct{} - -func (authenticationV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { - obj, errs := toAuthenticationV1(uncastObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, crvalidation.RequireNameCluster, field.NewPath("metadata"))...) - errs = append(errs, validateAuthenticationSpecCreate(obj.Spec)...) - - return errs -} - -func (authenticationV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toAuthenticationV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toAuthenticationV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - errs = append(errs, validateAuthenticationSpecUpdate(obj.Spec, oldObj.Spec)...) - - return errs -} - -func (authenticationV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toAuthenticationV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toAuthenticationV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - errs = append(errs, validateAuthenticationStatus(obj.Status)...) - - return errs -} - -func validateAuthenticationSpecCreate(spec configv1.AuthenticationSpec) field.ErrorList { - return validateAuthenticationSpec(spec) -} - -func validateAuthenticationSpecUpdate(newspec, oldspec configv1.AuthenticationSpec) field.ErrorList { - return validateAuthenticationSpec(newspec) -} - -func validateAuthenticationSpec(spec configv1.AuthenticationSpec) field.ErrorList { - errs := field.ErrorList{} - specField := field.NewPath("spec") - - switch spec.Type { - case configv1.AuthenticationTypeNone, configv1.AuthenticationTypeIntegratedOAuth, "": - default: - errs = append(errs, field.NotSupported(specField.Child("type"), - spec.Type, - []string{string(configv1.AuthenticationTypeNone), string(configv1.AuthenticationTypeIntegratedOAuth)}, - )) - } - - errs = append(errs, crvalidation.ValidateConfigMapReference(specField.Child("oauthMetadata"), spec.OAuthMetadata, false)...) - - // validate the secret names in WebhookTokenAuthenticators - for i, wh := range spec.WebhookTokenAuthenticators { - errs = append( - errs, - crvalidation.ValidateSecretReference( - specField.Child("webhookTokenAuthenticators").Index(i).Child("kubeConfig"), - wh.KubeConfig, - true, - )...) - } - - return errs -} - -func validateAuthenticationStatus(status configv1.AuthenticationStatus) field.ErrorList { - return crvalidation.ValidateConfigMapReference(field.NewPath("status", "integratedOAuthMetadata"), status.IntegratedOAuthMetadata, false) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication_test.go deleted file mode 100644 index d088de361..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/authentication/validate_authentication_test.go +++ /dev/null @@ -1,189 +0,0 @@ -package authentication - -import ( - "testing" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/apimachinery/pkg/util/validation/field" -) - -func TestFailValidateAuthenticationSpec(t *testing.T) { - errorCases := map[string]struct { - spec configv1.AuthenticationSpec - errorType field.ErrorType - errorField string - }{ - "invalid authn type": { - spec: configv1.AuthenticationSpec{ - Type: "MyCoolOAuthSrv", - }, - errorType: field.ErrorTypeNotSupported, - errorField: "spec.type", - }, - "invalid metadata ref": { - spec: configv1.AuthenticationSpec{ - Type: "", - OAuthMetadata: configv1.ConfigMapNameReference{ - Name: "../shadow", - }, - }, - errorType: field.ErrorTypeInvalid, - errorField: "spec.oauthMetadata.name", - }, - "invalid webhook ref": { - spec: configv1.AuthenticationSpec{ - WebhookTokenAuthenticators: []configv1.WebhookTokenAuthenticator{ - {KubeConfig: configv1.SecretNameReference{Name: "this+that"}}, - }, - }, - errorType: field.ErrorTypeInvalid, - errorField: "spec.webhookTokenAuthenticators[0].kubeConfig.name", - }, - "invalid webhook ref - multiple webhooks": { - spec: configv1.AuthenticationSpec{ - WebhookTokenAuthenticators: []configv1.WebhookTokenAuthenticator{ - {KubeConfig: configv1.SecretNameReference{Name: "that.now"}}, - {KubeConfig: configv1.SecretNameReference{Name: "this+that"}}, - {KubeConfig: configv1.SecretNameReference{Name: "this.then"}}, - }, - }, - errorType: field.ErrorTypeInvalid, - errorField: "spec.webhookTokenAuthenticators[1].kubeConfig.name", - }, - "empty webhook name": { - spec: configv1.AuthenticationSpec{ - WebhookTokenAuthenticators: []configv1.WebhookTokenAuthenticator{ - {KubeConfig: configv1.SecretNameReference{Name: ""}}, - }, - }, - errorType: field.ErrorTypeRequired, - errorField: "spec.webhookTokenAuthenticators[0].kubeConfig.name", - }, - } - - for tcName, tc := range errorCases { - errs := validateAuthenticationSpec(tc.spec) - if len(errs) == 0 { - t.Errorf("'%s': should have failed but did not", tcName) - } - - for _, e := range errs { - if e.Type != tc.errorType { - t.Errorf("'%s': expected errors of type '%s', got %v:", tcName, tc.errorType, e) - } - - if e.Field != tc.errorField { - t.Errorf("'%s': expected errors in field '%s', got %v:", tcName, tc.errorField, e) - } - } - } -} - -func TestSucceedValidateAuthenticationSpec(t *testing.T) { - successCases := map[string]configv1.AuthenticationSpec{ - "integrated oauth authn type": { - Type: "IntegratedOAuth", - }, - "_none_ authn type": { - Type: "None", - }, - "empty authn type": { - Type: "", - }, - "integrated oauth + oauth metadata": { - OAuthMetadata: configv1.ConfigMapNameReference{ - Name: "configmapwithmetadata", - }, - }, - "webhook set": { - WebhookTokenAuthenticators: []configv1.WebhookTokenAuthenticator{ - {KubeConfig: configv1.SecretNameReference{Name: "wheniwaslittleiwantedtobecomeawebhook"}}, - }, - }, - "some webhooks": { - WebhookTokenAuthenticators: []configv1.WebhookTokenAuthenticator{ - {KubeConfig: configv1.SecretNameReference{Name: "whatacoolnameforasecret"}}, - {KubeConfig: configv1.SecretNameReference{Name: "whatacoolnameforasecret2"}}, - {KubeConfig: configv1.SecretNameReference{Name: "thisalsoisacoolname"}}, - {KubeConfig: configv1.SecretNameReference{Name: "letsnotoverdoit"}}, - }, - }, - "all fields set": { - Type: "IntegratedOAuth", - OAuthMetadata: configv1.ConfigMapNameReference{ - Name: "suchname", - }, - WebhookTokenAuthenticators: []configv1.WebhookTokenAuthenticator{ - {KubeConfig: configv1.SecretNameReference{Name: "thisisawebhook"}}, - {KubeConfig: configv1.SecretNameReference{Name: "thisisawebhook2"}}, - {KubeConfig: configv1.SecretNameReference{Name: "thisisawebhook33"}}, - }, - }, - } - - for tcName, s := range successCases { - errs := validateAuthenticationSpec(s) - if len(errs) != 0 { - t.Errorf("'%s': expected success, but failed: %v", tcName, errs.ToAggregate().Error()) - } - } -} - -func TestFailValidateAuthenticationStatus(t *testing.T) { - errorCases := map[string]struct { - status configv1.AuthenticationStatus - errorType field.ErrorType - errorField string - }{ - "wrong reference name": { - status: configv1.AuthenticationStatus{ - IntegratedOAuthMetadata: configv1.ConfigMapNameReference{ - Name: "something_wrong", - }, - }, - errorType: field.ErrorTypeInvalid, - errorField: "status.integratedOAuthMetadata.name", - }, - } - - for tcName, tc := range errorCases { - errs := validateAuthenticationStatus(tc.status) - if len(errs) == 0 { - t.Errorf("'%s': should have failed but did not", tcName) - } - - for _, e := range errs { - if e.Type != tc.errorType { - t.Errorf("'%s': expected errors of type '%s', got %v:", tcName, tc.errorType, e) - } - - if e.Field != tc.errorField { - t.Errorf("'%s': expected errors in field '%s', got %v:", tcName, tc.errorField, e) - } - } - } -} - -func TestSucceedValidateAuthenticationStatus(t *testing.T) { - successCases := map[string]configv1.AuthenticationStatus{ - "basic case": { - IntegratedOAuthMetadata: configv1.ConfigMapNameReference{ - Name: "hey-there", - }, - }, - "empty reference": { - IntegratedOAuthMetadata: configv1.ConfigMapNameReference{ - Name: "", - }, - }, - "empty status": {}, - } - - for tcName, s := range successCases { - errs := validateAuthenticationStatus(s) - if len(errs) != 0 { - t.Errorf("'%s': expected success, but failed: %v", tcName, errs.ToAggregate().Error()) - } - } - -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validate_crq.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validate_crq.go deleted file mode 100644 index 18af783d6..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validate_crq.go +++ /dev/null @@ -1,83 +0,0 @@ -package clusterresourcequota - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/api/validation" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - - quotav1 "github.com/openshift/api/quota/v1" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" - quotavalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation" -) - -const PluginName = "quota.openshift.io/ValidateClusterResourceQuota" - -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return customresourcevalidation.NewValidator( - map[schema.GroupResource]bool{ - {Group: quotav1.GroupName, Resource: "clusterresourcequotas"}: true, - }, - map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ - quotav1.GroupVersion.WithKind("ClusterResourceQuota"): clusterResourceQuotaV1{}, - }) - }) -} - -func toClusterResourceQuota(uncastObj runtime.Object) (*quotav1.ClusterResourceQuota, field.ErrorList) { - if uncastObj == nil { - return nil, nil - } - - allErrs := field.ErrorList{} - - obj, ok := uncastObj.(*quotav1.ClusterResourceQuota) - if !ok { - return nil, append(allErrs, - field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"ClusterResourceQuota"}), - field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{quotav1.GroupVersion.String()})) - } - - return obj, nil -} - -type clusterResourceQuotaV1 struct { -} - -func (clusterResourceQuotaV1) ValidateCreate(obj runtime.Object) field.ErrorList { - clusterResourceQuotaObj, errs := toClusterResourceQuota(obj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMeta(&clusterResourceQuotaObj.ObjectMeta, false, validation.NameIsDNSSubdomain, field.NewPath("metadata"))...) - errs = append(errs, quotavalidation.ValidateClusterResourceQuota(clusterResourceQuotaObj)...) - - return errs -} - -func (clusterResourceQuotaV1) ValidateUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { - clusterResourceQuotaObj, errs := toClusterResourceQuota(obj) - if len(errs) > 0 { - return errs - } - clusterResourceQuotaOldObj, errs := toClusterResourceQuota(oldObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMeta(&clusterResourceQuotaObj.ObjectMeta, false, validation.NameIsDNSSubdomain, field.NewPath("metadata"))...) - errs = append(errs, quotavalidation.ValidateClusterResourceQuotaUpdate(clusterResourceQuotaObj, clusterResourceQuotaOldObj)...) - - return errs -} - -func (c clusterResourceQuotaV1) ValidateStatusUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { - return c.ValidateUpdate(obj, oldObj) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation.go deleted file mode 100644 index b440a0912..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation.go +++ /dev/null @@ -1,77 +0,0 @@ -package validation - -import ( - "sort" - - unversionedvalidation "k8s.io/apimachinery/pkg/apis/meta/v1/validation" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/kubernetes/pkg/apis/core/v1" - "k8s.io/kubernetes/pkg/apis/core/validation" - - quotav1 "github.com/openshift/api/quota/v1" -) - -// convertClusterResourceQuotaToAppliedClusterQuota returns back a converted AppliedClusterResourceQuota which is NOT a deep copy. -func convertAppliedClusterResourceQuotaToClusterResourceQuota(in *quotav1.AppliedClusterResourceQuota) *quotav1.ClusterResourceQuota { - return "av1.ClusterResourceQuota{ - ObjectMeta: in.ObjectMeta, - Spec: in.Spec, - Status: in.Status, - } -} - -func ValidateClusterResourceQuota(clusterquota *quotav1.ClusterResourceQuota) field.ErrorList { - allErrs := validation.ValidateObjectMeta(&clusterquota.ObjectMeta, false, validation.ValidateResourceQuotaName, field.NewPath("metadata")) - - hasSelectionCriteria := (clusterquota.Spec.Selector.LabelSelector != nil && len(clusterquota.Spec.Selector.LabelSelector.MatchLabels)+len(clusterquota.Spec.Selector.LabelSelector.MatchExpressions) > 0) || - (len(clusterquota.Spec.Selector.AnnotationSelector) > 0) - - if !hasSelectionCriteria { - allErrs = append(allErrs, field.Required(field.NewPath("spec", "selector"), "must restrict the selected projects")) - } - if clusterquota.Spec.Selector.LabelSelector != nil { - allErrs = append(allErrs, unversionedvalidation.ValidateLabelSelector(clusterquota.Spec.Selector.LabelSelector, field.NewPath("spec", "selector", "labels"))...) - if len(clusterquota.Spec.Selector.LabelSelector.MatchLabels)+len(clusterquota.Spec.Selector.LabelSelector.MatchExpressions) == 0 { - allErrs = append(allErrs, field.Invalid(field.NewPath("spec", "selector", "labels"), clusterquota.Spec.Selector.LabelSelector, "must restrict the selected projects")) - } - } - if clusterquota.Spec.Selector.AnnotationSelector != nil { - allErrs = append(allErrs, validation.ValidateAnnotations(clusterquota.Spec.Selector.AnnotationSelector, field.NewPath("spec", "selector", "annotations"))...) - } - - internalQuota := &core.ResourceQuotaSpec{} - if err := v1.Convert_v1_ResourceQuotaSpec_To_core_ResourceQuotaSpec(&clusterquota.Spec.Quota, internalQuota, nil); err != nil { - panic(err) - } - internalStatus := &core.ResourceQuotaStatus{} - if err := v1.Convert_v1_ResourceQuotaStatus_To_core_ResourceQuotaStatus(&clusterquota.Status.Total, internalStatus, nil); err != nil { - panic(err) - } - - allErrs = append(allErrs, validation.ValidateResourceQuotaSpec(internalQuota, field.NewPath("spec", "quota"))...) - allErrs = append(allErrs, validation.ValidateResourceQuotaStatus(internalStatus, field.NewPath("status", "overall"))...) - - orderedNamespaces := clusterquota.Status.Namespaces.DeepCopy() - sort.Slice(orderedNamespaces, func(i, j int) bool { - return orderedNamespaces[i].Namespace < orderedNamespaces[j].Namespace - }) - - for _, namespace := range orderedNamespaces { - fldPath := field.NewPath("status", "namespaces").Key(namespace.Namespace) - for k, v := range namespace.Status.Used { - resPath := fldPath.Key(string(k)) - allErrs = append(allErrs, validation.ValidateResourceQuotaResourceName(string(k), resPath)...) - allErrs = append(allErrs, validation.ValidateResourceQuantityValue(string(k), v, resPath)...) - } - } - - return allErrs -} - -func ValidateClusterResourceQuotaUpdate(clusterquota, oldClusterResourceQuota *quotav1.ClusterResourceQuota) field.ErrorList { - allErrs := validation.ValidateObjectMetaUpdate(&clusterquota.ObjectMeta, &oldClusterResourceQuota.ObjectMeta, field.NewPath("metadata")) - allErrs = append(allErrs, ValidateClusterResourceQuota(clusterquota)...) - - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation_test.go deleted file mode 100644 index c1dbf76ae..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota/validation/validation_test.go +++ /dev/null @@ -1,173 +0,0 @@ -package validation - -import ( - "testing" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/kubernetes/pkg/apis/core" - corekubev1 "k8s.io/kubernetes/pkg/apis/core/v1" - "k8s.io/kubernetes/pkg/apis/core/validation" - - quotav1 "github.com/openshift/api/quota/v1" -) - -func spec(scopes ...corev1.ResourceQuotaScope) corev1.ResourceQuotaSpec { - return corev1.ResourceQuotaSpec{ - Hard: corev1.ResourceList{ - corev1.ResourceCPU: resource.MustParse("100"), - corev1.ResourceMemory: resource.MustParse("10000"), - corev1.ResourceRequestsCPU: resource.MustParse("100"), - corev1.ResourceRequestsMemory: resource.MustParse("10000"), - corev1.ResourceLimitsCPU: resource.MustParse("100"), - corev1.ResourceLimitsMemory: resource.MustParse("10000"), - corev1.ResourcePods: resource.MustParse("10"), - corev1.ResourceServices: resource.MustParse("0"), - corev1.ResourceReplicationControllers: resource.MustParse("10"), - corev1.ResourceQuotas: resource.MustParse("10"), - corev1.ResourceConfigMaps: resource.MustParse("10"), - corev1.ResourceSecrets: resource.MustParse("10"), - }, - Scopes: scopes, - } -} - -func scopeableSpec(scopes ...corev1.ResourceQuotaScope) corev1.ResourceQuotaSpec { - return corev1.ResourceQuotaSpec{ - Hard: corev1.ResourceList{ - corev1.ResourceCPU: resource.MustParse("100"), - corev1.ResourceMemory: resource.MustParse("10000"), - corev1.ResourceRequestsCPU: resource.MustParse("100"), - corev1.ResourceRequestsMemory: resource.MustParse("10000"), - corev1.ResourceLimitsCPU: resource.MustParse("100"), - corev1.ResourceLimitsMemory: resource.MustParse("10000"), - }, - Scopes: scopes, - } -} - -func TestValidationClusterQuota(t *testing.T) { - // storage is not yet supported as a quota tracked resource - invalidQuotaResourceSpec := corev1.ResourceQuotaSpec{ - Hard: corev1.ResourceList{ - corev1.ResourceStorage: resource.MustParse("10"), - }, - } - validLabels := map[string]string{"a": "b"} - - errs := ValidateClusterResourceQuota( - "av1.ClusterResourceQuota{ - ObjectMeta: metav1.ObjectMeta{Name: "good"}, - Spec: quotav1.ClusterResourceQuotaSpec{ - Selector: quotav1.ClusterResourceQuotaSelector{LabelSelector: &metav1.LabelSelector{MatchLabels: validLabels}}, - Quota: spec(), - }, - }, - ) - if len(errs) != 0 { - t.Errorf("expected success: %v", errs) - } - - errorCases := map[string]struct { - A quotav1.ClusterResourceQuota - T field.ErrorType - F string - }{ - "non-zero-length namespace": { - A: quotav1.ClusterResourceQuota{ - ObjectMeta: metav1.ObjectMeta{Namespace: "bad", Name: "good"}, - Spec: quotav1.ClusterResourceQuotaSpec{ - Selector: quotav1.ClusterResourceQuotaSelector{LabelSelector: &metav1.LabelSelector{MatchLabels: validLabels}}, - Quota: spec(), - }, - }, - T: field.ErrorTypeForbidden, - F: "metadata.namespace", - }, - "missing label selector": { - A: quotav1.ClusterResourceQuota{ - ObjectMeta: metav1.ObjectMeta{Name: "good"}, - Spec: quotav1.ClusterResourceQuotaSpec{ - Quota: spec(), - }, - }, - T: field.ErrorTypeRequired, - F: "spec.selector", - }, - "ok scope": { - A: quotav1.ClusterResourceQuota{ - ObjectMeta: metav1.ObjectMeta{Name: "good"}, - Spec: quotav1.ClusterResourceQuotaSpec{ - Quota: scopeableSpec(corev1.ResourceQuotaScopeNotTerminating), - }, - }, - T: field.ErrorTypeRequired, - F: "spec.selector", - }, - "bad scope": { - A: quotav1.ClusterResourceQuota{ - ObjectMeta: metav1.ObjectMeta{Name: "good"}, - Spec: quotav1.ClusterResourceQuotaSpec{ - Selector: quotav1.ClusterResourceQuotaSelector{LabelSelector: &metav1.LabelSelector{MatchLabels: validLabels}}, - Quota: spec(corev1.ResourceQuotaScopeNotTerminating), - }, - }, - T: field.ErrorTypeInvalid, - F: "spec.quota.scopes", - }, - "bad quota spec": { - A: quotav1.ClusterResourceQuota{ - ObjectMeta: metav1.ObjectMeta{Name: "good"}, - Spec: quotav1.ClusterResourceQuotaSpec{ - Selector: quotav1.ClusterResourceQuotaSelector{LabelSelector: &metav1.LabelSelector{MatchLabels: validLabels}}, - Quota: invalidQuotaResourceSpec, - }, - }, - T: field.ErrorTypeInvalid, - F: "spec.quota.hard[storage]", - }, - } - for k, v := range errorCases { - errs := ValidateClusterResourceQuota(&v.A) - if len(errs) == 0 { - t.Errorf("expected failure %s for %v", k, v.A) - continue - } - for i := range errs { - if errs[i].Type != v.T { - t.Errorf("%s: expected errors to have type %s: %v", k, v.T, errs[i]) - } - if errs[i].Field != v.F { - t.Errorf("%s: expected errors to have field %s: %v", k, v.F, errs[i]) - } - } - } -} - -func TestValidationQuota(t *testing.T) { - tests := map[string]struct { - A corev1.ResourceQuota - T field.ErrorType - F string - }{ - "scope": { - A: corev1.ResourceQuota{ - ObjectMeta: metav1.ObjectMeta{Namespace: "ns", Name: "good"}, - Spec: scopeableSpec(corev1.ResourceQuotaScopeNotTerminating), - }, - }, - } - for k, v := range tests { - internal := core.ResourceQuota{} - if err := corekubev1.Convert_v1_ResourceQuota_To_core_ResourceQuota(&v.A, &internal, nil); err != nil { - panic(err) - } - errs := validation.ValidateResourceQuota(&internal) - if len(errs) != 0 { - t.Errorf("%s: %v", k, errs) - continue - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource.go deleted file mode 100644 index 7b0f1ab35..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource.go +++ /dev/null @@ -1,53 +0,0 @@ -package config - -import ( - "fmt" - "io" - - "k8s.io/apiserver/pkg/admission" -) - -const PluginName = "config.openshift.io/DenyDeleteClusterConfiguration" - -// Register registers an admission plugin factory whose plugin prevents the deletion of cluster configuration resources. -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return newAdmissionPlugin(), nil - }) -} - -var _ admission.ValidationInterface = &admissionPlugin{} - -type admissionPlugin struct { - *admission.Handler -} - -func newAdmissionPlugin() *admissionPlugin { - return &admissionPlugin{Handler: admission.NewHandler(admission.Delete)} -} - -// Validate returns an error if there is an attempt to delete a cluster configuration resource. -func (p *admissionPlugin) Validate(attributes admission.Attributes, _ admission.ObjectInterfaces) error { - if len(attributes.GetSubresource()) > 0 { - return nil - } - if attributes.GetResource().Group != "config.openshift.io" { - return nil - } - // clusteroperators can be deleted so that we can force status refreshes and change over time. - // clusterversions not named `version` can be deleted (none are expected to exist). - // other config.openshift.io resources not named `cluster` can be deleted (none are expected to exist). - switch attributes.GetResource().Resource { - case "clusteroperators": - return nil - case "clusterversions": - if attributes.GetName() != "version" { - return nil - } - default: - if attributes.GetName() != "cluster" { - return nil - } - } - return admission.NewForbidden(attributes, fmt.Errorf("deleting required %s.%s resource, named %s, is not allowed", attributes.GetResource().Resource, attributes.GetResource().Group, attributes.GetName())) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource_test.go deleted file mode 100644 index b911788ec..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/config/deny_delete_cluster_config_resource_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package config - -import ( - "testing" - - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apiserver/pkg/admission" -) - -func TestAdmissionPlugin_Validate(t *testing.T) { - testCases := []struct { - tcName string - group string - resource string - name string - denyDelete bool - }{ - { - tcName: "NotWhiteListedResourceNamedCluster", - group: "config.openshift.io", - resource: "notWhitelisted", - name: "cluster", - denyDelete: true, - }, - { - tcName: "NotWhiteListedResourceNotNamedCluster", - group: "config.openshift.io", - resource: "notWhitelisted", - name: "notCluster", - denyDelete: false, - }, - { - tcName: "ClusterVersionVersion", - group: "config.openshift.io", - resource: "clusterversions", - name: "version", - denyDelete: true, - }, - { - tcName: "ClusterVersionNotVersion", - group: "config.openshift.io", - resource: "clusterversions", - name: "instance", - denyDelete: false, - }, - { - tcName: "ClusterOperator", - group: "config.openshift.io", - resource: "clusteroperator", - name: "instance", - denyDelete: false, - }, - { - tcName: "OtherGroup", - group: "not.config.openshift.io", - resource: "notWhitelisted", - name: "cluster", - denyDelete: false, - }, - } - for _, tc := range testCases { - t.Run(tc.tcName, func(t *testing.T) { - err := newAdmissionPlugin().Validate(admission.NewAttributesRecord( - nil, nil, schema.GroupVersionKind{}, "", - tc.name, schema.GroupVersionResource{Group: tc.group, Resource: tc.resource}, - "", admission.Delete, false, nil), nil) - if tc.denyDelete != (err != nil) { - t.Error(tc.denyDelete, err) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/console/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/console/OWNERS deleted file mode 100644 index 027982c01..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/console/OWNERS +++ /dev/null @@ -1,8 +0,0 @@ -reviewers: - - spadgett - - benjaminapetersen - - enj -approvers: - - spadgett - - benjaminapetersen - - enj diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/console/validate_console.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/console/validate_console.go deleted file mode 100644 index 3cdd31c9e..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/console/validate_console.go +++ /dev/null @@ -1,118 +0,0 @@ -package console - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/api/validation" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -const PluginName = "config.openshift.io/ValidateConsole" - -// Register registers a plugin -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return customresourcevalidation.NewValidator( - map[schema.GroupResource]bool{ - configv1.GroupVersion.WithResource("consoles").GroupResource(): true, - }, - map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ - configv1.GroupVersion.WithKind("Console"): consoleV1{}, - }) - }) -} - -func toConsoleV1(uncastObj runtime.Object) (*configv1.Console, field.ErrorList) { - if uncastObj == nil { - return nil, nil - } - - errs := field.ErrorList{} - - obj, ok := uncastObj.(*configv1.Console) - if !ok { - return nil, append(errs, - field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"Console"}), - field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) - } - - return obj, nil -} - -type consoleV1 struct{} - -func (consoleV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { - obj, errs := toConsoleV1(uncastObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) - errs = append(errs, validateConsoleSpecCreate(obj.Spec)...) - - return errs -} - -func (consoleV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toConsoleV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toConsoleV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - errs = append(errs, validateConsoleSpecUpdate(obj.Spec, oldObj.Spec)...) - - return errs -} - -func (consoleV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toConsoleV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toConsoleV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - errs = append(errs, validateConsoleStatus(obj.Status)...) - - return errs -} - -func validateConsoleSpecCreate(spec configv1.ConsoleSpec) field.ErrorList { - errs := field.ErrorList{} - - // TODO - - return errs -} - -func validateConsoleSpecUpdate(newSpec, oldSpec configv1.ConsoleSpec) field.ErrorList { - errs := field.ErrorList{} - - // TODO - - return errs -} - -func validateConsoleStatus(status configv1.ConsoleStatus) field.ErrorList { - errs := field.ErrorList{} - - // TODO - - return errs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/OWNERS deleted file mode 100644 index 7862bdf2b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/OWNERS +++ /dev/null @@ -1,7 +0,0 @@ -reviewers: - - deads2k - - enj - - mfojtik -approvers: - - deads2k - - mfojtik diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/cr_validation_registration.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/cr_validation_registration.go deleted file mode 100644 index bdc4681be..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration/cr_validation_registration.go +++ /dev/null @@ -1,60 +0,0 @@ -package customresourcevalidationregistration - -import ( - "k8s.io/apiserver/pkg/admission" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/apiserver" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/authentication" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/clusterresourcequota" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/config" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/console" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/image" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/project" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/scheduler" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints" -) - -// AllCustomResourceValidators are the names of all custom resource validators that should be registered -var AllCustomResourceValidators = []string{ - apiserver.PluginName, - authentication.PluginName, - features.PluginName, - console.PluginName, - image.PluginName, - oauth.PluginName, - project.PluginName, - config.PluginName, - scheduler.PluginName, - clusterresourcequota.PluginName, - securitycontextconstraints.PluginName, - rolebindingrestriction.PluginName, - - // this one is special because we don't work without it. - securitycontextconstraints.DefaultingPluginName, -} - -func RegisterCustomResourceValidation(plugins *admission.Plugins) { - apiserver.Register(plugins) - authentication.Register(plugins) - features.Register(plugins) - console.Register(plugins) - image.Register(plugins) - oauth.Register(plugins) - project.Register(plugins) - config.Register(plugins) - scheduler.Register(plugins) - - // This plugin validates the quota.openshift.io/v1 ClusterResourceQuota resources. - // NOTE: This is only allowed because it is required to get a running control plane operator. - clusterresourcequota.Register(plugins) - // This plugin validates the security.openshift.io/v1 SecurityContextConstraints resources. - securitycontextconstraints.Register(plugins) - // This plugin validates the authorization.openshift.io/v1 RoleBindingRestriction resources. - rolebindingrestriction.Register(plugins) - - // this one is special because we don't work without it. - securitycontextconstraints.RegisterDefaulting(plugins) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator.go deleted file mode 100644 index dc4c82db5..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator.go +++ /dev/null @@ -1,97 +0,0 @@ -package customresourcevalidation - -import ( - "fmt" - - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" -) - -type ObjectValidator interface { - ValidateCreate(obj runtime.Object) field.ErrorList - ValidateUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList - ValidateStatusUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList -} - -// ValidateCustomResource is an implementation of admission.Interface. -// It looks at all new pods and overrides each container's image pull policy to Always. -type validateCustomResource struct { - *admission.Handler - - resources map[schema.GroupResource]bool - validators map[schema.GroupVersionKind]ObjectValidator -} - -func NewValidator(resources map[schema.GroupResource]bool, validators map[schema.GroupVersionKind]ObjectValidator) (admission.ValidationInterface, error) { - return &validateCustomResource{ - Handler: admission.NewHandler(admission.Create, admission.Update), - resources: resources, - validators: validators, - }, nil -} - -var _ admission.ValidationInterface = &validateCustomResource{} - -// Validate is an admission function that will validate a CRD in config.openshift.io. uncastAttributes are attributes -// that are of type unstructured. -func (a *validateCustomResource) Validate(uncastAttributes admission.Attributes, _ admission.ObjectInterfaces) error { - attributes := &unstructuredUnpackingAttributes{Attributes: uncastAttributes} - if a.shouldIgnore(attributes) { - return nil - } - validator, ok := a.validators[attributes.GetKind()] - if !ok { - return admission.NewForbidden(attributes, fmt.Errorf("unhandled kind: %v", attributes.GetKind())) - } - - switch attributes.GetOperation() { - case admission.Create: - // creating subresources isn't something we understand, but we can be pretty sure we don't need to validate it - if len(attributes.GetSubresource()) > 0 { - return nil - } - errors := validator.ValidateCreate(attributes.GetObject()) - if len(errors) == 0 { - return nil - } - return apierrors.NewInvalid(attributes.GetKind().GroupKind(), attributes.GetName(), errors) - - case admission.Update: - switch attributes.GetSubresource() { - case "": - errors := validator.ValidateUpdate(attributes.GetObject(), attributes.GetOldObject()) - if len(errors) == 0 { - return nil - } - return apierrors.NewInvalid(attributes.GetKind().GroupKind(), attributes.GetName(), errors) - - case "status": - errors := validator.ValidateStatusUpdate(attributes.GetObject(), attributes.GetOldObject()) - if len(errors) == 0 { - return nil - } - return apierrors.NewInvalid(attributes.GetKind().GroupKind(), attributes.GetName(), errors) - - default: - return admission.NewForbidden(attributes, fmt.Errorf("unhandled subresource: %v", attributes.GetSubresource())) - } - - default: - return admission.NewForbidden(attributes, fmt.Errorf("unhandled operation: %v", attributes.GetOperation())) - } -} - -func (a *validateCustomResource) shouldIgnore(attributes admission.Attributes) bool { - if !a.resources[attributes.GetResource().GroupResource()] { - return true - } - // if a subresource is specified and it isn't status, skip it - if len(attributes.GetSubresource()) > 0 && attributes.GetSubresource() != "status" { - return true - } - - return false -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator_test.go deleted file mode 100644 index b9614337c..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidator_test.go +++ /dev/null @@ -1,276 +0,0 @@ -package customresourcevalidation - -import ( - "errors" - "fmt" - "reflect" - "testing" - - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - - configv1 "github.com/openshift/api/config/v1" -) - -func TestCustomResourceValidator(t *testing.T) { - - const ( - testGroup = "config.openshift.io" - testVersion = "v1" - testResource = "images" - testKind = "Image" - ) - - var testObjectType *configv1.Image - - testCases := []struct { - description string - object runtime.Object - objectBytes []byte - oldObject runtime.Object - oldObjectBytes []byte - kind schema.GroupVersionKind - namespace string - name string - resource schema.GroupVersionResource - subresource string - operation admission.Operation - userInfo user.Info - expectError bool - expectCreateFuncCalled bool - expectUpdateFuncCalled bool - expectStatusUpdateFuncCalled bool - validateFuncErr bool - expectedObjectType interface{} - }{ - { - description: "ShouldIgnoreUnknownResource", - resource: schema.GroupVersionResource{ - Group: "other_group", - Version: "other_version", - Resource: "other_resource", - }, - }, - { - description: "ShouldIgnoreUnknownSubresource", - subresource: "not_status", - }, - { - description: "ShouldIgnoreUnknownSubresource", - subresource: "not_status", - }, - { - description: "UnhandledOperationConnect", - operation: admission.Connect, - expectError: true, - }, - { - description: "UnhandledOperationDelete", - operation: admission.Delete, - expectError: true, - }, - { - description: "UnhandledKind", - operation: admission.Create, - kind: schema.GroupVersionKind{ - Group: "other_group", - Version: "other_version", - Kind: "other_resource", - }, - expectError: true, - }, - { - description: "Create", - operation: admission.Create, - objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), - expectCreateFuncCalled: true, - expectedObjectType: testObjectType, - }, - { - description: "CreateSubresourceNope", - operation: admission.Create, - subresource: "status", - objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), - }, - { - description: "CreateError", - operation: admission.Create, - objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), - validateFuncErr: true, - expectCreateFuncCalled: true, - expectError: true, - }, - { - description: "Update", - operation: admission.Update, - objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), - oldObjectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), - expectUpdateFuncCalled: true, - expectedObjectType: testObjectType, - }, - { - description: "UpdateError", - operation: admission.Update, - objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), - oldObjectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), - validateFuncErr: true, - expectError: true, - }, - { - description: "UpdateStatus", - operation: admission.Update, - subresource: "status", - objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), - oldObjectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), - expectStatusUpdateFuncCalled: true, - expectedObjectType: testObjectType, - }, - { - description: "UpdateStatusError", - operation: admission.Update, - subresource: "status", - objectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), - oldObjectBytes: []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v/%v"}`, testKind, testGroup, testVersion)), - expectStatusUpdateFuncCalled: true, - validateFuncErr: true, - expectError: true, - }, - } - - for _, tc := range testCases { - t.Run(tc.description, func(t *testing.T) { - - var createFuncCalled bool - var updateFuncCalled bool - var updateStatusFuncCalled bool - var funcArgObject runtime.Object - var funcArgOldObject runtime.Object - - handler, err := NewValidator( - map[schema.GroupResource]bool{ - {Group: testGroup, Resource: testResource}: true, - }, - map[schema.GroupVersionKind]ObjectValidator{ - {Group: testGroup, Version: testVersion, Kind: testKind}: testValidator{ - validateCreate: func(obj runtime.Object) field.ErrorList { - createFuncCalled = true - if tc.validateFuncErr { - return field.ErrorList{field.InternalError(field.NewPath("test"), errors.New("TEST Error"))} - } - funcArgObject = obj - return nil - }, - validateUpdate: func(obj runtime.Object, oldObj runtime.Object) field.ErrorList { - if tc.validateFuncErr { - return field.ErrorList{field.InternalError(field.NewPath("test"), errors.New("TEST Error"))} - } - updateFuncCalled = true - funcArgObject = obj - funcArgOldObject = oldObj - return nil - }, - validateStatusUpdate: func(obj runtime.Object, oldObj runtime.Object) field.ErrorList { - updateStatusFuncCalled = true - if tc.validateFuncErr { - return field.ErrorList{field.InternalError(field.NewPath("test"), errors.New("TEST Error"))} - } - funcArgObject = obj - funcArgOldObject = oldObj - return nil - }, - }, - }, - ) - if err != nil { - t.Fatal(err) - } - validator := handler.(admission.ValidationInterface) - - if len(tc.objectBytes) > 0 { - object, kind, err := unstructured.UnstructuredJSONScheme.Decode(tc.objectBytes, nil, nil) - if err != nil { - t.Fatal(err) - } - tc.object = object.(runtime.Object) - tc.kind = *kind - } - - if len(tc.oldObjectBytes) > 0 { - object, kind, err := unstructured.UnstructuredJSONScheme.Decode(tc.oldObjectBytes, nil, nil) - if err != nil { - t.Fatal(err) - } - tc.oldObject = object.(runtime.Object) - tc.kind = *kind - } - - if tc.resource == (schema.GroupVersionResource{}) { - tc.resource = schema.GroupVersionResource{ - Group: testGroup, - Version: testVersion, - Resource: testResource, - } - } - - attributes := admission.NewAttributesRecord( - tc.object, - tc.oldObject, - tc.kind, - tc.namespace, - tc.name, - tc.resource, - tc.subresource, - tc.operation, - false, - tc.userInfo, - ) - - err = validator.Validate(attributes, nil) - switch { - case tc.expectError && err == nil: - t.Error("Error expected") - case !tc.expectError && err != nil: - t.Errorf("Unexpected error: %v", err) - } - if tc.expectCreateFuncCalled != createFuncCalled { - t.Errorf("ValidateObjCreateFunc called: expected: %v, actual: %v", tc.expectCreateFuncCalled, createFuncCalled) - } - if tc.expectUpdateFuncCalled != updateFuncCalled { - t.Errorf("ValidateObjUpdateFunc called: expected: %v, actual: %v", tc.expectUpdateFuncCalled, updateFuncCalled) - } - if tc.expectStatusUpdateFuncCalled != updateStatusFuncCalled { - t.Errorf("ValidateStatusUpdateFunc called: expected: %v, actual: %v", tc.expectStatusUpdateFuncCalled, updateStatusFuncCalled) - } - if reflect.TypeOf(tc.expectedObjectType) != reflect.TypeOf(funcArgObject) { - t.Errorf("Expected %T, actual %T", tc.expectedObjectType, funcArgObject) - } - if (tc.oldObject != nil) && (reflect.TypeOf(tc.expectedObjectType) != reflect.TypeOf(funcArgOldObject)) { - t.Errorf("Expected %T, actual %T", tc.expectedObjectType, funcArgOldObject) - } - }) - } - -} - -type testValidator struct { - validateCreate func(uncastObj runtime.Object) field.ErrorList - validateUpdate func(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList - validateStatusUpdate func(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList -} - -func (v testValidator) ValidateCreate(uncastObj runtime.Object) field.ErrorList { - return v.validateCreate(uncastObj) -} - -func (v testValidator) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - return v.validateUpdate(uncastObj, uncastOldObj) - -} - -func (v testValidator) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - return v.validateStatusUpdate(uncastObj, uncastOldObj) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features/OWNERS deleted file mode 100644 index ab7603dba..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features/OWNERS +++ /dev/null @@ -1,8 +0,0 @@ -reviewers: - - deads2k - - derekwaynecarr - - sjenning -approvers: - - deads2k - - derekwaynecarr - - sjenning diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features.go deleted file mode 100644 index 051ad9d4e..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features.go +++ /dev/null @@ -1,129 +0,0 @@ -package features - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/util/sets" - - "k8s.io/apimachinery/pkg/api/validation" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -const PluginName = "config.openshift.io/ValidateFeatureGate" - -// Register registers a plugin -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return customresourcevalidation.NewValidator( - map[schema.GroupResource]bool{ - configv1.Resource("features"): true, - }, - map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ - configv1.GroupVersion.WithKind("FeatureGate"): featureGateV1{}, - }) - }) -} - -func toFeatureGateV1(uncastObj runtime.Object) (*configv1.FeatureGate, field.ErrorList) { - if uncastObj == nil { - return nil, nil - } - - allErrs := field.ErrorList{} - - obj, ok := uncastObj.(*configv1.FeatureGate) - if !ok { - return nil, append(allErrs, - field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"FeatureGate"}), - field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) - } - - return obj, nil -} - -type featureGateV1 struct { -} - -var knownFeatureSets = sets.NewString("", string(configv1.TechPreviewNoUpgrade), string(configv1.CustomNoUpgrade)) - -func validateFeatureGateSpecCreate(spec configv1.FeatureGateSpec) field.ErrorList { - allErrs := field.ErrorList{} - - // on create, we only allow values that we are aware of - if !knownFeatureSets.Has(string(spec.FeatureSet)) { - allErrs = append(allErrs, field.NotSupported(field.NewPath("spec.featureSet"), spec.FeatureSet, knownFeatureSets.List())) - } - - return allErrs -} - -func validateFeatureGateSpecUpdate(spec, oldSpec configv1.FeatureGateSpec) field.ErrorList { - allErrs := field.ErrorList{} - - // on update, we don't fail validation on a field we don't recognize as long as it is not changing - if !knownFeatureSets.Has(string(spec.FeatureSet)) && oldSpec.FeatureSet != spec.FeatureSet { - allErrs = append(allErrs, field.NotSupported(field.NewPath("spec.featureSet"), spec.FeatureSet, knownFeatureSets.List())) - } - - // we do not allow anyone to take back TechPreview - if oldSpec.FeatureSet == configv1.TechPreviewNoUpgrade && spec.FeatureSet != configv1.TechPreviewNoUpgrade { - allErrs = append(allErrs, field.Forbidden(field.NewPath("spec.featureSet"), "once enabled, tech preview features may not be disabled")) - } - // we do not allow anyone to take back CustomNoUpgrade - if oldSpec.FeatureSet == configv1.CustomNoUpgrade && spec.FeatureSet != configv1.CustomNoUpgrade { - allErrs = append(allErrs, field.Forbidden(field.NewPath("spec.featureSet"), "once enabled, custom feature gates may not be disabled")) - } - - return allErrs -} - -func (featureGateV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { - obj, allErrs := toFeatureGateV1(uncastObj) - if len(allErrs) > 0 { - return allErrs - } - - allErrs = append(allErrs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) - allErrs = append(allErrs, validateFeatureGateSpecCreate(obj.Spec)...) - - return allErrs -} - -func (featureGateV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, allErrs := toFeatureGateV1(uncastObj) - if len(allErrs) > 0 { - return allErrs - } - oldObj, allErrs := toFeatureGateV1(uncastOldObj) - if len(allErrs) > 0 { - return allErrs - } - - allErrs = append(allErrs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, validateFeatureGateSpecUpdate(obj.Spec, oldObj.Spec)...) - - return allErrs -} - -func (featureGateV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toFeatureGateV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toFeatureGateV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - - return errs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features_test.go deleted file mode 100644 index 840d7d8ae..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/features/validate_features_test.go +++ /dev/null @@ -1,127 +0,0 @@ -package features - -import ( - "strings" - "testing" - - configv1 "github.com/openshift/api/config/v1" -) - -func TestValidateCreateSpec(t *testing.T) { - tests := []struct { - name string - featureSet string - expectedErr string - }{ - { - name: "empty", - featureSet: "", - expectedErr: "", - }, - { - name: "techpreview", - featureSet: string(configv1.TechPreviewNoUpgrade), - expectedErr: "", - }, - { - name: "not real", - featureSet: "fake-value", - expectedErr: "Unsupported value", - }, - } - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - actual := validateFeatureGateSpecCreate(configv1.FeatureGateSpec{FeatureGateSelection: configv1.FeatureGateSelection{FeatureSet: configv1.FeatureSet(tc.featureSet)}}) - switch { - case len(actual) == 0 && len(tc.expectedErr) == 0: - case len(actual) == 0 && len(tc.expectedErr) != 0: - t.Fatal(tc.expectedErr) - case len(actual) != 0 && len(tc.expectedErr) == 0: - t.Fatal(actual) - case len(actual) != 0 && len(tc.expectedErr) != 0: - found := false - for _, actualErr := range actual { - found = found || strings.Contains(actualErr.Error(), tc.expectedErr) - } - if !found { - t.Fatal(actual) - } - default: - } - - }) - } -} - -func TestValidateUpdateSpec(t *testing.T) { - tests := []struct { - name string - featureSet string - oldFeatureSet string - expectedErr string - }{ - { - name: "empty", - featureSet: "", - oldFeatureSet: "", - expectedErr: "", - }, - { - name: "change to techpreview", - featureSet: string(configv1.TechPreviewNoUpgrade), - oldFeatureSet: "", - expectedErr: "", - }, - { - name: "change from techpreview", - featureSet: "", - oldFeatureSet: string(configv1.TechPreviewNoUpgrade), - expectedErr: "once enabled, tech preview features may not be disabled", - }, - { - name: "change from custom", - featureSet: string(configv1.TechPreviewNoUpgrade), - oldFeatureSet: string(configv1.CustomNoUpgrade), - expectedErr: "once enabled, custom feature gates may not be disabled", - }, - { - name: "unknown, but no change", - featureSet: "fake-value", - oldFeatureSet: "fake-value", - expectedErr: "", - }, - { - name: "unknown, with change", - featureSet: "fake-value", - oldFeatureSet: "fake-value-2", - expectedErr: "Unsupported value", - }, - } - - for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - actual := validateFeatureGateSpecUpdate( - configv1.FeatureGateSpec{FeatureGateSelection: configv1.FeatureGateSelection{FeatureSet: configv1.FeatureSet(tc.featureSet)}}, - configv1.FeatureGateSpec{FeatureGateSelection: configv1.FeatureGateSelection{FeatureSet: configv1.FeatureSet(tc.oldFeatureSet)}}, - ) - switch { - case len(actual) == 0 && len(tc.expectedErr) == 0: - case len(actual) == 0 && len(tc.expectedErr) != 0: - t.Fatal(tc.expectedErr) - case len(actual) != 0 && len(tc.expectedErr) == 0: - t.Fatal(actual) - case len(actual) != 0 && len(tc.expectedErr) != 0: - found := false - for _, actualErr := range actual { - found = found || strings.Contains(actualErr.Error(), tc.expectedErr) - } - if !found { - t.Fatal(actual) - } - default: - } - - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/helpers.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/helpers.go deleted file mode 100644 index 9248d469a..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/helpers.go +++ /dev/null @@ -1,40 +0,0 @@ -package customresourcevalidation - -import ( - "strings" - - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/kubernetes/pkg/apis/core/validation" - - configv1 "github.com/openshift/api/config/v1" -) - -func ValidateConfigMapReference(path *field.Path, configMap configv1.ConfigMapNameReference, required bool) field.ErrorList { - return validateConfigMapSecret(path.Child("name"), configMap.Name, required, validation.ValidateConfigMapName) -} - -func ValidateSecretReference(path *field.Path, secret configv1.SecretNameReference, required bool) field.ErrorList { - return validateConfigMapSecret(path.Child("name"), secret.Name, required, validation.ValidateSecretName) -} - -func validateConfigMapSecret(path *field.Path, name string, required bool, validator validation.ValidateNameFunc) field.ErrorList { - if len(name) == 0 { - if required { - return field.ErrorList{field.Required(path, "")} - } - return nil - } - - if valErrs := validator(name, false); len(valErrs) > 0 { - return field.ErrorList{field.Invalid(path, name, strings.Join(valErrs, ", "))} - } - return nil -} - -// RequireNameCluster is a name validation function that requires the name to be cluster. It's handy for config.openshift.io types. -func RequireNameCluster(name string, prefix bool) []string { - if name != "cluster" { - return []string{"must be cluster"} - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/image/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/image/OWNERS deleted file mode 100644 index 0d0f251eb..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/image/OWNERS +++ /dev/null @@ -1,10 +0,0 @@ -reviewers: - - bparees - - legionus - - dmage - - coreydaley - - adambkaplan - - gabemontero -approvers: - - bparees - - adambkaplan diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/image/validate_image.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/image/validate_image.go deleted file mode 100644 index 535c09082..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/image/validate_image.go +++ /dev/null @@ -1,94 +0,0 @@ -package image - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/api/validation" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -const PluginName = "config.openshift.io/ValidateImage" - -// Register registers a plugin -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return customresourcevalidation.NewValidator( - map[schema.GroupResource]bool{ - configv1.Resource("images"): true, - }, - map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ - configv1.GroupVersion.WithKind("Image"): imageV1{}, - }) - }) -} - -func toImageV1(uncastObj runtime.Object) (*configv1.Image, field.ErrorList) { - if uncastObj == nil { - return nil, nil - } - - allErrs := field.ErrorList{} - - obj, ok := uncastObj.(*configv1.Image) - if !ok { - return nil, append(allErrs, - field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"Image"}), - field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) - } - - return obj, nil -} - -type imageV1 struct { -} - -func (imageV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { - obj, errs := toImageV1(uncastObj) - if len(errs) > 0 { - return errs - } - - // TODO validate the obj - errs = append(errs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) - - return errs -} - -func (imageV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toImageV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toImageV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - // TODO validate the obj - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - - return errs -} - -func (imageV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toImageV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toImageV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - - return errs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/OWNERS deleted file mode 100644 index 9cd743a88..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/OWNERS +++ /dev/null @@ -1,8 +0,0 @@ -reviewers: - - enj - - ericavonb - - mrogers950 - - sallyom - - stlaz -approvers: - - enj diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/helpers.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/helpers.go deleted file mode 100644 index 127c91e13..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/helpers.go +++ /dev/null @@ -1,33 +0,0 @@ -package oauth - -import ( - "net" - - kvalidation "k8s.io/apimachinery/pkg/util/validation" - "k8s.io/apimachinery/pkg/util/validation/field" - - configv1 "github.com/openshift/api/config/v1" - "github.com/openshift/library-go/pkg/config/validation" - crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -func isValidHostname(hostname string) bool { - return len(kvalidation.IsDNS1123Subdomain(hostname)) == 0 || net.ParseIP(hostname) != nil -} - -func ValidateRemoteConnectionInfo(remoteConnectionInfo configv1.OAuthRemoteConnectionInfo, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - - if len(remoteConnectionInfo.URL) == 0 { - allErrs = append(allErrs, field.Required(fldPath.Child("url"), "")) - } else { - _, urlErrs := validation.ValidateSecureURL(remoteConnectionInfo.URL, fldPath.Child("url")) - allErrs = append(allErrs, urlErrs...) - } - - allErrs = append(allErrs, crvalidation.ValidateConfigMapReference(fldPath.Child("ca"), remoteConnectionInfo.CA, false)...) - allErrs = append(allErrs, crvalidation.ValidateSecretReference(fldPath.Child("tlsClientCert"), remoteConnectionInfo.TLSClientCert, false)...) - allErrs = append(allErrs, crvalidation.ValidateSecretReference(fldPath.Child("tlsClientKey"), remoteConnectionInfo.TLSClientKey, false)...) - - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github.go deleted file mode 100644 index 2ae0b4525..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github.go +++ /dev/null @@ -1,69 +0,0 @@ -package oauth - -import ( - "strings" - - "k8s.io/apimachinery/pkg/util/validation/field" - - configv1 "github.com/openshift/api/config/v1" - crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -func ValidateGitHubIdentityProvider(provider *configv1.GitHubIdentityProvider, mappingMethod configv1.MappingMethodType, fieldPath *field.Path) field.ErrorList { - errs := field.ErrorList{} - if provider == nil { - errs = append(errs, field.Required(fieldPath, "")) - return errs - } - - errs = append(errs, ValidateOAuthIdentityProvider(provider.ClientID, provider.ClientSecret, fieldPath.Child("provider"))...) - - if len(provider.Teams) > 0 && len(provider.Organizations) > 0 { - errs = append(errs, field.Invalid(fieldPath.Child("organizations"), provider.Organizations, "specify organizations or teams, not both")) - errs = append(errs, field.Invalid(fieldPath.Child("teams"), provider.Teams, "specify organizations or teams, not both")) - } - - // only check that there are some teams/orgs if not GitHub Enterprise Server - if len(provider.Hostname) == 0 && len(provider.Teams) == 0 && len(provider.Organizations) == 0 && mappingMethod != configv1.MappingMethodLookup { - errs = append(errs, field.Invalid(fieldPath, nil, "one of organizations or teams must be specified unless hostname is set or lookup is used")) - } - for i, organization := range provider.Organizations { - if strings.Contains(organization, "/") { - errs = append(errs, field.Invalid(fieldPath.Child("organizations").Index(i), organization, "cannot contain /")) - } - if len(organization) == 0 { - errs = append(errs, field.Required(fieldPath.Child("organizations").Index(i), "cannot be empty")) - } - } - for i, team := range provider.Teams { - if split := strings.Split(team, "/"); len(split) != 2 { - errs = append(errs, field.Invalid(fieldPath.Child("teams").Index(i), team, "must be in the format /")) - } else if org, t := split[0], split[1]; len(org) == 0 || len(t) == 0 { - errs = append(errs, field.Invalid(fieldPath.Child("teams").Index(i), team, "must be in the format /")) - } - } - - if hostname := provider.Hostname; len(hostname) != 0 { - hostnamePath := fieldPath.Child("hostname") - - if hostname == "github.com" || strings.HasSuffix(hostname, ".github.com") { - errs = append(errs, field.Invalid(hostnamePath, hostname, "cannot equal [*.]github.com")) - } - - if !isValidHostname(hostname) { - errs = append(errs, field.Invalid(hostnamePath, hostname, "must be a valid DNS subdomain or IP address")) - } - } - - if caFile := provider.CA; len(caFile.Name) != 0 { - caPath := fieldPath.Child("ca") - - errs = append(errs, crvalidation.ValidateConfigMapReference(caPath, caFile, true)...) - - if len(provider.Hostname) == 0 { - errs = append(errs, field.Invalid(caPath, caFile, "cannot be specified when hostname is empty")) - } - } - - return errs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github_test.go deleted file mode 100644 index a11abb797..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_github_test.go +++ /dev/null @@ -1,249 +0,0 @@ -package oauth - -import ( - "reflect" - "testing" - - "k8s.io/apimachinery/pkg/util/validation/field" - - configv1 "github.com/openshift/api/config/v1" -) - -func TestValidateGitHubIdentityProvider(t *testing.T) { - type args struct { - provider *configv1.GitHubIdentityProvider - mappingMethod configv1.MappingMethodType - fieldPath *field.Path - } - tests := []struct { - name string - args args - errors field.ErrorList - }{ - { - name: "cannot use GH as hostname", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: []string{"org1"}, - Teams: nil, - Hostname: "github.com", - CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, - }, - mappingMethod: "", - }, - errors: field.ErrorList{ - {Type: field.ErrorTypeInvalid, Field: "hostname", BadValue: "github.com", Detail: "cannot equal [*.]github.com"}, - }, - }, - { - name: "cannot use GH subdomain as hostname", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: []string{"org1"}, - Teams: nil, - Hostname: "foo.github.com", - CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, - }, - mappingMethod: "", - }, - errors: field.ErrorList{ - {Type: field.ErrorTypeInvalid, Field: "hostname", BadValue: "foo.github.com", Detail: "cannot equal [*.]github.com"}, - }, - }, - { - name: "valid domain hostname", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: []string{"org1"}, - Teams: nil, - Hostname: "company.com", - CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, - }, - mappingMethod: "", - }, - }, - { - name: "valid ip hostname", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: []string{"org1"}, - Teams: nil, - Hostname: "192.168.8.1", - CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, - }, - mappingMethod: "", - }, - }, - { - name: "invalid ip hostname with port", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: []string{"org1"}, - Teams: nil, - Hostname: "192.168.8.1:8080", - CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, - }, - mappingMethod: "", - }, - errors: field.ErrorList{ - {Type: field.ErrorTypeInvalid, Field: "hostname", BadValue: "192.168.8.1:8080", Detail: "must be a valid DNS subdomain or IP address"}, - }, - }, - { - name: "invalid domain hostname", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: []string{"org1"}, - Teams: nil, - Hostname: "google-.com", - CA: configv1.ConfigMapNameReference{Name: "caconfigmap"}, - }, - mappingMethod: "", - }, - errors: field.ErrorList{ - {Type: field.ErrorTypeInvalid, Field: "hostname", BadValue: "google-.com", Detail: "must be a valid DNS subdomain or IP address"}, - }, - }, - { - name: "invalid name in ca ref and no hostname", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: []string{"org1"}, - Teams: nil, - Hostname: "", - CA: configv1.ConfigMapNameReference{Name: "ca&config-map"}, - }, - mappingMethod: "", - }, - errors: field.ErrorList{ - {Type: field.ErrorTypeInvalid, Field: "ca.name", BadValue: "ca&config-map", Detail: "a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')"}, - {Type: field.ErrorTypeInvalid, Field: "ca", BadValue: configv1.ConfigMapNameReference{Name: "ca&config-map"}, Detail: "cannot be specified when hostname is empty"}, - }, - }, - { - name: "valid ca and hostname", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: []string{"org1"}, - Teams: nil, - Hostname: "mo.co", - CA: configv1.ConfigMapNameReference{Name: "ca-config-map"}, - }, - mappingMethod: "", - }, - }, - { - name: "GitHub requires client ID and secret", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "", - ClientSecret: configv1.SecretNameReference{}, - Organizations: []string{"org1"}, - Teams: nil, - Hostname: "", - CA: configv1.ConfigMapNameReference{}, - }, - mappingMethod: "", - }, - errors: field.ErrorList{ - {Type: field.ErrorTypeRequired, Field: "provider.clientID", BadValue: "", Detail: ""}, - {Type: field.ErrorTypeRequired, Field: "provider.clientSecret.name", BadValue: "", Detail: ""}, - }, - }, - { - name: "GitHub warns when not constrained to organizations or teams without lookup", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: nil, - Teams: nil, - Hostname: "", - CA: configv1.ConfigMapNameReference{}, - }, - mappingMethod: "", - }, - errors: field.ErrorList{ - {Type: field.ErrorTypeInvalid, Field: "", BadValue: nil, Detail: "one of organizations or teams must be specified unless hostname is set or lookup is used"}, - }, - }, - { - name: "GitHub does not warn when not constrained to organizations or teams with lookup", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: nil, - Teams: nil, - Hostname: "", - CA: configv1.ConfigMapNameReference{}, - }, - mappingMethod: "lookup", - }, - }, - { - name: "invalid cannot specific both organizations and teams", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: []string{"org1"}, - Teams: []string{"org1/team1"}, - Hostname: "", - CA: configv1.ConfigMapNameReference{}, - }, - mappingMethod: "", - }, - errors: field.ErrorList{ - {Type: field.ErrorTypeInvalid, Field: "organizations", BadValue: []string{"org1"}, Detail: "specify organizations or teams, not both"}, - {Type: field.ErrorTypeInvalid, Field: "teams", BadValue: []string{"org1/team1"}, Detail: "specify organizations or teams, not both"}, - }, - }, - { - name: "invalid team format", - args: args{ - provider: &configv1.GitHubIdentityProvider{ - ClientID: "client", - ClientSecret: configv1.SecretNameReference{Name: "secret"}, - Organizations: nil, - Teams: []string{"org1/team1", "org2/not/team2", "org3//team3", "", "org4/team4"}, - Hostname: "", - CA: configv1.ConfigMapNameReference{}, - }, - mappingMethod: "", - }, - errors: field.ErrorList{ - {Type: field.ErrorTypeInvalid, Field: "teams[1]", BadValue: "org2/not/team2", Detail: "must be in the format /"}, - {Type: field.ErrorTypeInvalid, Field: "teams[2]", BadValue: "org3//team3", Detail: "must be in the format /"}, - {Type: field.ErrorTypeInvalid, Field: "teams[3]", BadValue: "", Detail: "must be in the format /"}, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := ValidateGitHubIdentityProvider(tt.args.provider, tt.args.mappingMethod, tt.args.fieldPath) - if tt.errors == nil && len(got) == 0 { - return - } - if !reflect.DeepEqual(got, tt.errors) { - t.Errorf("ValidateGitHubIdentityProvider() = %v, want %v", got, tt.errors) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab.go deleted file mode 100644 index ea9fda2ab..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab.go +++ /dev/null @@ -1,26 +0,0 @@ -package oauth - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - - configv1 "github.com/openshift/api/config/v1" - "github.com/openshift/library-go/pkg/config/validation" - crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -func ValidateGitLabIdentityProvider(provider *configv1.GitLabIdentityProvider, fieldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if provider == nil { - allErrs = append(allErrs, field.Required(fieldPath, "")) - return allErrs - } - - allErrs = append(allErrs, ValidateOAuthIdentityProvider(provider.ClientID, provider.ClientSecret, fieldPath)...) - - _, urlErrs := validation.ValidateSecureURL(provider.URL, fieldPath.Child("url")) - allErrs = append(allErrs, urlErrs...) - - allErrs = append(allErrs, crvalidation.ValidateConfigMapReference(fieldPath.Child("ca"), provider.CA, false)...) - - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab_test.go deleted file mode 100644 index 9ce73cdc7..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_gitlab_test.go +++ /dev/null @@ -1,104 +0,0 @@ -package oauth - -import ( - "reflect" - "testing" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/apimachinery/pkg/util/validation/field" -) - -func gitlabIDP() configv1.IdentityProviderConfig { - return configv1.IdentityProviderConfig{ - Type: configv1.IdentityProviderTypeGitLab, - GitLab: &configv1.GitLabIdentityProvider{ - ClientID: "masterOfInstances", - ClientSecret: configv1.SecretNameReference{Name: "secret-gitlab-secret"}, - URL: "https://thisgitlabinstancerighthere.com", - CA: configv1.ConfigMapNameReference{Name: "letsencrypt-for-gitlab.instance"}, - }, - } -} - -func TestValidateGitLabIdentityProvider(t *testing.T) { - type args struct { - provider *configv1.GitLabIdentityProvider - fieldPath *field.Path - } - tests := []struct { - name string - args args - want field.ErrorList - }{ - { - name: "nil input provider", - want: field.ErrorList{ - field.Required(nil, ""), - }, - }, - { - name: "insecure URL", - args: args{ - provider: &configv1.GitLabIdentityProvider{ - ClientID: "hereBeMyId", - ClientSecret: configv1.SecretNameReference{Name: "gitlab-client-sec"}, - URL: "http://anyonecanseemenow.com", - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("url"), "http://anyonecanseemenow.com", "must use https scheme"), - }, - }, - { - name: "missing client ID and secret", - args: args{ - provider: &configv1.GitLabIdentityProvider{ - URL: "https://privategitlab.com", - }, - }, - want: field.ErrorList{ - field.Required(field.NewPath("clientID"), ""), - field.Required(field.NewPath("clientSecret", "name"), ""), - }, - }, - { - name: "invalid CA ref name", - args: args{ - provider: &configv1.GitLabIdentityProvider{ - ClientID: "hereBeMyId", - ClientSecret: configv1.SecretNameReference{Name: "gitlab-client-sec"}, - URL: "https://anyonecanseemenow.com", - CA: configv1.ConfigMapNameReference{Name: "veryBadRefName?:("}, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("ca", "name"), "veryBadRefName?:(", wrongConfigMapSecretErrMsg), - }, - }, - { - name: "minimal passing case", - args: args{ - provider: &configv1.GitLabIdentityProvider{ - ClientID: "hereBeMyId", - ClientSecret: configv1.SecretNameReference{Name: "gitlab-client-sec"}, - URL: "https://anyonecanseemenow.com", - }, - }, - want: field.ErrorList{}, - }, - { - name: "more complicated case", - args: args{ - provider: gitlabIDP().GitLab, - }, - want: field.ErrorList{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := ValidateGitLabIdentityProvider(tt.args.provider, tt.args.fieldPath); !reflect.DeepEqual(got, tt.want) { - t.Errorf("ValidateGitLabIdentityProvider() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google.go deleted file mode 100644 index 481b162cf..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google.go +++ /dev/null @@ -1,23 +0,0 @@ -package oauth - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - - configv1 "github.com/openshift/api/config/v1" -) - -func ValidateGoogleIdentityProvider(provider *configv1.GoogleIdentityProvider, mappingMethod configv1.MappingMethodType, fieldPath *field.Path) field.ErrorList { - errs := field.ErrorList{} - if provider == nil { - errs = append(errs, field.Required(fieldPath, "")) - return errs - } - - errs = append(errs, ValidateOAuthIdentityProvider(provider.ClientID, provider.ClientSecret, fieldPath)...) - - if len(provider.HostedDomain) == 0 && mappingMethod != configv1.MappingMethodLookup { - errs = append(errs, field.Invalid(fieldPath.Child("hostedDomain"), nil, "hostedDomain must be specified unless lookup is used")) - } - - return errs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google_test.go deleted file mode 100644 index 88306d0f1..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_google_test.go +++ /dev/null @@ -1,90 +0,0 @@ -package oauth - -import ( - "reflect" - "testing" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/apimachinery/pkg/util/validation/field" -) - -func googleIDP() configv1.IdentityProviderConfig { - return configv1.IdentityProviderConfig{ - Type: configv1.IdentityProviderTypeGoogle, - Google: &configv1.GoogleIdentityProvider{ - ClientID: "masterOfInstances", - ClientSecret: configv1.SecretNameReference{Name: "secret-google-secret"}, - HostedDomain: "myprivategoogledomain.com", - }, - } -} - -func TestValidateGoogleIdentityProvider(t *testing.T) { - type args struct { - provider *configv1.GoogleIdentityProvider - mappingMethod configv1.MappingMethodType - fieldPath *field.Path - } - tests := []struct { - name string - args args - want field.ErrorList - }{ - { - name: "nil input provider", - want: field.ErrorList{ - field.Required(nil, ""), - }, - }, - { - name: "missing client ID and secret", - args: args{ - provider: &configv1.GoogleIdentityProvider{ - HostedDomain: "myprivategoogledomain.com", - }, - }, - want: field.ErrorList{ - field.Required(field.NewPath("clientID"), ""), - field.Required(field.NewPath("clientSecret", "name"), ""), - }, - }, - { - name: "no hosted domain with mapping method != 'lookup'", - args: args{ - provider: &configv1.GoogleIdentityProvider{ - ClientID: "masterOfInstances", - ClientSecret: configv1.SecretNameReference{Name: "secret-google-secret"}, - }, - mappingMethod: configv1.MappingMethodClaim, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("hostedDomain"), nil, "hostedDomain must be specified unless lookup is used"), - }, - }, - { - name: "no hosted domain with mapping method == 'lookup'", - args: args{ - provider: &configv1.GoogleIdentityProvider{ - ClientID: "masterOfInstances", - ClientSecret: configv1.SecretNameReference{Name: "secret-google-secret"}, - }, - mappingMethod: configv1.MappingMethodLookup, - }, - want: field.ErrorList{}, - }, - { - name: "working example", - args: args{ - provider: googleIDP().Google, - }, - want: field.ErrorList{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := ValidateGoogleIdentityProvider(tt.args.provider, tt.args.mappingMethod, tt.args.fieldPath); !reflect.DeepEqual(got, tt.want) { - t.Errorf("ValidateGoogleIdentityProvider() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp.go deleted file mode 100644 index 2cfb664c3..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp.go +++ /dev/null @@ -1,215 +0,0 @@ -package oauth - -import ( - "fmt" - "strings" - - "k8s.io/apimachinery/pkg/api/validation/path" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/validation/field" - pointerutil "k8s.io/utils/pointer" - - configv1 "github.com/openshift/api/config/v1" - crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -const ( - // MinimumInactivityTimeoutSeconds defines the the smallest value allowed - // for AccessTokenInactivityTimeoutSeconds. - // It also defines the ticker interval for the token update routine as - // MinimumInactivityTimeoutSeconds / 3 is used there. - MinimumInactivityTimeoutSeconds = 5 * 60 -) - -var validMappingMethods = sets.NewString( - string(configv1.MappingMethodLookup), - string(configv1.MappingMethodClaim), - string(configv1.MappingMethodAdd), -) - -func validateOAuthSpec(spec configv1.OAuthSpec) field.ErrorList { - errs := field.ErrorList{} - specPath := field.NewPath("spec") - - providerNames := sets.NewString() - - challengeIssuingIdentityProviders := []string{} - challengeRedirectingIdentityProviders := []string{} - - // TODO move to ValidateIdentityProviders (plural) - for i, identityProvider := range spec.IdentityProviders { - if isUsedAsChallenger(identityProvider.IdentityProviderConfig) { - // TODO fix CAO to properly let you use request header and other challengers by disabling the other ones on CLI - // RequestHeaderIdentityProvider is special, it can only react to challenge clients by redirecting them - // Make sure we don't have more than a single redirector, and don't have a mix of challenge issuers and redirectors - if identityProvider.Type == configv1.IdentityProviderTypeRequestHeader { - challengeRedirectingIdentityProviders = append(challengeRedirectingIdentityProviders, identityProvider.Name) - } else { - challengeIssuingIdentityProviders = append(challengeIssuingIdentityProviders, identityProvider.Name) - } - } - - identityProviderPath := specPath.Child("identityProviders").Index(i) - errs = append(errs, ValidateIdentityProvider(identityProvider, identityProviderPath)...) - - if len(identityProvider.Name) > 0 { - if providerNames.Has(identityProvider.Name) { - errs = append(errs, field.Invalid(identityProviderPath.Child("name"), identityProvider.Name, "must have a unique name")) - } - providerNames.Insert(identityProvider.Name) - } - } - - if len(challengeRedirectingIdentityProviders) > 1 { - errs = append(errs, field.Invalid(specPath.Child("identityProviders"), "", fmt.Sprintf("only one identity provider can redirect clients requesting an authentication challenge, found: %v", strings.Join(challengeRedirectingIdentityProviders, ", ")))) - } - if len(challengeRedirectingIdentityProviders) > 0 && len(challengeIssuingIdentityProviders) > 0 { - errs = append(errs, field.Invalid(specPath.Child("identityProviders"), "", fmt.Sprintf( - "cannot mix providers that redirect clients requesting auth challenges (%s) with providers issuing challenges to those clients (%s)", - strings.Join(challengeRedirectingIdentityProviders, ", "), - strings.Join(challengeIssuingIdentityProviders, ", "), - ))) - } - - // TODO move to ValidateTokenConfig - timeout := spec.TokenConfig.AccessTokenInactivityTimeoutSeconds - if timeout > 0 && timeout < MinimumInactivityTimeoutSeconds { - errs = append(errs, field.Invalid( - specPath.Child("tokenConfig", "accessTokenInactivityTimeoutSeconds"), timeout, - fmt.Sprintf("the minimum acceptable token timeout value is %d seconds", - MinimumInactivityTimeoutSeconds))) - } - - if tokenMaxAge := spec.TokenConfig.AccessTokenMaxAgeSeconds; tokenMaxAge < 0 { - errs = append(errs, field.Invalid(specPath.Child("tokenConfig", "accessTokenMaxAgeSeconds"), tokenMaxAge, "must be a positive integer or 0")) - } - - // TODO move to ValidateTemplates - errs = append(errs, crvalidation.ValidateSecretReference(specPath.Child("templates", "login"), spec.Templates.Login, false)...) - errs = append(errs, crvalidation.ValidateSecretReference(specPath.Child("templates", "providerSelection"), spec.Templates.ProviderSelection, false)...) - errs = append(errs, crvalidation.ValidateSecretReference(specPath.Child("templates", "error"), spec.Templates.Error, false)...) - - return errs -} - -// if you change this, update the peer in user validation. also, don't change this. -func validateIdentityProviderName(name string) []string { - if reasons := path.ValidatePathSegmentName(name, false); len(reasons) != 0 { - return reasons - } - - if strings.Contains(name, ":") { - return []string{`may not contain ":"`} - } - return nil -} - -func ValidateIdentityProvider(identityProvider configv1.IdentityProvider, fldPath *field.Path) field.ErrorList { - errs := field.ErrorList{} - - if len(identityProvider.Name) == 0 { - errs = append(errs, field.Required(fldPath.Child("name"), "")) - } else if reasons := validateIdentityProviderName(identityProvider.Name); len(reasons) != 0 { - errs = append(errs, field.Invalid(fldPath.Child("name"), identityProvider.Name, strings.Join(reasons, ", "))) - } - - if len(identityProvider.MappingMethod) > 0 && !validMappingMethods.Has(string(identityProvider.MappingMethod)) { - errs = append(errs, field.NotSupported(fldPath.Child("mappingMethod"), identityProvider.MappingMethod, validMappingMethods.List())) - } - - provider := identityProvider.IdentityProviderConfig - // create a copy of the provider to simplify checking that only one IdPs is set - providerCopy := provider.DeepCopy() - switch provider.Type { - case "": - errs = append(errs, field.Required(fldPath.Child("type"), "")) - - case configv1.IdentityProviderTypeRequestHeader: - errs = append(errs, ValidateRequestHeaderIdentityProvider(provider.RequestHeader, fldPath)...) - providerCopy.RequestHeader = nil - - case configv1.IdentityProviderTypeBasicAuth: - // TODO move to ValidateBasicAuthIdentityProvider for consistency - if provider.BasicAuth == nil { - errs = append(errs, field.Required(fldPath.Child("basicAuth"), "")) - } else { - errs = append(errs, ValidateRemoteConnectionInfo(provider.BasicAuth.OAuthRemoteConnectionInfo, fldPath.Child("basicAuth"))...) - } - providerCopy.BasicAuth = nil - - case configv1.IdentityProviderTypeHTPasswd: - // TODO move to ValidateHTPasswdIdentityProvider for consistency - if provider.HTPasswd == nil { - errs = append(errs, field.Required(fldPath.Child("htpasswd"), "")) - } else { - errs = append(errs, crvalidation.ValidateSecretReference(fldPath.Child("htpasswd", "fileData"), provider.HTPasswd.FileData, true)...) - } - providerCopy.HTPasswd = nil - - case configv1.IdentityProviderTypeLDAP: - errs = append(errs, ValidateLDAPIdentityProvider(provider.LDAP, fldPath.Child("ldap"))...) - providerCopy.LDAP = nil - - case configv1.IdentityProviderTypeKeystone: - errs = append(errs, ValidateKeystoneIdentityProvider(provider.Keystone, fldPath.Child("keystone"))...) - providerCopy.Keystone = nil - - case configv1.IdentityProviderTypeGitHub: - errs = append(errs, ValidateGitHubIdentityProvider(provider.GitHub, identityProvider.MappingMethod, fldPath.Child("github"))...) - providerCopy.GitHub = nil - - case configv1.IdentityProviderTypeGitLab: - errs = append(errs, ValidateGitLabIdentityProvider(provider.GitLab, fldPath.Child("gitlab"))...) - providerCopy.GitLab = nil - - case configv1.IdentityProviderTypeGoogle: - errs = append(errs, ValidateGoogleIdentityProvider(provider.Google, identityProvider.MappingMethod, fldPath.Child("google"))...) - providerCopy.Google = nil - - case configv1.IdentityProviderTypeOpenID: - errs = append(errs, ValidateOpenIDIdentityProvider(provider.OpenID, fldPath.Child("openID"))...) - providerCopy.OpenID = nil - - default: - errs = append(errs, field.Invalid(fldPath.Child("type"), identityProvider.Type, "not a valid provider type")) - } - - if !pointerutil.AllPtrFieldsNil(providerCopy) { - errs = append(errs, field.Invalid(fldPath, identityProvider.IdentityProviderConfig, "only one identity provider can be configured in single object")) - } - - return errs -} - -func ValidateOAuthIdentityProvider(clientID string, clientSecretRef configv1.SecretNameReference, fieldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - - if len(clientID) == 0 { - allErrs = append(allErrs, field.Required(fieldPath.Child("clientID"), "")) - } - - allErrs = append(allErrs, crvalidation.ValidateSecretReference(fieldPath.Child("clientSecret"), clientSecretRef, true)...) - - return allErrs -} - -func isUsedAsChallenger(idp configv1.IdentityProviderConfig) bool { - // TODO this is wrong and needs to be more dynamic... - switch idp.Type { - // whitelist all the IdPs that we set `UseAsChallenger: true` in cluster-authentication-operator - case configv1.IdentityProviderTypeBasicAuth, configv1.IdentityProviderTypeGitLab, - configv1.IdentityProviderTypeHTPasswd, configv1.IdentityProviderTypeKeystone, - configv1.IdentityProviderTypeLDAP, - // guard open ID for now because it *could* have challenge in the future - configv1.IdentityProviderTypeOpenID: - return true - case configv1.IdentityProviderTypeRequestHeader: - if idp.RequestHeader == nil { - // this is an error reported elsewhere - return false - } - return len(idp.RequestHeader.ChallengeURL) > 0 - default: - return false - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp_test.go deleted file mode 100644 index 6c4013a4f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_idp_test.go +++ /dev/null @@ -1,421 +0,0 @@ -package oauth - -import ( - "fmt" - "reflect" - "testing" - - "k8s.io/apimachinery/pkg/util/validation/field" - - configv1 "github.com/openshift/api/config/v1" -) - -const wrongConfigMapSecretErrMsg string = "a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')" - -func htpasswdIDP() configv1.IdentityProviderConfig { - return configv1.IdentityProviderConfig{ - Type: configv1.IdentityProviderTypeHTPasswd, - HTPasswd: &configv1.HTPasswdIdentityProvider{ - FileData: configv1.SecretNameReference{ - Name: "innocent.llama", - }, - }, - } -} - -func TestValidateOAuthSpec(t *testing.T) { - doubledIdPs := configv1.IdentityProviderConfig{ - Type: configv1.IdentityProviderTypeHTPasswd, - HTPasswd: &configv1.HTPasswdIdentityProvider{ - FileData: configv1.SecretNameReference{ - Name: "innocent.llama", - }, - }, - GitLab: &configv1.GitLabIdentityProvider{ - ClientID: "masterOfInstances", - ClientSecret: configv1.SecretNameReference{Name: "secret-gitlab-secret"}, - URL: "https://thisgitlabinstancerighthere.com", - CA: configv1.ConfigMapNameReference{Name: "letsencrypt-for-gitlab.instance"}, - }, - } - - type args struct { - spec configv1.OAuthSpec - } - tests := []struct { - name string - args args - want field.ErrorList - }{ - { - name: "empty object", - args: args{ - spec: configv1.OAuthSpec{}, - }, - }, - { - name: "more than one challenge issuing IdPs", - args: args{ - spec: configv1.OAuthSpec{ - IdentityProviders: []configv1.IdentityProvider{ - { - Name: "htpasswd", - IdentityProviderConfig: htpasswdIDP(), - }, - { - Name: "ldap", - IdentityProviderConfig: ldapIDP(), - }, - }, - }, - }, - }, - { - name: "more than one challenge redirecting IdPs", - args: args{ - spec: configv1.OAuthSpec{ - IdentityProviders: []configv1.IdentityProvider{ - { - Name: "sso1", - IdentityProviderConfig: requestHeaderIDP(true, true), - }, - { - Name: "sso2", - IdentityProviderConfig: requestHeaderIDP(true, false), - }, - }, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("spec", "identityProviders"), "", "only one identity provider can redirect clients requesting an authentication challenge, found: sso1, sso2"), - }, - }, - { - name: "mixing challenge issuing and redirecting IdPs", - args: args{ - spec: configv1.OAuthSpec{ - IdentityProviders: []configv1.IdentityProvider{ - { - Name: "sso", - IdentityProviderConfig: requestHeaderIDP(true, false), - }, - { - Name: "ldap", - IdentityProviderConfig: ldapIDP(), - }, - }, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("spec", "identityProviders"), "", "cannot mix providers that redirect clients requesting auth challenges (sso) with providers issuing challenges to those clients (ldap)"), - }, - }, - { - name: "two IdPs with the same name", - args: args{ - spec: configv1.OAuthSpec{ - IdentityProviders: []configv1.IdentityProvider{ - { - Name: "aname", - IdentityProviderConfig: htpasswdIDP(), - }, - { - Name: "bname", - IdentityProviderConfig: htpasswdIDP(), - }, - { - Name: "aname", - IdentityProviderConfig: htpasswdIDP(), - }, - { - Name: "cname", - IdentityProviderConfig: htpasswdIDP(), - }, - }, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("spec", "identityProviders").Index(2).Child("name"), "aname", "must have a unique name"), - }, - }, - { - name: "negative token inactivity timeout", - args: args{ - spec: configv1.OAuthSpec{ - TokenConfig: configv1.TokenConfig{ - AccessTokenInactivityTimeoutSeconds: -50, - }, - }, - }, - }, - { - name: "positive token inactivity timeout", - args: args{ - spec: configv1.OAuthSpec{ - TokenConfig: configv1.TokenConfig{ - AccessTokenInactivityTimeoutSeconds: 32578, - }, - }, - }, - }, - { - name: "zero token inactivity timeout", - args: args{ - spec: configv1.OAuthSpec{ - TokenConfig: configv1.TokenConfig{ - AccessTokenInactivityTimeoutSeconds: 0, - }, - }, - }, - }, - { - name: "token inactivity timeout lower than the api constant minimum", - args: args{ - spec: configv1.OAuthSpec{ - TokenConfig: configv1.TokenConfig{ - AccessTokenInactivityTimeoutSeconds: 250, - }, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("spec", "tokenConfig", "accessTokenInactivityTimeoutSeconds"), 250, fmt.Sprintf("the minimum acceptable token timeout value is %d seconds", MinimumInactivityTimeoutSeconds)), - }, - }, - { - name: "negative token max age", - args: args{ - spec: configv1.OAuthSpec{ - TokenConfig: configv1.TokenConfig{ - AccessTokenMaxAgeSeconds: -20, - }, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("spec", "tokenConfig", "accessTokenMaxAgeSeconds"), -20, "must be a positive integer or 0"), - }, - }, - { - name: "positive token max age", - args: args{ - spec: configv1.OAuthSpec{ - TokenConfig: configv1.TokenConfig{ - AccessTokenMaxAgeSeconds: 213123, - }, - }, - }, - }, - { - name: "zero token max age", - args: args{ - spec: configv1.OAuthSpec{ - TokenConfig: configv1.TokenConfig{ - AccessTokenMaxAgeSeconds: 0, - }, - }, - }, - }, - { - name: "template names all messed up", - args: args{ - spec: configv1.OAuthSpec{ - Templates: configv1.OAuthTemplates{ - Login: configv1.SecretNameReference{Name: "/this/is/wrong.html"}, - ProviderSelection: configv1.SecretNameReference{Name: "also_wrong"}, - Error: configv1.SecretNameReference{Name: "the&very+woRst"}, - }, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("spec", "templates", "login", "name"), "/this/is/wrong.html", wrongConfigMapSecretErrMsg), - field.Invalid(field.NewPath("spec", "templates", "providerSelection", "name"), "also_wrong", wrongConfigMapSecretErrMsg), - field.Invalid(field.NewPath("spec", "templates", "error", "name"), "the&very+woRst", wrongConfigMapSecretErrMsg), - }, - }, - { - name: "everything set properly", - args: args{ - spec: configv1.OAuthSpec{ - IdentityProviders: []configv1.IdentityProvider{ - { - Name: "some_httpasswd", - IdentityProviderConfig: htpasswdIDP(), - }, - { - Name: "sso", - IdentityProviderConfig: requestHeaderIDP(false, true), - }, - }, - TokenConfig: configv1.TokenConfig{ - AccessTokenInactivityTimeoutSeconds: -1, - AccessTokenMaxAgeSeconds: 216000, - }, - Templates: configv1.OAuthTemplates{ - Login: configv1.SecretNameReference{Name: "my-login-template"}, - ProviderSelection: configv1.SecretNameReference{Name: "provider-selection.template"}, - Error: configv1.SecretNameReference{Name: "a.template-with-error"}, - }, - }, - }, - }, - { - name: "two different IdPs in one object", - args: args{ - spec: configv1.OAuthSpec{ - IdentityProviders: []configv1.IdentityProvider{ - { - Name: "bad_bad_config", - IdentityProviderConfig: doubledIdPs, - }, - }, - TokenConfig: configv1.TokenConfig{ - AccessTokenMaxAgeSeconds: 216000, - }, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("spec", "identityProviders").Index(0), doubledIdPs, "only one identity provider can be configured in single object"), - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := validateOAuthSpec(tt.args.spec) - - // DeepEqual does not seem to be working well here - var failedCheck bool - if len(got) != len(tt.want) { - failedCheck = true - } else { - // Check all the errors - for i := range got { - if got[i].Error() != tt.want[i].Error() { - failedCheck = true - break - } - } - } - - if failedCheck { - t.Errorf("validateOAuthSpec() = %v, want %v", got, tt.want) - } - }) - } -} - -func TestValidateIdentityProvider(t *testing.T) { - type args struct { - identityProvider configv1.IdentityProvider - fldPath *field.Path - } - tests := []struct { - name string - args args - want field.ErrorList - }{ - { - name: "empty provider needs at least name and type in provider", - args: args{ - identityProvider: configv1.IdentityProvider{}, - }, - want: field.ErrorList{ - field.Required(field.NewPath("name"), ""), - field.Required(field.NewPath("type"), ""), - }, - }, - { - name: "unknown type name", - args: args{ - identityProvider: configv1.IdentityProvider{ - Name: "providingProvider", - IdentityProviderConfig: configv1.IdentityProviderConfig{ - Type: "someText", - }, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("type"), "someText", "not a valid provider type"), - }, - }, - { - name: "basic provider", - args: args{ - identityProvider: configv1.IdentityProvider{ - Name: "providingProvider", - IdentityProviderConfig: htpasswdIDP(), - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := ValidateIdentityProvider(tt.args.identityProvider, tt.args.fldPath) - // DeepEqual does not seem to be working well here - var failedCheck bool - if len(got) != len(tt.want) { - failedCheck = true - } else { - // Check all the errors - for i := range got { - if got[i].Error() != tt.want[i].Error() { - failedCheck = true - break - } - } - } - - if failedCheck { - t.Errorf("ValidateIdentityProvider() = %v, want %v", got, tt.want) - } - }) - } -} - -func TestValidateOAuthIdentityProvider(t *testing.T) { - type args struct { - clientID string - clientSecretRef configv1.SecretNameReference - fieldPath *field.Path - } - tests := []struct { - name string - args args - want field.ErrorList - }{ - { - name: "empty client ID and secret ref", - args: args{ - clientID: "", - clientSecretRef: configv1.SecretNameReference{}, - }, - want: field.ErrorList{ - field.Required(field.NewPath("clientID"), ""), - field.Required(field.NewPath("clientSecret", "name"), ""), - }, - }, - { - name: "improper client secret refname", - args: args{ - clientID: "thisBeClient", - clientSecretRef: configv1.SecretNameReference{Name: "terribleName_forASecret"}, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("clientSecret", "name"), "terribleName_forASecret", wrongConfigMapSecretErrMsg), - }, - }, - { - name: "working example", - args: args{ - clientID: "thisBeClient", - clientSecretRef: configv1.SecretNameReference{Name: "client-secret-hideout"}, - }, - want: field.ErrorList{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := ValidateOAuthIdentityProvider(tt.args.clientID, tt.args.clientSecretRef, tt.args.fieldPath); !reflect.DeepEqual(got, tt.want) { - t.Errorf("ValidateOAuthIdentityProvider() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone.go deleted file mode 100644 index e1bf7cb76..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone.go +++ /dev/null @@ -1,23 +0,0 @@ -package oauth - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - - configv1 "github.com/openshift/api/config/v1" -) - -func ValidateKeystoneIdentityProvider(provider *configv1.KeystoneIdentityProvider, fldPath *field.Path) field.ErrorList { - errs := field.ErrorList{} - if provider == nil { - errs = append(errs, field.Required(fldPath, "")) - return errs - } - - errs = append(errs, ValidateRemoteConnectionInfo(provider.OAuthRemoteConnectionInfo, fldPath)...) - - if len(provider.DomainName) == 0 { - errs = append(errs, field.Required(field.NewPath("domainName"), "")) - } - - return errs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone_test.go deleted file mode 100644 index 6ccdddb7b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_keystone_test.go +++ /dev/null @@ -1,96 +0,0 @@ -package oauth - -import ( - "reflect" - "testing" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/apimachinery/pkg/util/validation/field" -) - -func keystoneIdP() configv1.IdentityProviderConfig { - return configv1.IdentityProviderConfig{ - Type: configv1.IdentityProviderTypeKeystone, - Keystone: &configv1.KeystoneIdentityProvider{ - OAuthRemoteConnectionInfo: configv1.OAuthRemoteConnectionInfo{ - URL: "https://somewhere.over.rainbow/ks", - CA: configv1.ConfigMapNameReference{Name: "govt-ca"}, - }, - DomainName: "production", - }, - } -} - -func TestValidateKeystoneIdentityProvider(t *testing.T) { - type args struct { - provider *configv1.KeystoneIdentityProvider - fldPath *field.Path - } - tests := []struct { - name string - args args - want field.ErrorList - }{ - { - name: "nil input provider", - want: field.ErrorList{ - field.Required(nil, ""), - }, - }, - { - name: "empty url", - args: args{ - provider: &configv1.KeystoneIdentityProvider{ - OAuthRemoteConnectionInfo: configv1.OAuthRemoteConnectionInfo{ - URL: "", - }, - DomainName: "production", - }, - }, - want: field.ErrorList{ - field.Required(field.NewPath("url"), ""), - }, - }, - { - name: "http url", - args: args{ - provider: &configv1.KeystoneIdentityProvider{ - OAuthRemoteConnectionInfo: configv1.OAuthRemoteConnectionInfo{ - URL: "http://foo", - }, - DomainName: "production", - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("url"), "http://foo", "must use https scheme"), - }, - }, - { - name: "missing domain name", - args: args{ - provider: &configv1.KeystoneIdentityProvider{ - OAuthRemoteConnectionInfo: configv1.OAuthRemoteConnectionInfo{ - URL: "https://keystone.openstack.nasa.gov/", - }, - }, - }, - want: field.ErrorList{ - field.Required(field.NewPath("domainName"), ""), - }, - }, - { - name: "working provider", - args: args{ - provider: keystoneIdP().Keystone, - }, - want: field.ErrorList{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := ValidateKeystoneIdentityProvider(tt.args.provider, tt.args.fldPath); !reflect.DeepEqual(got, tt.want) { - t.Errorf("ValidateKeystoneIdentityProvider() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap.go deleted file mode 100644 index b5f40060b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap.go +++ /dev/null @@ -1,66 +0,0 @@ -package oauth - -import ( - "fmt" - - "k8s.io/apimachinery/pkg/util/validation/field" - - configv1 "github.com/openshift/api/config/v1" - "github.com/openshift/library-go/pkg/security/ldaputil" - crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -func ValidateLDAPIdentityProvider(provider *configv1.LDAPIdentityProvider, fldPath *field.Path) field.ErrorList { - errs := field.ErrorList{} - - if provider == nil { - errs = append(errs, field.Required(fldPath, "")) - return errs - } - - errs = append(errs, validateLDAPClientConfig(provider.URL, provider.BindDN, provider.BindPassword.Name, provider.CA.Name, provider.Insecure, fldPath)...) - errs = append(errs, crvalidation.ValidateSecretReference(fldPath.Child("bindPassword"), provider.BindPassword, false)...) - errs = append(errs, crvalidation.ValidateConfigMapReference(fldPath.Child("ca"), provider.CA, false)...) - - // At least one attribute to use as the user id is required - if len(provider.Attributes.ID) == 0 { - errs = append(errs, field.Invalid(fldPath.Child("attributes", "id"), "[]", "at least one id attribute is required (LDAP standard identity attribute is 'dn')")) - } - - return errs -} - -// TODO clean this up -func validateLDAPClientConfig(url, bindDN, bindPasswordRef, CA string, insecure bool, fldPath *field.Path) field.ErrorList { - errs := field.ErrorList{} - - // Make sure bindDN and bindPassword are both set, or both unset - // Both unset means an anonymous bind is used for search (https://tools.ietf.org/html/rfc4513#section-5.1.1) - // Both set means the name/password simple bind is used for search (https://tools.ietf.org/html/rfc4513#section-5.1.3) - if (len(bindDN) == 0) != (len(bindPasswordRef) == 0) { - errs = append(errs, field.Invalid(fldPath.Child("bindDN"), bindDN, "bindDN and bindPassword must both be specified, or both be empty")) - errs = append(errs, field.Invalid(fldPath.Child("bindPassword").Child("name"), bindPasswordRef, "bindDN and bindPassword must both be specified, or both be empty")) - } - - if len(url) == 0 { - errs = append(errs, field.Required(fldPath.Child("url"), "")) - return errs - } - - u, err := ldaputil.ParseURL(url) - if err != nil { - errs = append(errs, field.Invalid(fldPath.Child("url"), url, err.Error())) - return errs - } - - if insecure { - if u.Scheme == ldaputil.SchemeLDAPS { - errs = append(errs, field.Invalid(fldPath.Child("url"), url, fmt.Sprintf("Cannot use %s scheme with insecure=true", u.Scheme))) - } - if len(CA) > 0 { - errs = append(errs, field.Invalid(fldPath.Child("ca"), CA, "Cannot specify a ca with insecure=true")) - } - } - - return errs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap_test.go deleted file mode 100644 index 85daa9e18..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_ldap_test.go +++ /dev/null @@ -1,101 +0,0 @@ -package oauth - -import ( - "reflect" - "testing" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/apimachinery/pkg/util/validation/field" -) - -func ldapIDP() configv1.IdentityProviderConfig { - return configv1.IdentityProviderConfig{ - Type: configv1.IdentityProviderTypeLDAP, - LDAP: &configv1.LDAPIdentityProvider{ - Attributes: configv1.LDAPAttributeMapping{ - ID: []string{"memberUid"}, - }, - BindDN: "uid=readallaccount,ou=privileged,dc=coolpeople,dc=se", - BindPassword: configv1.SecretNameReference{ - Name: "ldap-secret", - }, - CA: configv1.ConfigMapNameReference{Name: "ldap-ca-configmap"}, - Insecure: false, - URL: "ldaps://ldapinstance.corporate.coolpeople.se/ou=Groups,dc=coolpeople,dc=se?memberUid?sub", - }, - } -} - -func TestValidateLDAPIdentityProvider(t *testing.T) { - type args struct { - provider *configv1.LDAPIdentityProvider - fldPath *field.Path - } - tests := []struct { - name string - args args - want field.ErrorList - }{ - { - name: "nil input provider", - want: field.ErrorList{ - field.Required(nil, ""), - }, - }, - { - name: "invalid bindPassword ref name, missing ID", - args: args{ - provider: &configv1.LDAPIdentityProvider{ - BindPassword: configv1.SecretNameReference{Name: "bad_refname"}, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("bindDN"), "", "bindDN and bindPassword must both be specified, or both be empty"), - field.Invalid(field.NewPath("bindPassword", "name"), "bad_refname", "bindDN and bindPassword must both be specified, or both be empty"), - field.Required(field.NewPath("url"), ""), - field.Invalid(field.NewPath("bindPassword", "name"), "bad_refname", wrongConfigMapSecretErrMsg), - field.Invalid(field.NewPath("attributes", "id"), "[]", "at least one id attribute is required (LDAP standard identity attribute is 'dn')"), - }, - }, - { - name: "invalid url", - args: args{ - provider: &configv1.LDAPIdentityProvider{ - URL: "https://foo", - Attributes: configv1.LDAPAttributeMapping{ - ID: []string{"uid"}, - }, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("url"), "https://foo", `invalid scheme "https"`), - }, - }, - { - name: "minimal passing provider", - args: args{ - provider: &configv1.LDAPIdentityProvider{ - URL: "ldap://foo", - Attributes: configv1.LDAPAttributeMapping{ - ID: []string{"uid"}, - }, - }, - }, - want: field.ErrorList{}, - }, - { - name: "more complicated use", - args: args{ - provider: ldapIDP().LDAP, - }, - want: field.ErrorList{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := ValidateLDAPIdentityProvider(tt.args.provider, tt.args.fldPath); !reflect.DeepEqual(got, tt.want) { - t.Errorf("ValidateLDAPIdentityProvider() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_oauth.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_oauth.go deleted file mode 100644 index 5b8a146a6..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_oauth.go +++ /dev/null @@ -1,110 +0,0 @@ -package oauth - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/api/validation" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - - configv1 "github.com/openshift/api/config/v1" - crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -const PluginName = "config.openshift.io/ValidateOAuth" - -// Register registers a plugin -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return crvalidation.NewValidator( - map[schema.GroupResource]bool{ - configv1.GroupVersion.WithResource("oauths").GroupResource(): true, - }, - map[schema.GroupVersionKind]crvalidation.ObjectValidator{ - configv1.GroupVersion.WithKind("OAuth"): oauthV1{}, - }) - }) -} - -func toOAuthV1(uncastObj runtime.Object) (*configv1.OAuth, field.ErrorList) { - if uncastObj == nil { - return nil, nil - } - - errs := field.ErrorList{} - - obj, ok := uncastObj.(*configv1.OAuth) - if !ok { - return nil, append(errs, - field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"OAuth"}), - field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) - } - - return obj, nil -} - -type oauthV1 struct{} - -func (oauthV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { - obj, errs := toOAuthV1(uncastObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, crvalidation.RequireNameCluster, field.NewPath("metadata"))...) - errs = append(errs, validateOAuthSpecCreate(obj.Spec)...) - - return errs -} - -func (oauthV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toOAuthV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toOAuthV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - errs = append(errs, validateOAuthSpecUpdate(obj.Spec, oldObj.Spec)...) - - return errs -} - -func (oauthV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toOAuthV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toOAuthV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - errs = append(errs, validateOAuthStatus(obj.Status)...) - - return errs -} - -func validateOAuthSpecCreate(spec configv1.OAuthSpec) field.ErrorList { - return validateOAuthSpec(spec) -} - -func validateOAuthSpecUpdate(newspec, oldspec configv1.OAuthSpec) field.ErrorList { - return validateOAuthSpec(newspec) -} - -func validateOAuthStatus(status configv1.OAuthStatus) field.ErrorList { - errs := field.ErrorList{} - - // TODO - - return errs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid.go deleted file mode 100644 index 41d8c35db..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid.go +++ /dev/null @@ -1,54 +0,0 @@ -package oauth - -import ( - "fmt" - "strings" - - "k8s.io/apimachinery/pkg/util/validation/field" - - configv1 "github.com/openshift/api/config/v1" - "github.com/openshift/library-go/pkg/config/validation" - crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -func ValidateOpenIDIdentityProvider(provider *configv1.OpenIDIdentityProvider, fieldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if provider == nil { - allErrs = append(allErrs, field.Required(fieldPath, "")) - return allErrs - } - - allErrs = append(allErrs, ValidateOAuthIdentityProvider(provider.ClientID, provider.ClientSecret, fieldPath)...) - - if provider.Issuer != strings.TrimRight(provider.Issuer, "/") { - allErrs = append(allErrs, field.Invalid(fieldPath.Child("issuer"), provider.Issuer, "cannot end with '/'")) - } - - // The specs are a bit ambiguous on whether this must or needn't be https:// - // schema, but they do require (MUST) TLS support for the discovery and we do - // require this in out API description - // https://openid.net/specs/openid-connect-discovery-1_0.html#TLSRequirements - url, issuerErrs := validation.ValidateSecureURL(provider.Issuer, fieldPath.Child("issuer")) - allErrs = append(allErrs, issuerErrs...) - if len(url.RawQuery) > 0 || len(url.Fragment) > 0 { - allErrs = append(allErrs, field.Invalid(fieldPath.Child("issuer"), provider.Issuer, "must not specify query or fragment component")) - } - - allErrs = append(allErrs, crvalidation.ValidateConfigMapReference(fieldPath.Child("ca"), provider.CA, false)...) - - for i, scope := range provider.ExtraScopes { - // https://tools.ietf.org/html/rfc6749#section-3.3 (full list of allowed chars is %x21 / %x23-5B / %x5D-7E) - // for those without an ascii table, that's `!`, `#-[`, `]-~` inclusive. - for _, ch := range scope { - switch { - case ch == '!': - case ch >= '#' && ch <= '[': - case ch >= ']' && ch <= '~': - default: - allErrs = append(allErrs, field.Invalid(fieldPath.Child("extraScopes").Index(i), scope, fmt.Sprintf("cannot contain %v", ch))) - } - } - } - - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid_test.go deleted file mode 100644 index 849f636c7..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_openid_test.go +++ /dev/null @@ -1,125 +0,0 @@ -package oauth - -import ( - "reflect" - "testing" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/apimachinery/pkg/util/validation/field" -) - -func openidIDP() configv1.IdentityProviderConfig { - return configv1.IdentityProviderConfig{ - Type: configv1.IdentityProviderTypeOpenID, - OpenID: &configv1.OpenIDIdentityProvider{ - ClientID: "readallPerson", - ClientSecret: configv1.SecretNameReference{Name: "oidc-secret"}, - Issuer: "https://oidc-friendly.domain.com", - CA: configv1.ConfigMapNameReference{Name: "oidc-ca"}, - ExtraScopes: []string{"email", "profile"}, - ExtraAuthorizeParameters: map[string]string{ - "include_granted_scopes": "true", - }, - Claims: configv1.OpenIDClaims{ - PreferredUsername: []string{"full_name", "email"}, - Email: []string{"email"}, - }, - }, - } -} - -func TestValidateOpenIDIdentityProvider(t *testing.T) { - type args struct { - provider *configv1.OpenIDIdentityProvider - fieldPath *field.Path - } - tests := []struct { - name string - args args - want field.ErrorList - }{ - { - name: "nil input provider", - want: field.ErrorList{ - field.Required(nil, ""), - }, - }, - { - name: "missing client ID and secret", - args: args{ - provider: &configv1.OpenIDIdentityProvider{ - Issuer: "https://bigcorp.oidc.com", - }, - }, - want: field.ErrorList{ - field.Required(field.NewPath("clientID"), ""), - field.Required(field.NewPath("clientSecret", "name"), ""), - }, - }, - { - name: "missing issuer", - args: args{ - provider: &configv1.OpenIDIdentityProvider{ - ClientID: "readallPerson", - ClientSecret: configv1.SecretNameReference{Name: "oidc-secret"}, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("issuer"), "", "must contain a scheme (e.g. https://)"), - field.Invalid(field.NewPath("issuer"), "", "must contain a host"), - }, - }, - { - name: "issuer with http:// scheme", - args: args{ - provider: &configv1.OpenIDIdentityProvider{ - ClientID: "gentleDolphin", - ClientSecret: configv1.SecretNameReference{Name: "seemsliggit"}, - Issuer: "http://oidc-friendly.domain.com", - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("issuer"), "http://oidc-friendly.domain.com", "must use https scheme"), - }, - }, - { - name: "bad CA refname", - args: args{ - provider: &configv1.OpenIDIdentityProvider{ - ClientID: "readallPerson", - ClientSecret: configv1.SecretNameReference{Name: "oidc-secret"}, - Issuer: "https://oidc-friendly.domain.com", - CA: configv1.ConfigMapNameReference{Name: "teh_Nameofaca"}, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("ca", "name"), "teh_Nameofaca", wrongConfigMapSecretErrMsg), - }, - }, - { - name: "minimal working example", - args: args{ - provider: &configv1.OpenIDIdentityProvider{ - ClientID: "readallPerson", - ClientSecret: configv1.SecretNameReference{Name: "oidc-secret"}, - Issuer: "https://oidc-friendly.domain.com", - }, - }, - want: field.ErrorList{}, - }, - { - name: "more complicated use", - args: args{ - provider: openidIDP().OpenID, - }, - want: field.ErrorList{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := ValidateOpenIDIdentityProvider(tt.args.provider, tt.args.fieldPath); !reflect.DeepEqual(got, tt.want) { - t.Errorf("ValidateOpenIDIdentityProvider() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader.go deleted file mode 100644 index 93b7c5844..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader.go +++ /dev/null @@ -1,85 +0,0 @@ -package oauth - -import ( - "fmt" - "net/url" - "path" - "strings" - - "k8s.io/apimachinery/pkg/util/validation/field" - - configv1 "github.com/openshift/api/config/v1" - "github.com/openshift/library-go/pkg/config/validation" - crvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -const ( - // URLToken in the query of the redirectURL gets replaced with the original request URL, escaped as a query parameter. - // Example use: https://www.example.com/login?then=${url} - urlToken = "${url}" - - // QueryToken in the query of the redirectURL gets replaced with the original request URL, unescaped. - // Example use: https://www.example.com/sso/oauth/authorize?${query} - queryToken = "${query}" -) - -func ValidateRequestHeaderIdentityProvider(provider *configv1.RequestHeaderIdentityProvider, fieldPath *field.Path) field.ErrorList { - errs := field.ErrorList{} - if provider == nil { - errs = append(errs, field.Required(fieldPath, "")) - return errs - } - - errs = append(errs, crvalidation.ValidateConfigMapReference(fieldPath.Child("ca"), provider.ClientCA, true)...) - - if len(provider.Headers) == 0 { - errs = append(errs, field.Required(fieldPath.Child("headers"), "")) - } - - if len(provider.ChallengeURL) == 0 && len(provider.LoginURL) == 0 { - errs = append(errs, field.Required(fieldPath, "at least one of challengeURL or loginURL must be specified")) - } - - if len(provider.ChallengeURL) > 0 { - u, urlErrs := validation.ValidateURL(provider.ChallengeURL, fieldPath.Child("challengeURL")) - errs = append(errs, urlErrs...) - if len(urlErrs) == 0 { - if !hasParamToken(u) { - errs = append(errs, - field.Invalid(field.NewPath("challengeURL"), provider.ChallengeURL, - fmt.Sprintf("query does not include %q or %q, redirect will not preserve original authorize parameters", urlToken, queryToken)), - ) - } - } - } - - if len(provider.LoginURL) > 0 { - u, urlErrs := validation.ValidateURL(provider.LoginURL, fieldPath.Child("loginURL")) - errs = append(errs, urlErrs...) - if len(urlErrs) == 0 { - if !hasParamToken(u) { - errs = append(errs, - field.Invalid(fieldPath.Child("loginURL"), provider.LoginURL, - fmt.Sprintf("query does not include %q or %q, redirect will not preserve original authorize parameters", urlToken, queryToken), - ), - ) - } - if strings.HasSuffix(u.Path, "/") { - errs = append(errs, - field.Invalid(fieldPath.Child("loginURL"), provider.LoginURL, `path ends with "/", grant approval flows will not function correctly`), - ) - } - if _, file := path.Split(u.Path); file != "authorize" { - errs = append(errs, - field.Invalid(fieldPath.Child("loginURL"), provider.LoginURL, `path does not end with "/authorize", grant approval flows will not function correctly`), - ) - } - } - } - - return errs -} - -func hasParamToken(u *url.URL) bool { - return strings.Contains(u.RawQuery, urlToken) || strings.Contains(u.RawQuery, queryToken) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader_test.go deleted file mode 100644 index bd4beab06..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth/validate_requestheader_test.go +++ /dev/null @@ -1,193 +0,0 @@ -package oauth - -import ( - "reflect" - "testing" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/apimachinery/pkg/util/validation/field" -) - -func requestHeaderIDP(challenge, login bool) configv1.IdentityProviderConfig { - var challengeURL, loginURL string - - if challenge { - challengeURL = "https://sso.corporate.coolpeople.se/challenges/oauth/authorize?${query}" - } - if login { - loginURL = "https://sso.corporate.coolpeople.se/loginz/oauth/authorize?${query}" - } - - return configv1.IdentityProviderConfig{ - Type: configv1.IdentityProviderTypeRequestHeader, - RequestHeader: &configv1.RequestHeaderIdentityProvider{ - LoginURL: loginURL, - ChallengeURL: challengeURL, - ClientCA: configv1.ConfigMapNameReference{ - Name: "coolpeople-client-ca", - }, - ClientCommonNames: []string{"authn-proxy"}, - Headers: []string{"X-Remote-User", "SSO-User"}, - NameHeaders: []string{"X-Remote-User-Display-Name"}, - }, - } -} - -func TestValidateRequestHeaderIdentityProvider(t *testing.T) { - type args struct { - provider *configv1.RequestHeaderIdentityProvider - fieldPath *field.Path - } - tests := []struct { - name string - args args - want field.ErrorList - }{ - { - name: "nil input provider", - want: field.ErrorList{ - field.Required(nil, ""), - }, - }, - { - name: "empty provider", - args: args{ - provider: &configv1.RequestHeaderIdentityProvider{}, - }, - want: field.ErrorList{ - field.Required(field.NewPath("ca", "name"), ""), - field.Required(field.NewPath("headers"), ""), - {Type: field.ErrorTypeRequired, Field: "", BadValue: "", Detail: "at least one of challengeURL or loginURL must be specified"}, - }, - }, - { - name: "wrong ca refname", - args: args{ - provider: &configv1.RequestHeaderIdentityProvider{ - LoginURL: "http://oauth.coolpeoplecorp.com/login/authorize?${query}", - Headers: []string{"X-Remote-User"}, - ClientCA: configv1.ConfigMapNameReference{Name: "dat_badrefname"}, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("ca", "name"), "dat_badrefname", wrongConfigMapSecretErrMsg), - }, - }, - { - name: "challenge url without query, no client CA set", - args: args{ - provider: &configv1.RequestHeaderIdentityProvider{ - Headers: []string{"X-Remote-User"}, - ChallengeURL: "http://oauth.coolpeoplecorp.com/challenge-endpoint", - }, - }, - want: field.ErrorList{ - field.Required(field.NewPath("ca", "name"), ""), - field.Invalid(field.NewPath("challengeURL"), "http://oauth.coolpeoplecorp.com/challenge-endpoint", "query does not include \"${url}\" or \"${query}\", redirect will not preserve original authorize parameters"), - }, - }, - { - name: "challenge url with query - no ${url}, ${query}", - args: args{ - provider: &configv1.RequestHeaderIdentityProvider{ - Headers: []string{"X-Remote-User"}, - ChallengeURL: "http://oauth.coolpeoplecorp.com/challenge-endpoint?${sender}", - ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("challengeURL"), "http://oauth.coolpeoplecorp.com/challenge-endpoint?${sender}", "query does not include \"${url}\" or \"${query}\", redirect will not preserve original authorize parameters"), - }, - }, - { - name: "challenge url with query - ${url}", - args: args{ - provider: &configv1.RequestHeaderIdentityProvider{ - Headers: []string{"X-Remote-User"}, - ChallengeURL: "http://oauth.coolpeoplecorp.com/challenge-endpoint?${url}", - ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, - }, - }, - want: field.ErrorList{}, - }, - { - name: "login url without query and authorize", - args: args{ - provider: &configv1.RequestHeaderIdentityProvider{ - Headers: []string{"X-Remote-User"}, - LoginURL: "http://oauth.coolpeoplecorp.com/challenge-endpoint", - ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/challenge-endpoint", "query does not include \"${url}\" or \"${query}\", redirect will not preserve original authorize parameters"), - field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/challenge-endpoint", "path does not end with \"/authorize\", grant approval flows will not function correctly"), - }, - }, - { - name: "login url with query - no ${url}, ${query} - no client CA set", - args: args{ - provider: &configv1.RequestHeaderIdentityProvider{ - Headers: []string{"X-Remote-User"}, - LoginURL: "http://oauth.coolpeoplecorp.com/login-endpoint/authorize?${custom}", - }, - }, - want: field.ErrorList{ - field.Required(field.NewPath("ca", "name"), ""), - field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/login-endpoint/authorize?${custom}", "query does not include \"${url}\" or \"${query}\", redirect will not preserve original authorize parameters"), - }, - }, - { - name: "login url with query - ${query} - no /authorize", - args: args{ - provider: &configv1.RequestHeaderIdentityProvider{ - Headers: []string{"X-Remote-User"}, - LoginURL: "http://oauth.coolpeoplecorp.com/login-endpoint?${query}", - ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/login-endpoint?${query}", "path does not end with \"/authorize\", grant approval flows will not function correctly"), - }, - }, - { - name: "login url with query - ${query} - ends with /", - args: args{ - provider: &configv1.RequestHeaderIdentityProvider{ - Headers: []string{"X-Remote-User"}, - LoginURL: "http://oauth.coolpeoplecorp.com/login-endpoint/authorize/?${query}", - ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, - }, - }, - want: field.ErrorList{ - field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/login-endpoint/authorize/?${query}", "path ends with \"/\", grant approval flows will not function correctly"), - field.Invalid(field.NewPath("loginURL"), "http://oauth.coolpeoplecorp.com/login-endpoint/authorize/?${query}", "path does not end with \"/authorize\", grant approval flows will not function correctly"), - }, - }, - { - name: "login url with query - ${query}", - args: args{ - provider: &configv1.RequestHeaderIdentityProvider{ - Headers: []string{"X-Remote-User"}, - LoginURL: "http://oauth.coolpeoplecorp.com/login-endpoint/authorize?${query}", - ClientCA: configv1.ConfigMapNameReference{Name: "auth-ca"}, - }, - }, - want: field.ErrorList{}, - }, - { - name: "more complicated use", - args: args{ - provider: requestHeaderIDP(true, true).RequestHeader, - }, - want: field.ErrorList{}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := ValidateRequestHeaderIdentityProvider(tt.args.provider, tt.args.fieldPath); !reflect.DeepEqual(got, tt.want) { - t.Errorf("ValidateRequestHeaderIdentityProvider() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/project/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/project/OWNERS deleted file mode 100644 index 9cd743a88..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/project/OWNERS +++ /dev/null @@ -1,8 +0,0 @@ -reviewers: - - enj - - ericavonb - - mrogers950 - - sallyom - - stlaz -approvers: - - enj diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/project/validate_project.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/project/validate_project.go deleted file mode 100644 index 06ff8d967..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/project/validate_project.go +++ /dev/null @@ -1,111 +0,0 @@ -package project - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/api/validation" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - validationutil "k8s.io/apimachinery/pkg/util/validation" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -const PluginName = "config.openshift.io/ValidateProject" - -// Register registers a plugin -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return customresourcevalidation.NewValidator( - map[schema.GroupResource]bool{ - configv1.Resource("projects"): true, - }, - map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ - configv1.GroupVersion.WithKind("Project"): projectV1{}, - }) - }) -} - -func toProjectV1(uncastObj runtime.Object) (*configv1.Project, field.ErrorList) { - if uncastObj == nil { - return nil, nil - } - - allErrs := field.ErrorList{} - - obj, ok := uncastObj.(*configv1.Project) - if !ok { - return nil, append(allErrs, - field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"Project"}), - field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) - } - - return obj, nil -} - -type projectV1 struct { -} - -func validateProjectSpec(spec configv1.ProjectSpec) field.ErrorList { - allErrs := field.ErrorList{} - - if len(spec.ProjectRequestMessage) > 4096 { - allErrs = append(allErrs, field.Invalid(field.NewPath("spec.projectRequestMessage"), spec, validationutil.MaxLenError(4096))) - } - - if name := spec.ProjectRequestTemplate.Name; len(name) > 0 { - for _, msg := range validation.NameIsDNSSubdomain(spec.ProjectRequestTemplate.Name, false) { - allErrs = append(allErrs, field.Invalid(field.NewPath("spec.projectRequestTemplate.name"), name, msg)) - } - } - - return allErrs -} - -func (projectV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { - obj, allErrs := toProjectV1(uncastObj) - if len(allErrs) > 0 { - return allErrs - } - - allErrs = append(allErrs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) - allErrs = append(allErrs, validateProjectSpec(obj.Spec)...) - - return allErrs -} - -func (projectV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, allErrs := toProjectV1(uncastObj) - if len(allErrs) > 0 { - return allErrs - } - oldObj, allErrs := toProjectV1(uncastOldObj) - if len(allErrs) > 0 { - return allErrs - } - - allErrs = append(allErrs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, validateProjectSpec(obj.Spec)...) - - return allErrs -} - -func (projectV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toProjectV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toProjectV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - - return errs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validate_rbr.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validate_rbr.go deleted file mode 100644 index f8e04de28..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validate_rbr.go +++ /dev/null @@ -1,83 +0,0 @@ -package rolebindingrestriction - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/api/validation" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - - authorizationv1 "github.com/openshift/api/authorization/v1" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" - rbrvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validation" -) - -const PluginName = "authorization.openshift.io/ValidateRoleBindingRestriction" - -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return customresourcevalidation.NewValidator( - map[schema.GroupResource]bool{ - {Group: authorizationv1.GroupName, Resource: "rolebindingrestrictions"}: true, - }, - map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ - authorizationv1.GroupVersion.WithKind("RoleBindingRestriction"): roleBindingRestrictionV1{}, - }) - }) -} - -func toRoleBindingRestriction(uncastObj runtime.Object) (*authorizationv1.RoleBindingRestriction, field.ErrorList) { - if uncastObj == nil { - return nil, nil - } - - allErrs := field.ErrorList{} - - obj, ok := uncastObj.(*authorizationv1.RoleBindingRestriction) - if !ok { - return nil, append(allErrs, - field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"RoleBindingRestriction"}), - field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{authorizationv1.GroupVersion.String()})) - } - - return obj, nil -} - -type roleBindingRestrictionV1 struct { -} - -func (roleBindingRestrictionV1) ValidateCreate(obj runtime.Object) field.ErrorList { - roleBindingRestrictionObj, errs := toRoleBindingRestriction(obj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMeta(&roleBindingRestrictionObj.ObjectMeta, true, validation.NameIsDNSSubdomain, field.NewPath("metadata"))...) - errs = append(errs, rbrvalidation.ValidateRoleBindingRestriction(roleBindingRestrictionObj)...) - - return errs -} - -func (roleBindingRestrictionV1) ValidateUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { - roleBindingRestrictionObj, errs := toRoleBindingRestriction(obj) - if len(errs) > 0 { - return errs - } - roleBindingRestrictionOldObj, errs := toRoleBindingRestriction(oldObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, validation.ValidateObjectMeta(&roleBindingRestrictionObj.ObjectMeta, true, validation.NameIsDNSSubdomain, field.NewPath("metadata"))...) - errs = append(errs, rbrvalidation.ValidateRoleBindingRestrictionUpdate(roleBindingRestrictionObj, roleBindingRestrictionOldObj)...) - - return errs -} - -func (r roleBindingRestrictionV1) ValidateStatusUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { - return r.ValidateUpdate(obj, oldObj) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validation/validation.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validation/validation.go deleted file mode 100644 index e6ee1a40b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/rolebindingrestriction/validation/validation.go +++ /dev/null @@ -1,113 +0,0 @@ -package validation - -import ( - apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation" - unversionedvalidation "k8s.io/apimachinery/pkg/apis/meta/v1/validation" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/kubernetes/pkg/apis/core/validation" - - authorizationv1 "github.com/openshift/api/authorization/v1" -) - -func ValidateRoleBindingRestriction(rbr *authorizationv1.RoleBindingRestriction) field.ErrorList { - allErrs := validation.ValidateObjectMeta(&rbr.ObjectMeta, true, - apimachineryvalidation.NameIsDNSSubdomain, field.NewPath("metadata")) - - allErrs = append(allErrs, - ValidateRoleBindingRestrictionSpec(&rbr.Spec, field.NewPath("spec"))...) - - return allErrs -} - -func ValidateRoleBindingRestrictionUpdate(rbr, old *authorizationv1.RoleBindingRestriction) field.ErrorList { - allErrs := ValidateRoleBindingRestriction(rbr) - - allErrs = append(allErrs, validation.ValidateObjectMetaUpdate(&rbr.ObjectMeta, - &old.ObjectMeta, field.NewPath("metadata"))...) - - return allErrs -} - -func ValidateRoleBindingRestrictionSpec(spec *authorizationv1.RoleBindingRestrictionSpec, fld *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - const invalidMsg = `must specify exactly one of userrestriction, grouprestriction, or serviceaccountrestriction` - - if spec.UserRestriction != nil { - if spec.GroupRestriction != nil { - allErrs = append(allErrs, field.Invalid(fld.Child("grouprestriction"), - "both userrestriction and grouprestriction specified", invalidMsg)) - } - if spec.ServiceAccountRestriction != nil { - allErrs = append(allErrs, - field.Invalid(fld.Child("serviceaccountrestriction"), - "both userrestriction and serviceaccountrestriction specified", invalidMsg)) - } - } else if spec.GroupRestriction != nil { - if spec.ServiceAccountRestriction != nil { - allErrs = append(allErrs, - field.Invalid(fld.Child("serviceaccountrestriction"), - "both grouprestriction and serviceaccountrestriction specified", invalidMsg)) - } - } else if spec.ServiceAccountRestriction == nil { - allErrs = append(allErrs, field.Required(fld.Child("userrestriction"), - invalidMsg)) - } - - if spec.UserRestriction != nil { - allErrs = append(allErrs, ValidateRoleBindingRestrictionUser(spec.UserRestriction, fld.Child("userrestriction"))...) - } - if spec.GroupRestriction != nil { - allErrs = append(allErrs, ValidateRoleBindingRestrictionGroup(spec.GroupRestriction, fld.Child("grouprestriction"))...) - } - if spec.ServiceAccountRestriction != nil { - allErrs = append(allErrs, ValidateRoleBindingRestrictionServiceAccount(spec.ServiceAccountRestriction, fld.Child("serviceaccountrestriction"))...) - } - - return allErrs -} - -func ValidateRoleBindingRestrictionUser(user *authorizationv1.UserRestriction, fld *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - const invalidMsg = `must specify at least one user, group, or label selector` - - if !(len(user.Users) > 0 || len(user.Groups) > 0 || len(user.Selectors) > 0) { - allErrs = append(allErrs, field.Required(fld.Child("users"), invalidMsg)) - } - - for i, selector := range user.Selectors { - allErrs = append(allErrs, - unversionedvalidation.ValidateLabelSelector(&selector, - fld.Child("selector").Index(i))...) - } - - return allErrs -} - -func ValidateRoleBindingRestrictionGroup(group *authorizationv1.GroupRestriction, fld *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - const invalidMsg = `must specify at least one group or label selector` - - if !(len(group.Groups) > 0 || len(group.Selectors) > 0) { - allErrs = append(allErrs, field.Required(fld.Child("groups"), invalidMsg)) - } - - for i, selector := range group.Selectors { - allErrs = append(allErrs, - unversionedvalidation.ValidateLabelSelector(&selector, - fld.Child("selector").Index(i))...) - } - - return allErrs -} - -func ValidateRoleBindingRestrictionServiceAccount(sa *authorizationv1.ServiceAccountRestriction, fld *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - const invalidMsg = `must specify at least one service account or namespace` - - if !(len(sa.ServiceAccounts) > 0 || len(sa.Namespaces) > 0) { - allErrs = append(allErrs, - field.Required(fld.Child("serviceaccounts"), invalidMsg)) - } - - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/scheduler/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/scheduler/OWNERS deleted file mode 100644 index d795ef45b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/scheduler/OWNERS +++ /dev/null @@ -1,12 +0,0 @@ -reviewers: - - enj - - ericavonb - - mrogers950 - - sallyom - - stlaz - - ravisantoshgudimetla - - sjenning -approvers: - - enj - - ravisantoshgudimetla - - sjenning diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/scheduler/validate_scheduler.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/scheduler/validate_scheduler.go deleted file mode 100644 index ec5f51766..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/scheduler/validate_scheduler.go +++ /dev/null @@ -1,106 +0,0 @@ -package scheduler - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/api/validation" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - - configv1 "github.com/openshift/api/config/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" -) - -const PluginName = "config.openshift.io/ValidateScheduler" - -// Register registers a plugin -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return customresourcevalidation.NewValidator( - map[schema.GroupResource]bool{ - configv1.Resource("schedulers"): true, - }, - map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ - configv1.GroupVersion.WithKind("Scheduler"): schedulerV1{}, - }) - }) -} - -func toSchedulerV1(uncastObj runtime.Object) (*configv1.Scheduler, field.ErrorList) { - if uncastObj == nil { - return nil, nil - } - - allErrs := field.ErrorList{} - - obj, ok := uncastObj.(*configv1.Scheduler) - if !ok { - return nil, append(allErrs, - field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"Scheduler"}), - field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{"config.openshift.io/v1"})) - } - - return obj, nil -} - -type schedulerV1 struct { -} - -func validateSchedulerSpec(spec configv1.SchedulerSpec) field.ErrorList { - allErrs := field.ErrorList{} - - if name := spec.Policy.Name; len(name) > 0 { - for _, msg := range validation.NameIsDNSSubdomain(spec.Policy.Name, false) { - allErrs = append(allErrs, field.Invalid(field.NewPath("spec.Policy.name"), name, msg)) - } - } - - return allErrs -} - -func (schedulerV1) ValidateCreate(uncastObj runtime.Object) field.ErrorList { - obj, allErrs := toSchedulerV1(uncastObj) - if len(allErrs) > 0 { - return allErrs - } - - allErrs = append(allErrs, validation.ValidateObjectMeta(&obj.ObjectMeta, false, customresourcevalidation.RequireNameCluster, field.NewPath("metadata"))...) - allErrs = append(allErrs, validateSchedulerSpec(obj.Spec)...) - - return allErrs -} - -func (schedulerV1) ValidateUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, allErrs := toSchedulerV1(uncastObj) - if len(allErrs) > 0 { - return allErrs - } - oldObj, allErrs := toSchedulerV1(uncastOldObj) - if len(allErrs) > 0 { - return allErrs - } - - allErrs = append(allErrs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - allErrs = append(allErrs, validateSchedulerSpec(obj.Spec)...) - - return allErrs -} - -func (schedulerV1) ValidateStatusUpdate(uncastObj runtime.Object, uncastOldObj runtime.Object) field.ErrorList { - obj, errs := toSchedulerV1(uncastObj) - if len(errs) > 0 { - return errs - } - oldObj, errs := toSchedulerV1(uncastOldObj) - if len(errs) > 0 { - return errs - } - - // TODO validate the obj. remember that status validation should *never* fail on spec validation errors. - errs = append(errs, validation.ValidateObjectMetaUpdate(&obj.ObjectMeta, &oldObj.ObjectMeta, field.NewPath("metadata"))...) - - return errs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc.go deleted file mode 100644 index a7fb04a86..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc.go +++ /dev/null @@ -1,89 +0,0 @@ -package securitycontextconstraints - -import ( - "bytes" - "io" - - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apiserver/pkg/admission" - - securityv1 "github.com/openshift/api/security/v1" -) - -const DefaultingPluginName = "security.openshift.io/DefaultSecurityContextConstraints" - -func RegisterDefaulting(plugins *admission.Plugins) { - plugins.Register(DefaultingPluginName, func(config io.Reader) (admission.Interface, error) { - return NewDefaulter(), nil - }) -} - -type defaultSCC struct { - *admission.Handler - - scheme *runtime.Scheme - codecFactory runtimeserializer.CodecFactory -} - -var _ admission.MutationInterface = &defaultSCC{} - -func NewDefaulter() admission.Interface { - scheme := runtime.NewScheme() - codecFactory := runtimeserializer.NewCodecFactory(scheme) - utilruntime.Must(securityv1.Install(scheme)) - - return &defaultSCC{ - Handler: admission.NewHandler(admission.Create, admission.Update), - scheme: scheme, - codecFactory: codecFactory, - } -} - -// Admit defaults an SCC by going unstructured > external > internal > external > unstructured -func (a *defaultSCC) Admit(attributes admission.Attributes, o admission.ObjectInterfaces) error { - if a.shouldIgnore(attributes) { - return nil - } - - unstructuredOrig, ok := attributes.GetObject().(*unstructured.Unstructured) - if !ok { - return nil - } - buf := &bytes.Buffer{} - if err := unstructured.UnstructuredJSONScheme.Encode(unstructuredOrig, buf); err != nil { - return err - } - - uncastObj, err := runtime.Decode(a.codecFactory.UniversalDeserializer(), buf.Bytes()) - if err != nil { - return err - } - - outSCCExternal := uncastObj.(*securityv1.SecurityContextConstraints) - SetDefaults_SCC(outSCCExternal) - defaultedBytes, err := runtime.Encode(a.codecFactory.LegacyCodec(securityv1.GroupVersion), outSCCExternal) - outUnstructured := &unstructured.Unstructured{} - if _, _, err := unstructured.UnstructuredJSONScheme.Decode(defaultedBytes, nil, outUnstructured); err != nil { - return err - } - - unstructuredOrig.Object = outUnstructured.Object - - return nil -} - -func (a *defaultSCC) shouldIgnore(attributes admission.Attributes) bool { - if attributes.GetResource().GroupResource() != (schema.GroupResource{Group: "security.openshift.io", Resource: "securitycontextconstraints"}) { - return true - } - // if a subresource is specified, skip it - if len(attributes.GetSubresource()) > 0 { - return true - } - - return false -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc_test.go deleted file mode 100644 index 73da8d8ae..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaulting_scc_test.go +++ /dev/null @@ -1,273 +0,0 @@ -package securitycontextconstraints - -import ( - "bytes" - "reflect" - "testing" - - "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/diff" - "k8s.io/apiserver/pkg/admission" - - securityv1 "github.com/openshift/api/security/v1" - sccutil "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util" -) - -func TestDefaultingHappens(t *testing.T) { - inputSCC := `{ - "allowHostDirVolumePlugin": true, - "allowHostNetwork": true, - "allowHostPID": true, - "allowHostPorts": true, - "apiVersion": "security.openshift.io/v1", - "kind": "SecurityContextConstraints", - "metadata": { - "annotations": { - "kubernetes.io/description": "node-exporter scc is used for the Prometheus node exporter" - }, - "name": "node-exporter" - }, - "readOnlyRootFilesystem": false, - "runAsUser": { - "type": "RunAsAny" - }, - "seLinuxContext": { - "type": "RunAsAny" - }, - "users": [] -}` - - inputUnstructured := &unstructured.Unstructured{} - _, _, err := unstructured.UnstructuredJSONScheme.Decode([]byte(inputSCC), nil, inputUnstructured) - if err != nil { - t.Fatal(err) - } - - attributes := admission.NewAttributesRecord(inputUnstructured, nil, schema.GroupVersionKind{}, "", "", schema.GroupVersionResource{Group: "security.openshift.io", Resource: "securitycontextconstraints"}, "", admission.Create, false, nil) - defaulter := NewDefaulter() - if err := defaulter.(*defaultSCC).Admit(attributes, nil); err != nil { - t.Fatal(err) - } - - buf := &bytes.Buffer{} - if err := unstructured.UnstructuredJSONScheme.Encode(inputUnstructured, buf); err != nil { - t.Fatal(err) - } - - expectedSCC := `{ - "allowHostDirVolumePlugin": true, - "allowHostIPC": false, - "allowHostNetwork": true, - "allowHostPID": true, - "allowHostPorts": true, - "allowPrivilegeEscalation": true, - "allowPrivilegedContainer": false, - "allowedCapabilities": null, - "apiVersion": "security.openshift.io/v1", - "defaultAddCapabilities": null, - "fsGroup": { - "type": "RunAsAny" - }, - "groups": [], - "kind": "SecurityContextConstraints", - "metadata": { - "annotations": { - "kubernetes.io/description": "node-exporter scc is used for the Prometheus node exporter" - }, - "name": "node-exporter", - "creationTimestamp":null - }, - "priority": null, - "readOnlyRootFilesystem": false, - "requiredDropCapabilities": null, - "runAsUser": { - "type": "RunAsAny" - }, - "seLinuxContext": { - "type": "RunAsAny" - }, - "supplementalGroups": { - "type": "RunAsAny" - }, - "users": [], - "volumes": [ - "*" - ] -}` - expectedUnstructured := &unstructured.Unstructured{} - if _, _, err := unstructured.UnstructuredJSONScheme.Decode([]byte(expectedSCC), nil, expectedUnstructured); err != nil { - t.Fatal(err) - } - - if !reflect.DeepEqual(expectedUnstructured.Object, inputUnstructured.Object) { - t.Fatal(diff.ObjectDiff(expectedUnstructured.Object, inputUnstructured.Object)) - } -} - -func TestDefaultSecurityContextConstraints(t *testing.T) { - tests := map[string]struct { - scc *securityv1.SecurityContextConstraints - expectedFSGroup securityv1.FSGroupStrategyType - expectedSupGroup securityv1.SupplementalGroupsStrategyType - }{ - "shouldn't default": { - scc: &securityv1.SecurityContextConstraints{ - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - }, - }, - expectedFSGroup: securityv1.FSGroupStrategyMustRunAs, - expectedSupGroup: securityv1.SupplementalGroupsStrategyMustRunAs, - }, - "default fsgroup runAsAny": { - scc: &securityv1.SecurityContextConstraints{ - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyRunAsAny, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - }, - }, - expectedFSGroup: securityv1.FSGroupStrategyRunAsAny, - expectedSupGroup: securityv1.SupplementalGroupsStrategyMustRunAs, - }, - "default sup group runAsAny": { - scc: &securityv1.SecurityContextConstraints{ - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyRunAsAny, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - }, - }, - expectedFSGroup: securityv1.FSGroupStrategyMustRunAs, - expectedSupGroup: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - "default fsgroup runAsAny with mustRunAs UID strat": { - scc: &securityv1.SecurityContextConstraints{ - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAsRange, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - }, - }, - expectedFSGroup: securityv1.FSGroupStrategyRunAsAny, - expectedSupGroup: securityv1.SupplementalGroupsStrategyMustRunAs, - }, - "default sup group runAsAny with mustRunAs UID strat": { - scc: &securityv1.SecurityContextConstraints{ - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAsRange, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - }, - }, - expectedFSGroup: securityv1.FSGroupStrategyMustRunAs, - expectedSupGroup: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - } - for k, v := range tests { - SetDefaults_SCC(v.scc) - if v.scc.FSGroup.Type != v.expectedFSGroup { - t.Errorf("%s has invalid fsgroup. Expected: %v got: %v", k, v.expectedFSGroup, v.scc.FSGroup.Type) - } - if v.scc.SupplementalGroups.Type != v.expectedSupGroup { - t.Errorf("%s has invalid supplemental group. Expected: %v got: %v", k, v.expectedSupGroup, v.scc.SupplementalGroups.Type) - } - } -} - -func TestDefaultSCCVolumes(t *testing.T) { - tests := map[string]struct { - scc *securityv1.SecurityContextConstraints - expectedVolumes []securityv1.FSType - expectedHostDir bool - }{ - // this expects the volumes to default to all for an empty volume slice - // but since the host dir setting is false it should be all - host dir - "old client - default allow* fields, no volumes slice": { - scc: &securityv1.SecurityContextConstraints{}, - expectedVolumes: StringSetToFSType(sccutil.GetAllFSTypesExcept(string(securityv1.FSTypeHostPath))), - expectedHostDir: false, - }, - // this expects the volumes to default to all for an empty volume slice - "old client - set allowHostDir true fields, no volumes slice": { - scc: &securityv1.SecurityContextConstraints{ - AllowHostDirVolumePlugin: true, - }, - expectedVolumes: []securityv1.FSType{securityv1.FSTypeAll}, - expectedHostDir: true, - }, - "new client - allow* fields set with matching volume slice": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeHostPath}, - AllowHostDirVolumePlugin: true, - }, - expectedVolumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeHostPath}, - expectedHostDir: true, - }, - "new client - allow* fields set with mismatch host dir volume slice": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeHostPath}, - AllowHostDirVolumePlugin: false, - }, - expectedVolumes: []securityv1.FSType{securityv1.FSTypeEmptyDir}, - expectedHostDir: false, - }, - "new client - allow* fields set with mismatch FSTypeAll volume slice": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeAll}, - AllowHostDirVolumePlugin: false, - }, - expectedVolumes: StringSetToFSType(sccutil.GetAllFSTypesExcept(string(securityv1.FSTypeHostPath))), - expectedHostDir: false, - }, - "new client - allow* fields unset with volume slice": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeHostPath}, - }, - expectedVolumes: []securityv1.FSType{securityv1.FSTypeEmptyDir}, - expectedHostDir: false, - }, - "new client - extra volume params retained": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeHostPath, securityv1.FSTypeGitRepo}, - }, - expectedVolumes: []securityv1.FSType{securityv1.FSTypeEmptyDir, securityv1.FSTypeGitRepo}, - expectedHostDir: false, - }, - "new client - empty volume slice, host dir true": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{}, - AllowHostDirVolumePlugin: true, - }, - expectedVolumes: []securityv1.FSType{securityv1.FSTypeHostPath}, - expectedHostDir: true, - }, - "new client - empty volume slice, host dir false": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{}, - AllowHostDirVolumePlugin: false, - }, - expectedVolumes: []securityv1.FSType{securityv1.FSTypeNone}, - expectedHostDir: false, - }, - } - for k, v := range tests { - SetDefaults_SCC(v.scc) - - if !reflect.DeepEqual(v.scc.Volumes, v.expectedVolumes) { - t.Errorf("%s has invalid volumes. Expected: %v got: %v", k, v.expectedVolumes, v.scc.Volumes) - } - - if v.scc.AllowHostDirVolumePlugin != v.expectedHostDir { - t.Errorf("%s has invalid host dir. Expected: %v got: %v", k, v.expectedHostDir, v.scc.AllowHostDirVolumePlugin) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaults.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaults.go deleted file mode 100644 index 0ebde794a..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/defaults.go +++ /dev/null @@ -1,100 +0,0 @@ -package securitycontextconstraints - -import ( - "k8s.io/apimachinery/pkg/util/sets" - - securityv1 "github.com/openshift/api/security/v1" - sccutil "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util" -) - -// Default SCCs for new fields. FSGroup and SupplementalGroups are -// set to the RunAsAny strategy if they are unset on the scc. -func SetDefaults_SCC(scc *securityv1.SecurityContextConstraints) { - if len(scc.FSGroup.Type) == 0 { - scc.FSGroup.Type = securityv1.FSGroupStrategyRunAsAny - } - if len(scc.SupplementalGroups.Type) == 0 { - scc.SupplementalGroups.Type = securityv1.SupplementalGroupsStrategyRunAsAny - } - - if scc.Users == nil { - scc.Users = []string{} - } - if scc.Groups == nil { - scc.Groups = []string{} - } - - var defaultAllowedVolumes sets.String - switch { - case scc.Volumes == nil: - // assume a nil volume slice is allowing everything for backwards compatibility - defaultAllowedVolumes = sets.NewString(string(securityv1.FSTypeAll)) - - case len(scc.Volumes) == 0 && scc.AllowHostDirVolumePlugin: - // an empty volume slice means "allow no volumes", but the boolean fields will always take precedence. - defaultAllowedVolumes = sets.NewString(string(securityv1.FSTypeHostPath)) - - case len(scc.Volumes) == 0 && !scc.AllowHostDirVolumePlugin: - // an empty volume slice means "allow no volumes", but cannot be persisted in protobuf. - // convert this to volumes:["none"] - defaultAllowedVolumes = sets.NewString(string(securityv1.FSTypeNone)) - - default: - // defaults the volume slice of the SCC. - // In order to support old clients the boolean fields will always take precedence. - defaultAllowedVolumes = fsTypeToStringSet(scc.Volumes) - } - - if scc.AllowHostDirVolumePlugin { - // if already allowing all then there is no reason to add - if !defaultAllowedVolumes.Has(string(securityv1.FSTypeAll)) { - defaultAllowedVolumes.Insert(string(securityv1.FSTypeHostPath)) - } - } else { - // we should only default all volumes if the SCC came in with FSTypeAll or we defaulted it - // otherwise we should only change the volumes slice to ensure that it does not conflict with - // the AllowHostDirVolumePlugin setting - shouldDefaultAllVolumes := defaultAllowedVolumes.Has(string(securityv1.FSTypeAll)) - - // remove anything from volumes that conflicts with AllowHostDirVolumePlugin = false - defaultAllowedVolumes.Delete(string(securityv1.FSTypeAll)) - defaultAllowedVolumes.Delete(string(securityv1.FSTypeHostPath)) - - if shouldDefaultAllVolumes { - allVolumes := sccutil.GetAllFSTypesExcept(string(securityv1.FSTypeHostPath)) - defaultAllowedVolumes.Insert(allVolumes.List()...) - } - } - - scc.Volumes = StringSetToFSType(defaultAllowedVolumes) - - // Constraints that do not include this field must remain as permissive as - // they were prior to the introduction of this field. - if scc.AllowPrivilegeEscalation == nil { - t := true - scc.AllowPrivilegeEscalation = &t - } - -} - -func StringSetToFSType(set sets.String) []securityv1.FSType { - if set == nil { - return nil - } - volumes := []securityv1.FSType{} - for _, v := range set.List() { - volumes = append(volumes, securityv1.FSType(v)) - } - return volumes -} - -func fsTypeToStringSet(volumes []securityv1.FSType) sets.String { - if volumes == nil { - return nil - } - set := sets.NewString() - for _, v := range volumes { - set.Insert(string(v)) - } - return set -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validate_scc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validate_scc.go deleted file mode 100644 index 79ae37f27..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validate_scc.go +++ /dev/null @@ -1,79 +0,0 @@ -package securitycontextconstraints - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - - securityv1 "github.com/openshift/api/security/v1" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation" - sccvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation" -) - -const PluginName = "security.openshift.io/ValidateSecurityContextConstraints" - -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return customresourcevalidation.NewValidator( - map[schema.GroupResource]bool{ - {Group: securityv1.GroupName, Resource: "securitycontextconstraints"}: true, - }, - map[schema.GroupVersionKind]customresourcevalidation.ObjectValidator{ - securityv1.GroupVersion.WithKind("SecurityContextConstraints"): securityContextConstraintsV1{}, - }) - }) -} - -func toSecurityContextConstraints(uncastObj runtime.Object) (*securityv1.SecurityContextConstraints, field.ErrorList) { - if uncastObj == nil { - return nil, nil - } - - obj, ok := uncastObj.(*securityv1.SecurityContextConstraints) - if !ok { - return nil, field.ErrorList{ - field.NotSupported(field.NewPath("kind"), fmt.Sprintf("%T", uncastObj), []string{"SecurityContextConstraints"}), - field.NotSupported(field.NewPath("apiVersion"), fmt.Sprintf("%T", uncastObj), []string{securityv1.GroupVersion.String()}), - } - } - - return obj, nil -} - -type securityContextConstraintsV1 struct { -} - -func (securityContextConstraintsV1) ValidateCreate(obj runtime.Object) field.ErrorList { - securityContextConstraintsObj, errs := toSecurityContextConstraints(obj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, sccvalidation.ValidateSecurityContextConstraints(securityContextConstraintsObj)...) - - return errs -} - -func (securityContextConstraintsV1) ValidateUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { - securityContextConstraintsObj, errs := toSecurityContextConstraints(obj) - if len(errs) > 0 { - return errs - } - securityContextConstraintsOldObj, errs := toSecurityContextConstraints(oldObj) - if len(errs) > 0 { - return errs - } - - errs = append(errs, sccvalidation.ValidateSecurityContextConstraintsUpdate(securityContextConstraintsObj, securityContextConstraintsOldObj)...) - - return errs -} - -func (c securityContextConstraintsV1) ValidateStatusUpdate(obj runtime.Object, oldObj runtime.Object) field.ErrorList { - return c.ValidateUpdate(obj, oldObj) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation.go deleted file mode 100644 index 0b62461e0..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation.go +++ /dev/null @@ -1,275 +0,0 @@ -package validation - -import ( - "fmt" - "regexp" - "strings" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/validation" - apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation" - "k8s.io/apimachinery/pkg/util/validation/field" - kapivalidation "k8s.io/kubernetes/pkg/apis/core/validation" - - securityv1 "github.com/openshift/api/security/v1" -) - -// ValidateSecurityContextConstraintsName can be used to check whether the given -// security context constraint name is valid. -// Prefix indicates this name will be used as part of generation, in which case -// trailing dashes are allowed. -var ValidateSecurityContextConstraintsName = apimachineryvalidation.NameIsDNSSubdomain - -func ValidateSecurityContextConstraints(scc *securityv1.SecurityContextConstraints) field.ErrorList { - allErrs := validation.ValidateObjectMeta(&scc.ObjectMeta, false, ValidateSecurityContextConstraintsName, field.NewPath("metadata")) - - if scc.Priority != nil { - if *scc.Priority < 0 { - allErrs = append(allErrs, field.Invalid(field.NewPath("priority"), *scc.Priority, "priority cannot be negative")) - } - } - - // ensure the user strat has a valid type - runAsUserPath := field.NewPath("runAsUser") - switch scc.RunAsUser.Type { - case securityv1.RunAsUserStrategyMustRunAs, securityv1.RunAsUserStrategyMustRunAsNonRoot, securityv1.RunAsUserStrategyRunAsAny, securityv1.RunAsUserStrategyMustRunAsRange: - //good types - default: - msg := fmt.Sprintf("invalid strategy type. Valid values are %s, %s, %s, %s", securityv1.RunAsUserStrategyMustRunAs, securityv1.RunAsUserStrategyMustRunAsNonRoot, securityv1.RunAsUserStrategyMustRunAsRange, securityv1.RunAsUserStrategyRunAsAny) - allErrs = append(allErrs, field.Invalid(runAsUserPath.Child("type"), scc.RunAsUser.Type, msg)) - } - - // if specified, uid cannot be negative - if scc.RunAsUser.UID != nil { - if *scc.RunAsUser.UID < 0 { - allErrs = append(allErrs, field.Invalid(runAsUserPath.Child("uid"), *scc.RunAsUser.UID, "uid cannot be negative")) - } - } - - // ensure the selinux strat has a valid type - seLinuxContextPath := field.NewPath("seLinuxContext") - switch scc.SELinuxContext.Type { - case securityv1.SELinuxStrategyMustRunAs, securityv1.SELinuxStrategyRunAsAny: - //good types - default: - msg := fmt.Sprintf("invalid strategy type. Valid values are %s, %s", securityv1.SELinuxStrategyMustRunAs, securityv1.SELinuxStrategyRunAsAny) - allErrs = append(allErrs, field.Invalid(seLinuxContextPath.Child("type"), scc.SELinuxContext.Type, msg)) - } - - // ensure the fsgroup strat has a valid type - if scc.FSGroup.Type != securityv1.FSGroupStrategyMustRunAs && scc.FSGroup.Type != securityv1.FSGroupStrategyRunAsAny { - allErrs = append(allErrs, field.NotSupported(field.NewPath("fsGroup", "type"), scc.FSGroup.Type, - []string{string(securityv1.FSGroupStrategyMustRunAs), string(securityv1.FSGroupStrategyRunAsAny)})) - } - allErrs = append(allErrs, validateIDRanges(scc.FSGroup.Ranges, field.NewPath("fsGroup"))...) - - if scc.SupplementalGroups.Type != securityv1.SupplementalGroupsStrategyMustRunAs && - scc.SupplementalGroups.Type != securityv1.SupplementalGroupsStrategyRunAsAny { - allErrs = append(allErrs, field.NotSupported(field.NewPath("supplementalGroups", "type"), scc.SupplementalGroups.Type, - []string{string(securityv1.SupplementalGroupsStrategyMustRunAs), string(securityv1.SupplementalGroupsStrategyRunAsAny)})) - } - allErrs = append(allErrs, validateIDRanges(scc.SupplementalGroups.Ranges, field.NewPath("supplementalGroups"))...) - - // validate capabilities - allErrs = append(allErrs, validateSCCCapsAgainstDrops(scc.RequiredDropCapabilities, scc.DefaultAddCapabilities, field.NewPath("defaultAddCapabilities"))...) - allErrs = append(allErrs, validateSCCCapsAgainstDrops(scc.RequiredDropCapabilities, scc.AllowedCapabilities, field.NewPath("allowedCapabilities"))...) - - if hasCap(securityv1.AllowAllCapabilities, scc.AllowedCapabilities) && len(scc.RequiredDropCapabilities) > 0 { - allErrs = append(allErrs, field.Invalid(field.NewPath("requiredDropCapabilities"), scc.RequiredDropCapabilities, - "required capabilities must be empty when all capabilities are allowed by a wildcard")) - } - - allErrs = append(allErrs, validateSCCDefaultAllowPrivilegeEscalation(field.NewPath("defaultAllowPrivilegeEscalation"), scc.DefaultAllowPrivilegeEscalation, scc.AllowPrivilegeEscalation)...) - - allowsFlexVolumes := false - hasNoneVolume := false - - if len(scc.Volumes) > 0 { - for _, fsType := range scc.Volumes { - if fsType == securityv1.FSTypeNone { - hasNoneVolume = true - - } else if fsType == securityv1.FSTypeFlexVolume || fsType == securityv1.FSTypeAll { - allowsFlexVolumes = true - } - } - } - - if hasNoneVolume && len(scc.Volumes) > 1 { - allErrs = append(allErrs, field.Invalid(field.NewPath("volumes"), scc.Volumes, - "if 'none' is specified, no other values are allowed")) - } - - if len(scc.AllowedFlexVolumes) > 0 { - if allowsFlexVolumes { - for idx, allowedFlexVolume := range scc.AllowedFlexVolumes { - if len(allowedFlexVolume.Driver) == 0 { - allErrs = append(allErrs, field.Required(field.NewPath("allowedFlexVolumes").Index(idx).Child("driver"), - "must specify a driver")) - } - } - } else { - allErrs = append(allErrs, field.Invalid(field.NewPath("allowedFlexVolumes"), scc.AllowedFlexVolumes, - "volumes does not include 'flexVolume' or '*', so no flex volumes are allowed")) - } - } - - allowedUnsafeSysctlsPath := field.NewPath("allowedUnsafeSysctls") - forbiddenSysctlsPath := field.NewPath("forbiddenSysctls") - allErrs = append(allErrs, validateSCCSysctls(allowedUnsafeSysctlsPath, scc.AllowedUnsafeSysctls)...) - allErrs = append(allErrs, validateSCCSysctls(forbiddenSysctlsPath, scc.ForbiddenSysctls)...) - allErrs = append(allErrs, validatePodSecurityPolicySysctlListsDoNotOverlap(allowedUnsafeSysctlsPath, forbiddenSysctlsPath, scc.AllowedUnsafeSysctls, scc.ForbiddenSysctls)...) - - return allErrs -} - -const sysctlPatternSegmentFmt string = "([a-z0-9][-_a-z0-9]*)?[a-z0-9*]" -const sysctlPatternFmt string = "(" + kapivalidation.SysctlSegmentFmt + "\\.)*" + sysctlPatternSegmentFmt - -var sysctlPatternRegexp = regexp.MustCompile("^" + sysctlPatternFmt + "$") - -func IsValidSysctlPattern(name string) bool { - if len(name) > kapivalidation.SysctlMaxLength { - return false - } - return sysctlPatternRegexp.MatchString(name) -} - -// validatePodSecurityPolicySysctlListsDoNotOverlap validates the values in forbiddenSysctls and allowedSysctls fields do not overlap. -func validatePodSecurityPolicySysctlListsDoNotOverlap(allowedSysctlsFldPath, forbiddenSysctlsFldPath *field.Path, allowedUnsafeSysctls, forbiddenSysctls []string) field.ErrorList { - allErrs := field.ErrorList{} - for i, allowedSysctl := range allowedUnsafeSysctls { - isAllowedSysctlPattern := false - allowedSysctlPrefix := "" - if strings.HasSuffix(allowedSysctl, "*") { - isAllowedSysctlPattern = true - allowedSysctlPrefix = strings.TrimSuffix(allowedSysctl, "*") - } - for j, forbiddenSysctl := range forbiddenSysctls { - isForbiddenSysctlPattern := false - forbiddenSysctlPrefix := "" - if strings.HasSuffix(forbiddenSysctl, "*") { - isForbiddenSysctlPattern = true - forbiddenSysctlPrefix = strings.TrimSuffix(forbiddenSysctl, "*") - } - switch { - case isAllowedSysctlPattern && isForbiddenSysctlPattern: - if strings.HasPrefix(allowedSysctlPrefix, forbiddenSysctlPrefix) { - allErrs = append(allErrs, field.Invalid(allowedSysctlsFldPath.Index(i), allowedUnsafeSysctls[i], fmt.Sprintf("sysctl overlaps with %v", forbiddenSysctl))) - } else if strings.HasPrefix(forbiddenSysctlPrefix, allowedSysctlPrefix) { - allErrs = append(allErrs, field.Invalid(forbiddenSysctlsFldPath.Index(j), forbiddenSysctls[j], fmt.Sprintf("sysctl overlaps with %v", allowedSysctl))) - } - case isAllowedSysctlPattern: - if strings.HasPrefix(forbiddenSysctl, allowedSysctlPrefix) { - allErrs = append(allErrs, field.Invalid(forbiddenSysctlsFldPath.Index(j), forbiddenSysctls[j], fmt.Sprintf("sysctl overlaps with %v", allowedSysctl))) - } - case isForbiddenSysctlPattern: - if strings.HasPrefix(allowedSysctl, forbiddenSysctlPrefix) { - allErrs = append(allErrs, field.Invalid(allowedSysctlsFldPath.Index(i), allowedUnsafeSysctls[i], fmt.Sprintf("sysctl overlaps with %v", forbiddenSysctl))) - } - default: - if allowedSysctl == forbiddenSysctl { - allErrs = append(allErrs, field.Invalid(allowedSysctlsFldPath.Index(i), allowedUnsafeSysctls[i], fmt.Sprintf("sysctl overlaps with %v", forbiddenSysctl))) - } - } - } - } - return allErrs -} - -// validatePodSecurityPolicySysctls validates the sysctls fields of PodSecurityPolicy. -func validateSCCSysctls(fldPath *field.Path, sysctls []string) field.ErrorList { - allErrs := field.ErrorList{} - - if len(sysctls) == 0 { - return allErrs - } - - coversAll := false - for i, s := range sysctls { - if len(s) == 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Index(i), sysctls[i], fmt.Sprintf("empty sysctl not allowed"))) - } else if !IsValidSysctlPattern(string(s)) { - allErrs = append( - allErrs, - field.Invalid(fldPath.Index(i), sysctls[i], fmt.Sprintf("must have at most %d characters and match regex %s", - kapivalidation.SysctlMaxLength, - sysctlPatternFmt, - )), - ) - } else if s[0] == '*' { - coversAll = true - } - } - - if coversAll && len(sysctls) > 1 { - allErrs = append(allErrs, field.Forbidden(fldPath.Child("items"), fmt.Sprintf("if '*' is present, must not specify other sysctls"))) - } - - return allErrs -} - -// validateSCCCapsAgainstDrops ensures an allowed cap is not listed in the required drops. -func validateSCCCapsAgainstDrops(requiredDrops []corev1.Capability, capsToCheck []corev1.Capability, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - if requiredDrops == nil { - return allErrs - } - for _, cap := range capsToCheck { - if hasCap(cap, requiredDrops) { - allErrs = append(allErrs, field.Invalid(fldPath, cap, - fmt.Sprintf("capability is listed in %s and requiredDropCapabilities", fldPath.String()))) - } - } - return allErrs -} - -// validateSCCDefaultAllowPrivilegeEscalation validates the DefaultAllowPrivilegeEscalation field against the AllowPrivilegeEscalation field of a SecurityContextConstraints. -func validateSCCDefaultAllowPrivilegeEscalation(fldPath *field.Path, defaultAllowPrivilegeEscalation, allowPrivilegeEscalation *bool) field.ErrorList { - allErrs := field.ErrorList{} - if defaultAllowPrivilegeEscalation != nil && allowPrivilegeEscalation != nil && *defaultAllowPrivilegeEscalation && !*allowPrivilegeEscalation { - allErrs = append(allErrs, field.Invalid(fldPath, defaultAllowPrivilegeEscalation, "Cannot set DefaultAllowPrivilegeEscalation to true without also setting AllowPrivilegeEscalation to true")) - } - - return allErrs -} - -// hasCap checks for needle in haystack. -func hasCap(needle corev1.Capability, haystack []corev1.Capability) bool { - for _, c := range haystack { - if needle == c { - return true - } - } - return false -} - -// validateIDRanges ensures the range is valid. -func validateIDRanges(rng []securityv1.IDRange, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - - for i, r := range rng { - // if 0 <= Min <= Max then we do not need to validate max. It is always greater than or - // equal to 0 and Min. - minPath := fldPath.Child("ranges").Index(i).Child("min") - maxPath := fldPath.Child("ranges").Index(i).Child("max") - - if r.Min < 0 { - allErrs = append(allErrs, field.Invalid(minPath, r.Min, "min cannot be negative")) - } - if r.Max < 0 { - allErrs = append(allErrs, field.Invalid(maxPath, r.Max, "max cannot be negative")) - } - if r.Min > r.Max { - allErrs = append(allErrs, field.Invalid(minPath, r, "min cannot be greater than max")) - } - } - - return allErrs -} - -func ValidateSecurityContextConstraintsUpdate(newScc, oldScc *securityv1.SecurityContextConstraints) field.ErrorList { - allErrs := validation.ValidateObjectMetaUpdate(&newScc.ObjectMeta, &oldScc.ObjectMeta, field.NewPath("metadata")) - allErrs = append(allErrs, ValidateSecurityContextConstraints(newScc)...) - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation_test.go deleted file mode 100644 index 01c4d472c..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/securitycontextconstraints/validation/validation_test.go +++ /dev/null @@ -1,343 +0,0 @@ -package validation - -import ( - "fmt" - "testing" - - kcorev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/validation/field" - - securityv1 "github.com/openshift/api/security/v1" -) - -func TestValidateSecurityContextConstraints(t *testing.T) { - var invalidUID int64 = -1 - var invalidPriority int32 = -1 - var validPriority int32 = 1 - yes := true - no := false - - validSCC := func() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{Name: "foo"}, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyRunAsAny, - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyRunAsAny, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyRunAsAny, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - Priority: &validPriority, - } - } - - noUserOptions := validSCC() - noUserOptions.RunAsUser.Type = "" - - noSELinuxOptions := validSCC() - noSELinuxOptions.SELinuxContext.Type = "" - - invalidUserStratType := validSCC() - invalidUserStratType.RunAsUser.Type = "invalid" - - invalidSELinuxStratType := validSCC() - invalidSELinuxStratType.SELinuxContext.Type = "invalid" - - invalidUIDSCC := validSCC() - invalidUIDSCC.RunAsUser.Type = securityv1.RunAsUserStrategyMustRunAs - invalidUIDSCC.RunAsUser.UID = &invalidUID - - missingObjectMetaName := validSCC() - missingObjectMetaName.ObjectMeta.Name = "" - - noFSGroupOptions := validSCC() - noFSGroupOptions.FSGroup.Type = "" - - invalidFSGroupStratType := validSCC() - invalidFSGroupStratType.FSGroup.Type = "invalid" - - noSupplementalGroupsOptions := validSCC() - noSupplementalGroupsOptions.SupplementalGroups.Type = "" - - invalidSupGroupStratType := validSCC() - invalidSupGroupStratType.SupplementalGroups.Type = "invalid" - - invalidRangeMinGreaterThanMax := validSCC() - invalidRangeMinGreaterThanMax.FSGroup.Ranges = []securityv1.IDRange{ - {Min: 2, Max: 1}, - } - - invalidRangeNegativeMin := validSCC() - invalidRangeNegativeMin.FSGroup.Ranges = []securityv1.IDRange{ - {Min: -1, Max: 10}, - } - - invalidRangeNegativeMax := validSCC() - invalidRangeNegativeMax.FSGroup.Ranges = []securityv1.IDRange{ - {Min: 1, Max: -10}, - } - - negativePriority := validSCC() - negativePriority.Priority = &invalidPriority - - requiredCapAddAndDrop := validSCC() - requiredCapAddAndDrop.DefaultAddCapabilities = []kcorev1.Capability{"foo"} - requiredCapAddAndDrop.RequiredDropCapabilities = []kcorev1.Capability{"foo"} - - allowedCapListedInRequiredDrop := validSCC() - allowedCapListedInRequiredDrop.RequiredDropCapabilities = []kcorev1.Capability{"foo"} - allowedCapListedInRequiredDrop.AllowedCapabilities = []kcorev1.Capability{"foo"} - - wildcardAllowedCapAndRequiredDrop := validSCC() - wildcardAllowedCapAndRequiredDrop.RequiredDropCapabilities = []kcorev1.Capability{"foo"} - wildcardAllowedCapAndRequiredDrop.AllowedCapabilities = []kcorev1.Capability{securityv1.AllowAllCapabilities} - - emptyFlexDriver := validSCC() - emptyFlexDriver.Volumes = []securityv1.FSType{securityv1.FSTypeFlexVolume} - emptyFlexDriver.AllowedFlexVolumes = []securityv1.AllowedFlexVolume{{}} - - nonEmptyFlexVolumes := validSCC() - nonEmptyFlexVolumes.AllowedFlexVolumes = []securityv1.AllowedFlexVolume{{Driver: "example/driver"}} - - invalidDefaultAllowPrivilegeEscalation := validSCC() - invalidDefaultAllowPrivilegeEscalation.DefaultAllowPrivilegeEscalation = &yes - invalidDefaultAllowPrivilegeEscalation.AllowPrivilegeEscalation = &no - - invalidAllowedUnsafeSysctlPattern := validSCC() - invalidAllowedUnsafeSysctlPattern.AllowedUnsafeSysctls = []string{"a.*.b"} - - invalidForbiddenSysctlPattern := validSCC() - invalidForbiddenSysctlPattern.ForbiddenSysctls = []string{"a.*.b"} - - invalidOverlappingSysctls := validSCC() - invalidOverlappingSysctls.ForbiddenSysctls = []string{"kernel.*", "net.ipv4.ip_local_port_range"} - invalidOverlappingSysctls.AllowedUnsafeSysctls = []string{"kernel.shmmax", "net.ipv4.ip_local_port_range"} - - invalidDuplicatedSysctls := validSCC() - invalidDuplicatedSysctls.ForbiddenSysctls = []string{"net.ipv4.ip_local_port_range"} - invalidDuplicatedSysctls.AllowedUnsafeSysctls = []string{"net.ipv4.ip_local_port_range"} - - errorCases := map[string]struct { - scc *securityv1.SecurityContextConstraints - errorType field.ErrorType - errorDetail string - }{ - "no user options": { - scc: noUserOptions, - errorType: field.ErrorTypeInvalid, - errorDetail: "invalid strategy type. Valid values are MustRunAs, MustRunAsNonRoot, MustRunAsRange, RunAsAny", - }, - "no selinux options": { - scc: noSELinuxOptions, - errorType: field.ErrorTypeInvalid, - errorDetail: "invalid strategy type. Valid values are MustRunAs, RunAsAny", - }, - "no fsgroup options": { - scc: noFSGroupOptions, - errorType: field.ErrorTypeNotSupported, - errorDetail: "supported values: \"MustRunAs\", \"RunAsAny\"", - }, - "no sup group options": { - scc: noSupplementalGroupsOptions, - errorType: field.ErrorTypeNotSupported, - errorDetail: "supported values: \"MustRunAs\", \"RunAsAny\"", - }, - "invalid user strategy type": { - scc: invalidUserStratType, - errorType: field.ErrorTypeInvalid, - errorDetail: "invalid strategy type. Valid values are MustRunAs, MustRunAsNonRoot, MustRunAsRange, RunAsAny", - }, - "invalid selinux strategy type": { - scc: invalidSELinuxStratType, - errorType: field.ErrorTypeInvalid, - errorDetail: "invalid strategy type. Valid values are MustRunAs, RunAsAny", - }, - "invalid sup group strategy type": { - scc: invalidSupGroupStratType, - errorType: field.ErrorTypeNotSupported, - errorDetail: "supported values: \"MustRunAs\", \"RunAsAny\"", - }, - "invalid fs group strategy type": { - scc: invalidFSGroupStratType, - errorType: field.ErrorTypeNotSupported, - errorDetail: "supported values: \"MustRunAs\", \"RunAsAny\"", - }, - "invalid uid": { - scc: invalidUIDSCC, - errorType: field.ErrorTypeInvalid, - errorDetail: "uid cannot be negative", - }, - "missing object meta name": { - scc: missingObjectMetaName, - errorType: field.ErrorTypeRequired, - errorDetail: "name or generateName is required", - }, - "invalid range min greater than max": { - scc: invalidRangeMinGreaterThanMax, - errorType: field.ErrorTypeInvalid, - errorDetail: "min cannot be greater than max", - }, - "invalid range negative min": { - scc: invalidRangeNegativeMin, - errorType: field.ErrorTypeInvalid, - errorDetail: "min cannot be negative", - }, - "invalid range negative max": { - scc: invalidRangeNegativeMax, - errorType: field.ErrorTypeInvalid, - errorDetail: "max cannot be negative", - }, - "negative priority": { - scc: negativePriority, - errorType: field.ErrorTypeInvalid, - errorDetail: "priority cannot be negative", - }, - "invalid required caps": { - scc: requiredCapAddAndDrop, - errorType: field.ErrorTypeInvalid, - errorDetail: "capability is listed in defaultAddCapabilities and requiredDropCapabilities", - }, - "allowed cap listed in required drops": { - scc: allowedCapListedInRequiredDrop, - errorType: field.ErrorTypeInvalid, - errorDetail: "capability is listed in allowedCapabilities and requiredDropCapabilities", - }, - "all caps allowed by a wildcard and required drops is not empty": { - scc: wildcardAllowedCapAndRequiredDrop, - errorType: field.ErrorTypeInvalid, - errorDetail: "required capabilities must be empty when all capabilities are allowed by a wildcard", - }, - "empty flex volume driver": { - scc: emptyFlexDriver, - errorType: field.ErrorTypeRequired, - errorDetail: "must specify a driver", - }, - "non-empty allowed flex volumes": { - scc: nonEmptyFlexVolumes, - errorType: field.ErrorTypeInvalid, - errorDetail: "volumes does not include 'flexVolume' or '*', so no flex volumes are allowed", - }, - "invalid defaultAllowPrivilegeEscalation": { - scc: invalidDefaultAllowPrivilegeEscalation, - errorType: field.ErrorTypeInvalid, - errorDetail: "Cannot set DefaultAllowPrivilegeEscalation to true without also setting AllowPrivilegeEscalation to true", - }, - "invalid allowed unsafe sysctl pattern": { - scc: invalidAllowedUnsafeSysctlPattern, - errorType: field.ErrorTypeInvalid, - errorDetail: fmt.Sprintf("must have at most 253 characters and match regex %s", sysctlPatternFmt), - }, - "invalid forbidden sysctl pattern": { - scc: invalidForbiddenSysctlPattern, - errorType: field.ErrorTypeInvalid, - errorDetail: fmt.Sprintf("must have at most 253 characters and match regex %s", sysctlPatternFmt), - }, - "invalid overlapping sysctl pattern": { - scc: invalidOverlappingSysctls, - errorType: field.ErrorTypeInvalid, - errorDetail: fmt.Sprintf("sysctl overlaps with %s", invalidOverlappingSysctls.ForbiddenSysctls[0]), - }, - "invalid duplicated sysctls": { - scc: invalidDuplicatedSysctls, - errorType: field.ErrorTypeInvalid, - errorDetail: fmt.Sprintf("sysctl overlaps with %s", invalidDuplicatedSysctls.AllowedUnsafeSysctls[0]), - }, - } - - for k, v := range errorCases { - t.Run(k, func(t *testing.T) { - if errs := ValidateSecurityContextConstraints(v.scc); len(errs) == 0 || errs[0].Type != v.errorType || errs[0].Detail != v.errorDetail { - t.Errorf("Expected error type %q with detail %q, got %v", v.errorType, v.errorDetail, errs) - } - }) - } - - var validUID int64 = 1 - - mustRunAs := validSCC() - mustRunAs.FSGroup.Type = securityv1.FSGroupStrategyMustRunAs - mustRunAs.SupplementalGroups.Type = securityv1.SupplementalGroupsStrategyMustRunAs - mustRunAs.RunAsUser.Type = securityv1.RunAsUserStrategyMustRunAs - mustRunAs.RunAsUser.UID = &validUID - mustRunAs.SELinuxContext.Type = securityv1.SELinuxStrategyMustRunAs - - runAsNonRoot := validSCC() - runAsNonRoot.RunAsUser.Type = securityv1.RunAsUserStrategyMustRunAsNonRoot - - caseInsensitiveAddDrop := validSCC() - caseInsensitiveAddDrop.DefaultAddCapabilities = []kcorev1.Capability{"foo"} - caseInsensitiveAddDrop.RequiredDropCapabilities = []kcorev1.Capability{"FOO"} - - caseInsensitiveAllowedDrop := validSCC() - caseInsensitiveAllowedDrop.RequiredDropCapabilities = []kcorev1.Capability{"FOO"} - caseInsensitiveAllowedDrop.AllowedCapabilities = []kcorev1.Capability{"foo"} - - flexvolumeWhenFlexVolumesAllowed := validSCC() - flexvolumeWhenFlexVolumesAllowed.Volumes = []securityv1.FSType{securityv1.FSTypeFlexVolume} - flexvolumeWhenFlexVolumesAllowed.AllowedFlexVolumes = []securityv1.AllowedFlexVolume{ - {Driver: "example/driver1"}, - } - - flexvolumeWhenAllVolumesAllowed := validSCC() - flexvolumeWhenAllVolumesAllowed.Volumes = []securityv1.FSType{securityv1.FSTypeAll} - flexvolumeWhenAllVolumesAllowed.AllowedFlexVolumes = []securityv1.AllowedFlexVolume{ - {Driver: "example/driver2"}, - } - - validDefaultAllowPrivilegeEscalation := validSCC() - validDefaultAllowPrivilegeEscalation.DefaultAllowPrivilegeEscalation = &yes - validDefaultAllowPrivilegeEscalation.AllowPrivilegeEscalation = &yes - - withForbiddenSysctl := validSCC() - withForbiddenSysctl.ForbiddenSysctls = []string{"net.*"} - - withAllowedUnsafeSysctl := validSCC() - withAllowedUnsafeSysctl.AllowedUnsafeSysctls = []string{"net.ipv4.tcp_max_syn_backlog"} - - successCases := map[string]struct { - scc *securityv1.SecurityContextConstraints - }{ - "must run as": { - scc: mustRunAs, - }, - "run as any": { - scc: validSCC(), - }, - "run as non-root (user only)": { - scc: runAsNonRoot, - }, - "comparison for add -> drop is case sensitive": { - scc: caseInsensitiveAddDrop, - }, - "comparison for allowed -> drop is case sensitive": { - scc: caseInsensitiveAllowedDrop, - }, - "allow white-listed flexVolume when flex volumes are allowed": { - scc: flexvolumeWhenFlexVolumesAllowed, - }, - "allow white-listed flexVolume when all volumes are allowed": { - scc: flexvolumeWhenAllVolumesAllowed, - }, - "valid defaultAllowPrivilegeEscalation as true": { - scc: validDefaultAllowPrivilegeEscalation, - }, - "with network sysctls forbidden": { - scc: withForbiddenSysctl, - }, - "with unsafe net.ipv4.tcp_max_syn_backlog sysctl allowed": { - scc: withAllowedUnsafeSysctl, - }, - } - - for k, v := range successCases { - if errs := ValidateSecurityContextConstraints(v.scc); len(errs) != 0 { - t.Errorf("Expected success for %q, got %v", k, errs) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/accept.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/accept.go deleted file mode 100644 index 8e207b699..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/accept.go +++ /dev/null @@ -1,133 +0,0 @@ -package imagepolicy - -import ( - "fmt" - - "k8s.io/klog" - - apierrs "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - kapi "k8s.io/kubernetes/pkg/apis/core" - - "github.com/openshift/library-go/pkg/image/reference" - imagepolicy "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules" -) - -var errRejectByPolicy = fmt.Errorf("this image is prohibited by policy") - -type policyDecisions map[kapi.ObjectReference]policyDecision - -type policyDecision struct { - attrs *rules.ImagePolicyAttributes - tested bool - resolutionErr error -} - -func accept(accepter rules.Accepter, policy imageResolutionPolicy, resolver imageResolver, m imagereferencemutators.ImageReferenceMutator, annotations imagereferencemutators.AnnotationAccessor, attr admission.Attributes, excludedRules sets.String) error { - decisions := policyDecisions{} - - t := attr.GetResource().GroupResource() - gr := metav1.GroupResource{Resource: t.Resource, Group: t.Group} - - var resolveAllNames bool - if annotations != nil { - if a, ok := annotations.TemplateAnnotations(); ok { - resolveAllNames = a[imagepolicy.ResolveNamesAnnotation] == "*" - } - if !resolveAllNames { - resolveAllNames = annotations.Annotations()[imagepolicy.ResolveNamesAnnotation] == "*" - } - } - - errs := m.Mutate(func(ref *kapi.ObjectReference) error { - // create the attribute set for this particular reference, if we have never seen the reference - // before - decision, ok := decisions[*ref] - if !ok { - if policy.RequestsResolution(gr) { - resolvedAttrs, err := resolver.ResolveObjectReference(ref, attr.GetNamespace(), resolveAllNames) - switch { - case err != nil && policy.FailOnResolutionFailure(gr): - klog.V(5).Infof("resource failed on error during required image resolution: %v", err) - // if we had a resolution error and we're supposed to fail, fail - decision.resolutionErr = err - decision.tested = true - decisions[*ref] = decision - return err - - case err != nil: - klog.V(5).Infof("error during optional image resolution: %v", err) - // if we had an error, but aren't supposed to fail, just don't do anything else and keep track of - // the resolution failure - decision.resolutionErr = err - - case err == nil: - // if we resolved properly, assign the attributes and rewrite the pull spec if we need to - decision.attrs = resolvedAttrs - - if policy.RewriteImagePullSpec(resolvedAttrs, attr.GetOperation() == admission.Update, gr) { - ref.Namespace = "" - ref.Name = decision.attrs.Name.Exact() - ref.Kind = "DockerImage" - } - } - } - // if we don't have any image policy attributes, attempt a best effort parse for the remaining tests - if decision.attrs == nil { - decision.attrs = &rules.ImagePolicyAttributes{} - - // an objectref that is DockerImage ref will have a name that corresponds to its pull spec. We can parse that - // to a docker image ref - if ref != nil && ref.Kind == "DockerImage" { - decision.attrs.Name, _ = reference.Parse(ref.Name) - } - } - decision.attrs.Resource = gr - decision.attrs.ExcludedRules = excludedRules - klog.V(5).Infof("post resolution, ref=%s:%s/%s, image attributes=%#v, resolution err=%v", ref.Kind, ref.Name, ref.Namespace, *decision.attrs, decision.resolutionErr) - } - - // we only need to test a given input once for acceptance - if !decision.tested { - accepted := accepter.Accepts(decision.attrs) - klog.V(5).Infof("Made decision for %v (as: %v, resolution err: %v): accept=%t", ref, decision.attrs.Name, decision.resolutionErr, accepted) - - decision.tested = true - decisions[*ref] = decision - - if !accepted { - // if the image is rejected due to a resolution error, return the resolution error - // This is a dubious result. It's entirely possible we had an error resolving the image, - // but no rule actually requires image resolution and the image was rejected for some other - // reason. The user will then see that it was rejected due to the resolution error, but - // that isn't really why it was rejected. Better logic would check if the rule that - // rejected the image, required resolution, and only then report the resolution falure. - if decision.resolutionErr != nil { - return decision.resolutionErr - } - // otherwise the image is being rejected by policy - return errRejectByPolicy - } - } - - return nil - }) - - for i := range errs { - errs[i].Type = field.ErrorTypeForbidden - if errs[i].Detail != errRejectByPolicy.Error() { - errs[i].Detail = fmt.Sprintf("this image is prohibited by policy: %s", errs[i].Detail) - } - } - - if len(errs) > 0 { - klog.V(5).Infof("image policy admission rejecting due to: %v", errs) - return apierrs.NewInvalid(attr.GetKind().GroupKind(), attr.GetName(), errs) - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/default-policy.yaml b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/default-policy.yaml deleted file mode 100644 index 8a24de7b4..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/default-policy.yaml +++ /dev/null @@ -1,20 +0,0 @@ -kind: ImagePolicyConfig -apiVersion: image.openshift.io/v1 -# To require that all images running on the platform be imported first, you may uncomment the -# following rule. Any image that refers to a registry outside of OpenShift will be rejected unless it -# unless it points directly to an image digest (myregistry.com/myrepo/image@sha256:ea83bcf...) and that -# digest has been imported via the import-image flow. -#resolveImages: Required -executionRules: -- name: execution-denied - # Reject all images that have the annotation images.openshift.io/deny-execution set to true. - # This annotation may be set by infrastructure that wishes to flag particular images as dangerous - onResources: - - resource: pods - - resource: builds - group: build.openshift.io - reject: true - matchImageAnnotations: - - key: images.openshift.io/deny-execution - value: "true" - skipOnResolutionFailure: true diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/defaults.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/defaults.go deleted file mode 100644 index aad4283b7..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/defaults.go +++ /dev/null @@ -1,74 +0,0 @@ -package v1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - kapi "k8s.io/kubernetes/pkg/apis/core" -) - -func SetDefaults_ImagePolicyConfig(obj *ImagePolicyConfig) { - if obj == nil { - return - } - - if len(obj.ResolveImages) == 0 { - obj.ResolveImages = Attempt - } - - for i := range obj.ExecutionRules { - if len(obj.ExecutionRules[i].OnResources) == 0 { - obj.ExecutionRules[i].OnResources = []metav1.GroupResource{{Resource: "pods", Group: kapi.GroupName}} - } - } - - if obj.ResolutionRules == nil { - obj.ResolutionRules = []ImageResolutionPolicyRule{ - {TargetResource: metav1.GroupResource{Resource: "pods"}, LocalNames: true}, - {TargetResource: metav1.GroupResource{Group: "build.openshift.io", Resource: "builds"}, LocalNames: true}, - {TargetResource: metav1.GroupResource{Group: "batch", Resource: "jobs"}, LocalNames: true}, - {TargetResource: metav1.GroupResource{Group: "extensions", Resource: "replicasets"}, LocalNames: true}, - {TargetResource: metav1.GroupResource{Resource: "replicationcontrollers"}, LocalNames: true}, - {TargetResource: metav1.GroupResource{Group: "apps", Resource: "deployments"}, LocalNames: true}, - {TargetResource: metav1.GroupResource{Group: "extensions", Resource: "deployments"}, LocalNames: true}, - {TargetResource: metav1.GroupResource{Group: "apps", Resource: "statefulsets"}, LocalNames: true}, - {TargetResource: metav1.GroupResource{Group: "extensions", Resource: "daemonsets"}, LocalNames: true}, - } - // default the resolution policy to the global default - for i := range obj.ResolutionRules { - if len(obj.ResolutionRules[i].Policy) != 0 { - continue - } - obj.ResolutionRules[i].Policy = DoNotAttempt - for _, rule := range obj.ExecutionRules { - if executionRuleCoversResource(rule, obj.ResolutionRules[i].TargetResource) { - obj.ResolutionRules[i].Policy = obj.ResolveImages - break - } - } - } - } else { - // default the resolution policy to the global default - for i := range obj.ResolutionRules { - if len(obj.ResolutionRules[i].Policy) != 0 { - continue - } - obj.ResolutionRules[i].Policy = obj.ResolveImages - } - } - -} - -func addDefaultingFuncs(scheme *runtime.Scheme) error { - scheme.AddTypeDefaultingFunc(&ImagePolicyConfig{}, func(obj interface{}) { SetDefaults_ImagePolicyConfig(obj.(*ImagePolicyConfig)) }) - return nil -} - -// executionRuleCoversResource returns true if gr is covered by rule. -func executionRuleCoversResource(rule ImageExecutionPolicyRule, gr metav1.GroupResource) bool { - for _, target := range rule.OnResources { - if target.Group == gr.Group && (target.Resource == gr.Resource || target.Resource == "*") { - return true - } - } - return false -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/doc.go deleted file mode 100644 index 124d5620f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package v1 is the v1 version of the API. -package v1 diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/register.go deleted file mode 100644 index 602e3a2c5..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/register.go +++ /dev/null @@ -1,26 +0,0 @@ -package v1 - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -func (obj *ImagePolicyConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } - -var GroupVersion = schema.GroupVersion{Group: "image.openshift.io", Version: "v1"} - -var ( - schemeBuilder = runtime.NewSchemeBuilder( - addKnownTypes, - addDefaultingFuncs, - ) - Install = schemeBuilder.AddToScheme -) - -// Adds the list of known types to api.Scheme. -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &ImagePolicyConfig{}, - ) - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/types.go deleted file mode 100644 index b5d5198a0..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/types.go +++ /dev/null @@ -1,132 +0,0 @@ -package v1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" -) - -const ( - PluginName = "image.openshift.io/ImagePolicy" - - // IgnorePolicyRulesAnnotation is a comma delimited list of rule names to omit from consideration - // in a given namespace. Loaded from the namespace. - IgnorePolicyRulesAnnotation = "alpha.image.policy.openshift.io/ignore-rules" - // ResolveNamesAnnotation when placed on an object template or object requests that all relevant - // image names be resolved by taking the name and tag and attempting to resolve a local image stream. - // This overrides the imageLookupPolicy on the image stream. If the object is not namespaced the - // annotation is ignored. The only valid value is '*'. - ResolveNamesAnnotation = "alpha.image.policy.openshift.io/resolve-names" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ImagePolicyConfig is the configuration for control of images running on the platform. -type ImagePolicyConfig struct { - metav1.TypeMeta `json:",inline"` - - // ResolveImages indicates the default image resolution behavior. If a rewriting policy is chosen, - // then the image pull specs will be updated. - ResolveImages ImageResolutionType `json:"resolveImages"` - - // ResolutionRules allows more specific image resolution rules to be applied per resource. If - // empty, it defaults to allowing local image stream lookups - "mysql" will map to the image stream - // tag "mysql:latest" in the current namespace if the stream supports it. The default for this - // field is all known types that support image resolution, and the policy for those rules will be - // set to the overall resolution policy if an execution rule references the same resource. - ResolutionRules []ImageResolutionPolicyRule `json:"resolutionRules"` - - // ExecutionRules determine whether the use of an image is allowed in an object with a pod spec. - // By default, these rules only apply to pods, but may be extended to other resource types. - // If all execution rules are negations, the default behavior is allow all. If any execution rule - // is an allow, the default behavior is to reject all. - ExecutionRules []ImageExecutionPolicyRule `json:"executionRules"` -} - -// ImageResolutionType is an enumerated string that indicates how image pull spec resolution should be handled -type ImageResolutionType string - -var ( - // require resolution to succeed and rewrite the resource to use it - RequiredRewrite ImageResolutionType = "RequiredRewrite" - // require resolution to succeed, but don't rewrite the image pull spec - Required ImageResolutionType = "Required" - // attempt resolution, rewrite if successful - AttemptRewrite ImageResolutionType = "AttemptRewrite" - // attempt resolution, don't rewrite - Attempt ImageResolutionType = "Attempt" - // don't attempt resolution - DoNotAttempt ImageResolutionType = "DoNotAttempt" -) - -// ImageResolutionPolicyRule describes resolution rules based on resource. -type ImageResolutionPolicyRule struct { - // Policy controls whether resolution will happen if the rule doesn't match local names. This value - // overrides the global image policy for all target resources. - Policy ImageResolutionType `json:"policy"` - // TargetResource is the identified group and resource. If Resource is *, this rule will apply - // to all resources in that group. - TargetResource metav1.GroupResource `json:"targetResource"` - // LocalNames will allow single segment names to be interpreted as namespace local image - // stream tags, but only if the target image stream tag has the "resolveLocalNames" field - // set. - LocalNames bool `json:"localNames"` -} - -// ImageExecutionPolicyRule determines whether a provided image may be used on the platform. -type ImageExecutionPolicyRule struct { - ImageCondition `json:",inline"` - - // Reject means this rule, if it matches the condition, will cause an immediate failure. No - // other rules will be considered. - Reject bool `json:"reject"` -} - -// ImageCondition defines the conditions for matching a particular image source. The conditions below -// are all required (logical AND). If Reject is specified, the condition is false if all conditions match, -// and true otherwise. -type ImageCondition struct { - // Name is the name of this policy rule for reference. It must be unique across all rules. - Name string `json:"name"` - // IgnoreNamespaceOverride prevents this condition from being overridden when the - // `alpha.image.policy.openshift.io/ignore-rules` is set on a namespace and contains this rule name. - IgnoreNamespaceOverride bool `json:"ignoreNamespaceOverride"` - - // OnResources determines which resources this applies to. Defaults to 'pods' for ImageExecutionPolicyRules. - OnResources []metav1.GroupResource `json:"onResources"` - - // InvertMatch means the value of the condition is logically inverted (true -> false, false -> true). - InvertMatch bool `json:"invertMatch"` - - // MatchIntegratedRegistry will only match image sources that originate from the configured integrated - // registry. - MatchIntegratedRegistry bool `json:"matchIntegratedRegistry"` - // MatchRegistries will match image references that point to the provided registries. The image registry - // must match at least one of these strings. - MatchRegistries []string `json:"matchRegistries"` - - // SkipOnResolutionFailure allows the subsequent conditions to be bypassed if the integrated registry does - // not have access to image metadata (no image exists matching the image digest). - SkipOnResolutionFailure bool `json:"skipOnResolutionFailure"` - - // MatchDockerImageLabels checks against the resolved image for the presence of a Docker label. All - // conditions must match. - MatchDockerImageLabels []ValueCondition `json:"matchDockerImageLabels"` - // MatchImageLabels checks against the resolved image for a label. All conditions must match. - MatchImageLabels []metav1.LabelSelector `json:"matchImageLabels"` - // MatchImageLabelSelectors is the processed form of MatchImageLabels. All conditions must match. - // TODO: this only existed on the internal type, it's set as part of processing the configuration, - // so presumably it should not be supplied by the user. Not sure the best way to deal with it. - MatchImageLabelSelectors []labels.Selector `json:"-"` - // MatchImageAnnotations checks against the resolved image for an annotation. All conditions must match. - MatchImageAnnotations []ValueCondition `json:"matchImageAnnotations"` -} - -// ValueCondition reflects whether the following key in a map is set or has a given value. -type ValueCondition struct { - // Key is the name of a key in a map to retrieve. - Key string `json:"key"` - // Set indicates the provided key exists in the map. This field is exclusive with Value. - Set bool `json:"set"` - // Value indicates the provided key has the given value. This field is exclusive with Set. - Value string `json:"value"` -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/zz_generated.deepcopy.go deleted file mode 100644 index c3d67efcd..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1/zz_generated.deepcopy.go +++ /dev/null @@ -1,150 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - labels "k8s.io/apimachinery/pkg/labels" - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ImageCondition) DeepCopyInto(out *ImageCondition) { - *out = *in - if in.OnResources != nil { - in, out := &in.OnResources, &out.OnResources - *out = make([]metav1.GroupResource, len(*in)) - copy(*out, *in) - } - if in.MatchRegistries != nil { - in, out := &in.MatchRegistries, &out.MatchRegistries - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.MatchDockerImageLabels != nil { - in, out := &in.MatchDockerImageLabels, &out.MatchDockerImageLabels - *out = make([]ValueCondition, len(*in)) - copy(*out, *in) - } - if in.MatchImageLabels != nil { - in, out := &in.MatchImageLabels, &out.MatchImageLabels - *out = make([]metav1.LabelSelector, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.MatchImageLabelSelectors != nil { - in, out := &in.MatchImageLabelSelectors, &out.MatchImageLabelSelectors - *out = make([]labels.Selector, len(*in)) - for i := range *in { - if (*in)[i] != nil { - (*out)[i] = (*in)[i].DeepCopySelector() - } - } - } - if in.MatchImageAnnotations != nil { - in, out := &in.MatchImageAnnotations, &out.MatchImageAnnotations - *out = make([]ValueCondition, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageCondition. -func (in *ImageCondition) DeepCopy() *ImageCondition { - if in == nil { - return nil - } - out := new(ImageCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ImageExecutionPolicyRule) DeepCopyInto(out *ImageExecutionPolicyRule) { - *out = *in - in.ImageCondition.DeepCopyInto(&out.ImageCondition) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageExecutionPolicyRule. -func (in *ImageExecutionPolicyRule) DeepCopy() *ImageExecutionPolicyRule { - if in == nil { - return nil - } - out := new(ImageExecutionPolicyRule) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ImagePolicyConfig) DeepCopyInto(out *ImagePolicyConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.ResolutionRules != nil { - in, out := &in.ResolutionRules, &out.ResolutionRules - *out = make([]ImageResolutionPolicyRule, len(*in)) - copy(*out, *in) - } - if in.ExecutionRules != nil { - in, out := &in.ExecutionRules, &out.ExecutionRules - *out = make([]ImageExecutionPolicyRule, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImagePolicyConfig. -func (in *ImagePolicyConfig) DeepCopy() *ImagePolicyConfig { - if in == nil { - return nil - } - out := new(ImagePolicyConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ImagePolicyConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ImageResolutionPolicyRule) DeepCopyInto(out *ImageResolutionPolicyRule) { - *out = *in - out.TargetResource = in.TargetResource - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageResolutionPolicyRule. -func (in *ImageResolutionPolicyRule) DeepCopy() *ImageResolutionPolicyRule { - if in == nil { - return nil - } - out := new(ImageResolutionPolicyRule) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ValueCondition) DeepCopyInto(out *ValueCondition) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValueCondition. -func (in *ValueCondition) DeepCopy() *ValueCondition { - if in == nil { - return nil - } - out := new(ValueCondition) - in.DeepCopyInto(out) - return out -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/validation/validation.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/validation/validation.go deleted file mode 100644 index 605c4eabe..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/validation/validation.go +++ /dev/null @@ -1,55 +0,0 @@ -package validation - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/validation/field" - - imagepolicy "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1" -) - -func Validate(config *imagepolicy.ImagePolicyConfig) field.ErrorList { - allErrs := field.ErrorList{} - if config == nil { - return allErrs - } - names := sets.NewString() - for i, rule := range config.ExecutionRules { - if names.Has(rule.Name) { - allErrs = append(allErrs, field.Duplicate(field.NewPath(imagepolicy.PluginName, "executionRules").Index(i).Child("name"), rule.Name)) - } - names.Insert(rule.Name) - for j, selector := range rule.MatchImageLabels { - _, err := metav1.LabelSelectorAsSelector(&selector) - if err != nil { - allErrs = append(allErrs, field.Invalid(field.NewPath(imagepolicy.PluginName, "executionRules").Index(i).Child("matchImageLabels").Index(j), nil, err.Error())) - } - } - } - - for i, rule := range config.ResolutionRules { - if len(rule.Policy) == 0 { - allErrs = append(allErrs, field.Required(field.NewPath(imagepolicy.PluginName, "resolutionRules").Index(i).Child("policy"), "a policy must be specified for this resource")) - } - if len(rule.TargetResource.Resource) == 0 { - allErrs = append(allErrs, field.Required(field.NewPath(imagepolicy.PluginName, "resolutionRules").Index(i).Child("targetResource", "resource"), "a target resource name or '*' must be provided")) - } - } - - // if you don't attempt resolution, you'll never be able to pass any rule that logically requires it - if config.ResolveImages == imagepolicy.DoNotAttempt { - for i, rule := range config.ExecutionRules { - if len(rule.MatchDockerImageLabels) > 0 { - allErrs = append(allErrs, field.Invalid(field.NewPath(imagepolicy.PluginName, "executionRules").Index(i).Child("matchDockerImageLabels"), rule.MatchDockerImageLabels, "images are not being resolved, this condition will always fail")) - } - if len(rule.MatchImageLabels) > 0 { - allErrs = append(allErrs, field.Invalid(field.NewPath(imagepolicy.PluginName, "executionRules").Index(i).Child("matchImageLabels"), rule.MatchImageLabels, "images are not being resolved, this condition will always fail")) - } - if len(rule.MatchImageAnnotations) > 0 { - allErrs = append(allErrs, field.Invalid(field.NewPath(imagepolicy.PluginName, "executionRules").Index(i).Child("matchImageAnnotations"), rule.MatchImageAnnotations, "images are not being resolved, this condition will always fail")) - } - } - } - - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/validation/validation_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/validation/validation_test.go deleted file mode 100644 index 8bfe35a46..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/validation/validation_test.go +++ /dev/null @@ -1,101 +0,0 @@ -package validation - -import ( - "testing" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - imagepolicy "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1" -) - -func TestValidation(t *testing.T) { - if errs := Validate(&imagepolicy.ImagePolicyConfig{}); len(errs) != 0 { - t.Fatal(errs) - } - if errs := Validate(&imagepolicy.ImagePolicyConfig{ - ExecutionRules: []imagepolicy.ImageExecutionPolicyRule{ - { - ImageCondition: imagepolicy.ImageCondition{ - MatchImageLabels: []metav1.LabelSelector{ - {MatchLabels: map[string]string{"test": "other"}}, - }, - }, - }, - }, - }); len(errs) != 0 { - t.Fatal(errs) - } - if errs := Validate(&imagepolicy.ImagePolicyConfig{ - ExecutionRules: []imagepolicy.ImageExecutionPolicyRule{ - { - ImageCondition: imagepolicy.ImageCondition{ - MatchImageLabels: []metav1.LabelSelector{ - {MatchLabels: map[string]string{"": ""}}, - }, - }, - }, - }, - }); len(errs) == 0 { - t.Fatal(errs) - } - if errs := Validate(&imagepolicy.ImagePolicyConfig{ - ExecutionRules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{Name: "test"}}, - {ImageCondition: imagepolicy.ImageCondition{Name: "test"}}, - }, - }); len(errs) == 0 { - t.Fatal(errs) - } - - if errs := Validate(&imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {TargetResource: metav1.GroupResource{Resource: "test"}, Policy: imagepolicy.Attempt}, - }, - }); len(errs) != 0 { - t.Fatal(errs) - } - - if errs := Validate(&imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {TargetResource: metav1.GroupResource{Resource: "test"}}, - }, - }); len(errs) == 0 { - t.Fatal(errs) - } - - if errs := Validate(&imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {Policy: imagepolicy.Attempt}, - }, - }); len(errs) == 0 { - t.Fatal(errs) - } - - if errs := Validate(&imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ExecutionRules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{Name: "test", MatchDockerImageLabels: []imagepolicy.ValueCondition{{}}}}, - }, - }); len(errs) == 0 { - t.Fatal(errs) - } - if errs := Validate(&imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ExecutionRules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{Name: "test", MatchImageLabels: []metav1.LabelSelector{{}}}}, - }, - }); len(errs) == 0 { - t.Fatal(errs) - } - if errs := Validate(&imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ExecutionRules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{Name: "test", MatchImageAnnotations: []imagepolicy.ValueCondition{{}}}}, - }, - }); len(errs) == 0 { - t.Fatal(errs) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/helpers.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/helpers.go deleted file mode 100644 index c7526e4f3..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/helpers.go +++ /dev/null @@ -1,32 +0,0 @@ -package imagepolicy - -import ( - imagepolicyapiv1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1" -) - -// RequestsResolution returns true if you should attempt to resolve image pull specs -func RequestsResolution(imageResolutionType imagepolicyapiv1.ImageResolutionType) bool { - switch imageResolutionType { - case imagepolicyapiv1.RequiredRewrite, imagepolicyapiv1.Required, imagepolicyapiv1.AttemptRewrite, imagepolicyapiv1.Attempt: - return true - } - return false -} - -// FailOnResolutionFailure returns true if you should fail when resolution fails -func FailOnResolutionFailure(imageResolutionType imagepolicyapiv1.ImageResolutionType) bool { - switch imageResolutionType { - case imagepolicyapiv1.RequiredRewrite, imagepolicyapiv1.Required: - return true - } - return false -} - -// RewriteImagePullSpec returns true if you should rewrite image pull specs when resolution succeeds -func RewriteImagePullSpec(imageResolutionType imagepolicyapiv1.ImageResolutionType) bool { - switch imageResolutionType { - case imagepolicyapiv1.RequiredRewrite, imagepolicyapiv1.AttemptRewrite: - return true - } - return false -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagepolicy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagepolicy.go deleted file mode 100644 index a7c4b057b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagepolicy.go +++ /dev/null @@ -1,517 +0,0 @@ -package imagepolicy - -import ( - "fmt" - "io" - "io/ioutil" - "reflect" - "strings" - "time" - - "github.com/hashicorp/golang-lru" - - apierrs "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/serializer" - "k8s.io/apimachinery/pkg/util/diff" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/client-go/informers" - corev1listers "k8s.io/client-go/listers/core/v1" - "k8s.io/client-go/rest" - "k8s.io/klog" - kapi "k8s.io/kubernetes/pkg/apis/core" - - imagev1 "github.com/openshift/api/image/v1" - imagev1client "github.com/openshift/client-go/image/clientset/versioned" - imagev1typedclient "github.com/openshift/client-go/image/clientset/versioned/typed/image/v1" - "github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig" - "github.com/openshift/library-go/pkg/image/imageutil" - "github.com/openshift/library-go/pkg/image/reference" - imagepolicy "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/validation" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules" -) - -func Register(plugins *admission.Plugins) { - plugins.Register(imagepolicy.PluginName, - func(input io.Reader) (admission.Interface, error) { - config := &imagepolicy.ImagePolicyConfig{} - if input != nil { - configContent, err := ioutil.ReadAll(input) - if err != nil { - return nil, err - } - scheme := runtime.NewScheme() - utilruntime.Must(imagepolicy.Install(scheme)) - codecs := serializer.NewCodecFactory(scheme) - err = runtime.DecodeInto(codecs.UniversalDecoder(imagepolicy.GroupVersion), configContent, config) - if err != nil { - return nil, err - } - } - - imagepolicy.SetDefaults_ImagePolicyConfig(config) - if errs := validation.Validate(config); len(errs) > 0 { - return nil, errs.ToAggregate() - } - klog.V(5).Infof("%s admission controller loaded with config: %#v", imagepolicy.PluginName, config) - return NewImagePolicyPlugin(config) - }) -} - -type ImagePolicyPlugin struct { - *admission.Handler - config *imagepolicy.ImagePolicyConfig - Client imagev1client.Interface - - accepter rules.Accepter - - integratedRegistryMatcher integratedRegistryMatcher - - NsLister corev1listers.NamespaceLister - resolver imageResolver - - imageMutators imagereferencemutators.ImageMutators -} - -var _ = initializer.WantsExternalKubeInformerFactory(&ImagePolicyPlugin{}) -var _ = admissionrestconfig.WantsRESTClientConfig(&ImagePolicyPlugin{}) -var _ = WantsInternalImageRegistry(&ImagePolicyPlugin{}) -var _ = WantsImageMutators(&ImagePolicyPlugin{}) -var _ = admission.ValidationInterface(&ImagePolicyPlugin{}) -var _ = admission.MutationInterface(&ImagePolicyPlugin{}) - -type integratedRegistryMatcher struct { - rules.RegistryMatcher -} - -// imageResolver abstracts identifying an image for a particular reference. -type imageResolver interface { - ResolveObjectReference(ref *kapi.ObjectReference, defaultNamespace string, forceResolveLocalNames bool) (*rules.ImagePolicyAttributes, error) -} - -// imageResolutionPolicy determines whether an image should be resolved -type imageResolutionPolicy interface { - // RequestsResolution returns true if you should attempt to resolve image pull specs - RequestsResolution(metav1.GroupResource) bool - // FailOnResolutionFailure returns true if you should fail when resolution fails - FailOnResolutionFailure(metav1.GroupResource) bool - // RewriteImagePullSpec returns true if you should rewrite image pull specs when resolution succeeds - RewriteImagePullSpec(attr *rules.ImagePolicyAttributes, isUpdate bool, gr metav1.GroupResource) bool -} - -// ImagePolicyPlugin returns an admission controller for pods that controls what images are allowed to run on the -// cluster. -func NewImagePolicyPlugin(parsed *imagepolicy.ImagePolicyConfig) (*ImagePolicyPlugin, error) { - m := integratedRegistryMatcher{ - RegistryMatcher: rules.NewRegistryMatcher(nil), - } - accepter, err := rules.NewExecutionRulesAccepter(parsed.ExecutionRules, m) - if err != nil { - return nil, err - } - - return &ImagePolicyPlugin{ - Handler: admission.NewHandler(admission.Create, admission.Update), - config: parsed, - - accepter: accepter, - - integratedRegistryMatcher: m, - }, nil -} - -func (a *ImagePolicyPlugin) SetInternalImageRegistry(internalImageRegistryName string) { - a.integratedRegistryMatcher.RegistryMatcher = rules.RegistryNameMatcher(internalImageRegistryName) -} - -func (a *ImagePolicyPlugin) SetImageMutators(imageMutators imagereferencemutators.ImageMutators) { - a.imageMutators = imageMutators -} - -func (a *ImagePolicyPlugin) SetRESTClientConfig(restClientConfig rest.Config) { - var err error - a.Client, err = imagev1client.NewForConfig(&restClientConfig) - if err != nil { - utilruntime.HandleError(err) - return - } -} - -func (a *ImagePolicyPlugin) SetExternalKubeInformerFactory(kubeInformers informers.SharedInformerFactory) { - a.NsLister = kubeInformers.Core().V1().Namespaces().Lister() -} - -// Validate ensures that all required interfaces have been provided, or returns an error. -func (a *ImagePolicyPlugin) ValidateInitialization() error { - if a.Client == nil { - return fmt.Errorf("%s needs an Openshift client", imagepolicy.PluginName) - } - if a.NsLister == nil { - return fmt.Errorf("%s needs a namespace lister", imagepolicy.PluginName) - } - if a.imageMutators == nil { - return fmt.Errorf("%s needs an image mutators", imagepolicy.PluginName) - } - imageResolver, err := newImageResolutionCache(a.Client.ImageV1(), a.integratedRegistryMatcher) - if err != nil { - return fmt.Errorf("unable to create image policy controller: %v", err) - } - a.resolver = imageResolver - return nil -} - -// Admit attempts to apply the image policy to the incoming resource. -func (a *ImagePolicyPlugin) Admit(attr admission.Attributes, _ admission.ObjectInterfaces) error { - return a.admit(attr, true) -} - -// Validate attempts to apply the image policy to the incoming resource. -func (a *ImagePolicyPlugin) Validate(attr admission.Attributes, _ admission.ObjectInterfaces) error { - return a.admit(attr, false) -} - -func (a *ImagePolicyPlugin) admit(attr admission.Attributes, mutationAllowed bool) error { - switch attr.GetOperation() { - case admission.Create, admission.Update: - if len(attr.GetSubresource()) > 0 { - return nil - } - // only create and update are tested, and only on core resources - // TODO: scan all resources - // TODO: Create a general equivalence map for admission - operation X on subresource Y is equivalent to reduced operation - default: - return nil - } - - policy := resolutionConfig{a.config} - - schemagr := attr.GetResource().GroupResource() - apigr := metav1.GroupResource{Resource: schemagr.Resource, Group: schemagr.Group} - - if !a.accepter.Covers(apigr) && !policy.Covers(apigr) { - return nil - } - - klog.V(5).Infof("running image policy admission for %s:%s/%s", attr.GetKind(), attr.GetNamespace(), attr.GetName()) - m, err := a.imageMutators.GetImageReferenceMutator(attr.GetObject(), attr.GetOldObject()) - if err != nil { - return apierrs.NewForbidden(schemagr, attr.GetName(), fmt.Errorf("unable to apply image policy against objects of type %T: %v", attr.GetObject(), err)) - } - - if !mutationAllowed { - m = &mutationPreventer{m} - } - - annotations, _ := a.imageMutators.GetAnnotationAccessor(attr.GetObject()) - - // load exclusion rules from the namespace cache - var excluded sets.String - if ns := attr.GetNamespace(); len(ns) > 0 { - if ns, err := a.NsLister.Get(ns); err == nil { - if value := ns.Annotations[imagepolicy.IgnorePolicyRulesAnnotation]; len(value) > 0 { - excluded = sets.NewString(strings.Split(value, ",")...) - } - } - } - - if err := accept(a.accepter, policy, a.resolver, m, annotations, attr, excluded); err != nil { - return err - } - - return nil -} - -type mutationPreventer struct { - m imagereferencemutators.ImageReferenceMutator -} - -func (m *mutationPreventer) Mutate(fn imagereferencemutators.ImageReferenceMutateFunc) field.ErrorList { - return m.m.Mutate(func(ref *kapi.ObjectReference) error { - original := ref.DeepCopy() - if err := fn(ref); err != nil { - return fmt.Errorf("error in image policy validation: %v", err) - } - if !reflect.DeepEqual(ref, original) { - klog.V(2).Infof("disallowed mutation in image policy validation: %s", diff.ObjectGoPrintSideBySide(original, ref)) - return fmt.Errorf("this image is prohibited by policy (changed after admission)") - } - return nil - }) -} - -type imageResolutionCache struct { - imageClient imagev1typedclient.ImageV1Interface - integrated rules.RegistryMatcher - expiration time.Duration - - cache *lru.Cache -} - -type imageCacheEntry struct { - expires time.Time - image *imagev1.Image -} - -// newImageResolutionCache creates a new resolver that caches frequently loaded images for one minute. -func newImageResolutionCache(imageClient imagev1typedclient.ImageV1Interface, integratedRegistry rules.RegistryMatcher) (*imageResolutionCache, error) { - imageCache, err := lru.New(128) - if err != nil { - return nil, err - } - return &imageResolutionCache{ - imageClient: imageClient, - integrated: integratedRegistry, - cache: imageCache, - expiration: time.Minute, - }, nil -} - -var now = time.Now - -// ResolveObjectReference converts a reference into an image API or returns an error. If the kind is not recognized -// this method will return an error to prevent references that may be images from being ignored. -func (c *imageResolutionCache) ResolveObjectReference(ref *kapi.ObjectReference, defaultNamespace string, forceResolveLocalNames bool) (*rules.ImagePolicyAttributes, error) { - switch ref.Kind { - case "ImageStreamTag": - ns := ref.Namespace - if len(ns) == 0 { - ns = defaultNamespace - } - name, tag, ok := imageutil.SplitImageStreamTag(ref.Name) - if !ok { - return &rules.ImagePolicyAttributes{IntegratedRegistry: true}, fmt.Errorf("references of kind ImageStreamTag must be of the form NAME:TAG") - } - return c.resolveImageStreamTag(ns, name, tag, false, false) - - case "ImageStreamImage": - ns := ref.Namespace - if len(ns) == 0 { - ns = defaultNamespace - } - name, id, ok := imageutil.SplitImageStreamImage(ref.Name) - if !ok { - return &rules.ImagePolicyAttributes{IntegratedRegistry: true}, fmt.Errorf("references of kind ImageStreamImage must be of the form NAME@DIGEST") - } - return c.resolveImageStreamImage(ns, name, id) - - case "DockerImage": - ref, err := reference.Parse(ref.Name) - if err != nil { - return nil, err - } - return c.resolveImageReference(ref, defaultNamespace, forceResolveLocalNames) - - default: - return nil, fmt.Errorf("image policy does not allow image references of kind %q", ref.Kind) - } -} - -// Resolve converts an image reference into a resolved image or returns an error. Only images located in the internal -// registry or those with a digest can be resolved - all other scenarios will return an error. -func (c *imageResolutionCache) resolveImageReference(ref reference.DockerImageReference, defaultNamespace string, forceResolveLocalNames bool) (*rules.ImagePolicyAttributes, error) { - // images by ID can be checked for policy - if len(ref.ID) > 0 { - now := now() - if value, ok := c.cache.Get(ref.ID); ok { - cached := value.(imageCacheEntry) - if now.Before(cached.expires) { - return &rules.ImagePolicyAttributes{Name: ref, Image: cached.image}, nil - } - } - image, err := c.imageClient.Images().Get(ref.ID, metav1.GetOptions{}) - if err != nil { - return nil, err - } - c.cache.Add(ref.ID, imageCacheEntry{expires: now.Add(c.expiration), image: image}) - return &rules.ImagePolicyAttributes{Name: ref, Image: image, IntegratedRegistry: c.integrated.Matches(ref.Registry)}, nil - } - - // an image spec that points to the internal registry is by definition also an imagestreamtag reference, - // so attempt to resolve it as such. - fullReference := c.integrated.Matches(ref.Registry) - // if we've been explicitly told to treat this image spec as an imagestreamtag reference, or if it is a single - // segment value, attempt to resolve the value as an imagestream tag that will ultimately resolve to an image. - partialReference := forceResolveLocalNames || (len(ref.Registry) == 0 && len(ref.Namespace) == 0 && len(ref.Name) > 0) - - // if we can't treat it as an imagestreamtag reference, and since we don't have an imageid (checked earlier), - // we aren't going to be able to resolve this value to an image. - if !fullReference && !partialReference { - return nil, fmt.Errorf("(%s) could not be resolved to an exact image reference", ref.Exact()) - } - - tag := ref.Tag - if len(tag) == 0 { - tag = imagev1.DefaultImageTag - } - if len(ref.Namespace) == 0 || forceResolveLocalNames { - ref.Namespace = defaultNamespace - } - - return c.resolveImageStreamTag(ref.Namespace, ref.Name, tag, partialReference, forceResolveLocalNames) -} - -// resolveImageStreamTag loads an image stream tag and creates a fully qualified image stream image reference, -// or returns an error. -func (c *imageResolutionCache) resolveImageStreamTag(namespace, name, tag string, partial, forceResolveLocalNames bool) (*rules.ImagePolicyAttributes, error) { - attrs := &rules.ImagePolicyAttributes{IntegratedRegistry: true} - resolved, err := c.imageClient.ImageStreamTags(namespace).Get(imageutil.JoinImageStreamTag(name, tag), metav1.GetOptions{}) - if err != nil { - if partial { - attrs.IntegratedRegistry = false - } - // if a stream exists, resolves names, and a registry is installed, change the reference to be a pointer - // to the internal registry. This prevents the lookup from going to the original location, which is consistent - // with the intent of resolving local names. - if isImageStreamTagNotFound(err) { - if stream, err := c.imageClient.ImageStreams(namespace).Get(name, metav1.GetOptions{}); err == nil && (forceResolveLocalNames || stream.Spec.LookupPolicy.Local) && len(stream.Status.DockerImageRepository) > 0 { - if ref, err := reference.Parse(stream.Status.DockerImageRepository); err == nil { - klog.V(4).Infof("%s/%s:%s points to a local name resolving stream, but the tag does not exist", namespace, name, tag) - ref.Tag = tag - attrs.Name = ref - attrs.LocalRewrite = true - return attrs, nil - } - } - } - return attrs, err - } - if partial { - if !forceResolveLocalNames && !resolved.LookupPolicy.Local { - attrs.IntegratedRegistry = false - return attrs, fmt.Errorf("ImageStreamTag does not allow local references and the resource did not request image stream resolution") - } - attrs.LocalRewrite = true - } - ref, err := reference.Parse(resolved.Image.DockerImageReference) - if err != nil { - return attrs, fmt.Errorf("image reference %s could not be parsed: %v", resolved.Image.DockerImageReference, err) - } - ref.Tag = "" - ref.ID = resolved.Image.Name - - now := now() - c.cache.Add(resolved.Image.Name, imageCacheEntry{expires: now.Add(c.expiration), image: &resolved.Image}) - - attrs.Name = ref - attrs.Image = &resolved.Image - return attrs, nil -} - -// resolveImageStreamImage loads an image stream image if it exists, or returns an error. -func (c *imageResolutionCache) resolveImageStreamImage(namespace, name, id string) (*rules.ImagePolicyAttributes, error) { - attrs := &rules.ImagePolicyAttributes{IntegratedRegistry: true} - resolved, err := c.imageClient.ImageStreamImages(namespace).Get(imageutil.JoinImageStreamImage(name, id), metav1.GetOptions{}) - if err != nil { - return attrs, err - } - ref, err := reference.Parse(resolved.Image.DockerImageReference) - if err != nil { - return attrs, fmt.Errorf("ImageStreamTag could not be resolved: %v", err) - } - now := now() - c.cache.Add(resolved.Image.Name, imageCacheEntry{expires: now.Add(c.expiration), image: &resolved.Image}) - - attrs.Name = ref - attrs.Image = &resolved.Image - return attrs, nil -} - -// isImageStreamTagNotFound returns true iff the tag is missing but the image stream -// exists. -func isImageStreamTagNotFound(err error) bool { - if err == nil || !apierrs.IsNotFound(err) { - return false - } - status, ok := err.(apierrs.APIStatus) - if !ok { - return false - } - details := status.Status().Details - if details == nil { - return false - } - return details.Kind == "imagestreamtags" && details.Group == "image.openshift.io" -} - -// resolutionConfig translates an ImagePolicyConfig into imageResolutionPolicy -type resolutionConfig struct { - config *imagepolicy.ImagePolicyConfig -} - -// Covers returns true if the resolver specifically should touch this resource. -func (config resolutionConfig) Covers(gr metav1.GroupResource) bool { - for _, rule := range config.config.ResolutionRules { - if resolutionRuleCoversResource(rule.TargetResource, gr) { - return true - } - } - return false -} - -// RequestsResolution is true if the policy demands it or if any rule covers it. -func (config resolutionConfig) RequestsResolution(gr metav1.GroupResource) bool { - if RequestsResolution(config.config.ResolveImages) { - return true - } - for _, rule := range config.config.ResolutionRules { - if resolutionRuleCoversResource(rule.TargetResource, gr) { - return true - } - } - return false -} - -// FailOnResolutionFailure does not depend on the nested rules. -func (config resolutionConfig) FailOnResolutionFailure(gr metav1.GroupResource) bool { - return FailOnResolutionFailure(config.config.ResolveImages) -} - -var skipImageRewriteOnUpdate = map[metav1.GroupResource]struct{}{ - // Job template specs are immutable, they cannot be updated. - {Group: "batch", Resource: "jobs"}: {}, - // Build specs are immutable, they cannot be updated. - {Group: "build.openshift.io", Resource: "builds"}: {}, - // TODO: remove when statefulsets allow spec.template updates in 3.7 - {Group: "apps", Resource: "statefulsets"}: {}, -} - -// RewriteImagePullSpec applies to implicit rewrite attributes and local resources as well as if the policy requires it. -// If a local name check is requested and a rule matches true is returned. The policy default resolution is only respected -// if a resource isn't covered by a rule - if pods have a rule with DoNotAttempt and the global policy is RequiredRewrite, -// no pods will be rewritten. -func (config resolutionConfig) RewriteImagePullSpec(attr *rules.ImagePolicyAttributes, isUpdate bool, gr metav1.GroupResource) bool { - if isUpdate { - if _, ok := skipImageRewriteOnUpdate[gr]; ok { - return false - } - } - hasMatchingRule := false - for _, rule := range config.config.ResolutionRules { - if !resolutionRuleCoversResource(rule.TargetResource, gr) { - continue - } - if rule.LocalNames && attr.LocalRewrite { - return true - } - if RewriteImagePullSpec(rule.Policy) { - return true - } - hasMatchingRule = true - } - if hasMatchingRule { - return false - } - return RewriteImagePullSpec(config.config.ResolveImages) -} - -// resolutionRuleCoversResource implements wildcard checking on Resource names -func resolutionRuleCoversResource(rule metav1.GroupResource, gr metav1.GroupResource) bool { - return rule.Group == gr.Group && (rule.Resource == gr.Resource || rule.Resource == "*") -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagepolicy_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagepolicy_test.go deleted file mode 100644 index 54bd8f6ab..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagepolicy_test.go +++ /dev/null @@ -1,1039 +0,0 @@ -package imagepolicy - -import ( - "bytes" - "io/ioutil" - "os" - "reflect" - "strings" - "testing" - "time" - - corev1 "k8s.io/api/core/v1" - kerrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/runtime/serializer" - "k8s.io/apimachinery/pkg/util/diff" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apiserver/pkg/admission" - corev1listers "k8s.io/client-go/listers/core/v1" - clientgotesting "k8s.io/client-go/testing" - kcache "k8s.io/client-go/tools/cache" - "k8s.io/kubernetes/pkg/apis/apps" - kapi "k8s.io/kubernetes/pkg/apis/core" - - "github.com/openshift/api/image" - imagev1 "github.com/openshift/api/image/v1" - imagev1fakeclient "github.com/openshift/client-go/image/clientset/versioned/fake" - "github.com/openshift/library-go/pkg/image/reference" - imagepolicy "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/validation" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules" -) - -const ( - goodSHA = "sha256:08151bf2fc92355f236918bb16905921e6f66e1d03100fb9b18d60125db3df3a" - badSHA = "sha256:503c75e8121369581e5e5abe57b5a3f12db859052b217a8ea16eb86f4b5561a1" -) - -var ( - buildGroupVersionResource = schema.GroupVersionResource{Group: "build.openshift.io", Version: "v1", Resource: "builds"} - buildGroupVersionKind = schema.GroupVersionKind{Group: "build.openshift.io", Version: "v1", Kind: "Build"} - - buildConfigGroupVersionResource = schema.GroupVersionResource{Group: "build.openshift.io", Version: "v1", Resource: "buildconfigs"} - buildConfigGroupVersionKind = schema.GroupVersionKind{Group: "build.openshift.io", Version: "v1", Kind: "BuildConfig"} -) - -type resolveFunc func(ref *kapi.ObjectReference, defaultNamespace string, forceLocalResolve bool) (*rules.ImagePolicyAttributes, error) - -func (fn resolveFunc) ResolveObjectReference(ref *kapi.ObjectReference, defaultNamespace string, forceLocalResolve bool) (*rules.ImagePolicyAttributes, error) { - return fn(ref, defaultNamespace, forceLocalResolve) -} - -func setDefaultCache(p *ImagePolicyPlugin) kcache.Indexer { - indexer := kcache.NewIndexer(kcache.MetaNamespaceKeyFunc, kcache.Indexers{}) - p.NsLister = corev1listers.NewNamespaceLister(indexer) - return indexer -} - -func TestDefaultPolicy(t *testing.T) { - input, err := os.Open("apis/imagepolicy/v1/default-policy.yaml") - if err != nil { - t.Fatal(err) - } - config := &imagepolicy.ImagePolicyConfig{} - configContent, err := ioutil.ReadAll(input) - if err != nil { - t.Fatal(err) - } - scheme := runtime.NewScheme() - utilruntime.Must(imagepolicy.Install(scheme)) - codecs := serializer.NewCodecFactory(scheme) - err = runtime.DecodeInto(codecs.UniversalDecoder(imagepolicy.GroupVersion), configContent, config) - if err != nil { - t.Fatal(err) - } - imagepolicy.SetDefaults_ImagePolicyConfig(config) - - if errs := validation.Validate(config); len(errs) > 0 { - t.Fatal(errs.ToAggregate()) - } - - plugin, err := NewImagePolicyPlugin(config) - if err != nil { - t.Fatal(err) - } - - goodImage := &imagev1.Image{ - ObjectMeta: metav1.ObjectMeta{Name: goodSHA}, - DockerImageReference: "integrated.registry/goodns/goodimage:good", - } - badImage := &imagev1.Image{ - ObjectMeta: metav1.ObjectMeta{ - Name: badSHA, - Annotations: map[string]string{ - "images.openshift.io/deny-execution": "true", - }, - }, - DockerImageReference: "integrated.registry/badns/badimage:bad", - } - - goodTag := &imagev1.ImageStreamTag{ - ObjectMeta: metav1.ObjectMeta{Name: "mysql:goodtag", Namespace: "repo"}, - Image: *goodImage, - } - badTag := &imagev1.ImageStreamTag{ - ObjectMeta: metav1.ObjectMeta{Name: "mysql:badtag", Namespace: "repo"}, - Image: *badImage, - } - - client := &imagev1fakeclient.Clientset{} - client.AddReactor("get", "images", func(action clientgotesting.Action) (handled bool, ret runtime.Object, err error) { - name := action.(clientgotesting.GetAction).GetName() - switch name { - case goodImage.Name: - return true, goodImage, nil - case badImage.Name: - return true, badImage, nil - default: - return true, nil, kerrors.NewNotFound(image.Resource("images"), name) - } - }) - client.AddReactor("get", "imagestreamtags", func(action clientgotesting.Action) (handled bool, ret runtime.Object, err error) { - name := action.(clientgotesting.GetAction).GetName() - switch name { - case goodTag.Name: - return true, goodTag, nil - case badTag.Name: - return true, badTag, nil - default: - return true, nil, kerrors.NewNotFound(image.Resource("imagestreamtags"), name) - } - }) - - store := setDefaultCache(plugin) - plugin.Client = client - plugin.SetInternalImageRegistry("integrated.registry") - plugin.SetImageMutators(imagereferencemutators.KubeImageMutators{}) - if err := plugin.ValidateInitialization(); err != nil { - t.Fatal(err) - } - - originalNowFn := now - defer (func() { now = originalNowFn })() - now = func() time.Time { return time.Unix(1, 0) } - - // should allow a non-integrated image - attrs := admission.NewAttributesRecord( - &kapi.Pod{Spec: kapi.PodSpec{Containers: []kapi.Container{{Image: "index.docker.io/mysql:latest"}}}}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - if err := plugin.Admit(attrs, nil); err != nil { - t.Fatal(err) - } - if err := plugin.Validate(attrs, nil); err != nil { - t.Fatal(err) - } - - // should resolve the non-integrated image and allow it - attrs = admission.NewAttributesRecord( - &kapi.Pod{Spec: kapi.PodSpec{Containers: []kapi.Container{{Image: "index.docker.io/mysql@" + goodSHA}}}}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - if err := plugin.Admit(attrs, nil); err != nil { - t.Fatal(err) - } - if err := plugin.Validate(attrs, nil); err != nil { - t.Fatal(err) - } - - // should resolve the integrated image by digest and allow it - attrs = admission.NewAttributesRecord( - &kapi.Pod{Spec: kapi.PodSpec{Containers: []kapi.Container{{Image: "integrated.registry/repo/mysql@" + goodSHA}}}}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - if err := plugin.Admit(attrs, nil); err != nil { - t.Fatal(err) - } - if err := plugin.Validate(attrs, nil); err != nil { - t.Fatal(err) - } - - // should attempt resolve the integrated image by tag and fail because tag not found - attrs = admission.NewAttributesRecord( - &kapi.Pod{Spec: kapi.PodSpec{Containers: []kapi.Container{{Image: "integrated.registry/repo/mysql:missingtag"}}}}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - if err := plugin.Admit(attrs, nil); err != nil { - t.Fatal(err) - } - if err := plugin.Validate(attrs, nil); err != nil { - t.Fatal(err) - } - - // should attempt resolve the integrated image by tag and allow it - attrs = admission.NewAttributesRecord( - &kapi.Pod{Spec: kapi.PodSpec{Containers: []kapi.Container{{Image: "integrated.registry/repo/mysql:goodtag"}}}}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - if err := plugin.Admit(attrs, nil); err != nil { - t.Fatal(err) - } - if err := plugin.Validate(attrs, nil); err != nil { - t.Fatal(err) - } - - // should attempt resolve the integrated image by tag and forbid it - attrs = admission.NewAttributesRecord( - &kapi.Pod{Spec: kapi.PodSpec{Containers: []kapi.Container{{Image: "integrated.registry/repo/mysql:badtag"}}}}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - t.Logf("%#v", plugin.accepter) - if err := plugin.Admit(attrs, nil); err == nil || !kerrors.IsInvalid(err) { - t.Fatal(err) - } - if err := plugin.Validate(attrs, nil); err == nil || !kerrors.IsInvalid(err) { - t.Fatal(err) - } - - // should reject the non-integrated image due to the annotation - attrs = admission.NewAttributesRecord( - &kapi.Pod{Spec: kapi.PodSpec{Containers: []kapi.Container{{Image: "index.docker.io/mysql@" + badSHA}}}}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - if err := plugin.Admit(attrs, nil); err == nil || !kerrors.IsInvalid(err) { - t.Fatal(err) - } - if err := plugin.Validate(attrs, nil); err == nil || !kerrors.IsInvalid(err) { - t.Fatal(err) - } - - // should reject the non-integrated image due to the annotation on an init container - attrs = admission.NewAttributesRecord( - &kapi.Pod{Spec: kapi.PodSpec{InitContainers: []kapi.Container{{Image: "index.docker.io/mysql@" + badSHA}}}}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - if err := plugin.Admit(attrs, nil); err == nil || !kerrors.IsInvalid(err) { - t.Fatal(err) - } - if err := plugin.Validate(attrs, nil); err == nil || !kerrors.IsInvalid(err) { - t.Fatal(err) - } - - // should hit the cache on the previously good image and continue to allow it (the copy in cache was previously safe) - goodImage.Annotations = map[string]string{"images.openshift.io/deny-execution": "true"} - attrs = admission.NewAttributesRecord( - &kapi.Pod{Spec: kapi.PodSpec{Containers: []kapi.Container{{Image: "index.docker.io/mysql@" + goodSHA}}}}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - if err := plugin.Admit(attrs, nil); err != nil { - t.Fatal(err) - } - if err := plugin.Validate(attrs, nil); err != nil { - t.Fatal(err) - } - - // moving 2 minutes in the future should bypass the cache and deny the image - now = func() time.Time { return time.Unix(1, 0).Add(2 * time.Minute) } - attrs = admission.NewAttributesRecord( - &kapi.Pod{Spec: kapi.PodSpec{Containers: []kapi.Container{{Image: "index.docker.io/mysql@" + goodSHA}}}}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - if err := plugin.Admit(attrs, nil); err == nil || !kerrors.IsInvalid(err) { - t.Fatal(err) - } - if err := plugin.Validate(attrs, nil); err == nil || !kerrors.IsInvalid(err) { - t.Fatal(err) - } - - // setting a namespace annotation should allow the rule to be skipped immediately - store.Add(&corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "", - Name: "default", - Annotations: map[string]string{ - imagepolicy.IgnorePolicyRulesAnnotation: "execution-denied", - }, - }, - }) - attrs = admission.NewAttributesRecord( - &kapi.Pod{Spec: kapi.PodSpec{Containers: []kapi.Container{{Image: "index.docker.io/mysql@" + goodSHA}}}}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - if err := plugin.Admit(attrs, nil); err != nil { - t.Fatal(err) - } - if err := plugin.Validate(attrs, nil); err != nil { - t.Fatal(err) - } -} - -func TestAdmissionWithoutPodSpec(t *testing.T) { - onResources := []metav1.GroupResource{{Resource: "nodes"}} - p, err := NewImagePolicyPlugin(&imagepolicy.ImagePolicyConfig{ - ExecutionRules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: onResources}}, - }, - }) - p.SetImageMutators(imagereferencemutators.KubeImageMutators{}) - if err != nil { - t.Fatal(err) - } - attrs := admission.NewAttributesRecord( - &kapi.Node{}, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Node"}, - "", "node1", schema.GroupVersionResource{Version: "v1", Resource: "nodes"}, - "", admission.Create, false, nil, - ) - if err := p.Admit(attrs, nil); !kerrors.IsForbidden(err) || !strings.Contains(err.Error(), "No list of images available for this object") { - t.Fatal(err) - } - if err := p.Validate(attrs, nil); !kerrors.IsForbidden(err) || !strings.Contains(err.Error(), "No list of images available for this object") { - t.Fatal(err) - } -} - -func TestAdmissionResolution(t *testing.T) { - onResources := []metav1.GroupResource{{Resource: "pods"}} - p, err := NewImagePolicyPlugin(&imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.AttemptRewrite, - ExecutionRules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: onResources}}, - {Reject: true, ImageCondition: imagepolicy.ImageCondition{ - OnResources: onResources, - MatchRegistries: []string{"index.docker.io"}, - }}, - }, - }) - p.SetImageMutators(imagereferencemutators.KubeImageMutators{}) - setDefaultCache(p) - - p.resolver = resolveFunc(func(ref *kapi.ObjectReference, defaultNamespace string, forceLocalResolve bool) (*rules.ImagePolicyAttributes, - error) { - switch ref.Name { - case "index.docker.io/mysql:latest": - return &rules.ImagePolicyAttributes{ - Name: reference.DockerImageReference{Registry: "index.docker.io", Name: "mysql", Tag: "latest"}, - Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Name: "1"}}, - }, nil - case "myregistry.com/mysql/mysql:latest", - "myregistry.com/mysql/mysql@sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4": - return &rules.ImagePolicyAttributes{ - Name: reference.DockerImageReference{Registry: "myregistry.com", Namespace: "mysql", Name: "mysql", ID: "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"}, - Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Name: "2"}}, - }, nil - } - t.Fatalf("unexpected call to resolve image: %v", ref) - return nil, nil - }) - - if err != nil { - t.Fatal(err) - } - if !p.Handles(admission.Create) { - t.Fatal("expected to handle create") - } - failingAttrs := admission.NewAttributesRecord( - &kapi.Pod{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "index.docker.io/mysql:latest"}, - }, - }, - }, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, - false, - nil, - ) - if err := p.Admit(failingAttrs, nil); err == nil { - t.Fatal(err) - } - if err := p.Validate(failingAttrs, nil); err == nil { - t.Fatal(err) - } - - pod := &kapi.Pod{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "myregistry.com/mysql/mysql:latest"}, - {Image: "myregistry.com/mysql/mysql:latest"}, - }, - }, - } - attrs := admission.NewAttributesRecord( - pod, - nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ) - if err := p.Admit(attrs, nil); err != nil { - t.Logf("object: %#v", attrs.GetObject()) - t.Fatal(err) - } - if pod.Spec.Containers[0].Image != "myregistry.com/mysql/mysql@sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4" || - pod.Spec.Containers[1].Image != "myregistry.com/mysql/mysql@sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4" { - t.Errorf("unexpected image: %#v", pod) - } - if err := p.Validate(attrs, nil); err != nil { - t.Logf("object: %#v", attrs.GetObject()) - t.Fatal(err) - } - if pod.Spec.Containers[0].Image != "myregistry.com/mysql/mysql@sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4" || - pod.Spec.Containers[1].Image != "myregistry.com/mysql/mysql@sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4" { - t.Errorf("unexpected image: %#v", pod) - } - - // Simulate a later admission plugin modifying the pod spec back to something that requires resolution - pod.Spec.Containers[0].Image = "myregistry.com/mysql/mysql:latest" - if err := p.Validate(attrs, nil); err == nil { - t.Fatal("expected validate error on mutation, got none") - } else if !strings.Contains(err.Error(), "changed after admission") { - t.Fatalf("expected mutation-related error, got %v", err) - } -} - -func TestAdmissionResolveImages(t *testing.T) { - image1 := &imagev1.Image{ - ObjectMeta: metav1.ObjectMeta{Name: "sha256:0000000000000000000000000000000000000000000000000000000000000001"}, - DockerImageReference: "integrated.registry/image1/image1@sha256:0000000000000000000000000000000000000000000000000000000000000001", - } - - defaultPolicyConfig := &imagepolicy.ImagePolicyConfig{} - configContent, err := ioutil.ReadAll(bytes.NewBufferString(`{"kind":"ImagePolicyConfig","apiVersion":"image.openshift.io/v1"}`)) - if err != nil { - t.Fatal(err) - } - scheme := runtime.NewScheme() - utilruntime.Must(imagepolicy.Install(scheme)) - codecs := serializer.NewCodecFactory(scheme) - err = runtime.DecodeInto(codecs.UniversalDecoder(imagepolicy.GroupVersion), configContent, defaultPolicyConfig) - if err != nil { - t.Fatal(err) - } - imagepolicy.SetDefaults_ImagePolicyConfig(defaultPolicyConfig) - - testCases := []struct { - name string - client *imagev1fakeclient.Clientset - policy imagepolicy.ImageResolutionType - config *imagepolicy.ImagePolicyConfig - attrs admission.Attributes - admit bool - expect runtime.Object - }{ - { - name: "fails resolution", - policy: imagepolicy.RequiredRewrite, - client: imagev1fakeclient.NewSimpleClientset(), - attrs: admission.NewAttributesRecord( - &kapi.Pod{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "integrated.registry/test/mysql@" + goodSHA}, - }, - InitContainers: []kapi.Container{ - {Image: "myregistry.com/mysql/mysql:latest"}, - }, - }, - }, nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ), - }, - { - name: "resolves images in the integrated registry without altering their ref (avoids looking up the tag)", - policy: imagepolicy.RequiredRewrite, - client: imagev1fakeclient.NewSimpleClientset( - image1, - ), - attrs: admission.NewAttributesRecord( - &kapi.Pod{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "integrated.registry/test/mysql@sha256:0000000000000000000000000000000000000000000000000000000000000001"}, - }, - }, - }, nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ), - admit: true, - expect: &kapi.Pod{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "integrated.registry/test/mysql@sha256:0000000000000000000000000000000000000000000000000000000000000001"}, - }, - }, - }, - }, - { - name: "resolves images in the integrated registry without altering their ref (avoids looking up the tag)", - policy: imagepolicy.RequiredRewrite, - client: imagev1fakeclient.NewSimpleClientset( - image1, - ), - attrs: admission.NewAttributesRecord( - &kapi.Pod{ - Spec: kapi.PodSpec{ - InitContainers: []kapi.Container{ - {Image: "integrated.registry/test/mysql@sha256:0000000000000000000000000000000000000000000000000000000000000001"}, - }, - }, - }, nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod"}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods"}, - "", admission.Create, false, nil, - ), - admit: true, - expect: &kapi.Pod{ - Spec: kapi.PodSpec{ - InitContainers: []kapi.Container{ - {Image: "integrated.registry/test/mysql@sha256:0000000000000000000000000000000000000000000000000000000000000001"}, - }, - }, - }, - }, - { - name: "resolves pods", - policy: imagepolicy.RequiredRewrite, - client: imagev1fakeclient.NewSimpleClientset( - &imagev1.ImageStreamTag{ - ObjectMeta: metav1.ObjectMeta{Name: "test:other", Namespace: "default"}, - LookupPolicy: imagev1.ImageLookupPolicy{Local: true}, - Image: *image1, - }, - ), - attrs: admission.NewAttributesRecord( - &kapi.Pod{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "test:other"}, - }, - }, - }, nil, schema.GroupVersionKind{Version: "v1", Kind: "Pod", Group: ""}, - "default", "pod1", schema.GroupVersionResource{Version: "v1", Resource: "pods", Group: ""}, - "", admission.Create, false, nil, - ), - admit: true, - expect: &kapi.Pod{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "integrated.registry/image1/image1@sha256:0000000000000000000000000000000000000000000000000000000000000001"}, - }, - }, - }, - }, - { - name: "resolves replica sets that have a local name to their image stream tags, uses the image DockerImageReference with SHA set", - policy: imagepolicy.RequiredRewrite, - client: imagev1fakeclient.NewSimpleClientset( - &imagev1.ImageStreamTag{ - ObjectMeta: metav1.ObjectMeta{Name: "test:other", Namespace: "default"}, - LookupPolicy: imagev1.ImageLookupPolicy{Local: true}, - Image: *image1, - }, - ), - attrs: admission.NewAttributesRecord( - &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "test:other"}, - }, - }, - }, - }, - }, nil, schema.GroupVersionKind{Version: "v1", Kind: "ReplicaSet", Group: "extensions"}, - "default", "rs1", schema.GroupVersionResource{Version: "v1", Resource: "replicasets", Group: "extensions"}, - "", admission.Create, false, nil, - ), - admit: true, - expect: &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "integrated.registry/image1/image1@sha256:0000000000000000000000000000000000000000000000000000000000000001"}, - }, - }, - }, - }, - }, - }, - { - name: "does not resolve replica sets by default", - config: defaultPolicyConfig, - client: imagev1fakeclient.NewSimpleClientset( - &imagev1.ImageStreamTag{ - ObjectMeta: metav1.ObjectMeta{Name: "test:other", Namespace: "default"}, - Image: *image1, - }, - ), - attrs: admission.NewAttributesRecord( - &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "integrated.registry/default/test:other"}, - }, - }, - }, - }, - }, nil, schema.GroupVersionKind{Version: "v1", Kind: "ReplicaSet", Group: "extensions"}, - "default", "rs1", schema.GroupVersionResource{Version: "v1", Resource: "replicasets", Group: "extensions"}, - "", admission.Create, false, nil, - ), - admit: true, - expect: &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "integrated.registry/default/test:other"}, - }, - }, - }, - }, - }, - }, - { - name: "resolves replica sets that specifically request lookup", - policy: imagepolicy.RequiredRewrite, - client: imagev1fakeclient.NewSimpleClientset( - &imagev1.ImageStreamTag{ - ObjectMeta: metav1.ObjectMeta{Name: "test:other", Namespace: "default"}, - LookupPolicy: imagev1.ImageLookupPolicy{Local: false}, - Image: *image1, - }, - ), - attrs: admission.NewAttributesRecord( - &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{imagepolicy.ResolveNamesAnnotation: "*"}}, - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "test:other"}, - }, - }, - }, - }, - }, nil, schema.GroupVersionKind{Version: "v1", Kind: "ReplicaSet", Group: "extensions"}, - "default", "rs1", schema.GroupVersionResource{Version: "v1", Resource: "replicasets", Group: "extensions"}, - "", admission.Create, false, nil, - ), - admit: true, - expect: &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{imagepolicy.ResolveNamesAnnotation: "*"}}, - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "integrated.registry/image1/image1@sha256:0000000000000000000000000000000000000000000000000000000000000001"}, - }, - }, - }, - }, - }, - }, - { - name: "if the tag is not found, but the stream is and resolves, resolve to the tag", - policy: imagepolicy.AttemptRewrite, - client: (func() *imagev1fakeclient.Clientset { - fake := &imagev1fakeclient.Clientset{} - fake.AddReactor("get", "imagestreamtags", func(action clientgotesting.Action) (handled bool, ret runtime.Object, err error) { - return true, nil, kerrors.NewNotFound(schema.GroupResource{Group: "image.openshift.io", Resource: "imagestreamtags"}, "test:other") - }) - fake.AddReactor("get", "imagestreams", func(action clientgotesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &imagev1.ImageStream{ - ObjectMeta: metav1.ObjectMeta{Name: "test", Namespace: "default"}, - Spec: imagev1.ImageStreamSpec{ - LookupPolicy: imagev1.ImageLookupPolicy{Local: true}, - }, - Status: imagev1.ImageStreamStatus{ - DockerImageRepository: "integrated.registry:5000/default/test", - }, - }, nil - }) - return fake - })(), - attrs: admission.NewAttributesRecord( - &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "test:other"}, - }, - }, - }, - }, - }, nil, schema.GroupVersionKind{Version: "v1", Kind: "ReplicaSet", Group: "extensions"}, - "default", "rs1", schema.GroupVersionResource{Version: "v1", Resource: "replicasets", Group: "extensions"}, - "", admission.Create, false, nil, - ), - admit: true, - expect: &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "integrated.registry:5000/default/test:other"}, - }, - }, - }, - }, - }, - }, - { - name: "if the tag is not found, but the stream is and doesn't resolve, use the original value", - policy: imagepolicy.AttemptRewrite, - client: (func() *imagev1fakeclient.Clientset { - fake := &imagev1fakeclient.Clientset{} - fake.AddReactor("get", "imagestreamtags", func(action clientgotesting.Action) (handled bool, ret runtime.Object, err error) { - return true, nil, kerrors.NewNotFound(schema.GroupResource{Resource: "imagestreamtags"}, "test:other") - }) - fake.AddReactor("get", "imagestreams", func(action clientgotesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &imagev1.ImageStream{ - ObjectMeta: metav1.ObjectMeta{Name: "test", Namespace: "default"}, - Spec: imagev1.ImageStreamSpec{ - LookupPolicy: imagev1.ImageLookupPolicy{Local: false}, - }, - Status: imagev1.ImageStreamStatus{ - DockerImageRepository: "integrated.registry:5000/default/test", - }, - }, nil - }) - return fake - })(), - attrs: admission.NewAttributesRecord( - &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "test:other"}, - }, - }, - }, - }, - }, nil, schema.GroupVersionKind{Version: "v1", Kind: "ReplicaSet", Group: "extensions"}, - "default", "rs1", schema.GroupVersionResource{Version: "v1", Resource: "replicasets", Group: "extensions"}, - "", admission.Create, false, nil, - ), - admit: true, - expect: &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "test:other"}, - }, - }, - }, - }, - }, - }, - { - name: "if the tag is not found, the stream resolves, but the registry is not installed, don't match", - policy: imagepolicy.AttemptRewrite, - client: (func() *imagev1fakeclient.Clientset { - fake := &imagev1fakeclient.Clientset{} - fake.AddReactor("get", "imagestreamtags", func(action clientgotesting.Action) (handled bool, ret runtime.Object, err error) { - return true, nil, kerrors.NewNotFound(schema.GroupResource{Resource: "imagestreamtags"}, "test:other") - }) - fake.AddReactor("get", "imagestreams", func(action clientgotesting.Action) (handled bool, ret runtime.Object, err error) { - return true, &imagev1.ImageStream{ - ObjectMeta: metav1.ObjectMeta{Name: "test", Namespace: "default"}, - Spec: imagev1.ImageStreamSpec{ - LookupPolicy: imagev1.ImageLookupPolicy{Local: true}, - }, - Status: imagev1.ImageStreamStatus{ - DockerImageRepository: "", - }, - }, nil - }) - return fake - })(), - attrs: admission.NewAttributesRecord( - &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "test:other"}, - }, - }, - }, - }, - }, nil, schema.GroupVersionKind{Version: "v1", Kind: "ReplicaSet", Group: "extensions"}, - "default", "rs1", schema.GroupVersionResource{Version: "v1", Resource: "replicasets", Group: "extensions"}, - "", admission.Create, false, nil, - ), - admit: true, - expect: &apps.ReplicaSet{ - Spec: apps.ReplicaSetSpec{ - Template: kapi.PodTemplateSpec{ - Spec: kapi.PodSpec{ - Containers: []kapi.Container{ - {Image: "test:other"}, - }, - }, - }, - }, - }, - }, - } - for i, test := range testCases { - t.Run(test.name, func(t *testing.T) { - onResources := []metav1.GroupResource{{Group: "build.openshift.io", Resource: "builds"}, {Resource: "pods"}} - config := test.config - if config == nil { - // old style config - config = &imagepolicy.ImagePolicyConfig{ - ResolveImages: test.policy, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {LocalNames: true, TargetResource: metav1.GroupResource{Resource: "*"}, Policy: test.policy}, - {LocalNames: true, TargetResource: metav1.GroupResource{Group: "extensions", Resource: "*"}, Policy: test.policy}, - }, - ExecutionRules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: onResources}}, - }, - } - } - p, err := NewImagePolicyPlugin(config) - if err != nil { - t.Fatal(err) - } - - setDefaultCache(p) - p.Client = test.client - p.SetInternalImageRegistry("integrated.registry") - p.SetImageMutators(imagereferencemutators.KubeImageMutators{}) - if err := p.ValidateInitialization(); err != nil { - t.Fatal(err) - } - - if err := p.Admit(test.attrs, nil); err != nil { - if test.admit { - t.Errorf("%d: should admit: %v", i, err) - } - return - } - if !test.admit { - t.Errorf("%d: should not admit", i) - return - } - if !reflect.DeepEqual(test.expect, test.attrs.GetObject()) { - t.Errorf("%d: unequal: %s", i, diff.ObjectReflectDiff(test.expect, test.attrs.GetObject())) - } - - if err := p.Validate(test.attrs, nil); err != nil { - t.Errorf("%d: should validate: %v", i, err) - return - } - if !reflect.DeepEqual(test.expect, test.attrs.GetObject()) { - t.Errorf("%d: unequal: %s", i, diff.ObjectReflectDiff(test.expect, test.attrs.GetObject())) - } - }) - } -} - -func TestResolutionConfig(t *testing.T) { - testCases := []struct { - config *imagepolicy.ImagePolicyConfig - resource metav1.GroupResource - attrs rules.ImagePolicyAttributes - update bool - - resolve bool - fail bool - rewrite bool - }{ - { - config: &imagepolicy.ImagePolicyConfig{ResolveImages: imagepolicy.AttemptRewrite}, - resolve: true, - rewrite: true, - }, - // requires local rewrite for local names - { - config: &imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {LocalNames: true, TargetResource: metav1.GroupResource{Resource: "*"}}, - }, - }, - resolve: true, - rewrite: false, - }, - // wildcard resource matches - { - attrs: rules.ImagePolicyAttributes{LocalRewrite: true}, - config: &imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {LocalNames: true, TargetResource: metav1.GroupResource{Resource: "*"}}, - }, - }, - resolve: true, - rewrite: true, - }, - // group mismatch fails - { - attrs: rules.ImagePolicyAttributes{LocalRewrite: true}, - config: &imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {LocalNames: true, TargetResource: metav1.GroupResource{Group: "test", Resource: "*"}}, - }, - }, - resource: metav1.GroupResource{Group: "other"}, - resolve: false, - rewrite: false, - }, - // resource mismatch fails - { - attrs: rules.ImagePolicyAttributes{LocalRewrite: true}, - config: &imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {LocalNames: true, TargetResource: metav1.GroupResource{Group: "test", Resource: "self"}}, - }, - }, - resource: metav1.GroupResource{Group: "test", Resource: "other"}, - resolve: false, - rewrite: false, - }, - // resource match succeeds - { - attrs: rules.ImagePolicyAttributes{LocalRewrite: true}, - config: &imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {LocalNames: true, TargetResource: metav1.GroupResource{Group: "test", Resource: "self"}}, - }, - }, - resource: metav1.GroupResource{Group: "test", Resource: "self"}, - resolve: true, - rewrite: true, - }, - // resource match skips on job update - { - attrs: rules.ImagePolicyAttributes{LocalRewrite: true}, - config: &imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {LocalNames: true, TargetResource: metav1.GroupResource{Group: "batch", Resource: "jobs"}}, - }, - }, - resource: metav1.GroupResource{Group: "batch", Resource: "jobs"}, - update: true, - resolve: true, - rewrite: false, - }, - // resource match succeeds on job create - { - attrs: rules.ImagePolicyAttributes{LocalRewrite: true}, - config: &imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {LocalNames: true, TargetResource: metav1.GroupResource{Group: "batch", Resource: "jobs"}}, - }, - }, - resource: metav1.GroupResource{Group: "batch", Resource: "jobs"}, - update: false, - resolve: true, - rewrite: true, - }, - // resource match skips on build update - { - attrs: rules.ImagePolicyAttributes{LocalRewrite: true}, - config: &imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {LocalNames: true, TargetResource: metav1.GroupResource{Group: "build.openshift.io", Resource: "builds"}}, - }, - }, - resource: metav1.GroupResource{Group: "build.openshift.io", Resource: "builds"}, - update: true, - resolve: true, - rewrite: false, - }, - // resource match skips on statefulset update - // TODO: remove in 3.7 - { - attrs: rules.ImagePolicyAttributes{LocalRewrite: true}, - config: &imagepolicy.ImagePolicyConfig{ - ResolveImages: imagepolicy.DoNotAttempt, - ResolutionRules: []imagepolicy.ImageResolutionPolicyRule{ - {LocalNames: true, TargetResource: metav1.GroupResource{Group: "apps", Resource: "statefulsets"}}, - }, - }, - resource: metav1.GroupResource{Group: "apps", Resource: "statefulsets"}, - update: true, - resolve: true, - rewrite: false, - }, - } - - for i, test := range testCases { - c := resolutionConfig{test.config} - if c.RequestsResolution(test.resource) != test.resolve { - t.Errorf("%d: request resolution != %t", i, test.resolve) - } - if c.FailOnResolutionFailure(test.resource) != test.fail { - t.Errorf("%d: resolution failure != %t", i, test.fail) - } - if c.RewriteImagePullSpec(&test.attrs, test.update, test.resource) != test.rewrite { - t.Errorf("%d: rewrite != %t", i, test.rewrite) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/interfaces.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/interfaces.go deleted file mode 100644 index 47f6f9cfb..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/interfaces.go +++ /dev/null @@ -1,49 +0,0 @@ -package imagereferencemutators - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/validation/field" - kapi "k8s.io/kubernetes/pkg/apis/core" -) - -type ImageMutators interface { - GetImageReferenceMutator(obj, old runtime.Object) (ImageReferenceMutator, error) - GetAnnotationAccessor(obj runtime.Object) (AnnotationAccessor, bool) -} - -// ImageReferenceMutateFunc is passed a reference representing an image, and may alter -// the Name, Kind, and Namespace fields of the reference. If an error is returned the -// object may still be mutated under the covers. -type ImageReferenceMutateFunc func(ref *kapi.ObjectReference) error - -type ImageReferenceMutator interface { - // Mutate invokes fn on every image reference in the object. If fn returns an error, - // a field.Error is added to the list to be returned. Mutate does not terminate early - // if errors are detected. - Mutate(fn ImageReferenceMutateFunc) field.ErrorList -} - -type AnnotationAccessor interface { - // Annotations returns a map representing annotations. Not mutable. - Annotations() map[string]string - // SetAnnotations sets representing annotations onto the object. - SetAnnotations(map[string]string) - // TemplateAnnotations returns a map representing annotations on a nested template in the object. Not mutable. - // If no template is present bool will be false. - TemplateAnnotations() (map[string]string, bool) - // SetTemplateAnnotations sets annotations on a nested template in the object. - // If no template is present bool will be false. - SetTemplateAnnotations(map[string]string) bool -} - -type ContainerMutator interface { - GetName() string - GetImage() string - SetImage(image string) -} - -type PodSpecReferenceMutator interface { - GetContainerByIndex(init bool, i int) (ContainerMutator, bool) - GetContainerByName(name string) (ContainerMutator, bool) - GetPath() *field.Path -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/meta.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/meta.go deleted file mode 100644 index f8077e118..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/meta.go +++ /dev/null @@ -1,81 +0,0 @@ -package imagereferencemutators - -import ( - "fmt" - - kapiv1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - kapi "k8s.io/kubernetes/pkg/apis/core" -) - -type KubeImageMutators struct{} - -var errNoImageMutator = fmt.Errorf("No list of images available for this object") - -// GetImageReferenceMutator returns a mutator for the provided object, or an error if no -// such mutator is defined. Only references that are different between obj and old will -// be returned unless old is nil. -func (KubeImageMutators) GetImageReferenceMutator(obj, old runtime.Object) (ImageReferenceMutator, error) { - if spec, path, err := GetPodSpec(obj); err == nil { - var oldSpec *kapi.PodSpec - if old != nil { - oldSpec, _, err = GetPodSpec(old) - if err != nil { - return nil, fmt.Errorf("old and new pod spec objects were not of the same type %T != %T: %v", obj, old, err) - } - } - return NewPodSpecMutator(spec, oldSpec, path), nil - } - if spec, path, err := GetPodSpecV1(obj); err == nil { - var oldSpec *kapiv1.PodSpec - if old != nil { - oldSpec, _, err = GetPodSpecV1(old) - if err != nil { - return nil, fmt.Errorf("old and new pod spec objects were not of the same type %T != %T: %v", obj, old, err) - } - } - return NewPodSpecV1Mutator(spec, oldSpec, path), nil - } - return nil, errNoImageMutator -} - -type annotationsAccessor struct { - object metav1.Object - template metav1.Object -} - -func (a annotationsAccessor) Annotations() map[string]string { - return a.object.GetAnnotations() -} - -func (a annotationsAccessor) TemplateAnnotations() (map[string]string, bool) { - if a.template == nil { - return nil, false - } - return a.template.GetAnnotations(), true -} - -func (a annotationsAccessor) SetAnnotations(annotations map[string]string) { - a.object.SetAnnotations(annotations) -} - -func (a annotationsAccessor) SetTemplateAnnotations(annotations map[string]string) bool { - if a.template == nil { - return false - } - a.template.SetAnnotations(annotations) - return true -} - -// GetAnnotationAccessor returns an accessor for the provided object or false if the object -// does not support accessing annotations. -func (KubeImageMutators) GetAnnotationAccessor(obj runtime.Object) (AnnotationAccessor, bool) { - switch t := obj.(type) { - case metav1.Object: - templateObject, _ := GetTemplateMetaObject(obj) - return annotationsAccessor{object: t, template: templateObject}, true - default: - return nil, false - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/pods.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/pods.go deleted file mode 100644 index 3ae5d12a3..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/pods.go +++ /dev/null @@ -1,394 +0,0 @@ -package imagereferencemutators - -import ( - "fmt" - - appsv1beta1 "k8s.io/api/apps/v1beta1" - batchv1 "k8s.io/api/batch/v1" - batchv2alpha1 "k8s.io/api/batch/v2alpha1" - kapiv1 "k8s.io/api/core/v1" - extensionsv1beta1 "k8s.io/api/extensions/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/kubernetes/pkg/apis/apps" - "k8s.io/kubernetes/pkg/apis/batch" - kapi "k8s.io/kubernetes/pkg/apis/core" -) - -// GetPodSpecReferenceMutator returns a mutator for the provided object, or an error if no -// such mutator is defined. -func GetPodSpecReferenceMutator(obj runtime.Object) (PodSpecReferenceMutator, error) { - if spec, path, err := GetPodSpec(obj); err == nil { - return NewPodSpecMutator(spec, nil, path), nil - } - if spec, path, err := GetPodSpecV1(obj); err == nil { - return NewPodSpecV1Mutator(spec, nil, path), nil - } - return nil, errNoImageMutator -} - -var errNoPodSpec = fmt.Errorf("No PodSpec available for this object") - -// GetPodSpec returns a mutable pod spec out of the provided object, including a field path -// to the field in the object, or an error if the object does not contain a pod spec. -// This only returns internal objects. -func GetPodSpec(obj runtime.Object) (*kapi.PodSpec, *field.Path, error) { - switch r := obj.(type) { - case *kapi.Pod: - return &r.Spec, field.NewPath("spec"), nil - case *kapi.PodTemplate: - return &r.Template.Spec, field.NewPath("template", "spec"), nil - case *kapi.ReplicationController: - if r.Spec.Template != nil { - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - } - case *apps.DaemonSet: - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - case *apps.Deployment: - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - case *apps.ReplicaSet: - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - case *batch.Job: - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - case *batch.CronJob: - return &r.Spec.JobTemplate.Spec.Template.Spec, field.NewPath("spec", "jobTemplate", "spec", "template", "spec"), nil - case *batch.JobTemplate: - return &r.Template.Spec.Template.Spec, field.NewPath("template", "spec", "template", "spec"), nil - case *apps.StatefulSet: - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - } - return nil, nil, errNoPodSpec -} - -// GetPodSpecV1 returns a mutable pod spec out of the provided object, including a field path -// to the field in the object, or an error if the object does not contain a pod spec. -// This only returns pod specs for v1 compatible objects. -func GetPodSpecV1(obj runtime.Object) (*kapiv1.PodSpec, *field.Path, error) { - switch r := obj.(type) { - case *kapiv1.Pod: - return &r.Spec, field.NewPath("spec"), nil - case *kapiv1.PodTemplate: - return &r.Template.Spec, field.NewPath("template", "spec"), nil - case *kapiv1.ReplicationController: - if r.Spec.Template != nil { - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - } - case *extensionsv1beta1.DaemonSet: - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - case *extensionsv1beta1.Deployment: - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - case *extensionsv1beta1.ReplicaSet: - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - case *batchv1.Job: - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - case *batchv2alpha1.CronJob: - return &r.Spec.JobTemplate.Spec.Template.Spec, field.NewPath("spec", "jobTemplate", "spec", "template", "spec"), nil - case *batchv2alpha1.JobTemplate: - return &r.Template.Spec.Template.Spec, field.NewPath("template", "spec", "template", "spec"), nil - case *appsv1beta1.StatefulSet: - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - case *appsv1beta1.Deployment: - return &r.Spec.Template.Spec, field.NewPath("spec", "template", "spec"), nil - } - return nil, nil, errNoPodSpec -} - -// GetTemplateMetaObject returns a mutable metav1.Object interface for the template -// the object contains, or false if no such object is available. -func GetTemplateMetaObject(obj runtime.Object) (metav1.Object, bool) { - switch r := obj.(type) { - case *kapiv1.PodTemplate: - return &r.Template.ObjectMeta, true - case *kapiv1.ReplicationController: - if r.Spec.Template != nil { - return &r.Spec.Template.ObjectMeta, true - } - case *extensionsv1beta1.DaemonSet: - return &r.Spec.Template.ObjectMeta, true - case *extensionsv1beta1.Deployment: - return &r.Spec.Template.ObjectMeta, true - case *extensionsv1beta1.ReplicaSet: - return &r.Spec.Template.ObjectMeta, true - case *batchv1.Job: - return &r.Spec.Template.ObjectMeta, true - case *batchv2alpha1.CronJob: - return &r.Spec.JobTemplate.Spec.Template.ObjectMeta, true - case *batchv2alpha1.JobTemplate: - return &r.Template.Spec.Template.ObjectMeta, true - case *appsv1beta1.StatefulSet: - return &r.Spec.Template.ObjectMeta, true - case *appsv1beta1.Deployment: - return &r.Spec.Template.ObjectMeta, true - - case *kapi.PodTemplate: - return &r.Template.ObjectMeta, true - case *kapi.ReplicationController: - if r.Spec.Template != nil { - return &r.Spec.Template.ObjectMeta, true - } - case *apps.DaemonSet: - return &r.Spec.Template.ObjectMeta, true - case *apps.Deployment: - return &r.Spec.Template.ObjectMeta, true - case *apps.ReplicaSet: - return &r.Spec.Template.ObjectMeta, true - case *batch.Job: - return &r.Spec.Template.ObjectMeta, true - case *batch.CronJob: - return &r.Spec.JobTemplate.Spec.Template.ObjectMeta, true - case *batch.JobTemplate: - return &r.Template.Spec.Template.ObjectMeta, true - case *apps.StatefulSet: - return &r.Spec.Template.ObjectMeta, true - } - return nil, false -} - -type containerMutator struct { - *kapi.Container -} - -func (m containerMutator) GetName() string { return m.Name } -func (m containerMutator) GetImage() string { return m.Image } -func (m containerMutator) SetImage(image string) { m.Image = image } - -type containerV1Mutator struct { - *kapiv1.Container -} - -func (m containerV1Mutator) GetName() string { return m.Name } -func (m containerV1Mutator) GetImage() string { return m.Image } -func (m containerV1Mutator) SetImage(image string) { m.Image = image } - -// podSpecMutator implements the mutation interface over objects with a pod spec. -type podSpecMutator struct { - spec *kapi.PodSpec - oldSpec *kapi.PodSpec - path *field.Path -} - -func NewPodSpecMutator(spec *kapi.PodSpec, oldSpec *kapi.PodSpec, path *field.Path) *podSpecMutator { - return &podSpecMutator{ - spec: spec, - oldSpec: oldSpec, - path: path, - } -} - -func (m *podSpecMutator) GetPath() *field.Path { - return m.path -} - -func hasIdenticalPodSpecImage(spec *kapi.PodSpec, containerName, image string) bool { - if spec == nil { - return false - } - for i := range spec.InitContainers { - if spec.InitContainers[i].Name == containerName { - return spec.InitContainers[i].Image == image - } - } - for i := range spec.Containers { - if spec.Containers[i].Name == containerName { - return spec.Containers[i].Image == image - } - } - return false -} - -// Mutate applies fn to all containers and init containers. If fn changes the Kind to -// any value other than "DockerImage", an error is set on that field. -func (m *podSpecMutator) Mutate(fn ImageReferenceMutateFunc) field.ErrorList { - var errs field.ErrorList - for i := range m.spec.InitContainers { - container := &m.spec.InitContainers[i] - if hasIdenticalPodSpecImage(m.oldSpec, container.Name, container.Image) { - continue - } - ref := kapi.ObjectReference{Kind: "DockerImage", Name: container.Image} - if err := fn(&ref); err != nil { - errs = append(errs, FieldErrorOrInternal(err, m.path.Child("initContainers").Index(i).Child("image"))) - continue - } - if ref.Kind != "DockerImage" { - errs = append(errs, FieldErrorOrInternal(fmt.Errorf("pod specs may only contain references to docker images, not %q", ref.Kind), m.path.Child("initContainers").Index(i).Child("image"))) - continue - } - container.Image = ref.Name - } - for i := range m.spec.Containers { - container := &m.spec.Containers[i] - if hasIdenticalPodSpecImage(m.oldSpec, container.Name, container.Image) { - continue - } - ref := kapi.ObjectReference{Kind: "DockerImage", Name: container.Image} - if err := fn(&ref); err != nil { - errs = append(errs, FieldErrorOrInternal(err, m.path.Child("containers").Index(i).Child("image"))) - continue - } - if ref.Kind != "DockerImage" { - errs = append(errs, FieldErrorOrInternal(fmt.Errorf("pod specs may only contain references to docker images, not %q", ref.Kind), m.path.Child("containers").Index(i).Child("image"))) - continue - } - container.Image = ref.Name - } - return errs -} - -func (m *podSpecMutator) GetContainerByName(name string) (ContainerMutator, bool) { - spec := m.spec - for i := range spec.InitContainers { - if name != spec.InitContainers[i].Name { - continue - } - return containerMutator{&spec.InitContainers[i]}, true - } - for i := range spec.Containers { - if name != spec.Containers[i].Name { - continue - } - return containerMutator{&spec.Containers[i]}, true - } - return nil, false -} - -func (m *podSpecMutator) GetContainerByIndex(init bool, i int) (ContainerMutator, bool) { - var container *kapi.Container - spec := m.spec - if init { - if i < 0 || i >= len(spec.InitContainers) { - return nil, false - } - container = &spec.InitContainers[i] - } else { - if i < 0 || i >= len(spec.Containers) { - return nil, false - } - container = &spec.Containers[i] - } - return containerMutator{container}, true -} - -func NewPodSpecV1Mutator(spec *kapiv1.PodSpec, oldSpec *kapiv1.PodSpec, path *field.Path) *podSpecV1Mutator { - return &podSpecV1Mutator{ - spec: spec, - oldSpec: oldSpec, - path: path, - } -} - -// podSpecV1Mutator implements the mutation interface over objects with a pod spec. -type podSpecV1Mutator struct { - spec *kapiv1.PodSpec - oldSpec *kapiv1.PodSpec - path *field.Path -} - -func (m *podSpecV1Mutator) GetPath() *field.Path { - return m.path -} - -func hasIdenticalPodSpecV1Image(spec *kapiv1.PodSpec, containerName, image string) bool { - if spec == nil { - return false - } - for i := range spec.InitContainers { - if spec.InitContainers[i].Name == containerName { - return spec.InitContainers[i].Image == image - } - } - for i := range spec.Containers { - if spec.Containers[i].Name == containerName { - return spec.Containers[i].Image == image - } - } - return false -} - -// Mutate applies fn to all containers and init containers. If fn changes the Kind to -// any value other than "DockerImage", an error is set on that field. -func (m *podSpecV1Mutator) Mutate(fn ImageReferenceMutateFunc) field.ErrorList { - var errs field.ErrorList - for i := range m.spec.InitContainers { - container := &m.spec.InitContainers[i] - if hasIdenticalPodSpecV1Image(m.oldSpec, container.Name, container.Image) { - continue - } - ref := kapi.ObjectReference{Kind: "DockerImage", Name: container.Image} - if err := fn(&ref); err != nil { - errs = append(errs, FieldErrorOrInternal(err, m.path.Child("initContainers").Index(i).Child("image"))) - continue - } - if ref.Kind != "DockerImage" { - errs = append(errs, FieldErrorOrInternal(fmt.Errorf("pod specs may only contain references to docker images, not %q", ref.Kind), m.path.Child("initContainers").Index(i).Child("image"))) - continue - } - container.Image = ref.Name - } - for i := range m.spec.Containers { - container := &m.spec.Containers[i] - if hasIdenticalPodSpecV1Image(m.oldSpec, container.Name, container.Image) { - continue - } - ref := kapi.ObjectReference{Kind: "DockerImage", Name: container.Image} - if err := fn(&ref); err != nil { - errs = append(errs, FieldErrorOrInternal(err, m.path.Child("containers").Index(i).Child("image"))) - continue - } - if ref.Kind != "DockerImage" { - errs = append(errs, FieldErrorOrInternal(fmt.Errorf("pod specs may only contain references to docker images, not %q", ref.Kind), m.path.Child("containers").Index(i).Child("image"))) - continue - } - container.Image = ref.Name - } - return errs -} - -func (m *podSpecV1Mutator) GetContainerByName(name string) (ContainerMutator, bool) { - spec := m.spec - for i := range spec.InitContainers { - if name != spec.InitContainers[i].Name { - continue - } - return containerV1Mutator{&spec.InitContainers[i]}, true - } - for i := range spec.Containers { - if name != spec.Containers[i].Name { - continue - } - return containerV1Mutator{&spec.Containers[i]}, true - } - return nil, false -} - -func (m *podSpecV1Mutator) GetContainerByIndex(init bool, i int) (ContainerMutator, bool) { - var container *kapiv1.Container - spec := m.spec - if init { - if i < 0 || i >= len(spec.InitContainers) { - return nil, false - } - container = &spec.InitContainers[i] - } else { - if i < 0 || i >= len(spec.Containers) { - return nil, false - } - container = &spec.Containers[i] - } - return containerV1Mutator{container}, true -} - -func FieldErrorOrInternal(err error, path *field.Path) *field.Error { - if ferr, ok := err.(*field.Error); ok { - if len(ferr.Field) == 0 { - ferr.Field = path.String() - } - return ferr - } - if errors.IsNotFound(err) { - return field.NotFound(path, err) - } - return field.InternalError(path, err) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/pods_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/pods_test.go deleted file mode 100644 index 29106d9a2..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators/pods_test.go +++ /dev/null @@ -1,305 +0,0 @@ -package imagereferencemutators - -import ( - "reflect" - "testing" - - kapiv1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/util/validation/field" - kapi "k8s.io/kubernetes/pkg/apis/core" -) - -func imageRef(name string) *kapi.ObjectReference { - ref := imageRefValue(name) - return &ref -} -func imageRefValue(name string) kapi.ObjectReference { - return kapi.ObjectReference{Kind: "DockerImage", Name: name} -} - -func Test_podSpecMutator_Mutate(t *testing.T) { - imageRef := func(name string) *kapi.ObjectReference { - ref := imageRefValue(name) - return &ref - } - - type fields struct { - spec *kapi.PodSpec - oldSpec *kapi.PodSpec - path *field.Path - } - type args struct { - fn ImageReferenceMutateFunc - } - tests := []struct { - name string - fields fields - args args - want field.ErrorList - wantSpec *kapi.PodSpec - }{ - { - name: "no-op", - fields: fields{spec: &kapi.PodSpec{}}, - }, - { - name: "passes init container reference", - fields: fields{spec: &kapi.PodSpec{ - InitContainers: []kapi.Container{ - {Name: "1", Image: "test"}, - }, - }}, - args: args{fn: func(ref *kapi.ObjectReference) error { - if !reflect.DeepEqual(ref, imageRef("test")) { - t.Errorf("unexpected ref: %#v", ref) - } - return nil - }}, - wantSpec: &kapi.PodSpec{ - InitContainers: []kapi.Container{ - {Name: "1", Image: "test"}, - }, - }, - }, - { - name: "passes container reference", - fields: fields{spec: &kapi.PodSpec{ - Containers: []kapi.Container{ - {Name: "1", Image: "test"}, - }, - }}, - args: args{fn: func(ref *kapi.ObjectReference) error { - if !reflect.DeepEqual(ref, imageRef("test")) { - t.Errorf("unexpected ref: %#v", ref) - } - return nil - }}, - wantSpec: &kapi.PodSpec{ - Containers: []kapi.Container{ - {Name: "1", Image: "test"}, - }, - }, - }, - - { - name: "mutates reference", - fields: fields{spec: &kapi.PodSpec{ - InitContainers: []kapi.Container{ - {Name: "1", Image: "test"}, - }, - Containers: []kapi.Container{ - {Name: "2", Image: "test-2"}, - }, - }}, - args: args{fn: func(ref *kapi.ObjectReference) error { - if ref.Name == "test-2" { - ref.Name = "test-3" - } - return nil - }}, - wantSpec: &kapi.PodSpec{ - InitContainers: []kapi.Container{ - {Name: "1", Image: "test"}, - }, - Containers: []kapi.Container{ - {Name: "2", Image: "test-3"}, - }, - }, - }, - { - name: "mutates only changed references", - fields: fields{ - spec: &kapi.PodSpec{ - InitContainers: []kapi.Container{ - {Name: "1", Image: "test"}, - }, - Containers: []kapi.Container{ - {Name: "2", Image: "test-2"}, - }, - }, - oldSpec: &kapi.PodSpec{ - InitContainers: []kapi.Container{ - {Name: "1", Image: "test-1"}, - }, - Containers: []kapi.Container{ - {Name: "2", Image: "test-2"}, - }, - }, - }, - args: args{fn: func(ref *kapi.ObjectReference) error { - if ref.Name != "test" { - t.Errorf("did not expect to be called for existing reference") - } - ref.Name = "test-3" - return nil - }}, - wantSpec: &kapi.PodSpec{ - InitContainers: []kapi.Container{ - {Name: "1", Image: "test-3"}, - }, - Containers: []kapi.Container{ - {Name: "2", Image: "test-2"}, - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - m := &podSpecMutator{ - spec: tt.fields.spec, - oldSpec: tt.fields.oldSpec, - path: tt.fields.path, - } - if tt.wantSpec == nil { - tt.wantSpec = &kapi.PodSpec{} - } - if got := m.Mutate(tt.args.fn); !reflect.DeepEqual(got, tt.want) { - t.Errorf("buildSpecMutator.Mutate() = %v, want %v", got, tt.want) - } - if !reflect.DeepEqual(tt.wantSpec, tt.fields.spec) { - t.Errorf("buildSpecMutator.Mutate() spec = %v, want %v", tt.fields.spec, tt.wantSpec) - } - }) - } -} - -func Test_podSpecV1Mutator_Mutate(t *testing.T) { - type fields struct { - spec *kapiv1.PodSpec - oldSpec *kapiv1.PodSpec - path *field.Path - } - type args struct { - fn ImageReferenceMutateFunc - } - tests := []struct { - name string - fields fields - args args - want field.ErrorList - wantSpec *kapiv1.PodSpec - }{ - { - name: "no-op", - fields: fields{spec: &kapiv1.PodSpec{}}, - }, - { - name: "passes init container reference", - fields: fields{spec: &kapiv1.PodSpec{ - InitContainers: []kapiv1.Container{ - {Name: "1", Image: "test"}, - }, - }}, - args: args{fn: func(ref *kapi.ObjectReference) error { - if !reflect.DeepEqual(ref, imageRef("test")) { - t.Errorf("unexpected ref: %#v", ref) - } - return nil - }}, - wantSpec: &kapiv1.PodSpec{ - InitContainers: []kapiv1.Container{ - {Name: "1", Image: "test"}, - }, - }, - }, - { - name: "passes container reference", - fields: fields{spec: &kapiv1.PodSpec{ - Containers: []kapiv1.Container{ - {Name: "1", Image: "test"}, - }, - }}, - args: args{fn: func(ref *kapi.ObjectReference) error { - if !reflect.DeepEqual(ref, imageRef("test")) { - t.Errorf("unexpected ref: %#v", ref) - } - return nil - }}, - wantSpec: &kapiv1.PodSpec{ - Containers: []kapiv1.Container{ - {Name: "1", Image: "test"}, - }, - }, - }, - - { - name: "mutates reference", - fields: fields{spec: &kapiv1.PodSpec{ - InitContainers: []kapiv1.Container{ - {Name: "1", Image: "test"}, - }, - Containers: []kapiv1.Container{ - {Name: "2", Image: "test-2"}, - }, - }}, - args: args{fn: func(ref *kapi.ObjectReference) error { - if ref.Name == "test-2" { - ref.Name = "test-3" - } - return nil - }}, - wantSpec: &kapiv1.PodSpec{ - InitContainers: []kapiv1.Container{ - {Name: "1", Image: "test"}, - }, - Containers: []kapiv1.Container{ - {Name: "2", Image: "test-3"}, - }, - }, - }, - { - name: "mutates only changed references", - fields: fields{ - spec: &kapiv1.PodSpec{ - InitContainers: []kapiv1.Container{ - {Name: "1", Image: "test"}, - }, - Containers: []kapiv1.Container{ - {Name: "2", Image: "test-2"}, - }, - }, - oldSpec: &kapiv1.PodSpec{ - InitContainers: []kapiv1.Container{ - {Name: "1", Image: "test-1"}, - }, - Containers: []kapiv1.Container{ - {Name: "2", Image: "test-2"}, - }, - }, - }, - args: args{fn: func(ref *kapi.ObjectReference) error { - if ref.Name != "test" { - t.Errorf("did not expect to be called for existing reference") - } - ref.Name = "test-3" - return nil - }}, - wantSpec: &kapiv1.PodSpec{ - InitContainers: []kapiv1.Container{ - {Name: "1", Image: "test-3"}, - }, - Containers: []kapiv1.Container{ - {Name: "2", Image: "test-2"}, - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - m := &podSpecV1Mutator{ - spec: tt.fields.spec, - oldSpec: tt.fields.oldSpec, - path: tt.fields.path, - } - if tt.wantSpec == nil { - tt.wantSpec = &kapiv1.PodSpec{} - } - if got := m.Mutate(tt.args.fn); !reflect.DeepEqual(got, tt.want) { - t.Errorf("buildSpecMutator.Mutate() = %v, want %v", got, tt.want) - } - if !reflect.DeepEqual(tt.wantSpec, tt.fields.spec) { - t.Errorf("buildSpecMutator.Mutate() spec = %v, want %v", tt.fields.spec, tt.wantSpec) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/intializers.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/intializers.go deleted file mode 100644 index 007acf657..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/intializers.go +++ /dev/null @@ -1,40 +0,0 @@ -package imagepolicy - -import ( - "k8s.io/apiserver/pkg/admission" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators" -) - -func NewInitializer(imageMutators imagereferencemutators.ImageMutators, internalImageRegistry string) admission.PluginInitializer { - return &localInitializer{ - imageMutators: imageMutators, - internalImageRegistry: internalImageRegistry, - } -} - -type WantsImageMutators interface { - SetImageMutators(imagereferencemutators.ImageMutators) - admission.InitializationValidator -} - -type WantsInternalImageRegistry interface { - SetInternalImageRegistry(string) - admission.InitializationValidator -} - -type localInitializer struct { - imageMutators imagereferencemutators.ImageMutators - internalImageRegistry string -} - -// Initialize will check the initialization interfaces implemented by each plugin -// and provide the appropriate initialization data -func (i *localInitializer) Initialize(plugin admission.Interface) { - if wants, ok := plugin.(WantsImageMutators); ok { - wants.SetImageMutators(i.imageMutators) - } - if wants, ok := plugin.(WantsInternalImageRegistry); ok { - wants.SetInternalImageRegistry(i.internalImageRegistry) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules/accept.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules/accept.go deleted file mode 100644 index 2cd3b50fc..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules/accept.go +++ /dev/null @@ -1,119 +0,0 @@ -package rules - -import ( - "k8s.io/klog" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - imagepolicy "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1" -) - -type Accepter interface { - Covers(metav1.GroupResource) bool - - Accepts(*ImagePolicyAttributes) bool -} - -// mappedAccepter implements the Accepter interface for a map of group resources and accepters -type mappedAccepter map[metav1.GroupResource]Accepter - -func (a mappedAccepter) Covers(gr metav1.GroupResource) bool { - _, ok := a[gr] - return ok -} - -// Accepts returns true if no Accepter is registered for the group resource in attributes, -// or if the registered Accepter also returns true. -func (a mappedAccepter) Accepts(attr *ImagePolicyAttributes) bool { - accepter, ok := a[attr.Resource] - if !ok { - return true - } - return accepter.Accepts(attr) -} - -type executionAccepter struct { - rules []imagepolicy.ImageExecutionPolicyRule - covers metav1.GroupResource - defaultReject bool - - integratedRegistryMatcher RegistryMatcher -} - -// NewExecutionRuleseAccepter creates an Accepter from the provided rules. -func NewExecutionRulesAccepter(rules []imagepolicy.ImageExecutionPolicyRule, integratedRegistryMatcher RegistryMatcher) (Accepter, error) { - mapped := make(mappedAccepter) - - for _, rule := range rules { - over, selectors, err := imageConditionInfo(&rule.ImageCondition) - if err != nil { - return nil, err - } - rule.ImageCondition.MatchImageLabelSelectors = selectors - for gr := range over { - a, ok := mapped[gr] - if !ok { - a = &executionAccepter{ - covers: gr, - integratedRegistryMatcher: integratedRegistryMatcher, - } - mapped[gr] = a - } - byResource := a.(*executionAccepter) - byResource.rules = append(byResource.rules, rule) - } - } - - for _, a := range mapped { - byResource := a.(*executionAccepter) - if len(byResource.rules) > 0 { - // if all rules are reject, the default behavior is allow - allReject := true - for _, rule := range byResource.rules { - if !rule.Reject { - allReject = false - break - } - } - byResource.defaultReject = !allReject - } - } - - return mapped, nil -} - -func (r *executionAccepter) Covers(gr metav1.GroupResource) bool { - return r.covers == gr -} - -func (r *executionAccepter) Accepts(attrs *ImagePolicyAttributes) bool { - if attrs.Resource != r.covers { - return true - } - - anyMatched := false - for _, rule := range r.rules { - klog.V(5).Infof("image policy checking rule %q", rule.Name) - if attrs.ExcludedRules.Has(rule.Name) && !rule.IgnoreNamespaceOverride { - klog.V(5).Infof("skipping because rule is excluded by namespace annotations\n") - continue - } - - // if we don't have a resolved image and we're supposed to skip the rule if that happens, - // continue here. Otherwise, the reject option is impossible to reason about. - if attrs.Image == nil && rule.SkipOnResolutionFailure { - klog.V(5).Infof("skipping because image is not resolved and skip on failure is true\n") - continue - } - - matches := matchImageCondition(&rule.ImageCondition, r.integratedRegistryMatcher, attrs) - klog.V(5).Infof("Rule %q(reject=%t) applies to image %v: %t", rule.Name, rule.Reject, attrs.Name, matches) - if matches { - if rule.Reject { - return false - } - anyMatched = true - } - } - return anyMatched || !r.defaultReject -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules/accept_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules/accept_test.go deleted file mode 100644 index f19b8fc3c..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules/accept_test.go +++ /dev/null @@ -1,314 +0,0 @@ -package rules - -import ( - "testing" - - "github.com/openshift/api/image/docker10" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/sets" - - imagev1 "github.com/openshift/api/image/v1" - "github.com/openshift/library-go/pkg/image/reference" - imagepolicy "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1" -) - -func imageref(name string) reference.DockerImageReference { - ref, err := reference.Parse(name) - if err != nil { - panic(err) - } - return ref -} - -type acceptResult struct { - attr ImagePolicyAttributes - result bool -} - -func TestAccept(t *testing.T) { - podResource := metav1.GroupResource{Resource: "pods"} - - testCases := map[string]struct { - rules []imagepolicy.ImageExecutionPolicyRule - matcher RegistryMatcher - covers map[metav1.GroupResource]bool - accepts []acceptResult - }{ - "empty": { - matcher: nameSet{}, - covers: map[metav1.GroupResource]bool{ - {}: false, - }, - }, - "accepts when rules are empty": { - rules: []imagepolicy.ImageExecutionPolicyRule{}, - accepts: []acceptResult{ - {ImagePolicyAttributes{}, true}, - {ImagePolicyAttributes{Name: imageref("test:latest")}, true}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("test:latest")}, true}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("myregistry.io:5000/test:latest")}, true}, - }, - }, - "when all rules are deny, match everything else": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {Reject: true, ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchIntegratedRegistry: true}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{}, true}, - {ImagePolicyAttributes{Name: imageref("myregistry.io:5000/test:latest")}, true}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("myregistry.io:5000/test:latest")}, false}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("myregistry.io/namespace/test:latest")}, true}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("test:latest")}, true}, - }, - }, - "deny rule and accept rule": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}}}, - {Reject: true, ImageCondition: imagepolicy.ImageCondition{ - OnResources: []metav1.GroupResource{podResource}, - MatchRegistries: []string{"index.docker.io"}, - }}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{Image: &imagev1.Image{}}, true}, - {ImagePolicyAttributes{Image: &imagev1.Image{}, Name: imageref("myregistry.io:5000/test:latest")}, true}, - {ImagePolicyAttributes{Image: &imagev1.Image{}, Resource: podResource, Name: imageref("myregistry.io:5000/test:latest")}, true}, - {ImagePolicyAttributes{Image: &imagev1.Image{}, Resource: podResource, Name: imageref("index.docker.io/namespace/test:latest")}, false}, - {ImagePolicyAttributes{Image: &imagev1.Image{}, Resource: podResource, Name: imageref("test:latest")}, true}, - }, - }, - "exclude a deny rule": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {Reject: true, ImageCondition: imagepolicy.ImageCondition{Name: "excluded-rule", OnResources: []metav1.GroupResource{podResource}, MatchIntegratedRegistry: true, SkipOnResolutionFailure: true}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{ExcludedRules: sets.NewString("excluded-rule")}, true}, - {ImagePolicyAttributes{ExcludedRules: sets.NewString("excluded-rule"), Name: imageref("myregistry.io:5000/test:latest")}, true}, - {ImagePolicyAttributes{ExcludedRules: sets.NewString("excluded-rule"), Resource: podResource, Name: imageref("myregistry.io:5000/test:latest")}, true}, - {ImagePolicyAttributes{ExcludedRules: sets.NewString("excluded-rule"), Resource: podResource, Name: imageref("myregistry.io/namespace/test:latest")}, true}, - {ImagePolicyAttributes{ExcludedRules: sets.NewString("excluded-rule"), Resource: podResource, Name: imageref("test:latest")}, true}, - }, - }, - "invert a deny rule": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{InvertMatch: true, OnResources: []metav1.GroupResource{podResource}, MatchIntegratedRegistry: true}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{}, true}, - {ImagePolicyAttributes{Name: imageref("myregistry.io:5000/test:latest")}, true}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("myregistry.io:5000/test:latest")}, false}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("myregistry.io/namespace/test:latest")}, true}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("test:latest")}, true}, - }, - }, - "reject an inverted deny rule": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {Reject: true, ImageCondition: imagepolicy.ImageCondition{InvertMatch: true, OnResources: []metav1.GroupResource{podResource}, MatchIntegratedRegistry: true}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{}, true}, - {ImagePolicyAttributes{Name: imageref("myregistry.io:5000/test:latest")}, true}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("myregistry.io:5000/test:latest")}, true}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("myregistry.io/namespace/test:latest")}, false}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("test:latest")}, false}, - }, - }, - "flags image resolution failure on matching resources": { - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, SkipOnResolutionFailure: false}}, - }, - accepts: []acceptResult{ - // allowed because they are on different resources - {ImagePolicyAttributes{}, true}, - {ImagePolicyAttributes{Name: imageref("myregistry.io:5000/test:latest")}, true}, - // succeeds because no image and skip resolution is true - {ImagePolicyAttributes{Resource: podResource, Name: imageref("test:latest")}, true}, - // succeeds because an image specified - {ImagePolicyAttributes{ - Resource: podResource, - Name: imageref("test:latest"), - Image: &imagev1.Image{}, - }, true}, - }, - }, - "accepts matching registries": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchRegistries: []string{"myregistry.io"}}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{Resource: podResource, Name: imageref("myregistry.io:5000/test:latest")}, false}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("myregistry.io/namespace/test:latest")}, true}, - {ImagePolicyAttributes{Resource: podResource, Name: imageref("test:latest")}, false}, - }, - }, - "accepts matching image labels": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchImageLabels: []metav1.LabelSelector{{MatchLabels: map[string]string{"label1": "value1"}}}}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{Resource: podResource}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"label1": "value1"}}}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"label1": "value2"}}}}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"label2": "value1"}}}}, false}, - }, - }, - "accepts matching multiple image label values": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchImageLabels: []metav1.LabelSelector{{MatchLabels: map[string]string{"label1": "value1"}}}}}, - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchImageLabels: []metav1.LabelSelector{{MatchLabels: map[string]string{"label1": "value2"}}}}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{Resource: podResource}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"label1": "value1"}}}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"label1": "value2"}}}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"label2": "value1"}}}}, false}, - }, - }, - "accepts matching image labels by key": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchImageLabels: []metav1.LabelSelector{{MatchExpressions: []metav1.LabelSelectorRequirement{{Key: "label1", Operator: metav1.LabelSelectorOpExists}}}}}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{Resource: podResource}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"label1": "value1"}}}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"label1": "value2"}}}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{"label2": "value1"}}}}, false}, - }, - }, - "accepts matching image annotations": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchImageAnnotations: []imagepolicy.ValueCondition{{Key: "label1", Value: "value1"}}}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{Resource: podResource}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{"label1": "value1"}}}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{"label1": "value2"}}}}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{"label2": "value1"}}}}, false}, - }, - }, - "accepts matching multiple image annotations values": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchImageAnnotations: []imagepolicy.ValueCondition{{Key: "label1", Value: "value1"}}}}, - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchImageAnnotations: []imagepolicy.ValueCondition{{Key: "label1", Value: "value2"}}}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{Resource: podResource}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{"label1": "value1"}}}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{"label1": "value2"}}}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{"label2": "value1"}}}}, false}, - }, - }, - "accepts matching image annotations by key": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchImageAnnotations: []imagepolicy.ValueCondition{{Key: "label1", Set: true}}}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{Resource: podResource}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{"label1": "value1"}}}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{"label1": "value2"}}}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{"label2": "value1"}}}}, false}, - }, - }, - "accepts matching docker image labels": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchDockerImageLabels: []imagepolicy.ValueCondition{{Key: "label1", Value: "value1"}}}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{Resource: podResource}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{DockerImageMetadata: runtime.RawExtension{ - Object: &docker10.DockerImage{Config: &docker10.DockerConfig{Labels: map[string]string{"label1": "value1"}}}, - }}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{DockerImageMetadata: runtime.RawExtension{ - Object: &docker10.DockerImage{Config: &docker10.DockerConfig{Labels: map[string]string{"label1": "value2"}}}, - }}}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{DockerImageMetadata: runtime.RawExtension{ - Object: &docker10.DockerImage{Config: &docker10.DockerConfig{Labels: map[string]string{"label2": "value1"}}}, - }}}, false}, - }, - }, - "accepts matching multiple docker image label values": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchDockerImageLabels: []imagepolicy.ValueCondition{{Key: "label1", Value: "value1"}}}}, - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchDockerImageLabels: []imagepolicy.ValueCondition{{Key: "label1", Value: "value2"}}}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{Resource: podResource}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{DockerImageMetadata: runtime.RawExtension{ - Object: &docker10.DockerImage{Config: &docker10.DockerConfig{Labels: map[string]string{"label1": "value1"}}}, - }}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{DockerImageMetadata: runtime.RawExtension{ - Object: &docker10.DockerImage{Config: &docker10.DockerConfig{Labels: map[string]string{"label1": "value2"}}}, - }}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{DockerImageMetadata: runtime.RawExtension{ - Object: &docker10.DockerImage{Config: &docker10.DockerConfig{Labels: map[string]string{"label2": "value1"}}}, - }}}, false}, - }, - }, - "accepts matching docker image labels by key": { - matcher: NewRegistryMatcher([]string{"myregistry.io:5000"}), - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource}, MatchDockerImageLabels: []imagepolicy.ValueCondition{{Key: "label1", Set: true}}}}, - }, - accepts: []acceptResult{ - {ImagePolicyAttributes{Resource: podResource}, false}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{DockerImageMetadata: runtime.RawExtension{ - Object: &docker10.DockerImage{Config: &docker10.DockerConfig{Labels: map[string]string{"label1": "value1"}}}, - }}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{DockerImageMetadata: runtime.RawExtension{ - Object: &docker10.DockerImage{Config: &docker10.DockerConfig{Labels: map[string]string{"label1": "value2"}}}, - }}}, true}, - {ImagePolicyAttributes{Resource: podResource, Image: &imagev1.Image{DockerImageMetadata: runtime.RawExtension{ - Object: &docker10.DockerImage{Config: &docker10.DockerConfig{Labels: map[string]string{"label2": "value1"}}}, - }}}, false}, - }, - }, - "covers calculations": { - rules: []imagepolicy.ImageExecutionPolicyRule{ - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{podResource, {Resource: "services"}}}}, - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{{Resource: "services", Group: "extra"}}}}, - {ImageCondition: imagepolicy.ImageCondition{OnResources: []metav1.GroupResource{{Resource: "nodes", Group: "extra"}}}}, - }, - matcher: nameSet{}, - covers: map[metav1.GroupResource]bool{ - podResource: true, - {Resource: "services"}: true, - {Group: "extra", Resource: "services"}: true, - {Group: "extra", Resource: "nodes"}: true, - {Resource: "nodes"}: false, - }, - }, - } - for test, testCase := range testCases { - a, err := NewExecutionRulesAccepter(testCase.rules, testCase.matcher) - if err != nil { - t.Fatalf("%s: %v", test, err) - } - for k, v := range testCase.covers { - result := a.Covers(k) - if result != v { - t.Errorf("%s: expected Covers(%v)=%t, got %t", test, k, v, result) - } - } - for _, v := range testCase.accepts { - result := a.Accepts(&v.attr) - if result != v.result { - t.Errorf("%s: expected Accepts(%#v)=%t, got %t", test, v.attr, v.result, result) - } - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules/rules.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules/rules.go deleted file mode 100644 index af0e5592d..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/rules/rules.go +++ /dev/null @@ -1,178 +0,0 @@ -package rules - -import ( - "github.com/openshift/library-go/pkg/image/imageutil" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/klog" - - "github.com/openshift/api/image/docker10" - imagev1 "github.com/openshift/api/image/v1" - "github.com/openshift/library-go/pkg/image/reference" - imagepolicy "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1" -) - -type ImagePolicyAttributes struct { - Resource metav1.GroupResource - Name reference.DockerImageReference - Image *imagev1.Image - ExcludedRules sets.String - IntegratedRegistry bool - LocalRewrite bool -} - -type RegistryMatcher interface { - Matches(name string) bool -} - -type RegistryNameMatcher string - -func (m RegistryNameMatcher) Matches(name string) bool { - if len(m) == 0 { - return false - } - return string(m) == name -} - -type nameSet []string - -func (m nameSet) Matches(name string) bool { - for _, s := range m { - if s == name { - return true - } - } - return false -} - -func NewRegistryMatcher(names []string) RegistryMatcher { - return nameSet(names) -} - -type resourceSet map[metav1.GroupResource]struct{} - -func imageConditionInfo(rule *imagepolicy.ImageCondition) (covers resourceSet, selectors []labels.Selector, err error) { - covers = make(resourceSet) - for _, gr := range rule.OnResources { - covers[gr] = struct{}{} - } - - for i := range rule.MatchImageLabels { - s, err := metav1.LabelSelectorAsSelector(&rule.MatchImageLabels[i]) - if err != nil { - return nil, nil, err - } - selectors = append(selectors, s) - } - - return covers, selectors, nil -} - -func requiresImage(rule *imagepolicy.ImageCondition) bool { - switch { - case len(rule.MatchImageLabels) > 0, - len(rule.MatchImageAnnotations) > 0, - len(rule.MatchDockerImageLabels) > 0: - return true - } - - return false -} - -// matchImageCondition determines the result of an ImageCondition or the provided arguments. -func matchImageCondition(condition *imagepolicy.ImageCondition, integrated RegistryMatcher, attrs *ImagePolicyAttributes) bool { - result := matchImageConditionValues(condition, integrated, attrs) - klog.V(5).Infof("image matches conditions for %q: %t(invert=%t)", condition.Name, result, condition.InvertMatch) - if condition.InvertMatch { - result = !result - } - return result -} - -// matchImageConditionValues handles only the match rules on the condition, returning true if the conditions match. -// Use matchImageCondition to apply invertMatch rules. -func matchImageConditionValues(rule *imagepolicy.ImageCondition, integrated RegistryMatcher, attrs *ImagePolicyAttributes) bool { - if rule.MatchIntegratedRegistry && !(attrs.IntegratedRegistry || integrated.Matches(attrs.Name.Registry)) { - klog.V(5).Infof("image registry %v does not match integrated registry", attrs.Name.Registry) - return false - } - if len(rule.MatchRegistries) > 0 && !hasAnyMatch(attrs.Name.Registry, rule.MatchRegistries) { - klog.V(5).Infof("image registry %v does not match registries from rule: %#v", attrs.Name.Registry, rule.MatchRegistries) - return false - } - - // all subsequent calls require the image - image := attrs.Image - if image == nil { - if rule.SkipOnResolutionFailure { - klog.V(5).Infof("rule does not match because image did not resolve and SkipOnResolutionFailure is true") - // Likely we will never get here (see: https://github.com/openshift/origin/blob/4f709b48f8e52e8c6012bd8b91945f022a437a6a/pkg/image/admission/imagepolicy/rules/accept.go#L99-L103) - // but if we do, treat the condition as not matching since we are supposed to skip this rule on resolution failure. - return false - } - - // if we don't require an image to evaluate our rules, then there's no reason to continue from here - // we already know that we passed our filter - r := requiresImage(rule) - klog.V(5).Infof("image did not resolve, rule requires image metadata for matching: %t", r) - return !r - } - - if len(rule.MatchDockerImageLabels) > 0 { - if err := imageutil.ImageWithMetadata(image); err != nil { - if rule.SkipOnResolutionFailure { - return false - } else { - return true - } - } - dockerImageMetadata, hasMetadata := image.DockerImageMetadata.Object.(*docker10.DockerImage) - if !hasMetadata { - klog.V(5).Infof("image has no labels to match rule labels") - return false - } - - if !matchKeyValue(dockerImageMetadata.Config.Labels, rule.MatchDockerImageLabels) { - klog.V(5).Infof("image labels %#v do not match rule labels %#v", dockerImageMetadata.Config.Labels, rule.MatchDockerImageLabels) - return false - } - } - if !matchKeyValue(image.Annotations, rule.MatchImageAnnotations) { - klog.V(5).Infof("image annotations %#v do not match rule annotations %#v", image.Annotations, rule.MatchImageAnnotations) - return false - } - for _, s := range rule.MatchImageLabelSelectors { - if !s.Matches(labels.Set(image.Labels)) { - klog.V(5).Infof("image label selectors %#v do not match rule label selectors %#v", image.Labels, s) - return false - } - } - - return true -} - -func matchKeyValue(all map[string]string, conditions []imagepolicy.ValueCondition) bool { - for _, condition := range conditions { - switch { - case condition.Set: - if _, ok := all[condition.Key]; !ok { - return false - } - default: - if all[condition.Key] != condition.Value { - return false - } - } - } - return true -} - -func hasAnyMatch(name string, all []string) bool { - for _, s := range all { - if name == s { - return true - } - } - return false -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/decorator.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/decorator.go deleted file mode 100644 index 5cfd9dae5..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/decorator.go +++ /dev/null @@ -1,60 +0,0 @@ -package namespaceconditions - -import ( - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apiserver/pkg/admission" - corev1client "k8s.io/client-go/kubernetes/typed/core/v1" - corev1lister "k8s.io/client-go/listers/core/v1" -) - -// this is a list of namespaces with special meaning. The kube ones are here in particular because -// we don't control their creation or labeling on their creation -var runLevelZeroNamespaces = sets.NewString("default", "kube-system", "kube-public") -var runLevelOneNamespaces = sets.NewString("openshift-node", "openshift-infra", "openshift") - -func init() { - runLevelOneNamespaces.Insert(runLevelZeroNamespaces.List()...) -} - -// NamespaceLabelConditions provides a decorator that can delegate and conditionally add label conditions -type NamespaceLabelConditions struct { - NamespaceClient corev1client.NamespacesGetter - NamespaceLister corev1lister.NamespaceLister - - SkipLevelZeroNames sets.String - SkipLevelOneNames sets.String -} - -func (d *NamespaceLabelConditions) WithNamespaceLabelConditions(admissionPlugin admission.Interface, name string) admission.Interface { - switch { - case d.SkipLevelOneNames.Has(name): - // return a decorated admission plugin that skips runlevel 0 and 1 namespaces based on name (for known values) and - // label. - return &pluginHandlerWithNamespaceNameConditions{ - admissionPlugin: &pluginHandlerWithNamespaceLabelConditions{ - admissionPlugin: admissionPlugin, - namespaceClient: d.NamespaceClient, - namespaceLister: d.NamespaceLister, - namespaceSelector: skipRunLevelOneSelector, - }, - namespacesToExclude: runLevelOneNamespaces, - } - - case d.SkipLevelZeroNames.Has(name): - // return a decorated admission plugin that skips runlevel 0 namespaces based on name (for known values) and - // label. - return &pluginHandlerWithNamespaceNameConditions{ - admissionPlugin: &pluginHandlerWithNamespaceLabelConditions{ - admissionPlugin: admissionPlugin, - namespaceClient: d.NamespaceClient, - namespaceLister: d.NamespaceLister, - namespaceSelector: skipRunLevelZeroSelector, - }, - namespacesToExclude: runLevelZeroNamespaces, - } - - default: - return admissionPlugin - } - -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/labelcondition.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/labelcondition.go deleted file mode 100644 index c43fcb514..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/labelcondition.go +++ /dev/null @@ -1,123 +0,0 @@ -package namespaceconditions - -import ( - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apiserver/pkg/admission" - corev1client "k8s.io/client-go/kubernetes/typed/core/v1" - corev1lister "k8s.io/client-go/listers/core/v1" -) - -const runLevelLabel = "openshift.io/run-level" - -var ( - skipRunLevelZeroSelector labels.Selector - skipRunLevelOneSelector labels.Selector -) - -func init() { - var err error - skipRunLevelZeroSelector, err = labels.Parse(runLevelLabel + " notin ( 0 )") - if err != nil { - panic(err) - } - skipRunLevelOneSelector, err = labels.Parse(runLevelLabel + " notin ( 0,1 )") - if err != nil { - panic(err) - } -} - -// pluginHandlerWithNamespaceLabelConditions wraps an admission plugin in a conditional skip based on namespace labels -type pluginHandlerWithNamespaceLabelConditions struct { - admissionPlugin admission.Interface - namespaceClient corev1client.NamespacesGetter - namespaceLister corev1lister.NamespaceLister - namespaceSelector labels.Selector -} - -var _ admission.ValidationInterface = &pluginHandlerWithNamespaceLabelConditions{} -var _ admission.MutationInterface = &pluginHandlerWithNamespaceLabelConditions{} - -func (p pluginHandlerWithNamespaceLabelConditions) Handles(operation admission.Operation) bool { - return p.admissionPlugin.Handles(operation) -} - -// Admit performs a mutating admission control check and emit metrics. -func (p pluginHandlerWithNamespaceLabelConditions) Admit(a admission.Attributes, o admission.ObjectInterfaces) error { - if !p.shouldRunAdmission(a) { - return nil - } - - mutatingHandler, ok := p.admissionPlugin.(admission.MutationInterface) - if !ok { - return nil - } - return mutatingHandler.Admit(a, o) -} - -// Validate performs a non-mutating admission control check and emits metrics. -func (p pluginHandlerWithNamespaceLabelConditions) Validate(a admission.Attributes, o admission.ObjectInterfaces) error { - if !p.shouldRunAdmission(a) { - return nil - } - - validatingHandler, ok := p.admissionPlugin.(admission.ValidationInterface) - if !ok { - return nil - } - return validatingHandler.Validate(a, o) -} - -// MatchNamespaceSelector decideds whether the request matches the -// namespaceSelctor of the webhook. Only when they match, the webhook is called. -func (p pluginHandlerWithNamespaceLabelConditions) shouldRunAdmission(attr admission.Attributes) bool { - namespaceName := attr.GetNamespace() - if len(namespaceName) == 0 && attr.GetResource().Resource != "namespaces" { - // cluster scoped resources always run admission - return true - } - namespaceLabels, err := p.getNamespaceLabels(attr) - if err != nil { - // default to running the hook so we don't leak namespace existence information - return true - } - // TODO: adding an LRU cache to cache the match decision - return p.namespaceSelector.Matches(labels.Set(namespaceLabels)) -} - -// getNamespaceLabels gets the labels of the namespace related to the attr. -func (p pluginHandlerWithNamespaceLabelConditions) getNamespaceLabels(attr admission.Attributes) (map[string]string, error) { - // If the request itself is creating or updating a namespace, then get the - // labels from attr.Object, because namespaceLister doesn't have the latest - // namespace yet. - // - // However, if the request is deleting a namespace, then get the label from - // the namespace in the namespaceLister, because a delete request is not - // going to change the object, and attr.Object will be a DeleteOptions - // rather than a namespace object. - if attr.GetResource().Resource == "namespaces" && - len(attr.GetSubresource()) == 0 && - (attr.GetOperation() == admission.Create || attr.GetOperation() == admission.Update) { - accessor, err := meta.Accessor(attr.GetObject()) - if err != nil { - return nil, err - } - return accessor.GetLabels(), nil - } - - namespaceName := attr.GetNamespace() - namespace, err := p.namespaceLister.Get(namespaceName) - if err != nil && !apierrors.IsNotFound(err) { - return nil, err - } - if apierrors.IsNotFound(err) { - // in case of latency in our caches, make a call direct to storage to verify that it truly exists or not - namespace, err = p.namespaceClient.Namespaces().Get(namespaceName, metav1.GetOptions{}) - if err != nil { - return nil, err - } - } - return namespace.Labels, nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/labelcondition_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/labelcondition_test.go deleted file mode 100644 index 15dd321b9..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/labelcondition_test.go +++ /dev/null @@ -1,97 +0,0 @@ -package namespaceconditions - -import ( - "reflect" - "testing" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apiserver/pkg/admission" -) - -type fakeNamespaceLister struct { - namespaces map[string]*corev1.Namespace -} - -func (f fakeNamespaceLister) List(selector labels.Selector) (ret []*corev1.Namespace, err error) { - return nil, nil -} -func (f fakeNamespaceLister) Get(name string) (*corev1.Namespace, error) { - ns, ok := f.namespaces[name] - if ok { - return ns, nil - } - return nil, errors.NewNotFound(corev1.Resource("namespaces"), name) -} - -func TestGetNamespaceLabels(t *testing.T) { - namespace1Labels := map[string]string{ - "runlevel": "1", - } - namespace1 := corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "1", - Labels: namespace1Labels, - }, - } - namespace2Labels := map[string]string{ - "runlevel": "2", - } - namespace2 := corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "2", - Labels: namespace2Labels, - }, - } - namespaceLister := fakeNamespaceLister{map[string]*corev1.Namespace{ - "1": &namespace1, - }, - } - - tests := []struct { - name string - attr admission.Attributes - expectedLabels map[string]string - }{ - { - name: "request is for creating namespace, the labels should be from the object itself", - attr: admission.NewAttributesRecord(&namespace2, nil, schema.GroupVersionKind{}, "", namespace2.Name, schema.GroupVersionResource{Resource: "namespaces"}, "", admission.Create, false, nil), - expectedLabels: namespace2Labels, - }, - { - name: "request is for updating namespace, the labels should be from the new object", - attr: admission.NewAttributesRecord(&namespace2, nil, schema.GroupVersionKind{}, namespace2.Name, namespace2.Name, schema.GroupVersionResource{Resource: "namespaces"}, "", admission.Update, false, nil), - expectedLabels: namespace2Labels, - }, - { - name: "request is for deleting namespace, the labels should be from the cache", - attr: admission.NewAttributesRecord(&namespace2, nil, schema.GroupVersionKind{}, namespace1.Name, namespace1.Name, schema.GroupVersionResource{Resource: "namespaces"}, "", admission.Delete, false, nil), - expectedLabels: namespace1Labels, - }, - { - name: "request is for namespace/finalizer", - attr: admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{}, namespace1.Name, "mock-name", schema.GroupVersionResource{Resource: "namespaces"}, "finalizers", admission.Create, false, nil), - expectedLabels: namespace1Labels, - }, - { - name: "request is for pod", - attr: admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{}, namespace1.Name, "mock-name", schema.GroupVersionResource{Resource: "pods"}, "", admission.Create, false, nil), - expectedLabels: namespace1Labels, - }, - } - matcher := pluginHandlerWithNamespaceLabelConditions{ - namespaceLister: namespaceLister, - } - for _, tt := range tests { - actualLabels, err := matcher.getNamespaceLabels(tt.attr) - if err != nil { - t.Error(err) - } - if !reflect.DeepEqual(actualLabels, tt.expectedLabels) { - t.Errorf("expected labels to be %#v, got %#v", tt.expectedLabels, actualLabels) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/namecondition.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/namecondition.go deleted file mode 100644 index f90bad532..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions/namecondition.go +++ /dev/null @@ -1,58 +0,0 @@ -package namespaceconditions - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apiserver/pkg/admission" -) - -// pluginHandlerWithNamespaceNameConditions skips running admission plugins if they deal in the namespaceToExclude list -type pluginHandlerWithNamespaceNameConditions struct { - admissionPlugin admission.Interface - namespacesToExclude sets.String -} - -var _ admission.ValidationInterface = &pluginHandlerWithNamespaceNameConditions{} -var _ admission.MutationInterface = &pluginHandlerWithNamespaceNameConditions{} - -func (p pluginHandlerWithNamespaceNameConditions) Handles(operation admission.Operation) bool { - return p.admissionPlugin.Handles(operation) -} - -// Admit performs a mutating admission control check and emit metrics. -func (p pluginHandlerWithNamespaceNameConditions) Admit(a admission.Attributes, o admission.ObjectInterfaces) error { - if !p.shouldRunAdmission(a) { - return nil - } - - mutatingHandler, ok := p.admissionPlugin.(admission.MutationInterface) - if !ok { - return nil - } - return mutatingHandler.Admit(a, o) -} - -// Validate performs a non-mutating admission control check and emits metrics. -func (p pluginHandlerWithNamespaceNameConditions) Validate(a admission.Attributes, o admission.ObjectInterfaces) error { - if !p.shouldRunAdmission(a) { - return nil - } - - validatingHandler, ok := p.admissionPlugin.(admission.ValidationInterface) - if !ok { - return nil - } - return validatingHandler.Validate(a, o) -} - -func (p pluginHandlerWithNamespaceNameConditions) shouldRunAdmission(attr admission.Attributes) bool { - namespaceName := attr.GetNamespace() - if p.namespacesToExclude.Has(namespaceName) { - return false - } - if (attr.GetResource().GroupResource() == schema.GroupResource{Resource: "namespaces"}) && p.namespacesToExclude.Has(attr.GetName()) { - return false - } - - return true -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/doc.go deleted file mode 100644 index 4ef9330be..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package externalipranger is the internal version of the API. -package externalipranger diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/register.go deleted file mode 100644 index fe92abf52..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/register.go +++ /dev/null @@ -1,20 +0,0 @@ -package externalipranger - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -var GroupVersion = schema.GroupVersion{Group: "network.openshift.io", Version: runtime.APIVersionInternal} - -var ( - schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - Install = schemeBuilder.AddToScheme -) - -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &ExternalIPRangerAdmissionConfig{}, - ) - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/types.go deleted file mode 100644 index f127ca27a..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/types.go +++ /dev/null @@ -1,20 +0,0 @@ -package externalipranger - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// RestrictedEndpointsAdmissionConfig is the configuration for which CIDRs services can't manage -type ExternalIPRangerAdmissionConfig struct { - metav1.TypeMeta - - // ExternalIPNetworkCIDRs controls what values are acceptable for the service external IP field. If empty, no externalIP - // may be set. It may contain a list of CIDRs which are checked for access. If a CIDR is prefixed with !, IPs in that - // CIDR will be rejected. Rejections will be applied first, then the IP checked against one of the allowed CIDRs. You - // should ensure this range does not overlap with your nodes, pods, or service CIDRs for security reasons. - ExternalIPNetworkCIDRs []string - // AllowIngressIP indicates that ingress IPs should be allowed - AllowIngressIP bool -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/doc.go deleted file mode 100644 index 124d5620f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package v1 is the v1 version of the API. -package v1 diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/register.go deleted file mode 100644 index 064bb51e1..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/register.go +++ /dev/null @@ -1,24 +0,0 @@ -package v1 - -import ( - "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -var GroupVersion = schema.GroupVersion{Group: "network.openshift.io", Version: "v1"} - -var ( - schemeBuilder = runtime.NewSchemeBuilder( - addKnownTypes, - restrictedendpoints.Install, - ) - Install = schemeBuilder.AddToScheme -) - -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &ExternalIPRangerAdmissionConfig{}, - ) - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/types.go deleted file mode 100644 index 0fb8ea4ca..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/types.go +++ /dev/null @@ -1,20 +0,0 @@ -package v1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ExternalIPRangerAdmissionConfig is the configuration for which CIDRs services can't manage -type ExternalIPRangerAdmissionConfig struct { - metav1.TypeMeta `json:",inline"` - - // ExternalIPNetworkCIDRs controls what values are acceptable for the service external IP field. If empty, no externalIP - // may be set. It may contain a list of CIDRs which are checked for access. If a CIDR is prefixed with !, IPs in that - // CIDR will be rejected. Rejections will be applied first, then the IP checked against one of the allowed CIDRs. You - // should ensure this range does not overlap with your nodes, pods, or service CIDRs for security reasons. - ExternalIPNetworkCIDRs []string `json:"externalIPNetworkCIDRs"` - // AllowIngressIP indicates that ingress IPs should be allowed - AllowIngressIP bool `json:"allowIngressIP"` -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/zz_generated.deepcopy.go deleted file mode 100644 index 78ba52a34..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1/zz_generated.deepcopy.go +++ /dev/null @@ -1,39 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ExternalIPRangerAdmissionConfig) DeepCopyInto(out *ExternalIPRangerAdmissionConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.ExternalIPNetworkCIDRs != nil { - in, out := &in.ExternalIPNetworkCIDRs, &out.ExternalIPNetworkCIDRs - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalIPRangerAdmissionConfig. -func (in *ExternalIPRangerAdmissionConfig) DeepCopy() *ExternalIPRangerAdmissionConfig { - if in == nil { - return nil - } - out := new(ExternalIPRangerAdmissionConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ExternalIPRangerAdmissionConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/zz_generated.deepcopy.go deleted file mode 100644 index 843797496..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/zz_generated.deepcopy.go +++ /dev/null @@ -1,39 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package externalipranger - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ExternalIPRangerAdmissionConfig) DeepCopyInto(out *ExternalIPRangerAdmissionConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.ExternalIPNetworkCIDRs != nil { - in, out := &in.ExternalIPNetworkCIDRs, &out.ExternalIPNetworkCIDRs - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalIPRangerAdmissionConfig. -func (in *ExternalIPRangerAdmissionConfig) DeepCopy() *ExternalIPRangerAdmissionConfig { - if in == nil { - return nil - } - out := new(ExternalIPRangerAdmissionConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ExternalIPRangerAdmissionConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/doc.go deleted file mode 100644 index ff46fb9f1..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package restrictedendpoints is the internal version of the API. -package restrictedendpoints diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/register.go deleted file mode 100644 index 171a4b1be..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/register.go +++ /dev/null @@ -1,20 +0,0 @@ -package restrictedendpoints - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -var GroupVersion = schema.GroupVersion{Group: "network.openshift.io", Version: runtime.APIVersionInternal} - -var ( - schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - Install = schemeBuilder.AddToScheme -) - -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &RestrictedEndpointsAdmissionConfig{}, - ) - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/types.go deleted file mode 100644 index e20576221..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/types.go +++ /dev/null @@ -1,15 +0,0 @@ -package restrictedendpoints - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// RestrictedEndpointsAdmissionConfig is the configuration for which CIDRs services can't manage -type RestrictedEndpointsAdmissionConfig struct { - metav1.TypeMeta - - // RestrictedCIDRs indicates what CIDRs will be disallowed for services. - RestrictedCIDRs []string -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/doc.go deleted file mode 100644 index 124d5620f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package v1 is the v1 version of the API. -package v1 diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/register.go deleted file mode 100644 index f94e612bc..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/register.go +++ /dev/null @@ -1,24 +0,0 @@ -package v1 - -import ( - "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -var GroupVersion = schema.GroupVersion{Group: "network.openshift.io", Version: "v1"} - -var ( - schemeBuilder = runtime.NewSchemeBuilder( - addKnownTypes, - restrictedendpoints.Install, - ) - Install = schemeBuilder.AddToScheme -) - -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &RestrictedEndpointsAdmissionConfig{}, - ) - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/types.go deleted file mode 100644 index f665aa1e7..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/types.go +++ /dev/null @@ -1,15 +0,0 @@ -package v1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// RestrictedEndpointsAdmissionConfig is the configuration for which CIDRs services can't manage -type RestrictedEndpointsAdmissionConfig struct { - metav1.TypeMeta `json:",inline"` - - // RestrictedCIDRs indicates what CIDRs will be disallowed for services. - RestrictedCIDRs []string `json:"restrictedCIDRs"` -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.deepcopy.go deleted file mode 100644 index e9597be6b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1/zz_generated.deepcopy.go +++ /dev/null @@ -1,39 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RestrictedEndpointsAdmissionConfig) DeepCopyInto(out *RestrictedEndpointsAdmissionConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.RestrictedCIDRs != nil { - in, out := &in.RestrictedCIDRs, &out.RestrictedCIDRs - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RestrictedEndpointsAdmissionConfig. -func (in *RestrictedEndpointsAdmissionConfig) DeepCopy() *RestrictedEndpointsAdmissionConfig { - if in == nil { - return nil - } - out := new(RestrictedEndpointsAdmissionConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *RestrictedEndpointsAdmissionConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/zz_generated.deepcopy.go deleted file mode 100644 index 0a00cc4bc..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/zz_generated.deepcopy.go +++ /dev/null @@ -1,39 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package restrictedendpoints - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RestrictedEndpointsAdmissionConfig) DeepCopyInto(out *RestrictedEndpointsAdmissionConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.RestrictedCIDRs != nil { - in, out := &in.RestrictedCIDRs, &out.RestrictedCIDRs - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RestrictedEndpointsAdmissionConfig. -func (in *RestrictedEndpointsAdmissionConfig) DeepCopy() *RestrictedEndpointsAdmissionConfig { - if in == nil { - return nil - } - out := new(RestrictedEndpointsAdmissionConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *RestrictedEndpointsAdmissionConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission.go deleted file mode 100644 index a035bdb14..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission.go +++ /dev/null @@ -1,171 +0,0 @@ -package externalipranger - -import ( - "fmt" - "io" - "net" - "strings" - - apierrs "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - "k8s.io/klog" - kapi "k8s.io/kubernetes/pkg/apis/core" - - "github.com/openshift/library-go/pkg/config/helpers" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger" - v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/externalipranger/v1" -) - -const ExternalIPPluginName = "network.openshift.io/ExternalIPRanger" - -func RegisterExternalIP(plugins *admission.Plugins) { - plugins.Register("network.openshift.io/ExternalIPRanger", - func(config io.Reader) (admission.Interface, error) { - pluginConfig, err := readConfig(config) - if err != nil { - return nil, err - } - if pluginConfig == nil { - klog.Infof("Admission plugin %q is not configured so it will be disabled.", ExternalIPPluginName) - return nil, nil - } - - // this needs to be moved upstream to be part of core config - reject, admit, err := ParseRejectAdmitCIDRRules(pluginConfig.ExternalIPNetworkCIDRs) - if err != nil { - // should have been caught with validation - return nil, err - } - - return NewExternalIPRanger(reject, admit, pluginConfig.AllowIngressIP), nil - }) -} - -func readConfig(reader io.Reader) (*externalipranger.ExternalIPRangerAdmissionConfig, error) { - obj, err := helpers.ReadYAMLToInternal(reader, externalipranger.Install, v1.Install) - if err != nil { - return nil, err - } - if obj == nil { - return nil, nil - } - config, ok := obj.(*externalipranger.ExternalIPRangerAdmissionConfig) - if !ok { - return nil, fmt.Errorf("unexpected config object: %#v", obj) - } - // No validation needed since config is just list of strings - return config, nil -} - -type externalIPRanger struct { - *admission.Handler - reject []*net.IPNet - admit []*net.IPNet - allowIngressIP bool -} - -var _ admission.Interface = &externalIPRanger{} -var _ admission.ValidationInterface = &externalIPRanger{} - -// ParseRejectAdmitCIDRRules calculates a blacklist and whitelist from a list of string CIDR rules (treating -// a leading ! as a negation). Returns an error if any rule is invalid. -func ParseRejectAdmitCIDRRules(rules []string) (reject, admit []*net.IPNet, err error) { - for _, s := range rules { - negate := false - if strings.HasPrefix(s, "!") { - negate = true - s = s[1:] - } - _, cidr, err := net.ParseCIDR(s) - if err != nil { - return nil, nil, err - } - if negate { - reject = append(reject, cidr) - } else { - admit = append(admit, cidr) - } - } - return reject, admit, nil -} - -// NewConstraint creates a new SCC constraint admission plugin. -func NewExternalIPRanger(reject, admit []*net.IPNet, allowIngressIP bool) *externalIPRanger { - return &externalIPRanger{ - Handler: admission.NewHandler(admission.Create, admission.Update), - reject: reject, - admit: admit, - allowIngressIP: allowIngressIP, - } -} - -// NetworkSlice is a helper for checking whether an IP is contained in a range -// of networks. -type NetworkSlice []*net.IPNet - -func (s NetworkSlice) Contains(ip net.IP) bool { - for _, cidr := range s { - if cidr.Contains(ip) { - return true - } - } - return false -} - -// Admit determines if the service should be admitted based on the configured network CIDR. -func (r *externalIPRanger) Validate(a admission.Attributes, _ admission.ObjectInterfaces) error { - if a.GetResource().GroupResource() != kapi.Resource("services") { - return nil - } - - svc, ok := a.GetObject().(*kapi.Service) - // if we can't convert then we don't handle this object so just return - if !ok { - return nil - } - - // Determine if an ingress ip address should be allowed as an - // external ip by checking the loadbalancer status of the previous - // object state. Only updates need to be validated against the - // ingress ip since the loadbalancer status cannot be set on - // create. - ingressIP := "" - retrieveIngressIP := a.GetOperation() == admission.Update && - r.allowIngressIP && svc.Spec.Type == kapi.ServiceTypeLoadBalancer - if retrieveIngressIP { - old, ok := a.GetOldObject().(*kapi.Service) - ipPresent := ok && old != nil && len(old.Status.LoadBalancer.Ingress) > 0 - if ipPresent { - ingressIP = old.Status.LoadBalancer.Ingress[0].IP - } - } - - var errs field.ErrorList - switch { - // administrator disabled externalIPs - case len(svc.Spec.ExternalIPs) > 0 && len(r.admit) == 0: - onlyIngressIP := len(svc.Spec.ExternalIPs) == 1 && svc.Spec.ExternalIPs[0] == ingressIP - if !onlyIngressIP { - errs = append(errs, field.Forbidden(field.NewPath("spec", "externalIPs"), "externalIPs have been disabled")) - } - // administrator has limited the range - case len(svc.Spec.ExternalIPs) > 0 && len(r.admit) > 0: - for i, s := range svc.Spec.ExternalIPs { - ip := net.ParseIP(s) - if ip == nil { - errs = append(errs, field.Forbidden(field.NewPath("spec", "externalIPs").Index(i), "externalIPs must be a valid address")) - continue - } - notIngressIP := s != ingressIP - if (NetworkSlice(r.reject).Contains(ip) || !NetworkSlice(r.admit).Contains(ip)) && notIngressIP { - errs = append(errs, field.Forbidden(field.NewPath("spec", "externalIPs").Index(i), "externalIP is not allowed")) - continue - } - } - } - if len(errs) > 0 { - return apierrs.NewInvalid(a.GetKind().GroupKind(), a.GetName(), errs) - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission_test.go deleted file mode 100644 index 061e553a9..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/externalipranger/externalip_admission_test.go +++ /dev/null @@ -1,244 +0,0 @@ -package externalipranger - -import ( - "net" - "strings" - "testing" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apiserver/pkg/admission" - kapi "k8s.io/kubernetes/pkg/apis/core" -) - -// TestAdmission verifies various scenarios involving pod/project/global node label selectors -func TestAdmission(t *testing.T) { - svc := &kapi.Service{ - ObjectMeta: metav1.ObjectMeta{Name: "test"}, - } - var oldSvc *kapi.Service - - _, ipv4, err := net.ParseCIDR("172.0.0.0/16") - if err != nil { - t.Fatal(err) - } - _, ipv4subset, err := net.ParseCIDR("172.0.1.0/24") - if err != nil { - t.Fatal(err) - } - _, ipv4offset, err := net.ParseCIDR("172.200.0.0/24") - if err != nil { - t.Fatal(err) - } - _, none, err := net.ParseCIDR("0.0.0.0/32") - if err != nil { - t.Fatal(err) - } - _, all, err := net.ParseCIDR("0.0.0.0/0") - if err != nil { - t.Fatal(err) - } - - tests := []struct { - testName string - rejects, admits []*net.IPNet - op admission.Operation - externalIPs []string - admit bool - errFn func(err error) bool - loadBalancer bool - ingressIP string - }{ - { - admit: true, - op: admission.Create, - testName: "No external IPs on create", - }, - { - admit: true, - op: admission.Update, - testName: "No external IPs on update", - }, - { - admit: false, - externalIPs: []string{"1.2.3.4"}, - op: admission.Create, - testName: "No external IPs allowed on create", - errFn: func(err error) bool { return strings.Contains(err.Error(), "externalIPs have been disabled") }, - }, - { - admit: false, - externalIPs: []string{"1.2.3.4"}, - op: admission.Update, - testName: "No external IPs allowed on update", - errFn: func(err error) bool { return strings.Contains(err.Error(), "externalIPs have been disabled") }, - }, - { - admit: false, - admits: []*net.IPNet{ipv4}, - externalIPs: []string{"1.2.3.4"}, - op: admission.Create, - testName: "IP out of range on create", - errFn: func(err error) bool { - return strings.Contains(err.Error(), "externalIP is not allowed") && - strings.Contains(err.Error(), "spec.externalIPs[0]") - }, - }, - { - admit: false, - admits: []*net.IPNet{ipv4}, - externalIPs: []string{"1.2.3.4"}, - op: admission.Update, - testName: "IP out of range on update", - errFn: func(err error) bool { - return strings.Contains(err.Error(), "externalIP is not allowed") && - strings.Contains(err.Error(), "spec.externalIPs[0]") - }, - }, - { - admit: false, - admits: []*net.IPNet{ipv4}, - rejects: []*net.IPNet{ipv4subset}, - externalIPs: []string{"172.0.1.1"}, - op: admission.Update, - testName: "IP out of range due to blacklist", - errFn: func(err error) bool { - return strings.Contains(err.Error(), "externalIP is not allowed") && - strings.Contains(err.Error(), "spec.externalIPs[0]") - }, - }, - { - admit: false, - admits: []*net.IPNet{ipv4}, - rejects: []*net.IPNet{ipv4offset}, - externalIPs: []string{"172.199.1.1"}, - op: admission.Update, - testName: "IP not in reject or admit", - errFn: func(err error) bool { - return strings.Contains(err.Error(), "externalIP is not allowed") && - strings.Contains(err.Error(), "spec.externalIPs[0]") - }, - }, - { - admit: true, - admits: []*net.IPNet{ipv4}, - externalIPs: []string{"172.0.0.1"}, - op: admission.Create, - testName: "IP in range on create", - }, - { - admit: true, - admits: []*net.IPNet{ipv4}, - externalIPs: []string{"172.0.0.1"}, - op: admission.Update, - testName: "IP in range on update", - }, - // other checks - { - admit: false, - admits: []*net.IPNet{ipv4}, - externalIPs: []string{"abcd"}, - op: admission.Create, - testName: "IP unparseable on create", - errFn: func(err error) bool { - return strings.Contains(err.Error(), "externalIPs must be a valid address") && - strings.Contains(err.Error(), "spec.externalIPs[0]") - }, - }, - { - admit: false, - admits: []*net.IPNet{none}, - externalIPs: []string{"1.2.3.4"}, - op: admission.Create, - testName: "IP range is empty", - }, - { - admit: false, - rejects: []*net.IPNet{all}, - admits: []*net.IPNet{all}, - externalIPs: []string{"1.2.3.4"}, - op: admission.Create, - testName: "rejections can cover the entire range", - }, - // Ingress IP checks - { - admit: true, - externalIPs: []string{"1.2.3.4"}, - op: admission.Update, - testName: "Ingress ip allowed when external ips are disabled", - loadBalancer: true, - ingressIP: "1.2.3.4", - }, - { - admit: true, - admits: []*net.IPNet{ipv4}, - externalIPs: []string{"1.2.3.4", "172.0.0.1"}, - op: admission.Update, - testName: "Ingress ip allowed when external ips are enabled", - loadBalancer: true, - ingressIP: "1.2.3.4", - }, - { - admit: false, - admits: []*net.IPNet{ipv4}, - externalIPs: []string{"1.2.3.4", "172.0.0.1"}, - op: admission.Update, - testName: "Ingress ip not allowed for non-lb service", - loadBalancer: false, - ingressIP: "1.2.3.4", - }, - } - for _, test := range tests { - svc.Spec.ExternalIPs = test.externalIPs - allowIngressIP := len(test.ingressIP) > 0 || test.loadBalancer - handler := NewExternalIPRanger(test.rejects, test.admits, allowIngressIP) - - if test.loadBalancer { - svc.Spec.Type = kapi.ServiceTypeLoadBalancer - } else { - svc.Spec.Type = kapi.ServiceTypeClusterIP - } - - if len(test.ingressIP) > 0 { - // Provide an ingress ip via the previous object state - oldSvc = &kapi.Service{ - ObjectMeta: metav1.ObjectMeta{Name: "test"}, - Status: kapi.ServiceStatus{ - LoadBalancer: kapi.LoadBalancerStatus{ - Ingress: []kapi.LoadBalancerIngress{ - { - IP: test.ingressIP, - }, - }, - }, - }, - } - - } else { - oldSvc = nil - } - - err := handler.Validate(admission.NewAttributesRecord(svc, oldSvc, kapi.Kind("Service").WithVersion("version"), "namespace", svc.ObjectMeta.Name, kapi.Resource("services").WithVersion("version"), "", test.op, false, nil), nil) - if test.admit && err != nil { - t.Errorf("%s: expected no error but got: %s", test.testName, err) - } else if !test.admit && err == nil { - t.Errorf("%s: expected an error", test.testName) - } - if test.errFn != nil && !test.errFn(err) { - t.Errorf("%s: unexpected error: %v", test.testName, err) - } - } -} - -func TestHandles(t *testing.T) { - for op, shouldHandle := range map[admission.Operation]bool{ - admission.Create: true, - admission.Update: true, - admission.Connect: false, - admission.Delete: false, - } { - ranger := NewExternalIPRanger(nil, nil, false) - if e, a := shouldHandle, ranger.Handles(op); e != a { - t.Errorf("%v: shouldHandle=%t, handles=%t", op, e, a) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/restrictedendpoints/endpoint_admission.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/restrictedendpoints/endpoint_admission.go deleted file mode 100644 index a9b106bb6..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/network/restrictedendpoints/endpoint_admission.go +++ /dev/null @@ -1,190 +0,0 @@ -package restrictedendpoints - -import ( - "fmt" - "io" - "net" - "reflect" - - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/apiserver/pkg/authorization/authorizer" - "k8s.io/klog" - kapi "k8s.io/kubernetes/pkg/apis/core" - - "github.com/openshift/library-go/pkg/config/helpers" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints" - v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/apis/restrictedendpoints/v1" -) - -const RestrictedEndpointsPluginName = "network.openshift.io/RestrictedEndpointsAdmission" - -func RegisterRestrictedEndpoints(plugins *admission.Plugins) { - plugins.Register(RestrictedEndpointsPluginName, - func(config io.Reader) (admission.Interface, error) { - pluginConfig, err := readConfig(config) - if err != nil { - return nil, err - } - if pluginConfig == nil { - klog.Infof("Admission plugin %q is not configured so it will be disabled.", RestrictedEndpointsPluginName) - return nil, nil - } - restrictedNetworks, err := ParseSimpleCIDRRules(pluginConfig.RestrictedCIDRs) - if err != nil { - // should have been caught with validation - return nil, err - } - - return NewRestrictedEndpointsAdmission(restrictedNetworks), nil - }) -} - -func readConfig(reader io.Reader) (*restrictedendpoints.RestrictedEndpointsAdmissionConfig, error) { - obj, err := helpers.ReadYAMLToInternal(reader, restrictedendpoints.Install, v1.Install) - if err != nil { - return nil, err - } - if obj == nil { - return nil, nil - } - config, ok := obj.(*restrictedendpoints.RestrictedEndpointsAdmissionConfig) - if !ok { - return nil, fmt.Errorf("unexpected config object: %#v", obj) - } - // No validation needed since config is just list of strings - return config, nil -} - -type restrictedEndpointsAdmission struct { - *admission.Handler - - authorizer authorizer.Authorizer - restrictedNetworks []*net.IPNet -} - -var _ = initializer.WantsAuthorizer(&restrictedEndpointsAdmission{}) -var _ = admission.ValidationInterface(&restrictedEndpointsAdmission{}) - -// ParseSimpleCIDRRules parses a list of CIDR strings -func ParseSimpleCIDRRules(rules []string) (networks []*net.IPNet, err error) { - for _, s := range rules { - _, cidr, err := net.ParseCIDR(s) - if err != nil { - return nil, err - } - networks = append(networks, cidr) - } - return networks, nil -} - -// NewRestrictedEndpointsAdmission creates a new endpoints admission plugin. -func NewRestrictedEndpointsAdmission(restrictedNetworks []*net.IPNet) *restrictedEndpointsAdmission { - return &restrictedEndpointsAdmission{ - Handler: admission.NewHandler(admission.Create, admission.Update), - restrictedNetworks: restrictedNetworks, - } -} - -func (r *restrictedEndpointsAdmission) SetAuthorizer(a authorizer.Authorizer) { - r.authorizer = a -} - -func (r *restrictedEndpointsAdmission) ValidateInitialization() error { - if r.authorizer == nil { - return fmt.Errorf("missing authorizer") - } - return nil -} - -var ( - defaultRestrictedPorts = []kapi.EndpointPort{ - // MCS ports - {Protocol: kapi.ProtocolTCP, Port: 22623}, - {Protocol: kapi.ProtocolTCP, Port: 22624}, - } - defaultRestrictedNetworks = []*net.IPNet{ - // IPv4 link-local range 169.254.0.0/16 (including cloud metadata IP) - {IP: net.ParseIP("169.254.0.0"), Mask: net.CIDRMask(16, 32)}, - } -) - -func (r *restrictedEndpointsAdmission) findRestrictedIP(ep *kapi.Endpoints, restricted []*net.IPNet) error { - for _, subset := range ep.Subsets { - for _, addr := range subset.Addresses { - ip := net.ParseIP(addr.IP) - if ip == nil { - continue - } - for _, net := range restricted { - if net.Contains(ip) { - return fmt.Errorf("endpoint address %s is not allowed", addr.IP) - } - } - } - } - return nil -} - -func (r *restrictedEndpointsAdmission) findRestrictedPort(ep *kapi.Endpoints, restricted []kapi.EndpointPort) error { - for _, subset := range ep.Subsets { - for _, port := range subset.Ports { - for _, restricted := range restricted { - if port.Protocol == restricted.Protocol && port.Port == restricted.Port { - return fmt.Errorf("endpoint port %s:%d is not allowed", string(port.Protocol), port.Port) - } - } - } - } - return nil -} - -func (r *restrictedEndpointsAdmission) checkAccess(attr admission.Attributes) (bool, error) { - authzAttr := authorizer.AttributesRecord{ - User: attr.GetUserInfo(), - Verb: "create", - Namespace: attr.GetNamespace(), - Resource: "endpoints", - Subresource: "restricted", - APIGroup: kapi.GroupName, - Name: attr.GetName(), - ResourceRequest: true, - } - authorized, _, err := r.authorizer.Authorize(authzAttr) - return authorized == authorizer.DecisionAllow, err -} - -// Admit determines if the endpoints object should be admitted -func (r *restrictedEndpointsAdmission) Validate(a admission.Attributes, _ admission.ObjectInterfaces) error { - if a.GetResource().GroupResource() != kapi.Resource("endpoints") { - return nil - } - ep, ok := a.GetObject().(*kapi.Endpoints) - if !ok { - return nil - } - old, ok := a.GetOldObject().(*kapi.Endpoints) - if ok && reflect.DeepEqual(ep.Subsets, old.Subsets) { - return nil - } - - restrictedErr := r.findRestrictedIP(ep, r.restrictedNetworks) - if restrictedErr == nil { - restrictedErr = r.findRestrictedIP(ep, defaultRestrictedNetworks) - } - if restrictedErr == nil { - restrictedErr = r.findRestrictedPort(ep, defaultRestrictedPorts) - } - if restrictedErr == nil { - return nil - } - - allow, err := r.checkAccess(a) - if err != nil { - return err - } - if !allow { - return admission.NewForbidden(a, restrictedErr) - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/accessor.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/accessor.go deleted file mode 100644 index 72054ebd7..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/accessor.go +++ /dev/null @@ -1,169 +0,0 @@ -package clusterresourcequota - -import ( - "time" - - lru "github.com/hashicorp/golang-lru" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/equality" - kapierrors "k8s.io/apimachinery/pkg/api/errors" - utilwait "k8s.io/apimachinery/pkg/util/wait" - etcd "k8s.io/apiserver/pkg/storage/etcd" - corev1listers "k8s.io/client-go/listers/core/v1" - utilquota "k8s.io/kubernetes/pkg/quota/v1" - - quotav1 "github.com/openshift/api/quota/v1" - quotatypedclient "github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1" - quotalister "github.com/openshift/client-go/quota/listers/quota/v1" - "github.com/openshift/library-go/pkg/quota/clusterquotamapping" - quotautil "github.com/openshift/library-go/pkg/quota/quotautil" -) - -type clusterQuotaAccessor struct { - clusterQuotaLister quotalister.ClusterResourceQuotaLister - namespaceLister corev1listers.NamespaceLister - clusterQuotaClient quotatypedclient.ClusterResourceQuotasGetter - - clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper - - // updatedClusterQuotas holds a cache of quotas that we've updated. This is used to pull the "really latest" during back to - // back quota evaluations that touch the same quota doc. This only works because we can compare etcd resourceVersions - // for the same resource as integers. Before this change: 22 updates with 12 conflicts. after this change: 15 updates with 0 conflicts - updatedClusterQuotas *lru.Cache -} - -// newQuotaAccessor creates an object that conforms to the QuotaAccessor interface to be used to retrieve quota objects. -func newQuotaAccessor( - clusterQuotaLister quotalister.ClusterResourceQuotaLister, - namespaceLister corev1listers.NamespaceLister, - clusterQuotaClient quotatypedclient.ClusterResourceQuotasGetter, - clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper, -) *clusterQuotaAccessor { - updatedCache, err := lru.New(100) - if err != nil { - // this should never happen - panic(err) - } - - return &clusterQuotaAccessor{ - clusterQuotaLister: clusterQuotaLister, - namespaceLister: namespaceLister, - clusterQuotaClient: clusterQuotaClient, - clusterQuotaMapper: clusterQuotaMapper, - updatedClusterQuotas: updatedCache, - } -} - -// UpdateQuotaStatus the newQuota coming in will be incremented from the original. The difference between the original -// and the new is the amount to add to the namespace total, but the total status is the used value itself -func (e *clusterQuotaAccessor) UpdateQuotaStatus(newQuota *corev1.ResourceQuota) error { - clusterQuota, err := e.clusterQuotaLister.Get(newQuota.Name) - if err != nil { - return err - } - clusterQuota = e.checkCache(clusterQuota) - - // re-assign objectmeta - // make a copy - clusterQuota = clusterQuota.DeepCopy() - clusterQuota.ObjectMeta = newQuota.ObjectMeta - clusterQuota.Namespace = "" - - // determine change in usage - usageDiff := utilquota.Subtract(newQuota.Status.Used, clusterQuota.Status.Total.Used) - - // update aggregate usage - clusterQuota.Status.Total.Used = newQuota.Status.Used - - // update per namespace totals - oldNamespaceTotals, _ := quotautil.GetResourceQuotasStatusByNamespace(clusterQuota.Status.Namespaces, newQuota.Namespace) - namespaceTotalCopy := oldNamespaceTotals.DeepCopy() - newNamespaceTotals := *namespaceTotalCopy - newNamespaceTotals.Used = utilquota.Add(oldNamespaceTotals.Used, usageDiff) - quotautil.InsertResourceQuotasStatus(&clusterQuota.Status.Namespaces, quotav1.ResourceQuotaStatusByNamespace{ - Namespace: newQuota.Namespace, - Status: newNamespaceTotals, - }) - - updatedQuota, err := e.clusterQuotaClient.ClusterResourceQuotas().UpdateStatus(clusterQuota) - if err != nil { - return err - } - - e.updatedClusterQuotas.Add(clusterQuota.Name, updatedQuota) - return nil -} - -var etcdVersioner = etcd.APIObjectVersioner{} - -// checkCache compares the passed quota against the value in the look-aside cache and returns the newer -// if the cache is out of date, it deletes the stale entry. This only works because of etcd resourceVersions -// being monotonically increasing integers -func (e *clusterQuotaAccessor) checkCache(clusterQuota *quotav1.ClusterResourceQuota) *quotav1.ClusterResourceQuota { - uncastCachedQuota, ok := e.updatedClusterQuotas.Get(clusterQuota.Name) - if !ok { - return clusterQuota - } - cachedQuota := uncastCachedQuota.(*quotav1.ClusterResourceQuota) - - if etcdVersioner.CompareResourceVersion(clusterQuota, cachedQuota) >= 0 { - e.updatedClusterQuotas.Remove(clusterQuota.Name) - return clusterQuota - } - return cachedQuota -} - -func (e *clusterQuotaAccessor) GetQuotas(namespaceName string) ([]corev1.ResourceQuota, error) { - clusterQuotaNames, err := e.waitForReadyClusterQuotaNames(namespaceName) - if err != nil { - return nil, err - } - - resourceQuotas := []corev1.ResourceQuota{} - for _, clusterQuotaName := range clusterQuotaNames { - clusterQuota, err := e.clusterQuotaLister.Get(clusterQuotaName) - if kapierrors.IsNotFound(err) { - continue - } - if err != nil { - return nil, err - } - - clusterQuota = e.checkCache(clusterQuota) - - // now convert to a ResourceQuota - convertedQuota := corev1.ResourceQuota{} - convertedQuota.ObjectMeta = clusterQuota.ObjectMeta - convertedQuota.Namespace = namespaceName - convertedQuota.Spec = clusterQuota.Spec.Quota - convertedQuota.Status = clusterQuota.Status.Total - resourceQuotas = append(resourceQuotas, convertedQuota) - - } - - return resourceQuotas, nil -} - -func (e *clusterQuotaAccessor) waitForReadyClusterQuotaNames(namespaceName string) ([]string, error) { - var clusterQuotaNames []string - // wait for a valid mapping cache. The overall response can be delayed for up to 10 seconds. - err := utilwait.PollImmediate(100*time.Millisecond, 8*time.Second, func() (done bool, err error) { - var namespaceSelectionFields clusterquotamapping.SelectionFields - clusterQuotaNames, namespaceSelectionFields = e.clusterQuotaMapper.GetClusterQuotasFor(namespaceName) - namespace, err := e.namespaceLister.Get(namespaceName) - // if we can't find the namespace yet, just wait for the cache to update. Requests to non-existent namespaces - // may hang, but those people are doing something wrong and namespacelifecycle should reject them. - if kapierrors.IsNotFound(err) { - return false, nil - } - if err != nil { - return false, err - } - if equality.Semantic.DeepEqual(namespaceSelectionFields, clusterquotamapping.GetSelectionFields(namespace)) { - return true, nil - } - return false, nil - }) - return clusterQuotaNames, err -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/accessor_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/accessor_test.go deleted file mode 100644 index 14935e475..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/accessor_test.go +++ /dev/null @@ -1,385 +0,0 @@ -package clusterresourcequota - -import ( - "strings" - "testing" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/equality" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - utildiff "k8s.io/apimachinery/pkg/util/diff" - "k8s.io/apimachinery/pkg/util/sets" - corev1listers "k8s.io/client-go/listers/core/v1" - clientgotesting "k8s.io/client-go/testing" - "k8s.io/client-go/tools/cache" - "k8s.io/kubernetes/pkg/api/legacyscheme" - - quotav1 "github.com/openshift/api/quota/v1" - fakequotaclient "github.com/openshift/client-go/quota/clientset/versioned/fake" - quotalister "github.com/openshift/client-go/quota/listers/quota/v1" - "github.com/openshift/library-go/pkg/quota/clusterquotamapping" - quotautil "github.com/openshift/library-go/pkg/quota/quotautil" -) - -func TestUpdateQuota(t *testing.T) { - testCases := []struct { - name string - availableQuotas func() []*quotav1.ClusterResourceQuota - quotaToUpdate *corev1.ResourceQuota - - expectedQuota func() *quotav1.ClusterResourceQuota - expectedError string - }{ - { - name: "update properly", - availableQuotas: func() []*quotav1.ClusterResourceQuota { - user1 := defaultQuota() - user1.Name = "user-one" - user1.Status.Total.Hard = user1.Spec.Quota.Hard - user1.Status.Total.Used = corev1.ResourceList{corev1.ResourcePods: resource.MustParse("15")} - quotautil.InsertResourceQuotasStatus(&user1.Status.Namespaces, quotav1.ResourceQuotaStatusByNamespace{ - Namespace: "foo", - Status: corev1.ResourceQuotaStatus{ - Hard: user1.Spec.Quota.Hard, - Used: corev1.ResourceList{corev1.ResourcePods: resource.MustParse("5")}, - }, - }) - quotautil.InsertResourceQuotasStatus(&user1.Status.Namespaces, quotav1.ResourceQuotaStatusByNamespace{ - Namespace: "bar", - Status: corev1.ResourceQuotaStatus{ - Hard: user1.Spec.Quota.Hard, - Used: corev1.ResourceList{corev1.ResourcePods: resource.MustParse("10")}, - }, - }) - - user2 := defaultQuota() - user2.Name = "user-two" - user2.Status.Total.Hard = user2.Spec.Quota.Hard - user2.Status.Total.Used = corev1.ResourceList{corev1.ResourcePods: resource.MustParse("5")} - quotautil.InsertResourceQuotasStatus(&user2.Status.Namespaces, quotav1.ResourceQuotaStatusByNamespace{ - Namespace: "foo", - Status: corev1.ResourceQuotaStatus{ - Hard: user1.Spec.Quota.Hard, - Used: corev1.ResourceList{corev1.ResourcePods: resource.MustParse("5")}, - }, - }) - - return []*quotav1.ClusterResourceQuota{user1, user2} - }, - quotaToUpdate: &corev1.ResourceQuota{ - ObjectMeta: metav1.ObjectMeta{Namespace: "foo", Name: "user-one"}, - Spec: corev1.ResourceQuotaSpec{ - Hard: corev1.ResourceList{ - corev1.ResourcePods: resource.MustParse("10"), - corev1.ResourceSecrets: resource.MustParse("5"), - }, - }, - Status: corev1.ResourceQuotaStatus{ - Hard: corev1.ResourceList{ - corev1.ResourcePods: resource.MustParse("10"), - corev1.ResourceSecrets: resource.MustParse("5"), - }, - Used: corev1.ResourceList{ - corev1.ResourcePods: resource.MustParse("20"), - }, - }}, - - expectedQuota: func() *quotav1.ClusterResourceQuota { - user1 := defaultQuota() - user1.Name = "user-one" - user1.Status.Total.Hard = user1.Spec.Quota.Hard - user1.Status.Total.Used = corev1.ResourceList{corev1.ResourcePods: resource.MustParse("20")} - quotautil.InsertResourceQuotasStatus(&user1.Status.Namespaces, quotav1.ResourceQuotaStatusByNamespace{ - Namespace: "foo", - Status: corev1.ResourceQuotaStatus{ - Hard: user1.Spec.Quota.Hard, - Used: corev1.ResourceList{corev1.ResourcePods: resource.MustParse("10")}, - }, - }) - quotautil.InsertResourceQuotasStatus(&user1.Status.Namespaces, quotav1.ResourceQuotaStatusByNamespace{ - Namespace: "bar", - Status: corev1.ResourceQuotaStatus{ - Hard: user1.Spec.Quota.Hard, - Used: corev1.ResourceList{corev1.ResourcePods: resource.MustParse("10")}, - }, - }) - - return user1 - }, - }, - } - - for _, tc := range testCases { - quotaIndexer := cache.NewIndexer(cache.DeletionHandlingMetaNamespaceKeyFunc, cache.Indexers{}) - availableQuotas := tc.availableQuotas() - objs := []runtime.Object{} - for i := range availableQuotas { - quotaIndexer.Add(availableQuotas[i]) - objs = append(objs, availableQuotas[i]) - } - quotaLister := quotalister.NewClusterResourceQuotaLister(quotaIndexer) - - client := fakequotaclient.NewSimpleClientset(objs...) - - accessor := newQuotaAccessor(quotaLister, nil, client.QuotaV1(), nil) - - actualErr := accessor.UpdateQuotaStatus(tc.quotaToUpdate) - switch { - case len(tc.expectedError) == 0 && actualErr == nil: - case len(tc.expectedError) == 0 && actualErr != nil: - t.Errorf("%s: unexpected error: %v", tc.name, actualErr) - continue - case len(tc.expectedError) != 0 && actualErr == nil: - t.Errorf("%s: missing expected error: %v", tc.name, tc.expectedError) - continue - case len(tc.expectedError) != 0 && actualErr != nil && !strings.Contains(actualErr.Error(), tc.expectedError): - t.Errorf("%s: expected %v, got %v", tc.name, tc.expectedError, actualErr) - continue - } - - var actualQuota *quotav1.ClusterResourceQuota - for _, action := range client.Actions() { - updateAction, ok := action.(clientgotesting.UpdateActionImpl) - if !ok { - continue - } - if updateAction.Matches("update", "clusterresourcequotas") && updateAction.Subresource == "status" { - actualQuota = updateAction.GetObject().(*quotav1.ClusterResourceQuota) - break - } - } - - if !equality.Semantic.DeepEqual(tc.expectedQuota(), actualQuota) { - t.Errorf("%s: %v", tc.name, utildiff.ObjectDiff(tc.expectedQuota(), actualQuota)) - continue - } - } - -} - -func defaultQuota() *quotav1.ClusterResourceQuota { - return "av1.ClusterResourceQuota{ - ObjectMeta: metav1.ObjectMeta{Name: "foo"}, - Spec: quotav1.ClusterResourceQuotaSpec{ - Quota: corev1.ResourceQuotaSpec{ - Hard: corev1.ResourceList{ - corev1.ResourcePods: resource.MustParse("10"), - corev1.ResourceSecrets: resource.MustParse("5"), - }, - }, - }, - } -} - -func TestGetQuota(t *testing.T) { - testCases := []struct { - name string - availableQuotas func() []*quotav1.ClusterResourceQuota - availableNamespaces []*corev1.Namespace - mapperFunc func() clusterquotamapping.ClusterQuotaMapper - requestedNamespace string - - expectedQuotas func() []*corev1.ResourceQuota - expectedError string - }{ - { - name: "namespace not synced", - availableQuotas: func() []*quotav1.ClusterResourceQuota { - return nil - }, - availableNamespaces: []*corev1.Namespace{ - {ObjectMeta: metav1.ObjectMeta{Name: "foo", Labels: map[string]string{"one": "alfa"}}}, - }, - mapperFunc: func() clusterquotamapping.ClusterQuotaMapper { - mapper := newFakeClusterQuotaMapper() - mapper.namespaceToQuota["foo"] = sets.NewString("user-one") - mapper.namespaceToSelectionFields["foo"] = clusterquotamapping.SelectionFields{Labels: map[string]string{"two": "bravo"}} - return mapper - }, - requestedNamespace: "foo", - - expectedError: "timed out waiting for the condition", - }, - { - name: "no hits on namespace", - availableQuotas: func() []*quotav1.ClusterResourceQuota { - return nil - }, - availableNamespaces: []*corev1.Namespace{ - {ObjectMeta: metav1.ObjectMeta{Name: "foo", Labels: map[string]string{"one": "alfa"}}}, - }, - mapperFunc: func() clusterquotamapping.ClusterQuotaMapper { - mapper := newFakeClusterQuotaMapper() - mapper.namespaceToQuota["foo"] = sets.NewString() - mapper.namespaceToSelectionFields["foo"] = clusterquotamapping.SelectionFields{Labels: map[string]string{"one": "alfa"}} - mapper.namespaceToQuota["bar"] = sets.NewString("user-one") - mapper.namespaceToSelectionFields["bar"] = clusterquotamapping.SelectionFields{Labels: map[string]string{"two": "bravo"}} - return mapper - }, - requestedNamespace: "foo", - - expectedQuotas: func() []*corev1.ResourceQuota { - return []*corev1.ResourceQuota{} - }, - expectedError: "", - }, - { - name: "correct quota and namespaces", - availableQuotas: func() []*quotav1.ClusterResourceQuota { - user1 := defaultQuota() - user1.Name = "user-one" - user1.Status.Total.Hard = user1.Spec.Quota.Hard - user1.Status.Total.Used = corev1.ResourceList{corev1.ResourcePods: resource.MustParse("15")} - quotautil.InsertResourceQuotasStatus(&user1.Status.Namespaces, quotav1.ResourceQuotaStatusByNamespace{ - Namespace: "foo", - Status: corev1.ResourceQuotaStatus{ - Hard: user1.Spec.Quota.Hard, - Used: corev1.ResourceList{corev1.ResourcePods: resource.MustParse("5")}, - }, - }) - quotautil.InsertResourceQuotasStatus(&user1.Status.Namespaces, quotav1.ResourceQuotaStatusByNamespace{ - Namespace: "bar", - Status: corev1.ResourceQuotaStatus{ - Hard: user1.Spec.Quota.Hard, - Used: corev1.ResourceList{corev1.ResourcePods: resource.MustParse("10")}, - }, - }) - - user2 := defaultQuota() - user2.Name = "user-two" - user2.Status.Total.Hard = user2.Spec.Quota.Hard - user2.Status.Total.Used = corev1.ResourceList{corev1.ResourcePods: resource.MustParse("5")} - quotautil.InsertResourceQuotasStatus(&user2.Status.Namespaces, quotav1.ResourceQuotaStatusByNamespace{ - Namespace: "foo", - Status: corev1.ResourceQuotaStatus{ - Hard: user1.Spec.Quota.Hard, - Used: corev1.ResourceList{corev1.ResourcePods: resource.MustParse("5")}, - }, - }) - - return []*quotav1.ClusterResourceQuota{user1, user2} - }, - availableNamespaces: []*corev1.Namespace{ - {ObjectMeta: metav1.ObjectMeta{Name: "foo", Labels: map[string]string{"one": "alfa"}}}, - }, - mapperFunc: func() clusterquotamapping.ClusterQuotaMapper { - mapper := newFakeClusterQuotaMapper() - mapper.namespaceToQuota["foo"] = sets.NewString("user-one") - mapper.namespaceToSelectionFields["foo"] = clusterquotamapping.SelectionFields{Labels: map[string]string{"one": "alfa"}} - return mapper - }, - requestedNamespace: "foo", - - expectedQuotas: func() []*corev1.ResourceQuota { - return []*corev1.ResourceQuota{ - { - ObjectMeta: metav1.ObjectMeta{Namespace: "foo", Name: "user-one"}, - Spec: corev1.ResourceQuotaSpec{ - Hard: corev1.ResourceList{ - corev1.ResourcePods: resource.MustParse("10"), - corev1.ResourceSecrets: resource.MustParse("5"), - }, - }, - Status: corev1.ResourceQuotaStatus{ - Hard: corev1.ResourceList{ - corev1.ResourcePods: resource.MustParse("10"), - corev1.ResourceSecrets: resource.MustParse("5"), - }, - Used: corev1.ResourceList{ - corev1.ResourcePods: resource.MustParse("15"), - }, - }, - }, - } - }, - }, - } - - for _, tc := range testCases { - quotaIndexer := cache.NewIndexer(cache.DeletionHandlingMetaNamespaceKeyFunc, cache.Indexers{}) - availableQuotas := tc.availableQuotas() - for i := range availableQuotas { - quotaIndexer.Add(availableQuotas[i]) - } - quotaLister := quotalister.NewClusterResourceQuotaLister(quotaIndexer) - - namespaceIndexer := cache.NewIndexer(cache.DeletionHandlingMetaNamespaceKeyFunc, cache.Indexers{}) - for i := range tc.availableNamespaces { - namespaceIndexer.Add(tc.availableNamespaces[i]) - } - namespaceLister := corev1listers.NewNamespaceLister(namespaceIndexer) - - client := fakequotaclient.NewSimpleClientset() - - accessor := newQuotaAccessor(quotaLister, namespaceLister, client.QuotaV1(), tc.mapperFunc()) - - actualQuotas, actualErr := accessor.GetQuotas(tc.requestedNamespace) - switch { - case len(tc.expectedError) == 0 && actualErr == nil: - case len(tc.expectedError) == 0 && actualErr != nil: - t.Errorf("%s: unexpected error: %v", tc.name, actualErr) - continue - case len(tc.expectedError) != 0 && actualErr == nil: - t.Errorf("%s: missing expected error: %v", tc.name, tc.expectedError) - continue - case len(tc.expectedError) != 0 && actualErr != nil && !strings.Contains(actualErr.Error(), tc.expectedError): - t.Errorf("%s: expected %v, got %v", tc.name, tc.expectedError, actualErr) - continue - } - - if tc.expectedQuotas == nil { - continue - } - - actualQuotaPointers := []*corev1.ResourceQuota{} - for i := range actualQuotas { - actualQuotaPointers = append(actualQuotaPointers, &actualQuotas[i]) - } - - expectedQuotas := tc.expectedQuotas() - if !equality.Semantic.DeepEqual(expectedQuotas, actualQuotaPointers) { - t.Errorf("%s: expectedLen: %v actualLen: %v", tc.name, len(expectedQuotas), len(actualQuotas)) - for i := range expectedQuotas { - expectedV1, err := legacyscheme.Scheme.ConvertToVersion(expectedQuotas[i], quotav1.SchemeGroupVersion) - if err != nil { - t.Errorf("%s: unexpected error: %v", tc.name, err) - continue - } - actualV1, err := legacyscheme.Scheme.ConvertToVersion(actualQuotaPointers[i], quotav1.SchemeGroupVersion) - if err != nil { - t.Errorf("%s: unexpected error: %v", tc.name, err) - continue - } - t.Errorf("%s: %v equal? %v", tc.name, utildiff.ObjectDiff(expectedV1, actualV1), equality.Semantic.DeepEqual(expectedV1, actualV1)) - } - continue - } - } -} - -type fakeClusterQuotaMapper struct { - quotaToSelector map[string]quotav1.ClusterResourceQuotaSelector - namespaceToSelectionFields map[string]clusterquotamapping.SelectionFields - - quotaToNamespaces map[string]sets.String - namespaceToQuota map[string]sets.String -} - -func newFakeClusterQuotaMapper() *fakeClusterQuotaMapper { - return &fakeClusterQuotaMapper{ - quotaToSelector: map[string]quotav1.ClusterResourceQuotaSelector{}, - namespaceToSelectionFields: map[string]clusterquotamapping.SelectionFields{}, - quotaToNamespaces: map[string]sets.String{}, - namespaceToQuota: map[string]sets.String{}, - } -} - -func (m *fakeClusterQuotaMapper) GetClusterQuotasFor(namespaceName string) ([]string, clusterquotamapping.SelectionFields) { - return m.namespaceToQuota[namespaceName].List(), m.namespaceToSelectionFields[namespaceName] -} -func (m *fakeClusterQuotaMapper) GetNamespacesFor(quotaName string) ([]string, quotav1.ClusterResourceQuotaSelector) { - return m.quotaToNamespaces[quotaName].List(), m.quotaToSelector[quotaName] -} -func (m *fakeClusterQuotaMapper) AddListener(listener clusterquotamapping.MappingChangeListener) {} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/admission.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/admission.go deleted file mode 100644 index 389c4d966..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/admission.go +++ /dev/null @@ -1,203 +0,0 @@ -package clusterresourcequota - -import ( - "errors" - "io" - "sort" - "sync" - "time" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - utilwait "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle" - "k8s.io/client-go/informers" - corev1listers "k8s.io/client-go/listers/core/v1" - "k8s.io/client-go/rest" - "k8s.io/kubernetes/pkg/quota/v1" - "k8s.io/kubernetes/pkg/quota/v1/install" - "k8s.io/kubernetes/plugin/pkg/admission/resourcequota" - resourcequotaapi "k8s.io/kubernetes/plugin/pkg/admission/resourcequota/apis/resourcequota" - - quotatypedclient "github.com/openshift/client-go/quota/clientset/versioned/typed/quota/v1" - quotainformer "github.com/openshift/client-go/quota/informers/externalversions/quota/v1" - quotalister "github.com/openshift/client-go/quota/listers/quota/v1" - "github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig" - "github.com/openshift/library-go/pkg/quota/clusterquotamapping" -) - -func Register(plugins *admission.Plugins) { - plugins.Register("quota.openshift.io/ClusterResourceQuota", - func(config io.Reader) (admission.Interface, error) { - return NewClusterResourceQuota() - }) -} - -// clusterQuotaAdmission implements an admission controller that can enforce clusterQuota constraints -type clusterQuotaAdmission struct { - *admission.Handler - - // these are used to create the accessor - clusterQuotaLister quotalister.ClusterResourceQuotaLister - namespaceLister corev1listers.NamespaceLister - clusterQuotaSynced func() bool - namespaceSynced func() bool - clusterQuotaClient quotatypedclient.ClusterResourceQuotasGetter - clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper - - lockFactory LockFactory - - // these are used to create the evaluator - registry quota.Registry - - init sync.Once - evaluator resourcequota.Evaluator -} - -var _ initializer.WantsExternalKubeInformerFactory = &clusterQuotaAdmission{} -var _ admissionrestconfig.WantsRESTClientConfig = &clusterQuotaAdmission{} -var _ WantsClusterQuota = &clusterQuotaAdmission{} -var _ WantsOriginQuotaRegistry = &clusterQuotaAdmission{} -var _ admission.ValidationInterface = &clusterQuotaAdmission{} - -const ( - timeToWaitForCacheSync = 10 * time.Second - numEvaluatorThreads = 10 -) - -// NewClusterResourceQuota configures an admission controller that can enforce clusterQuota constraints -// using the provided registry. The registry must have the capability to handle group/kinds that -// are persisted by the server this admission controller is intercepting -func NewClusterResourceQuota() (admission.Interface, error) { - return &clusterQuotaAdmission{ - Handler: admission.NewHandler(admission.Create, admission.Update), - lockFactory: NewDefaultLockFactory(), - }, nil -} - -// Admit makes admission decisions while enforcing clusterQuota -func (q *clusterQuotaAdmission) Validate(a admission.Attributes, _ admission.ObjectInterfaces) (err error) { - // ignore all operations that correspond to sub-resource actions - if len(a.GetSubresource()) != 0 { - return nil - } - // ignore cluster level resources - if len(a.GetNamespace()) == 0 { - return nil - } - - if !q.waitForSyncedStore(time.After(timeToWaitForCacheSync)) { - return admission.NewForbidden(a, errors.New("caches not synchronized")) - } - - q.init.Do(func() { - clusterQuotaAccessor := newQuotaAccessor(q.clusterQuotaLister, q.namespaceLister, q.clusterQuotaClient, q.clusterQuotaMapper) - q.evaluator = resourcequota.NewQuotaEvaluator(clusterQuotaAccessor, ignoredResources, q.registry, q.lockAquisition, &resourcequotaapi.Configuration{}, numEvaluatorThreads, utilwait.NeverStop) - }) - - return q.evaluator.Evaluate(a) -} - -func (q *clusterQuotaAdmission) lockAquisition(quotas []corev1.ResourceQuota) func() { - locks := []sync.Locker{} - - // acquire the locks in alphabetical order because I'm too lazy to think of something clever - sort.Sort(ByName(quotas)) - for _, quota := range quotas { - lock := q.lockFactory.GetLock(quota.Name) - lock.Lock() - locks = append(locks, lock) - } - - return func() { - for i := len(locks) - 1; i >= 0; i-- { - locks[i].Unlock() - } - } -} - -func (q *clusterQuotaAdmission) waitForSyncedStore(timeout <-chan time.Time) bool { - for !q.clusterQuotaSynced() || !q.namespaceSynced() { - select { - case <-time.After(100 * time.Millisecond): - case <-timeout: - return q.clusterQuotaSynced() && q.namespaceSynced() - } - } - - return true -} - -func (q *clusterQuotaAdmission) SetOriginQuotaRegistry(registry quota.Registry) { - q.registry = registry -} - -func (q *clusterQuotaAdmission) SetExternalKubeInformerFactory(informers informers.SharedInformerFactory) { - q.namespaceLister = informers.Core().V1().Namespaces().Lister() - q.namespaceSynced = informers.Core().V1().Namespaces().Informer().HasSynced -} - -func (q *clusterQuotaAdmission) SetRESTClientConfig(restClientConfig rest.Config) { - var err error - - // ClusterResourceQuota is served using CRD resource any status update must use JSON - jsonClientConfig := rest.CopyConfig(&restClientConfig) - jsonClientConfig.ContentConfig.AcceptContentTypes = "application/json" - jsonClientConfig.ContentConfig.ContentType = "application/json" - - q.clusterQuotaClient, err = quotatypedclient.NewForConfig(jsonClientConfig) - if err != nil { - utilruntime.HandleError(err) - return - } -} - -func (q *clusterQuotaAdmission) SetClusterQuota(clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper, informers quotainformer.ClusterResourceQuotaInformer) { - q.clusterQuotaMapper = clusterQuotaMapper - q.clusterQuotaLister = informers.Lister() - q.clusterQuotaSynced = informers.Informer().HasSynced -} - -func (q *clusterQuotaAdmission) ValidateInitialization() error { - if q.clusterQuotaLister == nil { - return errors.New("missing clusterQuotaLister") - } - if q.namespaceLister == nil { - return errors.New("missing namespaceLister") - } - if q.clusterQuotaClient == nil { - return errors.New("missing clusterQuotaClient") - } - if q.clusterQuotaMapper == nil { - return errors.New("missing clusterQuotaMapper") - } - if q.registry == nil { - return errors.New("missing registry") - } - - return nil -} - -type ByName []corev1.ResourceQuota - -func (v ByName) Len() int { return len(v) } -func (v ByName) Swap(i, j int) { v[i], v[j] = v[j], v[i] } -func (v ByName) Less(i, j int) bool { return v[i].Name < v[j].Name } - -// ignoredResources is the set of resources that clusterquota ignores. It's larger because we have to ignore requests -// that the namespace lifecycle plugin ignores. This is because of the need to have a matching namespace in order to be sure -// that the cache is current enough to have mapped the CRQ to the namespaces. Normal RQ doesn't have that requirement. -var ignoredResources = map[schema.GroupResource]struct{}{} - -func init() { - for k := range install.DefaultIgnoredResources() { - ignoredResources[k] = struct{}{} - } - for k := range lifecycle.AccessReviewResources() { - ignoredResources[k] = struct{}{} - } - -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/intializers.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/intializers.go deleted file mode 100644 index a7ed923c9..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/intializers.go +++ /dev/null @@ -1,51 +0,0 @@ -package clusterresourcequota - -import ( - "k8s.io/apiserver/pkg/admission" - quota "k8s.io/kubernetes/pkg/quota/v1" - - quotainformer "github.com/openshift/client-go/quota/informers/externalversions/quota/v1" - "github.com/openshift/library-go/pkg/quota/clusterquotamapping" -) - -func NewInitializer( - clusterResourceQuotaInformer quotainformer.ClusterResourceQuotaInformer, - clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper, - quotaRegistry quota.Registry, -) admission.PluginInitializer { - return &localInitializer{ - clusterResourceQuotaInformer: clusterResourceQuotaInformer, - clusterQuotaMapper: clusterQuotaMapper, - quotaRegistry: quotaRegistry, - } -} - -// WantsClusterQuota should be implemented by admission plugins that need to know how to map between -// cluster quota and namespaces and get access to the informer. -type WantsClusterQuota interface { - SetClusterQuota(clusterquotamapping.ClusterQuotaMapper, quotainformer.ClusterResourceQuotaInformer) - admission.InitializationValidator -} - -// WantsQuotaRegistry should be implemented by admission plugins that need a quota registry -type WantsOriginQuotaRegistry interface { - SetOriginQuotaRegistry(quota.Registry) - admission.InitializationValidator -} - -type localInitializer struct { - clusterResourceQuotaInformer quotainformer.ClusterResourceQuotaInformer - clusterQuotaMapper clusterquotamapping.ClusterQuotaMapper - quotaRegistry quota.Registry -} - -// Initialize will check the initialization interfaces implemented by each plugin -// and provide the appropriate initialization data -func (i *localInitializer) Initialize(plugin admission.Interface) { - if wants, ok := plugin.(WantsClusterQuota); ok { - wants.SetClusterQuota(i.clusterQuotaMapper, i.clusterResourceQuotaInformer) - } - if wants, ok := plugin.(WantsOriginQuotaRegistry); ok { - wants.SetOriginQuotaRegistry(i.quotaRegistry) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/lockfactory.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/lockfactory.go deleted file mode 100644 index ed73d0e2d..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota/lockfactory.go +++ /dev/null @@ -1,40 +0,0 @@ -package clusterresourcequota - -import ( - "sync" -) - -type LockFactory interface { - GetLock(string) sync.Locker -} - -type DefaultLockFactory struct { - lock sync.RWMutex - - locks map[string]sync.Locker -} - -func NewDefaultLockFactory() *DefaultLockFactory { - return &DefaultLockFactory{locks: map[string]sync.Locker{}} -} - -func (f *DefaultLockFactory) GetLock(key string) sync.Locker { - lock, exists := f.getExistingLock(key) - if exists { - return lock - } - - f.lock.Lock() - defer f.lock.Unlock() - lock = &sync.Mutex{} - f.locks[key] = lock - return lock -} - -func (f *DefaultLockFactory) getExistingLock(key string) (sync.Locker, bool) { - f.lock.RLock() - defer f.lock.RUnlock() - - lock, exists := f.locks[key] - return lock, exists -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/OWNERS deleted file mode 100644 index 01232becf..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/OWNERS +++ /dev/null @@ -1,5 +0,0 @@ -reviewers: - - JacobTanenbaum - - smarterclayton -approvers: - - smarterclayton diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/doc.go deleted file mode 100644 index 04727861a..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package api is the internal version of the API. -package ingressadmission diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/register.go deleted file mode 100644 index e0e844927..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/register.go +++ /dev/null @@ -1,33 +0,0 @@ -package ingressadmission - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// SchemeGroupVersion is group version used to register these objects -var GroupVersion = schema.GroupVersion{Group: "route.openshift.io", Version: runtime.APIVersionInternal} - -// Kind takes an unqualified kind and returns back a Group qualified GroupKind -func Kind(kind string) schema.GroupKind { - return GroupVersion.WithKind(kind).GroupKind() -} - -// Resource takes an unqualified resource and returns back a Group qualified GroupResource -func Resource(resource string) schema.GroupResource { - return GroupVersion.WithResource(resource).GroupResource() -} - -var ( - schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - Install = schemeBuilder.AddToScheme -) - -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &IngressAdmissionConfig{}, - ) - return nil -} - -func (obj *IngressAdmissionConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/types.go deleted file mode 100644 index bc1356398..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/types.go +++ /dev/null @@ -1,22 +0,0 @@ -package ingressadmission - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// IngressAdmissionConfig is the configuration for the the ingress -// controller limiter plugin. It changes the behavior of ingress -// objects to behave better with openshift routes and routers. -// *NOTE* This has security implications in the router when handling -// ingress objects -type IngressAdmissionConfig struct { - metav1.TypeMeta - - // AllowHostnameChanges when false or unset openshift does not - // allow changing or adding hostnames to ingress objects. If set - // to true then hostnames can be added or modified which has - // security implications in the router. - AllowHostnameChanges bool -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/defaults_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/defaults_test.go deleted file mode 100644 index e105c4809..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/defaults_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package v1 - -import ( - "reflect" - "testing" - - "k8s.io/apimachinery/pkg/api/apitesting" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/diff" -) - -func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { - scheme, codecs := apitesting.SchemeForOrDie(Install) - data, err := runtime.Encode(codecs.LegacyCodec(GroupVersion), obj) - if err != nil { - t.Errorf("%v\n %#v", err, obj) - return nil - } - obj2, err := runtime.Decode(codecs.UniversalDecoder(), data) - if err != nil { - t.Errorf("%v\nData: %s\nSource: %#v", err, string(data), obj) - return nil - } - obj3 := reflect.New(reflect.TypeOf(obj).Elem()).Interface().(runtime.Object) - err = scheme.Convert(obj2, obj3, nil) - if err != nil { - t.Errorf("%v\nSourceL %#v", err, obj2) - return nil - } - return obj3 -} - -func TestDefaults(t *testing.T) { - tests := []struct { - original *IngressAdmissionConfig - expected *IngressAdmissionConfig - }{ - { - original: &IngressAdmissionConfig{}, - expected: &IngressAdmissionConfig{ - AllowHostnameChanges: false, - }, - }, - } - for i, test := range tests { - t.Logf("test %d", i) - original := test.original - expected := test.expected - obj2 := roundTrip(t, runtime.Object(original)) - got, ok := obj2.(*IngressAdmissionConfig) - if !ok { - t.Errorf("unexpected object: %v", got) - t.FailNow() - } - if !reflect.DeepEqual(got, expected) { - t.Errorf("got different than expected:\nA:\t%#v\nB:\t%#v\n\nDiff:\n%s\n\n%s", got, expected, diff.ObjectDiff(expected, got), diff.ObjectGoPrintSideBySide(expected, got)) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/doc.go deleted file mode 100644 index 124d5620f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package v1 is the v1 version of the API. -package v1 diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/register.go deleted file mode 100644 index 681e65b9c..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/register.go +++ /dev/null @@ -1,27 +0,0 @@ -package v1 - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission" -) - -func (obj *IngressAdmissionConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } - -var GroupVersion = schema.GroupVersion{Group: "route.openshift.io", Version: "v1"} - -var ( - schemeBuilder = runtime.NewSchemeBuilder( - addKnownTypes, - ingressadmission.Install, - ) - Install = schemeBuilder.AddToScheme -) - -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &IngressAdmissionConfig{}, - ) - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/swagger_doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/swagger_doc.go deleted file mode 100644 index 27266bc8b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/swagger_doc.go +++ /dev/null @@ -1,15 +0,0 @@ -package v1 - -// This file contains methods that can be used by the go-restful package to generate Swagger -// documentation for the object types found in 'types.go' This file is automatically generated -// by hack/update-generated-swagger-descriptions.sh and should be run after a full build of OpenShift. -// ==== DO NOT EDIT THIS FILE MANUALLY ==== - -var map_IngressAdmissionConfig = map[string]string{ - "": "IngressAdmissionConfig is the configuration for the the ingress controller limiter plugin. It changes the behavior of ingress objects to behave better with openshift routes and routers. *NOTE* This has security implications in the router when handling ingress objects", - "allowHostnameChanges": "AllowHostnameChanges when false or unset openshift does not allow changing or adding hostnames to ingress objects. If set to true then hostnames can be added or modified which has security implications in the router.", -} - -func (IngressAdmissionConfig) SwaggerDoc() map[string]string { - return map_IngressAdmissionConfig -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/types.go deleted file mode 100644 index a770d0539..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/types.go +++ /dev/null @@ -1,22 +0,0 @@ -package v1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// IngressAdmissionConfig is the configuration for the the ingress -// controller limiter plugin. It changes the behavior of ingress -// objects to behave better with openshift routes and routers. -// *NOTE* This has security implications in the router when handling -// ingress objects -type IngressAdmissionConfig struct { - metav1.TypeMeta `json:",inline"` - - // AllowHostnameChanges when false or unset openshift does not - // allow changing or adding hostnames to ingress objects. If set - // to true then hostnames can be added or modified which has - // security implications in the router. - AllowHostnameChanges bool `json:"allowHostnameChanges"` -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.deepcopy.go deleted file mode 100644 index ba0f8a528..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1/zz_generated.deepcopy.go +++ /dev/null @@ -1,34 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressAdmissionConfig) DeepCopyInto(out *IngressAdmissionConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressAdmissionConfig. -func (in *IngressAdmissionConfig) DeepCopy() *IngressAdmissionConfig { - if in == nil { - return nil - } - out := new(IngressAdmissionConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *IngressAdmissionConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/zz_generated.deepcopy.go deleted file mode 100644 index e75a7b7a0..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/zz_generated.deepcopy.go +++ /dev/null @@ -1,34 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package ingressadmission - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *IngressAdmissionConfig) DeepCopyInto(out *IngressAdmissionConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new IngressAdmissionConfig. -func (in *IngressAdmissionConfig) DeepCopy() *IngressAdmissionConfig { - if in == nil { - return nil - } - out := new(IngressAdmissionConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *IngressAdmissionConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/ingress_admission.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/ingress_admission.go deleted file mode 100644 index 9ec965048..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/ingress_admission.go +++ /dev/null @@ -1,161 +0,0 @@ -// This plugin supplements upstream Ingress admission validation -// It takes care of current Openshift specific constraints on Ingress resources -package admission - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/apiserver/pkg/authorization/authorizer" - kextensions "k8s.io/kubernetes/pkg/apis/extensions" - "k8s.io/kubernetes/pkg/apis/networking" - - "github.com/openshift/library-go/pkg/config/helpers" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission" - v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission/v1" -) - -const ( - IngressAdmission = "route.openshift.io/IngressAdmission" -) - -func Register(plugins *admission.Plugins) { - plugins.Register(IngressAdmission, - func(config io.Reader) (admission.Interface, error) { - pluginConfig, err := readConfig(config) - if err != nil { - return nil, err - } - return NewIngressAdmission(pluginConfig), nil - }) -} - -type ingressAdmission struct { - *admission.Handler - config *ingressadmission.IngressAdmissionConfig - authorizer authorizer.Authorizer -} - -var _ = initializer.WantsAuthorizer(&ingressAdmission{}) -var _ = admission.ValidationInterface(&ingressAdmission{}) - -func NewIngressAdmission(config *ingressadmission.IngressAdmissionConfig) *ingressAdmission { - return &ingressAdmission{ - Handler: admission.NewHandler(admission.Create, admission.Update), - config: config, - } -} - -func readConfig(reader io.Reader) (*ingressadmission.IngressAdmissionConfig, error) { - obj, err := helpers.ReadYAMLToInternal(reader, ingressadmission.Install, v1.Install) - if err != nil { - return nil, err - } - if obj == nil { - return nil, nil - } - config, ok := obj.(*ingressadmission.IngressAdmissionConfig) - if !ok { - return nil, fmt.Errorf("unexpected config object: %#v", obj) - } - // No validation needed since config is just list of strings - return config, nil -} - -func (r *ingressAdmission) SetAuthorizer(a authorizer.Authorizer) { - r.authorizer = a -} - -func (r *ingressAdmission) ValidateInitialization() error { - if r.authorizer == nil { - return fmt.Errorf("%s needs an Openshift Authorizer", IngressAdmission) - } - return nil -} - -func (r *ingressAdmission) Validate(a admission.Attributes, _ admission.ObjectInterfaces) error { - if a.GetResource().GroupResource() == kextensions.Resource("ingresses") { - switch a.GetOperation() { - case admission.Create: - if ingress, ok := a.GetObject().(*networking.Ingress); ok { - // if any rules have a host, check whether the user has permission to set them - for i, rule := range ingress.Spec.Rules { - if len(rule.Host) > 0 { - attr := authorizer.AttributesRecord{ - User: a.GetUserInfo(), - Verb: "create", - Namespace: a.GetNamespace(), - Resource: "routes", - Subresource: "custom-host", - APIGroup: "route.openshift.io", - ResourceRequest: true, - } - kind := schema.GroupKind{Group: a.GetResource().Group, Kind: a.GetResource().Resource} - authorized, _, err := r.authorizer.Authorize(attr) - if err != nil { - return errors.NewInvalid(kind, ingress.Name, field.ErrorList{field.InternalError(field.NewPath("spec", "rules").Index(i), err)}) - } - if authorized != authorizer.DecisionAllow { - return errors.NewInvalid(kind, ingress.Name, field.ErrorList{field.Forbidden(field.NewPath("spec", "rules").Index(i), "you do not have permission to set host fields in ingress rules")}) - } - break - } - } - } - case admission.Update: - if r.config == nil || r.config.AllowHostnameChanges == false { - oldIngress, ok := a.GetOldObject().(*networking.Ingress) - if !ok { - return nil - } - newIngress, ok := a.GetObject().(*networking.Ingress) - if !ok { - return nil - } - if !haveHostnamesChanged(oldIngress, newIngress) { - attr := authorizer.AttributesRecord{ - User: a.GetUserInfo(), - Verb: "update", - Namespace: a.GetNamespace(), - Name: a.GetName(), - Resource: "routes", - Subresource: "custom-host", - APIGroup: "route.openshift.io", - ResourceRequest: true, - } - kind := schema.GroupKind{Group: a.GetResource().Group, Kind: a.GetResource().Resource} - authorized, _, err := r.authorizer.Authorize(attr) - if err != nil { - return errors.NewInvalid(kind, newIngress.Name, field.ErrorList{field.InternalError(field.NewPath("spec", "rules"), err)}) - } - if authorized == authorizer.DecisionAllow { - return nil - } - return fmt.Errorf("cannot change hostname") - } - } - } - } - return nil -} - -func haveHostnamesChanged(oldIngress, newIngress *networking.Ingress) bool { - hostnameSet := sets.NewString() - for _, element := range oldIngress.Spec.Rules { - hostnameSet.Insert(element.Host) - } - - for _, element := range newIngress.Spec.Rules { - if present := hostnameSet.Has(element.Host); !present { - return false - } - } - - return true -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/ingress_admission_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/ingress_admission_test.go deleted file mode 100644 index efba6ec06..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/route/ingress_admission_test.go +++ /dev/null @@ -1,176 +0,0 @@ -package admission - -import ( - "testing" - - "k8s.io/kubernetes/pkg/apis/networking" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/authorization/authorizer" - kextensions "k8s.io/kubernetes/pkg/apis/extensions" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/route/apis/ingressadmission" -) - -type fakeAuthorizer struct { - allow authorizer.Decision - err error -} - -func (a *fakeAuthorizer) Authorize(authorizer.Attributes) (authorizer.Decision, string, error) { - return a.allow, "", a.err -} - -func TestAdmission(t *testing.T) { - var newIngress *networking.Ingress - var oldIngress *networking.Ingress - - tests := []struct { - config *ingressadmission.IngressAdmissionConfig - testName string - oldHost, newHost string - op admission.Operation - admit bool - allow authorizer.Decision - }{ - { - admit: true, - config: emptyConfig(), - op: admission.Create, - testName: "No errors on create", - }, - { - admit: true, - config: emptyConfig(), - op: admission.Update, - newHost: "foo.com", - oldHost: "foo.com", - testName: "keeping the host the same should pass", - }, - { - admit: true, - config: emptyConfig(), - op: admission.Update, - oldHost: "foo.com", - testName: "deleting a hostname should pass", - }, - { - admit: false, - config: emptyConfig(), - op: admission.Update, - newHost: "foo.com", - oldHost: "bar.com", - testName: "changing hostname should fail", - }, - { - admit: true, - allow: authorizer.DecisionAllow, - config: emptyConfig(), - op: admission.Update, - newHost: "foo.com", - oldHost: "bar.com", - testName: "changing hostname should succeed if the user has permission", - }, - { - admit: false, - config: nil, - op: admission.Update, - newHost: "foo.com", - oldHost: "bar.com", - testName: "unconfigured plugin should still fail", - }, - { - admit: true, - config: testConfigUpdateAllow(), - op: admission.Update, - newHost: "foo.com", - oldHost: "bar.com", - testName: "Upstream Hostname updates enabled", - }, - { - admit: true, - config: testConfigUpdateAllow(), - op: admission.Update, - newHost: "foo.com", - testName: "add new hostname with upstream rules", - }, - { - admit: false, - allow: authorizer.DecisionNoOpinion, - config: emptyConfig(), - op: admission.Create, - newHost: "foo.com", - testName: "setting the host should require permission", - }, - { - admit: true, - allow: authorizer.DecisionAllow, - config: emptyConfig(), - op: admission.Create, - newHost: "foo.com", - testName: "setting the host should pass if user has permission", - }, - } - for _, test := range tests { - if len(test.newHost) > 0 { - newIngress = &networking.Ingress{ - ObjectMeta: metav1.ObjectMeta{Name: "test"}, - Spec: networking.IngressSpec{ - Rules: []networking.IngressRule{ - { - Host: test.newHost, - }, - }, - }, - } - } else { - //Used to test deleting a hostname - newIngress = &networking.Ingress{ - ObjectMeta: metav1.ObjectMeta{Name: "test"}, - } - } - handler := NewIngressAdmission(test.config) - handler.SetAuthorizer(&fakeAuthorizer{allow: test.allow}) - - if len(test.oldHost) > 0 { - //Provides the previous state of an ingress object - oldIngress = &networking.Ingress{ - ObjectMeta: metav1.ObjectMeta{Name: "test"}, - Spec: networking.IngressSpec{ - Rules: []networking.IngressRule{ - { - Host: test.oldHost, - }, - }, - }, - } - } else { - oldIngress = nil - } - - err := handler.Validate(admission.NewAttributesRecord(newIngress, oldIngress, kextensions.Kind("ingresses").WithVersion("Version"), "namespace", newIngress.ObjectMeta.Name, kextensions.Resource("ingresses").WithVersion("version"), "", test.op, false, nil), nil) - if test.admit && err != nil { - t.Errorf("%s: expected no error but got: %s", test.testName, err) - } else if !test.admit && err == nil { - t.Errorf("%s: expected an error", test.testName) - } - } - -} - -func emptyConfig() *ingressadmission.IngressAdmissionConfig { - return &ingressadmission.IngressAdmissionConfig{} -} - -func testConfigUpdateAllow() *ingressadmission.IngressAdmissionConfig { - return &ingressadmission.IngressAdmissionConfig{ - AllowHostnameChanges: true, - } -} - -func testConfigUpdateDeny() *ingressadmission.IngressAdmissionConfig { - return &ingressadmission.IngressAdmissionConfig{ - AllowHostnameChanges: false, - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/OWNERS deleted file mode 100644 index b9fd8844c..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/OWNERS +++ /dev/null @@ -1,9 +0,0 @@ -reviewers: - - smarterclayton - - pravisankar - - soltysh - - dobbymoodge -approvers: - - smarterclayton - - pravisankar - - soltysh diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/doc.go deleted file mode 100644 index ae163f472..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package api is the internal version of the API. -package podnodeconstraints diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/register.go deleted file mode 100644 index 5b8add00b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/register.go +++ /dev/null @@ -1,33 +0,0 @@ -package podnodeconstraints - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// SchemeGroupVersion is group version used to register these objects -var GroupVersion = schema.GroupVersion{Group: "scheduling.openshift.io", Version: runtime.APIVersionInternal} - -// Kind takes an unqualified kind and returns back a Group qualified GroupKind -func Kind(kind string) schema.GroupKind { - return GroupVersion.WithKind(kind).GroupKind() -} - -// Resource takes an unqualified resource and returns back a Group qualified GroupResource -func Resource(resource string) schema.GroupResource { - return GroupVersion.WithResource(resource).GroupResource() -} - -var ( - schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - Install = schemeBuilder.AddToScheme -) - -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &PodNodeConstraintsConfig{}, - ) - return nil -} - -func (obj *PodNodeConstraintsConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/types.go deleted file mode 100644 index 27cebad19..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/types.go +++ /dev/null @@ -1,19 +0,0 @@ -package podnodeconstraints - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodNodeConstraintsConfig is the configuration for the pod node name -// and node selector constraint plug-in. For accounts, serviceaccounts, -// and groups which lack the "pods/binding" permission, Loading this -// plugin will prevent setting NodeName on pod specs and will prevent -// setting NodeSelectors whose labels appear in the blacklist field -// "NodeSelectorLabelBlacklist" -type PodNodeConstraintsConfig struct { - metav1.TypeMeta - // NodeSelectorLabelBlacklist specifies a list of labels which cannot be set by entities without the "pods/binding" permission - NodeSelectorLabelBlacklist []string -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults.go deleted file mode 100644 index 54d718cfc..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults.go +++ /dev/null @@ -1,19 +0,0 @@ -package v1 - -import ( - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/runtime" -) - -func SetDefaults_PodNodeConstraintsConfig(obj *PodNodeConstraintsConfig) { - if obj.NodeSelectorLabelBlacklist == nil { - obj.NodeSelectorLabelBlacklist = []string{ - corev1.LabelHostname, - } - } -} - -func addDefaultingFuncs(scheme *runtime.Scheme) error { - scheme.AddTypeDefaultingFunc(&PodNodeConstraintsConfig{}, func(obj interface{}) { SetDefaults_PodNodeConstraintsConfig(obj.(*PodNodeConstraintsConfig)) }) - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults_test.go deleted file mode 100644 index 513084ad9..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/defaults_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package v1 - -import ( - "reflect" - "testing" - - "k8s.io/apimachinery/pkg/api/apitesting" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/diff" -) - -func roundTrip(t *testing.T, obj runtime.Object) runtime.Object { - scheme, codecs := apitesting.SchemeForOrDie(Install) - data, err := runtime.Encode(codecs.LegacyCodec(GroupVersion), obj) - if err != nil { - t.Errorf("%v\n %#v", err, obj) - return nil - } - obj2, err := runtime.Decode(codecs.UniversalDecoder(), data) - if err != nil { - t.Errorf("%v\nData: %s\nSource: %#v", err, string(data), obj) - return nil - } - obj3 := reflect.New(reflect.TypeOf(obj).Elem()).Interface().(runtime.Object) - err = scheme.Convert(obj2, obj3, nil) - if err != nil { - t.Errorf("%v\nSource: %#v", err, obj2) - return nil - } - return obj3 -} - -func TestDefaults(t *testing.T) { - tests := []struct { - original *PodNodeConstraintsConfig - expected *PodNodeConstraintsConfig - }{ - { - original: &PodNodeConstraintsConfig{}, - expected: &PodNodeConstraintsConfig{ - NodeSelectorLabelBlacklist: []string{"kubernetes.io/hostname"}, - }, - }, - } - for i, test := range tests { - t.Logf("test %d", i) - original := test.original - expected := test.expected - obj2 := roundTrip(t, runtime.Object(original)) - got, ok := obj2.(*PodNodeConstraintsConfig) - if !ok { - t.Errorf("unexpected object: %v", got) - t.FailNow() - } - if !reflect.DeepEqual(got, expected) { - t.Errorf("got different than expected:\nA:\t%#v\nB:\t%#v\n\nDiff:\n%s\n\n%s", got, expected, diff.ObjectDiff(expected, got), diff.ObjectGoPrintSideBySide(expected, got)) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/doc.go deleted file mode 100644 index 124d5620f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/doc.go +++ /dev/null @@ -1,4 +0,0 @@ -// +k8s:deepcopy-gen=package,register - -// Package v1 is the v1 version of the API. -package v1 diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/register.go deleted file mode 100644 index d48272377..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/register.go +++ /dev/null @@ -1,28 +0,0 @@ -package v1 - -import ( - "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -func (obj *PodNodeConstraintsConfig) GetObjectKind() schema.ObjectKind { return &obj.TypeMeta } - -var GroupVersion = schema.GroupVersion{Group: "scheduling.openshift.io", Version: "v1"} - -var ( - schemeBuilder = runtime.NewSchemeBuilder( - addKnownTypes, - podnodeconstraints.Install, - - addDefaultingFuncs, - ) - Install = schemeBuilder.AddToScheme -) - -func addKnownTypes(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(GroupVersion, - &PodNodeConstraintsConfig{}, - ) - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/swagger_doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/swagger_doc.go deleted file mode 100644 index 95e3d2220..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/swagger_doc.go +++ /dev/null @@ -1,15 +0,0 @@ -package v1 - -// This file contains methods that can be used by the go-restful package to generate Swagger -// documentation for the object types found in 'types.go' This file is automatically generated -// by hack/update-generated-swagger-descriptions.sh and should be run after a full build of OpenShift. -// ==== DO NOT EDIT THIS FILE MANUALLY ==== - -var map_PodNodeConstraintsConfig = map[string]string{ - "": "PodNodeConstraintsConfig is the configuration for the pod node name and node selector constraint plug-in. For accounts, serviceaccounts and groups which lack the \"pods/binding\" permission, Loading this plugin will prevent setting NodeName on pod specs and will prevent setting NodeSelectors whose labels appear in the blacklist field \"NodeSelectorLabelBlacklist\"", - "nodeSelectorLabelBlacklist": "NodeSelectorLabelBlacklist specifies a list of labels which cannot be set by entities without the \"pods/binding\" permission", -} - -func (PodNodeConstraintsConfig) SwaggerDoc() map[string]string { - return map_PodNodeConstraintsConfig -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/types.go deleted file mode 100644 index 3ffd5acdb..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/types.go +++ /dev/null @@ -1,20 +0,0 @@ -package v1 - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodNodeConstraintsConfig is the configuration for the pod node name -// and node selector constraint plug-in. For accounts, serviceaccounts -// and groups which lack the "pods/binding" permission, Loading this -// plugin will prevent setting NodeName on pod specs and will prevent -// setting NodeSelectors whose labels appear in the blacklist field -// "NodeSelectorLabelBlacklist" -type PodNodeConstraintsConfig struct { - metav1.TypeMeta `json:",inline"` - - // NodeSelectorLabelBlacklist specifies a list of labels which cannot be set by entities without the "pods/binding" permission - NodeSelectorLabelBlacklist []string `json:"nodeSelectorLabelBlacklist" description:"list of labels which cannot be set by entities without the 'pods/binding' permission"` -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.deepcopy.go deleted file mode 100644 index 5d7b49dc2..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1/zz_generated.deepcopy.go +++ /dev/null @@ -1,39 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package v1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodNodeConstraintsConfig) DeepCopyInto(out *PodNodeConstraintsConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.NodeSelectorLabelBlacklist != nil { - in, out := &in.NodeSelectorLabelBlacklist, &out.NodeSelectorLabelBlacklist - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodNodeConstraintsConfig. -func (in *PodNodeConstraintsConfig) DeepCopy() *PodNodeConstraintsConfig { - if in == nil { - return nil - } - out := new(PodNodeConstraintsConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodNodeConstraintsConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/zz_generated.deepcopy.go deleted file mode 100644 index 46ccf9f25..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/zz_generated.deepcopy.go +++ /dev/null @@ -1,39 +0,0 @@ -// +build !ignore_autogenerated - -// Code generated by deepcopy-gen. DO NOT EDIT. - -package podnodeconstraints - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodNodeConstraintsConfig) DeepCopyInto(out *PodNodeConstraintsConfig) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.NodeSelectorLabelBlacklist != nil { - in, out := &in.NodeSelectorLabelBlacklist, &out.NodeSelectorLabelBlacklist - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodNodeConstraintsConfig. -func (in *PodNodeConstraintsConfig) DeepCopy() *PodNodeConstraintsConfig { - if in == nil { - return nil - } - out := new(PodNodeConstraintsConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodNodeConstraintsConfig) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/admission.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/admission.go deleted file mode 100644 index e351e6191..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/admission.go +++ /dev/null @@ -1,146 +0,0 @@ -package nodeenv - -import ( - "errors" - "fmt" - "io" - "time" - - corev1 "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/client-go/informers" - corev1listers "k8s.io/client-go/listers/core/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector" - coreapi "k8s.io/kubernetes/pkg/apis/core" -) - -func Register(plugins *admission.Plugins) { - plugins.Register("scheduling.openshift.io/OriginPodNodeEnvironment", - func(config io.Reader) (admission.Interface, error) { - return NewPodNodeEnvironment() - }) -} - -const ( - timeToWaitForCacheSync = 10 * time.Second - kubeProjectNodeSelector = "scheduler.alpha.kubernetes.io/node-selector" - openShiftProjectNodeSelector = "openshift.io/node-selector" -) - -// podNodeEnvironment is an implementation of admission.MutationInterface. -type podNodeEnvironment struct { - *admission.Handler - nsLister corev1listers.NamespaceLister - nsListerSynced func() bool - // TODO this should become a piece of config passed to the admission plugin - defaultNodeSelector string -} - -var _ = initializer.WantsExternalKubeInformerFactory(&podNodeEnvironment{}) -var _ = WantsDefaultNodeSelector(&podNodeEnvironment{}) -var _ = admission.ValidationInterface(&podNodeEnvironment{}) -var _ = admission.MutationInterface(&podNodeEnvironment{}) - -// Admit enforces that pod and its project node label selectors matches at least a node in the cluster. -func (p *podNodeEnvironment) admit(a admission.Attributes, mutationAllowed bool) (err error) { - resource := a.GetResource().GroupResource() - if resource != corev1.Resource("pods") { - return nil - } - if a.GetSubresource() != "" { - // only run the checks below on pods proper and not subresources - return nil - } - - obj := a.GetObject() - pod, ok := obj.(*coreapi.Pod) - if !ok { - return nil - } - - name := pod.Name - - if !p.waitForSyncedStore(time.After(timeToWaitForCacheSync)) { - return admission.NewForbidden(a, errors.New("scheduling.openshift.io/OriginPodNodeEnvironment: caches not synchronized")) - } - namespace, err := p.nsLister.Get(a.GetNamespace()) - if err != nil { - return apierrors.NewForbidden(resource, name, err) - } - - // If scheduler.alpha.kubernetes.io/node-selector is set on the pod, - // do not process the pod further. - if _, ok := namespace.ObjectMeta.Annotations[kubeProjectNodeSelector]; ok { - return nil - } - - selector := p.defaultNodeSelector - if projectNodeSelector, ok := namespace.ObjectMeta.Annotations[openShiftProjectNodeSelector]; ok { - selector = projectNodeSelector - } - projectNodeSelector, err := labelselector.Parse(selector) - if err != nil { - return err - } - - if labelselector.Conflicts(projectNodeSelector, pod.Spec.NodeSelector) { - return apierrors.NewForbidden(resource, name, fmt.Errorf("pod node label selector conflicts with its project node label selector")) - } - - if !mutationAllowed && len(labelselector.Merge(projectNodeSelector, pod.Spec.NodeSelector)) != len(pod.Spec.NodeSelector) { - // no conflict, different size => pod.Spec.NodeSelector does not contain projectNodeSelector - return apierrors.NewForbidden(resource, name, fmt.Errorf("pod node label selector does not extend project node label selector")) - } - - // modify pod node selector = project node selector + current pod node selector - pod.Spec.NodeSelector = labelselector.Merge(projectNodeSelector, pod.Spec.NodeSelector) - - return nil -} - -func (p *podNodeEnvironment) Admit(a admission.Attributes, _ admission.ObjectInterfaces) (err error) { - return p.admit(a, true) -} - -func (p *podNodeEnvironment) Validate(a admission.Attributes, _ admission.ObjectInterfaces) (err error) { - return p.admit(a, false) -} - -func (p *podNodeEnvironment) SetDefaultNodeSelector(in string) { - p.defaultNodeSelector = in -} - -func (p *podNodeEnvironment) SetExternalKubeInformerFactory(kubeInformers informers.SharedInformerFactory) { - p.nsLister = kubeInformers.Core().V1().Namespaces().Lister() - p.nsListerSynced = kubeInformers.Core().V1().Namespaces().Informer().HasSynced -} - -func (p *podNodeEnvironment) waitForSyncedStore(timeout <-chan time.Time) bool { - for !p.nsListerSynced() { - select { - case <-time.After(100 * time.Millisecond): - case <-timeout: - return p.nsListerSynced() - } - } - - return true -} - -func (p *podNodeEnvironment) ValidateInitialization() error { - if p.nsLister == nil { - return fmt.Errorf("project node environment plugin needs a namespace lister") - } - if p.nsListerSynced == nil { - return fmt.Errorf("project node environment plugin needs a namespace lister synced") - } - return nil -} - -func NewPodNodeEnvironment() (admission.Interface, error) { - return &podNodeEnvironment{ - Handler: admission.NewHandler(admission.Create), - }, nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/admission_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/admission_test.go deleted file mode 100644 index 570d6890a..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/admission_test.go +++ /dev/null @@ -1,157 +0,0 @@ -package nodeenv - -import ( - "strings" - "testing" - - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apiserver/pkg/admission" - corev1listers "k8s.io/client-go/listers/core/v1" - "k8s.io/client-go/tools/cache" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector" - kapi "k8s.io/kubernetes/pkg/apis/core" -) - -// TestPodAdmission verifies various scenarios involving pod/project/global node label selectors -func TestPodAdmission(t *testing.T) { - namespace := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "testProject", - Namespace: "", - }, - } - - handler := &podNodeEnvironment{} - pod := &kapi.Pod{ - ObjectMeta: metav1.ObjectMeta{Name: "testPod"}, - } - - tests := []struct { - defaultNodeSelector string - projectNodeSelector string - podNodeSelector map[string]string - mergedNodeSelector map[string]string - ignoreProjectNodeSelector bool - admit bool - testName string - }{ - { - defaultNodeSelector: "", - podNodeSelector: map[string]string{}, - mergedNodeSelector: map[string]string{}, - ignoreProjectNodeSelector: true, - admit: true, - testName: "No node selectors", - }, - { - defaultNodeSelector: "infra = false", - podNodeSelector: map[string]string{}, - mergedNodeSelector: map[string]string{"infra": "false"}, - ignoreProjectNodeSelector: true, - admit: true, - testName: "Default node selector and no conflicts", - }, - { - defaultNodeSelector: "", - projectNodeSelector: "infra = false", - podNodeSelector: map[string]string{}, - mergedNodeSelector: map[string]string{"infra": "false"}, - admit: true, - testName: "Project node selector and no conflicts", - }, - { - defaultNodeSelector: "infra = false", - projectNodeSelector: "", - podNodeSelector: map[string]string{}, - mergedNodeSelector: map[string]string{}, - admit: true, - testName: "Empty project node selector and no conflicts", - }, - { - defaultNodeSelector: "infra = false", - projectNodeSelector: "infra=true", - podNodeSelector: map[string]string{}, - mergedNodeSelector: map[string]string{"infra": "true"}, - admit: true, - testName: "Default and project node selector, no conflicts", - }, - { - defaultNodeSelector: "infra = false", - projectNodeSelector: "infra=true", - podNodeSelector: map[string]string{"env": "test"}, - mergedNodeSelector: map[string]string{"infra": "true", "env": "test"}, - admit: true, - testName: "Project and pod node selector, no conflicts", - }, - { - defaultNodeSelector: "env = test", - projectNodeSelector: "infra=true", - podNodeSelector: map[string]string{"infra": "false"}, - mergedNodeSelector: map[string]string{"infra": "false"}, - admit: false, - testName: "Conflicting pod and project node selector, one label", - }, - { - defaultNodeSelector: "env=dev", - projectNodeSelector: "infra=false, env = test", - podNodeSelector: map[string]string{"env": "dev", "color": "blue"}, - mergedNodeSelector: map[string]string{"env": "dev", "color": "blue"}, - admit: false, - testName: "Conflicting pod and project node selector, multiple labels", - }, - } - for _, test := range tests { - indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{}) - indexer.Add(namespace) - handler.nsLister = corev1listers.NewNamespaceLister(indexer) - handler.nsListerSynced = func() bool { return true } - handler.defaultNodeSelector = test.defaultNodeSelector - - if !test.ignoreProjectNodeSelector { - namespace.ObjectMeta.Annotations = map[string]string{"openshift.io/node-selector": test.projectNodeSelector} - } - pod.Spec = kapi.PodSpec{NodeSelector: test.podNodeSelector} - - attrs := admission.NewAttributesRecord(pod, nil, kapi.Kind("Pod").WithVersion("version"), "testProject", namespace.ObjectMeta.Name, kapi.Resource("pods").WithVersion("version"), "", admission.Create, false, nil) - err := handler.Admit(attrs, nil) - if test.admit && err != nil { - t.Errorf("Test: %s, expected no error but got: %s", test.testName, err) - } else if !test.admit && err == nil { - t.Errorf("Test: %s, expected an error", test.testName) - } else if err == nil { - if err := handler.Validate(attrs, nil); err != nil { - t.Errorf("Test: %s, unexpected Validate error after Admit succeeded: %v", test.testName, err) - } - } - - if !labelselector.Equals(test.mergedNodeSelector, pod.Spec.NodeSelector) { - t.Errorf("Test: %s, expected: %s but got: %s", test.testName, test.mergedNodeSelector, pod.Spec.NodeSelector) - } else if len(test.projectNodeSelector) > 0 { - firstProjectKey := strings.TrimSpace(strings.Split(test.projectNodeSelector, "=")[0]) - delete(pod.Spec.NodeSelector, firstProjectKey) - if err := handler.Validate(attrs, nil); err == nil { - t.Errorf("Test: %s, expected Validate error after removing project key %q", test.testName, firstProjectKey) - } - } - } -} - -func TestHandles(t *testing.T) { - for op, shouldHandle := range map[admission.Operation]bool{ - admission.Create: true, - admission.Update: false, - admission.Connect: false, - admission.Delete: false, - } { - nodeEnvionment, err := NewPodNodeEnvironment() - if err != nil { - t.Errorf("%v: error getting node environment: %v", op, err) - continue - } - - if e, a := shouldHandle, nodeEnvionment.Handles(op); e != a { - t.Errorf("%v: shouldHandle=%t, handles=%t", op, e, a) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/intializers.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/intializers.go deleted file mode 100644 index 534905cb0..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/intializers.go +++ /dev/null @@ -1,28 +0,0 @@ -package nodeenv - -import ( - "k8s.io/apiserver/pkg/admission" -) - -func NewInitializer(defaultNodeSelector string) admission.PluginInitializer { - return &localInitializer{ - defaultNodeSelector: defaultNodeSelector, - } -} - -type WantsDefaultNodeSelector interface { - SetDefaultNodeSelector(string) - admission.InitializationValidator -} - -type localInitializer struct { - defaultNodeSelector string -} - -// Initialize will check the initialization interfaces implemented by each plugin -// and provide the appropriate initialization data -func (i *localInitializer) Initialize(plugin admission.Interface) { - if wants, ok := plugin.(WantsDefaultNodeSelector); ok { - wants.SetDefaultNodeSelector(i.defaultNodeSelector) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector.go deleted file mode 100644 index 046d25339..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector.go +++ /dev/null @@ -1,359 +0,0 @@ -// labelselector is trim down version of k8s/pkg/labels/selector.go -// It only accepts exact label matches -// Example: "k1=v1, k2 = v2" -package labelselector - -import ( - "fmt" - - kvalidation "k8s.io/apimachinery/pkg/util/validation" - "k8s.io/apimachinery/pkg/util/validation/field" -) - -// constants definition for lexer token -type Token int - -const ( - ErrorToken Token = iota - EndOfStringToken - CommaToken - EqualsToken - IdentifierToken // to represent keys and values -) - -// string2token contains the mapping between lexer Token and token literal -// (except IdentifierToken, EndOfStringToken and ErrorToken since it makes no sense) -var string2token = map[string]Token{ - ",": CommaToken, - "=": EqualsToken, -} - -// ScannedItem are the item produced by the lexer. It contains the Token and the literal. -type ScannedItem struct { - tok Token - literal string -} - -// isWhitespace returns true if the rune is a space, tab, or newline. -func isWhitespace(ch byte) bool { - return ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n' -} - -// isSpecialSymbol detect if the character ch can be an operator -func isSpecialSymbol(ch byte) bool { - switch ch { - case '=', ',': - return true - } - return false -} - -// Lexer represents the Lexer struct for label selector. -// It contains necessary informationt to tokenize the input string -type Lexer struct { - // s stores the string to be tokenized - s string - // pos is the position currently tokenized - pos int -} - -// read return the character currently lexed -// increment the position and check the buffer overflow -func (l *Lexer) read() (b byte) { - b = 0 - if l.pos < len(l.s) { - b = l.s[l.pos] - l.pos++ - } - return b -} - -// unread 'undoes' the last read character -func (l *Lexer) unread() { - l.pos-- -} - -// scanIdOrKeyword scans string to recognize literal token or an identifier. -func (l *Lexer) scanIdOrKeyword() (tok Token, lit string) { - var buffer []byte -IdentifierLoop: - for { - switch ch := l.read(); { - case ch == 0: - break IdentifierLoop - case isSpecialSymbol(ch) || isWhitespace(ch): - l.unread() - break IdentifierLoop - default: - buffer = append(buffer, ch) - } - } - s := string(buffer) - if val, ok := string2token[s]; ok { // is a literal token - return val, s - } - return IdentifierToken, s // otherwise is an identifier -} - -// scanSpecialSymbol scans string starting with special symbol. -// special symbol identify non literal operators: "=" -func (l *Lexer) scanSpecialSymbol() (Token, string) { - lastScannedItem := ScannedItem{} - var buffer []byte -SpecialSymbolLoop: - for { - switch ch := l.read(); { - case ch == 0: - break SpecialSymbolLoop - case isSpecialSymbol(ch): - buffer = append(buffer, ch) - if token, ok := string2token[string(buffer)]; ok { - lastScannedItem = ScannedItem{tok: token, literal: string(buffer)} - } else if lastScannedItem.tok != 0 { - l.unread() - break SpecialSymbolLoop - } - default: - l.unread() - break SpecialSymbolLoop - } - } - if lastScannedItem.tok == 0 { - return ErrorToken, fmt.Sprintf("error expected: keyword found '%s'", buffer) - } - return lastScannedItem.tok, lastScannedItem.literal -} - -// skipWhiteSpaces consumes all blank characters -// returning the first non blank character -func (l *Lexer) skipWhiteSpaces(ch byte) byte { - for { - if !isWhitespace(ch) { - return ch - } - ch = l.read() - } -} - -// Lex returns a pair of Token and the literal -// literal is meaningfull only for IdentifierToken token -func (l *Lexer) Lex() (tok Token, lit string) { - switch ch := l.skipWhiteSpaces(l.read()); { - case ch == 0: - return EndOfStringToken, "" - case isSpecialSymbol(ch): - l.unread() - return l.scanSpecialSymbol() - default: - l.unread() - return l.scanIdOrKeyword() - } -} - -// Parser data structure contains the label selector parser data structure -type Parser struct { - l *Lexer - scannedItems []ScannedItem - position int -} - -// lookahead func returns the current token and string. No increment of current position -func (p *Parser) lookahead() (Token, string) { - tok, lit := p.scannedItems[p.position].tok, p.scannedItems[p.position].literal - return tok, lit -} - -// consume returns current token and string. Increments the the position -func (p *Parser) consume() (Token, string) { - p.position++ - if p.position > len(p.scannedItems) { - return EndOfStringToken, "" - } - tok, lit := p.scannedItems[p.position-1].tok, p.scannedItems[p.position-1].literal - return tok, lit -} - -// scan runs through the input string and stores the ScannedItem in an array -// Parser can now lookahead and consume the tokens -func (p *Parser) scan() { - for { - token, literal := p.l.Lex() - p.scannedItems = append(p.scannedItems, ScannedItem{token, literal}) - if token == EndOfStringToken { - break - } - } -} - -// parse runs the left recursive descending algorithm -// on input string. It returns a list of map[key]value. -func (p *Parser) parse() (map[string]string, error) { - p.scan() // init scannedItems - - labelsMap := map[string]string{} - for { - tok, lit := p.lookahead() - switch tok { - case IdentifierToken: - key, value, err := p.parseLabel() - if err != nil { - return nil, fmt.Errorf("unable to parse requirement: %v", err) - } - labelsMap[key] = value - t, l := p.consume() - switch t { - case EndOfStringToken: - return labelsMap, nil - case CommaToken: - t2, l2 := p.lookahead() - if t2 != IdentifierToken { - return nil, fmt.Errorf("found '%s', expected: identifier after ','", l2) - } - default: - return nil, fmt.Errorf("found '%s', expected: ',' or 'end of string'", l) - } - case EndOfStringToken: - return labelsMap, nil - default: - return nil, fmt.Errorf("found '%s', expected: identifier or 'end of string'", lit) - } - } -} - -func (p *Parser) parseLabel() (string, string, error) { - key, err := p.parseKey() - if err != nil { - return "", "", err - } - op, err := p.parseOperator() - if err != nil { - return "", "", err - } - if op != "=" { - return "", "", fmt.Errorf("invalid operator: %s, expected: '='", op) - } - value, err := p.parseExactValue() - if err != nil { - return "", "", err - } - return key, value, nil -} - -// parseKey parse literals. -func (p *Parser) parseKey() (string, error) { - tok, literal := p.consume() - if tok != IdentifierToken { - err := fmt.Errorf("found '%s', expected: identifier", literal) - return "", err - } - if err := validateLabelKey(literal); err != nil { - return "", err - } - return literal, nil -} - -// parseOperator returns operator -func (p *Parser) parseOperator() (op string, err error) { - tok, lit := p.consume() - switch tok { - case EqualsToken: - op = "=" - default: - return "", fmt.Errorf("found '%s', expected: '='", lit) - } - return op, nil -} - -// parseExactValue parses the only value for exact match style -func (p *Parser) parseExactValue() (string, error) { - tok, lit := p.consume() - if tok != IdentifierToken && tok != EndOfStringToken { - return "", fmt.Errorf("found '%s', expected: identifier", lit) - } - if err := validateLabelValue(lit); err != nil { - return "", err - } - return lit, nil -} - -// Parse takes a string representing a selector and returns -// map[key]value, or an error. -// The input will cause an error if it does not follow this form: -// -// ::= [ | "," ] -// ::= KEY "=" VALUE -// KEY is a sequence of one or more characters following [ DNS_SUBDOMAIN "/" ] DNS_LABEL -// VALUE is a sequence of zero or more characters "([A-Za-z0-9_-\.])". Max length is 64 character. -// Delimiter is white space: (' ', '\t') -// -// -func Parse(selector string) (map[string]string, error) { - p := &Parser{l: &Lexer{s: selector, pos: 0}} - labels, error := p.parse() - if error != nil { - return map[string]string{}, error - } - return labels, nil -} - -// Conflicts takes 2 maps -// returns true if there a key match between the maps but the value doesn't match -// returns false in other cases -func Conflicts(labels1, labels2 map[string]string) bool { - for k, v := range labels1 { - if val, match := labels2[k]; match { - if val != v { - return true - } - } - } - return false -} - -// Merge combines given maps -// Note: It doesn't not check for any conflicts between the maps -func Merge(labels1, labels2 map[string]string) map[string]string { - mergedMap := map[string]string{} - - for k, v := range labels1 { - mergedMap[k] = v - } - for k, v := range labels2 { - mergedMap[k] = v - } - return mergedMap -} - -// Equals returns true if the given maps are equal -func Equals(labels1, labels2 map[string]string) bool { - if len(labels1) != len(labels2) { - return false - } - - for k, v := range labels1 { - value, ok := labels2[k] - if !ok { - return false - } - if value != v { - return false - } - } - return true -} - -const qualifiedNameErrorMsg string = "must match format [ DNS 1123 subdomain / ] DNS 1123 label" - -func validateLabelKey(k string) error { - if len(kvalidation.IsQualifiedName(k)) != 0 { - return field.Invalid(field.NewPath("label key"), k, qualifiedNameErrorMsg) - } - return nil -} - -func validateLabelValue(v string) error { - if len(kvalidation.IsValidLabelValue(v)) != 0 { - return field.Invalid(field.NewPath("label value"), v, qualifiedNameErrorMsg) - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector_test.go deleted file mode 100644 index f0729ae1b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv/labelselector/labelselector_test.go +++ /dev/null @@ -1,181 +0,0 @@ -package labelselector - -import ( - "testing" -) - -func TestLabelSelectorParse(t *testing.T) { - tests := []struct { - selector string - labels map[string]string - valid bool - }{ - { - selector: "", - labels: map[string]string{}, - valid: true, - }, - { - selector: " ", - labels: map[string]string{}, - valid: true, - }, - { - selector: "x=a", - labels: map[string]string{"x": "a"}, - valid: true, - }, - { - selector: "x=a,y=b,z=c", - labels: map[string]string{"x": "a", "y": "b", "z": "c"}, - valid: true, - }, - { - selector: "x = a, y=b ,z = c ", - labels: map[string]string{"x": "a", "y": "b", "z": "c"}, - valid: true, - }, - { - selector: "color=green, env = test ,service= front ", - labels: map[string]string{"color": "green", "env": "test", "service": "front"}, - valid: true, - }, - { - selector: ",", - labels: map[string]string{}, - valid: false, - }, - { - selector: "x", - labels: map[string]string{}, - valid: false, - }, - { - selector: "x,y", - labels: map[string]string{}, - valid: false, - }, - { - selector: "x=$y", - labels: map[string]string{}, - valid: false, - }, - { - selector: "x!=y", - labels: map[string]string{}, - valid: false, - }, - { - selector: "x==y", - labels: map[string]string{}, - valid: false, - }, - { - selector: "x=a||y=b", - labels: map[string]string{}, - valid: false, - }, - { - selector: "x in (y)", - labels: map[string]string{}, - valid: false, - }, - { - selector: "x notin (y)", - labels: map[string]string{}, - valid: false, - }, - { - selector: "x y", - labels: map[string]string{}, - valid: false, - }, - { - selector: "node-role.kubernetes.io/infra=", - labels: map[string]string{"node-role.kubernetes.io/infra": ""}, - valid: true, - }, - } - for _, test := range tests { - labels, err := Parse(test.selector) - if test.valid && err != nil { - t.Errorf("selector: %s, expected no error but got: %s", test.selector, err) - } else if !test.valid && err == nil { - t.Errorf("selector: %s, expected an error", test.selector) - } - - if !Equals(labels, test.labels) { - t.Errorf("expected: %s but got: %s", test.labels, labels) - } - } -} - -func TestLabelConflict(t *testing.T) { - tests := []struct { - labels1 map[string]string - labels2 map[string]string - conflict bool - }{ - { - labels1: map[string]string{}, - labels2: map[string]string{}, - conflict: false, - }, - { - labels1: map[string]string{"env": "test"}, - labels2: map[string]string{"infra": "true"}, - conflict: false, - }, - { - labels1: map[string]string{"env": "test"}, - labels2: map[string]string{"infra": "true", "env": "test"}, - conflict: false, - }, - { - labels1: map[string]string{"env": "test"}, - labels2: map[string]string{"env": "dev"}, - conflict: true, - }, - { - labels1: map[string]string{"env": "test", "infra": "false"}, - labels2: map[string]string{"infra": "true", "color": "blue"}, - conflict: true, - }, - } - for _, test := range tests { - conflict := Conflicts(test.labels1, test.labels2) - if conflict != test.conflict { - t.Errorf("expected: %v but got: %v", test.conflict, conflict) - } - } -} - -func TestLabelMerge(t *testing.T) { - tests := []struct { - labels1 map[string]string - labels2 map[string]string - mergedLabels map[string]string - }{ - { - labels1: map[string]string{}, - labels2: map[string]string{}, - mergedLabels: map[string]string{}, - }, - { - labels1: map[string]string{"infra": "true"}, - labels2: map[string]string{}, - mergedLabels: map[string]string{"infra": "true"}, - }, - { - labels1: map[string]string{"infra": "true"}, - labels2: map[string]string{"env": "test", "color": "blue"}, - mergedLabels: map[string]string{"infra": "true", "env": "test", "color": "blue"}, - }, - } - for _, test := range tests { - mergedLabels := Merge(test.labels1, test.labels2) - if !Equals(mergedLabels, test.mergedLabels) { - t.Errorf("expected: %v but got: %v", test.mergedLabels, mergedLabels) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission.go deleted file mode 100644 index c185804d4..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission.go +++ /dev/null @@ -1,204 +0,0 @@ -package podnodeconstraints - -import ( - "fmt" - "io" - - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/apiserver/pkg/authorization/authorizer" - "k8s.io/klog" - coreapi "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/kubernetes/pkg/auth/nodeidentifier" - - "github.com/openshift/library-go/pkg/config/helpers" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints" - v1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints/v1" -) - -const PluginName = "scheduling.openshift.io/PodNodeConstraints" - -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, - func(config io.Reader) (admission.Interface, error) { - pluginConfig, err := readConfig(config) - if err != nil { - return nil, err - } - if pluginConfig == nil { - klog.Infof("Admission plugin %q is not configured so it will be disabled.", PluginName) - return nil, nil - } - return NewPodNodeConstraints(pluginConfig, nodeidentifier.NewDefaultNodeIdentifier()), nil - }) -} - -// NewPodNodeConstraints creates a new admission plugin to prevent objects that contain pod templates -// from containing node bindings by name or selector based on role permissions. -func NewPodNodeConstraints(config *podnodeconstraints.PodNodeConstraintsConfig, nodeIdentifier nodeidentifier.NodeIdentifier) admission.Interface { - plugin := podNodeConstraints{ - config: config, - Handler: admission.NewHandler(admission.Create, admission.Update), - nodeIdentifier: nodeIdentifier, - } - if config != nil { - plugin.selectorLabelBlacklist = sets.NewString(config.NodeSelectorLabelBlacklist...) - } - - return &plugin -} - -type podNodeConstraints struct { - *admission.Handler - selectorLabelBlacklist sets.String - config *podnodeconstraints.PodNodeConstraintsConfig - authorizer authorizer.Authorizer - nodeIdentifier nodeidentifier.NodeIdentifier -} - -var _ = initializer.WantsAuthorizer(&podNodeConstraints{}) -var _ = admission.ValidationInterface(&podNodeConstraints{}) - -func shouldCheckResource(resource schema.GroupResource, kind schema.GroupKind) (bool, error) { - expectedKind, shouldCheck := resourcesToCheck[resource] - if !shouldCheck { - return false, nil - } - if expectedKind != kind { - return false, fmt.Errorf("Unexpected resource kind %v for resource %v", &kind, &resource) - } - return true, nil -} - -// resourcesToCheck is a map of resources and corresponding kinds of things that we want handled in this plugin -var resourcesToCheck = map[schema.GroupResource]schema.GroupKind{ - coreapi.Resource("pods"): coreapi.Kind("Pod"), -} - -func readConfig(reader io.Reader) (*podnodeconstraints.PodNodeConstraintsConfig, error) { - obj, err := helpers.ReadYAMLToInternal(reader, podnodeconstraints.Install, v1.Install) - if err != nil { - return nil, err - } - if obj == nil { - return nil, nil - } - config, ok := obj.(*podnodeconstraints.PodNodeConstraintsConfig) - if !ok { - return nil, fmt.Errorf("unexpected config object: %#v", obj) - } - // No validation needed since config is just list of strings - return config, nil -} - -func (o *podNodeConstraints) Validate(attr admission.Attributes, _ admission.ObjectInterfaces) error { - switch { - case o.config == nil, - attr.GetSubresource() != "": - return nil - } - shouldCheck, err := shouldCheckResource(attr.GetResource().GroupResource(), attr.GetKind().GroupKind()) - if err != nil { - return err - } - if !shouldCheck { - return nil - } - // Only check Create operation on pods - if attr.GetResource().GroupResource() == coreapi.Resource("pods") && attr.GetOperation() != admission.Create { - return nil - } - - return o.validatePodSpec(attr, attr.GetObject().(*coreapi.Pod).Spec) -} - -// validate PodSpec if NodeName or NodeSelector are specified -func (o *podNodeConstraints) validatePodSpec(attr admission.Attributes, ps coreapi.PodSpec) error { - // a node creating a mirror pod that targets itself is allowed - // see the NodeRestriction plugin for further details - if o.isNodeSelfTargetWithMirrorPod(attr, ps.NodeName) { - return nil - } - - matchingLabels := []string{} - // nodeSelector blacklist filter - for nodeSelectorLabel := range ps.NodeSelector { - if o.selectorLabelBlacklist.Has(nodeSelectorLabel) { - matchingLabels = append(matchingLabels, nodeSelectorLabel) - } - } - // nodeName constraint - if len(ps.NodeName) > 0 || len(matchingLabels) > 0 { - allow, err := o.checkPodsBindAccess(attr) - if err != nil { - return err - } - if !allow { - switch { - case len(ps.NodeName) > 0 && len(matchingLabels) == 0: - return admission.NewForbidden(attr, fmt.Errorf("node selection by nodeName is prohibited by policy for your role")) - case len(ps.NodeName) == 0 && len(matchingLabels) > 0: - return admission.NewForbidden(attr, fmt.Errorf("node selection by label(s) %v is prohibited by policy for your role", matchingLabels)) - case len(ps.NodeName) > 0 && len(matchingLabels) > 0: - return admission.NewForbidden(attr, fmt.Errorf("node selection by nodeName and label(s) %v is prohibited by policy for your role", matchingLabels)) - } - } - } - return nil -} - -func (o *podNodeConstraints) SetAuthorizer(a authorizer.Authorizer) { - o.authorizer = a -} - -func (o *podNodeConstraints) ValidateInitialization() error { - if o.authorizer == nil { - return fmt.Errorf("%s requires an authorizer", PluginName) - } - if o.nodeIdentifier == nil { - return fmt.Errorf("%s requires a node identifier", PluginName) - } - return nil -} - -// build LocalSubjectAccessReview struct to validate role via checkAccess -func (o *podNodeConstraints) checkPodsBindAccess(attr admission.Attributes) (bool, error) { - authzAttr := authorizer.AttributesRecord{ - User: attr.GetUserInfo(), - Verb: "create", - Namespace: attr.GetNamespace(), - Resource: "pods", - Subresource: "binding", - APIGroup: coreapi.GroupName, - ResourceRequest: true, - } - if attr.GetResource().GroupResource() == coreapi.Resource("pods") { - authzAttr.Name = attr.GetName() - } - authorized, _, err := o.authorizer.Authorize(authzAttr) - return authorized == authorizer.DecisionAllow, err -} - -func (o *podNodeConstraints) isNodeSelfTargetWithMirrorPod(attr admission.Attributes, nodeName string) bool { - // make sure we are actually trying to target a node - if len(nodeName) == 0 { - return false - } - // this check specifically requires the object to be pod (unlike the other checks where we want any pod spec) - pod, ok := attr.GetObject().(*coreapi.Pod) - if !ok { - return false - } - // note that anyone can create a mirror pod, but they are not privileged in any way - // they are actually highly constrained since they cannot reference secrets - // nodes can only create and delete them, and they will delete any "orphaned" mirror pods - if _, isMirrorPod := pod.Annotations[coreapi.MirrorPodAnnotationKey]; !isMirrorPod { - return false - } - // we are targeting a node with a mirror pod - // confirm the user is a node that is targeting itself - actualNodeName, isNode := o.nodeIdentifier.NodeIdentity(attr.GetUserInfo()) - return isNode && actualNodeName == nodeName -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission_test.go deleted file mode 100644 index 66cb76fae..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/admission_test.go +++ /dev/null @@ -1,282 +0,0 @@ -package podnodeconstraints - -import ( - "bytes" - "fmt" - "testing" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/apiserver/pkg/authorization/authorizer" - kapi "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/kubernetes/pkg/auth/nodeidentifier" - "k8s.io/kubernetes/pkg/serviceaccount" - - authorizationv1 "github.com/openshift/api/authorization/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/apis/podnodeconstraints" -) - -func TestPodNodeConstraints(t *testing.T) { - ns := metav1.NamespaceDefault - tests := []struct { - config *podnodeconstraints.PodNodeConstraintsConfig - resource runtime.Object - kind schema.GroupKind - groupresource schema.GroupResource - userinfo user.Info - reviewResponse *authorizationv1.SubjectAccessReviewResponse - expectedResource string - expectedErrorMsg string - }{ - // 0: expect unspecified defaults to not error - { - config: emptyConfig(), - resource: defaultPod(), - userinfo: serviceaccount.UserInfo("", "", ""), - reviewResponse: reviewResponse(false, ""), - expectedResource: "pods/binding", - expectedErrorMsg: "", - }, - // 1: expect nodeSelector to error with user which lacks "pods/binding" access - { - config: testConfig(), - resource: nodeSelectorPod(), - userinfo: serviceaccount.UserInfo("", "", ""), - reviewResponse: reviewResponse(false, ""), - expectedResource: "pods/binding", - expectedErrorMsg: "node selection by label(s) [bogus] is prohibited by policy for your role", - }, - // 2: expect nodeName to fail with user that lacks "pods/binding" access - { - config: testConfig(), - resource: nodeNamePod(), - userinfo: serviceaccount.UserInfo("herpy", "derpy", ""), - reviewResponse: reviewResponse(false, ""), - expectedResource: "pods/binding", - expectedErrorMsg: "node selection by nodeName is prohibited by policy for your role", - }, - // 3: expect nodeName and nodeSelector to fail with user that lacks "pods/binding" access - { - config: testConfig(), - resource: nodeNameNodeSelectorPod(), - userinfo: serviceaccount.UserInfo("herpy", "derpy", ""), - reviewResponse: reviewResponse(false, ""), - expectedResource: "pods/binding", - expectedErrorMsg: "node selection by nodeName and label(s) [bogus] is prohibited by policy for your role", - }, - // 4: expect nodeSelector to succeed with user that has "pods/binding" access - { - config: testConfig(), - resource: nodeSelectorPod(), - userinfo: serviceaccount.UserInfo("openshift-infra", "daemonset-controller", ""), - reviewResponse: reviewResponse(true, ""), - expectedResource: "pods/binding", - expectedErrorMsg: "", - }, - // 5: expect nodeName to succeed with user that has "pods/binding" access - { - config: testConfig(), - resource: nodeNamePod(), - userinfo: serviceaccount.UserInfo("openshift-infra", "daemonset-controller", ""), - reviewResponse: reviewResponse(true, ""), - expectedResource: "pods/binding", - expectedErrorMsg: "", - }, - // 6: expect nil config to bypass admission - { - config: nil, - resource: defaultPod(), - userinfo: serviceaccount.UserInfo("", "", ""), - reviewResponse: reviewResponse(false, ""), - expectedResource: "pods/binding", - expectedErrorMsg: "", - }, - // 7: expect nodeName to succeed with node user self targeting mirror pod - { - config: testConfig(), - resource: nodeNameMirrorPod(), - userinfo: &user.DefaultInfo{Name: "system:node:frank", Groups: []string{user.NodesGroup}}, - expectedErrorMsg: "", - }, - // 8: expect nodeName to fail with node user self targeting non-mirror pod - { - config: testConfig(), - resource: nodeNamePod(), - userinfo: &user.DefaultInfo{Name: "system:node:frank", Groups: []string{user.NodesGroup}}, - expectedErrorMsg: "node selection by nodeName is prohibited by policy for your role", - }, - // 9: expect nodeName to fail with node user non-self targeting mirror pod - { - config: testConfig(), - resource: nodeNameMirrorPod(), - userinfo: &user.DefaultInfo{Name: "system:node:bob", Groups: []string{user.NodesGroup}}, - expectedErrorMsg: "node selection by nodeName is prohibited by policy for your role", - }, - // 10: expect nodeName to fail with node user non-self targeting non-mirror pod - { - config: testConfig(), - resource: nodeNamePod(), - userinfo: &user.DefaultInfo{Name: "system:node:bob", Groups: []string{user.NodesGroup}}, - expectedErrorMsg: "node selection by nodeName is prohibited by policy for your role", - }, - } - for i, tc := range tests { - var expectedError error - errPrefix := fmt.Sprintf("%d", i) - prc := NewPodNodeConstraints(tc.config, nodeidentifier.NewDefaultNodeIdentifier()) - prc.(initializer.WantsAuthorizer).SetAuthorizer(fakeAuthorizer(t)) - err := prc.(admission.InitializationValidator).ValidateInitialization() - if err != nil { - checkAdmitError(t, err, expectedError, errPrefix) - continue - } - attrs := admission.NewAttributesRecord(tc.resource, nil, kapi.Kind("Pod").WithVersion("version"), ns, "test", kapi.Resource("pods").WithVersion("version"), "", admission.Create, false, tc.userinfo) - if tc.expectedErrorMsg != "" { - expectedError = admission.NewForbidden(attrs, fmt.Errorf(tc.expectedErrorMsg)) - } - err = prc.(admission.ValidationInterface).Validate(attrs, nil) - checkAdmitError(t, err, expectedError, errPrefix) - } -} - -func TestPodNodeConstraintsPodUpdate(t *testing.T) { - ns := metav1.NamespaceDefault - var expectedError error - errPrefix := "PodUpdate" - prc := NewPodNodeConstraints(testConfig(), nodeidentifier.NewDefaultNodeIdentifier()) - prc.(initializer.WantsAuthorizer).SetAuthorizer(fakeAuthorizer(t)) - err := prc.(admission.InitializationValidator).ValidateInitialization() - if err != nil { - checkAdmitError(t, err, expectedError, errPrefix) - return - } - attrs := admission.NewAttributesRecord(nodeNamePod(), nodeNamePod(), kapi.Kind("Pod").WithVersion("version"), ns, "test", kapi.Resource("pods").WithVersion("version"), "", admission.Update, false, serviceaccount.UserInfo("", "", "")) - err = prc.(admission.ValidationInterface).Validate(attrs, nil) - checkAdmitError(t, err, expectedError, errPrefix) -} - -func TestPodNodeConstraintsNonHandledResources(t *testing.T) { - ns := metav1.NamespaceDefault - errPrefix := "ResourceQuotaTest" - var expectedError error - prc := NewPodNodeConstraints(testConfig(), nodeidentifier.NewDefaultNodeIdentifier()) - prc.(initializer.WantsAuthorizer).SetAuthorizer(fakeAuthorizer(t)) - err := prc.(admission.InitializationValidator).ValidateInitialization() - if err != nil { - checkAdmitError(t, err, expectedError, errPrefix) - return - } - attrs := admission.NewAttributesRecord(resourceQuota(), nil, kapi.Kind("ResourceQuota").WithVersion("version"), ns, "test", kapi.Resource("resourcequotas").WithVersion("version"), "", admission.Create, false, serviceaccount.UserInfo("", "", "")) - err = prc.(admission.ValidationInterface).Validate(attrs, nil) - checkAdmitError(t, err, expectedError, errPrefix) -} - -func emptyConfig() *podnodeconstraints.PodNodeConstraintsConfig { - return &podnodeconstraints.PodNodeConstraintsConfig{} -} - -func testConfig() *podnodeconstraints.PodNodeConstraintsConfig { - return &podnodeconstraints.PodNodeConstraintsConfig{ - NodeSelectorLabelBlacklist: []string{"bogus"}, - } -} - -func defaultPod() *kapi.Pod { - pod := &kapi.Pod{} - return pod -} - -func nodeNameNodeSelectorPod() *kapi.Pod { - pod := &kapi.Pod{} - pod.Spec.NodeName = "frank" - pod.Spec.NodeSelector = map[string]string{"bogus": "frank"} - return pod -} - -func nodeNamePod() *kapi.Pod { - pod := &kapi.Pod{} - pod.Spec.NodeName = "frank" - return pod -} - -func nodeNameMirrorPod() *kapi.Pod { - pod := &kapi.Pod{} - pod.Annotations = map[string]string{kapi.MirrorPodAnnotationKey: "true"} - pod.Spec.NodeName = "frank" - return pod -} - -func nodeSelectorPod() *kapi.Pod { - pod := &kapi.Pod{} - pod.Spec.NodeSelector = map[string]string{"bogus": "frank"} - return pod -} - -func resourceQuota() runtime.Object { - rq := &kapi.ResourceQuota{} - return rq -} - -func checkAdmitError(t *testing.T, err error, expectedError error, prefix string) { - switch { - case expectedError == nil && err == nil: - // continue - case expectedError != nil && err != nil && err.Error() != expectedError.Error(): - t.Errorf("%s: expected error %q, got: %q", prefix, expectedError.Error(), err.Error()) - case expectedError == nil && err != nil: - t.Errorf("%s: expected no error, got: %q", prefix, err.Error()) - case expectedError != nil && err == nil: - t.Errorf("%s: expected error %q, no error received", prefix, expectedError.Error()) - } -} - -type fakeTestAuthorizer struct { - t *testing.T -} - -func fakeAuthorizer(t *testing.T) authorizer.Authorizer { - return &fakeTestAuthorizer{ - t: t, - } -} - -func (a *fakeTestAuthorizer) Authorize(attributes authorizer.Attributes) (authorizer.Decision, string, error) { - ui := attributes.GetUser() - if ui == nil { - return authorizer.DecisionNoOpinion, "", fmt.Errorf("No valid UserInfo for Context") - } - // User with pods/bindings. permission: - if ui.GetName() == "system:serviceaccount:openshift-infra:daemonset-controller" { - return authorizer.DecisionAllow, "", nil - } - // User without pods/bindings. permission: - return authorizer.DecisionNoOpinion, "", nil -} - -func reviewResponse(allowed bool, msg string) *authorizationv1.SubjectAccessReviewResponse { - return &authorizationv1.SubjectAccessReviewResponse{ - Allowed: allowed, - Reason: msg, - } -} - -func TestReadConfig(t *testing.T) { - configStr := `apiVersion: scheduling.openshift.io/v1 -kind: PodNodeConstraintsConfig -nodeSelectorLabelBlacklist: - - bogus - - foo -` - buf := bytes.NewBufferString(configStr) - config, err := readConfig(buf) - if err != nil { - t.Fatalf("unexpected error reading config: %v", err) - } - if len(config.NodeSelectorLabelBlacklist) == 0 { - t.Fatalf("NodeSelectorLabelBlacklist didn't take specified value") - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/doc.go deleted file mode 100644 index dfdf50a81..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/podnodeconstraints/doc.go +++ /dev/null @@ -1,44 +0,0 @@ -/* -Package podnodeconstraints contains the PodNodeConstraints admission -control plugin. This plugin allows administrators to set policy -governing the use of the NodeName and NodeSelector attributes in pod -specs. - -Enabling this plugin will prevent the use of the NodeName field in Pod -templates for users and serviceaccounts which lack the "pods/binding" -permission, and which don't belong to groups which have the -"pods/binding" permission. - -This plugin will also prevent users, serviceaccounts and groups which -lack the "pods/binding" permission from specifying the NodeSelector field -in Pod templates for labels which appear in the -nodeSelectorLabelBlacklist list field. - -Configuration - -The plugin is configured via a PodNodeConstraintsConfig object in the -origin and kubernetes Master configs: - -admissionConfig: - pluginConfig: - PodNodeConstraints: - configuration: - apiVersion: v1 - kind: PodNodeConstraintsConfig - nodeSelectorLabelBlacklist: - - label1 - - label2 -... -kubernetesMasterConfig: - admissionConfig: - pluginConfig: - PodNodeConstraints: - configuration: - apiVersion: v1 - kind: PodNodeConstraintsConfig - nodeSelectorLabelBlacklist: - - label1 - - label2 -*/ - -package podnodeconstraints diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/admission.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/admission.go deleted file mode 100644 index 85383db81..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/admission.go +++ /dev/null @@ -1,291 +0,0 @@ -package sccadmission - -import ( - "fmt" - "io" - "sort" - "strings" - - apiequality "k8s.io/apimachinery/pkg/api/equality" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/apiserver/pkg/authorization/authorizer" - "k8s.io/client-go/kubernetes" - "k8s.io/klog" - coreapi "k8s.io/kubernetes/pkg/apis/core" - kapihelper "k8s.io/kubernetes/pkg/apis/core/helper" - rbacregistry "k8s.io/kubernetes/pkg/registry/rbac" - "k8s.io/kubernetes/pkg/serviceaccount" - - securityv1 "github.com/openshift/api/security/v1" - securityv1informer "github.com/openshift/client-go/security/informers/externalversions/security/v1" - securityv1listers "github.com/openshift/client-go/security/listers/security/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching" -) - -const PluginName = "security.openshift.io/SecurityContextConstraint" - -func Register(plugins *admission.Plugins) { - plugins.Register(PluginName, - func(config io.Reader) (admission.Interface, error) { - return NewConstraint(), nil - }) -} - -type constraint struct { - *admission.Handler - client kubernetes.Interface - sccLister securityv1listers.SecurityContextConstraintsLister - authorizer authorizer.Authorizer -} - -var ( - _ = initializer.WantsAuthorizer(&constraint{}) - _ = initializer.WantsExternalKubeClientSet(&constraint{}) - _ = WantsSecurityInformer(&constraint{}) - _ = admission.ValidationInterface(&constraint{}) - _ = admission.MutationInterface(&constraint{}) -) - -// NewConstraint creates a new SCC constraint admission plugin. -func NewConstraint() *constraint { - return &constraint{ - Handler: admission.NewHandler(admission.Create, admission.Update), - } -} - -// Admit determines if the pod should be admitted based on the requested security context -// and the available SCCs. -// -// 1. Find SCCs for the user. -// 2. Find SCCs for the SA. If there is an error retrieving SA SCCs it is not fatal. -// 3. Remove duplicates between the user/SA SCCs. -// 4. Create the providers, includes setting pre-allocated values if necessary. -// 5. Try to generate and validate an SCC with providers. If we find one then admit the pod -// with the validated SCC. If we don't find any reject the pod and give all errors from the -// failed attempts. -// On updates, the BeforeUpdate of the pod strategy only zeroes out the status. That means that -// any change that claims the pod is no longer privileged will be removed. That should hold until -// we get a true old/new set of objects in. -func (c *constraint) Admit(a admission.Attributes, _ admission.ObjectInterfaces) error { - if ignore, err := shouldIgnore(a); err != nil { - return err - } else if ignore { - return nil - } - pod := a.GetObject().(*coreapi.Pod) - - // TODO(liggitt): allow spec mutation during initializing updates? - specMutationAllowed := a.GetOperation() == admission.Create - - allowedPod, sccName, validationErrs, err := c.computeSecurityContext(a, pod, specMutationAllowed, "") - if err != nil { - return admission.NewForbidden(a, err) - } - - if allowedPod != nil { - *pod = *allowedPod - // annotate and accept the pod - klog.V(4).Infof("pod %s (generate: %s) validated against provider %s", pod.Name, pod.GenerateName, sccName) - if pod.ObjectMeta.Annotations == nil { - pod.ObjectMeta.Annotations = map[string]string{} - } - pod.ObjectMeta.Annotations[securityv1.ValidatedSCCAnnotation] = sccName - return nil - } - - // we didn't validate against any security context constraint provider, reject the pod and give the errors for each attempt - klog.V(4).Infof("unable to validate pod %s (generate: %s) against any security context constraint: %v", pod.Name, pod.GenerateName, validationErrs) - return admission.NewForbidden(a, fmt.Errorf("unable to validate against any security context constraint: %v", validationErrs)) -} - -func (c *constraint) Validate(a admission.Attributes, _ admission.ObjectInterfaces) error { - if ignore, err := shouldIgnore(a); err != nil { - return err - } else if ignore { - return nil - } - pod := a.GetObject().(*coreapi.Pod) - - // compute the context. Mutation is not allowed. ValidatedSCCAnnotation is used as a hint to gain same speed-up. - allowedPod, _, validationErrs, err := c.computeSecurityContext(a, pod, false, pod.ObjectMeta.Annotations[securityv1.ValidatedSCCAnnotation]) - if err != nil { - return admission.NewForbidden(a, err) - } - if allowedPod != nil && apiequality.Semantic.DeepEqual(pod, allowedPod) { - return nil - } - - // we didn't validate against any provider, reject the pod and give the errors for each attempt - klog.V(4).Infof("unable to validate pod %s (generate: %s) in namespace %s against any security context constraint: %v", pod.Name, pod.GenerateName, a.GetNamespace(), validationErrs) - return admission.NewForbidden(a, fmt.Errorf("unable to validate against any security context constraint: %v", validationErrs)) -} - -func (c *constraint) computeSecurityContext(a admission.Attributes, pod *coreapi.Pod, specMutationAllowed bool, validatedSCCHint string) (*coreapi.Pod, string, field.ErrorList, error) { - // get all constraints that are usable by the user - klog.V(4).Infof("getting security context constraints for pod %s (generate: %s) in namespace %s with user info %v", pod.Name, pod.GenerateName, a.GetNamespace(), a.GetUserInfo()) - - constraints, err := sccmatching.NewDefaultSCCMatcher(c.sccLister, nil).FindApplicableSCCs(a.GetNamespace()) - if err != nil { - return nil, "", nil, admission.NewForbidden(a, err) - } - if len(constraints) == 0 { - sccs, err := c.sccLister.List(labels.Everything()) - if err != nil { - return nil, "", nil, admission.NewForbidden(a, err) - } - if len(sccs) == 0 { - return nil, "", nil, admission.NewForbidden(a, fmt.Errorf("no SecurityContextConstraints found in cluster")) - } - return nil, "", nil, admission.NewForbidden(a, fmt.Errorf("no SecurityContextConstraints found in namespace %s", a.GetNamespace())) - } - - // If mutation is not allowed and validatedSCCHint is provided, check the validated policy first. - // Keep the other the same for everything else - sort.SliceStable(constraints, func(i, j int) bool { - if !specMutationAllowed { - if constraints[i].Name == validatedSCCHint { - return true - } - if constraints[j].Name == validatedSCCHint { - return false - } - } - return i < j - }) - - providers, errs := sccmatching.CreateProvidersFromConstraints(a.GetNamespace(), constraints, c.client) - logProviders(pod, providers, errs) - - if len(providers) == 0 { - return nil, "", nil, admission.NewForbidden(a, fmt.Errorf("no SecurityContextConstraintsProvider available to validate pod request")) - } - - // all containers in a single pod must validate under a single provider or we will reject the request - var ( - allowedPod *coreapi.Pod - allowingProvider sccmatching.SecurityContextConstraintsProvider - validationErrs field.ErrorList - saUserInfo user.Info - ) - - userInfo := a.GetUserInfo() - if len(pod.Spec.ServiceAccountName) > 0 { - saUserInfo = serviceaccount.UserInfo(a.GetNamespace(), pod.Spec.ServiceAccountName, "") - } - -loop: - for _, provider := range providers { - // Get the SCC attributes required to decide whether the SCC applies for current user/SA - sccName := provider.GetSCCName() - sccUsers := provider.GetSCCUsers() - sccGroups := provider.GetSCCGroups() - - // continue to the next provider if the current SCC one does not apply to either the user or the serviceaccount - if !sccmatching.ConstraintAppliesTo(sccName, sccUsers, sccGroups, userInfo, a.GetNamespace(), c.authorizer) && - !(saUserInfo != nil && sccmatching.ConstraintAppliesTo(sccName, sccUsers, sccGroups, saUserInfo, a.GetNamespace(), c.authorizer)) { - continue - } - - podCopy := pod.DeepCopy() - if errs := sccmatching.AssignSecurityContext(provider, podCopy, field.NewPath(fmt.Sprintf("provider %s: ", sccName))); len(errs) > 0 { - validationErrs = append(validationErrs, errs...) - continue - } - - // the entire pod validated - switch { - case specMutationAllowed: - // if mutation is allowed, use the first found SCC that allows the pod. - // This behavior is different from Kubernetes which tries to search a non-mutating provider - // even on creating. We prefer most restrictive SCC in this case even if it mutates a pod. - allowedPod = podCopy - allowingProvider = provider - klog.V(5).Infof("pod %s (generate: %s) validated against provider %s with mutation", pod.Name, pod.GenerateName, sccName) - break loop - case apiequality.Semantic.DeepEqual(pod, podCopy): - // if we don't allow mutation, only use the validated pod if it didn't require any spec changes - allowedPod = podCopy - allowingProvider = provider - klog.V(5).Infof("pod %s (generate: %s) validated against provider %s without mutation", pod.Name, pod.GenerateName, sccName) - break loop - default: - klog.V(5).Infof("pod %s (generate: %s) validated against provider %s, but required mutation, skipping", pod.Name, pod.GenerateName, sccName) - } - } - - if allowedPod == nil || allowingProvider == nil { - return nil, "", validationErrs, nil - } - return allowedPod, allowingProvider.GetSCCName(), validationErrs, nil -} - -func shouldIgnore(a admission.Attributes) (bool, error) { - if a.GetResource().GroupResource() != coreapi.Resource("pods") { - return true, nil - } - if len(a.GetSubresource()) != 0 { - return true, nil - } - - _, ok := a.GetObject().(*coreapi.Pod) - // if we can't convert then fail closed since we've already checked that this is supposed to be a pod object. - // this shouldn't normally happen during admission but could happen if an integrator passes a versioned - // pod object rather than an internal object. - if !ok { - return false, admission.NewForbidden(a, fmt.Errorf("object was marked as kind pod but was unable to be converted: %v", a.GetObject())) - } - - // if this is an update, see if we are only updating the ownerRef. Garbage collection does this - // and we should allow it in general, since you had the power to update and the power to delete. - // The worst that happens is that you delete something, but you aren't controlling the privileged object itself - if a.GetOperation() == admission.Update && rbacregistry.IsOnlyMutatingGCFields(a.GetObject(), a.GetOldObject(), kapihelper.Semantic) { - return true, nil - } - - return false, nil -} - -// SetSecurityInformers implements WantsSecurityInformer interface for constraint. -func (c *constraint) SetSecurityInformers(informers securityv1informer.SecurityContextConstraintsInformer) { - c.sccLister = informers.Lister() -} - -func (c *constraint) SetExternalKubeClientSet(client kubernetes.Interface) { - c.client = client -} - -func (c *constraint) SetAuthorizer(authorizer authorizer.Authorizer) { - c.authorizer = authorizer -} - -// ValidateInitialization implements InitializationValidator interface for constraint. -func (c *constraint) ValidateInitialization() error { - if c.sccLister == nil { - return fmt.Errorf("%s requires an sccLister", PluginName) - } - if c.client == nil { - return fmt.Errorf("%s requires a client", PluginName) - } - if c.authorizer == nil { - return fmt.Errorf("%s requires an authorizer", PluginName) - } - return nil -} - -// logProviders logs what providers were found for the pod as well as any errors that were encountered -// while creating providers. -func logProviders(pod *coreapi.Pod, providers []sccmatching.SecurityContextConstraintsProvider, providerCreationErrs []error) { - names := make([]string, len(providers)) - for i, p := range providers { - names[i] = p.GetSCCName() - } - klog.V(4).Infof("validating pod %s (generate: %s) against providers %s", pod.Name, pod.GenerateName, strings.Join(names, ",")) - - for _, err := range providerCreationErrs { - klog.V(4).Infof("provider creation error: %v", err) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/admission_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/admission_test.go deleted file mode 100644 index 5e2f822a9..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/admission_test.go +++ /dev/null @@ -1,1325 +0,0 @@ -package sccadmission - -import ( - "reflect" - "sort" - "strings" - "testing" - - "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching" - - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/diff" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/apiserver/pkg/authorization/authorizer" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/kubernetes/fake" - "k8s.io/client-go/tools/cache" - coreapi "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" - securityv1listers "github.com/openshift/client-go/security/listers/security/v1" - sccsort "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort" -) - -// createSAForTest Build and Initializes a ServiceAccount for tests -func createSAForTest() *corev1.ServiceAccount { - return &corev1.ServiceAccount{ - ObjectMeta: metav1.ObjectMeta{ - Name: "default", - Namespace: "default", - }, - } -} - -// createNamespaceForTest builds and initializes a Namespaces for tests -func createNamespaceForTest() *corev1.Namespace { - return &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "default", - Annotations: map[string]string{ - securityv1.UIDRangeAnnotation: "1/3", - securityv1.MCSAnnotation: "s0:c1,c0", - securityv1.SupplementalGroupsAnnotation: "2/3", - }, - }, - } -} - -func newTestAdmission(lister securityv1listers.SecurityContextConstraintsLister, kclient kubernetes.Interface, authorizer authorizer.Authorizer) admission.Interface { - return &constraint{ - Handler: admission.NewHandler(admission.Create), - client: kclient, - sccLister: lister, - authorizer: authorizer, - } -} - -func TestFailClosedOnInvalidPod(t *testing.T) { - plugin := newTestAdmission(nil, nil, nil) - pod := &corev1.Pod{} - attrs := admission.NewAttributesRecord(pod, nil, coreapi.Kind("Pod").WithVersion("version"), pod.Namespace, pod.Name, coreapi.Resource("pods").WithVersion("version"), "", admission.Create, false, &user.DefaultInfo{}) - err := plugin.(admission.MutationInterface).Admit(attrs, nil) - - if err == nil { - t.Fatalf("expected versioned pod object to fail admission") - } - if !strings.Contains(err.Error(), "object was marked as kind pod but was unable to be converted") { - t.Errorf("expected error to be conversion erorr but got: %v", err) - } -} - -func TestAdmitCaps(t *testing.T) { - createPodWithCaps := func(caps *coreapi.Capabilities) *coreapi.Pod { - pod := goodPod() - pod.Spec.Containers[0].SecurityContext.Capabilities = caps - return pod - } - - restricted := restrictiveSCC() - - allowsFooInAllowed := restrictiveSCC() - allowsFooInAllowed.Name = "allowCapInAllowed" - allowsFooInAllowed.AllowedCapabilities = []corev1.Capability{"foo"} - - allowsFooInRequired := restrictiveSCC() - allowsFooInRequired.Name = "allowCapInRequired" - allowsFooInRequired.DefaultAddCapabilities = []corev1.Capability{"foo"} - - requiresFooToBeDropped := restrictiveSCC() - requiresFooToBeDropped.Name = "requireDrop" - requiresFooToBeDropped.RequiredDropCapabilities = []corev1.Capability{"foo"} - - allowAllInAllowed := restrictiveSCC() - allowAllInAllowed.Name = "allowAllCapsInAllowed" - allowAllInAllowed.AllowedCapabilities = []corev1.Capability{securityv1.AllowAllCapabilities} - - tc := map[string]struct { - pod *coreapi.Pod - sccs []*securityv1.SecurityContextConstraints - shouldPass bool - expectedCapabilities *coreapi.Capabilities - }{ - // UC 1: if an SCC does not define allowed or required caps then a pod requesting a cap - // should be rejected. - "should reject cap add when not allowed or required": { - pod: createPodWithCaps(&coreapi.Capabilities{Add: []coreapi.Capability{"foo"}}), - sccs: []*securityv1.SecurityContextConstraints{restricted}, - shouldPass: false, - }, - // UC 2: if an SCC allows a cap in the allowed field it should accept the pod request - // to add the cap. - "should accept cap add when in allowed": { - pod: createPodWithCaps(&coreapi.Capabilities{Add: []coreapi.Capability{"foo"}}), - sccs: []*securityv1.SecurityContextConstraints{restricted, allowsFooInAllowed}, - shouldPass: true, - }, - // UC 3: if an SCC requires a cap then it should accept the pod request - // to add the cap. - "should accept cap add when in required": { - pod: createPodWithCaps(&coreapi.Capabilities{Add: []coreapi.Capability{"foo"}}), - sccs: []*securityv1.SecurityContextConstraints{restricted, allowsFooInRequired}, - shouldPass: true, - }, - // UC 4: if an SCC requires a cap to be dropped then it should fail both - // in the verification of adds and verification of drops - "should reject cap add when requested cap is required to be dropped": { - pod: createPodWithCaps(&coreapi.Capabilities{Add: []coreapi.Capability{"foo"}}), - sccs: []*securityv1.SecurityContextConstraints{restricted, requiresFooToBeDropped}, - shouldPass: false, - }, - // UC 5: if an SCC requires a cap to be dropped it should accept - // a manual request to drop the cap. - "should accept cap drop when cap is required to be dropped": { - pod: createPodWithCaps(&coreapi.Capabilities{Drop: []coreapi.Capability{"foo"}}), - sccs: []*securityv1.SecurityContextConstraints{restricted, requiresFooToBeDropped}, - shouldPass: true, - }, - // UC 6: required add is defaulted - "required add is defaulted": { - pod: goodPod(), - sccs: []*securityv1.SecurityContextConstraints{allowsFooInRequired}, - shouldPass: true, - expectedCapabilities: &coreapi.Capabilities{ - Add: []coreapi.Capability{"foo"}, - }, - }, - // UC 7: required drop is defaulted - "required drop is defaulted": { - pod: goodPod(), - sccs: []*securityv1.SecurityContextConstraints{requiresFooToBeDropped}, - shouldPass: true, - expectedCapabilities: &coreapi.Capabilities{ - Drop: []coreapi.Capability{"foo"}, - }, - }, - // UC 8: using '*' in allowed caps - "should accept cap add when all caps are allowed": { - pod: createPodWithCaps(&coreapi.Capabilities{Add: []coreapi.Capability{"foo"}}), - sccs: []*securityv1.SecurityContextConstraints{restricted, allowAllInAllowed}, - shouldPass: true, - }, - } - - for i := 0; i < 2; i++ { - for k, v := range tc { - v.pod.Spec.Containers, v.pod.Spec.InitContainers = v.pod.Spec.InitContainers, v.pod.Spec.Containers - - testSCCAdmit(k, v.sccs, v.pod, v.shouldPass, t) - - containers := v.pod.Spec.Containers - if i == 0 { - containers = v.pod.Spec.InitContainers - } - - if v.expectedCapabilities != nil { - if !reflect.DeepEqual(v.expectedCapabilities, containers[0].SecurityContext.Capabilities) { - t.Errorf("%s resulted in caps that were not expected - expected: %#v, received: %#v", k, v.expectedCapabilities, containers[0].SecurityContext.Capabilities) - } - } - } - } -} - -func testSCCAdmit(testCaseName string, sccs []*securityv1.SecurityContextConstraints, pod *coreapi.Pod, shouldPass bool, t *testing.T) { - t.Helper() - tc := setupClientSet() - lister := createSCCLister(t, sccs) - testAuthorizer := &sccTestAuthorizer{t: t} - plugin := newTestAdmission(lister, tc, testAuthorizer) - - attrs := admission.NewAttributesRecord(pod, nil, coreapi.Kind("Pod").WithVersion("version"), pod.Namespace, pod.Name, coreapi.Resource("pods").WithVersion("version"), "", admission.Create, false, &user.DefaultInfo{}) - err := plugin.(admission.MutationInterface).Admit(attrs, nil) - if shouldPass && err != nil { - t.Errorf("%s expected no mutating admission errors but received %v", testCaseName, err) - } - if !shouldPass && err == nil { - t.Errorf("%s expected mutating admission errors but received none", testCaseName) - } - - err = plugin.(admission.ValidationInterface).Validate(attrs, nil) - if shouldPass && err != nil { - t.Errorf("%s expected no validating admission errors but received %v", testCaseName, err) - } - if !shouldPass && err == nil { - t.Errorf("%s expected validating admission errors but received none", testCaseName) - } -} - -func TestAdmitSuccess(t *testing.T) { - // create the annotated namespace and add it to the fake client - namespace := createNamespaceForTest() - - serviceAccount := createSAForTest() - serviceAccount.Namespace = namespace.Name - - tc := fake.NewSimpleClientset(namespace, serviceAccount) - - // used for cases where things are preallocated - defaultGroup := int64(2) - - // create scc that requires allocation retrieval - saSCC := saSCC() - - // create scc that has specific requirements that shouldn't match but is permissioned to - // service accounts to test that even though this has matching priorities (0) and a - // lower point value score (which will cause it to be sorted in front of scc-sa) it should not - // validate the requests so we should try scc-sa. - saExactSCC := saExactSCC() - - lister := createSCCLister(t, []*securityv1.SecurityContextConstraints{ - saExactSCC, - saSCC, - }) - - testAuthorizer := &sccTestAuthorizer{t: t} - - // create the admission plugin - p := newTestAdmission(lister, tc, testAuthorizer) - - // specifies a UID in the range of the preallocated UID annotation - specifyUIDInRange := goodPod() - var goodUID int64 = 3 - specifyUIDInRange.Spec.Containers[0].SecurityContext.RunAsUser = &goodUID - - // specifies an mcs label that matches the preallocated mcs annotation - specifyLabels := goodPod() - specifyLabels.Spec.Containers[0].SecurityContext.SELinuxOptions = &coreapi.SELinuxOptions{ - Level: "s0:c1,c0", - } - - // specifies an FSGroup in the range of preallocated sup group annotation - specifyFSGroupInRange := goodPod() - // group in the range of a preallocated fs group which, by default is a single digit range - // based on the first value of the ns annotation. - goodFSGroup := int64(2) - specifyFSGroupInRange.Spec.SecurityContext.FSGroup = &goodFSGroup - - // specifies a sup group in the range of preallocated sup group annotation - specifySupGroup := goodPod() - // group is not the default but still in the range - specifySupGroup.Spec.SecurityContext.SupplementalGroups = []int64{3} - - specifyPodLevelSELinux := goodPod() - specifyPodLevelSELinux.Spec.SecurityContext.SELinuxOptions = &coreapi.SELinuxOptions{ - Level: "s0:c1,c0", - } - - seLinuxLevelFromNamespace := namespace.Annotations[securityv1.MCSAnnotation] - - testCases := map[string]struct { - pod *coreapi.Pod - expectedPodSC *coreapi.PodSecurityContext - expectedContainerSC *coreapi.SecurityContext - }{ - "specifyUIDInRange": { - pod: specifyUIDInRange, - expectedPodSC: podSC(seLinuxLevelFromNamespace, defaultGroup, defaultGroup), - expectedContainerSC: containerSC(nil, goodUID), - }, - "specifyLabels": { - pod: specifyLabels, - expectedPodSC: podSC(seLinuxLevelFromNamespace, defaultGroup, defaultGroup), - expectedContainerSC: containerSC(&seLinuxLevelFromNamespace, 1), - }, - "specifyFSGroup": { - pod: specifyFSGroupInRange, - expectedPodSC: podSC(seLinuxLevelFromNamespace, goodFSGroup, defaultGroup), - expectedContainerSC: containerSC(nil, 1), - }, - "specifySupGroup": { - pod: specifySupGroup, - expectedPodSC: podSC(seLinuxLevelFromNamespace, defaultGroup, 3), - expectedContainerSC: containerSC(nil, 1), - }, - "specifyPodLevelSELinuxLevel": { - pod: specifyPodLevelSELinux, - expectedPodSC: podSC(seLinuxLevelFromNamespace, defaultGroup, defaultGroup), - expectedContainerSC: containerSC(nil, 1), - }, - } - - for i := 0; i < 2; i++ { - for k, v := range testCases { - v.pod.Spec.Containers, v.pod.Spec.InitContainers = v.pod.Spec.InitContainers, v.pod.Spec.Containers - - hasErrors := testSCCAdmission(v.pod, p, saSCC.Name, k, t) - if hasErrors { - continue - } - - containers := v.pod.Spec.Containers - if i == 0 { - containers = v.pod.Spec.InitContainers - } - - if !reflect.DeepEqual(v.expectedPodSC, v.pod.Spec.SecurityContext) { - t.Errorf("%s unexpected pod SecurityContext diff:\n%s", k, diff.ObjectGoPrintSideBySide(v.expectedPodSC, v.pod.Spec.SecurityContext)) - } - - if !reflect.DeepEqual(v.expectedContainerSC, containers[0].SecurityContext) { - t.Errorf("%s unexpected container SecurityContext diff:\n%s", k, diff.ObjectGoPrintSideBySide(v.expectedContainerSC, containers[0].SecurityContext)) - } - } - } -} - -func TestAdmitFailure(t *testing.T) { - tc := setupClientSet() - - // create scc that requires allocation retrieval - saSCC := saSCC() - - // create scc that has specific requirements that shouldn't match but is permissioned to - // service accounts to test that even though this has matching priorities (0) and a - // lower point value score (which will cause it to be sorted in front of scc-sa) it should not - // validate the requests so we should try scc-sa. - saExactSCC := saExactSCC() - - lister, indexer := createSCCListerAndIndexer(t, []*securityv1.SecurityContextConstraints{ - saExactSCC, - saSCC, - }) - - testAuthorizer := &sccTestAuthorizer{t: t} - - // create the admission plugin - p := newTestAdmission(lister, tc, testAuthorizer) - - // setup test data - uidNotInRange := goodPod() - var uid int64 = 1001 - uidNotInRange.Spec.Containers[0].SecurityContext.RunAsUser = &uid - - invalidMCSLabels := goodPod() - invalidMCSLabels.Spec.Containers[0].SecurityContext.SELinuxOptions = &coreapi.SELinuxOptions{ - Level: "s1:q0,q1", - } - - disallowedPriv := goodPod() - var priv bool = true - disallowedPriv.Spec.Containers[0].SecurityContext.Privileged = &priv - - requestsHostNetwork := goodPod() - requestsHostNetwork.Spec.SecurityContext.HostNetwork = true - - requestsHostPorts := goodPod() - requestsHostPorts.Spec.Containers[0].Ports = []coreapi.ContainerPort{{HostPort: 1}} - - requestsHostPID := goodPod() - requestsHostPID.Spec.SecurityContext.HostPID = true - - requestsHostIPC := goodPod() - requestsHostIPC.Spec.SecurityContext.HostIPC = true - - requestsSupplementalGroup := goodPod() - requestsSupplementalGroup.Spec.SecurityContext.SupplementalGroups = []int64{1} - - requestsFSGroup := goodPod() - fsGroup := int64(1) - requestsFSGroup.Spec.SecurityContext.FSGroup = &fsGroup - - requestsPodLevelMCS := goodPod() - requestsPodLevelMCS.Spec.SecurityContext.SELinuxOptions = &coreapi.SELinuxOptions{ - User: "user", - Type: "type", - Role: "role", - Level: "level", - } - - testCases := map[string]struct { - pod *coreapi.Pod - }{ - "uidNotInRange": { - pod: uidNotInRange, - }, - "invalidMCSLabels": { - pod: invalidMCSLabels, - }, - "disallowedPriv": { - pod: disallowedPriv, - }, - "requestsHostNetwork": { - pod: requestsHostNetwork, - }, - "requestsHostPorts": { - pod: requestsHostPorts, - }, - "requestsHostPID": { - pod: requestsHostPID, - }, - "requestsHostIPC": { - pod: requestsHostIPC, - }, - "requestsSupplementalGroup": { - pod: requestsSupplementalGroup, - }, - "requestsFSGroup": { - pod: requestsFSGroup, - }, - "requestsPodLevelMCS": { - pod: requestsPodLevelMCS, - }, - } - - for i := 0; i < 2; i++ { - for k, v := range testCases { - v.pod.Spec.Containers, v.pod.Spec.InitContainers = v.pod.Spec.InitContainers, v.pod.Spec.Containers - attrs := admission.NewAttributesRecord(v.pod, nil, coreapi.Kind("Pod").WithVersion("version"), v.pod.Namespace, v.pod.Name, coreapi.Resource("pods").WithVersion("version"), "", admission.Create, false, &user.DefaultInfo{}) - err := p.(admission.MutationInterface).Admit(attrs, nil) - - if err == nil { - t.Errorf("%s expected errors but received none", k) - } - } - } - - // now add an escalated scc to the group and re-run the cases that expected failure, they should - // now pass by validating against the escalated scc. - adminSCC := laxSCC() - adminSCC.Name = "scc-admin" - indexer.Add(adminSCC) - - for i := 0; i < 2; i++ { - for k, v := range testCases { - v.pod.Spec.Containers, v.pod.Spec.InitContainers = v.pod.Spec.InitContainers, v.pod.Spec.Containers - - // pods that were rejected by strict SCC, should pass with relaxed SCC - testSCCAdmission(v.pod, p, adminSCC.Name, k, t) - } - } -} - -func TestCreateProvidersFromConstraints(t *testing.T) { - namespaceValid := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "default", - Annotations: map[string]string{ - securityv1.UIDRangeAnnotation: "1/3", - securityv1.MCSAnnotation: "s0:c1,c0", - securityv1.SupplementalGroupsAnnotation: "1/3", - }, - }, - } - namespaceNoUID := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "default", - Annotations: map[string]string{ - securityv1.MCSAnnotation: "s0:c1,c0", - securityv1.SupplementalGroupsAnnotation: "1/3", - }, - }, - } - namespaceNoMCS := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "default", - Annotations: map[string]string{ - securityv1.UIDRangeAnnotation: "1/3", - securityv1.SupplementalGroupsAnnotation: "1/3", - }, - }, - } - - namespaceNoSupplementalGroupsFallbackToUID := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "default", - Annotations: map[string]string{ - securityv1.UIDRangeAnnotation: "1/3", - securityv1.MCSAnnotation: "s0:c1,c0", - }, - }, - } - - namespaceBadSupGroups := &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Name: "default", - Annotations: map[string]string{ - securityv1.UIDRangeAnnotation: "1/3", - securityv1.MCSAnnotation: "s0:c1,c0", - securityv1.SupplementalGroupsAnnotation: "", - }, - }, - } - - testCases := map[string]struct { - // use a generating function so we can test for non-mutation - scc func() *securityv1.SecurityContextConstraints - namespace *corev1.Namespace - expectedErr string - }{ - "valid non-preallocated scc": { - scc: func() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "valid non-preallocated scc", - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyRunAsAny, - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyRunAsAny, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyRunAsAny, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - } - }, - namespace: namespaceValid, - }, - "valid pre-allocated scc": { - scc: func() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "valid pre-allocated scc", - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyMustRunAs, - SELinuxOptions: &corev1.SELinuxOptions{User: "myuser"}, - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAsRange, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - }, - } - }, - namespace: namespaceValid, - }, - "pre-allocated no uid annotation": { - scc: func() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pre-allocated no uid annotation", - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyMustRunAs, - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAsRange, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyRunAsAny, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - } - }, - namespace: namespaceNoUID, - expectedErr: "unable to find pre-allocated uid annotation", - }, - "pre-allocated no mcs annotation": { - scc: func() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pre-allocated no mcs annotation", - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyMustRunAs, - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAsRange, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyRunAsAny, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - } - }, - namespace: namespaceNoMCS, - expectedErr: "unable to find pre-allocated mcs annotation", - }, - "pre-allocated group falls back to UID annotation": { - scc: func() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pre-allocated no sup group annotation", - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyRunAsAny, - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyRunAsAny, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - }, - } - }, - namespace: namespaceNoSupplementalGroupsFallbackToUID, - }, - "pre-allocated group bad value fails": { - scc: func() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pre-allocated no sup group annotation", - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyRunAsAny, - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyRunAsAny, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - }, - } - }, - namespace: namespaceBadSupGroups, - expectedErr: "unable to find pre-allocated group annotation", - }, - "bad scc strategy options": { - scc: func() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bad scc user options", - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyRunAsAny, - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAs, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyRunAsAny, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - } - }, - namespace: namespaceValid, - expectedErr: "MustRunAs requires a UID", - }, - } - - for k, v := range testCases { - // create the admission handler - tc := fake.NewSimpleClientset(v.namespace) - scc := v.scc() - - // create the providers, this method only needs the namespace - attributes := admission.NewAttributesRecord(nil, nil, coreapi.Kind("Pod").WithVersion("version"), v.namespace.Name, "", coreapi.Resource("pods").WithVersion("version"), "", admission.Create, false, nil) - _, errs := sccmatching.CreateProvidersFromConstraints(attributes.GetNamespace(), []*securityv1.SecurityContextConstraints{scc}, tc) - - if !reflect.DeepEqual(scc, v.scc()) { - diff := diff.ObjectDiff(scc, v.scc()) - t.Errorf("%s createProvidersFromConstraints mutated constraints. diff:\n%s", k, diff) - } - if len(v.expectedErr) > 0 && len(errs) != 1 { - t.Errorf("%s expected a single error '%s' but received %v", k, v.expectedErr, errs) - continue - } - if len(v.expectedErr) == 0 && len(errs) != 0 { - t.Errorf("%s did not expect an error but received %v", k, errs) - continue - } - - // check that we got the error we expected - if len(v.expectedErr) > 0 { - if !strings.Contains(errs[0].Error(), v.expectedErr) { - t.Errorf("%s expected error '%s' but received %v", k, v.expectedErr, errs[0]) - } - } - } -} - -func TestMatchingSecurityContextConstraints(t *testing.T) { - sccs := []*securityv1.SecurityContextConstraints{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "match group", - }, - Groups: []string{"group"}, - }, - { - ObjectMeta: metav1.ObjectMeta{ - Name: "match user", - }, - Users: []string{"user"}, - }, - } - - lister := createSCCLister(t, sccs) - - // single match cases - testCases := map[string]struct { - userInfo user.Info - authorizer *sccTestAuthorizer - namespace string - expectedSCC string - }{ - "find none": { - userInfo: &user.DefaultInfo{ - Name: "foo", - Groups: []string{"bar"}, - }, - authorizer: &sccTestAuthorizer{t: t}, - }, - "find user": { - userInfo: &user.DefaultInfo{ - Name: "user", - Groups: []string{"bar"}, - }, - authorizer: &sccTestAuthorizer{t: t}, - expectedSCC: "match user", - }, - "find group": { - userInfo: &user.DefaultInfo{ - Name: "foo", - Groups: []string{"group"}, - }, - authorizer: &sccTestAuthorizer{t: t}, - expectedSCC: "match group", - }, - "not find user via authz": { - userInfo: &user.DefaultInfo{ - Name: "foo", - Groups: []string{"bar"}, - }, - authorizer: &sccTestAuthorizer{t: t, user: "not-foo", scc: "match user"}, - namespace: "fancy", - }, - "find user via authz cluster wide": { - userInfo: &user.DefaultInfo{ - Name: "foo", - Groups: []string{"bar"}, - }, - authorizer: &sccTestAuthorizer{t: t, user: "foo", scc: "match user"}, - namespace: "fancy", - expectedSCC: "match user", - }, - "find group via authz in namespace": { - userInfo: &user.DefaultInfo{ - Name: "foo", - Groups: []string{"bar"}, - }, - authorizer: &sccTestAuthorizer{t: t, user: "foo", namespace: "room", scc: "match group"}, - namespace: "room", - expectedSCC: "match group", - }, - } - - for k, v := range testCases { - sccMatcher := sccmatching.NewDefaultSCCMatcher(lister, v.authorizer) - sccs, err := sccMatcher.FindApplicableSCCs(v.namespace, v.userInfo) - if err != nil { - t.Errorf("%s received error %v", k, err) - continue - } - if v.expectedSCC == "" { - if len(sccs) > 0 { - t.Errorf("%s expected to match 0 sccs but found %d: %#v", k, len(sccs), sccs) - } - } - if v.expectedSCC != "" { - if len(sccs) != 1 { - t.Errorf("%s returned more than one scc, use case can not validate: %#v", k, sccs) - continue - } - if v.expectedSCC != sccs[0].Name { - t.Errorf("%s expected to match %s but found %s", k, v.expectedSCC, sccs[0].Name) - } - } - } - - // check that we can match many at once - userInfo := &user.DefaultInfo{ - Name: "user", - Groups: []string{"group"}, - } - testAuthorizer := &sccTestAuthorizer{t: t} - namespace := "does-not-matter" - sccMatcher := sccmatching.NewDefaultSCCMatcher(lister, testAuthorizer) - sccs2, err := sccMatcher.FindApplicableSCCs(namespace, userInfo) - if err != nil { - t.Fatalf("matching many sccs returned error %v", err) - } - if len(sccs2) != 2 { - t.Errorf("matching many sccs expected to match 2 sccs but found %d: %#v", len(sccs), sccs) - } -} - -func TestAdmitWithPrioritizedSCC(t *testing.T) { - // scc with high priority but very restrictive. - restricted := restrictiveSCC() - restrictedPriority := int32(100) - restricted.Priority = &restrictedPriority - - // sccs with matching priorities but one will have a higher point score (by the run as user strategy) - uidFive := int64(5) - matchingPrioritySCCOne := laxSCC() - matchingPrioritySCCOne.Name = "matchingPrioritySCCOne" - matchingPrioritySCCOne.RunAsUser = securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAs, - UID: &uidFive, - } - matchingPriority := int32(5) - matchingPrioritySCCOne.Priority = &matchingPriority - - matchingPrioritySCCTwo := laxSCC() - matchingPrioritySCCTwo.Name = "matchingPrioritySCCTwo" - matchingPrioritySCCTwo.RunAsUser = securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAsRange, - UIDRangeMin: &uidFive, - UIDRangeMax: &uidFive, - } - matchingPrioritySCCTwo.Priority = &matchingPriority - - // sccs with matching priorities and scores so should be matched by sorted name - uidSix := int64(6) - matchingPriorityAndScoreSCCOne := laxSCC() - matchingPriorityAndScoreSCCOne.Name = "matchingPriorityAndScoreSCCOne" - matchingPriorityAndScoreSCCOne.RunAsUser = securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAs, - UID: &uidSix, - } - matchingPriorityAndScorePriority := int32(1) - matchingPriorityAndScoreSCCOne.Priority = &matchingPriorityAndScorePriority - - matchingPriorityAndScoreSCCTwo := laxSCC() - matchingPriorityAndScoreSCCTwo.Name = "matchingPriorityAndScoreSCCTwo" - matchingPriorityAndScoreSCCTwo.RunAsUser = securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAs, - UID: &uidSix, - } - matchingPriorityAndScoreSCCTwo.Priority = &matchingPriorityAndScorePriority - - // we will expect these to sort as: - expectedSort := []string{"restrictive", "matchingPrioritySCCOne", "matchingPrioritySCCTwo", - "matchingPriorityAndScoreSCCOne", "matchingPriorityAndScoreSCCTwo"} - sccsToSort := []*securityv1.SecurityContextConstraints{matchingPriorityAndScoreSCCTwo, matchingPriorityAndScoreSCCOne, - matchingPrioritySCCTwo, matchingPrioritySCCOne, restricted} - - sort.Sort(sccsort.ByPriority(sccsToSort)) - - for i, scc := range sccsToSort { - if scc.Name != expectedSort[i] { - t.Fatalf("unexpected sort found %s at element %d but expected %s", scc.Name, i, expectedSort[i]) - } - } - - // sorting works as we're expecting - // now, to test we will craft some requests that are targeted to validate against specific - // SCCs and ensure that they come out with the right annotation. This means admission - // is using the sort strategy we expect. - - tc := setupClientSet() - lister := createSCCLister(t, sccsToSort) - testAuthorizer := &sccTestAuthorizer{t: t} - - // create the admission plugin - plugin := newTestAdmission(lister, tc, testAuthorizer) - - testSCCAdmission(goodPod(), plugin, restricted.Name, "match the restricted SCC", t) - - matchingPrioritySCCOnePod := goodPod() - matchingPrioritySCCOnePod.Spec.Containers[0].SecurityContext.RunAsUser = &uidFive - testSCCAdmission(matchingPrioritySCCOnePod, plugin, matchingPrioritySCCOne.Name, "match matchingPrioritySCCOne by setting RunAsUser to 5", t) - - matchingPriorityAndScoreSCCOnePod := goodPod() - matchingPriorityAndScoreSCCOnePod.Spec.Containers[0].SecurityContext.RunAsUser = &uidSix - testSCCAdmission(matchingPriorityAndScoreSCCOnePod, plugin, matchingPriorityAndScoreSCCOne.Name, "match matchingPriorityAndScoreSCCOne by setting RunAsUser to 6", t) -} - -func TestAdmitSeccomp(t *testing.T) { - createPodWithSeccomp := func(podAnnotation, containerAnnotation string) *coreapi.Pod { - pod := goodPod() - pod.Annotations = map[string]string{} - if podAnnotation != "" { - pod.Annotations[coreapi.SeccompPodAnnotationKey] = podAnnotation - } - if containerAnnotation != "" { - pod.Annotations[coreapi.SeccompContainerAnnotationKeyPrefix+"container"] = containerAnnotation - } - pod.Spec.Containers[0].Name = "container" - return pod - } - - noSeccompSCC := restrictiveSCC() - noSeccompSCC.Name = "noseccomp" - - seccompSCC := restrictiveSCC() - seccompSCC.Name = "seccomp" - seccompSCC.SeccompProfiles = []string{"foo"} - - wildcardSCC := restrictiveSCC() - wildcardSCC.Name = "wildcard" - wildcardSCC.SeccompProfiles = []string{"*"} - - tests := map[string]struct { - pod *coreapi.Pod - sccs []*securityv1.SecurityContextConstraints - shouldPass bool - expectedPodAnnotation string - expectedSCC string - }{ - "no seccomp, no requests": { - pod: goodPod(), - sccs: []*securityv1.SecurityContextConstraints{noSeccompSCC}, - shouldPass: true, - expectedSCC: noSeccompSCC.Name, - }, - "no seccomp, bad container requests": { - pod: createPodWithSeccomp("foo", "bar"), - sccs: []*securityv1.SecurityContextConstraints{noSeccompSCC}, - shouldPass: false, - }, - "seccomp, no requests": { - pod: goodPod(), - sccs: []*securityv1.SecurityContextConstraints{seccompSCC}, - shouldPass: true, - expectedPodAnnotation: "foo", - expectedSCC: seccompSCC.Name, - }, - "seccomp, valid pod annotation, no container annotation": { - pod: createPodWithSeccomp("foo", ""), - sccs: []*securityv1.SecurityContextConstraints{seccompSCC}, - shouldPass: true, - expectedPodAnnotation: "foo", - expectedSCC: seccompSCC.Name, - }, - "seccomp, no pod annotation, valid container annotation": { - pod: createPodWithSeccomp("", "foo"), - sccs: []*securityv1.SecurityContextConstraints{seccompSCC}, - shouldPass: true, - expectedPodAnnotation: "foo", - expectedSCC: seccompSCC.Name, - }, - "seccomp, valid pod annotation, invalid container annotation": { - pod: createPodWithSeccomp("foo", "bar"), - sccs: []*securityv1.SecurityContextConstraints{seccompSCC}, - shouldPass: false, - }, - "wild card, no requests": { - pod: goodPod(), - sccs: []*securityv1.SecurityContextConstraints{wildcardSCC}, - shouldPass: true, - expectedSCC: wildcardSCC.Name, - }, - "wild card, requests": { - pod: createPodWithSeccomp("foo", "bar"), - sccs: []*securityv1.SecurityContextConstraints{wildcardSCC}, - shouldPass: true, - expectedPodAnnotation: "foo", - expectedSCC: wildcardSCC.Name, - }, - } - - for k, v := range tests { - testSCCAdmit(k, v.sccs, v.pod, v.shouldPass, t) - - if v.shouldPass { - validatedSCC, ok := v.pod.Annotations[securityv1.ValidatedSCCAnnotation] - if !ok { - t.Errorf("expected to find the validated annotation on the pod for the scc but found none") - return - } - if validatedSCC != v.expectedSCC { - t.Errorf("should have validated against %s but found %s", v.expectedSCC, validatedSCC) - } - - if len(v.expectedPodAnnotation) > 0 { - annotation, found := v.pod.Annotations[coreapi.SeccompPodAnnotationKey] - if !found { - t.Errorf("%s expected to have pod annotation for seccomp but found none", k) - } - if found && annotation != v.expectedPodAnnotation { - t.Errorf("%s expected pod annotation to be %s but found %s", k, v.expectedPodAnnotation, annotation) - } - } - } - } - -} - -func TestAdmitPreferNonmutatingWhenPossible(t *testing.T) { - - mutatingSCC := restrictiveSCC() - mutatingSCC.Name = "mutating-scc" - - nonMutatingSCC := laxSCC() - nonMutatingSCC.Name = "non-mutating-scc" - - simplePod := goodPod() - simplePod.Spec.Containers[0].Name = "simple-pod" - simplePod.Spec.Containers[0].Image = "test-image:0.1" - - modifiedPod := simplePod.DeepCopy() - modifiedPod.Spec.Containers[0].Image = "test-image:0.2" - - tests := map[string]struct { - oldPod *coreapi.Pod - newPod *coreapi.Pod - operation admission.Operation - sccs []*securityv1.SecurityContextConstraints - shouldPass bool - expectedSCC string - }{ - "creation: the first SCC (even if it mutates) should be used": { - newPod: simplePod.DeepCopy(), - operation: admission.Create, - sccs: []*securityv1.SecurityContextConstraints{mutatingSCC, nonMutatingSCC}, - shouldPass: true, - expectedSCC: mutatingSCC.Name, - }, - "updating: the first non-mutating SCC should be used": { - oldPod: simplePod.DeepCopy(), - newPod: modifiedPod.DeepCopy(), - operation: admission.Update, - sccs: []*securityv1.SecurityContextConstraints{mutatingSCC, nonMutatingSCC}, - shouldPass: true, - expectedSCC: nonMutatingSCC.Name, - }, - "updating: a pod should be rejected when there are only mutating SCCs": { - oldPod: simplePod.DeepCopy(), - newPod: modifiedPod.DeepCopy(), - operation: admission.Update, - sccs: []*securityv1.SecurityContextConstraints{mutatingSCC}, - shouldPass: false, - }, - } - - for testCaseName, testCase := range tests { - // We can't use testSCCAdmission() here because it doesn't support Update operation. - // We can't use testSCCAdmit() here because it doesn't support Update operation and doesn't check for the SCC annotation. - - tc := setupClientSet() - lister := createSCCLister(t, testCase.sccs) - testAuthorizer := &sccTestAuthorizer{t: t} - plugin := newTestAdmission(lister, tc, testAuthorizer) - - attrs := admission.NewAttributesRecord(testCase.newPod, testCase.oldPod, coreapi.Kind("Pod").WithVersion("version"), testCase.newPod.Namespace, testCase.newPod.Name, coreapi.Resource("pods").WithVersion("version"), "", testCase.operation, false, &user.DefaultInfo{}) - err := plugin.(admission.MutationInterface).Admit(attrs, nil) - - if testCase.shouldPass { - if err != nil { - t.Errorf("%s expected no errors but received %v", testCaseName, err) - } else { - validatedSCC, ok := testCase.newPod.Annotations[securityv1.ValidatedSCCAnnotation] - if !ok { - t.Errorf("expected %q to find the validated annotation on the pod for the scc but found none", testCaseName) - - } else if validatedSCC != testCase.expectedSCC { - t.Errorf("%q should have validated against %q but found %q", testCaseName, testCase.expectedSCC, validatedSCC) - } - } - } else { - if err == nil { - t.Errorf("%s expected errors but received none", testCaseName) - } - } - } - -} - -// testSCCAdmission is a helper to admit the pod and ensure it was validated against the expected -// SCC. Returns true when errors have been encountered. -func testSCCAdmission(pod *coreapi.Pod, plugin admission.Interface, expectedSCC, testName string, t *testing.T) bool { - t.Helper() - attrs := admission.NewAttributesRecord(pod, nil, coreapi.Kind("Pod").WithVersion("version"), pod.Namespace, pod.Name, coreapi.Resource("pods").WithVersion("version"), "", admission.Create, false, &user.DefaultInfo{}) - err := plugin.(admission.MutationInterface).Admit(attrs, nil) - if err != nil { - t.Errorf("%s error admitting pod: %v", testName, err) - return true - } - - validatedSCC, ok := pod.Annotations[securityv1.ValidatedSCCAnnotation] - if !ok { - t.Errorf("expected %q to find the validated annotation on the pod for the scc but found none", testName) - return true - } - if validatedSCC != expectedSCC { - t.Errorf("%q should have validated against %s but found %s", testName, expectedSCC, validatedSCC) - return true - } - return false -} - -func laxSCC() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "lax", - }, - AllowPrivilegedContainer: true, - AllowHostNetwork: true, - AllowHostPorts: true, - AllowHostPID: true, - AllowHostIPC: true, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyRunAsAny, - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyRunAsAny, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyRunAsAny, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - Groups: []string{"system:serviceaccounts"}, - } -} - -func restrictiveSCC() *securityv1.SecurityContextConstraints { - var exactUID int64 = 999 - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "restrictive", - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAs, - UID: &exactUID, - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyMustRunAs, - SELinuxOptions: &corev1.SELinuxOptions{ - Level: "s9:z0,z1", - }, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - Ranges: []securityv1.IDRange{ - {Min: 999, Max: 999}, - }, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - Ranges: []securityv1.IDRange{ - {Min: 999, Max: 999}, - }, - }, - Groups: []string{"system:serviceaccounts"}, - } -} - -func saSCC() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "scc-sa", - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAsRange, - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyMustRunAs, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - }, - Groups: []string{"system:serviceaccounts"}, - } -} - -func saExactSCC() *securityv1.SecurityContextConstraints { - var exactUID int64 = 999 - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "scc-sa-exact", - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAs, - UID: &exactUID, - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyMustRunAs, - SELinuxOptions: &corev1.SELinuxOptions{ - Level: "s9:z0,z1", - }, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - Ranges: []securityv1.IDRange{ - {Min: 999, Max: 999}, - }, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - Ranges: []securityv1.IDRange{ - {Min: 999, Max: 999}, - }, - }, - Groups: []string{"system:serviceaccounts"}, - } -} - -// goodPod is empty and should not be used directly for testing since we're providing -// two different SCCs. Since no values are specified it would be allowed to match any -// SCC when defaults are filled in. -func goodPod() *coreapi.Pod { - return &coreapi.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - }, - Spec: coreapi.PodSpec{ - ServiceAccountName: "default", - SecurityContext: &coreapi.PodSecurityContext{}, - Containers: []coreapi.Container{ - { - SecurityContext: &coreapi.SecurityContext{}, - }, - }, - }, - } -} - -func containerSC(seLinuxLevel *string, uid int64) *coreapi.SecurityContext { - sc := &coreapi.SecurityContext{ - RunAsUser: &uid, - } - if seLinuxLevel != nil { - sc.SELinuxOptions = &coreapi.SELinuxOptions{ - Level: *seLinuxLevel, - } - } - return sc -} - -func podSC(seLinuxLevel string, fsGroup, supGroup int64) *coreapi.PodSecurityContext { - return &coreapi.PodSecurityContext{ - SELinuxOptions: &coreapi.SELinuxOptions{ - Level: seLinuxLevel, - }, - SupplementalGroups: []int64{supGroup}, - FSGroup: &fsGroup, - } -} - -func setupClientSet() *fake.Clientset { - // create the annotated namespace and add it to the fake client - namespace := createNamespaceForTest() - serviceAccount := createSAForTest() - serviceAccount.Namespace = namespace.Name - - return fake.NewSimpleClientset(namespace, serviceAccount) -} - -func createSCCListerAndIndexer(t *testing.T, sccs []*securityv1.SecurityContextConstraints) (securityv1listers.SecurityContextConstraintsLister, cache.Indexer) { - t.Helper() - indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) - lister := securityv1listers.NewSecurityContextConstraintsLister(indexer) - for _, scc := range sccs { - if err := indexer.Add(scc); err != nil { - t.Fatalf("error adding SCC to store: %v", err) - } - } - return lister, indexer -} - -func createSCCLister(t *testing.T, sccs []*securityv1.SecurityContextConstraints) securityv1listers.SecurityContextConstraintsLister { - t.Helper() - lister, _ := createSCCListerAndIndexer(t, sccs) - return lister -} - -type sccTestAuthorizer struct { - t *testing.T - - // this user, in this namespace, can use this SCC - user string - namespace string - scc string -} - -func (s *sccTestAuthorizer) Authorize(a authorizer.Attributes) (authorizer.Decision, string, error) { - s.t.Helper() - if !isValidSCCAttributes(a) { - s.t.Errorf("invalid attributes seen: %#v", a) - return authorizer.DecisionDeny, "", nil - } - - allowedNamespace := len(s.namespace) == 0 || s.namespace == a.GetNamespace() - if s.user == a.GetUser().GetName() && allowedNamespace && s.scc == a.GetName() { - return authorizer.DecisionAllow, "", nil - } - - return authorizer.DecisionNoOpinion, "", nil -} - -func isValidSCCAttributes(a authorizer.Attributes) bool { - return a.GetVerb() == "use" && - a.GetAPIGroup() == "security.openshift.io" && - a.GetResource() == "securitycontextconstraints" && - a.IsResourceRequest() -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/intializers.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/intializers.go deleted file mode 100644 index 287fe08b8..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/intializers.go +++ /dev/null @@ -1,28 +0,0 @@ -package sccadmission - -import ( - "k8s.io/apiserver/pkg/admission" - - securityv1informer "github.com/openshift/client-go/security/informers/externalversions/security/v1" -) - -func NewInitializer(sccInformer securityv1informer.SecurityContextConstraintsInformer) admission.PluginInitializer { - return &localInitializer{sccInformer: sccInformer} -} - -type WantsSecurityInformer interface { - SetSecurityInformers(securityv1informer.SecurityContextConstraintsInformer) - admission.InitializationValidator -} - -type localInitializer struct { - sccInformer securityv1informer.SecurityContextConstraintsInformer -} - -// Initialize will check the initialization interfaces implemented by each plugin -// and provide the appropriate initialization data -func (i *localInitializer) Initialize(plugin admission.Interface) { - if wants, ok := plugin.(WantsSecurityInformer); ok { - wants.SetSecurityInformers(i.sccInformer) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/scc_exec.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/scc_exec.go deleted file mode 100644 index 3096f67f5..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/scc_exec.go +++ /dev/null @@ -1,98 +0,0 @@ -package sccadmission - -import ( - "fmt" - "io" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/admission/initializer" - "k8s.io/apiserver/pkg/authorization/authorizer" - "k8s.io/client-go/kubernetes" - coreapi "k8s.io/kubernetes/pkg/apis/core" - coreapiv1conversions "k8s.io/kubernetes/pkg/apis/core/v1" - - securityv1informers "github.com/openshift/client-go/security/informers/externalversions/security/v1" -) - -func RegisterSCCExecRestrictions(plugins *admission.Plugins) { - plugins.Register("security.openshift.io/SCCExecRestrictions", - func(config io.Reader) (admission.Interface, error) { - execAdmitter := NewSCCExecRestrictions() - return execAdmitter, nil - }) -} - -var ( - _ = initializer.WantsAuthorizer(&sccExecRestrictions{}) - _ = initializer.WantsExternalKubeClientSet(&sccExecRestrictions{}) - _ = WantsSecurityInformer(&sccExecRestrictions{}) - _ = admission.ValidationInterface(&sccExecRestrictions{}) -) - -// sccExecRestrictions is an implementation of admission.ValidationInterface which says no to a pod/exec on -// a pod that the user would not be allowed to create -type sccExecRestrictions struct { - *admission.Handler - constraintAdmission *constraint - client kubernetes.Interface -} - -func (d *sccExecRestrictions) Validate(a admission.Attributes, o admission.ObjectInterfaces) (err error) { - if a.GetOperation() != admission.Connect { - return nil - } - if a.GetResource().GroupResource() != coreapi.Resource("pods") { - return nil - } - if a.GetSubresource() != "attach" && a.GetSubresource() != "exec" { - return nil - } - - pod, err := d.client.CoreV1().Pods(a.GetNamespace()).Get(a.GetName(), metav1.GetOptions{}) - if err != nil { - return admission.NewForbidden(a, err) - } - // we have to convert to the internal pod because admission uses internal types for now - internalPod := &coreapi.Pod{} - if err := coreapiv1conversions.Convert_v1_Pod_To_core_Pod(pod, internalPod, nil); err != nil { - return admission.NewForbidden(a, err) - } - - // TODO, if we want to actually limit who can use which service account, then we'll need to add logic here to make sure that - // we're allowed to use the SA the pod is using. Otherwise, user-A creates pod and user-B (who can't use the SA) can exec into it. - createAttributes := admission.NewAttributesRecord(internalPod, nil, coreapi.Kind("Pod").WithVersion(""), a.GetNamespace(), a.GetName(), a.GetResource(), "", admission.Create, false, a.GetUserInfo()) - // call SCC.Admit instead of SCC.Validate because we accept that a different SCC is chosen. SCC.Validate would require - // that the chosen SCC (stored in the "openshift.io/scc" annotation) does not change. - if err := d.constraintAdmission.Admit(createAttributes, o); err != nil { - return admission.NewForbidden(a, fmt.Errorf("%s operation is not allowed because the pod's security context exceeds your permissions: %v", a.GetSubresource(), err)) - } - - return nil -} - -// NewSCCExecRestrictions creates a new admission controller that denies an exec operation on a privileged pod -func NewSCCExecRestrictions() *sccExecRestrictions { - return &sccExecRestrictions{ - Handler: admission.NewHandler(admission.Connect), - constraintAdmission: NewConstraint(), - } -} - -func (d *sccExecRestrictions) SetExternalKubeClientSet(c kubernetes.Interface) { - d.client = c - d.constraintAdmission.SetExternalKubeClientSet(c) -} - -func (d *sccExecRestrictions) SetSecurityInformers(informers securityv1informers.SecurityContextConstraintsInformer) { - d.constraintAdmission.SetSecurityInformers(informers) -} - -func (d *sccExecRestrictions) SetAuthorizer(authorizer authorizer.Authorizer) { - d.constraintAdmission.SetAuthorizer(authorizer) -} - -// Validate defines actions to validate sccExecRestrictions -func (d *sccExecRestrictions) ValidateInitialization() error { - return d.constraintAdmission.ValidateInitialization() -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/scc_exec_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/scc_exec_test.go deleted file mode 100644 index 044d9a35c..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission/scc_exec_test.go +++ /dev/null @@ -1,122 +0,0 @@ -package sccadmission - -import ( - "testing" - - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apiserver/pkg/admission" - "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/client-go/kubernetes/fake" - clientgotesting "k8s.io/client-go/testing" - "k8s.io/client-go/tools/cache" - coreapi "k8s.io/kubernetes/pkg/apis/core" - - securityv1listers "github.com/openshift/client-go/security/listers/security/v1" -) - -// scc exec is a pass through to *constraint, so we only need to test that -// it correctly limits its actions to certain conditions -func TestExecAdmit(t *testing.T) { - goodPod := func() *corev1.Pod { - return &corev1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - }, - Spec: corev1.PodSpec{ - ServiceAccountName: "default", - Containers: []corev1.Container{ - { - SecurityContext: &corev1.SecurityContext{}, - }, - }, - }, - } - } - - testCases := map[string]struct { - operation admission.Operation - resource string - subresource string - - pod *corev1.Pod - shouldAdmit bool - shouldHaveClientAction bool - }{ - "unchecked operation": { - operation: admission.Create, - resource: string(coreapi.ResourcePods), - subresource: "exec", - pod: goodPod(), - shouldAdmit: true, - shouldHaveClientAction: false, - }, - "unchecked resource": { - operation: admission.Connect, - resource: string(coreapi.ResourceSecrets), - subresource: "exec", - pod: goodPod(), - shouldAdmit: true, - shouldHaveClientAction: false, - }, - "unchecked subresource": { - operation: admission.Connect, - resource: string(coreapi.ResourcePods), - subresource: "not-exec", - pod: goodPod(), - shouldAdmit: true, - shouldHaveClientAction: false, - }, - "attach check": { - operation: admission.Connect, - resource: string(coreapi.ResourcePods), - subresource: "attach", - pod: goodPod(), - shouldAdmit: false, - shouldHaveClientAction: true, - }, - "exec check": { - operation: admission.Connect, - resource: string(coreapi.ResourcePods), - subresource: "exec", - pod: goodPod(), - shouldAdmit: false, - shouldHaveClientAction: true, - }, - } - - for k, v := range testCases { - tc := fake.NewSimpleClientset(v.pod) - tc.PrependReactor("get", "pods", func(action clientgotesting.Action) (handled bool, ret runtime.Object, err error) { - return true, v.pod, nil - }) - - // create the admission plugin - p := NewSCCExecRestrictions() - indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) - cache := securityv1listers.NewSecurityContextConstraintsLister(indexer) - p.constraintAdmission.sccLister = cache - p.SetExternalKubeClientSet(tc) - - attrs := admission.NewAttributesRecord(nil, nil, coreapi.Kind("Pod").WithVersion("version"), "namespace", "pod-name", coreapi.Resource(v.resource).WithVersion("version"), v.subresource, v.operation, false, &user.DefaultInfo{}) - err := p.Validate(attrs, nil) - - if v.shouldAdmit && err != nil { - t.Errorf("%s: expected no errors but received %v", k, err) - } - if !v.shouldAdmit && err == nil { - t.Errorf("%s: expected errors but received none", k) - } - - for _, action := range tc.Actions() { - t.Logf("%s: %#v", k, action) - } - if !v.shouldHaveClientAction && (len(tc.Actions()) > 0) { - t.Errorf("%s: unexpected actions: %v", k, tc.Actions()) - } - if v.shouldHaveClientAction && (len(tc.Actions()) == 0) { - t.Errorf("%s: no actions found", k) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/capabilities/mustrunas.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/capabilities/mustrunas.go deleted file mode 100644 index 3fd4eb9b0..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/capabilities/mustrunas.go +++ /dev/null @@ -1,149 +0,0 @@ -package capabilities - -import ( - "fmt" - - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -// defaultCapabilities implements the CapabilitiesSecurityContextConstraintsStrategy interface -type defaultCapabilities struct { - defaultAddCapabilities []corev1.Capability - requiredDropCapabilities []corev1.Capability - allowedCaps []corev1.Capability -} - -var _ CapabilitiesSecurityContextConstraintsStrategy = &defaultCapabilities{} - -// NewDefaultCapabilities creates a new defaultCapabilities strategy that will provide defaults and validation -// based on the configured initial caps and allowed caps. -func NewDefaultCapabilities(defaultAddCapabilities, requiredDropCapabilities, allowedCaps []corev1.Capability) (CapabilitiesSecurityContextConstraintsStrategy, error) { - return &defaultCapabilities{ - defaultAddCapabilities: defaultAddCapabilities, - requiredDropCapabilities: requiredDropCapabilities, - allowedCaps: allowedCaps, - }, nil -} - -// Generate creates the capabilities based on policy rules. Generate will produce the following: -// 1. a capabilities.Add set containing all the required adds (unless the -// container specifically is dropping the cap) and container requested adds -// 2. a capabilities.Drop set containing all the required drops and container requested drops -// -// Returns the original container capabilities if no changes are required. -func (s *defaultCapabilities) Generate(pod *api.Pod, container *api.Container) (*api.Capabilities, error) { - defaultAdd := makeCapSet(s.defaultAddCapabilities) - requiredDrop := makeCapSet(s.requiredDropCapabilities) - containerAdd := sets.NewString() - containerDrop := sets.NewString() - - var containerCapabilities *api.Capabilities - if container.SecurityContext != nil && container.SecurityContext.Capabilities != nil { - containerCapabilities = container.SecurityContext.Capabilities - containerAdd = makeCapSetInternal(container.SecurityContext.Capabilities.Add) - containerDrop = makeCapSetInternal(container.SecurityContext.Capabilities.Drop) - } - - // remove any default adds that the container is specifically dropping - defaultAdd = defaultAdd.Difference(containerDrop) - - combinedAdd := defaultAdd.Union(containerAdd) - combinedDrop := requiredDrop.Union(containerDrop) - - // no changes? return the original capabilities - if (len(combinedAdd) == len(containerAdd)) && (len(combinedDrop) == len(containerDrop)) { - return containerCapabilities, nil - } - - return &api.Capabilities{ - Add: capabilityFromStringSlice(combinedAdd.List()), - Drop: capabilityFromStringSlice(combinedDrop.List()), - }, nil -} - -// Validate ensures that the specified values fall within the range of the strategy. -func (s *defaultCapabilities) Validate(pod *api.Pod, container *api.Container, capabilities *api.Capabilities) field.ErrorList { - allErrs := field.ErrorList{} - - if capabilities == nil { - // if container.SC.Caps is nil then nothing was defaulted by the strat or requested by the pod author - // if there are no required caps on the strategy and nothing is requested on the pod - // then we can safely return here without further validation. - if len(s.defaultAddCapabilities) == 0 && len(s.requiredDropCapabilities) == 0 { - return allErrs - } - - // container has no requested caps but we have required caps. We should have something in - // at least the drops on the container. - allErrs = append(allErrs, field.Invalid(field.NewPath("capabilities"), capabilities, - "required capabilities are not set on the securityContext")) - return allErrs - } - - allowedAdd := makeCapSet(s.allowedCaps) - allowAllCaps := allowedAdd.Has(string(securityv1.AllowAllCapabilities)) - if allowAllCaps { - // skip validation against allowed/defaultAdd/requiredDrop because all capabilities are allowed by a wildcard - return allErrs - } - - // validate that anything being added is in the default or allowed sets - defaultAdd := makeCapSet(s.defaultAddCapabilities) - - for _, cap := range capabilities.Add { - sCap := string(cap) - if !defaultAdd.Has(sCap) && !allowedAdd.Has(sCap) { - allErrs = append(allErrs, field.Invalid(field.NewPath("capabilities", "add"), sCap, "capability may not be added")) - } - } - - // validate that anything that is required to be dropped is in the drop set - containerDrops := makeCapSetInternal(capabilities.Drop) - - for _, requiredDrop := range s.requiredDropCapabilities { - sDrop := string(requiredDrop) - if !containerDrops.Has(sDrop) { - allErrs = append(allErrs, field.Invalid(field.NewPath("capabilities", "drop"), capabilities.Drop, - fmt.Sprintf("%s is required to be dropped but was not found", sDrop))) - } - } - - return allErrs -} - -// capabilityFromStringSlice creates a capability slice from a string slice. -func capabilityFromStringSlice(slice []string) []api.Capability { - if len(slice) == 0 { - return nil - } - caps := []api.Capability{} - for _, c := range slice { - caps = append(caps, api.Capability(c)) - } - return caps -} - -// makeCapSet makes a string set from capabilities and normalizes them to be all lower case to help -// with comparisons. -func makeCapSetInternal(caps []api.Capability) sets.String { - s := sets.NewString() - for _, c := range caps { - s.Insert(string(c)) - } - return s -} - -// makeCapSet makes a string set from capabilities and normalizes them to be all lower case to help -// with comparisons. -func makeCapSet(caps []corev1.Capability) sets.String { - s := sets.NewString() - for _, c := range caps { - s.Insert(string(c)) - } - return s -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/capabilities/mustrunas_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/capabilities/mustrunas_test.go deleted file mode 100644 index e28edeb66..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/capabilities/mustrunas_test.go +++ /dev/null @@ -1,396 +0,0 @@ -package capabilities - -import ( - "reflect" - "testing" - - corev1 "k8s.io/api/core/v1" - api "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -func TestGenerateAdds(t *testing.T) { - tests := map[string]struct { - defaultAddCaps []corev1.Capability - requiredDropCaps []corev1.Capability - containerCaps *api.Capabilities - expectedCaps *api.Capabilities - }{ - "no required, no container requests": { - expectedCaps: nil, - }, - "no required, no container requests, non-nil": { - containerCaps: &api.Capabilities{}, - expectedCaps: &api.Capabilities{}, - }, - "required, no container requests": { - defaultAddCaps: []corev1.Capability{"foo"}, - expectedCaps: &api.Capabilities{ - Add: []api.Capability{"foo"}, - }, - }, - "required, container requests add required": { - defaultAddCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"foo"}, - }, - expectedCaps: &api.Capabilities{ - Add: []api.Capability{"foo"}, - }, - }, - "multiple required, container requests add required": { - defaultAddCaps: []corev1.Capability{"foo", "bar", "baz"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"foo"}, - }, - expectedCaps: &api.Capabilities{ - Add: []api.Capability{"bar", "baz", "foo"}, - }, - }, - "required, container requests add non-required": { - defaultAddCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"bar"}, - }, - expectedCaps: &api.Capabilities{ - Add: []api.Capability{"bar", "foo"}, - }, - }, - "generation does not mutate unnecessarily": { - defaultAddCaps: []corev1.Capability{"foo", "bar"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"foo", "foo", "bar", "baz"}, - }, - expectedCaps: &api.Capabilities{ - Add: []api.Capability{"foo", "foo", "bar", "baz"}, - }, - }, - "generation dedupes": { - defaultAddCaps: []corev1.Capability{"foo", "bar"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"foo", "baz"}, - }, - expectedCaps: &api.Capabilities{ - Add: []api.Capability{"bar", "baz", "foo"}, - }, - }, - "generation is case sensitive - will not dedupe": { - defaultAddCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"FOO"}, - }, - expectedCaps: &api.Capabilities{ - Add: []api.Capability{"FOO", "foo"}, - }, - }, - } - - for k, v := range tests { - container := &api.Container{ - SecurityContext: &api.SecurityContext{ - Capabilities: v.containerCaps, - }, - } - - strategy, err := NewDefaultCapabilities(v.defaultAddCaps, v.requiredDropCaps, nil) - if err != nil { - t.Errorf("%s failed: %v", k, err) - continue - } - generatedCaps, err := strategy.Generate(nil, container) - if err != nil { - t.Errorf("%s failed generating: %v", k, err) - continue - } - if v.expectedCaps == nil && generatedCaps != nil { - t.Errorf("%s expected nil caps to be generated but got %v", k, generatedCaps) - continue - } - if !reflect.DeepEqual(v.expectedCaps, generatedCaps) { - t.Errorf("%s did not generate correctly. Expected: %#v, Actual: %#v", k, v.expectedCaps, generatedCaps) - } - } -} - -func TestGenerateDrops(t *testing.T) { - tests := map[string]struct { - defaultAddCaps []corev1.Capability - requiredDropCaps []corev1.Capability - containerCaps *api.Capabilities - expectedCaps *api.Capabilities - }{ - "no required, no container requests": { - expectedCaps: nil, - }, - "no required, no container requests, non-nil": { - containerCaps: &api.Capabilities{}, - expectedCaps: &api.Capabilities{}, - }, - "required drops are defaulted": { - requiredDropCaps: []corev1.Capability{"foo"}, - expectedCaps: &api.Capabilities{ - Drop: []api.Capability{"foo"}, - }, - }, - "required drops are defaulted when making container requests": { - requiredDropCaps: []corev1.Capability{"baz"}, - containerCaps: &api.Capabilities{ - Drop: []api.Capability{"foo", "bar"}, - }, - expectedCaps: &api.Capabilities{ - Drop: []api.Capability{"bar", "baz", "foo"}, - }, - }, - "required drops do not mutate unnecessarily": { - requiredDropCaps: []corev1.Capability{"baz"}, - containerCaps: &api.Capabilities{ - Drop: []api.Capability{"foo", "bar", "baz"}, - }, - expectedCaps: &api.Capabilities{ - Drop: []api.Capability{"foo", "bar", "baz"}, - }, - }, - "can drop a required add": { - defaultAddCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Drop: []api.Capability{"foo"}, - }, - expectedCaps: &api.Capabilities{ - Drop: []api.Capability{"foo"}, - }, - }, - "can drop non-required add": { - defaultAddCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Drop: []api.Capability{"bar"}, - }, - expectedCaps: &api.Capabilities{ - Add: []api.Capability{"foo"}, - Drop: []api.Capability{"bar"}, - }, - }, - "defaulting adds and drops, dropping a required add": { - defaultAddCaps: []corev1.Capability{"foo", "bar", "baz"}, - requiredDropCaps: []corev1.Capability{"abc"}, - containerCaps: &api.Capabilities{ - Drop: []api.Capability{"foo"}, - }, - expectedCaps: &api.Capabilities{ - Add: []api.Capability{"bar", "baz"}, - Drop: []api.Capability{"abc", "foo"}, - }, - }, - "generation dedupes": { - requiredDropCaps: []corev1.Capability{"baz", "foo"}, - containerCaps: &api.Capabilities{ - Drop: []api.Capability{"bar", "foo"}, - }, - expectedCaps: &api.Capabilities{ - Drop: []api.Capability{"bar", "baz", "foo"}, - }, - }, - "generation is case sensitive - will not dedupe": { - requiredDropCaps: []corev1.Capability{"bar"}, - containerCaps: &api.Capabilities{ - Drop: []api.Capability{"BAR"}, - }, - expectedCaps: &api.Capabilities{ - Drop: []api.Capability{"BAR", "bar"}, - }, - }, - } - for k, v := range tests { - container := &api.Container{ - SecurityContext: &api.SecurityContext{ - Capabilities: v.containerCaps, - }, - } - - strategy, err := NewDefaultCapabilities(v.defaultAddCaps, v.requiredDropCaps, nil) - if err != nil { - t.Errorf("%s failed: %v", k, err) - continue - } - generatedCaps, err := strategy.Generate(nil, container) - if err != nil { - t.Errorf("%s failed generating: %v", k, err) - continue - } - if v.expectedCaps == nil && generatedCaps != nil { - t.Errorf("%s expected nil caps to be generated but got %#v", k, generatedCaps) - continue - } - if !reflect.DeepEqual(v.expectedCaps, generatedCaps) { - t.Errorf("%s did not generate correctly. Expected: %#v, Actual: %#v", k, v.expectedCaps, generatedCaps) - } - } -} - -func TestValidateAdds(t *testing.T) { - tests := map[string]struct { - defaultAddCaps []corev1.Capability - requiredDropCaps []corev1.Capability - allowedCaps []corev1.Capability - containerCaps *api.Capabilities - shouldPass bool - }{ - // no container requests - "no required, no allowed, no container requests": { - shouldPass: true, - }, - "no required, allowed, no container requests": { - allowedCaps: []corev1.Capability{"foo"}, - shouldPass: true, - }, - "required, no allowed, no container requests": { - defaultAddCaps: []corev1.Capability{"foo"}, - shouldPass: false, - }, - - // container requests match required - "required, no allowed, container requests valid": { - defaultAddCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"foo"}, - }, - shouldPass: true, - }, - "required, no allowed, container requests invalid": { - defaultAddCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"bar"}, - }, - shouldPass: false, - }, - - // container requests match allowed - "no required, allowed, container requests valid": { - allowedCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"foo"}, - }, - shouldPass: true, - }, - "no required, all allowed, container requests valid": { - allowedCaps: []corev1.Capability{securityv1.AllowAllCapabilities}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"foo"}, - }, - shouldPass: true, - }, - "no required, allowed, container requests invalid": { - allowedCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"bar"}, - }, - shouldPass: false, - }, - - // required and allowed - "required, allowed, container requests valid required": { - defaultAddCaps: []corev1.Capability{"foo"}, - allowedCaps: []corev1.Capability{"bar"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"foo"}, - }, - shouldPass: true, - }, - "required, allowed, container requests valid allowed": { - defaultAddCaps: []corev1.Capability{"foo"}, - allowedCaps: []corev1.Capability{"bar"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"bar"}, - }, - shouldPass: true, - }, - "required, allowed, container requests invalid": { - defaultAddCaps: []corev1.Capability{"foo"}, - allowedCaps: []corev1.Capability{"bar"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"baz"}, - }, - shouldPass: false, - }, - "validation is case sensitive": { - defaultAddCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Add: []api.Capability{"FOO"}, - }, - shouldPass: false, - }, - } - - for k, v := range tests { - strategy, err := NewDefaultCapabilities(v.defaultAddCaps, v.requiredDropCaps, v.allowedCaps) - if err != nil { - t.Errorf("%s failed: %v", k, err) - continue - } - errs := strategy.Validate(nil, nil, v.containerCaps) - if v.shouldPass && len(errs) > 0 { - t.Errorf("%s should have passed but had errors %v", k, errs) - continue - } - if !v.shouldPass && len(errs) == 0 { - t.Errorf("%s should have failed but recieved no errors", k) - } - } -} - -func TestValidateDrops(t *testing.T) { - tests := map[string]struct { - defaultAddCaps []corev1.Capability - requiredDropCaps []corev1.Capability - containerCaps *api.Capabilities - shouldPass bool - }{ - // no container requests - "no required, no container requests": { - shouldPass: true, - }, - "required, no container requests": { - requiredDropCaps: []corev1.Capability{"foo"}, - shouldPass: false, - }, - - // container requests match required - "required, container requests valid": { - requiredDropCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Drop: []api.Capability{"foo"}, - }, - shouldPass: true, - }, - "required, container requests invalid": { - requiredDropCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Drop: []api.Capability{"bar"}, - }, - shouldPass: false, - }, - "validation is case sensitive": { - requiredDropCaps: []corev1.Capability{"foo"}, - containerCaps: &api.Capabilities{ - Drop: []api.Capability{"FOO"}, - }, - shouldPass: false, - }, - } - - for k, v := range tests { - strategy, err := NewDefaultCapabilities(v.defaultAddCaps, v.requiredDropCaps, nil) - if err != nil { - t.Errorf("%s failed: %v", k, err) - continue - } - errs := strategy.Validate(nil, nil, v.containerCaps) - if v.shouldPass && len(errs) > 0 { - t.Errorf("%s should have passed but had errors %v", k, errs) - continue - } - if !v.shouldPass && len(errs) == 0 { - t.Errorf("%s should have failed but recieved no errors", k) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/capabilities/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/capabilities/types.go deleted file mode 100644 index b92c1c817..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/capabilities/types.go +++ /dev/null @@ -1,14 +0,0 @@ -package capabilities - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" -) - -// CapabilitiesSecurityContextConstraintsStrategy defines the interface for all cap constraint strategies. -type CapabilitiesSecurityContextConstraintsStrategy interface { - // Generate creates the capabilities based on policy rules. - Generate(pod *api.Pod, container *api.Container) (*api.Capabilities, error) - // Validate ensures that the specified values fall within the range of the strategy. - Validate(pod *api.Pod, container *api.Container, capabilities *api.Capabilities) field.ErrorList -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/mustrunas.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/mustrunas.go deleted file mode 100644 index f821e4e90..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/mustrunas.go +++ /dev/null @@ -1,76 +0,0 @@ -package group - -import ( - "fmt" - - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -// mustRunAs implements the GroupSecurityContextConstraintsStrategy interface -type mustRunAs struct { - ranges []securityv1.IDRange - field string -} - -var _ GroupSecurityContextConstraintsStrategy = &mustRunAs{} - -// NewMustRunAs provides a new MustRunAs strategy based on ranges. -func NewMustRunAs(ranges []securityv1.IDRange, field string) (GroupSecurityContextConstraintsStrategy, error) { - if len(ranges) == 0 { - return nil, fmt.Errorf("ranges must be supplied for MustRunAs") - } - return &mustRunAs{ - ranges: ranges, - field: field, - }, nil -} - -// Generate creates the group based on policy rules. By default this returns the first group of the -// first range (min val). -func (s *mustRunAs) Generate(_ *api.Pod) ([]int64, error) { - return []int64{s.ranges[0].Min}, nil -} - -// Generate a single value to be applied. This is used for FSGroup. This strategy will return -// the first group of the first range (min val). -func (s *mustRunAs) GenerateSingle(_ *api.Pod) (*int64, error) { - single := new(int64) - *single = s.ranges[0].Min - return single, nil -} - -// Validate ensures that the specified values fall within the range of the strategy. -// Groups are passed in here to allow this strategy to support multiple group fields (fsgroup and -// supplemental groups). -func (s *mustRunAs) Validate(_ *api.Pod, groups []int64) field.ErrorList { - allErrs := field.ErrorList{} - - if len(groups) == 0 && len(s.ranges) > 0 { - allErrs = append(allErrs, field.Invalid(field.NewPath(s.field), groups, "unable to validate empty groups against required ranges")) - } - - for _, group := range groups { - if !s.isGroupValid(group) { - detail := fmt.Sprintf("%d is not an allowed group", group) - allErrs = append(allErrs, field.Invalid(field.NewPath(s.field), groups, detail)) - } - } - - return allErrs -} - -func (s *mustRunAs) isGroupValid(group int64) bool { - for _, rng := range s.ranges { - if fallsInRange(group, rng) { - return true - } - } - return false -} - -func fallsInRange(group int64, rng securityv1.IDRange) bool { - return group >= rng.Min && group <= rng.Max -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/mustrunas_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/mustrunas_test.go deleted file mode 100644 index 8e6d41686..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/mustrunas_test.go +++ /dev/null @@ -1,163 +0,0 @@ -package group - -import ( - "testing" - - api "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -func TestMustRunAsOptions(t *testing.T) { - tests := map[string]struct { - ranges []securityv1.IDRange - pass bool - }{ - "empty": { - ranges: []securityv1.IDRange{}, - }, - "ranges": { - ranges: []securityv1.IDRange{ - {Min: 1, Max: 1}, - }, - pass: true, - }, - } - - for k, v := range tests { - _, err := NewMustRunAs(v.ranges, "") - if v.pass && err != nil { - t.Errorf("error creating strategy for %s: %v", k, err) - } - if !v.pass && err == nil { - t.Errorf("expected error for %s but got none", k) - } - } -} - -func TestGenerate(t *testing.T) { - tests := map[string]struct { - ranges []securityv1.IDRange - expected []int64 - }{ - "multi value": { - ranges: []securityv1.IDRange{ - {Min: 1, Max: 2}, - }, - expected: []int64{1}, - }, - "single value": { - ranges: []securityv1.IDRange{ - {Min: 1, Max: 1}, - }, - expected: []int64{1}, - }, - "multi range": { - ranges: []securityv1.IDRange{ - {Min: 1, Max: 1}, - {Min: 2, Max: 500}, - }, - expected: []int64{1}, - }, - } - - for k, v := range tests { - s, err := NewMustRunAs(v.ranges, "") - if err != nil { - t.Errorf("error creating strategy for %s: %v", k, err) - } - actual, err := s.Generate(nil) - if err != nil { - t.Errorf("unexpected error for %s: %v", k, err) - } - if len(actual) != len(v.expected) { - t.Errorf("unexpected generated values. Expected %v, got %v", v.expected, actual) - continue - } - if len(actual) > 0 && len(v.expected) > 0 { - if actual[0] != v.expected[0] { - t.Errorf("unexpected generated values. Expected %v, got %v", v.expected, actual) - } - } - - single, err := s.GenerateSingle(nil) - if err != nil { - t.Errorf("unexpected error for %s: %v", k, err) - } - if single == nil { - t.Errorf("unexpected nil generated value for %s: %v", k, single) - } - if *single != v.expected[0] { - t.Errorf("unexpected generated single value. Expected %v, got %v", v.expected, actual) - } - } -} - -func TestValidate(t *testing.T) { - tests := map[string]struct { - ranges []securityv1.IDRange - pod *api.Pod - groups []int64 - pass bool - }{ - "nil security context": { - ranges: []securityv1.IDRange{ - {Min: 1, Max: 3}, - }, - }, - "empty groups": { - ranges: []securityv1.IDRange{ - {Min: 1, Max: 3}, - }, - }, - "not in range": { - groups: []int64{5}, - ranges: []securityv1.IDRange{ - {Min: 1, Max: 3}, - {Min: 4, Max: 4}, - }, - }, - "in range 1": { - groups: []int64{2}, - ranges: []securityv1.IDRange{ - {Min: 1, Max: 3}, - }, - pass: true, - }, - "in range boundry min": { - groups: []int64{1}, - ranges: []securityv1.IDRange{ - {Min: 1, Max: 3}, - }, - pass: true, - }, - "in range boundry max": { - groups: []int64{3}, - ranges: []securityv1.IDRange{ - {Min: 1, Max: 3}, - }, - pass: true, - }, - "singular range": { - groups: []int64{4}, - ranges: []securityv1.IDRange{ - {Min: 4, Max: 4}, - }, - pass: true, - }, - } - - for k, v := range tests { - s, err := NewMustRunAs(v.ranges, "") - if err != nil { - t.Errorf("error creating strategy for %s: %v", k, err) - } - errs := s.Validate(nil, v.groups) - if v.pass && len(errs) > 0 { - t.Errorf("unexpected errors for %s: %v", k, errs) - } - if !v.pass && len(errs) == 0 { - t.Errorf("expected no errors for %s but got: %v", k, errs) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/runasany.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/runasany.go deleted file mode 100644 index 850e802bd..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/runasany.go +++ /dev/null @@ -1,33 +0,0 @@ -package group - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" -) - -// mustRunAs implements the GroupSecurityContextConstraintsStrategy interface -type runAsAny struct { -} - -var _ GroupSecurityContextConstraintsStrategy = &runAsAny{} - -// NewRunAsAny provides a new RunAsAny strategy. -func NewRunAsAny() (GroupSecurityContextConstraintsStrategy, error) { - return &runAsAny{}, nil -} - -// Generate creates the group based on policy rules. This strategy returns an empty slice. -func (s *runAsAny) Generate(_ *api.Pod) ([]int64, error) { - return nil, nil -} - -// Generate a single value to be applied. This is used for FSGroup. This strategy returns nil. -func (s *runAsAny) GenerateSingle(_ *api.Pod) (*int64, error) { - return nil, nil -} - -// Validate ensures that the specified values fall within the range of the strategy. -func (s *runAsAny) Validate(_ *api.Pod, groups []int64) field.ErrorList { - return field.ErrorList{} - -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/runasany_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/runasany_test.go deleted file mode 100644 index 8a91c6e4d..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/runasany_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package group - -import ( - "testing" -) - -func TestRunAsAnyGenerate(t *testing.T) { - s, err := NewRunAsAny() - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsAny %v", err) - } - groups, err := s.Generate(nil) - if len(groups) > 0 { - t.Errorf("expected empty but got %v", groups) - } - if err != nil { - t.Errorf("unexpected error generating groups: %v", err) - } -} - -func TestRunAsAnyGenerateSingle(t *testing.T) { - s, err := NewRunAsAny() - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsAny %v", err) - } - group, err := s.GenerateSingle(nil) - if group != nil { - t.Errorf("expected empty but got %v", group) - } - if err != nil { - t.Errorf("unexpected error generating groups: %v", err) - } -} - -func TestRunAsAnyValidte(t *testing.T) { - s, err := NewRunAsAny() - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsAny %v", err) - } - errs := s.Validate(nil, nil) - if len(errs) != 0 { - t.Errorf("unexpected errors: %v", errs) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/types.go deleted file mode 100644 index ca7c34190..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group/types.go +++ /dev/null @@ -1,19 +0,0 @@ -package group - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" -) - -// GroupSecurityContextConstraintsStrategy defines the interface for all group constraint strategies. -type GroupSecurityContextConstraintsStrategy interface { - // Generate creates the group based on policy rules. The underlying implementation can - // decide whether it will return a full range of values or a subset of values from the - // configured ranges. - Generate(pod *api.Pod) ([]int64, error) - // Generate a single value to be applied. The underlying implementation decides which - // value to return if configured with multiple ranges. This is used for FSGroup. - GenerateSingle(pod *api.Pod) (*int64, error) - // Validate ensures that the specified values fall within the range of the strategy. - Validate(pod *api.Pod, groups []int64) field.ErrorList -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/matcher.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/matcher.go deleted file mode 100644 index 1c059f1c9..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/matcher.go +++ /dev/null @@ -1,408 +0,0 @@ -package sccmatching - -import ( - "fmt" - "sort" - "strings" - - "k8s.io/klog" - - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/util/validation/field" - "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/apiserver/pkg/authorization/authorizer" - "k8s.io/client-go/kubernetes" - kapi "k8s.io/kubernetes/pkg/apis/core" - - "github.com/openshift/api/security" - securityv1 "github.com/openshift/api/security/v1" - securityv1listers "github.com/openshift/client-go/security/listers/security/v1" - "github.com/openshift/library-go/pkg/security/uid" - sccsort "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort" -) - -type SCCMatcher interface { - FindApplicableSCCs(namespace string, user ...user.Info) ([]*securityv1.SecurityContextConstraints, error) -} - -type defaultSCCMatcher struct { - cache securityv1listers.SecurityContextConstraintsLister - authorizer authorizer.Authorizer -} - -func NewDefaultSCCMatcher(c securityv1listers.SecurityContextConstraintsLister, authorizer authorizer.Authorizer) SCCMatcher { - return &defaultSCCMatcher{cache: c, authorizer: authorizer} -} - -// FindApplicableSCCs implements SCCMatcher interface -// It finds all SCCs that the subjects in the `users` argument may use. -// The returned SCCs are sorted by priority. -func (d *defaultSCCMatcher) FindApplicableSCCs(namespace string, users ...user.Info) ([]*securityv1.SecurityContextConstraints, error) { - var matchedConstraints []*securityv1.SecurityContextConstraints - constraints, err := d.cache.List(labels.Everything()) - if err != nil { - return nil, err - } - - // filter out SCCs if we got some users, leave as is if not - if len(users) == 0 { - matchedConstraints = constraints - } else { - for _, constraint := range constraints { - for _, user := range users { - if ConstraintAppliesTo(constraint.Name, constraint.Users, constraint.Groups, user, namespace, d.authorizer) { - matchedConstraints = append(matchedConstraints, constraint) - break - } - } - } - } - - sort.Sort(sccsort.ByPriority(matchedConstraints)) - - return matchedConstraints, nil -} - -// authorizedForSCC returns true if info is authorized to perform the "use" verb on the SCC resource. -func authorizedForSCC(sccName string, info user.Info, namespace string, a authorizer.Authorizer) bool { - // check against the namespace that the pod is being created in to allow per-namespace SCC grants. - attr := authorizer.AttributesRecord{ - User: info, - Verb: "use", - Namespace: namespace, - Name: sccName, - APIGroup: security.GroupName, - Resource: "securitycontextconstraints", - ResourceRequest: true, - } - decision, reason, err := a.Authorize(attr) - if err != nil { - klog.V(5).Infof("cannot authorize for SCC: %v %q %v", decision, reason, err) - return false - } - return decision == authorizer.DecisionAllow -} - -// ConstraintAppliesTo inspects the constraint's users and groups against the userInfo to determine -// if it is usable by the userInfo. -// Anything we do here needs to work with a deny authorizer so the choices are limited to SAR / Authorizer -func ConstraintAppliesTo(sccName string, sccUsers, sccGroups []string, userInfo user.Info, namespace string, a authorizer.Authorizer) bool { - for _, user := range sccUsers { - if userInfo.GetName() == user { - return true - } - } - for _, userGroup := range userInfo.GetGroups() { - if constraintSupportsGroup(userGroup, sccGroups) { - return true - } - } - if a != nil { - return authorizedForSCC(sccName, userInfo, namespace, a) - } - return false -} - -// AssignSecurityContext creates a security context for each container in the pod -// and validates that the sc falls within the scc constraints. All containers must validate against -// the same scc or is not considered valid. -func AssignSecurityContext(provider SecurityContextConstraintsProvider, pod *kapi.Pod, fldPath *field.Path) field.ErrorList { - errs := field.ErrorList{} - - psc, generatedAnnotations, err := provider.CreatePodSecurityContext(pod) - if err != nil { - errs = append(errs, field.Invalid(fldPath.Child("spec", "securityContext"), pod.Spec.SecurityContext, err.Error())) - } - - pod.Spec.SecurityContext = psc - pod.Annotations = generatedAnnotations - errs = append(errs, provider.ValidatePodSecurityContext(pod, fldPath.Child("spec", "securityContext"))...) - - for i := range pod.Spec.InitContainers { - sc, err := provider.CreateContainerSecurityContext(pod, &pod.Spec.InitContainers[i]) - if err != nil { - errs = append(errs, field.Invalid(field.NewPath("spec", "initContainers").Index(i).Child("securityContext"), "", err.Error())) - continue - } - pod.Spec.InitContainers[i].SecurityContext = sc - errs = append(errs, provider.ValidateContainerSecurityContext(pod, &pod.Spec.InitContainers[i], field.NewPath("spec", "initContainers").Index(i).Child("securityContext"))...) - } - - for i := range pod.Spec.Containers { - sc, err := provider.CreateContainerSecurityContext(pod, &pod.Spec.Containers[i]) - if err != nil { - errs = append(errs, field.Invalid(field.NewPath("spec", "containers").Index(i).Child("securityContext"), "", err.Error())) - continue - } - pod.Spec.Containers[i].SecurityContext = sc - errs = append(errs, provider.ValidateContainerSecurityContext(pod, &pod.Spec.Containers[i], field.NewPath("spec", "containers").Index(i).Child("securityContext"))...) - } - - if len(errs) > 0 { - return errs - } - - return nil -} - -// constraintSupportsGroup checks that group is in constraintGroups. -func constraintSupportsGroup(group string, constraintGroups []string) bool { - for _, g := range constraintGroups { - if g == group { - return true - } - } - return false -} - -// getNamespaceByName retrieves a namespace only if ns is nil. -func getNamespaceByName(name string, ns *corev1.Namespace, client kubernetes.Interface) (*corev1.Namespace, error) { - if ns != nil && name == ns.Name { - return ns, nil - } - return client.CoreV1().Namespaces().Get(name, metav1.GetOptions{}) -} - -// CreateProvidersFromConstraints creates providers from the constraints supplied, including -// looking up pre-allocated values if necessary using the pod's namespace. -func CreateProvidersFromConstraints(ns string, sccs []*securityv1.SecurityContextConstraints, client kubernetes.Interface) ([]SecurityContextConstraintsProvider, []error) { - var ( - // namespace is declared here for reuse but we will not fetch it unless required by the matched constraints - namespace *corev1.Namespace - // collected providers - providers []SecurityContextConstraintsProvider - // collected errors to return - errs []error - ) - - // set pre-allocated values on constraints - for _, constraint := range sccs { - var ( - provider SecurityContextConstraintsProvider - err error - ) - provider, namespace, err = CreateProviderFromConstraint(ns, namespace, constraint, client) - if err != nil { - errs = append(errs, err) - continue - } - providers = append(providers, provider) - } - return providers, errs -} - -// CreateProviderFromConstraint creates a SecurityContextConstraintProvider from a SecurityContextConstraint -func CreateProviderFromConstraint(ns string, namespace *corev1.Namespace, constraint *securityv1.SecurityContextConstraints, client kubernetes.Interface) (SecurityContextConstraintsProvider, *corev1.Namespace, error) { - var err error - resolveUIDRange := requiresPreAllocatedUIDRange(constraint) - resolveSELinuxLevel := requiresPreAllocatedSELinuxLevel(constraint) - resolveFSGroup := requiresPreallocatedFSGroup(constraint) - resolveSupplementalGroups := requiresPreallocatedSupplementalGroups(constraint) - requiresNamespaceAllocations := resolveUIDRange || resolveSELinuxLevel || resolveFSGroup || resolveSupplementalGroups - - if requiresNamespaceAllocations { - // Ensure we have the namespace - namespace, err = getNamespaceByName(ns, namespace, client) - if err != nil { - return nil, namespace, fmt.Errorf("error fetching namespace %s required to preallocate values for %s: %v", ns, constraint.Name, err) - } - } - - // Make a copy of the constraint so we don't mutate the store's cache - constraint = constraint.DeepCopy() - - // Resolve the values from the namespace - if resolveUIDRange { - constraint.RunAsUser.UIDRangeMin, constraint.RunAsUser.UIDRangeMax, err = getPreallocatedUIDRange(namespace) - if err != nil { - return nil, namespace, fmt.Errorf("unable to find pre-allocated uid annotation for namespace %s while trying to configure SCC %s: %v", namespace.Name, constraint.Name, err) - } - } - if resolveSELinuxLevel { - var level string - if level, err = getPreallocatedLevel(namespace); err != nil { - return nil, namespace, fmt.Errorf("unable to find pre-allocated mcs annotation for namespace %s while trying to configure SCC %s: %v", namespace.Name, constraint.Name, err) - } - - if constraint.SELinuxContext.SELinuxOptions == nil { - constraint.SELinuxContext.SELinuxOptions = &corev1.SELinuxOptions{} - } - constraint.SELinuxContext.SELinuxOptions.Level = level - } - if resolveFSGroup { - fsGroup, err := getPreallocatedFSGroup(namespace) - if err != nil { - return nil, namespace, fmt.Errorf("unable to find pre-allocated group annotation for namespace %s while trying to configure SCC %s: %v", namespace.Name, constraint.Name, err) - } - constraint.FSGroup.Ranges = fsGroup - } - if resolveSupplementalGroups { - supplementalGroups, err := getPreallocatedSupplementalGroups(namespace) - if err != nil { - return nil, namespace, fmt.Errorf("unable to find pre-allocated group annotation for namespace %s while trying to configure SCC %s: %v", namespace.Name, constraint.Name, err) - } - constraint.SupplementalGroups.Ranges = supplementalGroups - } - - // Create the provider - provider, err := NewSimpleProvider(constraint) - if err != nil { - return nil, namespace, fmt.Errorf("error creating provider for SCC %s in namespace %s: %v", constraint.Name, ns, err) - } - return provider, namespace, nil -} - -// getPreallocatedUIDRange retrieves the annotated value from the namespace, splits it to make -// the min/max and formats the data into the necessary types for the strategy options. -func getPreallocatedUIDRange(ns *corev1.Namespace) (*int64, *int64, error) { - annotationVal, ok := ns.Annotations[securityv1.UIDRangeAnnotation] - if !ok { - return nil, nil, fmt.Errorf("unable to find annotation %s", securityv1.UIDRangeAnnotation) - } - if len(annotationVal) == 0 { - return nil, nil, fmt.Errorf("found annotation %s but it was empty", securityv1.UIDRangeAnnotation) - } - uidBlock, err := uid.ParseBlock(annotationVal) - if err != nil { - return nil, nil, err - } - - var min int64 = int64(uidBlock.Start) - var max int64 = int64(uidBlock.End) - klog.V(4).Infof("got preallocated values for min: %d, max: %d for uid range in namespace %s", min, max, ns.Name) - return &min, &max, nil -} - -// getPreallocatedLevel gets the annotated value from the namespace. -func getPreallocatedLevel(ns *corev1.Namespace) (string, error) { - level, ok := ns.Annotations[securityv1.MCSAnnotation] - if !ok { - return "", fmt.Errorf("unable to find annotation %s", securityv1.MCSAnnotation) - } - if len(level) == 0 { - return "", fmt.Errorf("found annotation %s but it was empty", securityv1.MCSAnnotation) - } - klog.V(4).Infof("got preallocated value for level: %s for selinux options in namespace %s", level, ns.Name) - return level, nil -} - -// getSupplementalGroupsAnnotation provides a backwards compatible way to get supplemental groups -// annotations from a namespace by looking for SupplementalGroupsAnnotation and falling back to -// UIDRangeAnnotation if it is not found. -func getSupplementalGroupsAnnotation(ns *corev1.Namespace) (string, error) { - groups, ok := ns.Annotations[securityv1.SupplementalGroupsAnnotation] - if !ok { - klog.V(4).Infof("unable to find supplemental group annotation %s falling back to %s", securityv1.SupplementalGroupsAnnotation, securityv1.UIDRangeAnnotation) - - groups, ok = ns.Annotations[securityv1.UIDRangeAnnotation] - if !ok { - return "", fmt.Errorf("unable to find supplemental group or uid annotation for namespace %s", ns.Name) - } - } - - if len(groups) == 0 { - return "", fmt.Errorf("unable to find groups using %s and %s annotations", securityv1.SupplementalGroupsAnnotation, securityv1.UIDRangeAnnotation) - } - return groups, nil -} - -// getPreallocatedFSGroup gets the annotated value from the namespace. -func getPreallocatedFSGroup(ns *corev1.Namespace) ([]securityv1.IDRange, error) { - groups, err := getSupplementalGroupsAnnotation(ns) - if err != nil { - return nil, err - } - klog.V(4).Infof("got preallocated value for groups: %s in namespace %s", groups, ns.Name) - - blocks, err := parseSupplementalGroupAnnotation(groups) - if err != nil { - return nil, err - } - return []securityv1.IDRange{ - { - Min: int64(blocks[0].Start), - Max: int64(blocks[0].Start), - }, - }, nil -} - -// getPreallocatedSupplementalGroups gets the annotated value from the namespace. -func getPreallocatedSupplementalGroups(ns *corev1.Namespace) ([]securityv1.IDRange, error) { - groups, err := getSupplementalGroupsAnnotation(ns) - if err != nil { - return nil, err - } - klog.V(4).Infof("got preallocated value for groups: %s in namespace %s", groups, ns.Name) - - blocks, err := parseSupplementalGroupAnnotation(groups) - if err != nil { - return nil, err - } - - idRanges := []securityv1.IDRange{} - for _, block := range blocks { - rng := securityv1.IDRange{ - Min: int64(block.Start), - Max: int64(block.End), - } - idRanges = append(idRanges, rng) - } - return idRanges, nil -} - -// parseSupplementalGroupAnnotation parses the group annotation into blocks. -func parseSupplementalGroupAnnotation(groups string) ([]uid.Block, error) { - blocks := []uid.Block{} - segments := strings.Split(groups, ",") - for _, segment := range segments { - block, err := uid.ParseBlock(segment) - if err != nil { - return nil, err - } - blocks = append(blocks, block) - } - if len(blocks) == 0 { - return nil, fmt.Errorf("no blocks parsed from annotation %s", groups) - } - return blocks, nil -} - -// requiresPreAllocatedUIDRange returns true if the strategy is must run in range and the min or max -// is not set. -func requiresPreAllocatedUIDRange(constraint *securityv1.SecurityContextConstraints) bool { - if constraint.RunAsUser.Type != securityv1.RunAsUserStrategyMustRunAsRange { - return false - } - return constraint.RunAsUser.UIDRangeMin == nil && constraint.RunAsUser.UIDRangeMax == nil -} - -// requiresPreAllocatedSELinuxLevel returns true if the strategy is must run as and the level is not set. -func requiresPreAllocatedSELinuxLevel(constraint *securityv1.SecurityContextConstraints) bool { - if constraint.SELinuxContext.Type != securityv1.SELinuxStrategyMustRunAs { - return false - } - if constraint.SELinuxContext.SELinuxOptions == nil { - return true - } - return constraint.SELinuxContext.SELinuxOptions.Level == "" -} - -// requiresPreAllocatedSELinuxLevel returns true if the strategy is must run as and there is no -// range specified. -func requiresPreallocatedSupplementalGroups(constraint *securityv1.SecurityContextConstraints) bool { - if constraint.SupplementalGroups.Type != securityv1.SupplementalGroupsStrategyMustRunAs { - return false - } - return len(constraint.SupplementalGroups.Ranges) == 0 -} - -// requiresPreallocatedFSGroup returns true if the strategy is must run as and there is no -// range specified. -func requiresPreallocatedFSGroup(constraint *securityv1.SecurityContextConstraints) bool { - if constraint.FSGroup.Type != securityv1.FSGroupStrategyMustRunAs { - return false - } - return len(constraint.FSGroup.Ranges) == 0 -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/matcher_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/matcher_test.go deleted file mode 100644 index ecd1e459b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/matcher_test.go +++ /dev/null @@ -1,512 +0,0 @@ -package sccmatching - -import ( - "testing" - - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - kapi "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" - "github.com/openshift/library-go/pkg/security/uid" -) - -func TestAssignSecurityContext(t *testing.T) { - // set up test data - // scc that will deny privileged container requests and has a default value for a field (uid) - var uid int64 = 9999 - fsGroup := int64(1) - scc := &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "test scc", - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyRunAsAny, - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAs, - UID: &uid, - }, - - // require allocation for a field in the psc as well to test changes/no changes - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - Ranges: []securityv1.IDRange{ - {Min: fsGroup, Max: fsGroup}, - }, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - } - provider, err := NewSimpleProvider(scc) - if err != nil { - t.Fatalf("failed to create provider: %v", err) - } - - createContainer := func(priv bool) kapi.Container { - return kapi.Container{ - SecurityContext: &kapi.SecurityContext{ - Privileged: &priv, - }, - } - } - - testCases := map[string]struct { - pod *kapi.Pod - shouldValidate bool - expectedUID *int64 - }{ - "pod and container SC is not changed when invalid": { - pod: &kapi.Pod{ - Spec: kapi.PodSpec{ - SecurityContext: &kapi.PodSecurityContext{}, - Containers: []kapi.Container{createContainer(true)}, - }, - }, - shouldValidate: false, - }, - "must validate all containers": { - pod: &kapi.Pod{ - Spec: kapi.PodSpec{ - // good pod and bad pod - SecurityContext: &kapi.PodSecurityContext{}, - Containers: []kapi.Container{createContainer(false), createContainer(true)}, - }, - }, - shouldValidate: false, - }, - "pod validates": { - pod: &kapi.Pod{ - Spec: kapi.PodSpec{ - SecurityContext: &kapi.PodSecurityContext{}, - Containers: []kapi.Container{createContainer(false)}, - }, - }, - shouldValidate: true, - }, - } - - for i := 0; i < 2; i++ { - for k, v := range testCases { - v.pod.Spec.Containers, v.pod.Spec.InitContainers = v.pod.Spec.InitContainers, v.pod.Spec.Containers - - errs := AssignSecurityContext(provider, v.pod, nil) - if v.shouldValidate && len(errs) > 0 { - t.Errorf("%s expected to validate but received errors %v", k, errs) - continue - } - if !v.shouldValidate && len(errs) == 0 { - t.Errorf("%s expected validation errors but received none", k) - continue - } - } - } -} - -func TestRequiresPreAllocatedUIDRange(t *testing.T) { - var uid int64 = 1 - - testCases := map[string]struct { - scc *securityv1.SecurityContextConstraints - requires bool - }{ - "must run as": { - scc: &securityv1.SecurityContextConstraints{ - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAs, - }, - }, - }, - "run as any": { - scc: &securityv1.SecurityContextConstraints{ - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyRunAsAny, - }, - }, - }, - "run as non-root": { - scc: &securityv1.SecurityContextConstraints{ - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAsNonRoot, - }, - }, - }, - "run as range": { - scc: &securityv1.SecurityContextConstraints{ - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAsRange, - }, - }, - requires: true, - }, - "run as range with specified params": { - scc: &securityv1.SecurityContextConstraints{ - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAsRange, - UIDRangeMin: &uid, - UIDRangeMax: &uid, - }, - }, - }, - } - - for k, v := range testCases { - result := requiresPreAllocatedUIDRange(v.scc) - if result != v.requires { - t.Errorf("%s expected result %t but got %t", k, v.requires, result) - } - } -} - -func TestRequiresPreAllocatedSELinuxLevel(t *testing.T) { - testCases := map[string]struct { - scc *securityv1.SecurityContextConstraints - requires bool - }{ - "must run as": { - scc: &securityv1.SecurityContextConstraints{ - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyMustRunAs, - }, - }, - requires: true, - }, - "must with level specified": { - scc: &securityv1.SecurityContextConstraints{ - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyMustRunAs, - SELinuxOptions: &corev1.SELinuxOptions{ - Level: "foo", - }, - }, - }, - }, - "run as any": { - scc: &securityv1.SecurityContextConstraints{ - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyRunAsAny, - }, - }, - }, - } - - for k, v := range testCases { - result := requiresPreAllocatedSELinuxLevel(v.scc) - if result != v.requires { - t.Errorf("%s expected result %t but got %t", k, v.requires, result) - } - } -} - -func TestRequiresPreallocatedSupplementalGroups(t *testing.T) { - testCases := map[string]struct { - scc *securityv1.SecurityContextConstraints - requires bool - }{ - "must run as": { - scc: &securityv1.SecurityContextConstraints{ - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - }, - }, - requires: true, - }, - "must with range specified": { - scc: &securityv1.SecurityContextConstraints{ - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - Ranges: []securityv1.IDRange{ - {Min: 1, Max: 1}, - }, - }, - }, - }, - "run as any": { - scc: &securityv1.SecurityContextConstraints{ - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - }, - }, - } - for k, v := range testCases { - result := requiresPreallocatedSupplementalGroups(v.scc) - if result != v.requires { - t.Errorf("%s expected result %t but got %t", k, v.requires, result) - } - } -} - -func TestRequiresPreallocatedFSGroup(t *testing.T) { - testCases := map[string]struct { - scc *securityv1.SecurityContextConstraints - requires bool - }{ - "must run as": { - scc: &securityv1.SecurityContextConstraints{ - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - }, - }, - requires: true, - }, - "must with range specified": { - scc: &securityv1.SecurityContextConstraints{ - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - Ranges: []securityv1.IDRange{ - {Min: 1, Max: 1}, - }, - }, - }, - }, - "run as any": { - scc: &securityv1.SecurityContextConstraints{ - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyRunAsAny, - }, - }, - }, - } - for k, v := range testCases { - result := requiresPreallocatedFSGroup(v.scc) - if result != v.requires { - t.Errorf("%s expected result %t but got %t", k, v.requires, result) - } - } -} - -func TestParseSupplementalGroupAnnotation(t *testing.T) { - tests := map[string]struct { - groups string - expected []uid.Block - shouldFail bool - }{ - "single block slash": { - groups: "1/5", - expected: []uid.Block{ - {Start: 1, End: 5}, - }, - }, - "single block dash": { - groups: "1-5", - expected: []uid.Block{ - {Start: 1, End: 5}, - }, - }, - "multiple blocks": { - groups: "1/5,6/5,11/5", - expected: []uid.Block{ - {Start: 1, End: 5}, - {Start: 6, End: 10}, - {Start: 11, End: 15}, - }, - }, - "dash format": { - groups: "1-5,6-10,11-15", - expected: []uid.Block{ - {Start: 1, End: 5}, - {Start: 6, End: 10}, - {Start: 11, End: 15}, - }, - }, - "no blocks": { - groups: "", - shouldFail: true, - }, - } - for k, v := range tests { - blocks, err := parseSupplementalGroupAnnotation(v.groups) - - if v.shouldFail && err == nil { - t.Errorf("%s was expected to fail but received no error and blocks %v", k, blocks) - continue - } - - if !v.shouldFail && err != nil { - t.Errorf("%s had an unexpected error %v", k, err) - continue - } - - if len(blocks) != len(v.expected) { - t.Errorf("%s received unexpected number of blocks expected: %v, actual %v", k, v.expected, blocks) - } - - for _, b := range v.expected { - if !hasBlock(b, blocks) { - t.Errorf("%s was missing block %v", k, b) - } - } - } -} - -func hasBlock(block uid.Block, blocks []uid.Block) bool { - for _, b := range blocks { - if b.Start == block.Start && b.End == block.End { - return true - } - } - return false -} - -func TestGetPreallocatedFSGroup(t *testing.T) { - ns := func() *corev1.Namespace { - return &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: map[string]string{}, - }, - } - } - - fallbackNS := ns() - fallbackNS.Annotations[securityv1.UIDRangeAnnotation] = "1/5" - - emptyAnnotationNS := ns() - emptyAnnotationNS.Annotations[securityv1.SupplementalGroupsAnnotation] = "" - - badBlockNS := ns() - badBlockNS.Annotations[securityv1.SupplementalGroupsAnnotation] = "foo" - - goodNS := ns() - goodNS.Annotations[securityv1.SupplementalGroupsAnnotation] = "1/5" - - tests := map[string]struct { - ns *corev1.Namespace - expected []securityv1.IDRange - shouldFail bool - }{ - "fall back to uid if sup group doesn't exist": { - ns: fallbackNS, - expected: []securityv1.IDRange{ - {Min: 1, Max: 1}, - }, - }, - "no annotation": { - ns: ns(), - shouldFail: true, - }, - "empty annotation": { - ns: emptyAnnotationNS, - shouldFail: true, - }, - "bad block": { - ns: badBlockNS, - shouldFail: true, - }, - "good sup group annotation": { - ns: goodNS, - expected: []securityv1.IDRange{ - {Min: 1, Max: 1}, - }, - }, - } - - for k, v := range tests { - ranges, err := getPreallocatedFSGroup(v.ns) - if v.shouldFail && err == nil { - t.Errorf("%s was expected to fail but received no error and ranges %v", k, ranges) - continue - } - - if !v.shouldFail && err != nil { - t.Errorf("%s had an unexpected error %v", k, err) - continue - } - - if len(ranges) != len(v.expected) { - t.Errorf("%s received unexpected number of ranges expected: %v, actual %v", k, v.expected, ranges) - } - - for _, r := range v.expected { - if !hasRange(r, ranges) { - t.Errorf("%s was missing range %v", k, r) - } - } - } -} - -func TestGetPreallocatedSupplementalGroups(t *testing.T) { - ns := func() *corev1.Namespace { - return &corev1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: map[string]string{}, - }, - } - } - - fallbackNS := ns() - fallbackNS.Annotations[securityv1.UIDRangeAnnotation] = "1/5" - - emptyAnnotationNS := ns() - emptyAnnotationNS.Annotations[securityv1.SupplementalGroupsAnnotation] = "" - - badBlockNS := ns() - badBlockNS.Annotations[securityv1.SupplementalGroupsAnnotation] = "foo" - - goodNS := ns() - goodNS.Annotations[securityv1.SupplementalGroupsAnnotation] = "1/5" - - tests := map[string]struct { - ns *corev1.Namespace - expected []securityv1.IDRange - shouldFail bool - }{ - "fall back to uid if sup group doesn't exist": { - ns: fallbackNS, - expected: []securityv1.IDRange{ - {Min: 1, Max: 5}, - }, - }, - "no annotation": { - ns: ns(), - shouldFail: true, - }, - "empty annotation": { - ns: emptyAnnotationNS, - shouldFail: true, - }, - "bad block": { - ns: badBlockNS, - shouldFail: true, - }, - "good sup group annotation": { - ns: goodNS, - expected: []securityv1.IDRange{ - {Min: 1, Max: 5}, - }, - }, - } - - for k, v := range tests { - ranges, err := getPreallocatedSupplementalGroups(v.ns) - if v.shouldFail && err == nil { - t.Errorf("%s was expected to fail but received no error and ranges %v", k, ranges) - continue - } - - if !v.shouldFail && err != nil { - t.Errorf("%s had an unexpected error %v", k, err) - continue - } - - if len(ranges) != len(v.expected) { - t.Errorf("%s received unexpected number of ranges expected: %v, actual %v", k, v.expected, ranges) - } - - for _, r := range v.expected { - if !hasRange(r, ranges) { - t.Errorf("%s was missing range %v", k, r) - } - } - } -} - -func hasRange(rng securityv1.IDRange, ranges []securityv1.IDRange) bool { - for _, r := range ranges { - if r.Min == rng.Min && r.Max == rng.Max { - return true - } - } - return false -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/provider.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/provider.go deleted file mode 100644 index 9711517c9..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/provider.go +++ /dev/null @@ -1,436 +0,0 @@ -package sccmatching - -import ( - "fmt" - - securityv1 "github.com/openshift/api/security/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/capabilities" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/group" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/seccomp" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user" - sccutil "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/kubernetes/pkg/security/podsecuritypolicy/sysctl" - "k8s.io/kubernetes/pkg/securitycontext" - "k8s.io/kubernetes/pkg/util/maps" -) - -// used to pass in the field being validated for reusable group strategies so they -// can create informative error messages. -const ( - fsGroupField = "fsGroup" - supplementalGroupsField = "supplementalGroups" -) - -// simpleProvider is the default implementation of SecurityContextConstraintsProvider -type simpleProvider struct { - scc *securityv1.SecurityContextConstraints - runAsUserStrategy user.RunAsUserSecurityContextConstraintsStrategy - seLinuxStrategy selinux.SELinuxSecurityContextConstraintsStrategy - fsGroupStrategy group.GroupSecurityContextConstraintsStrategy - supplementalGroupStrategy group.GroupSecurityContextConstraintsStrategy - capabilitiesStrategy capabilities.CapabilitiesSecurityContextConstraintsStrategy - seccompStrategy seccomp.SeccompStrategy - sysctlsStrategy sysctl.SysctlsStrategy -} - -// ensure we implement the interface correctly. -var _ SecurityContextConstraintsProvider = &simpleProvider{} - -// NewSimpleProvider creates a new SecurityContextConstraintsProvider instance. -func NewSimpleProvider(scc *securityv1.SecurityContextConstraints) (SecurityContextConstraintsProvider, error) { - if scc == nil { - return nil, fmt.Errorf("NewSimpleProvider requires a SecurityContextConstraints") - } - - userStrat, err := createUserStrategy(&scc.RunAsUser) - if err != nil { - return nil, err - } - - seLinuxStrat, err := createSELinuxStrategy(&scc.SELinuxContext) - if err != nil { - return nil, err - } - - fsGroupStrat, err := createFSGroupStrategy(&scc.FSGroup) - if err != nil { - return nil, err - } - - supGroupStrat, err := createSupplementalGroupStrategy(&scc.SupplementalGroups) - if err != nil { - return nil, err - } - - capStrat, err := createCapabilitiesStrategy(scc.DefaultAddCapabilities, scc.RequiredDropCapabilities, scc.AllowedCapabilities) - if err != nil { - return nil, err - } - - seccompStrat, err := createSeccompStrategy(scc.SeccompProfiles) - if err != nil { - return nil, err - } - - sysctlsStrat, err := createSysctlsStrategy(sysctl.SafeSysctlWhitelist(), scc.AllowedUnsafeSysctls, scc.ForbiddenSysctls) - if err != nil { - return nil, err - } - - return &simpleProvider{ - scc: scc, - runAsUserStrategy: userStrat, - seLinuxStrategy: seLinuxStrat, - fsGroupStrategy: fsGroupStrat, - supplementalGroupStrategy: supGroupStrat, - capabilitiesStrategy: capStrat, - seccompStrategy: seccompStrat, - sysctlsStrategy: sysctlsStrat, - }, nil -} - -// Create a PodSecurityContext based on the given constraints. If a setting is already set -// on the PodSecurityContext it will not be changed. Validate should be used after the context -// is created to ensure it complies with the required restrictions. -func (s *simpleProvider) CreatePodSecurityContext(pod *api.Pod) (*api.PodSecurityContext, map[string]string, error) { - sc := securitycontext.NewPodSecurityContextMutator(pod.Spec.SecurityContext) - - annotationsCopy := maps.CopySS(pod.Annotations) - - if sc.SupplementalGroups() == nil { - supGroups, err := s.supplementalGroupStrategy.Generate(pod) - if err != nil { - return nil, nil, err - } - sc.SetSupplementalGroups(supGroups) - } - - if sc.FSGroup() == nil { - fsGroup, err := s.fsGroupStrategy.GenerateSingle(pod) - if err != nil { - return nil, nil, err - } - sc.SetFSGroup(fsGroup) - } - - if sc.SELinuxOptions() == nil { - seLinux, err := s.seLinuxStrategy.Generate(pod, nil) - if err != nil { - return nil, nil, err - } - sc.SetSELinuxOptions(seLinux) - } - - // we only generate a seccomp annotation for the entire pod. Validation - // will catch any container annotations that are invalid and containers - // will inherit the pod annotation. - _, hasPodProfile := pod.Annotations[api.SeccompPodAnnotationKey] - if !hasPodProfile { - profile, err := s.seccompStrategy.Generate(pod) - if err != nil { - return nil, nil, err - } - - if profile != "" { - if annotationsCopy == nil { - annotationsCopy = map[string]string{} - } - annotationsCopy[api.SeccompPodAnnotationKey] = profile - } - } - - return sc.PodSecurityContext(), annotationsCopy, nil -} - -// Create a SecurityContext based on the given constraints. If a setting is already set on the -// container's security context then it will not be changed. Validation should be used after -// the context is created to ensure it complies with the required restrictions. -func (s *simpleProvider) CreateContainerSecurityContext(pod *api.Pod, container *api.Container) (*api.SecurityContext, error) { - sc := securitycontext.NewEffectiveContainerSecurityContextMutator( - securitycontext.NewPodSecurityContextAccessor(pod.Spec.SecurityContext), - securitycontext.NewContainerSecurityContextMutator(container.SecurityContext), - ) - if sc.RunAsUser() == nil { - uid, err := s.runAsUserStrategy.Generate(pod, container) - if err != nil { - return nil, err - } - sc.SetRunAsUser(uid) - } - - if sc.SELinuxOptions() == nil { - seLinux, err := s.seLinuxStrategy.Generate(pod, container) - if err != nil { - return nil, err - } - sc.SetSELinuxOptions(seLinux) - } - - // if we're using the non-root strategy set the marker that this container should not be - // run as root which will signal to the kubelet to do a final check either on the runAsUser - // or, if runAsUser is not set, the image - if sc.RunAsNonRoot() == nil && sc.RunAsUser() == nil && s.scc.RunAsUser.Type == securityv1.RunAsUserStrategyMustRunAsNonRoot { - nonRoot := true - sc.SetRunAsNonRoot(&nonRoot) - } - - caps, err := s.capabilitiesStrategy.Generate(pod, container) - if err != nil { - return nil, err - } - sc.SetCapabilities(caps) - - // if the SCC requires a read only root filesystem and the container has not made a specific - // request then default ReadOnlyRootFilesystem to true. - if s.scc.ReadOnlyRootFilesystem && sc.ReadOnlyRootFilesystem() == nil { - readOnlyRootFS := true - sc.SetReadOnlyRootFilesystem(&readOnlyRootFS) - } - - // if the SCC sets DefaultAllowPrivilegeEscalation and the container security context - // allowPrivilegeEscalation is not set, then default to that set by the SCC. - if s.scc.DefaultAllowPrivilegeEscalation != nil && sc.AllowPrivilegeEscalation() == nil { - sc.SetAllowPrivilegeEscalation(s.scc.DefaultAllowPrivilegeEscalation) - } - - // if the SCC sets AllowPrivilegeEscalation to false set that as the default - if s.scc.AllowPrivilegeEscalation != nil && !*s.scc.AllowPrivilegeEscalation && sc.AllowPrivilegeEscalation() == nil { - sc.SetAllowPrivilegeEscalation(s.scc.AllowPrivilegeEscalation) - } - - return sc.ContainerSecurityContext(), nil -} - -// Ensure a pod's SecurityContext is in compliance with the given constraints. -func (s *simpleProvider) ValidatePodSecurityContext(pod *api.Pod, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - - sc := securitycontext.NewPodSecurityContextAccessor(pod.Spec.SecurityContext) - - fsGroups := []int64{} - if fsGroup := sc.FSGroup(); fsGroup != nil { - fsGroups = append(fsGroups, *fsGroup) - } - allErrs = append(allErrs, s.fsGroupStrategy.Validate(pod, fsGroups)...) - allErrs = append(allErrs, s.supplementalGroupStrategy.Validate(pod, sc.SupplementalGroups())...) - allErrs = append(allErrs, s.seccompStrategy.ValidatePod(pod)...) - - allErrs = append(allErrs, s.seLinuxStrategy.Validate(fldPath.Child("seLinuxOptions"), pod, nil, sc.SELinuxOptions())...) - - if !s.scc.AllowHostNetwork && sc.HostNetwork() { - allErrs = append(allErrs, field.Invalid(fldPath.Child("hostNetwork"), sc.HostNetwork(), "Host network is not allowed to be used")) - } - - if !s.scc.AllowHostPID && sc.HostPID() { - allErrs = append(allErrs, field.Invalid(fldPath.Child("hostPID"), sc.HostPID(), "Host PID is not allowed to be used")) - } - - if !s.scc.AllowHostIPC && sc.HostIPC() { - allErrs = append(allErrs, field.Invalid(fldPath.Child("hostIPC"), sc.HostIPC(), "Host IPC is not allowed to be used")) - } - - allErrs = append(allErrs, s.sysctlsStrategy.Validate(pod)...) - - if len(pod.Spec.Volumes) > 0 && !sccutil.SCCAllowsAllVolumes(s.scc) { - allowedVolumes := sccutil.FSTypeToStringSetInternal(s.scc.Volumes) - for i, v := range pod.Spec.Volumes { - fsType, err := sccutil.GetVolumeFSType(v) - if err != nil { - allErrs = append(allErrs, field.Invalid(field.NewPath("spec", "volumes").Index(i), string(fsType), err.Error())) - continue - } - - if !allowedVolumes.Has(string(fsType)) { - allErrs = append(allErrs, field.Invalid( - field.NewPath("spec", "volumes").Index(i), string(fsType), - fmt.Sprintf("%s volumes are not allowed to be used", string(fsType)))) - } - } - } - - if len(pod.Spec.Volumes) > 0 && len(s.scc.AllowedFlexVolumes) > 0 && sccutil.SCCAllowsFSTypeInternal(s.scc, securityv1.FSTypeFlexVolume) { - for i, v := range pod.Spec.Volumes { - if v.FlexVolume == nil { - continue - } - - found := false - driver := v.FlexVolume.Driver - for _, allowedFlexVolume := range s.scc.AllowedFlexVolumes { - if driver == allowedFlexVolume.Driver { - found = true - break - } - } - if !found { - allErrs = append(allErrs, - field.Invalid(fldPath.Child("volumes").Index(i).Child("driver"), driver, - "Flexvolume driver is not allowed to be used")) - } - } - } - - return allErrs -} - -// Ensure a container's SecurityContext is in compliance with the given constraints -func (s *simpleProvider) ValidateContainerSecurityContext(pod *api.Pod, container *api.Container, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - - podSC := securitycontext.NewPodSecurityContextAccessor(pod.Spec.SecurityContext) - sc := securitycontext.NewEffectiveContainerSecurityContextAccessor(podSC, securitycontext.NewContainerSecurityContextMutator(container.SecurityContext)) - - allErrs = append(allErrs, s.runAsUserStrategy.Validate(fldPath.Child("securityContext"), pod, container, sc.RunAsNonRoot(), sc.RunAsUser())...) - allErrs = append(allErrs, s.seLinuxStrategy.Validate(fldPath.Child("seLinuxOptions"), pod, container, sc.SELinuxOptions())...) - allErrs = append(allErrs, s.seccompStrategy.ValidateContainer(pod, container)...) - - privileged := sc.Privileged() - if !s.scc.AllowPrivilegedContainer && privileged != nil && *privileged { - allErrs = append(allErrs, field.Invalid(fldPath.Child("privileged"), *privileged, "Privileged containers are not allowed")) - } - - allErrs = append(allErrs, s.capabilitiesStrategy.Validate(pod, container, sc.Capabilities())...) - - if !s.scc.AllowHostNetwork && podSC.HostNetwork() { - allErrs = append(allErrs, field.Invalid(fldPath.Child("hostNetwork"), podSC.HostNetwork(), "Host network is not allowed to be used")) - } - - if !s.scc.AllowHostPorts { - containersPath := fldPath.Child("containers") - for idx, c := range pod.Spec.Containers { - idxPath := containersPath.Index(idx) - allErrs = append(allErrs, s.hasHostPort(&c, idxPath)...) - } - - containersPath = fldPath.Child("initContainers") - for idx, c := range pod.Spec.InitContainers { - idxPath := containersPath.Index(idx) - allErrs = append(allErrs, s.hasHostPort(&c, idxPath)...) - } - } - - if !s.scc.AllowHostPID && podSC.HostPID() { - allErrs = append(allErrs, field.Invalid(fldPath.Child("hostPID"), podSC.HostPID(), "Host PID is not allowed to be used")) - } - - if !s.scc.AllowHostIPC && podSC.HostIPC() { - allErrs = append(allErrs, field.Invalid(fldPath.Child("hostIPC"), podSC.HostIPC(), "Host IPC is not allowed to be used")) - } - - if s.scc.ReadOnlyRootFilesystem { - readOnly := sc.ReadOnlyRootFilesystem() - if readOnly == nil { - allErrs = append(allErrs, field.Invalid(fldPath.Child("readOnlyRootFilesystem"), readOnly, "ReadOnlyRootFilesystem may not be nil and must be set to true")) - } else if !*readOnly { - allErrs = append(allErrs, field.Invalid(fldPath.Child("readOnlyRootFilesystem"), *readOnly, "ReadOnlyRootFilesystem must be set to true")) - } - } - - allowEscalation := sc.AllowPrivilegeEscalation() - if s.scc.AllowPrivilegeEscalation != nil && !*s.scc.AllowPrivilegeEscalation { - if allowEscalation == nil { - allErrs = append(allErrs, field.Invalid(fldPath.Child("allowPrivilegeEscalation"), allowEscalation, "Allowing privilege escalation for containers is not allowed")) - } - - if allowEscalation != nil && *allowEscalation { - allErrs = append(allErrs, field.Invalid(fldPath.Child("allowPrivilegeEscalation"), *allowEscalation, "Allowing privilege escalation for containers is not allowed")) - } - } - - return allErrs -} - -// hasHostPort checks the port definitions on the container for HostPort > 0. -func (s *simpleProvider) hasHostPort(container *api.Container, fldPath *field.Path) field.ErrorList { - allErrs := field.ErrorList{} - for _, cp := range container.Ports { - if cp.HostPort > 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("hostPort"), cp.HostPort, "Host ports are not allowed to be used")) - } - } - return allErrs -} - -// Get the name of the SCC that this provider was initialized with. -func (s *simpleProvider) GetSCCName() string { - return s.scc.Name -} - -func (s *simpleProvider) GetSCCUsers() []string { - return s.scc.Users -} - -func (s *simpleProvider) GetSCCGroups() []string { - return s.scc.Groups -} - -// createUserStrategy creates a new user strategy. -func createUserStrategy(opts *securityv1.RunAsUserStrategyOptions) (user.RunAsUserSecurityContextConstraintsStrategy, error) { - switch opts.Type { - case securityv1.RunAsUserStrategyMustRunAs: - return user.NewMustRunAs(opts) - case securityv1.RunAsUserStrategyMustRunAsRange: - return user.NewMustRunAsRange(opts) - case securityv1.RunAsUserStrategyMustRunAsNonRoot: - return user.NewRunAsNonRoot(opts) - case securityv1.RunAsUserStrategyRunAsAny: - return user.NewRunAsAny(opts) - default: - return nil, fmt.Errorf("Unrecognized RunAsUser strategy type %s", opts.Type) - } -} - -// createSELinuxStrategy creates a new selinux strategy. -func createSELinuxStrategy(opts *securityv1.SELinuxContextStrategyOptions) (selinux.SELinuxSecurityContextConstraintsStrategy, error) { - switch opts.Type { - case securityv1.SELinuxStrategyMustRunAs: - return selinux.NewMustRunAs(opts) - case securityv1.SELinuxStrategyRunAsAny: - return selinux.NewRunAsAny(opts) - default: - return nil, fmt.Errorf("Unrecognized SELinuxContext strategy type %s", opts.Type) - } -} - -// createFSGroupStrategy creates a new fsgroup strategy -func createFSGroupStrategy(opts *securityv1.FSGroupStrategyOptions) (group.GroupSecurityContextConstraintsStrategy, error) { - switch opts.Type { - case securityv1.FSGroupStrategyRunAsAny: - return group.NewRunAsAny() - case securityv1.FSGroupStrategyMustRunAs: - return group.NewMustRunAs(opts.Ranges, fsGroupField) - default: - return nil, fmt.Errorf("Unrecognized FSGroup strategy type %s", opts.Type) - } -} - -// createSupplementalGroupStrategy creates a new supplemental group strategy -func createSupplementalGroupStrategy(opts *securityv1.SupplementalGroupsStrategyOptions) (group.GroupSecurityContextConstraintsStrategy, error) { - switch opts.Type { - case securityv1.SupplementalGroupsStrategyRunAsAny: - return group.NewRunAsAny() - case securityv1.SupplementalGroupsStrategyMustRunAs: - return group.NewMustRunAs(opts.Ranges, supplementalGroupsField) - default: - return nil, fmt.Errorf("Unrecognized SupplementalGroups strategy type %s", opts.Type) - } -} - -// createCapabilitiesStrategy creates a new capabilities strategy. -func createCapabilitiesStrategy(defaultAddCaps, requiredDropCaps, allowedCaps []corev1.Capability) (capabilities.CapabilitiesSecurityContextConstraintsStrategy, error) { - return capabilities.NewDefaultCapabilities(defaultAddCaps, requiredDropCaps, allowedCaps) -} - -// createSeccompStrategy creates a new seccomp strategy -func createSeccompStrategy(allowedProfiles []string) (seccomp.SeccompStrategy, error) { - return seccomp.NewWithSeccompProfile(allowedProfiles) -} - -// createSysctlsStrategy creates a new sysctls strategy -func createSysctlsStrategy(safeWhitelist, allowedUnsafeSysctls, forbiddenSysctls []string) (sysctl.SysctlsStrategy, error) { - return sysctl.NewMustMatchPatterns(safeWhitelist, allowedUnsafeSysctls, forbiddenSysctls), nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/provider_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/provider_test.go deleted file mode 100644 index 8703ad90b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/provider_test.go +++ /dev/null @@ -1,1062 +0,0 @@ -package sccmatching - -import ( - "fmt" - "reflect" - "strings" - "testing" - - securityv1 "github.com/openshift/api/security/v1" - sccutil "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/diff" - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" -) - -func TestCreatePodSecurityContextNonmutating(t *testing.T) { - // Create a pod with a security context that needs filling in - createPod := func() *api.Pod { - return &api.Pod{ - Spec: api.PodSpec{ - SecurityContext: &api.PodSecurityContext{}, - }, - } - } - - // Create an SCC with strategies that will populate a blank psc - createSCC := func() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "scc-sa", - }, - SeccompProfiles: []string{"foo"}, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyRunAsAny, - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyRunAsAny, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyRunAsAny, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - } - } - - pod := createPod() - scc := createSCC() - - provider, err := NewSimpleProvider(scc) - if err != nil { - t.Fatalf("unable to create provider %v", err) - } - _, _, err = provider.CreatePodSecurityContext(pod) - if err != nil { - t.Fatalf("unable to create psc %v", err) - } - - // Creating the provider or the security context should not have mutated the scc or pod - // since all the strategies were permissive - if !reflect.DeepEqual(createPod(), pod) { - diff := diff.ObjectDiff(createPod(), pod) - t.Errorf("pod was mutated by CreatePodSecurityContext. diff:\n%s", diff) - } - if !reflect.DeepEqual(createSCC(), scc) { - t.Error("scc was mutated by CreatePodSecurityContext") - } -} - -func TestCreateContainerSecurityContextNonmutating(t *testing.T) { - // Create a pod with a security context that needs filling in - createPod := func() *api.Pod { - return &api.Pod{ - Spec: api.PodSpec{ - Containers: []api.Container{{ - SecurityContext: &api.SecurityContext{}, - }}, - }, - } - } - - // Create an SCC with strategies that will populate a blank security context - createSCC := func() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "scc-sa", - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyRunAsAny, - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyRunAsAny, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyRunAsAny, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - } - } - - pod := createPod() - scc := createSCC() - - provider, err := NewSimpleProvider(scc) - if err != nil { - t.Fatalf("unable to create provider %v", err) - } - _, err = provider.CreateContainerSecurityContext(pod, &pod.Spec.Containers[0]) - if err != nil { - t.Fatalf("unable to create container security context %v", err) - } - - // Creating the provider or the security context should not have mutated the scc or pod - // since all the strategies were permissive - if !reflect.DeepEqual(createPod(), pod) { - diff := diff.ObjectDiff(createPod(), pod) - t.Errorf("pod was mutated by CreateContainerSecurityContext. diff:\n%s", diff) - } - if !reflect.DeepEqual(createSCC(), scc) { - t.Error("scc was mutated by CreateContainerSecurityContext") - } -} - -func TestValidatePodSecurityContextFailures(t *testing.T) { - failHostNetworkPod := defaultPod() - failHostNetworkPod.Spec.SecurityContext.HostNetwork = true - - failHostPIDPod := defaultPod() - failHostPIDPod.Spec.SecurityContext.HostPID = true - - failHostIPCPod := defaultPod() - failHostIPCPod.Spec.SecurityContext.HostIPC = true - - failSupplementalGroupPod := defaultPod() - failSupplementalGroupPod.Spec.SecurityContext.SupplementalGroups = []int64{999} - failSupplementalGroupSCC := defaultSCC() - failSupplementalGroupSCC.SupplementalGroups = securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - Ranges: []securityv1.IDRange{ - {Min: 1, Max: 1}, - }, - } - - failFSGroupPod := defaultPod() - fsGroup := int64(999) - failFSGroupPod.Spec.SecurityContext.FSGroup = &fsGroup - failFSGroupSCC := defaultSCC() - failFSGroupSCC.FSGroup = securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - Ranges: []securityv1.IDRange{ - {Min: 1, Max: 1}, - }, - } - - failNilSELinuxPod := defaultPod() - failSELinuxSCC := defaultSCC() - failSELinuxSCC.SELinuxContext.Type = securityv1.SELinuxStrategyMustRunAs - failSELinuxSCC.SELinuxContext.SELinuxOptions = &corev1.SELinuxOptions{ - Level: "foo", - } - - failInvalidSELinuxPod := defaultPod() - failInvalidSELinuxPod.Spec.SecurityContext.SELinuxOptions = &api.SELinuxOptions{ - Level: "bar", - } - - failNoSeccompAllowed := defaultPod() - failNoSeccompAllowed.Annotations[api.SeccompPodAnnotationKey] = "bar" - - failInvalidSeccompProfile := defaultPod() - failInvalidSeccompProfile.Annotations[api.SeccompPodAnnotationKey] = "bar" - - failInvalidSeccompProfileSCC := defaultSCC() - failInvalidSeccompProfileSCC.SeccompProfiles = []string{"foo"} - - failHostDirPod := defaultPod() - failHostDirPod.Spec.Volumes = []api.Volume{ - { - Name: "bad volume", - VolumeSource: api.VolumeSource{ - HostPath: &api.HostPathVolumeSource{}, - }, - }, - } - - podWithInvalidFlexVolumeDriver := defaultPod() - podWithInvalidFlexVolumeDriver.Spec.Volumes = []api.Volume{ - { - Name: "flex-volume", - VolumeSource: api.VolumeSource{ - FlexVolume: &api.FlexVolumeSource{ - Driver: "example/unknown", - }, - }, - }, - } - - failSysctlDisallowedSCC := defaultSCC() - failSysctlDisallowedSCC.ForbiddenSysctls = []string{"kernel.shm_rmid_forced"} - - failNoSafeSysctlAllowedSCC := defaultSCC() - failNoSafeSysctlAllowedSCC.ForbiddenSysctls = []string{"*"} - - failAllUnsafeSysctlsSCC := defaultSCC() - failAllUnsafeSysctlsSCC.AllowedUnsafeSysctls = []string{} - - failSafeSysctlKernelPod := defaultPod() - failSafeSysctlKernelPod.Spec.SecurityContext.Sysctls = []api.Sysctl{ - { - Name: "kernel.shm_rmid_forced", - Value: "1", - }, - } - - failUnsafeSysctlPod := defaultPod() - failUnsafeSysctlPod.Spec.SecurityContext.Sysctls = []api.Sysctl{ - { - Name: "kernel.sem", - Value: "32000", - }, - } - - errorCases := map[string]struct { - pod *api.Pod - scc *securityv1.SecurityContextConstraints - expectedError string - }{ - "failHostNetworkSCC": { - pod: failHostNetworkPod, - scc: defaultSCC(), - expectedError: "Host network is not allowed to be used", - }, - "failHostPIDSCC": { - pod: failHostPIDPod, - scc: defaultSCC(), - expectedError: "Host PID is not allowed to be used", - }, - "failHostIPCSCC": { - pod: failHostIPCPod, - scc: defaultSCC(), - expectedError: "Host IPC is not allowed to be used", - }, - "failSupplementalGroupOutOfRange": { - pod: failSupplementalGroupPod, - scc: failSupplementalGroupSCC, - expectedError: "999 is not an allowed group", - }, - "failSupplementalGroupEmpty": { - pod: defaultPod(), - scc: failSupplementalGroupSCC, - expectedError: "unable to validate empty groups against required ranges", - }, - "failFSGroupOutOfRange": { - pod: failFSGroupPod, - scc: failFSGroupSCC, - expectedError: "999 is not an allowed group", - }, - "failFSGroupEmpty": { - pod: defaultPod(), - scc: failFSGroupSCC, - expectedError: "unable to validate empty groups against required ranges", - }, - "failNilSELinux": { - pod: failNilSELinuxPod, - scc: failSELinuxSCC, - expectedError: "seLinuxOptions: Required", - }, - "failInvalidSELinux": { - pod: failInvalidSELinuxPod, - scc: failSELinuxSCC, - expectedError: "seLinuxOptions.level: Invalid value", - }, - "failNoSeccomp": { - pod: failNoSeccompAllowed, - scc: defaultSCC(), - expectedError: "seccomp may not be set", - }, - "failInvalidSeccompPod": { - pod: failInvalidSeccompProfile, - scc: failInvalidSeccompProfileSCC, - expectedError: "bar is not a valid seccomp profile", - }, - "failHostDirSCC": { - pod: failHostDirPod, - scc: defaultSCC(), - expectedError: "hostPath volumes are not allowed to be used", - }, - "fail pod with disallowed flexVolume when flex volumes are allowed": { - pod: podWithInvalidFlexVolumeDriver, - scc: allowFlexVolumesSCC(false, false), - expectedError: "Flexvolume driver is not allowed to be used", - }, - "fail pod with disallowed flexVolume when all volumes are allowed": { - pod: podWithInvalidFlexVolumeDriver, - scc: allowFlexVolumesSCC(false, true), - expectedError: "Flexvolume driver is not allowed to be used", - }, - "failSafeSysctlKernelPod with failNoSafeSysctlAllowedSCC": { - pod: failSafeSysctlKernelPod, - scc: failNoSafeSysctlAllowedSCC, - expectedError: "sysctl \"kernel.shm_rmid_forced\" is not allowed", - }, - "failSafeSysctlKernelPod with failSysctlDisallowedSCC": { - pod: failSafeSysctlKernelPod, - scc: failSysctlDisallowedSCC, - expectedError: "sysctl \"kernel.shm_rmid_forced\" is not allowed", - }, - "failUnsafeSysctlPod with failAllUnsafeSysctlsSCC": { - pod: failUnsafeSysctlPod, - scc: failAllUnsafeSysctlsSCC, - expectedError: "unsafe sysctl \"kernel.sem\" is not allowed", - }, - } - for k, v := range errorCases { - provider, err := NewSimpleProvider(v.scc) - if err != nil { - t.Fatalf("unable to create provider %v", err) - } - errs := provider.ValidatePodSecurityContext(v.pod, field.NewPath("spec")) - if len(errs) == 0 { - t.Errorf("%s expected validation failure but did not receive errors", k) - continue - } - if !strings.Contains(errs[0].Error(), v.expectedError) { - t.Errorf("%s received unexpected error %v", k, errs) - } - } -} - -func TestValidateContainerSecurityContextFailures(t *testing.T) { - // fail user strat - failUserSCC := defaultSCC() - var uid int64 = 999 - var badUID int64 = 1 - failUserSCC.RunAsUser = securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAs, - UID: &uid, - } - failUserPod := defaultPod() - failUserPod.Spec.Containers[0].SecurityContext.RunAsUser = &badUID - - // fail selinux strat - failSELinuxSCC := defaultSCC() - failSELinuxSCC.SELinuxContext = securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyMustRunAs, - SELinuxOptions: &corev1.SELinuxOptions{ - Level: "foo", - }, - } - failSELinuxPod := defaultPod() - failSELinuxPod.Spec.Containers[0].SecurityContext.SELinuxOptions = &api.SELinuxOptions{ - Level: "bar", - } - - failPrivPod := defaultPod() - var priv bool = true - failPrivPod.Spec.Containers[0].SecurityContext.Privileged = &priv - - failCapsPod := defaultPod() - failCapsPod.Spec.Containers[0].SecurityContext.Capabilities = &api.Capabilities{ - Add: []api.Capability{"foo"}, - } - - failHostPortPod := defaultPod() - failHostPortPod.Spec.Containers[0].Ports = []api.ContainerPort{{HostPort: 1}} - - readOnlyRootFSSCC := defaultSCC() - readOnlyRootFSSCC.ReadOnlyRootFilesystem = true - - readOnlyRootFSPodFalse := defaultPod() - readOnlyRootFS := false - readOnlyRootFSPodFalse.Spec.Containers[0].SecurityContext.ReadOnlyRootFilesystem = &readOnlyRootFS - - failNoSeccompAllowed := defaultPod() - failNoSeccompAllowed.Annotations[api.SeccompContainerAnnotationKeyPrefix+failNoSeccompAllowed.Spec.Containers[0].Name] = "bar" - failNoSeccompAllowedSCC := defaultSCC() - failNoSeccompAllowedSCC.SeccompProfiles = nil - - failInvalidSeccompProfile := defaultPod() - failInvalidSeccompProfile.Annotations[api.SeccompContainerAnnotationKeyPrefix+failNoSeccompAllowed.Spec.Containers[0].Name] = "bar" - failInvalidSeccompProfileSCC := defaultSCC() - failInvalidSeccompProfileSCC.SeccompProfiles = []string{"foo"} - - errorCases := map[string]struct { - pod *api.Pod - scc *securityv1.SecurityContextConstraints - expectedError string - }{ - "failUserSCC": { - pod: failUserPod, - scc: failUserSCC, - expectedError: "runAsUser: Invalid value", - }, - "failSELinuxSCC": { - pod: failSELinuxPod, - scc: failSELinuxSCC, - expectedError: "seLinuxOptions.level: Invalid value", - }, - "failPrivSCC": { - pod: failPrivPod, - scc: defaultSCC(), - expectedError: "Privileged containers are not allowed", - }, - "failCapsSCC": { - pod: failCapsPod, - scc: defaultSCC(), - expectedError: "capability may not be added", - }, - "failHostPortSCC": { - pod: failHostPortPod, - scc: defaultSCC(), - expectedError: "Host ports are not allowed to be used", - }, - "failReadOnlyRootFS - nil": { - pod: defaultPod(), - scc: readOnlyRootFSSCC, - expectedError: "ReadOnlyRootFilesystem may not be nil and must be set to true", - }, - "failReadOnlyRootFS - false": { - pod: readOnlyRootFSPodFalse, - scc: readOnlyRootFSSCC, - expectedError: "ReadOnlyRootFilesystem must be set to true", - }, - "failNoSeccompAllowed": { - pod: failNoSeccompAllowed, - scc: failNoSeccompAllowedSCC, - expectedError: "seccomp may not be set", - }, - "failInvalidSeccompPod": { - pod: failInvalidSeccompProfile, - scc: failInvalidSeccompProfileSCC, - expectedError: "bar is not a valid seccomp profile", - }, - } - - for k, v := range errorCases { - provider, err := NewSimpleProvider(v.scc) - if err != nil { - t.Fatalf("unable to create provider %v", err) - } - errs := provider.ValidateContainerSecurityContext(v.pod, &v.pod.Spec.Containers[0], field.NewPath("")) - if len(errs) == 0 { - t.Errorf("%s expected validation failure but did not receive errors", k) - continue - } - if !strings.Contains(errs[0].Error(), v.expectedError) { - t.Errorf("%s received unexpected error %v", k, errs) - } - } -} - -func TestValidatePodSecurityContextSuccess(t *testing.T) { - hostNetworkSCC := defaultSCC() - hostNetworkSCC.AllowHostNetwork = true - hostNetworkPod := defaultPod() - hostNetworkPod.Spec.SecurityContext.HostNetwork = true - - hostPIDSCC := defaultSCC() - hostPIDSCC.AllowHostPID = true - hostPIDPod := defaultPod() - hostPIDPod.Spec.SecurityContext.HostPID = true - - hostIPCSCC := defaultSCC() - hostIPCSCC.AllowHostIPC = true - hostIPCPod := defaultPod() - hostIPCPod.Spec.SecurityContext.HostIPC = true - - supGroupSCC := defaultSCC() - supGroupSCC.SupplementalGroups = securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyMustRunAs, - Ranges: []securityv1.IDRange{ - {Min: 1, Max: 5}, - }, - } - supGroupPod := defaultPod() - supGroupPod.Spec.SecurityContext.SupplementalGroups = []int64{3} - - fsGroupSCC := defaultSCC() - fsGroupSCC.FSGroup = securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyMustRunAs, - Ranges: []securityv1.IDRange{ - {Min: 1, Max: 5}, - }, - } - fsGroupPod := defaultPod() - fsGroup := int64(3) - fsGroupPod.Spec.SecurityContext.FSGroup = &fsGroup - - seLinuxPod := defaultPod() - seLinuxPod.Spec.SecurityContext.SELinuxOptions = &api.SELinuxOptions{ - User: "user", - Role: "role", - Type: "type", - Level: "level", - } - seLinuxSCC := defaultSCC() - seLinuxSCC.SELinuxContext.Type = securityv1.SELinuxStrategyMustRunAs - seLinuxSCC.SELinuxContext.SELinuxOptions = &corev1.SELinuxOptions{ - User: "user", - Role: "role", - Type: "type", - Level: "level", - } - - seccompNilWithNoProfiles := defaultPod() - seccompNilWithNoProfilesSCC := defaultSCC() - seccompNilWithNoProfilesSCC.SeccompProfiles = nil - - seccompEmpty := defaultPod() - seccompEmpty.Annotations[api.SeccompPodAnnotationKey] = "" - - seccompAllowAnySCC := defaultSCC() - seccompAllowAnySCC.SeccompProfiles = []string{"*"} - - seccompAllowFooSCC := defaultSCC() - seccompAllowFooSCC.SeccompProfiles = []string{"foo"} - - seccompFooPod := defaultPod() - seccompFooPod.Annotations[api.SeccompPodAnnotationKey] = "foo" - - flexVolumePod := defaultPod() - flexVolumePod.Spec.Volumes = []api.Volume{ - { - Name: "flex-volume", - VolumeSource: api.VolumeSource{ - FlexVolume: &api.FlexVolumeSource{ - Driver: "example/bar", - }, - }, - }, - } - - sysctlAllowAllSCC := defaultSCC() - sysctlAllowAllSCC.ForbiddenSysctls = []string{} - sysctlAllowAllSCC.AllowedUnsafeSysctls = []string{"*"} - - safeSysctlKernelPod := defaultPod() - safeSysctlKernelPod.Spec.SecurityContext.Sysctls = []api.Sysctl{ - { - Name: "kernel.shm_rmid_forced", - Value: "1", - }, - } - - unsafeSysctlKernelPod := defaultPod() - unsafeSysctlKernelPod.Spec.SecurityContext.Sysctls = []api.Sysctl{ - { - Name: "kernel.sem", - Value: "32000", - }, - } - - successCases := map[string]struct { - pod *api.Pod - scc *securityv1.SecurityContextConstraints - }{ - "pass hostNetwork validating SCC": { - pod: hostNetworkPod, - scc: hostNetworkSCC, - }, - "pass hostPID validating SCC": { - pod: hostPIDPod, - scc: hostPIDSCC, - }, - "pass hostIPC validating SCC": { - pod: hostIPCPod, - scc: hostIPCSCC, - }, - "pass supplemental group validating SCC": { - pod: supGroupPod, - scc: supGroupSCC, - }, - "pass fs group validating SCC": { - pod: fsGroupPod, - scc: fsGroupSCC, - }, - "pass selinux validating SCC": { - pod: seLinuxPod, - scc: seLinuxSCC, - }, - "pass seccomp nil with no profiles": { - pod: seccompNilWithNoProfiles, - scc: seccompNilWithNoProfilesSCC, - }, - "pass seccomp empty with no profiles": { - pod: seccompEmpty, - scc: seccompNilWithNoProfilesSCC, - }, - "pass seccomp wild card": { - pod: seccompFooPod, - scc: seccompAllowAnySCC, - }, - "pass seccomp specific profile": { - pod: seccompFooPod, - scc: seccompAllowFooSCC, - }, - "flex volume driver in a whitelist (all volumes are allowed)": { - pod: flexVolumePod, - scc: allowFlexVolumesSCC(false, true), - }, - "flex volume driver with empty whitelist (all volumes are allowed)": { - pod: flexVolumePod, - scc: allowFlexVolumesSCC(true, true), - }, - "flex volume driver in a whitelist (only flex volumes are allowed)": { - pod: flexVolumePod, - scc: allowFlexVolumesSCC(false, false), - }, - "flex volume driver with empty whitelist (only flex volumes volumes are allowed)": { - pod: flexVolumePod, - scc: allowFlexVolumesSCC(true, false), - }, - "pass sysctl specific profile with safe kernel sysctl": { - pod: safeSysctlKernelPod, - scc: sysctlAllowAllSCC, - }, - "pass sysctl specific profile with unsafe kernel sysctl": { - pod: unsafeSysctlKernelPod, - scc: sysctlAllowAllSCC, - }, - } - - for k, v := range successCases { - provider, err := NewSimpleProvider(v.scc) - if err != nil { - t.Fatalf("unable to create provider %v", err) - } - errs := provider.ValidatePodSecurityContext(v.pod, field.NewPath("")) - if len(errs) != 0 { - t.Errorf("%s expected validation pass but received errors %v", k, errs) - continue - } - } -} - -func TestValidateContainerSecurityContextSuccess(t *testing.T) { - // fail user strat - userSCC := defaultSCC() - var uid int64 = 999 - userSCC.RunAsUser = securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyMustRunAs, - UID: &uid, - } - userPod := defaultPod() - userPod.Spec.Containers[0].SecurityContext.RunAsUser = &uid - - // fail selinux strat - seLinuxSCC := defaultSCC() - seLinuxSCC.SELinuxContext = securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyMustRunAs, - SELinuxOptions: &corev1.SELinuxOptions{ - Level: "foo", - }, - } - seLinuxPod := defaultPod() - seLinuxPod.Spec.Containers[0].SecurityContext.SELinuxOptions = &api.SELinuxOptions{ - Level: "foo", - } - - privSCC := defaultSCC() - privSCC.AllowPrivilegedContainer = true - privPod := defaultPod() - var priv bool = true - privPod.Spec.Containers[0].SecurityContext.Privileged = &priv - - capsSCC := defaultSCC() - capsSCC.AllowedCapabilities = []corev1.Capability{"foo"} - capsPod := defaultPod() - capsPod.Spec.Containers[0].SecurityContext.Capabilities = &api.Capabilities{ - Add: []api.Capability{"foo"}, - } - - // pod should be able to request caps that are in the required set even if not specified in the allowed set - requiredCapsSCC := defaultSCC() - requiredCapsSCC.DefaultAddCapabilities = []corev1.Capability{"foo"} - requiredCapsPod := defaultPod() - requiredCapsPod.Spec.Containers[0].SecurityContext.Capabilities = &api.Capabilities{ - Add: []api.Capability{"foo"}, - } - - hostDirSCC := defaultSCC() - hostDirSCC.Volumes = []securityv1.FSType{securityv1.FSTypeHostPath} - hostDirPod := defaultPod() - hostDirPod.Spec.Volumes = []api.Volume{ - { - Name: "bad volume", - VolumeSource: api.VolumeSource{ - HostPath: &api.HostPathVolumeSource{}, - }, - }, - } - - hostPortSCC := defaultSCC() - hostPortSCC.AllowHostPorts = true - hostPortPod := defaultPod() - hostPortPod.Spec.Containers[0].Ports = []api.ContainerPort{{HostPort: 1}} - - readOnlyRootFSPodFalse := defaultPod() - readOnlyRootFSFalse := false - readOnlyRootFSPodFalse.Spec.Containers[0].SecurityContext.ReadOnlyRootFilesystem = &readOnlyRootFSFalse - - readOnlyRootFSPodTrue := defaultPod() - readOnlyRootFSTrue := true - readOnlyRootFSPodTrue.Spec.Containers[0].SecurityContext.ReadOnlyRootFilesystem = &readOnlyRootFSTrue - - seccompNilWithNoProfiles := defaultPod() - seccompNilWithNoProfilesSCC := defaultSCC() - seccompNilWithNoProfilesSCC.SeccompProfiles = nil - - seccompEmptyWithNoProfiles := defaultPod() - seccompEmptyWithNoProfiles.Annotations[api.SeccompContainerAnnotationKeyPrefix+seccompEmptyWithNoProfiles.Spec.Containers[0].Name] = "" - - seccompAllowAnySCC := defaultSCC() - seccompAllowAnySCC.SeccompProfiles = []string{"*"} - - seccompAllowFooSCC := defaultSCC() - seccompAllowFooSCC.SeccompProfiles = []string{"foo"} - - seccompFooPod := defaultPod() - seccompFooPod.Annotations[api.SeccompContainerAnnotationKeyPrefix+seccompFooPod.Spec.Containers[0].Name] = "foo" - - successCases := map[string]struct { - pod *api.Pod - scc *securityv1.SecurityContextConstraints - }{ - "pass user must run as SCC": { - pod: userPod, - scc: userSCC, - }, - "pass seLinux must run as SCC": { - pod: seLinuxPod, - scc: seLinuxSCC, - }, - "pass priv validating SCC": { - pod: privPod, - scc: privSCC, - }, - "pass allowed caps validating SCC": { - pod: capsPod, - scc: capsSCC, - }, - "pass required caps validating SCC": { - pod: requiredCapsPod, - scc: requiredCapsSCC, - }, - "pass hostDir validating SCC": { - pod: hostDirPod, - scc: hostDirSCC, - }, - "pass hostPort validating SCC": { - pod: hostPortPod, - scc: hostPortSCC, - }, - "pass read only root fs - nil": { - pod: defaultPod(), - scc: defaultSCC(), - }, - "pass read only root fs - false": { - pod: readOnlyRootFSPodFalse, - scc: defaultSCC(), - }, - "pass read only root fs - true": { - pod: readOnlyRootFSPodTrue, - scc: defaultSCC(), - }, - "pass seccomp nil with no profiles": { - pod: seccompNilWithNoProfiles, - scc: seccompNilWithNoProfilesSCC, - }, - "pass seccomp empty with no profiles": { - pod: seccompEmptyWithNoProfiles, - scc: seccompNilWithNoProfilesSCC, - }, - "pass seccomp wild card": { - pod: seccompFooPod, - scc: seccompAllowAnySCC, - }, - "pass seccomp specific profile": { - pod: seccompFooPod, - scc: seccompAllowFooSCC, - }, - } - - for k, v := range successCases { - provider, err := NewSimpleProvider(v.scc) - if err != nil { - t.Fatalf("unable to create provider %v", err) - } - errs := provider.ValidateContainerSecurityContext(v.pod, &v.pod.Spec.Containers[0], field.NewPath("")) - if len(errs) != 0 { - t.Errorf("%s expected validation pass but received errors %v", k, errs) - continue - } - } -} - -func TestGenerateContainerSecurityContextReadOnlyRootFS(t *testing.T) { - trueSCC := defaultSCC() - trueSCC.ReadOnlyRootFilesystem = true - - trueVal := true - expectTrue := &trueVal - falseVal := false - expectFalse := &falseVal - - falsePod := defaultPod() - falsePod.Spec.Containers[0].SecurityContext.ReadOnlyRootFilesystem = expectFalse - - truePod := defaultPod() - truePod.Spec.Containers[0].SecurityContext.ReadOnlyRootFilesystem = expectTrue - - tests := map[string]struct { - pod *api.Pod - scc *securityv1.SecurityContextConstraints - expected *bool - }{ - "false scc, nil sc": { - scc: defaultSCC(), - pod: defaultPod(), - expected: nil, - }, - "false scc, false sc": { - scc: defaultSCC(), - pod: falsePod, - expected: expectFalse, - }, - "false scc, true sc": { - scc: defaultSCC(), - pod: truePod, - expected: expectTrue, - }, - "true scc, nil sc": { - scc: trueSCC, - pod: defaultPod(), - expected: expectTrue, - }, - "true scc, false sc": { - scc: trueSCC, - pod: falsePod, - // expect false even though it defaults to true to ensure it doesn't change set values - // validation catches the mismatch, not generation - expected: expectFalse, - }, - "true scc, true sc": { - scc: trueSCC, - pod: truePod, - expected: expectTrue, - }, - } - - for k, v := range tests { - provider, err := NewSimpleProvider(v.scc) - if err != nil { - t.Errorf("%s unable to create provider %v", k, err) - continue - } - sc, err := provider.CreateContainerSecurityContext(v.pod, &v.pod.Spec.Containers[0]) - if err != nil { - t.Errorf("%s unable to create container security context %v", k, err) - continue - } - - if v.expected == nil && sc.ReadOnlyRootFilesystem != nil { - t.Errorf("%s expected a nil ReadOnlyRootFilesystem but got %t", k, *sc.ReadOnlyRootFilesystem) - } - if v.expected != nil && sc.ReadOnlyRootFilesystem == nil { - t.Errorf("%s expected a non nil ReadOnlyRootFilesystem but recieved nil", k) - } - if v.expected != nil && sc.ReadOnlyRootFilesystem != nil && (*v.expected != *sc.ReadOnlyRootFilesystem) { - t.Errorf("%s expected a non nil ReadOnlyRootFilesystem set to %t but got %t", k, *v.expected, *sc.ReadOnlyRootFilesystem) - } - - } -} - -func defaultSCC() *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: "scc-sa", - Annotations: map[string]string{}, - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: securityv1.RunAsUserStrategyRunAsAny, - }, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: securityv1.SELinuxStrategyRunAsAny, - }, - FSGroup: securityv1.FSGroupStrategyOptions{ - Type: securityv1.FSGroupStrategyRunAsAny, - }, - SupplementalGroups: securityv1.SupplementalGroupsStrategyOptions{ - Type: securityv1.SupplementalGroupsStrategyRunAsAny, - }, - } -} - -func defaultPod() *api.Pod { - var notPriv bool = false - return &api.Pod{ - ObjectMeta: metav1.ObjectMeta{Annotations: map[string]string{}}, - Spec: api.PodSpec{ - SecurityContext: &api.PodSecurityContext{ - // fill in for test cases - }, - Containers: []api.Container{ - { - SecurityContext: &api.SecurityContext{ - // expected to be set by defaulting mechanisms - Privileged: ¬Priv, - // fill in the rest for test cases - }, - }, - }, - }, - } -} - -func allowFlexVolumesSCC(allowAllFlexVolumes, allowAllVolumes bool) *securityv1.SecurityContextConstraints { - scc := defaultSCC() - - allowedVolumes := []securityv1.AllowedFlexVolume{ - {Driver: "example/foo"}, - {Driver: "example/bar"}, - } - if allowAllFlexVolumes { - allowedVolumes = []securityv1.AllowedFlexVolume{} - } - - allowedVolumeType := securityv1.FSTypeFlexVolume - if allowAllVolumes { - allowedVolumeType = securityv1.FSTypeAll - } - - scc.AllowedFlexVolumes = allowedVolumes - scc.Volumes = []securityv1.FSType{allowedVolumeType} - - return scc -} - -// TestValidateAllowedVolumes will test that for every field of VolumeSource we can create -// a pod with that type of volume and deny it, accept it explicitly, or accept it with -// the FSTypeAll wildcard. -func TestValidateAllowedVolumes(t *testing.T) { - val := reflect.ValueOf(api.VolumeSource{}) - - for i := 0; i < val.NumField(); i++ { - // reflectively create the volume source - fieldVal := val.Type().Field(i) - - volumeSource := api.VolumeSource{} - volumeSourceVolume := reflect.New(fieldVal.Type.Elem()) - - reflect.ValueOf(&volumeSource).Elem().FieldByName(fieldVal.Name).Set(volumeSourceVolume) - volume := api.Volume{VolumeSource: volumeSource} - - // sanity check before moving on - fsType, err := sccutil.GetVolumeFSType(volume) - if err != nil { - t.Errorf("error getting FSType for %s: %s", fieldVal.Name, err.Error()) - continue - } - - // add the volume to the pod - pod := defaultPod() - pod.Spec.Volumes = []api.Volume{volume} - - // create an SCC that allows no volumes - scc := defaultSCC() - - provider, err := NewSimpleProvider(scc) - if err != nil { - t.Errorf("error creating provider for %s: %s", fieldVal.Name, err.Error()) - continue - } - - // expect a denial for this SCC and test the error message to ensure it's related to the volumesource - errs := provider.ValidatePodSecurityContext(pod, field.NewPath("")) - if len(errs) != 1 { - t.Errorf("expected exactly 1 error for %s but got %v", fieldVal.Name, errs) - } else { - if !strings.Contains(errs.ToAggregate().Error(), fmt.Sprintf("%s volumes are not allowed to be used", fsType)) { - t.Errorf("did not find the expected error, received: %v", errs) - } - } - - // now add the fstype directly to the scc and it should validate - scc.Volumes = []securityv1.FSType{fsType} - errs = provider.ValidatePodSecurityContext(pod, field.NewPath("")) - if len(errs) != 0 { - t.Errorf("directly allowing volume expected no errors for %s but got %v", fieldVal.Name, errs) - } - - // now change the scc to allow any volumes and the pod should still validate - scc.Volumes = []securityv1.FSType{securityv1.FSTypeAll} - errs = provider.ValidatePodSecurityContext(pod, field.NewPath("")) - if len(errs) != 0 { - t.Errorf("wildcard volume expected no errors for %s but got %v", fieldVal.Name, errs) - } - } -} - -// TestValidateAllowPrivilegeEscalation will test that when the SecurityContextConstraints -// AllowPrivilegeEscalation is false we cannot set a container's securityContext -// to allowPrivilegeEscalation, but when it is true we can. -func TestValidateAllowPrivilegeEscalation(t *testing.T) { - yes := true - no := false - - pod := defaultPod() - pod.Spec.Containers[0].SecurityContext.AllowPrivilegeEscalation = &yes - - // create a SCC that does not allow privilege escalation - scc := defaultSCC() - scc.AllowPrivilegeEscalation = &no - - provider, err := NewSimpleProvider(scc) - if err != nil { - t.Errorf("error creating provider: %v", err.Error()) - } - - // expect a denial for this SCC and test the error message to ensure it's related to allowPrivilegeEscalation - errs := provider.ValidateContainerSecurityContext(pod, &pod.Spec.Containers[0], field.NewPath("")) - if len(errs) != 1 { - t.Errorf("expected exactly 1 error but got %v", errs) - } else { - if !strings.Contains(errs.ToAggregate().Error(), "Allowing privilege escalation for containers is not allowed") { - t.Errorf("did not find the expected error, received: %v", errs) - } - } - - // Now set AllowPrivilegeEscalation - scc.AllowPrivilegeEscalation = &yes - errs = provider.ValidateContainerSecurityContext(pod, &pod.Spec.Containers[0], field.NewPath("")) - if len(errs) != 0 { - t.Errorf("directly allowing privilege escalation expected no errors but got %v", errs) - } - - // Now set the scc spec to false and reset AllowPrivilegeEscalation - scc.AllowPrivilegeEscalation = &no - pod.Spec.Containers[0].SecurityContext.AllowPrivilegeEscalation = nil - errs = provider.ValidateContainerSecurityContext(pod, &pod.Spec.Containers[0], field.NewPath("")) - if len(errs) != 1 { - t.Errorf("expected exactly 1 error but got %v", errs) - } else { - if !strings.Contains(errs.ToAggregate().Error(), "Allowing privilege escalation for containers is not allowed") { - t.Errorf("did not find the expected error, received: %v", errs) - } - } - - // Now unset both AllowPrivilegeEscalation - scc.AllowPrivilegeEscalation = &yes - pod.Spec.Containers[0].SecurityContext.AllowPrivilegeEscalation = nil - errs = provider.ValidateContainerSecurityContext(pod, &pod.Spec.Containers[0], field.NewPath("")) - if len(errs) != 0 { - t.Errorf("resetting allowing privilege escalation expected no errors but got %v", errs) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/types.go deleted file mode 100644 index 40747bf86..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/sccmatching/types.go +++ /dev/null @@ -1,25 +0,0 @@ -package sccmatching - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" -) - -// SecurityContextConstraintsProvider provides the implementation to generate a new security -// context based on constraints or validate an existing security context against constraints. -type SecurityContextConstraintsProvider interface { - // Create a PodSecurityContext based on the given constraints. - CreatePodSecurityContext(pod *api.Pod) (*api.PodSecurityContext, map[string]string, error) - // Create a container SecurityContext based on the given constraints - CreateContainerSecurityContext(pod *api.Pod, container *api.Container) (*api.SecurityContext, error) - // Ensure a pod's SecurityContext is in compliance with the given constraints. - ValidatePodSecurityContext(pod *api.Pod, fldPath *field.Path) field.ErrorList - // Ensure a container's SecurityContext is in compliance with the given constraints - ValidateContainerSecurityContext(pod *api.Pod, container *api.Container, fldPath *field.Path) field.ErrorList - // Get the name of the SCC that this provider was initialized with. - GetSCCName() string - // Get the users associated to the SCC this provider was initialized with - GetSCCUsers() []string - // Get the groups associated to the SCC this provider was initialized with - GetSCCGroups() []string -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/seccomp/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/seccomp/types.go deleted file mode 100644 index 046fff560..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/seccomp/types.go +++ /dev/null @@ -1,18 +0,0 @@ -package seccomp - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" -) - -// SeccompStrategy defines the interface for all seccomp constraint strategies. -type SeccompStrategy interface { - // Generate creates the profile based on policy rules. - Generate(pod *api.Pod) (string, error) - // ValidatePod ensures that the specified values on the pod fall within the range - // of the strategy. - ValidatePod(pod *api.Pod) field.ErrorList - // ValidateContainer ensures that the specified values on the container fall within - // the range of the strategy. - ValidateContainer(pod *api.Pod, container *api.Container) field.ErrorList -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/seccomp/withseccomp.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/seccomp/withseccomp.go deleted file mode 100644 index 4e2816980..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/seccomp/withseccomp.go +++ /dev/null @@ -1,113 +0,0 @@ -package seccomp - -import ( - "fmt" - - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" -) - -const ( - allowAnyProfile = "*" -) - -// withSeccompProfile implements the SeccompStrategy. -type withSeccompProfile struct { - allowedProfiles []string -} - -var _ SeccompStrategy = &withSeccompProfile{} - -// NewWithSeccompProfile creates a new must run as strategy or returns an error if it cannot -// be created. -func NewWithSeccompProfile(allowedProfiles []string) (SeccompStrategy, error) { - return &withSeccompProfile{allowedProfiles}, nil -} - -// Generate creates the profile based on policy rules. -func (s *withSeccompProfile) Generate(pod *api.Pod) (string, error) { - // return the first non-wildcard profile - for _, p := range s.allowedProfiles { - if p != allowAnyProfile { - return p, nil - } - } - // if we reached this point then either there are no allowed profiles (empty slice) - // or the only thing in the slice is the wildcard. In either case just return empty - // which means use the runtime default. - return "", nil -} - -// ValidatePod ensures that the specified values on the pod fall within the range -// of the strategy. -func (s *withSeccompProfile) ValidatePod(pod *api.Pod) field.ErrorList { - allErrs := field.ErrorList{} - fieldPath := field.NewPath("pod", "metadata", "annotations", api.SeccompPodAnnotationKey) - - podProfile, _ := pod.Annotations[api.SeccompPodAnnotationKey] - - if len(s.allowedProfiles) == 0 && podProfile != "" { - - allErrs = append(allErrs, field.Forbidden(fieldPath, "seccomp may not be set")) - return allErrs - } - - if !isProfileAllowed(podProfile, s.allowedProfiles) { - msg := fmt.Sprintf("%s is not a valid seccomp profile. Valid values are %v", podProfile, s.allowedProfiles) - allErrs = append(allErrs, field.Forbidden(fieldPath, msg)) - } - - return allErrs -} - -// ValidateContainer ensures that the specified values on the container fall within -// the range of the strategy. -func (s *withSeccompProfile) ValidateContainer(pod *api.Pod, container *api.Container) field.ErrorList { - allErrs := field.ErrorList{} - fieldPath := field.NewPath("pod", "metadata", "annotations", api.SeccompContainerAnnotationKeyPrefix+container.Name) - - // container inherits the pod profile if not set. TODO: when this is a field this can be removed and it should - // be accounted for in DetermineEffectiveSecurityContext - containerProfile := profileForContainer(pod, container) - - if len(s.allowedProfiles) == 0 && containerProfile != "" { - allErrs = append(allErrs, field.Forbidden(fieldPath, "seccomp may not be set")) - return allErrs - } - - if !isProfileAllowed(containerProfile, s.allowedProfiles) { - msg := fmt.Sprintf("%s is not a valid seccomp profile. Valid values are %v", containerProfile, s.allowedProfiles) - allErrs = append(allErrs, field.Forbidden(fieldPath, msg)) - } - - return allErrs -} - -// isProfileAllowed checks if profile is in allowedProfiles or if allowedProfiles -// contains the wildcard. -func isProfileAllowed(profile string, allowedProfiles []string) bool { - // for backwards compatibility and PSPs without a defined list of allowed profiles. - // If a PSP does not have allowedProfiles set then we should allow an empty profile. - // This will mean that the runtime default is used. - if len(allowedProfiles) == 0 && profile == "" { - return true - } - - for _, p := range allowedProfiles { - if profile == p || p == allowAnyProfile { - return true - } - } - return false -} - -// profileForContainer returns the container profile or the pod profile if the container annotatation is not set. -// If the container profile is set but empty then empty will be returned. This mirrors the functionality in the -// kubelet's docker tools. -func profileForContainer(pod *api.Pod, container *api.Container) string { - containerProfile, hasContainerProfile := pod.Annotations[api.SeccompContainerAnnotationKeyPrefix+container.Name] - if hasContainerProfile { - return containerProfile - } - return pod.Annotations[api.SeccompPodAnnotationKey] -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/seccomp/withseccomp_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/seccomp/withseccomp_test.go deleted file mode 100644 index dd512b0d8..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/seccomp/withseccomp_test.go +++ /dev/null @@ -1,239 +0,0 @@ -package seccomp - -import ( - "strings" - "testing" - - api "k8s.io/kubernetes/pkg/apis/core" -) - -func TestNewWithSeccompProfile(t *testing.T) { - tests := map[string]struct { - allowedProfiles []string - }{ - "empty": {allowedProfiles: []string{}}, - "nil": {allowedProfiles: nil}, - "wildcard": {allowedProfiles: []string{allowAnyProfile}}, - "values": {allowedProfiles: []string{"foo", "bar", "*"}}, - } - - for k, v := range tests { - _, err := NewWithSeccompProfile(v.allowedProfiles) - - if err != nil { - t.Errorf("%s failed with error %v", k, err) - } - } -} - -func TestGenerate(t *testing.T) { - tests := map[string]struct { - allowedProfiles []string - expectedProfile string - }{ - "empty allowed profiles": { - allowedProfiles: []string{}, - expectedProfile: "", - }, - "nil allowed profiles": { - allowedProfiles: nil, - expectedProfile: "", - }, - "allow wildcard only": { - allowedProfiles: []string{allowAnyProfile}, - expectedProfile: "", - }, - "allow values": { - allowedProfiles: []string{"foo", "bar"}, - expectedProfile: "foo", - }, - "allow wildcard and values": { - allowedProfiles: []string{"*", "foo", "bar"}, - expectedProfile: "foo", - }, - } - - for k, v := range tests { - strategy, err := NewWithSeccompProfile(v.allowedProfiles) - if err != nil { - t.Errorf("%s failed to create strategy with error %v", k, err) - continue - } - - actualProfile, generationError := strategy.Generate(nil) - if generationError != nil { - t.Errorf("%s received generation error %v", k, generationError) - continue - } - - if v.expectedProfile != actualProfile { - t.Errorf("%s expected %s but received %s", k, v.expectedProfile, actualProfile) - } - } -} - -func TestValidatePod(t *testing.T) { - newPod := func(podProfile string) *api.Pod { - pod := &api.Pod{} - - if podProfile != "" { - pod.Annotations = map[string]string{ - api.SeccompPodAnnotationKey: podProfile, - } - } - return pod - } - - tests := map[string]struct { - allowedProfiles []string - pod *api.Pod - expectedMsg string - }{ - "empty allowed profiles, no pod profile": { - allowedProfiles: nil, - pod: newPod(""), - expectedMsg: "", - }, - "empty allowed profiles, pod profile": { - allowedProfiles: nil, - pod: newPod("foo"), - expectedMsg: "seccomp may not be set", - }, - "good pod profile": { - allowedProfiles: []string{"foo"}, - pod: newPod("foo"), - expectedMsg: "", - }, - "bad pod profile": { - allowedProfiles: []string{"foo"}, - pod: newPod("bar"), - expectedMsg: "bar is not a valid seccomp profile", - }, - "wildcard allows pod profile": { - allowedProfiles: []string{"*"}, - pod: newPod("foo"), - expectedMsg: "", - }, - "wildcard allows no profile": { - allowedProfiles: []string{"*"}, - pod: newPod(""), - expectedMsg: "", - }, - } - - for name, tc := range tests { - strategy, err := NewWithSeccompProfile(tc.allowedProfiles) - if err != nil { - t.Errorf("%s failed to create strategy with error %v", name, err) - continue - } - - errs := strategy.ValidatePod(tc.pod) - - //should've passed but didn't - if len(tc.expectedMsg) == 0 && len(errs) > 0 { - t.Errorf("%s expected no errors but received %v", name, errs) - } - //should've failed but didn't - if len(tc.expectedMsg) != 0 && len(errs) == 0 { - t.Errorf("%s expected error %s but received no errors", name, tc.expectedMsg) - } - //failed with additional messages - if len(tc.expectedMsg) != 0 && len(errs) > 1 { - t.Errorf("%s expected error %s but received multiple errors: %v", name, tc.expectedMsg, errs) - } - //check that we got the right message - if len(tc.expectedMsg) != 0 && len(errs) == 1 { - if !strings.Contains(errs[0].Error(), tc.expectedMsg) { - t.Errorf("%s expected error to contain %s but it did not: %v", name, tc.expectedMsg, errs) - } - } - } -} - -func TestValidateContainer(t *testing.T) { - newPod := func(profile string) *api.Pod { - pod := &api.Pod{ - Spec: api.PodSpec{ - Containers: []api.Container{ - { - Name: "test", - }, - }, - }, - } - - if profile != "" { - pod.Annotations = map[string]string{ - api.SeccompContainerAnnotationKeyPrefix + "test": profile, - } - } - return pod - } - - tests := map[string]struct { - allowedProfiles []string - pod *api.Pod - expectedMsg string - }{ - "empty allowed profiles, no container profile": { - allowedProfiles: nil, - pod: newPod(""), - expectedMsg: "", - }, - "empty allowed profiles, container profile": { - allowedProfiles: nil, - pod: newPod("foo"), - expectedMsg: "seccomp may not be set", - }, - "good container profile": { - allowedProfiles: []string{"foo"}, - pod: newPod("foo"), - expectedMsg: "", - }, - "bad container profile": { - allowedProfiles: []string{"foo"}, - pod: newPod("bar"), - expectedMsg: "bar is not a valid seccomp profile", - }, - "wildcard allows container profile": { - allowedProfiles: []string{"*"}, - pod: newPod("foo"), - expectedMsg: "", - }, - "wildcard allows no profile": { - allowedProfiles: []string{"*"}, - pod: newPod(""), - expectedMsg: "", - }, - } - - for name, tc := range tests { - strategy, err := NewWithSeccompProfile(tc.allowedProfiles) - if err != nil { - t.Errorf("%s failed to create strategy with error %v", name, err) - continue - } - - errs := strategy.ValidateContainer(tc.pod, &tc.pod.Spec.Containers[0]) - - //should've passed but didn't - if len(tc.expectedMsg) == 0 && len(errs) > 0 { - t.Errorf("%s expected no errors but received %v", name, errs) - } - //should've failed but didn't - if len(tc.expectedMsg) != 0 && len(errs) == 0 { - t.Errorf("%s expected error %s but received no errors", name, tc.expectedMsg) - } - //failed with additional messages - if len(tc.expectedMsg) != 0 && len(errs) > 1 { - t.Errorf("%s expected error %s but received multiple errors: %v", name, tc.expectedMsg, errs) - } - //check that we got the right message - if len(tc.expectedMsg) != 0 && len(errs) == 1 { - if !strings.Contains(errs[0].Error(), tc.expectedMsg) { - t.Errorf("%s expected error to contain %s but it did not: %v", name, tc.expectedMsg, errs) - } - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/convert.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/convert.go deleted file mode 100644 index f11900ef2..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/convert.go +++ /dev/null @@ -1,24 +0,0 @@ -package selinux - -import ( - corev1 "k8s.io/api/core/v1" - coreapi "k8s.io/kubernetes/pkg/apis/core" - corev1conversions "k8s.io/kubernetes/pkg/apis/core/v1" -) - -func ToInternalSELinuxOptions(external *corev1.SELinuxOptions) (*coreapi.SELinuxOptions, error) { - if external == nil { - return nil, nil - } - internal := &coreapi.SELinuxOptions{} - err := corev1conversions.Convert_v1_SELinuxOptions_To_core_SELinuxOptions(external, internal, nil) - return internal, err -} - -func ToInternalSELinuxOptionsOrDie(external *corev1.SELinuxOptions) *coreapi.SELinuxOptions { - ret, err := ToInternalSELinuxOptions(external) - if err != nil { - panic(err) - } - return ret -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/doc.go deleted file mode 100644 index 4ec01e969..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/doc.go +++ /dev/null @@ -1,2 +0,0 @@ -// Package selinux contains security context constraints SELinux strategy implementations. -package selinux diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/mustrunas.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/mustrunas.go deleted file mode 100644 index bcaf85bea..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/mustrunas.go +++ /dev/null @@ -1,105 +0,0 @@ -package selinux - -import ( - "fmt" - "sort" - "strings" - - "k8s.io/apimachinery/pkg/util/validation/field" - coreapi "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util" -) - -type mustRunAs struct { - opts *securityv1.SELinuxContextStrategyOptions -} - -var _ SELinuxSecurityContextConstraintsStrategy = &mustRunAs{} - -func NewMustRunAs(options *securityv1.SELinuxContextStrategyOptions) (SELinuxSecurityContextConstraintsStrategy, error) { - if options == nil { - return nil, fmt.Errorf("MustRunAs requires SELinuxContextStrategyOptions") - } - if options.SELinuxOptions == nil { - return nil, fmt.Errorf("MustRunAs requires SELinuxOptions") - } - return &mustRunAs{ - opts: options, - }, nil -} - -// Generate creates the SELinuxOptions based on constraint rules. -func (s *mustRunAs) Generate(_ *coreapi.Pod, _ *coreapi.Container) (*coreapi.SELinuxOptions, error) { - return ToInternalSELinuxOptions(s.opts.SELinuxOptions) -} - -// Validate ensures that the specified values fall within the range of the strategy. -func (s *mustRunAs) Validate(fldPath *field.Path, _ *coreapi.Pod, _ *coreapi.Container, seLinux *coreapi.SELinuxOptions) field.ErrorList { - allErrs := field.ErrorList{} - - if seLinux == nil { - allErrs = append(allErrs, field.Required(fldPath, "")) - return allErrs - } - if !equalLevels(s.opts.SELinuxOptions.Level, seLinux.Level) { - detail := fmt.Sprintf("must be %s", s.opts.SELinuxOptions.Level) - allErrs = append(allErrs, field.Invalid(fldPath.Child("level"), seLinux.Level, detail)) - } - if seLinux.Role != s.opts.SELinuxOptions.Role { - detail := fmt.Sprintf("must be %s", s.opts.SELinuxOptions.Role) - allErrs = append(allErrs, field.Invalid(fldPath.Child("role"), seLinux.Role, detail)) - } - if seLinux.Type != s.opts.SELinuxOptions.Type { - detail := fmt.Sprintf("must be %s", s.opts.SELinuxOptions.Type) - allErrs = append(allErrs, field.Invalid(fldPath.Child("type"), seLinux.Type, detail)) - } - if seLinux.User != s.opts.SELinuxOptions.User { - detail := fmt.Sprintf("must be %s", s.opts.SELinuxOptions.User) - allErrs = append(allErrs, field.Invalid(fldPath.Child("user"), seLinux.User, detail)) - } - - return allErrs -} - -// equalLevels compares SELinux levels for equality. -func equalLevels(expected, actual string) bool { - if expected == actual { - return true - } - // "s0:c6,c0" => [ "s0", "c6,c0" ] - expectedParts := strings.SplitN(expected, ":", 2) - actualParts := strings.SplitN(actual, ":", 2) - - // both SELinux levels must be in a format "sX:cY" - if len(expectedParts) != 2 || len(actualParts) != 2 { - return false - } - - if !equalSensitivity(expectedParts[0], actualParts[0]) { - return false - } - - if !equalCategories(expectedParts[1], actualParts[1]) { - return false - } - - return true -} - -// equalSensitivity compares sensitivities of the SELinux levels for equality. -func equalSensitivity(expected, actual string) bool { - return expected == actual -} - -// equalCategories compares categories of the SELinux levels for equality. -func equalCategories(expected, actual string) bool { - expectedCategories := strings.Split(expected, ",") - actualCategories := strings.Split(actual, ",") - - sort.Strings(expectedCategories) - sort.Strings(actualCategories) - - return util.EqualStringSlices(expectedCategories, actualCategories) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/mustrunas_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/mustrunas_test.go deleted file mode 100644 index 81fbcc3c4..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/mustrunas_test.go +++ /dev/null @@ -1,160 +0,0 @@ -package selinux - -import ( - "reflect" - "strings" - "testing" - - corev1 "k8s.io/api/core/v1" - coreapi "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -func TestMustRunAsOptions(t *testing.T) { - tests := map[string]struct { - opts *securityv1.SELinuxContextStrategyOptions - pass bool - }{ - "invalid opts": { - opts: &securityv1.SELinuxContextStrategyOptions{}, - pass: false, - }, - "valid opts": { - opts: &securityv1.SELinuxContextStrategyOptions{SELinuxOptions: &corev1.SELinuxOptions{}}, - pass: true, - }, - } - for name, tc := range tests { - _, err := NewMustRunAs(tc.opts) - if err != nil && tc.pass { - t.Errorf("%s expected to pass but received error %#v", name, err) - } - if err == nil && !tc.pass { - t.Errorf("%s expected to fail but did not receive an error", name) - } - } -} - -func TestMustRunAsGenerate(t *testing.T) { - opts := &securityv1.SELinuxContextStrategyOptions{ - SELinuxOptions: &corev1.SELinuxOptions{ - User: "user", - Role: "role", - Type: "type", - Level: "level", - }, - } - mustRunAs, err := NewMustRunAs(opts) - if err != nil { - t.Fatalf("unexpected error initializing NewMustRunAs %v", err) - } - generated, err := mustRunAs.Generate(nil, nil) - if err != nil { - t.Fatalf("unexpected error generating selinux %v", err) - } - if !reflect.DeepEqual(generated, ToInternalSELinuxOptionsOrDie(opts.SELinuxOptions)) { - t.Errorf("generated selinux does not equal configured selinux") - } -} - -func TestMustRunAsValidate(t *testing.T) { - newValidOpts := func() *corev1.SELinuxOptions { - return &corev1.SELinuxOptions{ - User: "user", - Role: "role", - Level: "s0:c0,c6", - Type: "type", - } - } - - newValidOptsWithLevel := func(level string) *corev1.SELinuxOptions { - opts := newValidOpts() - opts.Level = level - return opts - } - - role := newValidOpts() - role.Role = "invalid" - - user := newValidOpts() - user.User = "invalid" - - seType := newValidOpts() - seType.Type = "invalid" - - validOpts := newValidOpts() - - tests := map[string]struct { - podSeLinux *coreapi.SELinuxOptions - sccSeLinux *corev1.SELinuxOptions - expectedMsg string - }{ - "invalid role": { - podSeLinux: ToInternalSELinuxOptionsOrDie(role), - sccSeLinux: validOpts, - expectedMsg: "role: Invalid value", - }, - "invalid user": { - podSeLinux: ToInternalSELinuxOptionsOrDie(user), - sccSeLinux: validOpts, - expectedMsg: "user: Invalid value", - }, - "levels are not equal": { - podSeLinux: ToInternalSELinuxOptionsOrDie(newValidOptsWithLevel("s0")), - sccSeLinux: newValidOptsWithLevel("s0:c1,c2"), - expectedMsg: "level: Invalid value", - }, - "levels differ by sensitivity": { - podSeLinux: ToInternalSELinuxOptionsOrDie(newValidOptsWithLevel("s0:c6")), - sccSeLinux: newValidOptsWithLevel("s1:c6"), - expectedMsg: "level: Invalid value", - }, - "levels differ by categories": { - podSeLinux: ToInternalSELinuxOptionsOrDie(newValidOptsWithLevel("s0:c0,c8")), - sccSeLinux: newValidOptsWithLevel("s0:c1,c7"), - expectedMsg: "level: Invalid value", - }, - "valid": { - podSeLinux: ToInternalSELinuxOptionsOrDie(validOpts), - sccSeLinux: validOpts, - expectedMsg: "", - }, - "valid with different order of categories": { - podSeLinux: ToInternalSELinuxOptionsOrDie(newValidOptsWithLevel("s0:c6,c0")), - sccSeLinux: validOpts, - expectedMsg: "", - }, - } - - for name, tc := range tests { - opts := &securityv1.SELinuxContextStrategyOptions{ - SELinuxOptions: tc.sccSeLinux, - } - mustRunAs, err := NewMustRunAs(opts) - if err != nil { - t.Errorf("unexpected error initializing NewMustRunAs for testcase %s: %#v", name, err) - continue - } - - errs := mustRunAs.Validate(nil, nil, nil, tc.podSeLinux) - //should've passed but didn't - if len(tc.expectedMsg) == 0 && len(errs) > 0 { - t.Errorf("%s expected no errors but received %v", name, errs) - } - //should've failed but didn't - if len(tc.expectedMsg) != 0 && len(errs) == 0 { - t.Errorf("%s expected error %s but received no errors", name, tc.expectedMsg) - } - //failed with additional messages - if len(tc.expectedMsg) != 0 && len(errs) > 1 { - t.Errorf("%s expected error %s but received multiple errors: %v", name, tc.expectedMsg, errs) - } - //check that we got the right message - if len(tc.expectedMsg) != 0 && len(errs) == 1 { - if !strings.Contains(errs[0].Error(), tc.expectedMsg) { - t.Errorf("%s expected error to contain %s but it did not: %v", name, tc.expectedMsg, errs) - } - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/runasany.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/runasany.go deleted file mode 100644 index 95adb5036..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/runasany.go +++ /dev/null @@ -1,28 +0,0 @@ -package selinux - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - coreapi "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -// runAsAny implements the SELinuxSecurityContextConstraintsStrategy interface. -type runAsAny struct{} - -var _ SELinuxSecurityContextConstraintsStrategy = &runAsAny{} - -// NewRunAsAny provides a strategy that will return the configured se linux context or nil. -func NewRunAsAny(options *securityv1.SELinuxContextStrategyOptions) (SELinuxSecurityContextConstraintsStrategy, error) { - return &runAsAny{}, nil -} - -// Generate creates the SELinuxOptions based on constraint rules. -func (s *runAsAny) Generate(pod *coreapi.Pod, container *coreapi.Container) (*coreapi.SELinuxOptions, error) { - return nil, nil -} - -// Validate ensures that the specified values fall within the range of the strategy. -func (s *runAsAny) Validate(fldPath *field.Path, _ *coreapi.Pod, _ *coreapi.Container, options *coreapi.SELinuxOptions) field.ErrorList { - return field.ErrorList{} -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/runasany_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/runasany_test.go deleted file mode 100644 index ac0fdc468..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/runasany_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package selinux - -import ( - "testing" - - securityv1 "github.com/openshift/api/security/v1" - corev1 "k8s.io/api/core/v1" -) - -func TestRunAsAnyOptions(t *testing.T) { - _, err := NewRunAsAny(nil) - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsAny %v", err) - } - _, err = NewRunAsAny(&securityv1.SELinuxContextStrategyOptions{}) - if err != nil { - t.Errorf("unexpected error initializing NewRunAsAny %v", err) - } -} - -func TestRunAsAnyGenerate(t *testing.T) { - s, err := NewRunAsAny(&securityv1.SELinuxContextStrategyOptions{}) - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsAny %v", err) - } - uid, err := s.Generate(nil, nil) - if uid != nil { - t.Errorf("expected nil uid but got %v", *uid) - } - if err != nil { - t.Errorf("unexpected error generating uid %v", err) - } -} - -func TestRunAsAnyValidate(t *testing.T) { - s, err := NewRunAsAny(&securityv1.SELinuxContextStrategyOptions{ - SELinuxOptions: &corev1.SELinuxOptions{ - Level: "foo", - }, - }, - ) - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsAny %v", err) - } - errs := s.Validate(nil, nil, nil, nil) - if len(errs) != 0 { - t.Errorf("unexpected errors validating with ") - } - s, err = NewRunAsAny(&securityv1.SELinuxContextStrategyOptions{}) - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsAny %v", err) - } - errs = s.Validate(nil, nil, nil, nil) - if len(errs) != 0 { - t.Errorf("unexpected errors validating %v", errs) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/types.go deleted file mode 100644 index 4cd5f3e8f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/selinux/types.go +++ /dev/null @@ -1,14 +0,0 @@ -package selinux - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - coreapi "k8s.io/kubernetes/pkg/apis/core" -) - -// SELinuxSecurityContextConstraintsStrategy defines the interface for all SELinux constraint strategies. -type SELinuxSecurityContextConstraintsStrategy interface { - // Generate creates the SELinuxOptions based on constraint rules. - Generate(pod *coreapi.Pod, container *coreapi.Container) (*coreapi.SELinuxOptions, error) - // Validate ensures that the specified values fall within the range of the strategy. - Validate(fldPath *field.Path, pod *coreapi.Pod, container *coreapi.Container, options *coreapi.SELinuxOptions) field.ErrorList -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/doc.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/doc.go deleted file mode 100644 index f28032767..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/doc.go +++ /dev/null @@ -1,2 +0,0 @@ -// Package user contains security context constraints user strategy implementations. -package user diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunas.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunas.go deleted file mode 100644 index 455d7f8de..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunas.go +++ /dev/null @@ -1,53 +0,0 @@ -package user - -import ( - "fmt" - - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -// mustRunAs implements the RunAsUserSecurityContextConstraintsStrategy interface -type mustRunAs struct { - opts *securityv1.RunAsUserStrategyOptions -} - -var _ RunAsUserSecurityContextConstraintsStrategy = &mustRunAs{} - -// NewMustRunAs provides a strategy that requires the container to run as a specific UID. -func NewMustRunAs(options *securityv1.RunAsUserStrategyOptions) (RunAsUserSecurityContextConstraintsStrategy, error) { - if options == nil { - return nil, fmt.Errorf("MustRunAs requires run as user options") - } - if options.UID == nil { - return nil, fmt.Errorf("MustRunAs requires a UID") - } - return &mustRunAs{ - opts: options, - }, nil -} - -// Generate creates the uid based on policy rules. MustRunAs returns the UID it is initialized with. -func (s *mustRunAs) Generate(pod *api.Pod, container *api.Container) (*int64, error) { - return s.opts.UID, nil -} - -// Validate ensures that the specified values fall within the range of the strategy. -func (s *mustRunAs) Validate(fldPath *field.Path, _ *api.Pod, _ *api.Container, runAsNonRoot *bool, runAsUser *int64) field.ErrorList { - allErrs := field.ErrorList{} - - if runAsUser == nil { - allErrs = append(allErrs, field.Required(fldPath.Child("runAsUser"), "")) - return allErrs - } - - if *s.opts.UID != *runAsUser { - detail := fmt.Sprintf("must be: %v", *s.opts.UID) - allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsUser"), *runAsUser, detail)) - return allErrs - } - - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunas_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunas_test.go deleted file mode 100644 index 9e2e594dc..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunas_test.go +++ /dev/null @@ -1,82 +0,0 @@ -package user - -import ( - "fmt" - "strings" - "testing" - - securityv1 "github.com/openshift/api/security/v1" -) - -func TestMustRunAsOptions(t *testing.T) { - var uid int64 = 1 - tests := map[string]struct { - opts *securityv1.RunAsUserStrategyOptions - pass bool - }{ - "invalid opts": { - opts: &securityv1.RunAsUserStrategyOptions{}, - pass: false, - }, - "valid opts": { - opts: &securityv1.RunAsUserStrategyOptions{UID: &uid}, - pass: true, - }, - } - for name, tc := range tests { - _, err := NewMustRunAs(tc.opts) - if err != nil && tc.pass { - t.Errorf("%s expected to pass but received error %v", name, err) - } - if err == nil && !tc.pass { - t.Errorf("%s expected to fail but did not receive an error", name) - } - } -} - -func TestMustRunAsGenerate(t *testing.T) { - var uid int64 = 1 - opts := &securityv1.RunAsUserStrategyOptions{UID: &uid} - mustRunAs, err := NewMustRunAs(opts) - if err != nil { - t.Fatalf("unexpected error initializing NewMustRunAs %v", err) - } - generated, err := mustRunAs.Generate(nil, nil) - if err != nil { - t.Fatalf("unexpected error generating uid %v", err) - } - if *generated != uid { - t.Errorf("generated uid does not equal configured uid") - } -} - -func TestMustRunAsValidate(t *testing.T) { - var uid int64 = 1 - var badUID int64 = 2 - opts := &securityv1.RunAsUserStrategyOptions{UID: &uid} - mustRunAs, err := NewMustRunAs(opts) - if err != nil { - t.Fatalf("unexpected error initializing NewMustRunAs %v", err) - } - - errs := mustRunAs.Validate(nil, nil, nil, nil, nil) - expectedMessage := "runAsUser: Required value" - if len(errs) == 0 { - t.Errorf("expected errors from nil runAsUser but got none") - } else if !strings.Contains(errs[0].Error(), expectedMessage) { - t.Errorf("expected error to contain %q but it did not: %v", expectedMessage, errs) - } - - errs = mustRunAs.Validate(nil, nil, nil, nil, &badUID) - expectedMessage = fmt.Sprintf("runAsUser: Invalid value: %d: must be: %d", badUID, uid) - if len(errs) == 0 { - t.Errorf("expected errors from mismatch uid but got none") - } else if !strings.Contains(errs[0].Error(), expectedMessage) { - t.Errorf("expected error to contain %q but it did not: %v", expectedMessage, errs) - } - - errs = mustRunAs.Validate(nil, nil, nil, nil, &uid) - if len(errs) != 0 { - t.Errorf("expected no errors from matching uid but got %v", errs) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunasrange.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunasrange.go deleted file mode 100644 index 1ca709e2a..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunasrange.go +++ /dev/null @@ -1,56 +0,0 @@ -package user - -import ( - "fmt" - - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -// mustRunAsRange implements the RunAsUserSecurityContextConstraintsStrategy interface -type mustRunAsRange struct { - opts *securityv1.RunAsUserStrategyOptions -} - -var _ RunAsUserSecurityContextConstraintsStrategy = &mustRunAsRange{} - -// NewMustRunAsRange provides a strategy that requires the container to run as a specific UID in a range. -func NewMustRunAsRange(options *securityv1.RunAsUserStrategyOptions) (RunAsUserSecurityContextConstraintsStrategy, error) { - if options == nil { - return nil, fmt.Errorf("MustRunAsRange requires run as user options") - } - if options.UIDRangeMin == nil { - return nil, fmt.Errorf("MustRunAsRange requires a UIDRangeMin") - } - if options.UIDRangeMax == nil { - return nil, fmt.Errorf("MustRunAsRange requires a UIDRangeMax") - } - return &mustRunAsRange{ - opts: options, - }, nil -} - -// Generate creates the uid based on policy rules. MustRunAs returns the UIDRangeMin it is initialized with. -func (s *mustRunAsRange) Generate(pod *api.Pod, container *api.Container) (*int64, error) { - return s.opts.UIDRangeMin, nil -} - -// Validate ensures that the specified values fall within the range of the strategy. -func (s *mustRunAsRange) Validate(fldPath *field.Path, _ *api.Pod, _ *api.Container, runAsNonRoot *bool, runAsUser *int64) field.ErrorList { - allErrs := field.ErrorList{} - - if runAsUser == nil { - allErrs = append(allErrs, field.Required(fldPath.Child("runAsUser"), "")) - return allErrs - } - - if *runAsUser < *s.opts.UIDRangeMin || *runAsUser > *s.opts.UIDRangeMax { - detail := fmt.Sprintf("must be in the ranges: [%v, %v]", *s.opts.UIDRangeMin, *s.opts.UIDRangeMax) - allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsUser"), *runAsUser, detail)) - return allErrs - } - - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunasrange_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunasrange_test.go deleted file mode 100644 index a207c504f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/mustrunasrange_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package user - -import ( - "fmt" - "strings" - "testing" - - securityv1 "github.com/openshift/api/security/v1" -) - -func TestMustRunAsRangeOptions(t *testing.T) { - var uid int64 = 1 - tests := map[string]struct { - opts *securityv1.RunAsUserStrategyOptions - pass bool - }{ - "invalid opts, required min and max": { - opts: &securityv1.RunAsUserStrategyOptions{}, - pass: false, - }, - "invalid opts, required max": { - opts: &securityv1.RunAsUserStrategyOptions{UIDRangeMin: &uid}, - pass: false, - }, - "invalid opts, required min": { - opts: &securityv1.RunAsUserStrategyOptions{UIDRangeMax: &uid}, - pass: false, - }, - "valid opts": { - opts: &securityv1.RunAsUserStrategyOptions{UIDRangeMin: &uid, UIDRangeMax: &uid}, - pass: true, - }, - } - for name, tc := range tests { - _, err := NewMustRunAsRange(tc.opts) - if err != nil && tc.pass { - t.Errorf("%s expected to pass but received error %v", name, err) - } - if err == nil && !tc.pass { - t.Errorf("%s expected to fail but did not receive an error", name) - } - } -} - -func TestMustRunAsRangeGenerate(t *testing.T) { - var uidMin int64 = 1 - var uidMax int64 = 10 - opts := &securityv1.RunAsUserStrategyOptions{UIDRangeMin: &uidMin, UIDRangeMax: &uidMax} - mustRunAsRange, err := NewMustRunAsRange(opts) - if err != nil { - t.Fatalf("unexpected error initializing NewMustRunAsRange %v", err) - } - generated, err := mustRunAsRange.Generate(nil, nil) - if err != nil { - t.Fatalf("unexpected error generating uid %v", err) - } - if *generated != uidMin { - t.Errorf("generated uid does not equal expected uid") - } -} - -func TestMustRunAsRangeValidate(t *testing.T) { - var uidMin int64 = 1 - var uidMax int64 = 10 - opts := &securityv1.RunAsUserStrategyOptions{UIDRangeMin: &uidMin, UIDRangeMax: &uidMax} - mustRunAsRange, err := NewMustRunAsRange(opts) - if err != nil { - t.Fatalf("unexpected error initializing NewMustRunAsRange %v", err) - } - - errs := mustRunAsRange.Validate(nil, nil, nil, nil, nil) - expectedMessage := "runAsUser: Required value" - if len(errs) == 0 { - t.Errorf("expected errors from nil runAsUser but got none") - } else if !strings.Contains(errs[0].Error(), expectedMessage) { - t.Errorf("expected error to contain %q but it did not: %v", expectedMessage, errs) - } - - var lowUid int64 = 0 - errs = mustRunAsRange.Validate(nil, nil, nil, nil, &lowUid) - expectedMessage = fmt.Sprintf("runAsUser: Invalid value: %d: must be in the ranges: [%d, %d]", lowUid, uidMin, uidMax) - if len(errs) == 0 { - t.Errorf("expected errors from mismatch uid but got none") - } else if !strings.Contains(errs[0].Error(), expectedMessage) { - t.Errorf("expected error to contain %q but it did not: %v", expectedMessage, errs) - } - - var highUid int64 = 11 - errs = mustRunAsRange.Validate(nil, nil, nil, nil, &highUid) - expectedMessage = fmt.Sprintf("runAsUser: Invalid value: %d: must be in the ranges: [%d, %d]", highUid, uidMin, uidMax) - if len(errs) == 0 { - t.Errorf("expected errors from mismatch uid but got none") - } else if !strings.Contains(errs[0].Error(), expectedMessage) { - t.Errorf("expected error to contain %q but it did not: %v", expectedMessage, errs) - } - - var goodUid int64 = 5 - errs = mustRunAsRange.Validate(nil, nil, nil, nil, &goodUid) - if len(errs) != 0 { - t.Errorf("expected no errors from matching uid but got %v", errs) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/nonroot.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/nonroot.go deleted file mode 100644 index 52e27a3d8..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/nonroot.go +++ /dev/null @@ -1,43 +0,0 @@ -package user - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -type nonRoot struct{} - -var _ RunAsUserSecurityContextConstraintsStrategy = &nonRoot{} - -func NewRunAsNonRoot(options *securityv1.RunAsUserStrategyOptions) (RunAsUserSecurityContextConstraintsStrategy, error) { - return &nonRoot{}, nil -} - -// Generate creates the uid based on policy rules. This strategy does return a UID. It assumes -// that the user will specify a UID or the container image specifies a UID. -func (s *nonRoot) Generate(pod *api.Pod, container *api.Container) (*int64, error) { - return nil, nil -} - -// Validate ensures that the specified values fall within the range of the strategy. Validation -// of this will pass if either the UID is not set, assuming that the image will provided the UID -// or if the UID is set it is not root. In order to work properly this assumes that the kubelet -// will populate an -func (s *nonRoot) Validate(fldPath *field.Path, _ *api.Pod, _ *api.Container, runAsNonRoot *bool, runAsUser *int64) field.ErrorList { - allErrs := field.ErrorList{} - if runAsNonRoot == nil && runAsUser == nil { - allErrs = append(allErrs, field.Required(fldPath.Child("runAsNonRoot"), "must be true")) - return allErrs - } - if runAsNonRoot != nil && *runAsNonRoot == false { - allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsNonRoot"), *runAsNonRoot, "must be true")) - return allErrs - } - if runAsUser != nil && *runAsUser == 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsUser"), *runAsUser, "running with the root UID is forbidden")) - return allErrs - } - return allErrs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/nonroot_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/nonroot_test.go deleted file mode 100644 index af6c27422..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/nonroot_test.go +++ /dev/null @@ -1,78 +0,0 @@ -package user - -import ( - "strings" - "testing" - - securityv1 "github.com/openshift/api/security/v1" -) - -func TestNonRootOptions(t *testing.T) { - _, err := NewRunAsNonRoot(nil) - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsNonRoot %v", err) - } - _, err = NewRunAsNonRoot(&securityv1.RunAsUserStrategyOptions{}) - if err != nil { - t.Errorf("unexpected error initializing NewRunAsNonRoot %v", err) - } -} - -func TestNonRootGenerate(t *testing.T) { - s, err := NewRunAsNonRoot(&securityv1.RunAsUserStrategyOptions{}) - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsNonRoot %v", err) - } - uid, err := s.Generate(nil, nil) - if uid != nil { - t.Errorf("expected nil uid but got %d", *uid) - } - if err != nil { - t.Errorf("unexpected error generating uid %v", err) - } -} - -func TestNonRootValidate(t *testing.T) { - var uid int64 = 1 - var badUID int64 = 0 - s, err := NewRunAsNonRoot(&securityv1.RunAsUserStrategyOptions{}) - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsNonRoot %v", err) - } - - errs := s.Validate(nil, nil, nil, nil, &badUID) - expectedMessage := "runAsUser: Invalid value: 0: running with the root UID is forbidden" - if len(errs) == 0 { - t.Errorf("expected errors from root uid but got none") - } else if !strings.Contains(errs[0].Error(), expectedMessage) { - t.Errorf("expected error to contain %q but it did not: %v", expectedMessage, errs) - } - - errs = s.Validate(nil, nil, nil, nil, nil) - expectedMessage = "runAsNonRoot: Required value: must be true" - if len(errs) == 0 { - t.Errorf("expected error when neither runAsUser nor runAsNonRoot are specified but got none") - } else if !strings.Contains(errs[0].Error(), expectedMessage) { - t.Errorf("expected error to contain %q but it did not: %v", expectedMessage, errs) - } - - no := false - errs = s.Validate(nil, nil, nil, &no, nil) - expectedMessage = "runAsNonRoot: Invalid value: false: must be true" - if len(errs) == 0 { - t.Errorf("expected error when runAsNonRoot is false but got none") - } else if !strings.Contains(errs[0].Error(), expectedMessage) { - t.Errorf("expected error to contain %q but it did not: %v", expectedMessage, errs) - } - - errs = s.Validate(nil, nil, nil, nil, &uid) - if len(errs) != 0 { - t.Errorf("expected no errors from non-root uid but got %v", errs) - } - - yes := true - errs = s.Validate(nil, nil, nil, &yes, nil) - if len(errs) != 0 { - t.Errorf("expected no errors from nil uid but got %v", errs) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/runasany.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/runasany.go deleted file mode 100644 index f56505ed1..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/runasany.go +++ /dev/null @@ -1,28 +0,0 @@ -package user - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -// runAsAny implements the interface RunAsUserSecurityContextConstraintsStrategy. -type runAsAny struct{} - -var _ RunAsUserSecurityContextConstraintsStrategy = &runAsAny{} - -// NewRunAsAny provides a strategy that will return nil. -func NewRunAsAny(options *securityv1.RunAsUserStrategyOptions) (RunAsUserSecurityContextConstraintsStrategy, error) { - return &runAsAny{}, nil -} - -// Generate creates the uid based on policy rules. -func (s *runAsAny) Generate(pod *api.Pod, container *api.Container) (*int64, error) { - return nil, nil -} - -// Validate ensures that the specified values fall within the range of the strategy. -func (s *runAsAny) Validate(fldPath *field.Path, _ *api.Pod, _ *api.Container, runAsNonRoot *bool, runAsUser *int64) field.ErrorList { - return field.ErrorList{} -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/runasany_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/runasany_test.go deleted file mode 100644 index 9bc78eb30..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/runasany_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package user - -import ( - "testing" - - securityv1 "github.com/openshift/api/security/v1" -) - -func TestRunAsAnyOptions(t *testing.T) { - _, err := NewRunAsAny(nil) - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsAny %v", err) - } - _, err = NewRunAsAny(&securityv1.RunAsUserStrategyOptions{}) - if err != nil { - t.Errorf("unexpected error initializing NewRunAsAny %v", err) - } -} - -func TestRunAsAnyGenerate(t *testing.T) { - s, err := NewRunAsAny(&securityv1.RunAsUserStrategyOptions{}) - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsAny %v", err) - } - uid, err := s.Generate(nil, nil) - if uid != nil { - t.Errorf("expected nil uid but got %d", *uid) - } - if err != nil { - t.Errorf("unexpected error generating uid %v", err) - } -} - -func TestRunAsAnyValidate(t *testing.T) { - s, err := NewRunAsAny(&securityv1.RunAsUserStrategyOptions{}) - if err != nil { - t.Fatalf("unexpected error initializing NewRunAsAny %v", err) - } - errs := s.Validate(nil, nil, nil, nil, nil) - if len(errs) != 0 { - t.Errorf("unexpected errors validating with ") - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/types.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/types.go deleted file mode 100644 index fd60d45fd..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/user/types.go +++ /dev/null @@ -1,14 +0,0 @@ -package user - -import ( - "k8s.io/apimachinery/pkg/util/validation/field" - api "k8s.io/kubernetes/pkg/apis/core" -) - -// RunAsUserSecurityContextConstraintsStrategy defines the interface for all uid constraint strategies. -type RunAsUserSecurityContextConstraintsStrategy interface { - // Generate creates the uid based on policy rules. - Generate(pod *api.Pod, container *api.Container) (*int64, error) - // Validate ensures that the specified values fall within the range of the strategy. - Validate(fldPath *field.Path, pod *api.Pod, container *api.Container, runAsNonRoot *bool, runAsUser *int64) field.ErrorList -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/bypriority.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/bypriority.go deleted file mode 100644 index 2fb523b54..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/bypriority.go +++ /dev/null @@ -1,54 +0,0 @@ -package sort - -import ( - securityv1 "github.com/openshift/api/security/v1" -) - -// ByPriority is a helper to sort SCCs based on priority. If priorities are equal -// a string compare of the name is used. -type ByPriority []*securityv1.SecurityContextConstraints - -func (s ByPriority) Len() int { - return len(s) -} -func (s ByPriority) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -func (s ByPriority) Less(i, j int) bool { - iSCC := s[i] - jSCC := s[j] - - iSCCPriority := getPriority(iSCC) - jSCCPriority := getPriority(jSCC) - - // a higher priority is considered "less" so that it moves to the front of the line - if iSCCPriority > jSCCPriority { - return true - } - - if iSCCPriority < jSCCPriority { - return false - } - - // priorities are equal, let's try point values - iRestrictionScore := pointValue(iSCC) - jRestrictionScore := pointValue(jSCC) - - // a lower restriction score is considered "less" so that it moves to the front of the line - // (the greater the score, the more lax the SCC is) - if iRestrictionScore < jRestrictionScore { - return true - } - - if iRestrictionScore > jRestrictionScore { - return false - } - - // they are still equal, sort by name - return iSCC.Name < jSCC.Name -} - -func getPriority(scc *securityv1.SecurityContextConstraints) int { - if scc.Priority == nil { - return 0 - } - return int(*scc.Priority) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/bypriority_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/bypriority_test.go deleted file mode 100644 index c014687f8..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/bypriority_test.go +++ /dev/null @@ -1,89 +0,0 @@ -package sort - -import ( - "sort" - "testing" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - securityv1 "github.com/openshift/api/security/v1" -) - -func TestByPriority(t *testing.T) { - sccs := []*securityv1.SecurityContextConstraints{testSCC("one", 1), testSCC("two", 2), testSCC("three", 3), testSCC("negative", -1), testSCC("super", 100)} - expected := []string{"super", "three", "two", "one", "negative"} - - sort.Sort(ByPriority(sccs)) - - for i, scc := range sccs { - if scc.Name != expected[i] { - t.Errorf("sort by priority found %s at element %d but expected %s", scc.Name, i, expected[i]) - } - } -} - -func TestByPrioritiesScore(t *testing.T) { - privilegedSCC := testSCC("privileged", 1) - privilegedSCC.AllowPrivilegedContainer = true - - nonPriviledSCC := testSCC("nonprivileged", 1) - - hostDirSCC := testSCC("hostdir", 1) - hostDirSCC.Volumes = []securityv1.FSType{securityv1.FSTypeHostPath} - - sccs := []*securityv1.SecurityContextConstraints{nonPriviledSCC, privilegedSCC, hostDirSCC} - // with equal priorities expect that the SCCs will be sorted with hold behavior based on their score, - // most restrictive first - expected := []string{"nonprivileged", "hostdir", "privileged"} - - sort.Sort(ByPriority(sccs)) - - for i, scc := range sccs { - if scc.Name != expected[i] { - t.Errorf("sort by score found %s at element %d but expected %s", scc.Name, i, expected[i]) - } - } -} - -func TestByPrioritiesName(t *testing.T) { - sccs := []*securityv1.SecurityContextConstraints{testSCC("e", 1), testSCC("d", 1), testSCC("a", 1), testSCC("c", 1), testSCC("b", 1)} - // expect that with equal priorities AND an equal point value that SCCs are sorted by name - expected := []string{"a", "b", "c", "d", "e"} - - sort.Sort(ByPriority(sccs)) - - for i, scc := range sccs { - if scc.Name != expected[i] { - t.Errorf("sort by priority found %s at element %d but expected %s", scc.Name, i, expected[i]) - } - } -} - -func TestByPrioritiesMixedSCCs(t *testing.T) { - privilegedSCC := testSCC("privileged", 1) - privilegedSCC.AllowPrivilegedContainer = true - - nonPriviledSCC := testSCC("nonprivileged", 1) - - sccs := []*securityv1.SecurityContextConstraints{testSCC("priorityB", 5), testSCC("priorityA", 5), testSCC("super", 100), privilegedSCC, nonPriviledSCC} - // highest priority first, equal priority and equal score sorted by name, equal priority and non-equal score sorted most restrictive to least. - expected := []string{"super", "priorityA", "priorityB", "nonprivileged", "privileged"} - - sort.Sort(ByPriority(sccs)) - - for i, scc := range sccs { - if scc.Name != expected[i] { - t.Errorf("sort by priority found %s at element %d but expected %s", scc.Name, i, expected[i]) - } - } -} - -func testSCC(name string, priority int) *securityv1.SecurityContextConstraints { - newPriority := int32(priority) - return &securityv1.SecurityContextConstraints{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Priority: &newPriority, - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/byrestrictions.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/byrestrictions.go deleted file mode 100644 index aabdb3c18..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/byrestrictions.go +++ /dev/null @@ -1,175 +0,0 @@ -package sort - -import ( - "strings" - - "k8s.io/klog" - - corev1 "k8s.io/api/core/v1" - - securityv1 "github.com/openshift/api/security/v1" -) - -// ByRestrictions is a helper to sort SCCs in order of most restrictive to least restrictive. -type ByRestrictions []*securityv1.SecurityContextConstraints - -func (s ByRestrictions) Len() int { - return len(s) -} -func (s ByRestrictions) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -func (s ByRestrictions) Less(i, j int) bool { - return pointValue(s[i]) < pointValue(s[j]) -} - -// The following constants define the weight of the restrictions and used for -// calculating the points of the particular SCC. The lower the number, the more -// restrictive SCC is. Make sure that weak restrictions are always valued -// higher than the combination of the strong restrictions. - -type points int - -const ( - privilegedPoints points = 1000000 - - hostNetworkPoints points = 200000 - hostPortsPoints points = 400000 - - hostVolumePoints points = 100000 - nonTrivialVolumePoints points = 50000 - - runAsAnyUserPoints points = 40000 - runAsNonRootPoints points = 30000 - runAsRangePoints points = 20000 - runAsUserPoints points = 10000 - - capDefaultPoints points = 5000 - capAddOnePoints points = 300 - capAllowAllPoints points = 4000 - capAllowOnePoints points = 10 - capDropAllPoints points = -3000 - capDropOnePoints points = -50 - capMaxPoints points = 9999 - capMinPoints points = 0 - - noPoints points = 0 -) - -// pointValue places a value on the SCC based on the settings of the SCC that can be used -// to determine how restrictive it is. The lower the number, the more restrictive it is. -func pointValue(constraint *securityv1.SecurityContextConstraints) points { - totalPoints := noPoints - - if constraint.AllowPrivilegedContainer { - totalPoints += privilegedPoints - } - - // add points based on volume requests - totalPoints += volumePointValue(constraint) - - if constraint.AllowHostNetwork { - totalPoints += hostNetworkPoints - } - if constraint.AllowHostPorts { - totalPoints += hostPortsPoints - } - - // add points based on capabilities - totalPoints += capabilitiesPointValue(constraint) - - // the map contains points for both RunAsUser and SELinuxContext - // strategies by taking advantage that they have identical strategy names - strategiesPoints := map[string]points{ - string(securityv1.RunAsUserStrategyRunAsAny): runAsAnyUserPoints, - string(securityv1.RunAsUserStrategyMustRunAsNonRoot): runAsNonRootPoints, - string(securityv1.RunAsUserStrategyMustRunAsRange): runAsRangePoints, - string(securityv1.RunAsUserStrategyMustRunAs): runAsUserPoints, - } - - strategyType := string(constraint.SELinuxContext.Type) - points, found := strategiesPoints[strategyType] - if found { - totalPoints += points - } else { - klog.Warningf("SELinuxContext type %q has no point value, this may cause issues in sorting SCCs by restriction", strategyType) - } - - strategyType = string(constraint.RunAsUser.Type) - points, found = strategiesPoints[strategyType] - if found { - totalPoints += points - } else { - klog.Warningf("RunAsUser type %q has no point value, this may cause issues in sorting SCCs by restriction", strategyType) - } - - return totalPoints -} - -// volumePointValue returns a score based on the volumes allowed by the SCC. -// Allowing a host volume will return a score of 100000. Allowance of anything other -// than Secret, ConfigMap, EmptyDir, DownwardAPI, Projected, and None will result in -// a score of 50000. If the SCC only allows these trivial types, it will have a -// score of 0. -func volumePointValue(scc *securityv1.SecurityContextConstraints) points { - hasHostVolume := false - hasNonTrivialVolume := false - for _, v := range scc.Volumes { - switch v { - case securityv1.FSTypeHostPath, securityv1.FSTypeAll: - hasHostVolume = true - // nothing more to do, this is the max point value - break - // it is easier to specifically list the trivial volumes and allow the - // default case to be non-trivial so we don't have to worry about adding - // volumes in the future unless they're trivial. - case securityv1.FSTypeSecret, securityv1.FSTypeConfigMap, securityv1.FSTypeEmptyDir, - securityv1.FSTypeDownwardAPI, securityv1.FSProjected, securityv1.FSTypeNone: - // do nothing - default: - hasNonTrivialVolume = true - } - } - - if hasHostVolume { - return hostVolumePoints - } - if hasNonTrivialVolume { - return nonTrivialVolumePoints - } - return noPoints -} - -// hasCap checks for needle in haystack. -func hasCap(needle string, haystack []corev1.Capability) bool { - for _, c := range haystack { - if needle == strings.ToUpper(string(c)) { - return true - } - } - return false -} - -// capabilitiesPointValue returns a score based on the capabilities allowed, -// added, or removed by the SCC. This allow us to prefer the more restrictive -// SCC. -func capabilitiesPointValue(scc *securityv1.SecurityContextConstraints) points { - capsPoints := capDefaultPoints - capsPoints += capAddOnePoints * points(len(scc.DefaultAddCapabilities)) - if hasCap(string(securityv1.AllowAllCapabilities), scc.AllowedCapabilities) { - capsPoints += capAllowAllPoints - } else if hasCap("ALL", scc.AllowedCapabilities) { - capsPoints += capAllowAllPoints - } else { - capsPoints += capAllowOnePoints * points(len(scc.AllowedCapabilities)) - } - if hasCap("ALL", scc.RequiredDropCapabilities) { - capsPoints += capDropAllPoints - } else { - capsPoints += capDropOnePoints * points(len(scc.RequiredDropCapabilities)) - } - if capsPoints > capMaxPoints { - return capMaxPoints - } else if capsPoints < capMinPoints { - return capMinPoints - } - return capsPoints -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/byrestrictions_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/byrestrictions_test.go deleted file mode 100644 index c74143c23..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/sort/byrestrictions_test.go +++ /dev/null @@ -1,264 +0,0 @@ -package sort - -import ( - "testing" - - corev1 "k8s.io/api/core/v1" - - securityv1 "github.com/openshift/api/security/v1" -) - -func TestPointValue(t *testing.T) { - newSCC := func(priv bool, seLinuxStrategy securityv1.SELinuxContextStrategyType, userStrategy securityv1.RunAsUserStrategyType) *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - AllowPrivilegedContainer: priv, - SELinuxContext: securityv1.SELinuxContextStrategyOptions{ - Type: seLinuxStrategy, - }, - RunAsUser: securityv1.RunAsUserStrategyOptions{ - Type: userStrategy, - }, - } - } - - seLinuxStrategies := map[securityv1.SELinuxContextStrategyType]points{ - securityv1.SELinuxStrategyRunAsAny: runAsAnyUserPoints, - securityv1.SELinuxStrategyMustRunAs: runAsUserPoints, - } - userStrategies := map[securityv1.RunAsUserStrategyType]points{ - securityv1.RunAsUserStrategyRunAsAny: runAsAnyUserPoints, - securityv1.RunAsUserStrategyMustRunAsNonRoot: runAsNonRootPoints, - securityv1.RunAsUserStrategyMustRunAsRange: runAsRangePoints, - securityv1.RunAsUserStrategyMustRunAs: runAsUserPoints, - } - - // run through all combos of user strategy + seLinux strategy + priv - for userStrategy, userStrategyPoints := range userStrategies { - for seLinuxStrategy, seLinuxStrategyPoints := range seLinuxStrategies { - expectedPoints := privilegedPoints + userStrategyPoints + seLinuxStrategyPoints + capDefaultPoints - scc := newSCC(true, seLinuxStrategy, userStrategy) - actualPoints := pointValue(scc) - - if actualPoints != expectedPoints { - t.Errorf("privileged, user: %v, seLinux %v expected %d score but got %d", userStrategy, seLinuxStrategy, expectedPoints, actualPoints) - } - - expectedPoints = userStrategyPoints + seLinuxStrategyPoints + capDefaultPoints - scc = newSCC(false, seLinuxStrategy, userStrategy) - actualPoints = pointValue(scc) - - if actualPoints != expectedPoints { - t.Errorf("non privileged, user: %v, seLinux %v expected %d score but got %d", userStrategy, seLinuxStrategy, expectedPoints, actualPoints) - } - } - } - - // sanity check to ensure volume and capabilities scores are added (specific volumes - // and capabilities scores are tested below) - scc := newSCC(false, securityv1.SELinuxStrategyMustRunAs, securityv1.RunAsUserStrategyMustRunAs) - scc.Volumes = []securityv1.FSType{securityv1.FSTypeHostPath} - actualPoints := pointValue(scc) - // SELinux + User + host path volume + default capabilities - expectedPoints := runAsUserPoints + runAsUserPoints + hostVolumePoints + capDefaultPoints - if actualPoints != expectedPoints { - t.Errorf("volume score was not added to the scc point value correctly, got %d!", actualPoints) - } -} - -func TestVolumePointValue(t *testing.T) { - newSCC := func(host, nonTrivial, trivial bool) *securityv1.SecurityContextConstraints { - volumes := []securityv1.FSType{} - if host { - volumes = append(volumes, securityv1.FSTypeHostPath) - } - if nonTrivial { - volumes = append(volumes, securityv1.FSTypeAWSElasticBlockStore) - } - if trivial { - volumes = append(volumes, securityv1.FSTypeSecret) - } - return &securityv1.SecurityContextConstraints{ - Volumes: volumes, - } - } - - allowAllSCC := &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeAll}, - } - nilVolumeSCC := &securityv1.SecurityContextConstraints{} - - tests := map[string]struct { - scc *securityv1.SecurityContextConstraints - expectedPoints points - }{ - "all volumes": { - scc: allowAllSCC, - expectedPoints: hostVolumePoints, - }, - "host volume": { - scc: newSCC(true, false, false), - expectedPoints: hostVolumePoints, - }, - "host volume and non trivial volumes": { - scc: newSCC(true, true, false), - expectedPoints: hostVolumePoints, - }, - "host volume, non trivial, and trivial": { - scc: newSCC(true, true, true), - expectedPoints: hostVolumePoints, - }, - "non trivial": { - scc: newSCC(false, true, false), - expectedPoints: nonTrivialVolumePoints, - }, - "non trivial and trivial": { - scc: newSCC(false, true, true), - expectedPoints: nonTrivialVolumePoints, - }, - "trivial": { - scc: newSCC(false, false, true), - expectedPoints: noPoints, - }, - "trivial - secret": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeSecret}, - }, - expectedPoints: noPoints, - }, - "trivial - configMap": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeConfigMap}, - }, - expectedPoints: noPoints, - }, - "trivial - emptyDir": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeEmptyDir}, - }, - expectedPoints: noPoints, - }, - "trivial - downwardAPI": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeDownwardAPI}, - }, - expectedPoints: noPoints, - }, - "trivial - projected": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSProjected}, - }, - expectedPoints: noPoints, - }, - "trivial - none": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeNone}, - }, - expectedPoints: noPoints, - }, - "no volumes allowed": { - scc: newSCC(false, false, false), - expectedPoints: noPoints, - }, - "nil volumes": { - scc: nilVolumeSCC, - expectedPoints: noPoints, - }, - } - for k, v := range tests { - actualPoints := volumePointValue(v.scc) - if actualPoints != v.expectedPoints { - t.Errorf("%s expected %d volume score but got %d", k, v.expectedPoints, actualPoints) - } - } -} - -func TestCapabilitiesPointValue(t *testing.T) { - newSCC := func(def []corev1.Capability, allow []corev1.Capability, drop []corev1.Capability) *securityv1.SecurityContextConstraints { - return &securityv1.SecurityContextConstraints{ - DefaultAddCapabilities: def, - AllowedCapabilities: allow, - RequiredDropCapabilities: drop, - } - } - - tests := map[string]struct { - defaultAdd []corev1.Capability - allowed []corev1.Capability - requiredDrop []corev1.Capability - expectedPoints points - }{ - "nothing specified": { - defaultAdd: nil, - allowed: nil, - requiredDrop: nil, - expectedPoints: capDefaultPoints, - }, - "default": { - defaultAdd: []corev1.Capability{"KILL", "MKNOD"}, - allowed: nil, - requiredDrop: nil, - expectedPoints: capDefaultPoints + 2*capAddOnePoints, - }, - "allow": { - defaultAdd: nil, - allowed: []corev1.Capability{"KILL", "MKNOD"}, - requiredDrop: nil, - expectedPoints: capDefaultPoints + 2*capAllowOnePoints, - }, - "allow star": { - defaultAdd: nil, - allowed: []corev1.Capability{"*"}, - requiredDrop: nil, - expectedPoints: capDefaultPoints + capAllowAllPoints, - }, - "allow all": { - defaultAdd: nil, - allowed: []corev1.Capability{"ALL"}, - requiredDrop: nil, - expectedPoints: capDefaultPoints + capAllowAllPoints, - }, - "allow all case": { - defaultAdd: nil, - allowed: []corev1.Capability{"All"}, - requiredDrop: nil, - expectedPoints: capDefaultPoints + capAllowAllPoints, - }, - "drop": { - defaultAdd: nil, - allowed: nil, - requiredDrop: []corev1.Capability{"KILL", "MKNOD"}, - expectedPoints: capDefaultPoints + 2*capDropOnePoints, - }, - "drop all": { - defaultAdd: nil, - allowed: nil, - requiredDrop: []corev1.Capability{"ALL"}, - expectedPoints: capDefaultPoints + capDropAllPoints, - }, - "drop all case": { - defaultAdd: nil, - allowed: nil, - requiredDrop: []corev1.Capability{"all"}, - expectedPoints: capDefaultPoints + capDropAllPoints, - }, - "drop star": { - defaultAdd: nil, - allowed: nil, - requiredDrop: []corev1.Capability{"*"}, - expectedPoints: capDefaultPoints + capDropOnePoints, - }, - "mixture": { - defaultAdd: []corev1.Capability{"SETUID", "SETGID"}, - allowed: []corev1.Capability{"*"}, - requiredDrop: []corev1.Capability{"SYS_CHROOT"}, - expectedPoints: capDefaultPoints + 2*capAddOnePoints + capAllowAllPoints + capDropOnePoints, - }, - } - for k, v := range tests { - scc := newSCC(v.defaultAdd, v.allowed, v.requiredDrop) - actualPoints := capabilitiesPointValue(scc) - if actualPoints != v.expectedPoints { - t.Errorf("%s expected %d capability score but got %d", k, v.expectedPoints, actualPoints) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/util.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/util.go deleted file mode 100644 index 7b711e932..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/util.go +++ /dev/null @@ -1,175 +0,0 @@ -package util - -import ( - "fmt" - - "k8s.io/apimachinery/pkg/util/sets" - api "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -func GetAllFSTypesExcept(exceptions ...string) sets.String { - fstypes := GetAllFSTypesAsSet() - for _, e := range exceptions { - fstypes.Delete(e) - } - return fstypes -} - -func GetAllFSTypesAsSet() sets.String { - fstypes := sets.NewString() - fstypes.Insert( - string(securityv1.FSTypeHostPath), - string(securityv1.FSTypeAzureFile), - string(securityv1.FSTypeFlocker), - string(securityv1.FSTypeFlexVolume), - string(securityv1.FSTypeEmptyDir), - string(securityv1.FSTypeGCEPersistentDisk), - string(securityv1.FSTypeAWSElasticBlockStore), - string(securityv1.FSTypeGitRepo), - string(securityv1.FSTypeSecret), - string(securityv1.FSTypeNFS), - string(securityv1.FSTypeISCSI), - string(securityv1.FSTypeGlusterfs), - string(securityv1.FSTypePersistentVolumeClaim), - string(securityv1.FSTypeRBD), - string(securityv1.FSTypeCinder), - string(securityv1.FSTypeCephFS), - string(securityv1.FSTypeDownwardAPI), - string(securityv1.FSTypeFC), - string(securityv1.FSTypeConfigMap), - string(securityv1.FSTypeVsphereVolume), - string(securityv1.FSTypeQuobyte), - string(securityv1.FSTypeAzureDisk), - string(securityv1.FSTypePhotonPersistentDisk), - string(securityv1.FSProjected), - string(securityv1.FSPortworxVolume), - string(securityv1.FSScaleIO), - string(securityv1.FSStorageOS), - string(securityv1.FSTypeCSI), - ) - return fstypes -} - -// getVolumeFSType gets the FSType for a volume. -func GetVolumeFSType(v api.Volume) (securityv1.FSType, error) { - switch { - case v.HostPath != nil: - return securityv1.FSTypeHostPath, nil - case v.EmptyDir != nil: - return securityv1.FSTypeEmptyDir, nil - case v.GCEPersistentDisk != nil: - return securityv1.FSTypeGCEPersistentDisk, nil - case v.AWSElasticBlockStore != nil: - return securityv1.FSTypeAWSElasticBlockStore, nil - case v.GitRepo != nil: - return securityv1.FSTypeGitRepo, nil - case v.Secret != nil: - return securityv1.FSTypeSecret, nil - case v.NFS != nil: - return securityv1.FSTypeNFS, nil - case v.ISCSI != nil: - return securityv1.FSTypeISCSI, nil - case v.Glusterfs != nil: - return securityv1.FSTypeGlusterfs, nil - case v.PersistentVolumeClaim != nil: - return securityv1.FSTypePersistentVolumeClaim, nil - case v.RBD != nil: - return securityv1.FSTypeRBD, nil - case v.FlexVolume != nil: - return securityv1.FSTypeFlexVolume, nil - case v.Cinder != nil: - return securityv1.FSTypeCinder, nil - case v.CephFS != nil: - return securityv1.FSTypeCephFS, nil - case v.Flocker != nil: - return securityv1.FSTypeFlocker, nil - case v.DownwardAPI != nil: - return securityv1.FSTypeDownwardAPI, nil - case v.FC != nil: - return securityv1.FSTypeFC, nil - case v.AzureFile != nil: - return securityv1.FSTypeAzureFile, nil - case v.ConfigMap != nil: - return securityv1.FSTypeConfigMap, nil - case v.VsphereVolume != nil: - return securityv1.FSTypeVsphereVolume, nil - case v.Quobyte != nil: - return securityv1.FSTypeQuobyte, nil - case v.AzureDisk != nil: - return securityv1.FSTypeAzureDisk, nil - case v.PhotonPersistentDisk != nil: - return securityv1.FSTypePhotonPersistentDisk, nil - case v.Projected != nil: - return securityv1.FSProjected, nil - case v.PortworxVolume != nil: - return securityv1.FSPortworxVolume, nil - case v.ScaleIO != nil: - return securityv1.FSScaleIO, nil - case v.StorageOS != nil: - return securityv1.FSStorageOS, nil - case v.CSI != nil: - return securityv1.FSTypeCSI, nil - } - - return "", fmt.Errorf("unknown volume type for volume: %#v", v) -} - -// fsTypeToStringSet converts an FSType slice to a string set. -func FSTypeToStringSetInternal(fsTypes []securityv1.FSType) sets.String { - set := sets.NewString() - for _, v := range fsTypes { - set.Insert(string(v)) - } - return set -} - -// SCCAllowsAllVolumes checks for FSTypeAll in the scc's allowed volumes. -func SCCAllowsAllVolumes(scc *securityv1.SecurityContextConstraints) bool { - return SCCAllowsFSTypeInternal(scc, securityv1.FSTypeAll) -} - -// SCCAllowsFSTypeInternal is a utility for checking if an SCC allows a particular FSType. -// If all volumes are allowed then this will return true for any FSType passed. -func SCCAllowsFSTypeInternal(scc *securityv1.SecurityContextConstraints, fsType securityv1.FSType) bool { - if scc == nil { - return false - } - - for _, v := range scc.Volumes { - if v == fsType || v == securityv1.FSTypeAll { - return true - } - } - return false -} - -// SCCAllowsFSType is a utility for checking if an SCC allows a particular FSType. -// If all volumes are allowed then this will return true for any FSType passed. -func SCCAllowsFSType(scc *securityv1.SecurityContextConstraints, fsType securityv1.FSType) bool { - if scc == nil { - return false - } - - for _, v := range scc.Volumes { - if v == fsType || v == securityv1.FSTypeAll { - return true - } - } - return false -} - -// EqualStringSlices compares string slices for equality. Slices are equal when -// their sizes and elements on similar positions are equal. -func EqualStringSlices(a, b []string) bool { - if len(a) != len(b) { - return false - } - for i := 0; i < len(a); i++ { - if a[i] != b[i] { - return false - } - } - return true -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/util_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/util_test.go deleted file mode 100644 index 1da9655ed..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/admission/security/securitycontextconstraints/util/util_test.go +++ /dev/null @@ -1,119 +0,0 @@ -package util - -import ( - "reflect" - "testing" - - api "k8s.io/kubernetes/pkg/apis/core" - - securityv1 "github.com/openshift/api/security/v1" -) - -// TestVolumeSourceFSTypeDrift ensures that for every known type of volume source (by the fields on -// a VolumeSource object that GetVolumeFSType is returning a good value. This ensures both that we're -// returning an FSType for the VolumeSource field (protect the GetVolumeFSType method) and that we -// haven't drifted (ensure new fields in VolumeSource are covered). -func TestVolumeSourceFSTypeDrift(t *testing.T) { - allFSTypes := GetAllFSTypesAsSet() - val := reflect.ValueOf(api.VolumeSource{}) - - for i := 0; i < val.NumField(); i++ { - fieldVal := val.Type().Field(i) - - volumeSource := api.VolumeSource{} - volumeSourceVolume := reflect.New(fieldVal.Type.Elem()) - - reflect.ValueOf(&volumeSource).Elem().FieldByName(fieldVal.Name).Set(volumeSourceVolume) - - fsType, err := GetVolumeFSType(api.Volume{VolumeSource: volumeSource}) - if err != nil { - t.Errorf("error getting fstype for field %s. This likely means that drift has occured between FSType and VolumeSource. Please update the api and getVolumeFSType", fieldVal.Name) - } - - if !allFSTypes.Has(string(fsType)) { - t.Errorf("%s was missing from GetFSTypesAsSet", fsType) - } - } -} - -func TestSCCAllowsVolumeType(t *testing.T) { - tests := map[string]struct { - scc *securityv1.SecurityContextConstraints - fsType securityv1.FSType - allows bool - }{ - "nil scc": { - scc: nil, - fsType: securityv1.FSTypeHostPath, - allows: false, - }, - "empty volumes": { - scc: &securityv1.SecurityContextConstraints{}, - fsType: securityv1.FSTypeHostPath, - allows: false, - }, - "non-matching": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeAWSElasticBlockStore}, - }, - fsType: securityv1.FSTypeHostPath, - allows: false, - }, - "match on FSTypeAll": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeAll}, - }, - fsType: securityv1.FSTypeHostPath, - allows: true, - }, - "match on direct match": { - scc: &securityv1.SecurityContextConstraints{ - Volumes: []securityv1.FSType{securityv1.FSTypeHostPath}, - }, - fsType: securityv1.FSTypeHostPath, - allows: true, - }, - } - - for k, v := range tests { - allows := SCCAllowsFSTypeInternal(v.scc, v.fsType) - if v.allows != allows { - t.Errorf("%s expected SCCAllowsFSType to return %t but got %t", k, v.allows, allows) - } - } -} - -func TestEqualStringSlices(t *testing.T) { - tests := map[string]struct { - arg1 []string - arg2 []string - expectedResult bool - }{ - "nil equals to nil": { - arg1: nil, - arg2: nil, - expectedResult: true, - }, - "equal by size": { - arg1: []string{"1", "1"}, - arg2: []string{"1", "1"}, - expectedResult: true, - }, - "not equal by size": { - arg1: []string{"1"}, - arg2: []string{"1", "1"}, - expectedResult: false, - }, - "not equal by elements": { - arg1: []string{"1", "1"}, - arg2: []string{"1", "2"}, - expectedResult: false, - }, - } - - for k, v := range tests { - if result := EqualStringSlices(v.arg1, v.arg2); result != v.expectedResult { - t.Errorf("%s expected to return %t but got %t", k, v.expectedResult, result) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/OWNERS b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/OWNERS deleted file mode 100644 index afce6de41..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/OWNERS +++ /dev/null @@ -1,6 +0,0 @@ -reviewers: - - enj - - ericavonb - - mrogers950 -approvers: - - enj diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/bootstrapauthenticator.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/bootstrapauthenticator.go deleted file mode 100644 index 2a00e4dca..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/bootstrapauthenticator.go +++ /dev/null @@ -1,86 +0,0 @@ -package oauth - -import ( - "context" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - kauthenticator "k8s.io/apiserver/pkg/authentication/authenticator" - kuser "k8s.io/apiserver/pkg/authentication/user" - - authorizationv1 "github.com/openshift/api/authorization/v1" - userv1 "github.com/openshift/api/user/v1" - oauthclient "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" - bootstrap "github.com/openshift/library-go/pkg/authentication/bootstrapauthenticator" -) - -const ClusterAdminGroup = "system:cluster-admins" - -type bootstrapAuthenticator struct { - tokens oauthclient.OAuthAccessTokenInterface - getter bootstrap.BootstrapUserDataGetter - validator OAuthTokenValidator -} - -func NewBootstrapAuthenticator(tokens oauthclient.OAuthAccessTokenInterface, getter bootstrap.BootstrapUserDataGetter, validators ...OAuthTokenValidator) kauthenticator.Token { - return &bootstrapAuthenticator{ - tokens: tokens, - getter: getter, - validator: OAuthTokenValidators(validators), - } -} - -func (a *bootstrapAuthenticator) AuthenticateToken(ctx context.Context, name string) (*kauthenticator.Response, bool, error) { - token, err := a.tokens.Get(name, metav1.GetOptions{}) - if err != nil { - return nil, false, errLookup // mask the error so we do not leak token data in logs - } - - if token.UserName != bootstrap.BootstrapUser { - return nil, false, nil - } - - data, ok, err := a.getter.Get() - if err != nil || !ok { - return nil, ok, err - } - - // this allows us to reuse existing validators - // since the uid is based on the secret, if the secret changes, all - // tokens issued for the bootstrap user before that change stop working - fakeUser := &userv1.User{ - ObjectMeta: metav1.ObjectMeta{ - UID: types.UID(data.UID), - }, - } - - if err := a.validator.Validate(token, fakeUser); err != nil { - return nil, false, err - } - - // we explicitly do not set UID as we do not want to leak any derivative of the password - return &kauthenticator.Response{ - User: &kuser.DefaultInfo{ - Name: bootstrap.BootstrapUser, - // we cannot use SystemPrivilegedGroup because it cannot be properly scoped. - // see openshift/origin#18922 and how loopback connections are handled upstream via AuthorizeClientBearerToken. - // api aggregation with delegated authorization makes this impossible to control, see WithAlwaysAllowGroups. - // an openshift specific cluster role binding binds ClusterAdminGroup to the cluster role cluster-admin. - // thus this group is authorized to do everything via RBAC. - // this does make the bootstrap user susceptible to anything that causes the RBAC authorizer to fail. - // this is a safe trade-off because scopes must always be evaluated before RBAC for them to work at all. - // a failure in that logic means scopes are broken instead of a specific failure related to the bootstrap user. - // if this becomes a problem in the future, we could generate a custom extra value based on the secret content - // and store it in BootstrapUserData, similar to how UID is calculated. this extra value would then be wired - // to a custom authorizer that allows all actions. the problem with such an approach is that since we do not - // allow remote authorizers in OpenShift, the BootstrapUserDataGetter logic would have to be shared between the - // the kube api server and osin instead of being an implementation detail hidden inside of osin. currently the - // only shared code is the value of the BootstrapUser constant (since it is special cased in validation). - Groups: []string{ClusterAdminGroup}, - Extra: map[string][]string{ - // this user still needs scopes because it can be used in OAuth flows (unlike cert based users) - authorizationv1.ScopesKey: token.Scopes, - }, - }, - }, true, nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/expirationvalidator.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/expirationvalidator.go deleted file mode 100644 index 67e2f26e2..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/expirationvalidator.go +++ /dev/null @@ -1,31 +0,0 @@ -package oauth - -import ( - "errors" - "time" - - oauthv1 "github.com/openshift/api/oauth/v1" - userv1 "github.com/openshift/api/user/v1" -) - -var errExpired = errors.New("token is expired") - -func NewExpirationValidator() OAuthTokenValidator { - return OAuthTokenValidatorFunc( - func(token *oauthv1.OAuthAccessToken, _ *userv1.User) error { - if token.ExpiresIn > 0 { - if expire(token).Before(time.Now()) { - return errExpired - } - } - if token.DeletionTimestamp != nil { - return errExpired - } - return nil - }, - ) -} - -func expire(token *oauthv1.OAuthAccessToken) time.Time { - return token.CreationTimestamp.Add(time.Duration(token.ExpiresIn) * time.Second) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/expirationvalidator_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/expirationvalidator_test.go deleted file mode 100644 index a10c0b8d0..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/expirationvalidator_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package oauth - -import ( - "context" - "testing" - "time" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - oauthv1 "github.com/openshift/api/oauth/v1" - userv1 "github.com/openshift/api/user/v1" - oauthfake "github.com/openshift/client-go/oauth/clientset/versioned/fake" - userfake "github.com/openshift/client-go/user/clientset/versioned/fake" -) - -func TestAuthenticateTokenExpired(t *testing.T) { - fakeOAuthClient := oauthfake.NewSimpleClientset( - // expired token that had a lifetime of 10 minutes - &oauthv1.OAuthAccessToken{ - ObjectMeta: metav1.ObjectMeta{Name: "token1", CreationTimestamp: metav1.Time{Time: time.Now().Add(-1 * time.Hour)}}, - ExpiresIn: 600, - UserName: "foo", - }, - // non-expired token that has a lifetime of 10 minutes, but has a non-nil deletion timestamp - &oauthv1.OAuthAccessToken{ - ObjectMeta: metav1.ObjectMeta{Name: "token2", CreationTimestamp: metav1.Time{Time: time.Now()}, DeletionTimestamp: &metav1.Time{}}, - ExpiresIn: 600, - UserName: "foo", - }, - ) - fakeUserClient := userfake.NewSimpleClientset(&userv1.User{ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "bar"}}) - - tokenAuthenticator := NewTokenAuthenticator(fakeOAuthClient.OauthV1().OAuthAccessTokens(), fakeUserClient.UserV1().Users(), NoopGroupMapper{}, NewExpirationValidator()) - - for _, tokenName := range []string{"token1", "token2"} { - userInfo, found, err := tokenAuthenticator.AuthenticateToken(context.TODO(), tokenName) - if found { - t.Error("Found token, but it should be missing!") - } - if err != errExpired { - t.Errorf("Unexpected error: %v", err) - } - if userInfo != nil { - t.Errorf("Unexpected user: %v", userInfo) - } - } -} - -func TestAuthenticateTokenValidated(t *testing.T) { - fakeOAuthClient := oauthfake.NewSimpleClientset( - &oauthv1.OAuthAccessToken{ - ObjectMeta: metav1.ObjectMeta{Name: "token", CreationTimestamp: metav1.Time{Time: time.Now()}}, - ExpiresIn: 600, // 10 minutes - UserName: "foo", - UserUID: string("bar"), - }, - ) - fakeUserClient := userfake.NewSimpleClientset(&userv1.User{ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "bar"}}) - - tokenAuthenticator := NewTokenAuthenticator(fakeOAuthClient.OauthV1().OAuthAccessTokens(), fakeUserClient.UserV1().Users(), NoopGroupMapper{}, NewExpirationValidator(), NewUIDValidator()) - - userInfo, found, err := tokenAuthenticator.AuthenticateToken(context.TODO(), "token") - if !found { - t.Error("Did not find a token!") - } - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - if userInfo == nil { - t.Error("Did not get a user!") - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/interfaces.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/interfaces.go deleted file mode 100644 index 002f30421..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/interfaces.go +++ /dev/null @@ -1,41 +0,0 @@ -package oauth - -import ( - oauthv1 "github.com/openshift/api/oauth/v1" - userv1 "github.com/openshift/api/user/v1" -) - -type OAuthTokenValidator interface { - Validate(token *oauthv1.OAuthAccessToken, user *userv1.User) error -} - -var _ OAuthTokenValidator = OAuthTokenValidatorFunc(nil) - -type OAuthTokenValidatorFunc func(token *oauthv1.OAuthAccessToken, user *userv1.User) error - -func (f OAuthTokenValidatorFunc) Validate(token *oauthv1.OAuthAccessToken, user *userv1.User) error { - return f(token, user) -} - -var _ OAuthTokenValidator = OAuthTokenValidators(nil) - -type OAuthTokenValidators []OAuthTokenValidator - -func (v OAuthTokenValidators) Validate(token *oauthv1.OAuthAccessToken, user *userv1.User) error { - for _, validator := range v { - if err := validator.Validate(token, user); err != nil { - return err - } - } - return nil -} - -type UserToGroupMapper interface { - GroupsFor(username string) ([]*userv1.Group, error) -} - -type NoopGroupMapper struct{} - -func (n NoopGroupMapper) GroupsFor(username string) ([]*userv1.Group, error) { - return []*userv1.Group{}, nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset.go deleted file mode 100644 index 892fede13..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset.go +++ /dev/null @@ -1,162 +0,0 @@ -package rankedset - -import "github.com/google/btree" - -// Item represents a single object in a RankedSet. -type Item interface { - // Key returns the unique identifier for this item. - Key() string - // Rank is used to sort items. - // Items with the same rank are sorted lexicographically based on Key. - Rank() int64 -} - -// RankedSet stores Items based on Key (uniqueness) and Rank (sorting). -type RankedSet struct { - rank *btree.BTree - set map[string]*treeItem -} - -// StringItem implements Item using a string. -// It has two main uses: -// 1. If all items in a RankedSet are StringItems, the set becomes a store of unique strings sorted lexicographically. -// 2. It serves as a Key item that can be passed into methods that ignore Rank such as RankedSet.Delete. -type StringItem string - -func (s StringItem) Key() string { - return string(s) -} - -func (s StringItem) Rank() int64 { - return 0 -} - -func New() *RankedSet { - return &RankedSet{ - rank: btree.New(32), - set: make(map[string]*treeItem), - } -} - -// Insert adds the item into the set. -// If an item with the same Key existed in the set, it is deleted and returned. -func (s *RankedSet) Insert(item Item) Item { - old := s.Delete(item) - - key := item.Key() - value := &treeItem{item: item} - - s.rank.ReplaceOrInsert(value) // should always return nil because we call Delete first - s.set[key] = value - - return old -} - -// Delete removes the item from the set based on Key (Rank is ignored). -// The removed item is returned if it existed in the set. -func (s *RankedSet) Delete(item Item) Item { - key := item.Key() - value, ok := s.set[key] - if !ok { - return nil - } - - s.rank.Delete(value) // should always return the same data as value (non-nil) - delete(s.set, key) - - return value.item -} - -func (s *RankedSet) Min() Item { - if min := s.rank.Min(); min != nil { - return min.(*treeItem).item - } - return nil -} - -func (s *RankedSet) Max() Item { - if max := s.rank.Max(); max != nil { - return max.(*treeItem).item - } - return nil -} - -func (s *RankedSet) Len() int { - return len(s.set) -} - -func (s *RankedSet) Get(item Item) Item { - if value, ok := s.set[item.Key()]; ok { - return value.item - } - return nil -} - -func (s *RankedSet) Has(item Item) bool { - _, ok := s.set[item.Key()] - return ok -} - -// List returns all items in the set in ranked order. -// If delete is set to true, the returned items are removed from the set. -func (s *RankedSet) List(delete bool) []Item { - return s.ascend( - func(item Item) bool { - return true - }, - delete, - ) -} - -// LessThan returns all items less than the given rank in ranked order. -// If delete is set to true, the returned items are removed from the set. -func (s *RankedSet) LessThan(rank int64, delete bool) []Item { - return s.ascend( - func(item Item) bool { - return item.Rank() < rank - }, - delete, - ) -} - -// setItemIterator allows callers of ascend to iterate in-order over the set. -// When this function returns false, iteration will stop. -type setItemIterator func(item Item) bool - -func (s *RankedSet) ascend(iterator setItemIterator, delete bool) []Item { - var items []Item - s.rank.Ascend(func(i btree.Item) bool { - item := i.(*treeItem).item - if !iterator(item) { - return false - } - items = append(items, item) - return true - }) - // delete after Ascend since it is probably not safe to remove while iterating - if delete { - for _, item := range items { - s.Delete(item) - } - } - return items -} - -var _ btree.Item = &treeItem{} - -type treeItem struct { - item Item -} - -func (i *treeItem) Less(than btree.Item) bool { - other := than.(*treeItem).item - - selfRank := i.item.Rank() - otherRank := other.Rank() - - if selfRank == otherRank { - return i.item.Key() < other.Key() - } - - return selfRank < otherRank -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset_test.go deleted file mode 100644 index 92d56dc7a..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/rankedset/rankedset_test.go +++ /dev/null @@ -1,273 +0,0 @@ -package rankedset - -import "testing" - -func TestRankedSet(t *testing.T) { - s := New() - a := newTestSetItem("A", 5, "AD") - b := newTestSetItem("B", 6, "BD") - c := newTestSetItem("C", 4, "CD") - d := newTestSetItem("D", 6, "DD") - e := newTestSetItem("E", 1, "ED") - - for _, tc := range []struct { - name string - f func(*testing.T) - }{ - { - name: "insert", - f: func(t *testing.T) { - assertLen(s, 0, t) - s.Insert(a) - assertLen(s, 1, t) - s.Insert(b) - assertLen(s, 2, t) - s.Insert(c) - assertLen(s, 3, t) - s.Insert(d) - assertLen(s, 4, t) - s.Insert(e) - assertLen(s, 5, t) - }, - }, - { - name: "list order", - f: func(t *testing.T) { - assertOrder(s.List(false), t, e, c, a, b, d) - assertItem(e, s.Min(), t) - assertItem(d, s.Max(), t) - }, - }, - { - name: "delete list order 1", - f: func(t *testing.T) { - assertItem(a, s.Delete(a), t) - assertOrder(s.List(false), t, e, c, b, d) - assertLen(s, 4, t) - assertItem(e, s.Min(), t) - assertItem(d, s.Max(), t) - }, - }, - { - name: "delete list order 2", - f: func(t *testing.T) { - assertItem(b, s.Delete(b), t) - assertOrder(s.List(false), t, e, c, d) - assertLen(s, 3, t) - assertItem(e, s.Min(), t) - assertItem(d, s.Max(), t) - }, - }, - { - name: "has", - f: func(t *testing.T) { - assertHas("A", false, s, t) - assertHas("B", false, s, t) - assertHas("C", true, s, t) - assertHas("D", true, s, t) - assertHas("E", true, s, t) - assertHas("F", false, s, t) - }, - }, - { - name: "get", - f: func(t *testing.T) { - assertItem(nil, s.Get(StringItem("A")), t) - assertItem(nil, s.Get(StringItem("B")), t) - assertItem(c, s.Get(StringItem("C")), t) - assertItem(d, s.Get(StringItem("D")), t) - assertItem(e, s.Get(StringItem("E")), t) - assertItem(nil, s.Get(StringItem("F")), t) - }, - }, - { - name: "delete list order 3", - f: func(t *testing.T) { - assertItem(nil, s.Delete(b), t) - assertOrder(s.List(false), t, e, c, d) - assertLen(s, 3, t) - assertItem(e, s.Min(), t) - assertItem(d, s.Max(), t) - }, - }, - { - name: "delete list order 4", - f: func(t *testing.T) { - assertItem(c, s.Delete(c), t) - assertOrder(s.List(false), t, e, d) - assertLen(s, 2, t) - assertItem(e, s.Min(), t) - assertItem(d, s.Max(), t) - }, - }, - { - name: "insert list order", - f: func(t *testing.T) { - assertItem(nil, s.Insert(a), t) - assertOrder(s.List(false), t, e, a, d) - assertLen(s, 3, t) - assertItem(e, s.Min(), t) - assertItem(d, s.Max(), t) - }, - }, - { - name: "less than order", - f: func(t *testing.T) { - assertOrder(s.LessThan(6, false), t, e, a) - assertLen(s, 3, t) - assertItem(e, s.Min(), t) - assertItem(d, s.Max(), t) - }, - }, - { - name: "less than order delete", - f: func(t *testing.T) { - assertOrder(s.LessThan(6, true), t, e, a) - assertLen(s, 1, t) - assertItem(d, s.Min(), t) - assertItem(d, s.Max(), t) - }, - }, - { - name: "list order delete", - f: func(t *testing.T) { - assertOrder(s.List(true), t, d) - assertLen(s, 0, t) - assertItem(nil, s.Min(), t) - assertItem(nil, s.Max(), t) - }, - }, - { - name: "insert min max", - f: func(t *testing.T) { - assertItem(nil, s.Insert(b), t) - assertItem(nil, s.Insert(a), t) - assertItem(nil, s.Insert(e), t) - assertOrder(s.List(false), t, e, a, b) - assertLen(s, 3, t) - assertItem(e, s.Min(), t) - assertItem(b, s.Max(), t) - assertItem(e, s.Delete(e), t) - assertLen(s, 2, t) - assertItem(a, s.Min(), t) - assertItem(b, s.Max(), t) - }, - }, - { - name: "insert replace", - f: func(t *testing.T) { - a0 := newTestSetItem("A", 1, "AD0") - a1 := newTestSetItem("A", 2, "AD1") - a2 := newTestSetItem("A", 3, "AD2") - - assertItem(nil, s.Insert(e), t) - assertOrder(s.List(false), t, e, a, b) - assertLen(s, 3, t) - assertItem(e, s.Min(), t) - assertItem(b, s.Max(), t) - - assertItem(a, s.Insert(a0), t) - assertOrder(s.List(false), t, a0, e, b) - assertLen(s, 3, t) - assertItem(a0, s.Min(), t) - assertItem(b, s.Max(), t) - - assertItem(a0, s.Insert(a1), t) - assertOrder(s.List(false), t, e, a1, b) - assertLen(s, 3, t) - assertItem(e, s.Min(), t) - assertItem(b, s.Max(), t) - - assertItem(a1, s.Insert(a2), t) - assertOrder(s.List(false), t, e, a2, b) - assertLen(s, 3, t) - assertItem(e, s.Min(), t) - assertItem(b, s.Max(), t) - }, - }, - } { - t.Run(tc.name, tc.f) - } -} - -func assertLen(s *RankedSet, length int, t *testing.T) { - if s.Len() != length { - t.Errorf("%s expected len: %d got %d for %v", t.Name(), length, s.Len(), noPointerItems(s.List(false))) - } -} - -func assertOrder(actual []Item, t *testing.T, items ...*testSetItem) { - if len(items) != len(actual) { - t.Errorf("%s expected len: %d got %d for %v and %v", t.Name(), len(items), len(actual), noPointers(items), noPointerItems(actual)) - return - } - for i, item := range items { - if actualItem := actual[i].(*testSetItem); *item != *actualItem { - t.Errorf("%s expected item: %v got %v for idx %d", t.Name(), *item, *actualItem, i) - } - } -} - -func assertItem(item *testSetItem, actual Item, t *testing.T) { - itemNil := item == nil - actualNil := actual == nil - - if itemNil != actualNil { - t.Errorf("%s expected or actual is nil: %v vs %v", t.Name(), item, actual) - return - } - - if itemNil { - return - } - - if actualItem := actual.(*testSetItem); *item != *actualItem { - t.Errorf("%s expected item: %v got %v", t.Name(), *item, *actualItem) - } -} - -func assertHas(key string, expected bool, s *RankedSet, t *testing.T) { - if expected != s.Has(StringItem(key)) { - t.Errorf("%s expected %v for %s with %v", t.Name(), expected, key, noPointerItems(s.List(false))) - } -} - -func newTestSetItem(key string, rank int64, data string) *testSetItem { - return &testSetItem{ - key: key, - rank: rank, - data: data, - } -} - -type testSetItem struct { - key string - rank int64 - data string -} - -func (i *testSetItem) Key() string { - return i.key -} - -func (i *testSetItem) Rank() int64 { - return i.rank -} - -// funcs below make the printing of these slices better - -func noPointers(items []*testSetItem) []testSetItem { - var out []testSetItem - for _, item := range items { - out = append(out, *item) - } - return out -} - -func noPointerItems(items []Item) []testSetItem { - var out []testSetItem - for _, item := range items { - out = append(out, *(item.(*testSetItem))) - } - return out -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/timeoutvalidator.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/timeoutvalidator.go deleted file mode 100644 index 9489d3cdb..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/timeoutvalidator.go +++ /dev/null @@ -1,232 +0,0 @@ -package oauth - -import ( - "errors" - "time" - - "k8s.io/apimachinery/pkg/util/clock" - "k8s.io/klog" - - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/runtime" - - oauthv1 "github.com/openshift/api/oauth/v1" - userv1 "github.com/openshift/api/user/v1" - oauthclient "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" - oauthclientlister "github.com/openshift/client-go/oauth/listers/oauth/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/rankedset" -) - -var errTimedout = errors.New("token timed out") - -// Implements rankedset.Item -var _ = rankedset.Item(&tokenData{}) - -type tokenData struct { - token *oauthv1.OAuthAccessToken - seen time.Time -} - -func (a *tokenData) timeout() time.Time { - return a.token.CreationTimestamp.Time.Add(time.Duration(a.token.InactivityTimeoutSeconds) * time.Second) -} - -func (a *tokenData) Key() string { - return a.token.Name -} - -func (a *tokenData) Rank() int64 { - return a.timeout().Unix() -} - -func timeoutAsDuration(timeout int32) time.Duration { - return time.Duration(timeout) * time.Second -} - -type TimeoutValidator struct { - oauthClients oauthclientlister.OAuthClientLister - tokens oauthclient.OAuthAccessTokenInterface - tokenChannel chan *tokenData - data *rankedset.RankedSet - defaultTimeout time.Duration - tickerInterval time.Duration - - // fields that are used to have a deterministic order of events in unit tests - flushHandler func(flushHorizon time.Time) // allows us to decorate this func during unit tests - putTokenHandler func(td *tokenData) // allows us to decorate this func during unit tests - clock clock.Clock // allows us to control time during unit tests -} - -func NewTimeoutValidator(tokens oauthclient.OAuthAccessTokenInterface, oauthClients oauthclientlister.OAuthClientLister, defaultTimeout int32, minValidTimeout int32) *TimeoutValidator { - a := &TimeoutValidator{ - oauthClients: oauthClients, - tokens: tokens, - tokenChannel: make(chan *tokenData), - data: rankedset.New(), - defaultTimeout: timeoutAsDuration(defaultTimeout), - tickerInterval: timeoutAsDuration(minValidTimeout / 3), // we tick at least 3 times within each timeout period - clock: clock.RealClock{}, - } - a.flushHandler = a.flush - a.putTokenHandler = a.putToken - klog.V(5).Infof("Token Timeout Validator primed with defaultTimeout=%s tickerInterval=%s", a.defaultTimeout, a.tickerInterval) - return a -} - -// Validate is called with a token when it is seen by an authenticator -// it touches only the tokenChannel so it is safe to call from other threads -func (a *TimeoutValidator) Validate(token *oauthv1.OAuthAccessToken, _ *userv1.User) error { - if token.InactivityTimeoutSeconds == 0 { - // We care only if the token was created with a timeout to start with - return nil - } - - td := &tokenData{ - token: token, - seen: a.clock.Now(), - } - if td.timeout().Before(td.seen) { - return errTimedout - } - - if token.ExpiresIn != 0 && token.ExpiresIn <= int64(token.InactivityTimeoutSeconds) { - // skip if the timeout is already larger than expiration deadline - return nil - } - // After a positive timeout check we need to update the timeout and - // schedule an update so that we can either set or update the Timeout - // we do that launching a micro goroutine to avoid blocking - go a.putTokenHandler(td) - - return nil -} - -func (a *TimeoutValidator) putToken(td *tokenData) { - a.tokenChannel <- td -} - -func (a *TimeoutValidator) clientTimeout(name string) time.Duration { - oauthClient, err := a.oauthClients.Get(name) - if err != nil { - klog.V(5).Infof("Failed to fetch OAuthClient %q for timeout value: %v", name, err) - return a.defaultTimeout - } - if oauthClient.AccessTokenInactivityTimeoutSeconds == nil { - return a.defaultTimeout - } - return timeoutAsDuration(*oauthClient.AccessTokenInactivityTimeoutSeconds) -} - -func (a *TimeoutValidator) update(td *tokenData) error { - // Obtain the timeout interval for this client - delta := a.clientTimeout(td.token.ClientName) - // if delta is 0 it means the OAuthClient has been changed to the - // no-timeout value. In this case we set newTimeout also to 0 so - // that the token will no longer timeout once updated. - newTimeout := int32(0) - if delta > 0 { - // InactivityTimeoutSeconds is the number of seconds since creation: - // InactivityTimeoutSeconds = Seen(Time) - CreationTimestamp(Time) + delta(Duration) - newTimeout = int32((td.seen.Sub(td.token.CreationTimestamp.Time) + delta) / time.Second) - } - // We need to get the token again here because it may have changed in the - // DB and we need to verify it is still worth updating - token, err := a.tokens.Get(td.token.Name, v1.GetOptions{}) - if err != nil { - return err - } - if newTimeout != 0 && token.InactivityTimeoutSeconds >= newTimeout { - // if the token was already updated with a higher or equal timeout we - // do not have anything to do - return nil - } - token.InactivityTimeoutSeconds = newTimeout - _, err = a.tokens.Update(token) - return err -} - -func (a *TimeoutValidator) flush(flushHorizon time.Time) { - // flush all tokens that are about to expire before the flushHorizon. - // Typically the flushHorizon is set to a time slightly past the next - // ticker interval, so that not token ends up timing out between flushes - klog.V(5).Infof("Flushing tokens timing out before %s", flushHorizon) - - // grab all tokens that need to be update in this flush interval - // and remove them from the stored data, they either flush now or never - tokenList := a.data.LessThan(flushHorizon.Unix(), true) - - var retryList []*tokenData - flushedTokens := 0 - - for _, item := range tokenList { - td := item.(*tokenData) - err := a.update(td) - // not logging the full errors here as it would leak the token. - switch { - case err == nil: - flushedTokens++ - case apierrors.IsConflict(err) || apierrors.IsServerTimeout(err): - klog.V(5).Infof("Token update deferred for token belonging to %s", - td.token.UserName) - retryList = append(retryList, td) - default: - klog.V(5).Infof("Token timeout for user=%q client=%q scopes=%v was not updated", - td.token.UserName, td.token.ClientName, td.token.Scopes) - } - } - - // we try once more and if it still fails we stop trying here and defer - // to a future regular update if the token is used again - for _, td := range retryList { - err := a.update(td) - if err != nil { - klog.V(5).Infof("Token timeout for user=%q client=%q scopes=%v was not updated", - td.token.UserName, td.token.ClientName, td.token.Scopes) - } else { - flushedTokens++ - } - } - - klog.V(5).Infof("Successfully flushed %d tokens out of %d", - flushedTokens, len(tokenList)) -} - -func (a *TimeoutValidator) nextTick() time.Time { - // Add a small safety Margin so flushes tend to - // overlap a little rather than have gaps - return a.clock.Now().Add(a.tickerInterval + 10*time.Second) -} - -func (a *TimeoutValidator) Run(stopCh <-chan struct{}) { - defer runtime.HandleCrash() - klog.V(5).Infof("Started Token Timeout Flush Handling thread!") - - ticker := a.clock.NewTicker(a.tickerInterval) - // make sure to kill the ticker when we exit - defer ticker.Stop() - - nextTick := a.nextTick() - - for { - select { - case <-stopCh: - // if channel closes terminate - return - - case td := <-a.tokenChannel: - a.data.Insert(td) - // if this token is going to time out before the timer, flush now - tokenTimeout := td.timeout() - if tokenTimeout.Before(nextTick) { - klog.V(5).Infof("Timeout for user=%q client=%q scopes=%v falls before next ticker (%s < %s), forcing flush!", - td.token.UserName, td.token.ClientName, td.token.Scopes, tokenTimeout, nextTick) - a.flushHandler(nextTick) - } - - case <-ticker.C(): - nextTick = a.nextTick() - a.flushHandler(nextTick) - } - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/tokenauthenticator.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/tokenauthenticator.go deleted file mode 100644 index ac180512f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/tokenauthenticator.go +++ /dev/null @@ -1,68 +0,0 @@ -package oauth - -import ( - "context" - "errors" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - kauthenticator "k8s.io/apiserver/pkg/authentication/authenticator" - kuser "k8s.io/apiserver/pkg/authentication/user" - - authorizationv1 "github.com/openshift/api/authorization/v1" - oauthclient "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" - userclient "github.com/openshift/client-go/user/clientset/versioned/typed/user/v1" -) - -var errLookup = errors.New("token lookup failed") - -type tokenAuthenticator struct { - tokens oauthclient.OAuthAccessTokenInterface - users userclient.UserInterface - groupMapper UserToGroupMapper - validators OAuthTokenValidator -} - -func NewTokenAuthenticator(tokens oauthclient.OAuthAccessTokenInterface, users userclient.UserInterface, groupMapper UserToGroupMapper, validators ...OAuthTokenValidator) kauthenticator.Token { - return &tokenAuthenticator{ - tokens: tokens, - users: users, - groupMapper: groupMapper, - validators: OAuthTokenValidators(validators), - } -} - -func (a *tokenAuthenticator) AuthenticateToken(ctx context.Context, name string) (*kauthenticator.Response, bool, error) { - token, err := a.tokens.Get(name, metav1.GetOptions{}) - if err != nil { - return nil, false, errLookup // mask the error so we do not leak token data in logs - } - - user, err := a.users.Get(token.UserName, metav1.GetOptions{}) - if err != nil { - return nil, false, err - } - - if err := a.validators.Validate(token, user); err != nil { - return nil, false, err - } - - groups, err := a.groupMapper.GroupsFor(user.Name) - if err != nil { - return nil, false, err - } - groupNames := make([]string, 0, len(groups)) - for _, group := range groups { - groupNames = append(groupNames, group.Name) - } - - return &kauthenticator.Response{ - User: &kuser.DefaultInfo{ - Name: user.Name, - UID: string(user.UID), - Groups: groupNames, - Extra: map[string][]string{ - authorizationv1.ScopesKey: token.Scopes, - }, - }, - }, true, nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/tokenauthenticator_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/tokenauthenticator_test.go deleted file mode 100644 index 3d5b8ee4b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/tokenauthenticator_test.go +++ /dev/null @@ -1,354 +0,0 @@ -package oauth - -import ( - "context" - "errors" - "testing" - "time" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/clock" - "k8s.io/apiserver/pkg/authentication/authenticator" - clienttesting "k8s.io/client-go/testing" - - oauthv1 "github.com/openshift/api/oauth/v1" - userv1 "github.com/openshift/api/user/v1" - oauthfake "github.com/openshift/client-go/oauth/clientset/versioned/fake" - oauthclient "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" - userfake "github.com/openshift/client-go/user/clientset/versioned/fake" -) - -func TestAuthenticateTokenInvalidUID(t *testing.T) { - fakeOAuthClient := oauthfake.NewSimpleClientset( - &oauthv1.OAuthAccessToken{ - ObjectMeta: metav1.ObjectMeta{Name: "token", CreationTimestamp: metav1.Time{Time: time.Now()}}, - ExpiresIn: 600, // 10 minutes - UserName: "foo", - UserUID: string("bar1"), - }, - ) - fakeUserClient := userfake.NewSimpleClientset(&userv1.User{ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "bar2"}}) - - tokenAuthenticator := NewTokenAuthenticator(fakeOAuthClient.OauthV1().OAuthAccessTokens(), fakeUserClient.UserV1().Users(), NoopGroupMapper{}, NewUIDValidator()) - - userInfo, found, err := tokenAuthenticator.AuthenticateToken(context.TODO(), "token") - if found { - t.Error("Found token, but it should be missing!") - } - if err.Error() != "user.UID (bar2) does not match token.userUID (bar1)" { - t.Errorf("Unexpected error: %v", err) - } - if userInfo != nil { - t.Errorf("Unexpected user: %v", userInfo) - } -} - -func TestAuthenticateTokenNotFoundSuppressed(t *testing.T) { - fakeOAuthClient := oauthfake.NewSimpleClientset() - fakeUserClient := userfake.NewSimpleClientset() - tokenAuthenticator := NewTokenAuthenticator(fakeOAuthClient.OauthV1().OAuthAccessTokens(), fakeUserClient.UserV1().Users(), NoopGroupMapper{}) - - userInfo, found, err := tokenAuthenticator.AuthenticateToken(context.TODO(), "token") - if found { - t.Error("Found token, but it should be missing!") - } - if err != errLookup { - t.Error("Expected not found error to be suppressed with lookup error") - } - if userInfo != nil { - t.Errorf("Unexpected user: %v", userInfo) - } -} - -func TestAuthenticateTokenOtherGetErrorSuppressed(t *testing.T) { - fakeOAuthClient := oauthfake.NewSimpleClientset() - fakeOAuthClient.PrependReactor("get", "oauthaccesstokens", func(action clienttesting.Action) (handled bool, ret runtime.Object, err error) { - return true, nil, errors.New("get error") - }) - fakeUserClient := userfake.NewSimpleClientset() - tokenAuthenticator := NewTokenAuthenticator(fakeOAuthClient.OauthV1().OAuthAccessTokens(), fakeUserClient.UserV1().Users(), NoopGroupMapper{}) - - userInfo, found, err := tokenAuthenticator.AuthenticateToken(context.TODO(), "token") - if found { - t.Error("Found token, but it should be missing!") - } - if err != errLookup { - t.Error("Expected custom get error to be suppressed with lookup error") - } - if userInfo != nil { - t.Errorf("Unexpected user: %v", userInfo) - } -} - -func TestAuthenticateTokenTimeout(t *testing.T) { - stopCh := make(chan struct{}) - defer close(stopCh) - - testClock := clock.NewFakeClock(time.Time{}) - - defaultTimeout := int32(30) // 30 seconds - clientTimeout := int32(15) // 15 seconds - minTimeout := int32(10) // 10 seconds -> 10/3 = a tick per 3 seconds - - testClient := oauthv1.OAuthClient{ - ObjectMeta: metav1.ObjectMeta{Name: "testClient"}, - AccessTokenInactivityTimeoutSeconds: &clientTimeout, - } - quickClient := oauthv1.OAuthClient{ - ObjectMeta: metav1.ObjectMeta{Name: "quickClient"}, - AccessTokenInactivityTimeoutSeconds: &minTimeout, - } - slowClient := oauthv1.OAuthClient{ - ObjectMeta: metav1.ObjectMeta{Name: "slowClient"}, - } - testToken := oauthv1.OAuthAccessToken{ - ObjectMeta: metav1.ObjectMeta{Name: "testToken", CreationTimestamp: metav1.Time{Time: testClock.Now()}}, - ClientName: "testClient", - ExpiresIn: 600, // 10 minutes - UserName: "foo", - UserUID: string("bar"), - InactivityTimeoutSeconds: clientTimeout, - } - quickToken := oauthv1.OAuthAccessToken{ - ObjectMeta: metav1.ObjectMeta{Name: "quickToken", CreationTimestamp: metav1.Time{Time: testClock.Now()}}, - ClientName: "quickClient", - ExpiresIn: 600, // 10 minutes - UserName: "foo", - UserUID: string("bar"), - InactivityTimeoutSeconds: minTimeout, - } - slowToken := oauthv1.OAuthAccessToken{ - ObjectMeta: metav1.ObjectMeta{Name: "slowToken", CreationTimestamp: metav1.Time{Time: testClock.Now()}}, - ClientName: "slowClient", - ExpiresIn: 600, // 10 minutes - UserName: "foo", - UserUID: string("bar"), - InactivityTimeoutSeconds: defaultTimeout, - } - emergToken := oauthv1.OAuthAccessToken{ - ObjectMeta: metav1.ObjectMeta{Name: "emergToken", CreationTimestamp: metav1.Time{Time: testClock.Now()}}, - ClientName: "quickClient", - ExpiresIn: 600, // 10 minutes - UserName: "foo", - UserUID: string("bar"), - InactivityTimeoutSeconds: 5, // super short timeout - } - fakeOAuthClient := oauthfake.NewSimpleClientset(&testToken, &quickToken, &slowToken, &emergToken, &testClient, &quickClient, &slowClient) - fakeUserClient := userfake.NewSimpleClientset(&userv1.User{ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "bar"}}) - accessTokenGetter := fakeOAuthClient.OauthV1().OAuthAccessTokens() - oauthClients := fakeOAuthClient.OauthV1().OAuthClients() - lister := &fakeOAuthClientLister{ - clients: oauthClients, - } - - timeouts := NewTimeoutValidator(accessTokenGetter, lister, defaultTimeout, minTimeout) - - // inject fake clock, which has some interesting properties - // 1. A sleep will cause at most one ticker event, regardless of how long the sleep was - // 2. The clock will hold one tick event and will drop the next one if something does not consume it first - timeouts.clock = testClock - - // decorate flush - // The fake clock 1. and 2. require that we issue a wait(t, timeoutsSync) after each testClock.Sleep that causes a tick - originalFlush := timeouts.flushHandler - timeoutsSync := make(chan struct{}) - timeouts.flushHandler = func(flushHorizon time.Time) { - originalFlush(flushHorizon) - timeoutsSync <- struct{}{} // signal that flush is complete so we never race against it - } - - // decorate putToken - // We must issue a wait(t, putTokenSync) after each call to checkToken that should be successful - originalPutToken := timeouts.putTokenHandler - putTokenSync := make(chan struct{}) - timeouts.putTokenHandler = func(td *tokenData) { - originalPutToken(td) - putTokenSync <- struct{}{} // signal that putToken is complete so we never race against it - } - - // add some padding to all sleep invocations to make sure we are not failing on any boundary values - buffer := time.Nanosecond - - tokenAuthenticator := NewTokenAuthenticator(accessTokenGetter, fakeUserClient.UserV1().Users(), NoopGroupMapper{}, timeouts) - - go timeouts.Run(stopCh) - - // TIME: 0 seconds have passed here - - // first time should succeed for all - checkToken(t, "testToken", tokenAuthenticator, accessTokenGetter, testClock, true) - wait(t, putTokenSync) - - checkToken(t, "quickToken", tokenAuthenticator, accessTokenGetter, testClock, true) - wait(t, putTokenSync) - - wait(t, timeoutsSync) // from emergency flush because quickToken has a short enough timeout - - checkToken(t, "slowToken", tokenAuthenticator, accessTokenGetter, testClock, true) - wait(t, putTokenSync) - - // this should cause an emergency flush, if not the next auth will fail, - // as the token will be timed out - checkToken(t, "emergToken", tokenAuthenticator, accessTokenGetter, testClock, true) - wait(t, putTokenSync) - - wait(t, timeoutsSync) // from emergency flush because emergToken has a super short timeout - - // wait 6 seconds - testClock.Sleep(5*time.Second + buffer) - - // a tick happens every 3 seconds - wait(t, timeoutsSync) - - // TIME: 6th second - - // See if emergency flush happened - checkToken(t, "emergToken", tokenAuthenticator, accessTokenGetter, testClock, true) - wait(t, putTokenSync) - - wait(t, timeoutsSync) // from emergency flush because emergToken has a super short timeout - - // wait for timeout (minTimeout + 1 - the previously waited 6 seconds) - testClock.Sleep(time.Duration(minTimeout-5)*time.Second + buffer) - wait(t, timeoutsSync) - - // TIME: 11th second - - // now we change the testClient and see if the testToken will still be - // valid instead of timing out - changeClient, ret := oauthClients.Get("testClient", metav1.GetOptions{}) - if ret != nil { - t.Error("Failed to get testClient") - } else { - longTimeout := int32(20) - changeClient.AccessTokenInactivityTimeoutSeconds = &longTimeout - _, ret = oauthClients.Update(changeClient) - if ret != nil { - t.Error("Failed to update testClient") - } - } - - // this should fail, thus no call to wait(t, putTokenSync) - checkToken(t, "quickToken", tokenAuthenticator, accessTokenGetter, testClock, false) - - // while this should get updated - checkToken(t, "testToken", tokenAuthenticator, accessTokenGetter, testClock, true) - wait(t, putTokenSync) - - wait(t, timeoutsSync) - - // wait for timeout - testClock.Sleep(time.Duration(clientTimeout+1)*time.Second + buffer) - - // 16 seconds equals 5 more flushes, but the fake clock will only tick once during this time - wait(t, timeoutsSync) - - // TIME: 27th second - - // this should get updated - checkToken(t, "slowToken", tokenAuthenticator, accessTokenGetter, testClock, true) - wait(t, putTokenSync) - - wait(t, timeoutsSync) - - // while this should not fail - checkToken(t, "testToken", tokenAuthenticator, accessTokenGetter, testClock, true) - wait(t, putTokenSync) - - wait(t, timeoutsSync) - // and should be updated to last at least till the 31st second - token, err := accessTokenGetter.Get("testToken", metav1.GetOptions{}) - if err != nil { - t.Error("Failed to get testToken") - } else { - if token.InactivityTimeoutSeconds < 31 { - t.Errorf("Expected timeout in more than 31 seconds, found: %d", token.InactivityTimeoutSeconds) - } - } - - //now change testClient again, so that tokens do not expire anymore - changeclient, ret := oauthClients.Get("testClient", metav1.GetOptions{}) - if ret != nil { - t.Error("Failed to get testClient") - } else { - changeclient.AccessTokenInactivityTimeoutSeconds = new(int32) - _, ret = oauthClients.Update(changeclient) - if ret != nil { - t.Error("Failed to update testClient") - } - } - - // and wait until test token should time out, and has been flushed for sure - testClock.Sleep(time.Duration(minTimeout)*time.Second + buffer) - wait(t, timeoutsSync) - - // while this should not fail - checkToken(t, "testToken", tokenAuthenticator, accessTokenGetter, testClock, true) - wait(t, putTokenSync) - - wait(t, timeoutsSync) - - // and should be updated to have a ZERO timeout - token, err = accessTokenGetter.Get("testToken", metav1.GetOptions{}) - if err != nil { - t.Error("Failed to get testToken") - } else { - if token.InactivityTimeoutSeconds != 0 { - t.Errorf("Expected timeout of 0 seconds, found: %d", token.InactivityTimeoutSeconds) - } - } -} - -type fakeOAuthClientLister struct { - clients oauthclient.OAuthClientInterface -} - -func (f fakeOAuthClientLister) Get(name string) (*oauthv1.OAuthClient, error) { - return f.clients.Get(name, metav1.GetOptions{}) -} - -func (f fakeOAuthClientLister) List(selector labels.Selector) ([]*oauthv1.OAuthClient, error) { - panic("not used") -} - -func checkToken(t *testing.T, name string, authf authenticator.Token, tokens oauthclient.OAuthAccessTokenInterface, current clock.Clock, present bool) { - t.Helper() - userInfo, found, err := authf.AuthenticateToken(context.TODO(), name) - if present { - if !found { - t.Errorf("Did not find token %s!", name) - } - if err != nil { - t.Errorf("Unexpected error checking for token %s: %v", name, err) - } - if userInfo == nil { - t.Errorf("Did not get a user for token %s!", name) - } - } else { - if found { - token, tokenErr := tokens.Get(name, metav1.GetOptions{}) - if tokenErr != nil { - t.Fatal(tokenErr) - } - t.Errorf("Found token (created=%s, timeout=%di, now=%s), but it should be gone!", - token.CreationTimestamp, token.InactivityTimeoutSeconds, current.Now()) - } - if err != errTimedout { - t.Errorf("Unexpected error checking absence of token %s: %v", name, err) - } - if userInfo != nil { - t.Errorf("Unexpected user checking absence of token %s: %v", name, userInfo) - } - } -} - -func wait(t *testing.T, c chan struct{}) { - t.Helper() - select { - case <-c: - case <-time.After(30 * time.Second): - t.Fatal("failed to see channel event") - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/uidvalidator.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/uidvalidator.go deleted file mode 100644 index a6029e5d5..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth/uidvalidator.go +++ /dev/null @@ -1,21 +0,0 @@ -package oauth - -import ( - "fmt" - - oauthv1 "github.com/openshift/api/oauth/v1" - userv1 "github.com/openshift/api/user/v1" -) - -const errInvalidUIDStr = "user.UID (%s) does not match token.userUID (%s)" - -func NewUIDValidator() OAuthTokenValidator { - return OAuthTokenValidatorFunc( - func(token *oauthv1.OAuthAccessToken, user *userv1.User) error { - if string(user.UID) != token.UserUID { - return fmt.Errorf(errInvalidUIDStr, user.UID, token.UserUID) - } - return nil - }, - ) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/browsersafe/authorizer.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/browsersafe/authorizer.go deleted file mode 100644 index 657c9c701..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/browsersafe/authorizer.go +++ /dev/null @@ -1,106 +0,0 @@ -package browsersafe - -import ( - "fmt" - - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apiserver/pkg/authorization/authorizer" -) - -const ( - proxyAction = "proxy" - unsafeProxy = "unsafeproxy" -) - -type browserSafeAuthorizer struct { - delegate authorizer.Authorizer - - // list of groups, any of which indicate the request is authenticated - authenticatedGroups sets.String -} - -func NewBrowserSafeAuthorizer(delegate authorizer.Authorizer, authenticatedGroups ...string) authorizer.Authorizer { - return &browserSafeAuthorizer{ - delegate: delegate, - authenticatedGroups: sets.NewString(authenticatedGroups...), - } -} - -func (a *browserSafeAuthorizer) Authorize(attributes authorizer.Attributes) (authorizer.Decision, string, error) { - attrs := a.getBrowserSafeAttributes(attributes) - decision, reason, err := a.delegate.Authorize(attrs) - safeAttributes, changed := attrs.(*browserSafeAttributes) - - // check if the request was not allowed and we changed the attributes - if decision == authorizer.DecisionAllow || !changed { - return decision, reason, err - } - - // if so, use this information to update the reason - return decision, safeAttributes.reason(reason), err -} - -func (a *browserSafeAuthorizer) getBrowserSafeAttributes(attributes authorizer.Attributes) authorizer.Attributes { - if !attributes.IsResourceRequest() { - return attributes - } - - isProxyVerb := attributes.GetVerb() == proxyAction - isProxySubresource := attributes.GetSubresource() == proxyAction - - if !isProxyVerb && !isProxySubresource { - // Requests to non-proxy resources don't expose HTML or HTTP-handling user content to browsers - return attributes - } - - if user := attributes.GetUser(); user != nil { - if a.authenticatedGroups.HasAny(user.GetGroups()...) { - // An authenticated request indicates this isn't a browser page load. - // Browsers cannot make direct authenticated requests. - // This depends on the API not enabling basic or cookie-based auth. - return attributes - } - } - - return &browserSafeAttributes{ - Attributes: attributes, - isProxyVerb: isProxyVerb, - isProxySubresource: isProxySubresource, - } -} - -type browserSafeAttributes struct { - authorizer.Attributes - - isProxyVerb, isProxySubresource bool -} - -func (b *browserSafeAttributes) GetVerb() string { - if b.isProxyVerb { - return unsafeProxy - } - return b.Attributes.GetVerb() -} - -func (b *browserSafeAttributes) GetSubresource() string { - if b.isProxySubresource { - return unsafeProxy - } - return b.Attributes.GetSubresource() -} - -func (b *browserSafeAttributes) reason(reason string) string { - if b.isProxyVerb { - if len(reason) != 0 { - reason += ", " - } - reason += fmt.Sprintf("%s verb changed to %s", proxyAction, unsafeProxy) - } - if b.isProxySubresource { - if len(reason) != 0 { - reason += ", " - } - reason += fmt.Sprintf("%s subresource changed to %s", proxyAction, unsafeProxy) - } - return reason -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/browsersafe/authorizer_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/browsersafe/authorizer_test.go deleted file mode 100644 index 57921d081..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/browsersafe/authorizer_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package browsersafe - -import ( - "testing" - - "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/apiserver/pkg/authorization/authorizer" -) - -func TestBrowserSafeAuthorizer(t *testing.T) { - for name, tc := range map[string]struct { - attributes authorizer.Attributes - - expectedVerb string - expectedSubresource string - expectedReason string - }{ - "non-resource": { - attributes: authorizer.AttributesRecord{ResourceRequest: false, Verb: "GET"}, - expectedVerb: "GET", - }, - - "non-proxy": { - attributes: authorizer.AttributesRecord{ResourceRequest: true, Verb: "get", Resource: "pods", Subresource: "logs"}, - expectedVerb: "get", - expectedSubresource: "logs", - }, - - "unsafe proxy subresource": { - attributes: authorizer.AttributesRecord{ResourceRequest: true, Verb: "get", Resource: "pods", Subresource: "proxy"}, - expectedVerb: "get", - expectedSubresource: "unsafeproxy", - expectedReason: "proxy subresource changed to unsafeproxy", - }, - "unsafe proxy verb": { - attributes: authorizer.AttributesRecord{ResourceRequest: true, Verb: "proxy", Resource: "nodes"}, - expectedVerb: "unsafeproxy", - expectedReason: "proxy verb changed to unsafeproxy", - }, - "unsafe proxy verb anonymous": { - attributes: authorizer.AttributesRecord{ResourceRequest: true, Verb: "proxy", Resource: "nodes", - User: &user.DefaultInfo{Name: "system:anonymous", Groups: []string{"system:unauthenticated"}}}, - expectedVerb: "unsafeproxy", - expectedReason: "proxy verb changed to unsafeproxy", - }, - - "proxy subresource authenticated": { - attributes: authorizer.AttributesRecord{ResourceRequest: true, Verb: "get", Resource: "pods", Subresource: "proxy", - User: &user.DefaultInfo{Name: "bob", Groups: []string{"system:authenticated"}}}, - expectedVerb: "get", - expectedSubresource: "proxy", - }, - } { - delegateAuthorizer := &recordingAuthorizer{} - safeAuthorizer := NewBrowserSafeAuthorizer(delegateAuthorizer, "system:authenticated") - - authorized, reason, err := safeAuthorizer.Authorize(tc.attributes) - if authorized == authorizer.DecisionAllow || reason != tc.expectedReason || err != nil { - t.Errorf("%s: unexpected output: %v %s %v", name, authorized, reason, err) - continue - } - - if delegateAuthorizer.attributes.GetVerb() != tc.expectedVerb { - t.Errorf("%s: expected verb %s, got %s", name, tc.expectedVerb, delegateAuthorizer.attributes.GetVerb()) - } - if delegateAuthorizer.attributes.GetSubresource() != tc.expectedSubresource { - t.Errorf("%s: expected verb %s, got %s", name, tc.expectedSubresource, delegateAuthorizer.attributes.GetSubresource()) - } - } -} - -type recordingAuthorizer struct { - attributes authorizer.Attributes -} - -func (t *recordingAuthorizer) Authorize(a authorizer.Attributes) (authorized authorizer.Decision, reason string, err error) { - t.attributes = a - return authorizer.DecisionNoOpinion, "", nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scope/converter.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scope/converter.go deleted file mode 100644 index ed6ff9263..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scope/converter.go +++ /dev/null @@ -1,405 +0,0 @@ -package scope - -import ( - "fmt" - - rbacv1 "k8s.io/api/rbac/v1" - kapierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime/schema" - kutilerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/apimachinery/pkg/util/sets" - kauthorizer "k8s.io/apiserver/pkg/authorization/authorizer" - rbaclisters "k8s.io/client-go/listers/rbac/v1" - rbacv1helpers "k8s.io/kubernetes/pkg/apis/rbac/v1" - authorizerrbac "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac" - - scopemetadata "github.com/openshift/library-go/pkg/authorization/scopemetadata" -) - -const ( - scopesAllNamespaces = "*" - - legacyGroupName = "" - coreGroupName = "" - kubeAuthorizationGroupName = "authorization.k8s.io" - openshiftAuthorizationGroupName = "authorization.openshift.io" - imageGroupName = "image.openshift.io" - oauthGroupName = "oauth.openshift.io" - projectGroupName = "project.openshift.io" - userGroupName = "user.openshift.io" -) - -// scopeDiscoveryRule is a rule that allows a client to discover the API resources available on this server -var scopeDiscoveryRule = rbacv1.PolicyRule{ - Verbs: []string{"get"}, - NonResourceURLs: []string{ - // Server version checking - "/version", "/version/*", - - // API discovery/negotiation - "/api", "/api/*", - "/apis", "/apis/*", - "/oapi", "/oapi/*", - "/openapi/v2", - "/swaggerapi", "/swaggerapi/*", "/swagger.json", "/swagger-2.0.0.pb-v1", - "/osapi", "/osapi/", // these cannot be removed until we can drop support for pre 3.1 clients - "/.well-known", "/.well-known/*", - - // we intentionally allow all to here - "/", - }, -} - -// ScopesToRules takes the scopes and return the rules back. We ALWAYS add the discovery rules and it is possible to get some rules and and -// an error since errors aren't fatal to evaluation -func ScopesToRules(scopes []string, namespace string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]rbacv1.PolicyRule, error) { - rules := append([]rbacv1.PolicyRule{}, scopeDiscoveryRule) - - errors := []error{} - for _, scope := range scopes { - found := false - - for _, evaluator := range ScopeEvaluators { - if evaluator.Handles(scope) { - found = true - currRules, err := evaluator.ResolveRules(scope, namespace, clusterRoleGetter) - if err != nil { - errors = append(errors, err) - continue - } - - rules = append(rules, currRules...) - } - } - - if !found { - errors = append(errors, fmt.Errorf("no scope evaluator found for %q", scope)) - } - } - - return rules, kutilerrors.NewAggregate(errors) -} - -// ScopesToVisibleNamespaces returns a list of namespaces that the provided scopes have "get" access to. -// This exists only to support efficiently list/watch of projects (ACLed namespaces) -func ScopesToVisibleNamespaces(scopes []string, clusterRoleGetter rbaclisters.ClusterRoleLister, ignoreUnhandledScopes bool) (sets.String, error) { - if len(scopes) == 0 { - return sets.NewString("*"), nil - } - - visibleNamespaces := sets.String{} - - errors := []error{} - for _, scope := range scopes { - found := false - - for _, evaluator := range ScopeEvaluators { - if evaluator.Handles(scope) { - found = true - allowedNamespaces, err := evaluator.ResolveGettableNamespaces(scope, clusterRoleGetter) - if err != nil { - errors = append(errors, err) - continue - } - - visibleNamespaces.Insert(allowedNamespaces...) - break - } - } - - if !found && !ignoreUnhandledScopes { - errors = append(errors, fmt.Errorf("no scope evaluator found for %q", scope)) - } - } - - return visibleNamespaces, kutilerrors.NewAggregate(errors) -} - -const ( - UserIndicator = "user:" - ClusterRoleIndicator = "role:" -) - -// ScopeEvaluator takes a scope and returns the rules that express it -type ScopeEvaluator interface { - // Handles returns true if this evaluator can evaluate this scope - Handles(scope string) bool - // Validate returns an error if the scope is malformed - Validate(scope string) error - // Describe returns a description, warning (typically used to warn about escalation dangers), or an error if the scope is malformed - Describe(scope string) (description string, warning string, err error) - // ResolveRules returns the policy rules that this scope allows - ResolveRules(scope, namespace string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]rbacv1.PolicyRule, error) - ResolveGettableNamespaces(scope string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]string, error) -} - -// ScopeEvaluators map prefixes to a function that handles that prefix -var ScopeEvaluators = []ScopeEvaluator{ - userEvaluator{}, - clusterRoleEvaluator{}, -} - -// scopes are in the format -// -// we have the following formats: -// user: -// role:: -// TODO -// cluster:: -// namespace::: - -const ( - UserInfo = UserIndicator + "info" - UserAccessCheck = UserIndicator + "check-access" - - // UserListScopedProjects gives explicit permission to see the projects that this token can see. - UserListScopedProjects = UserIndicator + "list-scoped-projects" - - // UserListAllProjects gives explicit permission to see the projects a user can see. This is often used to prime secondary ACL systems - // unrelated to openshift and to display projects for selection in a secondary UI. - UserListAllProjects = UserIndicator + "list-projects" - - // UserFull includes all permissions of the user - UserFull = UserIndicator + "full" -) - -var defaultSupportedScopesMap = map[string]string{ - UserInfo: "Read-only access to your user information (including username, identities, and group membership)", - UserAccessCheck: `Read-only access to view your privileges (for example, "can I create builds?")`, - UserListScopedProjects: `Read-only access to list your projects viewable with this token and view their metadata (display name, description, etc.)`, - UserListAllProjects: `Read-only access to list your projects and view their metadata (display name, description, etc.)`, - UserFull: `Full read/write access with all of your permissions`, -} - -func DefaultSupportedScopes() []string { - return sets.StringKeySet(defaultSupportedScopesMap).List() -} - -func DescribeScopes(scopes []string) map[string]string { - ret := map[string]string{} - for _, s := range scopes { - val, ok := defaultSupportedScopesMap[s] - if ok { - ret[s] = val - } else { - ret[s] = "" - } - } - return ret -} - -// user: -type userEvaluator struct { - scopemetadata.UserEvaluator -} - -func (userEvaluator) ResolveRules(scope, namespace string, _ rbaclisters.ClusterRoleLister) ([]rbacv1.PolicyRule, error) { - switch scope { - case UserInfo: - return []rbacv1.PolicyRule{ - rbacv1helpers.NewRule("get"). - Groups(userGroupName, legacyGroupName). - Resources("users"). - Names("~"). - RuleOrDie(), - }, nil - case UserAccessCheck: - return []rbacv1.PolicyRule{ - rbacv1helpers.NewRule("create"). - Groups(kubeAuthorizationGroupName). - Resources("selfsubjectaccessreviews"). - RuleOrDie(), - rbacv1helpers.NewRule("create"). - Groups(openshiftAuthorizationGroupName, legacyGroupName). - Resources("selfsubjectrulesreviews"). - RuleOrDie(), - }, nil - case UserListScopedProjects: - return []rbacv1.PolicyRule{ - rbacv1helpers.NewRule("list", "watch"). - Groups(projectGroupName, legacyGroupName). - Resources("projects"). - RuleOrDie(), - }, nil - case UserListAllProjects: - return []rbacv1.PolicyRule{ - rbacv1helpers.NewRule("list", "watch"). - Groups(projectGroupName, legacyGroupName). - Resources("projects"). - RuleOrDie(), - rbacv1helpers.NewRule("get"). - Groups(coreGroupName). - Resources("namespaces"). - RuleOrDie(), - }, nil - case UserFull: - return []rbacv1.PolicyRule{ - rbacv1helpers.NewRule(rbacv1.VerbAll). - Groups(rbacv1.APIGroupAll). - Resources(rbacv1.ResourceAll). - RuleOrDie(), - rbacv1helpers.NewRule(rbacv1.VerbAll). - URLs(rbacv1.NonResourceAll). - RuleOrDie(), - }, nil - default: - return nil, fmt.Errorf("unrecognized scope: %v", scope) - } -} - -func (userEvaluator) ResolveGettableNamespaces(scope string, _ rbaclisters.ClusterRoleLister) ([]string, error) { - switch scope { - case UserFull, UserListAllProjects: - return []string{"*"}, nil - default: - return []string{}, nil - } -} - -// escalatingScopeResources are resources that are considered escalating for scope evaluation -var escalatingScopeResources = []schema.GroupResource{ - {Group: coreGroupName, Resource: "secrets"}, - {Group: imageGroupName, Resource: "imagestreams/secrets"}, - {Group: oauthGroupName, Resource: "oauthauthorizetokens"}, - {Group: oauthGroupName, Resource: "oauthaccesstokens"}, - {Group: openshiftAuthorizationGroupName, Resource: "roles"}, - {Group: openshiftAuthorizationGroupName, Resource: "rolebindings"}, - {Group: openshiftAuthorizationGroupName, Resource: "clusterroles"}, - {Group: openshiftAuthorizationGroupName, Resource: "clusterrolebindings"}, - - {Group: legacyGroupName, Resource: "imagestreams/secrets"}, - {Group: legacyGroupName, Resource: "oauthauthorizetokens"}, - {Group: legacyGroupName, Resource: "oauthaccesstokens"}, - {Group: legacyGroupName, Resource: "roles"}, - {Group: legacyGroupName, Resource: "rolebindings"}, - {Group: legacyGroupName, Resource: "clusterroles"}, - {Group: legacyGroupName, Resource: "clusterrolebindings"}, -} - -// role:: -type clusterRoleEvaluator struct { - scopemetadata.ClusterRoleEvaluator -} - -var clusterRoleEvaluatorInstance = clusterRoleEvaluator{} - -func (e clusterRoleEvaluator) ResolveRules(scope, namespace string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]rbacv1.PolicyRule, error) { - _, scopeNamespace, _, err := scopemetadata.ClusterRoleEvaluatorParseScope(scope) - if err != nil { - return nil, err - } - - // if the scope limit on the clusterrole doesn't match, then don't add any rules, but its not an error - if !(scopeNamespace == scopesAllNamespaces || scopeNamespace == namespace) { - return []rbacv1.PolicyRule{}, nil - } - - return e.resolveRules(scope, clusterRoleGetter) -} - -func has(set []string, value string) bool { - for _, element := range set { - if value == element { - return true - } - } - return false -} - -// resolveRules doesn't enforce namespace checks -func (e clusterRoleEvaluator) resolveRules(scope string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]rbacv1.PolicyRule, error) { - roleName, _, escalating, err := scopemetadata.ClusterRoleEvaluatorParseScope(scope) - if err != nil { - return nil, err - } - - role, err := clusterRoleGetter.Get(roleName) - if err != nil { - if kapierrors.IsNotFound(err) { - return []rbacv1.PolicyRule{}, nil - } - return nil, err - } - - rules := []rbacv1.PolicyRule{} - for _, rule := range role.Rules { - if escalating { - rules = append(rules, rule) - continue - } - - // rules with unbounded access shouldn't be allowed in scopes. - if has(rule.Verbs, rbacv1.VerbAll) || - has(rule.Resources, rbacv1.ResourceAll) || - has(rule.APIGroups, rbacv1.APIGroupAll) { - continue - } - // rules that allow escalating resource access should be cleaned. - safeRule := removeEscalatingResources(rule) - rules = append(rules, safeRule) - } - - return rules, nil -} - -func (e clusterRoleEvaluator) ResolveGettableNamespaces(scope string, clusterRoleGetter rbaclisters.ClusterRoleLister) ([]string, error) { - _, scopeNamespace, _, err := scopemetadata.ClusterRoleEvaluatorParseScope(scope) - if err != nil { - return nil, err - } - rules, err := e.resolveRules(scope, clusterRoleGetter) - if err != nil { - return nil, err - } - - attributes := kauthorizer.AttributesRecord{ - APIGroup: coreGroupName, - Verb: "get", - Resource: "namespaces", - ResourceRequest: true, - } - - if authorizerrbac.RulesAllow(attributes, rules...) { - return []string{scopeNamespace}, nil - } - - return []string{}, nil -} - -func remove(array []string, item string) []string { - newar := array[:0] - for _, element := range array { - if element != item { - newar = append(newar, element) - } - } - return newar -} - -// removeEscalatingResources inspects a PolicyRule and removes any references to escalating resources. -// It has coarse logic for now. It is possible to rewrite one rule into many for the finest grain control -// but removing the entire matching resource regardless of verb or secondary group is cheaper, easier, and errs on the side removing -// too much, not too little -func removeEscalatingResources(in rbacv1.PolicyRule) rbacv1.PolicyRule { - var ruleCopy *rbacv1.PolicyRule - - for _, resource := range escalatingScopeResources { - if !(has(in.APIGroups, resource.Group) && has(in.Resources, resource.Resource)) { - continue - } - - if ruleCopy == nil { - // we're using a cache of cache of an object that uses pointers to data. I'm pretty sure we need to do a copy to avoid - // muddying the cache - ruleCopy = in.DeepCopy() - } - - ruleCopy.Resources = remove(ruleCopy.Resources, resource.Resource) - } - - if ruleCopy != nil { - return *ruleCopy - } - - return in -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scope/converter_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scope/converter_test.go deleted file mode 100644 index fbb474d7f..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scope/converter_test.go +++ /dev/null @@ -1,304 +0,0 @@ -package scope - -import ( - "fmt" - "reflect" - "strings" - "testing" - - rbacv1 "k8s.io/api/rbac/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" -) - -func TestUserEvaluator(t *testing.T) { - testCases := []struct { - name string - scopes []string - err string - numRules int - }{ - { - name: "missing-part", - scopes: []string{UserIndicator}, - err: "no scope evaluator found", - numRules: 1, // we always add the discovery rules - }, - { - name: "bad-part", - scopes: []string{UserIndicator + "foo"}, - err: "no scope evaluator found", - numRules: 1, // we always add the discovery rules - }, - { - name: "info", - scopes: []string{UserInfo}, - numRules: 2, - }, - { - name: "one-error", - scopes: []string{UserIndicator, UserInfo}, - err: "no scope evaluator found", - numRules: 2, - }, - { - name: "access", - scopes: []string{UserAccessCheck}, - numRules: 3, - }, - { - name: "both", - scopes: []string{UserInfo, UserAccessCheck}, - numRules: 4, - }, - { - name: "list--scoped-projects", - scopes: []string{UserListScopedProjects}, - numRules: 2, - }, - } - - for _, tc := range testCases { - actualRules, actualErr := ScopesToRules(tc.scopes, "namespace", nil) - switch { - case len(tc.err) == 0 && actualErr == nil: - case len(tc.err) == 0 && actualErr != nil: - t.Errorf("%s: unexpected error: %v", tc.name, actualErr) - case len(tc.err) != 0 && actualErr == nil: - t.Errorf("%s: missing error: %v", tc.name, tc.err) - case len(tc.err) != 0 && actualErr != nil: - if !strings.Contains(actualErr.Error(), tc.err) { - t.Errorf("%s: expected %v, got %v", tc.name, tc.err, actualErr) - } - } - - if len(actualRules) != tc.numRules { - t.Errorf("%s: expected %v, got %v", tc.name, tc.numRules, len(actualRules)) - } - } -} - -func TestClusterRoleEvaluator(t *testing.T) { - testCases := []struct { - name string - scopes []string - namespace string - clusterRoles []rbacv1.ClusterRole - policyGetterErr error - numRules int - err string - }{ - { - name: "bad-format-1", - scopes: []string{ClusterRoleIndicator}, - err: "bad format for", - numRules: 1, // we always add the discovery rules - }, - { - name: "bad-format-2", - scopes: []string{ClusterRoleIndicator + "foo"}, - err: "bad format for", - numRules: 1, // we always add the discovery rules - }, - { - name: "bad-format-3", - scopes: []string{ClusterRoleIndicator + ":ns"}, - err: "bad format for", - numRules: 1, // we always add the discovery rules - }, - { - name: "bad-format-4", - scopes: []string{ClusterRoleIndicator + "foo:"}, - err: "bad format for", - numRules: 1, // we always add the discovery rules - }, - { - name: "missing-role", - policyGetterErr: fmt.Errorf(`clusterrole "missing" not found`), - clusterRoles: []rbacv1.ClusterRole{ - { - ObjectMeta: metav1.ObjectMeta{Name: "admin"}, - Rules: []rbacv1.PolicyRule{{}}, - }, - }, - scopes: []string{ClusterRoleIndicator + "missing:*"}, - err: `clusterrole "missing" not found`, - numRules: 1, - }, - { - name: "mismatched-namespace", - clusterRoles: []rbacv1.ClusterRole{ - { - ObjectMeta: metav1.ObjectMeta{Name: "admin"}, - Rules: []rbacv1.PolicyRule{{}}, - }, - }, - namespace: "current-ns", - scopes: []string{ClusterRoleIndicator + "admin:mismatch"}, - numRules: 1, - }, - { - name: "all-namespaces", - clusterRoles: []rbacv1.ClusterRole{ - { - ObjectMeta: metav1.ObjectMeta{Name: "admin"}, - Rules: []rbacv1.PolicyRule{{}}, - }, - }, - namespace: "current-ns", - scopes: []string{ClusterRoleIndicator + "admin:*"}, - numRules: 2, - }, - { - name: "matching-namespaces", - clusterRoles: []rbacv1.ClusterRole{ - { - ObjectMeta: metav1.ObjectMeta{Name: "admin"}, - Rules: []rbacv1.PolicyRule{{}}, - }, - }, - namespace: "current-ns", - scopes: []string{ClusterRoleIndicator + "admin:current-ns"}, - numRules: 2, - }, - { - name: "colon-role", - clusterRoles: []rbacv1.ClusterRole{ - { - ObjectMeta: metav1.ObjectMeta{Name: "admin:two"}, - Rules: []rbacv1.PolicyRule{{}}, - }, - }, - namespace: "current-ns", - scopes: []string{ClusterRoleIndicator + "admin:two:current-ns"}, - numRules: 2, - }, - { - name: "getter-error", - policyGetterErr: fmt.Errorf("some bad thing happened"), - namespace: "current-ns", - scopes: []string{ClusterRoleIndicator + "admin:two:current-ns"}, - err: `some bad thing happened`, - numRules: 1, - }, - } - - for _, tc := range testCases { - actualRules, actualErr := ScopesToRules(tc.scopes, tc.namespace, &fakePolicyGetter{clusterRoles: tc.clusterRoles, err: tc.policyGetterErr}) - switch { - case len(tc.err) == 0 && actualErr == nil: - case len(tc.err) == 0 && actualErr != nil: - t.Errorf("%s: unexpected error: %v", tc.name, actualErr) - case len(tc.err) != 0 && actualErr == nil: - t.Errorf("%s: missing error: %v", tc.name, tc.err) - case len(tc.err) != 0 && actualErr != nil: - if !strings.Contains(actualErr.Error(), tc.err) { - t.Errorf("%s: expected %v, got %v", tc.name, tc.err, actualErr) - } - } - - if len(actualRules) != tc.numRules { - t.Errorf("%s: expected %v, got %v", tc.name, tc.numRules, len(actualRules)) - } - } -} - -func TestEscalationProtection(t *testing.T) { - testCases := []struct { - name string - scopes []string - namespace string - - clusterRoles []rbacv1.ClusterRole - expectedRules []rbacv1.PolicyRule - }{ - { - name: "simple match secrets", - clusterRoles: []rbacv1.ClusterRole{ - { - ObjectMeta: metav1.ObjectMeta{Name: "admin"}, - Rules: []rbacv1.PolicyRule{{APIGroups: []string{""}, Resources: []string{"pods", "secrets"}}}, - }, - }, - expectedRules: []rbacv1.PolicyRule{scopeDiscoveryRule, {APIGroups: []string{""}, Resources: []string{"pods"}}}, - scopes: []string{ClusterRoleIndicator + "admin:*"}, - }, - { - name: "no longer match old group secrets", - clusterRoles: []rbacv1.ClusterRole{ - { - ObjectMeta: metav1.ObjectMeta{Name: "admin"}, - Rules: []rbacv1.PolicyRule{{APIGroups: []string{}, Resources: []string{"pods", "secrets"}}}, - }, - }, - expectedRules: []rbacv1.PolicyRule{scopeDiscoveryRule, {APIGroups: []string{}, Resources: []string{"pods", "secrets"}}}, - scopes: []string{ClusterRoleIndicator + "admin:*"}, - }, - { - name: "skip non-matching group secrets", - clusterRoles: []rbacv1.ClusterRole{ - { - ObjectMeta: metav1.ObjectMeta{Name: "admin"}, - Rules: []rbacv1.PolicyRule{{APIGroups: []string{"foo"}, Resources: []string{"pods", "secrets"}}}, - }, - }, - expectedRules: []rbacv1.PolicyRule{scopeDiscoveryRule, {APIGroups: []string{"foo"}, Resources: []string{"pods", "secrets"}}}, - scopes: []string{ClusterRoleIndicator + "admin:*"}, - }, - { - name: "access tokens", - clusterRoles: []rbacv1.ClusterRole{ - { - ObjectMeta: metav1.ObjectMeta{Name: "admin"}, - Rules: []rbacv1.PolicyRule{{APIGroups: []string{"", "and-foo"}, Resources: []string{"pods", "oauthaccesstokens"}}}, - }, - }, - expectedRules: []rbacv1.PolicyRule{scopeDiscoveryRule, {APIGroups: []string{"", "and-foo"}, Resources: []string{"pods"}}}, - scopes: []string{ClusterRoleIndicator + "admin:*"}, - }, - { - name: "allow the escalation", - clusterRoles: []rbacv1.ClusterRole{ - { - ObjectMeta: metav1.ObjectMeta{Name: "admin"}, - Rules: []rbacv1.PolicyRule{{APIGroups: []string{""}, Resources: []string{"pods", "secrets"}}}, - }, - }, - expectedRules: []rbacv1.PolicyRule{scopeDiscoveryRule, {APIGroups: []string{""}, Resources: []string{"pods", "secrets"}}}, - scopes: []string{ClusterRoleIndicator + "admin:*:!"}, - }, - } - - for _, tc := range testCases { - actualRules, actualErr := ScopesToRules(tc.scopes, "ns-01", &fakePolicyGetter{clusterRoles: tc.clusterRoles}) - if actualErr != nil { - t.Errorf("%s: unexpected error: %v", tc.name, actualErr) - } - - if !reflect.DeepEqual(actualRules, tc.expectedRules) { - t.Errorf("%s: expected %v, got %v", tc.name, tc.expectedRules, actualRules) - } - } -} - -type fakePolicyGetter struct { - clusterRoles []rbacv1.ClusterRole - err error -} - -func (f *fakePolicyGetter) List(label labels.Selector) ([]*rbacv1.ClusterRole, error) { - ret := []*rbacv1.ClusterRole{} - for _, v := range f.clusterRoles { - ret = append(ret, &v) - } - return ret, f.err -} - -func (f *fakePolicyGetter) Get(id string) (*rbacv1.ClusterRole, error) { - for _, v := range f.clusterRoles { - if v.ObjectMeta.Name == id { - return &v, nil - } - } - return &rbacv1.ClusterRole{}, f.err -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer.go deleted file mode 100644 index 19d2e725d..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer.go +++ /dev/null @@ -1,48 +0,0 @@ -package scopeauthorizer - -import ( - "fmt" - - "k8s.io/apiserver/pkg/authorization/authorizer" - rbaclisters "k8s.io/client-go/listers/rbac/v1" - authorizerrbac "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac" - - authorizationv1 "github.com/openshift/api/authorization/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/authorization/scope" -) - -type scopeAuthorizer struct { - clusterRoleGetter rbaclisters.ClusterRoleLister -} - -func NewAuthorizer(clusterRoleGetter rbaclisters.ClusterRoleLister) authorizer.Authorizer { - return &scopeAuthorizer{clusterRoleGetter: clusterRoleGetter} -} - -func (a *scopeAuthorizer) Authorize(attributes authorizer.Attributes) (authorizer.Decision, string, error) { - user := attributes.GetUser() - if user == nil { - return authorizer.DecisionNoOpinion, "", fmt.Errorf("user missing from context") - } - - scopes := user.GetExtra()[authorizationv1.ScopesKey] - if len(scopes) == 0 { - return authorizer.DecisionNoOpinion, "", nil - } - - nonFatalErrors := "" - - // scopeResolutionErrors aren't fatal. If any of the scopes we find allow this, then the overall scope limits allow it - rules, err := scope.ScopesToRules(scopes, attributes.GetNamespace(), a.clusterRoleGetter) - if err != nil { - nonFatalErrors = fmt.Sprintf(", additionally the following non-fatal errors were reported: %v", err) - } - - // check rules against attributes - if authorizerrbac.RulesAllow(attributes, rules...) { - return authorizer.DecisionNoOpinion, "", nil - } - - // the scope prevent this. We need to authoritatively deny - return authorizer.DecisionDeny, fmt.Sprintf("scopes %v prevent this action%s", scopes, nonFatalErrors), nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer_test.go deleted file mode 100644 index 6b15dcc4d..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/authorization/scopeauthorizer/authorizer_test.go +++ /dev/null @@ -1,149 +0,0 @@ -package scopeauthorizer - -import ( - "strings" - "testing" - - "k8s.io/apiserver/pkg/authentication/user" - kauthorizer "k8s.io/apiserver/pkg/authorization/authorizer" - - authorizationv1 "github.com/openshift/api/authorization/v1" -) - -func TestAuthorize(t *testing.T) { - testCases := []struct { - name string - attributes kauthorizer.AttributesRecord - expectedAllowed kauthorizer.Decision - expectedErr string - expectedMsg string - }{ - { - name: "no user", - attributes: kauthorizer.AttributesRecord{ - ResourceRequest: true, - Namespace: "ns", - }, - expectedAllowed: kauthorizer.DecisionNoOpinion, - expectedErr: `user missing from context`, - }, - { - name: "no extra", - attributes: kauthorizer.AttributesRecord{ - User: &user.DefaultInfo{}, - ResourceRequest: true, - Namespace: "ns", - }, - expectedAllowed: kauthorizer.DecisionNoOpinion, - }, - { - name: "empty extra", - attributes: kauthorizer.AttributesRecord{ - User: &user.DefaultInfo{Extra: map[string][]string{}}, - ResourceRequest: true, - Namespace: "ns", - }, - expectedAllowed: kauthorizer.DecisionNoOpinion, - }, - { - name: "empty scopes", - attributes: kauthorizer.AttributesRecord{ - User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {}}}, - ResourceRequest: true, - Namespace: "ns", - }, - expectedAllowed: kauthorizer.DecisionNoOpinion, - }, - { - name: "bad scope", - attributes: kauthorizer.AttributesRecord{ - User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"does-not-exist"}}}, - ResourceRequest: true, - Namespace: "ns", - }, - expectedAllowed: kauthorizer.DecisionDeny, - expectedMsg: `scopes [does-not-exist] prevent this action, additionally the following non-fatal errors were reported: no scope evaluator found for "does-not-exist"`, - }, - { - name: "bad scope 2", - attributes: kauthorizer.AttributesRecord{ - User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"role:dne"}}}, - ResourceRequest: true, - Namespace: "ns", - }, - expectedAllowed: kauthorizer.DecisionDeny, - expectedMsg: `scopes [role:dne] prevent this action, additionally the following non-fatal errors were reported: bad format for scope role:dne`, - }, - { - name: "scope doesn't cover", - attributes: kauthorizer.AttributesRecord{ - User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"user:info"}}}, - ResourceRequest: true, - Namespace: "ns", - Verb: "get", Resource: "users", Name: "harold"}, - expectedAllowed: kauthorizer.DecisionDeny, - expectedMsg: `scopes [user:info] prevent this action`, - }, - { - name: "scope covers", - attributes: kauthorizer.AttributesRecord{ - User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"user:info"}}}, - ResourceRequest: true, - Namespace: "ns", - Verb: "get", Resource: "users", Name: "~"}, - expectedAllowed: kauthorizer.DecisionNoOpinion, - }, - { - name: "scope covers for discovery", - attributes: kauthorizer.AttributesRecord{ - User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"user:info"}}}, - ResourceRequest: false, - Namespace: "ns", - Verb: "get", Path: "/api"}, - expectedAllowed: kauthorizer.DecisionNoOpinion, - }, - { - name: "user:full covers any resource", - attributes: kauthorizer.AttributesRecord{ - User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"user:full"}}}, - ResourceRequest: true, - Namespace: "ns", - Verb: "update", Resource: "users", Name: "harold"}, - expectedAllowed: kauthorizer.DecisionNoOpinion, - }, - { - name: "user:full covers any non-resource", - attributes: kauthorizer.AttributesRecord{ - User: &user.DefaultInfo{Extra: map[string][]string{authorizationv1.ScopesKey: {"user:full"}}}, - ResourceRequest: false, - Namespace: "ns", - Verb: "post", Path: "/foo/bar/baz"}, - expectedAllowed: kauthorizer.DecisionNoOpinion, - }, - } - - for _, tc := range testCases { - t.Run(tc.name, func(t *testing.T) { - authorizer := NewAuthorizer(nil) - - actualAllowed, actualMsg, actualErr := authorizer.Authorize(tc.attributes) - switch { - case len(tc.expectedErr) == 0 && actualErr == nil: - case len(tc.expectedErr) == 0 && actualErr != nil: - t.Errorf("%s: unexpected error: %v", tc.name, actualErr) - case len(tc.expectedErr) != 0 && actualErr == nil: - t.Errorf("%s: missing error: %v", tc.name, tc.expectedErr) - case len(tc.expectedErr) != 0 && actualErr != nil: - if !strings.Contains(actualErr.Error(), tc.expectedErr) { - t.Errorf("expected %v, got %v", tc.expectedErr, actualErr) - } - } - if tc.expectedMsg != actualMsg { - t.Errorf("expected %v, got %v", tc.expectedMsg, actualMsg) - } - if tc.expectedAllowed != actualAllowed { - t.Errorf("expected %v, got %v", tc.expectedAllowed, actualAllowed) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configdefault/admission_config.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configdefault/admission_config.go deleted file mode 100644 index 01af65a49..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configdefault/admission_config.go +++ /dev/null @@ -1,40 +0,0 @@ -package configdefault - -import ( - "time" - - "k8s.io/apiserver/pkg/admission" - "k8s.io/client-go/informers" - "k8s.io/client-go/kubernetes" - "k8s.io/kubernetes/cmd/kube-apiserver/app/options" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/namespaceconditions" - "k8s.io/kubernetes/openshift-kube-apiserver/kubeadmission" - - "github.com/openshift/library-go/pkg/apiserver/admission/admissiontimeout" -) - -func SetAdmissionDefaults(o *options.ServerRunOptions, informers informers.SharedInformerFactory, kubeClient kubernetes.Interface) { - existingAdmissionOrder := o.Admission.GenericAdmission.RecommendedPluginOrder - o.Admission.GenericAdmission.RecommendedPluginOrder = kubeadmission.NewOrderedKubeAdmissionPlugins(existingAdmissionOrder) - kubeadmission.RegisterOpenshiftKubeAdmissionPlugins(o.Admission.GenericAdmission.Plugins) - customresourcevalidationregistration.RegisterCustomResourceValidation(o.Admission.GenericAdmission.Plugins) - existingDefaultOff := o.Admission.GenericAdmission.DefaultOffPlugins - o.Admission.GenericAdmission.DefaultOffPlugins = kubeadmission.NewDefaultOffPluginsFunc(existingDefaultOff)() - - // set up the decorators we need. This is done late and out of order because our decorators currently require informers which are not - // present until we start running - namespaceLabelDecorator := namespaceconditions.NamespaceLabelConditions{ - NamespaceClient: kubeClient.CoreV1(), - NamespaceLister: informers.Core().V1().Namespaces().Lister(), - - SkipLevelZeroNames: kubeadmission.SkipRunLevelZeroPlugins, - SkipLevelOneNames: kubeadmission.SkipRunLevelOnePlugins, - } - o.Admission.GenericAdmission.Decorators = append(o.Admission.GenericAdmission.Decorators, - admission.Decorators{ - admission.DecoratorFunc(namespaceLabelDecorator.WithNamespaceLabelConditions), - admission.DecoratorFunc(admissiontimeout.AdmissionTimeout{Timeout: 13 * time.Second}.WithTimeout), - }, - ) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configdefault/kubecontrolplane_default.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configdefault/kubecontrolplane_default.go deleted file mode 100644 index 0dcd5fe71..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configdefault/kubecontrolplane_default.go +++ /dev/null @@ -1,115 +0,0 @@ -package configdefault - -import ( - "io/ioutil" - "os" - "path/filepath" - - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" - "github.com/openshift/library-go/pkg/config/configdefaults" - "k8s.io/klog" -) - -// ResolveDirectoriesForSATokenVerification takes our config (which allows directories) and navigates one level of -// those directories for files. This makes it easy to build a single configmap that contains lots of aggregated files. -// if we fail to open the file for inspection, the resolving code in kube-apiserver may have drifted from us -// we include the raw file and let the kube-apiserver succeed or fail. -func ResolveDirectoriesForSATokenVerification(config *kubecontrolplanev1.KubeAPIServerConfig) { - // kube doesn't honor directories, but we want to allow them in our sa token validators - resolvedSATokenValidationCerts := []string{} - for _, filename := range config.ServiceAccountPublicKeyFiles { - file, err := os.Open(filename) - if err != nil { - resolvedSATokenValidationCerts = append(resolvedSATokenValidationCerts, filename) - klog.Warningf(err.Error()) - continue - } - fileInfo, err := file.Stat() - if err != nil { - resolvedSATokenValidationCerts = append(resolvedSATokenValidationCerts, filename) - klog.Warningf(err.Error()) - continue - } - if !fileInfo.IsDir() { - resolvedSATokenValidationCerts = append(resolvedSATokenValidationCerts, filename) - continue - } - - contents, err := ioutil.ReadDir(filename) - switch { - case os.IsNotExist(err) || os.IsPermission(err): - klog.Warningf(err.Error()) - case err != nil: - panic(err) // some weird, unexpected error - default: - for _, content := range contents { - if !content.Mode().IsRegular() { - continue - } - resolvedSATokenValidationCerts = append(resolvedSATokenValidationCerts, filepath.Join(filename, content.Name())) - } - } - } - - config.ServiceAccountPublicKeyFiles = resolvedSATokenValidationCerts -} - -func SetRecommendedKubeAPIServerConfigDefaults(config *kubecontrolplanev1.KubeAPIServerConfig) { - configdefaults.DefaultString(&config.GenericAPIServerConfig.StorageConfig.StoragePrefix, "kubernetes.io") - configdefaults.DefaultString(&config.GenericAPIServerConfig.ServingInfo.BindAddress, "0.0.0.0:6443") - - configdefaults.SetRecommendedGenericAPIServerConfigDefaults(&config.GenericAPIServerConfig) - SetRecommendedMasterAuthConfigDefaults(&config.AuthConfig) - SetRecommendedAggregatorConfigDefaults(&config.AggregatorConfig) - SetRecommendedKubeletConnectionInfoDefaults(&config.KubeletClientInfo) - - configdefaults.DefaultString(&config.ServicesSubnet, "10.0.0.0/24") - configdefaults.DefaultString(&config.ServicesNodePortRange, "30000-32767") - - if len(config.ServiceAccountPublicKeyFiles) == 0 { - config.ServiceAccountPublicKeyFiles = append([]string{}, "/etc/kubernetes/static-pod-resources/configmaps/sa-token-signing-certs") - } - - // after the aggregator defaults are set, we can default the auth config values - // TODO this indicates that we're set two different things to the same value - if config.AuthConfig.RequestHeader == nil { - config.AuthConfig.RequestHeader = &kubecontrolplanev1.RequestHeaderAuthenticationOptions{} - configdefaults.DefaultStringSlice(&config.AuthConfig.RequestHeader.ClientCommonNames, []string{"system:openshift-aggregator"}) - configdefaults.DefaultString(&config.AuthConfig.RequestHeader.ClientCA, "/var/run/configmaps/aggregator-client-ca/ca-bundle.crt") - configdefaults.DefaultStringSlice(&config.AuthConfig.RequestHeader.UsernameHeaders, []string{"X-Remote-User"}) - configdefaults.DefaultStringSlice(&config.AuthConfig.RequestHeader.GroupHeaders, []string{"X-Remote-Group"}) - configdefaults.DefaultStringSlice(&config.AuthConfig.RequestHeader.ExtraHeaderPrefixes, []string{"X-Remote-Extra-"}) - } - - // Set defaults Cache TTLs for external Webhook Token Reviewers - for i := range config.AuthConfig.WebhookTokenAuthenticators { - if len(config.AuthConfig.WebhookTokenAuthenticators[i].CacheTTL) == 0 { - config.AuthConfig.WebhookTokenAuthenticators[i].CacheTTL = "2m" - } - } - - if config.OAuthConfig != nil { - for i := range config.OAuthConfig.IdentityProviders { - // By default, only let one identity provider authenticate a particular user - // If multiple identity providers collide, the second one in will fail to auth - // The admin can set this to "add" if they want to allow new identities to join existing users - configdefaults.DefaultString(&config.OAuthConfig.IdentityProviders[i].MappingMethod, "claim") - } - } -} - -func SetRecommendedMasterAuthConfigDefaults(config *kubecontrolplanev1.MasterAuthConfig) { -} - -func SetRecommendedAggregatorConfigDefaults(config *kubecontrolplanev1.AggregatorConfig) { - configdefaults.DefaultString(&config.ProxyClientInfo.KeyFile, "/var/run/secrets/aggregator-client/tls.key") - configdefaults.DefaultString(&config.ProxyClientInfo.CertFile, "/var/run/secrets/aggregator-client/tls.crt") -} - -func SetRecommendedKubeletConnectionInfoDefaults(config *kubecontrolplanev1.KubeletConnectionInfo) { - if config.Port == 0 { - config.Port = 10250 - } - configdefaults.DefaultString(&config.CertInfo.KeyFile, "/var/run/secrets/kubelet-client/tls.key") - configdefaults.DefaultString(&config.CertInfo.CertFile, "/var/run/secrets/kubelet-client/tls.crt") -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configflags/audit.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configflags/audit.go deleted file mode 100644 index f7d378daf..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configflags/audit.go +++ /dev/null @@ -1,54 +0,0 @@ -package configflags - -import ( - "io/ioutil" - "os" - "path/filepath" - "strconv" - - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - - configv1 "github.com/openshift/api/config/v1" -) - -const defaultAuditPolicyFilePath = "openshift.local.audit/policy.yaml" - -func AuditFlags(c *configv1.AuditConfig, args map[string][]string) map[string][]string { - if !c.Enabled { - return args - } - - auditPolicyFilePath := c.PolicyFile - if len(c.PolicyConfiguration.Raw) > 0 && string(c.PolicyConfiguration.Raw) != "null" { - if len(auditPolicyFilePath) == 0 { - auditPolicyFilePath = defaultAuditPolicyFilePath - } - if err := os.MkdirAll(filepath.Dir(auditPolicyFilePath), 0755); err != nil { - utilruntime.HandleError(err) - } - if err := ioutil.WriteFile(auditPolicyFilePath, c.PolicyConfiguration.Raw, 0644); err != nil { - utilruntime.HandleError(err) - } - } - - SetIfUnset(args, "audit-log-maxbackup", strconv.Itoa(int(c.MaximumRetainedFiles))) - SetIfUnset(args, "audit-log-maxsize", strconv.Itoa(int(c.MaximumFileSizeMegabytes))) - SetIfUnset(args, "audit-log-maxage", strconv.Itoa(int(c.MaximumFileRetentionDays))) - auditFilePath := c.AuditFilePath - if len(auditFilePath) == 0 { - auditFilePath = "-" - } - SetIfUnset(args, "audit-log-path", auditFilePath) - if len(auditPolicyFilePath) > 0 { - SetIfUnset(args, "audit-policy-file", auditPolicyFilePath) - } - if len(c.LogFormat) > 0 { - SetIfUnset(args, "audit-log-format", string(c.LogFormat)) - } - if len(c.WebHookMode) > 0 { - SetIfUnset(args, "audit-webhook-mode", string(c.WebHookMode)) - } - SetIfUnset(args, "audit-webhook-config-file", string(c.WebHookKubeConfig)) - - return args -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configflags/helpers.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configflags/helpers.go deleted file mode 100644 index 12870a4b5..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/configflags/helpers.go +++ /dev/null @@ -1,43 +0,0 @@ -package configflags - -import ( - "fmt" - "sort" - "strings" -) - -// ArgsWithPrefix filters arguments by prefix and collects values. -func ArgsWithPrefix(args map[string][]string, prefix string) map[string][]string { - filtered := map[string][]string{} - for key, slice := range args { - if !strings.HasPrefix(key, prefix) { - continue - } - for _, val := range slice { - filtered[key] = append(filtered[key], val) - } - } - return filtered -} - -func SetIfUnset(cmdLineArgs map[string][]string, key string, value ...string) { - if _, ok := cmdLineArgs[key]; !ok { - cmdLineArgs[key] = value - } -} - -func ToFlagSlice(args map[string][]string) []string { - var keys []string - for key := range args { - keys = append(keys, key) - } - sort.Strings(keys) - - var flags []string - for _, key := range keys { - for _, token := range args[key] { - flags = append(flags, fmt.Sprintf("--%s=%v", key, token)) - } - } - return flags -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/enablement/enablement.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/enablement/enablement.go deleted file mode 100644 index 193a126cf..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/enablement/enablement.go +++ /dev/null @@ -1,11 +0,0 @@ -package enablement - -func ForceOpenShift() { - isOpenShift = true -} - -var isOpenShift = false - -func IsOpenShift() bool { - return isOpenShift -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/enablement/intialization.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/enablement/intialization.go deleted file mode 100644 index f5d3d7a0d..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/enablement/intialization.go +++ /dev/null @@ -1,82 +0,0 @@ -package enablement - -import ( - "io/ioutil" - "path" - - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/runtime/serializer" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/client-go/tools/clientcmd/api" - aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver" - "k8s.io/kubernetes/cmd/kube-apiserver/app/options" - "k8s.io/kubernetes/openshift-kube-apiserver/configdefault" - "k8s.io/kubernetes/pkg/capabilities" - kubelettypes "k8s.io/kubernetes/pkg/kubelet/types" - "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy" - - configv1 "github.com/openshift/api/config/v1" - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" - osinv1 "github.com/openshift/api/osin/v1" - "github.com/openshift/library-go/pkg/config/helpers" -) - -func GetOpenshiftConfig(openshiftConfigFile string) (*kubecontrolplanev1.KubeAPIServerConfig, error) { - // try to decode into our new types first. right now there is no validation, no file path resolution. this unsticks the operator to start. - // TODO add those things - configContent, err := ioutil.ReadFile(openshiftConfigFile) - if err != nil { - return nil, err - } - scheme := runtime.NewScheme() - utilruntime.Must(kubecontrolplanev1.Install(scheme)) - codecs := serializer.NewCodecFactory(scheme) - obj, err := runtime.Decode(codecs.UniversalDecoder(kubecontrolplanev1.GroupVersion, configv1.GroupVersion, osinv1.GroupVersion), configContent) - if err != nil { - - return nil, err - } - - // Resolve relative to CWD - absoluteConfigFile, err := api.MakeAbs(openshiftConfigFile, "") - if err != nil { - return nil, err - } - configFileLocation := path.Dir(absoluteConfigFile) - - config := obj.(*kubecontrolplanev1.KubeAPIServerConfig) - if err := helpers.ResolvePaths(GetKubeAPIServerConfigFileReferences(config), configFileLocation); err != nil { - return nil, err - } - configdefault.SetRecommendedKubeAPIServerConfigDefaults(config) - configdefault.ResolveDirectoriesForSATokenVerification(config) - - return config, nil -} - -func ForceGlobalInitializationForOpenShift(o *options.ServerRunOptions) { - // This allows to move crqs, sccs, and rbrs to CRD - aggregatorapiserver.AddAlwaysLocalDelegateForPrefix("/apis/quota.openshift.io/v1/clusterresourcequotas") - aggregatorapiserver.AddAlwaysLocalDelegateForPrefix("/apis/security.openshift.io/v1/securitycontextconstraints") - aggregatorapiserver.AddAlwaysLocalDelegateForPrefix("/apis/authorization.openshift.io/v1/rolebindingrestrictions") - aggregatorapiserver.AddAlwaysLocalDelegateGroupResource(schema.GroupResource{Group: "authorization.openshift.io", Resource: "rolebindingrestrictions"}) - - // This allows the CRD registration to avoid fighting with the APIService from the operator - aggregatorapiserver.AddOverlappingGroupVersion(schema.GroupVersion{Group: "authorization.openshift.io", Version: "v1"}) - - // Allow privileged containers - capabilities.Initialize(capabilities.Capabilities{ - AllowPrivileged: true, - PrivilegedSources: capabilities.PrivilegedSources{ - HostNetworkSources: []string{kubelettypes.ApiserverSource, kubelettypes.FileSource}, - HostPIDSources: []string{kubelettypes.ApiserverSource, kubelettypes.FileSource}, - HostIPCSources: []string{kubelettypes.ApiserverSource, kubelettypes.FileSource}, - }, - }) - - // add permissions we require on our kube-apiserver - // TODO, we should scrub these out - bootstrappolicy.ClusterRoles = bootstrappolicy.OpenshiftClusterRoles - bootstrappolicy.ClusterRoleBindings = bootstrappolicy.OpenshiftClusterRoleBindings -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/enablement/kubecontrolplane_refs.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/enablement/kubecontrolplane_refs.go deleted file mode 100644 index 15cceec91..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/enablement/kubecontrolplane_refs.go +++ /dev/null @@ -1,122 +0,0 @@ -package enablement - -import ( - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" - osinv1 "github.com/openshift/api/osin/v1" - "github.com/openshift/library-go/pkg/config/helpers" -) - -func GetKubeAPIServerConfigFileReferences(config *kubecontrolplanev1.KubeAPIServerConfig) []*string { - if config == nil { - return []*string{} - } - - refs := []*string{} - - refs = append(refs, helpers.GetGenericAPIServerConfigFileReferences(&config.GenericAPIServerConfig)...) - refs = append(refs, GetKubeletConnectionInfoFileReferences(&config.KubeletClientInfo)...) - - if config.OAuthConfig != nil { - refs = append(refs, GetOAuthConfigFileReferences(config.OAuthConfig)...) - } - - refs = append(refs, &config.AggregatorConfig.ProxyClientInfo.CertFile) - refs = append(refs, &config.AggregatorConfig.ProxyClientInfo.KeyFile) - - if config.AuthConfig.RequestHeader != nil { - refs = append(refs, &config.AuthConfig.RequestHeader.ClientCA) - } - for k := range config.AuthConfig.WebhookTokenAuthenticators { - refs = append(refs, &config.AuthConfig.WebhookTokenAuthenticators[k].ConfigFile) - } - if len(config.AuthConfig.OAuthMetadataFile) > 0 { - refs = append(refs, &config.AuthConfig.OAuthMetadataFile) - } - - refs = append(refs, &config.AggregatorConfig.ProxyClientInfo.CertFile) - refs = append(refs, &config.AggregatorConfig.ProxyClientInfo.KeyFile) - - for i := range config.ServiceAccountPublicKeyFiles { - refs = append(refs, &config.ServiceAccountPublicKeyFiles[i]) - } - - return refs -} - -func GetKubeletConnectionInfoFileReferences(config *kubecontrolplanev1.KubeletConnectionInfo) []*string { - if config == nil { - return []*string{} - } - - refs := []*string{} - refs = append(refs, helpers.GetCertFileReferences(&config.CertInfo)...) - refs = append(refs, &config.CA) - return refs -} - -func GetOAuthConfigFileReferences(config *osinv1.OAuthConfig) []*string { - if config == nil { - return []*string{} - } - - refs := []*string{} - - if config.MasterCA != nil { - refs = append(refs, config.MasterCA) - } - - refs = append(refs, GetSessionConfigFileReferences(config.SessionConfig)...) - for _, identityProvider := range config.IdentityProviders { - switch provider := identityProvider.Provider.Object.(type) { - case (*osinv1.RequestHeaderIdentityProvider): - refs = append(refs, &provider.ClientCA) - - case (*osinv1.HTPasswdPasswordIdentityProvider): - refs = append(refs, &provider.File) - - case (*osinv1.LDAPPasswordIdentityProvider): - refs = append(refs, &provider.CA) - refs = append(refs, helpers.GetStringSourceFileReferences(&provider.BindPassword)...) - - case (*osinv1.BasicAuthPasswordIdentityProvider): - refs = append(refs, helpers.GetRemoteConnectionInfoFileReferences(&provider.RemoteConnectionInfo)...) - - case (*osinv1.KeystonePasswordIdentityProvider): - refs = append(refs, helpers.GetRemoteConnectionInfoFileReferences(&provider.RemoteConnectionInfo)...) - - case (*osinv1.GitLabIdentityProvider): - refs = append(refs, &provider.CA) - refs = append(refs, helpers.GetStringSourceFileReferences(&provider.ClientSecret)...) - - case (*osinv1.OpenIDIdentityProvider): - refs = append(refs, &provider.CA) - refs = append(refs, helpers.GetStringSourceFileReferences(&provider.ClientSecret)...) - - case (*osinv1.GoogleIdentityProvider): - refs = append(refs, helpers.GetStringSourceFileReferences(&provider.ClientSecret)...) - - case (*osinv1.GitHubIdentityProvider): - refs = append(refs, helpers.GetStringSourceFileReferences(&provider.ClientSecret)...) - refs = append(refs, &provider.CA) - - } - } - - if config.Templates != nil { - refs = append(refs, &config.Templates.Login) - refs = append(refs, &config.Templates.ProviderSelection) - refs = append(refs, &config.Templates.Error) - } - - return refs -} - -func GetSessionConfigFileReferences(config *osinv1.SessionConfig) []*string { - if config == nil { - return []*string{} - } - - refs := []*string{} - refs = append(refs, &config.SessionSecretsFile) - return refs -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/kubeadmission/register.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/kubeadmission/register.go deleted file mode 100644 index 05554f926..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/kubeadmission/register.go +++ /dev/null @@ -1,100 +0,0 @@ -package kubeadmission - -import ( - "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apiserver/pkg/admission" - mutatingwebhook "k8s.io/apiserver/pkg/admission/plugin/webhook/mutating" - - authorizationrestrictusers "k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers" - quotaclusterresourceoverride "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/clusterresourceoverride" - quotarunonceduration "k8s.io/kubernetes/openshift-kube-apiserver/admission/autoscaling/runonceduration" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy" - imagepolicyapiv1 "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/apis/imagepolicy/v1" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/externalipranger" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/network/restrictedendpoints" - quotaclusterresourcequota "k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota" - ingressadmission "k8s.io/kubernetes/openshift-kube-apiserver/admission/route" - projectnodeenv "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv" - schedulerpodnodeconstraints "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/podnodeconstraints" -) - -func RegisterOpenshiftKubeAdmissionPlugins(plugins *admission.Plugins) { - authorizationrestrictusers.Register(plugins) - imagepolicy.Register(plugins) - ingressadmission.Register(plugins) - projectnodeenv.Register(plugins) - quotaclusterresourceoverride.Register(plugins) - quotaclusterresourcequota.Register(plugins) - quotarunonceduration.Register(plugins) - schedulerpodnodeconstraints.Register(plugins) - sccadmission.Register(plugins) - sccadmission.RegisterSCCExecRestrictions(plugins) - externalipranger.RegisterExternalIP(plugins) - restrictedendpoints.RegisterRestrictedEndpoints(plugins) -} - -var ( - - // these are admission plugins that cannot be applied until after the kubeapiserver starts. - // TODO if nothing comes to mind in 3.10, kill this - SkipRunLevelZeroPlugins = sets.NewString() - // these are admission plugins that cannot be applied until after the openshiftapiserver apiserver starts. - SkipRunLevelOnePlugins = sets.NewString( - imagepolicyapiv1.PluginName, // "image.openshift.io/ImagePolicy" - "quota.openshift.io/ClusterResourceQuota", - "security.openshift.io/SecurityContextConstraint", - "security.openshift.io/SCCExecRestrictions", - ) - - // AfterKubeAdmissionPlugins are the admission plugins to add after kube admission, before mutating webhooks - openshiftAdmissionPluginsForKube = []string{ - "autoscaling.openshift.io/ClusterResourceOverride", - "authorization.openshift.io/RestrictSubjectBindings", - "autoscaling.openshift.io/RunOnceDuration", - "scheduling.openshift.io/PodNodeConstraints", - "scheduling.openshift.io/OriginPodNodeEnvironment", - "network.openshift.io/ExternalIPRanger", - "network.openshift.io/RestrictedEndpointsAdmission", - imagepolicyapiv1.PluginName, // "image.openshift.io/ImagePolicy" - "security.openshift.io/SecurityContextConstraint", - "security.openshift.io/SCCExecRestrictions", - "route.openshift.io/IngressAdmission", - "quota.openshift.io/ClusterResourceQuota", - } - - // additionalDefaultOnPlugins is a list of plugins we turn on by default that core kube does not. - additionalDefaultOnPlugins = sets.NewString( - "NodeRestriction", - "OwnerReferencesPermissionEnforcement", - "PersistentVolumeLabel", - "PodNodeSelector", - "PodTolerationRestriction", - "Priority", - imagepolicyapiv1.PluginName, // "image.openshift.io/ImagePolicy" - "StorageObjectInUseProtection", - ) -) - -func NewOrderedKubeAdmissionPlugins(kubeAdmissionOrder []string) []string { - ret := []string{} - for _, curr := range kubeAdmissionOrder { - if curr == mutatingwebhook.PluginName { - ret = append(ret, openshiftAdmissionPluginsForKube...) - ret = append(ret, customresourcevalidationregistration.AllCustomResourceValidators...) - } - ret = append(ret, curr) - } - return ret -} - -func NewDefaultOffPluginsFunc(kubeDefaultOffAdmission sets.String) func() sets.String { - return func() sets.String { - kubeOff := sets.NewString(kubeDefaultOffAdmission.UnsortedList()...) - kubeOff.Delete(additionalDefaultOnPlugins.List()...) - kubeOff.Delete(openshiftAdmissionPluginsForKube...) - kubeOff.Delete(customresourcevalidationregistration.AllCustomResourceValidators...) - return kubeOff - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/kubeadmission/register_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/kubeadmission/register_test.go deleted file mode 100644 index 8db1694d9..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/kubeadmission/register_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package kubeadmission - -import ( - "testing" - - "k8s.io/apiserver/pkg/admission" - genericapiserver "k8s.io/apiserver/pkg/server" - "k8s.io/kubernetes/pkg/kubeapiserver/options" - - "github.com/openshift/library-go/pkg/apiserver/admission/admissionregistrationtesting" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/customresourcevalidationregistration" -) - -func TestAdmissionRegistration(t *testing.T) { - orderedAdmissionChain := NewOrderedKubeAdmissionPlugins(options.AllOrderedPlugins) - defaultOffPlugins := NewDefaultOffPluginsFunc(options.DefaultOffAdmissionPlugins())() - registerAllAdmissionPlugins := func(plugins *admission.Plugins) { - genericapiserver.RegisterAllAdmissionPlugins(plugins) - options.RegisterAllAdmissionPlugins(plugins) - RegisterOpenshiftKubeAdmissionPlugins(plugins) - customresourcevalidationregistration.RegisterCustomResourceValidation(plugins) - } - plugins := admission.NewPlugins() - registerAllAdmissionPlugins(plugins) - - err := admissionregistrationtesting.AdmissionRegistrationTest(plugins, orderedAdmissionChain, defaultOffPlugins) - if err != nil { - t.Fatal(err) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/discovery.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/discovery.go deleted file mode 100644 index 7a19fef13..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/discovery.go +++ /dev/null @@ -1,95 +0,0 @@ -package openshiftkubeapiserver - -import ( - "encoding/json" - "fmt" - "io/ioutil" - "net/url" - - "k8s.io/klog" - - osinv1 "github.com/openshift/api/osin/v1" - "github.com/openshift/library-go/pkg/oauth/oauthdiscovery" - "k8s.io/kubernetes/openshift-kube-apiserver/authorization/scope" -) - -// PKCE [RFC7636] code challenge methods supported -// https://tools.ietf.org/html/rfc7636#section-4.3 -const ( - codeChallengeMethodPlain = "plain" - codeChallengeMethodSHA256 = "S256" -) - -var codeChallengeMethodsSupported = []string{codeChallengeMethodPlain, codeChallengeMethodSHA256} - -// TODO: promote this struct as it is not effectively part of our API, since we -// validate configuration using LoadOAuthMetadataFile - -func getOauthMetadata(masterPublicURL string) oauthdiscovery.OauthAuthorizationServerMetadata { - return oauthdiscovery.OauthAuthorizationServerMetadata{ - Issuer: masterPublicURL, - AuthorizationEndpoint: oauthdiscovery.OpenShiftOAuthAuthorizeURL(masterPublicURL), - TokenEndpoint: oauthdiscovery.OpenShiftOAuthTokenURL(masterPublicURL), - // Note: this list is incomplete, which is allowed per the draft spec - ScopesSupported: scope.DefaultSupportedScopes(), - ResponseTypesSupported: []string{"code", "token"}, - GrantTypesSupported: []string{"authorization_code", "implicit"}, - CodeChallengeMethodsSupported: codeChallengeMethodsSupported, - } -} - -func validateURL(urlString string) error { - urlObj, err := url.Parse(urlString) - if err != nil { - return fmt.Errorf("%q is an invalid URL: %v", urlString, err) - } - if len(urlObj.Scheme) == 0 { - return fmt.Errorf("must contain a valid scheme") - } - if len(urlObj.Host) == 0 { - return fmt.Errorf("must contain a valid host") - } - return nil -} - -func loadOAuthMetadataFile(metadataFile string) ([]byte, *oauthdiscovery.OauthAuthorizationServerMetadata, error) { - data, err := ioutil.ReadFile(metadataFile) - if err != nil { - return nil, nil, fmt.Errorf("unable to read External OAuth Metadata file: %v", err) - } - - oauthMetadata := &oauthdiscovery.OauthAuthorizationServerMetadata{} - if err := json.Unmarshal(data, oauthMetadata); err != nil { - return nil, nil, fmt.Errorf("unable to decode External OAuth Metadata file: %v", err) - } - - if err := validateURL(oauthMetadata.Issuer); err != nil { - return nil, nil, fmt.Errorf("error validating External OAuth Metadata Issuer field: %v", err) - } - - if err := validateURL(oauthMetadata.AuthorizationEndpoint); err != nil { - return nil, nil, fmt.Errorf("error validating External OAuth Metadata AuthorizationEndpoint field: %v", err) - } - - if err := validateURL(oauthMetadata.TokenEndpoint); err != nil { - return nil, nil, fmt.Errorf("error validating External OAuth Metadata TokenEndpoint field: %v", err) - } - - return data, oauthMetadata, nil -} - -func prepOauthMetadata(oauthConfig *osinv1.OAuthConfig, oauthMetadataFile string) ([]byte, *oauthdiscovery.OauthAuthorizationServerMetadata, error) { - if len(oauthMetadataFile) > 0 { - return loadOAuthMetadataFile(oauthMetadataFile) - } - if oauthConfig != nil && len(oauthConfig.MasterPublicURL) != 0 { - metadataStruct := getOauthMetadata(oauthConfig.MasterPublicURL) - metadata, err := json.MarshalIndent(metadataStruct, "", " ") - if err != nil { - klog.Errorf("Unable to initialize OAuth authorization server metadata route: %v", err) - return nil, nil, err - } - return metadata, &metadataStruct, nil - } - return nil, nil, nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/discovery_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/discovery_test.go deleted file mode 100644 index 3d1cf8c27..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/discovery_test.go +++ /dev/null @@ -1,40 +0,0 @@ -package openshiftkubeapiserver - -import ( - "reflect" - "testing" - - "github.com/openshift/library-go/pkg/oauth/oauthdiscovery" -) - -func TestGetOauthMetadata(t *testing.T) { - actual := getOauthMetadata("https://localhost:8443") - expected := oauthdiscovery.OauthAuthorizationServerMetadata{ - Issuer: "https://localhost:8443", - AuthorizationEndpoint: "https://localhost:8443/oauth/authorize", - TokenEndpoint: "https://localhost:8443/oauth/token", - ScopesSupported: []string{ - "user:check-access", - "user:full", - "user:info", - "user:list-projects", - "user:list-scoped-projects", - }, - ResponseTypesSupported: []string{ - "code", - "token", - }, - GrantTypesSupported: []string{ - "authorization_code", - "implicit", - }, - CodeChallengeMethodsSupported: []string{ - "plain", - "S256", - }, - } - - if !reflect.DeepEqual(actual, expected) { - t.Errorf("Expected %#v, got %#v", expected, actual) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/flags.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/flags.go deleted file mode 100644 index f92cf5480..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/flags.go +++ /dev/null @@ -1,222 +0,0 @@ -package openshiftkubeapiserver - -import ( - "fmt" - "io/ioutil" - "net" - "strings" - - configv1 "github.com/openshift/api/config/v1" - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" - "github.com/openshift/library-go/pkg/config/helpers" - "k8s.io/kubernetes/openshift-kube-apiserver/configflags" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/util/sets" - apiserverv1alpha1 "k8s.io/apiserver/pkg/apis/apiserver/v1alpha1" -) - -func ConfigToFlags(kubeAPIServerConfig *kubecontrolplanev1.KubeAPIServerConfig) ([]string, error) { - args := unmaskArgs(kubeAPIServerConfig.APIServerArguments) - - host, portString, err := net.SplitHostPort(kubeAPIServerConfig.ServingInfo.BindAddress) - if err != nil { - return nil, err - } - - // TODO this list (and the content below) will be used to drive a config struct and a reflective test matching config to flags - // these flags are overridden by a patch - // admission-control - // authentication-token-webhook-cache-ttl - // authentication-token-webhook-config-file - // authorization-mode - // authorization-policy-file - // authorization-webhook-cache-authorized-ttl - // authorization-webhook-cache-unauthorized-ttl - // authorization-webhook-config-file - // basic-auth-file - // enable-aggregator-routing - // enable-bootstrap-token-auth - // oidc-client-id - // oidc-groups-claim - // oidc-groups-prefix - // oidc-issuer-url - // oidc-required-claim - // oidc-signing-algs - // oidc-username-claim - // oidc-username-prefix - // service-account-lookup - // token-auth-file - - // alsologtostderr - don't know whether to change it - // apiserver-count - ignored, hopefully we don't have to fix via patch - // cert-dir - ignored because we set certs - - // these flags were never supported via config - // cloud-config - // cloud-provider - // cloud-provider-gce-lb-src-cidrs - // contention-profiling - // default-not-ready-toleration-seconds - // default-unreachable-toleration-seconds - // default-watch-cache-size - // delete-collection-workers - // deserialization-cache-size - // enable-garbage-collector - // etcd-compaction-interval - // etcd-count-metric-poll-period - // etcd-servers-overrides - // experimental-encryption-provider-config - // feature-gates - // http2-max-streams-per-connection - // insecure-bind-address - // kubelet-timeout - // log-backtrace-at - // log-dir - // log-flush-frequency - // logtostderr - // master-service-namespace - // max-connection-bytes-per-sec - // profiling - // request-timeout - // runtime-config - // service-account-api-audiences - // service-account-issuer - // service-account-key-file - // service-account-max-token-expiration - // service-account-signing-key-file - // stderrthreshold - // storage-versions - // target-ram-mb - // v - // version - // vmodule - // watch-cache - // watch-cache-sizes - - // TODO, we need to set these in order to enable the right admission plugins in each of the servers - // TODO this is needed for a viable cluster up - admissionFlags, err := admissionFlags(kubeAPIServerConfig.AdmissionConfig) - if err != nil { - return nil, err - } - for flag, value := range admissionFlags { - configflags.SetIfUnset(args, flag, value...) - } - configflags.SetIfUnset(args, "allow-privileged", "true") - configflags.SetIfUnset(args, "anonymous-auth", "false") - configflags.SetIfUnset(args, "authorization-mode", "RBAC", "Node") // overridden later, but this runs the poststarthook for bootstrapping RBAC - for flag, value := range configflags.AuditFlags(&kubeAPIServerConfig.AuditConfig, configflags.ArgsWithPrefix(args, "audit-")) { - configflags.SetIfUnset(args, flag, value...) - } - configflags.SetIfUnset(args, "bind-address", host) - configflags.SetIfUnset(args, "client-ca-file", kubeAPIServerConfig.ServingInfo.ClientCA) - configflags.SetIfUnset(args, "cors-allowed-origins", kubeAPIServerConfig.CORSAllowedOrigins...) - configflags.SetIfUnset(args, "enable-logs-handler", "false") - configflags.SetIfUnset(args, "enable-swagger-ui", "true") - configflags.SetIfUnset(args, "endpoint-reconciler-type", "lease") - configflags.SetIfUnset(args, "etcd-cafile", kubeAPIServerConfig.StorageConfig.CA) - configflags.SetIfUnset(args, "etcd-certfile", kubeAPIServerConfig.StorageConfig.CertFile) - configflags.SetIfUnset(args, "etcd-keyfile", kubeAPIServerConfig.StorageConfig.KeyFile) - configflags.SetIfUnset(args, "etcd-prefix", kubeAPIServerConfig.StorageConfig.StoragePrefix) - configflags.SetIfUnset(args, "etcd-servers", kubeAPIServerConfig.StorageConfig.URLs...) - configflags.SetIfUnset(args, "event-ttl", "3h") // set a TTL long enough to last for our CI tests so we see the first set of events. - configflags.SetIfUnset(args, "insecure-port", "0") - configflags.SetIfUnset(args, "kubelet-certificate-authority", kubeAPIServerConfig.KubeletClientInfo.CA) - configflags.SetIfUnset(args, "kubelet-client-certificate", kubeAPIServerConfig.KubeletClientInfo.CertFile) - configflags.SetIfUnset(args, "kubelet-client-key", kubeAPIServerConfig.KubeletClientInfo.KeyFile) - configflags.SetIfUnset(args, "kubelet-https", "true") - configflags.SetIfUnset(args, "kubelet-preferred-address-types", "Hostname", "InternalIP", "ExternalIP") - configflags.SetIfUnset(args, "kubelet-read-only-port", "0") - configflags.SetIfUnset(args, "kubernetes-service-node-port", "0") - configflags.SetIfUnset(args, "max-mutating-requests-inflight", fmt.Sprintf("%d", kubeAPIServerConfig.ServingInfo.MaxRequestsInFlight/2)) - configflags.SetIfUnset(args, "max-requests-inflight", fmt.Sprintf("%d", kubeAPIServerConfig.ServingInfo.MaxRequestsInFlight)) - configflags.SetIfUnset(args, "min-request-timeout", fmt.Sprintf("%d", kubeAPIServerConfig.ServingInfo.RequestTimeoutSeconds)) - configflags.SetIfUnset(args, "proxy-client-cert-file", kubeAPIServerConfig.AggregatorConfig.ProxyClientInfo.CertFile) - configflags.SetIfUnset(args, "proxy-client-key-file", kubeAPIServerConfig.AggregatorConfig.ProxyClientInfo.KeyFile) - configflags.SetIfUnset(args, "requestheader-allowed-names", kubeAPIServerConfig.AuthConfig.RequestHeader.ClientCommonNames...) - configflags.SetIfUnset(args, "requestheader-client-ca-file", kubeAPIServerConfig.AuthConfig.RequestHeader.ClientCA) - configflags.SetIfUnset(args, "requestheader-extra-headers-prefix", kubeAPIServerConfig.AuthConfig.RequestHeader.ExtraHeaderPrefixes...) - configflags.SetIfUnset(args, "requestheader-group-headers", kubeAPIServerConfig.AuthConfig.RequestHeader.GroupHeaders...) - configflags.SetIfUnset(args, "requestheader-username-headers", kubeAPIServerConfig.AuthConfig.RequestHeader.UsernameHeaders...) - configflags.SetIfUnset(args, "secure-port", portString) - configflags.SetIfUnset(args, "service-cluster-ip-range", kubeAPIServerConfig.ServicesSubnet) - configflags.SetIfUnset(args, "service-node-port-range", kubeAPIServerConfig.ServicesNodePortRange) - configflags.SetIfUnset(args, "storage-backend", "etcd3") - configflags.SetIfUnset(args, "storage-media-type", "application/vnd.kubernetes.protobuf") - configflags.SetIfUnset(args, "tls-cert-file", kubeAPIServerConfig.ServingInfo.CertFile) - configflags.SetIfUnset(args, "tls-cipher-suites", kubeAPIServerConfig.ServingInfo.CipherSuites...) - configflags.SetIfUnset(args, "tls-min-version", kubeAPIServerConfig.ServingInfo.MinTLSVersion) - configflags.SetIfUnset(args, "tls-private-key-file", kubeAPIServerConfig.ServingInfo.KeyFile) - configflags.SetIfUnset(args, "tls-sni-cert-key", sniCertKeys(kubeAPIServerConfig.ServingInfo.NamedCertificates)...) - configflags.SetIfUnset(args, "secure-port", portString) - - return configflags.ToFlagSlice(args), nil -} - -func admissionFlags(admissionConfig configv1.AdmissionConfig) (map[string][]string, error) { - args := map[string][]string{} - - upstreamAdmissionConfig, err := ConvertOpenshiftAdmissionConfigToKubeAdmissionConfig(admissionConfig.PluginConfig) - if err != nil { - return nil, err - } - configBytes, err := helpers.WriteYAML(upstreamAdmissionConfig, apiserverv1alpha1.AddToScheme) - if err != nil { - return nil, err - } - - tempFile, err := ioutil.TempFile("", "kubeapiserver-admission-config.yaml") - if err != nil { - return nil, err - } - if _, err := tempFile.Write(configBytes); err != nil { - return nil, err - } - tempFile.Close() - - configflags.SetIfUnset(args, "admission-control-config-file", tempFile.Name()) - configflags.SetIfUnset(args, "disable-admission-plugins", admissionConfig.DisabledAdmissionPlugins...) - configflags.SetIfUnset(args, "enable-admission-plugins", admissionConfig.EnabledAdmissionPlugins...) - - return args, nil -} - -func sniCertKeys(namedCertificates []configv1.NamedCertificate) []string { - args := []string{} - for _, nc := range namedCertificates { - names := "" - if len(nc.Names) > 0 { - names = ":" + strings.Join(nc.Names, ",") - } - args = append(args, fmt.Sprintf("%s,%s%s", nc.CertFile, nc.KeyFile, names)) - } - return args -} - -func unmaskArgs(args map[string]kubecontrolplanev1.Arguments) map[string][]string { - ret := map[string][]string{} - for key, slice := range args { - for _, val := range slice { - ret[key] = append(ret[key], val) - } - } - return ret -} - -func ConvertOpenshiftAdmissionConfigToKubeAdmissionConfig(in map[string]configv1.AdmissionPluginConfig) (*apiserverv1alpha1.AdmissionConfiguration, error) { - ret := &apiserverv1alpha1.AdmissionConfiguration{} - - for _, pluginName := range sets.StringKeySet(in).List() { - kubeConfig := apiserverv1alpha1.AdmissionPluginConfiguration{ - Name: pluginName, - Path: in[pluginName].Location, - Configuration: &runtime.Unknown{ - Raw: in[pluginName].Configuration.Raw, - }, - } - - ret.Plugins = append(ret.Plugins, kubeConfig) - } - - return ret, nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/flags_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/flags_test.go deleted file mode 100644 index 3241b9b43..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/flags_test.go +++ /dev/null @@ -1,26 +0,0 @@ -package openshiftkubeapiserver - -import ( - "testing" - - "github.com/openshift/api/config/v1" -) - -func TestSNICertKeys(t *testing.T) { - testCases := []struct { - names []string - expected string - }{ - {names: []string{"foo"}, expected: "secret.crt,secret.key:foo"}, - {names: []string{"foo", "bar"}, expected: "secret.crt,secret.key:foo,bar"}, - {expected: "secret.crt,secret.key"}, - } - for _, tc := range testCases { - t.Run("", func(t *testing.T) { - result := sniCertKeys([]v1.NamedCertificate{{Names: tc.names, CertInfo: v1.CertInfo{CertFile: "secret.crt", KeyFile: "secret.key"}}}) - if len(result) != 1 || result[0] != tc.expected { - t.Errorf("expected: %v, actual: %v", []string{tc.expected}, result) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/handlers.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/handlers.go deleted file mode 100644 index fd3ece7fc..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/handlers.go +++ /dev/null @@ -1,177 +0,0 @@ -package openshiftkubeapiserver - -import ( - "bytes" - "encoding/json" - "errors" - "fmt" - "net/http" - "regexp" - - "github.com/emicklei/go-restful" - "k8s.io/klog" - - authenticationv1 "k8s.io/api/authentication/v1" - kapierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/sets" - kauthorizer "k8s.io/apiserver/pkg/authorization/authorizer" - apirequest "k8s.io/apiserver/pkg/endpoints/request" - "k8s.io/kubernetes/pkg/api/legacyscheme" - coreapi "k8s.io/kubernetes/pkg/apis/core" - - authorizationv1 "github.com/openshift/api/authorization/v1" - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" -) - -type userAgentFilter struct { - regex *regexp.Regexp - message string - verbs sets.String -} - -func newUserAgentFilter(config kubecontrolplanev1.UserAgentMatchRule) (userAgentFilter, error) { - regex, err := regexp.Compile(config.Regex) - if err != nil { - return userAgentFilter{}, err - } - userAgentFilter := userAgentFilter{regex: regex, verbs: sets.NewString(config.HTTPVerbs...)} - - return userAgentFilter, nil -} - -func (f *userAgentFilter) matches(verb, userAgent string) bool { - if len(f.verbs) > 0 && !f.verbs.Has(verb) { - return false - } - - return f.regex.MatchString(userAgent) -} - -// versionSkewFilter adds a filter that may deny requests from skewed -// oc clients, since we know that those clients will strip unknown fields which can lead to unexpected outcomes -func versionSkewFilter(handler http.Handler, userAgentMatchingConfig kubecontrolplanev1.UserAgentMatchingConfig) http.Handler { - filterConfig := userAgentMatchingConfig - if len(filterConfig.RequiredClients) == 0 && len(filterConfig.DeniedClients) == 0 { - return handler - } - - defaultMessage := filterConfig.DefaultRejectionMessage - if len(defaultMessage) == 0 { - defaultMessage = "the cluster administrator has disabled access for this client, please upgrade or consult your administrator" - } - - // the structure of the legacyClientPolicyConfig is pretty easy to write, but its inefficient to use at runtime - // pre-process the config elements to make a more efficicent structure. - allowedFilters := []userAgentFilter{} - deniedFilters := []userAgentFilter{} - for _, config := range filterConfig.RequiredClients { - userAgentFilter, err := newUserAgentFilter(config) - if err != nil { - klog.Errorf("Failure to compile User-Agent regex %v: %v", config.Regex, err) - continue - } - - allowedFilters = append(allowedFilters, userAgentFilter) - } - for _, config := range filterConfig.DeniedClients { - userAgentFilter, err := newUserAgentFilter(config.UserAgentMatchRule) - if err != nil { - klog.Errorf("Failure to compile User-Agent regex %v: %v", config.Regex, err) - continue - } - userAgentFilter.message = config.RejectionMessage - if len(userAgentFilter.message) == 0 { - userAgentFilter.message = defaultMessage - } - - deniedFilters = append(deniedFilters, userAgentFilter) - } - - return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - ctx := req.Context() - if requestInfo, ok := apirequest.RequestInfoFrom(ctx); ok && requestInfo != nil && !requestInfo.IsResourceRequest { - handler.ServeHTTP(w, req) - return - } - - userAgent := req.Header.Get("User-Agent") - - if len(allowedFilters) > 0 { - foundMatch := false - for _, filter := range allowedFilters { - if filter.matches(req.Method, userAgent) { - foundMatch = true - break - } - } - - if !foundMatch { - forbidden(defaultMessage, nil, w, req) - return - } - } - - for _, filter := range deniedFilters { - if filter.matches(req.Method, userAgent) { - forbidden(filter.message, nil, w, req) - return - } - } - - handler.ServeHTTP(w, req) - }) -} - -// legacyImpersonateUserScopeHeader is the header name older servers were using -// just for scopes, so we need to translate it from clients that may still be -// using it. -const legacyImpersonateUserScopeHeader = "Impersonate-User-Scope" - -// translateLegacyScopeImpersonation is a filter that will translates user scope impersonation for openshift into the equivalent kube headers. -func translateLegacyScopeImpersonation(handler http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - for _, scope := range req.Header[legacyImpersonateUserScopeHeader] { - req.Header[authenticationv1.ImpersonateUserExtraHeaderPrefix+authorizationv1.ScopesKey] = - append(req.Header[authenticationv1.ImpersonateUserExtraHeaderPrefix+authorizationv1.ScopesKey], scope) - } - - handler.ServeHTTP(w, req) - }) -} - -// forbidden renders a simple forbidden error to the response -func forbidden(reason string, attributes kauthorizer.Attributes, w http.ResponseWriter, req *http.Request) { - resource := "" - group := "" - name := "" - // the attributes can be empty for two basic reasons: - // 1. malformed API request - // 2. not an API request at all - // In these cases, just assume default that will work better than nothing - if attributes != nil { - group = attributes.GetAPIGroup() - resource = attributes.GetResource() - name = attributes.GetName() - } - - // Reason is an opaque string that describes why access is allowed or forbidden (forbidden by the time we reach here). - // We don't have direct access to kind or name (not that those apply either in the general case) - // We create a NewForbidden to stay close the API, but then we override the message to get a serialization - // that makes sense when a human reads it. - forbiddenError := kapierrors.NewForbidden(schema.GroupResource{Group: group, Resource: resource}, name, errors.New("") /*discarded*/) - forbiddenError.ErrStatus.Message = reason - - formatted := &bytes.Buffer{} - output, err := runtime.Encode(legacyscheme.Codecs.LegacyCodec(coreapi.SchemeGroupVersion), &forbiddenError.ErrStatus) - if err != nil { - fmt.Fprintf(formatted, "%s", forbiddenError.Error()) - } else { - json.Indent(formatted, output, "", " ") - } - - w.Header().Set("Content-Type", restful.MIME_JSON) - w.WriteHeader(http.StatusForbidden) - w.Write(formatted.Bytes()) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/handlers_test.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/handlers_test.go deleted file mode 100644 index 40b797948..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/handlers_test.go +++ /dev/null @@ -1,268 +0,0 @@ -package openshiftkubeapiserver - -import ( - "io/ioutil" - "net/http" - "net/http/httptest" - "strings" - "testing" - - "k8s.io/apimachinery/pkg/util/sets" - apifilters "k8s.io/apiserver/pkg/endpoints/filters" - apiserver "k8s.io/apiserver/pkg/server" - "k8s.io/kubernetes/pkg/api/legacyscheme" - - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" -) - -var ( - currentOCKubeResources = "oc/v1.2.0 (linux/amd64) kubernetes/bc4550d" - currentOCOriginResources = "oc/v1.1.3 (linux/amd64) openshift/b348c2f" - currentOpenshiftKubectlKubeResources = "openshift/v1.2.0 (linux/amd64) kubernetes/bc4550d" - currentOpenshiftKubectlOriginResources = "openshift/v1.1.3 (linux/amd64) openshift/b348c2f" - currentOADMKubeResources = "oadm/v1.2.0 (linux/amd64) kubernetes/bc4550d" - currentOADMOriginResources = "oadm/v1.1.3 (linux/amd64) openshift/b348c2f" - currentVersionUserAgents = []string{ - currentOCKubeResources, currentOCOriginResources, currentOpenshiftKubectlKubeResources, currentOpenshiftKubectlOriginResources, currentOADMKubeResources, currentOADMOriginResources} - - olderOCKubeResources = "oc/v1.1.10 (linux/amd64) kubernetes/bc4550d" - olderOCOriginResources = "oc/v1.1.1 (linux/amd64) openshift/b348c2f" - oldestOCOriginResources = "oc/v1.0.1 (linux/amd64) openshift/b348c2f" - olderOpenshiftKubectlKubeResources = "openshift/v1.1.10 (linux/amd64) kubernetes/bc4550d" - olderOpenshiftKubectlOriginResources = "openshift/v1.1.1 (linux/amd64) openshift/b348c2f" - olderOADMKubeResources = "oadm/v1.1.10 (linux/amd64) kubernetes/bc4550d" - olderOADMOriginResources = "oadm/v1.1.1 (linux/amd64) openshift/b348c2f" - olderVersionUserAgents = []string{ - olderOCKubeResources, olderOCOriginResources, oldestOCOriginResources, olderOpenshiftKubectlKubeResources, olderOpenshiftKubectlOriginResources, olderOADMKubeResources, olderOADMOriginResources} - - newerOCKubeResources = "oc/v1.2.1 (linux/amd64) kubernetes/bc4550d" - newerOCOriginResources = "oc/v1.1.4 (linux/amd64) openshift/b348c2f" - newerOpenshiftKubectlKubeResources = "openshift/v1.2.1 (linux/amd64) kubernetes/bc4550d" - newerOpenshiftKubectlOriginResources = "openshift/v1.1.4 (linux/amd64) openshift/b348c2f" - newerOADMKubeResources = "oadm/v1.2.1 (linux/amd64) kubernetes/bc4550d" - newerOADMOriginResources = "oadm/v1.1.4 (linux/amd64) openshift/b348c2f" - newerVersionUserAgents = []string{ - newerOCKubeResources, newerOCOriginResources, newerOpenshiftKubectlKubeResources, newerOpenshiftKubectlOriginResources, newerOADMKubeResources, newerOADMOriginResources} - - notOCVersion = "something else" - - openshiftServerVersion = `v1\.1\.3` - kubeServerVersion = `v1\.2\.0` -) - -// variants I know I have to worry about -// 1. oc kube resources: oc/v1.2.0 (linux/amd64) kubernetes/bc4550d -// 2. oc openshift resources: oc/v1.1.3 (linux/amd64) openshift/b348c2f -// 3. openshift kubectl kube resources: openshift/v1.2.0 (linux/amd64) kubernetes/bc4550d -// 4. openshift kubectl openshift resources: openshift/v1.1.3 (linux/amd64) openshift/b348c2f -// 5. oadm kube resources: oadm/v1.2.0 (linux/amd64) kubernetes/bc4550d -// 6. oadm openshift resources: oadm/v1.1.3 (linux/amd64) openshift/b348c2f -// 7. openshift cli kube resources: openshift/v1.2.0 (linux/amd64) kubernetes/bc4550d -// 8. openshift cli openshift resources: openshift/v1.1.3 (linux/amd64) openshift/b348c2f -// var ( -// kubeStyleUserAgent = regexp.MustCompile(`\w+/v([\w\.]+) \(.+/.+\) kubernetes/\w{7}`) -// openshiftStyleUserAgent = regexp.MustCompile(`\w+/v([\w\.]+) \(.+/.+\) openshift/\w{7}`) -// ) - -type versionSkewTestCase struct { - name string - userAgents []string - failureMessage string - methods []string -} - -func (tc versionSkewTestCase) Run(url string, t *testing.T) { - for _, method := range tc.methods { - for _, userAgent := range tc.userAgents { - req, err := http.NewRequest(method, url, nil) - if err != nil { - t.Errorf("%s: unexpected error: %v", tc.name, err) - return - } - req.Header.Add("User-Agent", userAgent) - resp, err := http.DefaultClient.Do(req) - if err != nil { - t.Errorf("%s: unexpected error: %v", tc.name, err) - return - } - if len(tc.failureMessage) == 0 { - if resp.StatusCode != http.StatusOK { - t.Errorf("%s: %s: unexpected status: %v", tc.name, userAgent, resp.StatusCode) - return - } - - } else { - if resp.StatusCode != http.StatusForbidden { - t.Errorf("%s: %s: unexpected status: %v", tc.name, userAgent, resp.StatusCode) - return - } - - body, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("%s: unexpected error: %v", tc.name, err) - return - } - - if !strings.Contains(string(body), tc.failureMessage) { - t.Errorf("%s: expected %v, got %v", tc.name, tc.failureMessage, string(body)) - return - } - } - } - } - -} - -func TestVersionSkewFilterDenyOld(t *testing.T) { - verbs := []string{"PATCH", "POST"} - doNothingHandler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - }) - userAgentMatchingConfig := kubecontrolplanev1.UserAgentMatchingConfig{} - userAgentMatchingConfig.DeniedClients = []kubecontrolplanev1.UserAgentDenyRule{ - {UserAgentMatchRule: kubecontrolplanev1.UserAgentMatchRule{Regex: `\w+/v1\.1\.10 \(.+/.+\) kubernetes/\w{7}`, HTTPVerbs: verbs}, RejectionMessage: "rejected for reasons!"}, - {UserAgentMatchRule: kubecontrolplanev1.UserAgentMatchRule{Regex: `\w+/v(?:(?:1\.1\.1)|(?:1\.0\.1)) \(.+/.+\) openshift/\w{7}`, HTTPVerbs: verbs}, RejectionMessage: "rejected for reasons!"}, - } - handler := versionSkewFilter(doNothingHandler, userAgentMatchingConfig) - server := httptest.NewServer(testHandlerChain(handler)) - defer server.Close() - - testCases := []versionSkewTestCase{ - { - name: "missing", - userAgents: []string{""}, - methods: verbs, - }, - { - name: "not oc", - userAgents: []string{notOCVersion}, - methods: verbs, - }, - { - name: "older", - userAgents: olderVersionUserAgents, - failureMessage: "rejected for reasons!", - methods: verbs, - }, - { - name: "newer", - userAgents: newerVersionUserAgents, - methods: verbs, - }, - { - name: "exact", - userAgents: currentVersionUserAgents, - methods: verbs, - }, - } - - for _, tc := range testCases { - tc.Run(server.URL+"/api/v1/namespaces", t) - } -} - -func TestVersionSkewFilterDenySkewed(t *testing.T) { - verbs := []string{"PUT", "DELETE"} - doNothingHandler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - }) - userAgentMatchingConfig := kubecontrolplanev1.UserAgentMatchingConfig{} - userAgentMatchingConfig.RequiredClients = []kubecontrolplanev1.UserAgentMatchRule{ - {Regex: `\w+/` + kubeServerVersion + ` \(.+/.+\) kubernetes/\w{7}`, HTTPVerbs: verbs}, - {Regex: `\w+/` + openshiftServerVersion + ` \(.+/.+\) openshift/\w{7}`, HTTPVerbs: verbs}, - } - userAgentMatchingConfig.DefaultRejectionMessage = "rejected for reasons!" - handler := versionSkewFilter(doNothingHandler, userAgentMatchingConfig) - server := httptest.NewServer(testHandlerChain(handler)) - defer server.Close() - - testCases := []versionSkewTestCase{ - { - name: "missing", - userAgents: []string{""}, - failureMessage: "rejected for reasons!", - methods: verbs, - }, - { - name: "not oc", - userAgents: []string{notOCVersion}, - failureMessage: "rejected for reasons!", - methods: verbs, - }, - { - name: "older", - userAgents: olderVersionUserAgents, - failureMessage: "rejected for reasons!", - methods: verbs, - }, - { - name: "newer", - userAgents: newerVersionUserAgents, - failureMessage: "rejected for reasons!", - methods: verbs, - }, - { - name: "current", - userAgents: currentVersionUserAgents, - methods: verbs, - }, - } - - for _, tc := range testCases { - tc.Run(server.URL+"/api/v1/namespaces", t) - } -} - -func TestVersionSkewFilterSkippedOnNonAPIRequest(t *testing.T) { - verbs := []string{"PUT", "DELETE"} - doNothingHandler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - }) - userAgentMatchingConfig := kubecontrolplanev1.UserAgentMatchingConfig{} - userAgentMatchingConfig.RequiredClients = []kubecontrolplanev1.UserAgentMatchRule{ - {Regex: `\w+/` + kubeServerVersion + ` \(.+/.+\) kubernetes/\w{7}`, HTTPVerbs: verbs}, - {Regex: `\w+/` + openshiftServerVersion + ` \(.+/.+\) openshift/\w{7}`, HTTPVerbs: verbs}, - } - userAgentMatchingConfig.DefaultRejectionMessage = "rejected for reasons!" - - handler := versionSkewFilter(doNothingHandler, userAgentMatchingConfig) - server := httptest.NewServer(testHandlerChain(handler)) - defer server.Close() - - testCases := []versionSkewTestCase{ - { - name: "missing", - userAgents: []string{""}, - methods: verbs, - }, - { - name: "not oc", - userAgents: []string{notOCVersion}, - methods: verbs, - }, - { - name: "older", - userAgents: olderVersionUserAgents, - methods: verbs, - }, - { - name: "newer", - userAgents: newerVersionUserAgents, - methods: verbs, - }, - { - name: "current", - userAgents: currentVersionUserAgents, - methods: verbs, - }, - } - - for _, tc := range testCases { - tc.Run(server.URL+"/api/v1", t) - } -} - -func testHandlerChain(handler http.Handler) http.Handler { - kgenericconfig := apiserver.NewConfig(legacyscheme.Codecs) - kgenericconfig.LegacyAPIGroupPrefixes = sets.NewString(apiserver.DefaultLegacyAPIPrefix) - - handler = apifilters.WithRequestInfo(handler, apiserver.NewRequestInfoResolver(kgenericconfig)) - return handler -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/nonapiserver.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/nonapiserver.go deleted file mode 100644 index 8fe2aeceb..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/nonapiserver.go +++ /dev/null @@ -1,102 +0,0 @@ -package openshiftkubeapiserver - -import ( - "net/http" - - "k8s.io/klog" - - genericapiserver "k8s.io/apiserver/pkg/server" - genericmux "k8s.io/apiserver/pkg/server/mux" - "k8s.io/client-go/informers" - - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" - osinv1 "github.com/openshift/api/osin/v1" -) - -func NewOpenshiftNonAPIConfig(generiConfig *genericapiserver.Config, kubeInformers informers.SharedInformerFactory, oauthConfig *osinv1.OAuthConfig, authConfig kubecontrolplanev1.MasterAuthConfig) (*OpenshiftNonAPIConfig, error) { - var err error - ret := &OpenshiftNonAPIConfig{ - GenericConfig: &genericapiserver.RecommendedConfig{ - Config: *generiConfig, - SharedInformerFactory: kubeInformers, - }, - } - ret.ExtraConfig.OAuthMetadata, _, err = prepOauthMetadata(oauthConfig, authConfig.OAuthMetadataFile) - if err != nil { - // invalid metadata must not prevent the kube api server from starting - klog.Errorf("Unable to initialize OAuth authorization server metadata: %v", err) - } - - return ret, nil -} - -type NonAPIExtraConfig struct { - OAuthMetadata []byte -} - -type OpenshiftNonAPIConfig struct { - GenericConfig *genericapiserver.RecommendedConfig - ExtraConfig NonAPIExtraConfig -} - -// OpenshiftNonAPIServer serves non-API endpoints for openshift. -type OpenshiftNonAPIServer struct { - GenericAPIServer *genericapiserver.GenericAPIServer -} - -type completedOpenshiftNonAPIConfig struct { - GenericConfig genericapiserver.CompletedConfig - ExtraConfig *NonAPIExtraConfig -} - -type CompletedOpenshiftNonAPIConfig struct { - // Embed a private pointer that cannot be instantiated outside of this package. - *completedOpenshiftNonAPIConfig -} - -// Complete fills in any fields not set that are required to have valid data. It's mutating the receiver. -func (c *OpenshiftNonAPIConfig) Complete() completedOpenshiftNonAPIConfig { - cfg := completedOpenshiftNonAPIConfig{ - c.GenericConfig.Complete(), - &c.ExtraConfig, - } - - return cfg -} - -func (c completedOpenshiftNonAPIConfig) New(delegationTarget genericapiserver.DelegationTarget) (*OpenshiftNonAPIServer, error) { - genericServer, err := c.GenericConfig.New("openshift-non-api-routes", delegationTarget) - if err != nil { - return nil, err - } - - s := &OpenshiftNonAPIServer{ - GenericAPIServer: genericServer, - } - - // TODO move this up to the spot where we wire the oauth endpoint - // Set up OAuth metadata only if we are configured to use OAuth - if len(c.ExtraConfig.OAuthMetadata) > 0 { - initOAuthAuthorizationServerMetadataRoute(s.GenericAPIServer.Handler.NonGoRestfulMux, c.ExtraConfig) - } - - return s, nil -} - -const ( - // Discovery endpoint for OAuth 2.0 Authorization Server Metadata - // See IETF Draft: - // https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2 - oauthMetadataEndpoint = "/.well-known/oauth-authorization-server" -) - -// initOAuthAuthorizationServerMetadataRoute initializes an HTTP endpoint for OAuth 2.0 Authorization Server Metadata discovery -// https://tools.ietf.org/id/draft-ietf-oauth-discovery-04.html#rfc.section.2 -// masterPublicURL should be internally and externally routable to allow all users to discover this information -func initOAuthAuthorizationServerMetadataRoute(mux *genericmux.PathRecorderMux, ExtraConfig *NonAPIExtraConfig) { - mux.UnlistedHandleFunc(oauthMetadataEndpoint, func(w http.ResponseWriter, req *http.Request) { - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusOK) - w.Write(ExtraConfig.OAuthMetadata) - }) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/paramtoken/paramtoken.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/paramtoken/paramtoken.go deleted file mode 100644 index 1993002e5..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/paramtoken/paramtoken.go +++ /dev/null @@ -1,45 +0,0 @@ -package paramtoken - -import ( - "net/http" - "strings" - - "k8s.io/apiserver/pkg/authentication/authenticator" - "k8s.io/apiserver/pkg/util/wsstream" -) - -// Authenticator provides a way to authenticate tokens provided as a parameter -// This only exists to allow websocket connections to use an API token, since they cannot set an Authorize header -// For this authenticator to work, tokens will be part of the request URL, and are more likely to be logged or otherwise exposed. -// Every effort should be made to filter tokens from being logged when using this authenticator. -type Authenticator struct { - // param is the query param to use as a token - param string - // auth is the token authenticator to use to validate the token - auth authenticator.Token - // removeParam indicates whether the parameter should be stripped from the incoming request - removeParam bool -} - -func New(param string, auth authenticator.Token, removeParam bool) *Authenticator { - return &Authenticator{param, auth, removeParam} -} - -func (a *Authenticator) AuthenticateRequest(req *http.Request) (*authenticator.Response, bool, error) { - // Only accept query param auth for websocket connections - if !wsstream.IsWebSocketRequest(req) { - return nil, false, nil - } - - q := req.URL.Query() - token := strings.TrimSpace(q.Get(a.param)) - if token == "" { - return nil, false, nil - } - authResponse, ok, err := a.auth.AuthenticateToken(req.Context(), token) - if ok && a.removeParam { - q.Del(a.param) - req.URL.RawQuery = q.Encode() - } - return authResponse, ok, err -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch.go deleted file mode 100644 index 1efa2393b..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch.go +++ /dev/null @@ -1,230 +0,0 @@ -package openshiftkubeapiserver - -import ( - "fmt" - "time" - - "k8s.io/apiserver/pkg/admission" - genericapiserver "k8s.io/apiserver/pkg/server" - clientgoinformers "k8s.io/client-go/informers" - kexternalinformers "k8s.io/client-go/informers" - corev1informers "k8s.io/client-go/informers/core/v1" - "k8s.io/client-go/rest" - "k8s.io/client-go/tools/cache" - "k8s.io/kubernetes/pkg/master" - "k8s.io/kubernetes/pkg/quota/v1/generic" - "k8s.io/kubernetes/pkg/quota/v1/install" - - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" - oauthclient "github.com/openshift/client-go/oauth/clientset/versioned" - oauthinformer "github.com/openshift/client-go/oauth/informers/externalversions" - quotaclient "github.com/openshift/client-go/quota/clientset/versioned" - quotainformer "github.com/openshift/client-go/quota/informers/externalversions" - quotav1informer "github.com/openshift/client-go/quota/informers/externalversions/quota/v1" - securityv1client "github.com/openshift/client-go/security/clientset/versioned" - securityv1informer "github.com/openshift/client-go/security/informers/externalversions" - userclient "github.com/openshift/client-go/user/clientset/versioned" - userinformer "github.com/openshift/client-go/user/informers/externalversions" - "github.com/openshift/library-go/pkg/apiserver/admission/admissionrestconfig" - "github.com/openshift/library-go/pkg/apiserver/apiserverconfig" - "github.com/openshift/library-go/pkg/quota/clusterquotamapping" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/usercache" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/imagepolicy/imagereferencemutators" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/quota/clusterresourcequota" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/scheduler/nodeenv" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/security/sccadmission" -) - -type KubeAPIServerServerPatchContext struct { - initialized bool - - postStartHooks map[string]genericapiserver.PostStartHookFunc - informerStartFuncs []func(stopCh <-chan struct{}) -} - -type KubeAPIServerConfigFunc func(config *genericapiserver.Config, versionedInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) (genericapiserver.DelegationTarget, error) - -func NewOpenShiftKubeAPIServerConfigPatch(delegateAPIServer genericapiserver.DelegationTarget, kubeAPIServerConfig *kubecontrolplanev1.KubeAPIServerConfig) (KubeAPIServerConfigFunc, *KubeAPIServerServerPatchContext) { - patchContext := &KubeAPIServerServerPatchContext{ - postStartHooks: map[string]genericapiserver.PostStartHookFunc{}, - } - return func(genericConfig *genericapiserver.Config, kubeInformers clientgoinformers.SharedInformerFactory, pluginInitializers *[]admission.PluginInitializer) (genericapiserver.DelegationTarget, error) { - kubeAPIServerInformers, err := NewInformers(kubeInformers, genericConfig.LoopbackClientConfig) - if err != nil { - return nil, err - } - - // AUTHENTICATOR - authenticator, postStartHooks, err := NewAuthenticator( - kubeAPIServerConfig.ServingInfo.ServingInfo, - kubeAPIServerConfig.ServiceAccountPublicKeyFiles, kubeAPIServerConfig.OAuthConfig, kubeAPIServerConfig.AuthConfig, - genericConfig.LoopbackClientConfig, - kubeAPIServerInformers.KubernetesInformers.Core().V1().Pods().Lister(), - kubeAPIServerInformers.KubernetesInformers.Core().V1().Secrets().Lister(), - kubeAPIServerInformers.KubernetesInformers.Core().V1().ServiceAccounts().Lister(), - kubeAPIServerInformers.OpenshiftOAuthInformers.Oauth().V1().OAuthClients().Lister(), - kubeAPIServerInformers.OpenshiftUserInformers.User().V1().Groups()) - if err != nil { - return nil, err - } - genericConfig.Authentication.Authenticator = authenticator - for key, fn := range postStartHooks { - patchContext.postStartHooks[key] = fn - } - // END AUTHENTICATOR - - // AUTHORIZER - genericConfig.RequestInfoResolver = apiserverconfig.OpenshiftRequestInfoResolver() - authorizer := NewAuthorizer(kubeInformers) - genericConfig.Authorization.Authorizer = authorizer - // END AUTHORIZER - - // Inject OpenShift API long running endpoints (like for binary builds). - // TODO: We should disable the timeout code for aggregated endpoints as this can cause problems when upstream add additional endpoints. - genericConfig.LongRunningFunc = apiserverconfig.IsLongRunningRequest - - // ADMISSION - clusterQuotaMappingController := newClusterQuotaMappingController(kubeAPIServerInformers.KubernetesInformers.Core().V1().Namespaces(), kubeAPIServerInformers.OpenshiftQuotaInformers.Quota().V1().ClusterResourceQuotas()) - patchContext.postStartHooks["quota.openshift.io-clusterquotamapping"] = func(context genericapiserver.PostStartHookContext) error { - go clusterQuotaMappingController.Run(5, context.StopCh) - return nil - } - - *pluginInitializers = append(*pluginInitializers, - imagepolicy.NewInitializer(imagereferencemutators.KubeImageMutators{}, kubeAPIServerConfig.ImagePolicyConfig.InternalRegistryHostname), - restrictusers.NewInitializer(kubeAPIServerInformers.GetOpenshiftUserInformers()), - sccadmission.NewInitializer(kubeAPIServerInformers.GetOpenshiftSecurityInformers().Security().V1().SecurityContextConstraints()), - clusterresourcequota.NewInitializer( - kubeAPIServerInformers.GetOpenshiftQuotaInformers().Quota().V1().ClusterResourceQuotas(), - clusterQuotaMappingController.GetClusterQuotaMapper(), - generic.NewRegistry(install.NewQuotaConfigurationForAdmission().Evaluators()), - ), - nodeenv.NewInitializer(kubeAPIServerConfig.ProjectConfig.DefaultNodeSelector), - admissionrestconfig.NewInitializer(*rest.CopyConfig(genericConfig.LoopbackClientConfig)), - ) - // END ADMISSION - - // HANDLER CHAIN (with oauth server and web console) - genericConfig.BuildHandlerChainFunc, err = BuildHandlerChain(genericConfig, kubeAPIServerConfig.OAuthConfig, kubeAPIServerConfig.AuthConfig, kubeAPIServerConfig.UserAgentMatchingConfig, kubeAPIServerConfig.ConsolePublicURL) - if err != nil { - return nil, err - } - for key, fn := range postStartHooks { - patchContext.postStartHooks[key] = fn - } - // END HANDLER CHAIN - - // CONSTRUCT DELEGATE - nonAPIServerConfig, err := NewOpenshiftNonAPIConfig(genericConfig, kubeInformers, kubeAPIServerConfig.OAuthConfig, kubeAPIServerConfig.AuthConfig) - if err != nil { - return nil, err - } - openshiftNonAPIServer, err := nonAPIServerConfig.Complete().New(delegateAPIServer) - if err != nil { - return nil, err - } - // END CONSTRUCT DELEGATE - - patchContext.informerStartFuncs = append(patchContext.informerStartFuncs, kubeAPIServerInformers.Start) - patchContext.initialized = true - - return openshiftNonAPIServer.GenericAPIServer, nil - }, patchContext -} - -func (c *KubeAPIServerServerPatchContext) PatchServer(server *master.Master) error { - if !c.initialized { - return fmt.Errorf("not initialized with config") - } - - for name, fn := range c.postStartHooks { - server.GenericAPIServer.AddPostStartHookOrDie(name, fn) - } - server.GenericAPIServer.AddPostStartHookOrDie("openshift.io-startkubeinformers", func(context genericapiserver.PostStartHookContext) error { - for _, fn := range c.informerStartFuncs { - fn(context.StopCh) - } - return nil - }) - - return nil -} - -// NewInformers is only exposed for the build's integration testing until it can be fixed more appropriately. -func NewInformers(versionedInformers clientgoinformers.SharedInformerFactory, loopbackClientConfig *rest.Config) (*KubeAPIServerInformers, error) { - // ClusterResourceQuota is served using CRD resource any status update must use JSON - jsonLoopbackClientConfig := rest.CopyConfig(loopbackClientConfig) - jsonLoopbackClientConfig.ContentConfig.AcceptContentTypes = "application/json" - jsonLoopbackClientConfig.ContentConfig.ContentType = "application/json" - - oauthClient, err := oauthclient.NewForConfig(loopbackClientConfig) - if err != nil { - return nil, err - } - quotaClient, err := quotaclient.NewForConfig(jsonLoopbackClientConfig) - if err != nil { - return nil, err - } - securityClient, err := securityv1client.NewForConfig(jsonLoopbackClientConfig) - if err != nil { - return nil, err - } - userClient, err := userclient.NewForConfig(loopbackClientConfig) - if err != nil { - return nil, err - } - - // TODO find a single place to create and start informers. During the 1.7 rebase this will come more naturally in a config object, - // before then we should try to eliminate our direct to storage access. It's making us do weird things. - const defaultInformerResyncPeriod = 10 * time.Minute - - ret := &KubeAPIServerInformers{ - KubernetesInformers: versionedInformers, - OpenshiftOAuthInformers: oauthinformer.NewSharedInformerFactory(oauthClient, defaultInformerResyncPeriod), - OpenshiftQuotaInformers: quotainformer.NewSharedInformerFactory(quotaClient, defaultInformerResyncPeriod), - OpenshiftSecurityInformers: securityv1informer.NewSharedInformerFactory(securityClient, defaultInformerResyncPeriod), - OpenshiftUserInformers: userinformer.NewSharedInformerFactory(userClient, defaultInformerResyncPeriod), - } - if err := ret.OpenshiftUserInformers.User().V1().Groups().Informer().AddIndexers(cache.Indexers{ - usercache.ByUserIndexName: usercache.ByUserIndexKeys, - }); err != nil { - return nil, err - } - - return ret, nil -} - -type KubeAPIServerInformers struct { - KubernetesInformers kexternalinformers.SharedInformerFactory - OpenshiftOAuthInformers oauthinformer.SharedInformerFactory - OpenshiftQuotaInformers quotainformer.SharedInformerFactory - OpenshiftSecurityInformers securityv1informer.SharedInformerFactory - OpenshiftUserInformers userinformer.SharedInformerFactory -} - -func (i *KubeAPIServerInformers) GetKubernetesInformers() kexternalinformers.SharedInformerFactory { - return i.KubernetesInformers -} -func (i *KubeAPIServerInformers) GetOpenshiftQuotaInformers() quotainformer.SharedInformerFactory { - return i.OpenshiftQuotaInformers -} -func (i *KubeAPIServerInformers) GetOpenshiftSecurityInformers() securityv1informer.SharedInformerFactory { - return i.OpenshiftSecurityInformers -} -func (i *KubeAPIServerInformers) GetOpenshiftUserInformers() userinformer.SharedInformerFactory { - return i.OpenshiftUserInformers -} - -func (i *KubeAPIServerInformers) Start(stopCh <-chan struct{}) { - i.KubernetesInformers.Start(stopCh) - i.OpenshiftOAuthInformers.Start(stopCh) - i.OpenshiftQuotaInformers.Start(stopCh) - i.OpenshiftSecurityInformers.Start(stopCh) - i.OpenshiftUserInformers.Start(stopCh) -} - -func newClusterQuotaMappingController(nsInternalInformer corev1informers.NamespaceInformer, clusterQuotaInformer quotav1informer.ClusterResourceQuotaInformer) *clusterquotamapping.ClusterQuotaMappingController { - return clusterquotamapping.NewClusterQuotaMappingController(nsInternalInformer, clusterQuotaInformer) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_authenticator.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_authenticator.go deleted file mode 100644 index e2dd13de1..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_authenticator.go +++ /dev/null @@ -1,220 +0,0 @@ -package openshiftkubeapiserver - -import ( - "fmt" - "time" - - "k8s.io/apiserver/pkg/authentication/authenticator" - "k8s.io/apiserver/pkg/authentication/group" - "k8s.io/apiserver/pkg/authentication/request/anonymous" - "k8s.io/apiserver/pkg/authentication/request/bearertoken" - "k8s.io/apiserver/pkg/authentication/request/headerrequest" - "k8s.io/apiserver/pkg/authentication/request/union" - "k8s.io/apiserver/pkg/authentication/request/websocket" - x509request "k8s.io/apiserver/pkg/authentication/request/x509" - "k8s.io/apiserver/pkg/authentication/token/cache" - tokencache "k8s.io/apiserver/pkg/authentication/token/cache" - tokenunion "k8s.io/apiserver/pkg/authentication/token/union" - genericapiserver "k8s.io/apiserver/pkg/server" - "k8s.io/apiserver/pkg/server/certs" - webhooktoken "k8s.io/apiserver/plugin/pkg/authenticator/token/webhook" - kclientsetexternal "k8s.io/client-go/kubernetes" - corev1listers "k8s.io/client-go/listers/core/v1" - "k8s.io/client-go/rest" - "k8s.io/client-go/util/keyutil" - sacontroller "k8s.io/kubernetes/pkg/controller/serviceaccount" - "k8s.io/kubernetes/pkg/serviceaccount" - - configv1 "github.com/openshift/api/config/v1" - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" - osinv1 "github.com/openshift/api/osin/v1" - oauthclient "github.com/openshift/client-go/oauth/clientset/versioned/typed/oauth/v1" - oauthclientlister "github.com/openshift/client-go/oauth/listers/oauth/v1" - userclient "github.com/openshift/client-go/user/clientset/versioned" - usertypedclient "github.com/openshift/client-go/user/clientset/versioned/typed/user/v1" - userinformer "github.com/openshift/client-go/user/informers/externalversions/user/v1" - bootstrap "github.com/openshift/library-go/pkg/authentication/bootstrapauthenticator" - "k8s.io/kubernetes/openshift-kube-apiserver/admission/authorization/restrictusers/usercache" - oauthvalidation "k8s.io/kubernetes/openshift-kube-apiserver/admission/customresourcevalidation/oauth" - "k8s.io/kubernetes/openshift-kube-apiserver/authentication/oauth" - "k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/paramtoken" -) - -const authenticatedOAuthGroup = "system:authenticated:oauth" - -// TODO we can re-trim these args to the the kubeapiserver config again if we feel like it, but for now we need it to be -// TODO obviously safe for 3.11 -func NewAuthenticator( - servingInfo configv1.ServingInfo, - serviceAccountPublicKeyFiles []string, oauthConfig *osinv1.OAuthConfig, authConfig kubecontrolplanev1.MasterAuthConfig, - privilegedLoopbackConfig *rest.Config, - podLister corev1listers.PodLister, - secretLister corev1listers.SecretLister, - saLister corev1listers.ServiceAccountLister, - oauthClientLister oauthclientlister.OAuthClientLister, - groupInformer userinformer.GroupInformer, -) (authenticator.Request, map[string]genericapiserver.PostStartHookFunc, error) { - kubeExternalClient, err := kclientsetexternal.NewForConfig(privilegedLoopbackConfig) - if err != nil { - return nil, nil, err - } - oauthClient, err := oauthclient.NewForConfig(privilegedLoopbackConfig) - if err != nil { - return nil, nil, err - } - userClient, err := userclient.NewForConfig(privilegedLoopbackConfig) - if err != nil { - return nil, nil, err - } - - // this is safe because the server does a quorum read and we're hitting a "magic" authorizer to get permissions based on system:masters - // once the cache is added, we won't be paying a double hop cost to etcd on each request, so the simplification will help. - serviceAccountTokenGetter := sacontroller.NewGetterFromClient(kubeExternalClient, secretLister, saLister, podLister) - - return newAuthenticator( - serviceAccountPublicKeyFiles, - oauthConfig, - authConfig, - oauthClient.OAuthAccessTokens(), - oauthClientLister, - serviceAccountTokenGetter, - userClient.UserV1().Users(), - servingInfo.ClientCA, - usercache.NewGroupCache(groupInformer), - bootstrap.NewBootstrapUserDataGetter(kubeExternalClient.CoreV1(), kubeExternalClient.CoreV1()), - ) -} - -func newAuthenticator( - serviceAccountPublicKeyFiles []string, - oauthConfig *osinv1.OAuthConfig, - authConfig kubecontrolplanev1.MasterAuthConfig, - accessTokenGetter oauthclient.OAuthAccessTokenInterface, - oauthClientLister oauthclientlister.OAuthClientLister, - tokenGetter serviceaccount.ServiceAccountTokenGetter, - userGetter usertypedclient.UserInterface, - apiClientCABundle string, - groupMapper oauth.UserToGroupMapper, - bootstrapUserDataGetter bootstrap.BootstrapUserDataGetter, -) (authenticator.Request, map[string]genericapiserver.PostStartHookFunc, error) { - postStartHooks := map[string]genericapiserver.PostStartHookFunc{} - authenticators := []authenticator.Request{} - tokenAuthenticators := []authenticator.Token{} - - // ServiceAccount token - if len(serviceAccountPublicKeyFiles) > 0 { - publicKeys := []interface{}{} - for _, keyFile := range serviceAccountPublicKeyFiles { - readPublicKeys, err := keyutil.PublicKeysFromFile(keyFile) - if err != nil { - return nil, nil, fmt.Errorf("Error reading service account key file %s: %v", keyFile, err) - } - publicKeys = append(publicKeys, readPublicKeys...) - } - - serviceAccountTokenAuthenticator := serviceaccount.JWTTokenAuthenticator( - serviceaccount.LegacyIssuer, - publicKeys, - nil, // TODO audiences - serviceaccount.NewLegacyValidator(true, tokenGetter), - ) - tokenAuthenticators = append(tokenAuthenticators, serviceAccountTokenAuthenticator) - } - - // OAuth token - // this looks weird because it no longer belongs here (needs to be a remote token auth backed by osin) - validators := []oauth.OAuthTokenValidator{oauth.NewExpirationValidator(), oauth.NewUIDValidator()} - // if we have an oauth config, try to configure the inactivity timeout - // TODO we need to fix config observation / move this to remote token authn so this can be honored in 4.x - if oauthConfig != nil { - if inactivityTimeout := oauthConfig.TokenConfig.AccessTokenInactivityTimeoutSeconds; inactivityTimeout != nil { - timeoutValidator := oauth.NewTimeoutValidator(accessTokenGetter, oauthClientLister, *inactivityTimeout, oauthvalidation.MinimumInactivityTimeoutSeconds) - validators = append(validators, timeoutValidator) - postStartHooks["openshift.io-TokenTimeoutUpdater"] = func(context genericapiserver.PostStartHookContext) error { - go timeoutValidator.Run(context.StopCh) - return nil - } - } - } - oauthTokenAuthenticator := oauth.NewTokenAuthenticator(accessTokenGetter, userGetter, groupMapper, validators...) - tokenAuthenticators = append(tokenAuthenticators, - // if you have an OAuth bearer token, you're a human (usually) - group.NewTokenGroupAdder(oauthTokenAuthenticator, []string{authenticatedOAuthGroup})) - - tokenAuthenticators = append(tokenAuthenticators, - // bootstrap oauth user that can do anything, backed by a secret - oauth.NewBootstrapAuthenticator(accessTokenGetter, bootstrapUserDataGetter, validators...)) - - for _, wta := range authConfig.WebhookTokenAuthenticators { - ttl, err := time.ParseDuration(wta.CacheTTL) - if err != nil { - return nil, nil, fmt.Errorf("Error parsing CacheTTL=%q: %v", wta.CacheTTL, err) - } - // TODO audiences - webhookTokenAuthenticator, err := webhooktoken.New(wta.ConfigFile, nil) - if err != nil { - return nil, nil, fmt.Errorf("Failed to create webhook token authenticator for ConfigFile=%q: %v", wta.ConfigFile, err) - } - cachingTokenAuth := cache.New(webhookTokenAuthenticator, false, ttl, ttl) - tokenAuthenticators = append(tokenAuthenticators, cachingTokenAuth) - } - - if len(tokenAuthenticators) > 0 { - // Combine all token authenticators - tokenAuth := tokenunion.New(tokenAuthenticators...) - - // wrap with short cache on success. - // this means a revoked service account token or access token will be valid for up to 10 seconds. - // it also means group membership changes on users may take up to 10 seconds to become effective. - tokenAuth = tokencache.New(tokenAuth, true, 10*time.Second, 0) - - authenticators = append(authenticators, - bearertoken.New(tokenAuth), - websocket.NewProtocolAuthenticator(tokenAuth), - paramtoken.New("access_token", tokenAuth, true), - ) - } - - // build cert authenticator - // TODO: add "system:" prefix in authenticator, limit cert to username - // TODO: add "system:" prefix to groups in authenticator, limit cert to group name - dynamicCA := certs.NewDynamicCA(apiClientCABundle) - if err := dynamicCA.CheckCerts(); err != nil { - return nil, nil, err - } - certauth := x509request.NewDynamic(dynamicCA.GetVerifier, x509request.CommonNameUserConversion) - postStartHooks["openshift.io-clientCA-reload"] = func(context genericapiserver.PostStartHookContext) error { - go dynamicCA.Run(context.StopCh) - return nil - } - authenticators = append(authenticators, certauth) - - resultingAuthenticator := union.NewFailOnError(authenticators...) - - topLevelAuthenticators := []authenticator.Request{} - // if we have a front proxy providing authentication configuration, wire it up and it should come first - if authConfig.RequestHeader != nil { - requestHeaderAuthenticator, dynamicReloadFn, err := headerrequest.NewSecure( - authConfig.RequestHeader.ClientCA, - authConfig.RequestHeader.ClientCommonNames, - authConfig.RequestHeader.UsernameHeaders, - authConfig.RequestHeader.GroupHeaders, - authConfig.RequestHeader.ExtraHeaderPrefixes, - ) - if err != nil { - return nil, nil, fmt.Errorf("Error building front proxy auth config: %v", err) - } - postStartHooks["openshift.io-requestheader-reload"] = func(context genericapiserver.PostStartHookContext) error { - go dynamicReloadFn(context.StopCh) - return nil - } - topLevelAuthenticators = append(topLevelAuthenticators, union.New(requestHeaderAuthenticator, resultingAuthenticator)) - - } else { - topLevelAuthenticators = append(topLevelAuthenticators, resultingAuthenticator) - - } - topLevelAuthenticators = append(topLevelAuthenticators, anonymous.NewAuthenticator()) - - return group.NewAuthenticatedGroupAdder(union.NewFailOnError(topLevelAuthenticators...)), postStartHooks, nil -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_authorizer.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_authorizer.go deleted file mode 100644 index 26a6f5273..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_authorizer.go +++ /dev/null @@ -1,52 +0,0 @@ -package openshiftkubeapiserver - -import ( - "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/apiserver/pkg/authorization/authorizer" - "k8s.io/apiserver/pkg/authorization/authorizerfactory" - authorizerunion "k8s.io/apiserver/pkg/authorization/union" - "k8s.io/client-go/informers" - "k8s.io/kubernetes/pkg/auth/nodeidentifier" - "k8s.io/kubernetes/plugin/pkg/auth/authorizer/node" - rbacauthorizer "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac" - kbootstrappolicy "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy" - - "k8s.io/kubernetes/openshift-kube-apiserver/authorization/browsersafe" - "k8s.io/kubernetes/openshift-kube-apiserver/authorization/scopeauthorizer" -) - -func NewAuthorizer(versionedInformers informers.SharedInformerFactory) authorizer.Authorizer { - rbacInformers := versionedInformers.Rbac().V1() - - scopeLimitedAuthorizer := scopeauthorizer.NewAuthorizer(rbacInformers.ClusterRoles().Lister()) - - kubeAuthorizer := rbacauthorizer.New( - &rbacauthorizer.RoleGetter{Lister: rbacInformers.Roles().Lister()}, - &rbacauthorizer.RoleBindingLister{Lister: rbacInformers.RoleBindings().Lister()}, - &rbacauthorizer.ClusterRoleGetter{Lister: rbacInformers.ClusterRoles().Lister()}, - &rbacauthorizer.ClusterRoleBindingLister{Lister: rbacInformers.ClusterRoleBindings().Lister()}, - ) - - graph := node.NewGraph() - node.AddGraphEventHandlers( - graph, - versionedInformers.Core().V1().Nodes(), - versionedInformers.Core().V1().Pods(), - versionedInformers.Core().V1().PersistentVolumes(), - versionedInformers.Storage().V1().VolumeAttachments(), - ) - nodeAuthorizer := node.NewAuthorizer(graph, nodeidentifier.NewDefaultNodeIdentifier(), kbootstrappolicy.NodeRules()) - - openshiftAuthorizer := authorizerunion.New( - // Wrap with an authorizer that detects unsafe requests and modifies verbs/resources appropriately so policy can address them separately. - // Scopes are first because they will authoritatively deny and can logically be attached to anyone. - browsersafe.NewBrowserSafeAuthorizer(scopeLimitedAuthorizer, user.AllAuthenticated), - // authorizes system:masters to do anything, just like upstream - authorizerfactory.NewPrivilegedGroups(user.SystemPrivilegedGroup), - nodeAuthorizer, - // Wrap with an authorizer that detects unsafe requests and modifies verbs/resources appropriately so policy can address them separately - browsersafe.NewBrowserSafeAuthorizer(kubeAuthorizer, user.AllAuthenticated), - ) - - return openshiftAuthorizer -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_handlerchain.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_handlerchain.go deleted file mode 100644 index 8d29c8518..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_handlerchain.go +++ /dev/null @@ -1,106 +0,0 @@ -package openshiftkubeapiserver - -import ( - "net/http" - "strings" - - "k8s.io/klog" - - genericapiserver "k8s.io/apiserver/pkg/server" - - kubecontrolplanev1 "github.com/openshift/api/kubecontrolplane/v1" - osinv1 "github.com/openshift/api/osin/v1" - "github.com/openshift/library-go/pkg/apiserver/apiserverconfig" - "github.com/openshift/library-go/pkg/apiserver/httprequest" - "github.com/openshift/library-go/pkg/oauth/oauthdiscovery" -) - -const ( - openShiftOAuthAPIPrefix = "/oauth" - openShiftLoginPrefix = "/login" - openShiftLogoutPrefix = "/logout" - openShiftOAuthCallbackPrefix = "/oauth2callback" -) - -// TODO switch back to taking a kubeapiserver config. For now make it obviously safe for 3.11 -func BuildHandlerChain(genericConfig *genericapiserver.Config, oauthConfig *osinv1.OAuthConfig, authConfig kubecontrolplanev1.MasterAuthConfig, userAgentMatchingConfig kubecontrolplanev1.UserAgentMatchingConfig, consolePublicURL string) (func(apiHandler http.Handler, kc *genericapiserver.Config) http.Handler, error) { - // ignore oauthConfig if we have a valid OAuth metadata file - // this prevents us from running the internal OAuth server when we are honoring an external one - if oauthMetadataFile := authConfig.OAuthMetadataFile; len(oauthMetadataFile) > 0 { - if _, _, err := loadOAuthMetadataFile(oauthMetadataFile); err == nil { - oauthConfig = nil // simplest way to keep existing code paths working - } - } - - var oauthServerHandler http.Handler - if oauthConfig != nil { - var err error - oauthServerHandler, err = NewOAuthServerHandler(genericConfig, oauthConfig) - if err != nil { - return nil, err - } - } - - return func(apiHandler http.Handler, genericConfig *genericapiserver.Config) http.Handler { - // these are after the kube handler - handler := versionSkewFilter(apiHandler, userAgentMatchingConfig) - - // this is the normal kube handler chain - handler = genericapiserver.DefaultBuildHandlerChain(handler, genericConfig) - - // these handlers are all before the normal kube chain - handler = translateLegacyScopeImpersonation(handler) - handler = apiserverconfig.WithCacheControl(handler, "no-store") // protected endpoints should not be cached - - // redirects from / and /console to consolePublicURL if you're using a browser - handler = withConsoleRedirect(handler, consolePublicURL) - - if oauthConfig != nil { - // these handlers are actually separate API servers which have their own handler chains. - // our server embeds these - handler = withOAuthRedirection(oauthConfig, handler, oauthServerHandler) - } - - return handler - }, - nil -} - -func withOAuthRedirection(oauthConfig *osinv1.OAuthConfig, handler, oauthServerHandler http.Handler) http.Handler { - if oauthConfig == nil { - return handler - } - - klog.Infof("Starting OAuth2 API at %s", oauthdiscovery.OpenShiftOAuthAPIPrefix) - return WithPatternPrefixHandler(handler, oauthServerHandler, openShiftOAuthAPIPrefix, openShiftLoginPrefix, openShiftLogoutPrefix, openShiftOAuthCallbackPrefix) -} - -func WithPatternPrefixHandler(handler http.Handler, patternHandler http.Handler, prefixes ...string) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - for _, p := range prefixes { - if strings.HasPrefix(req.URL.Path, p) { - patternHandler.ServeHTTP(w, req) - return - } - } - handler.ServeHTTP(w, req) - }) -} - -// If we know the location of the asset server, redirect to it when / is requested -// and the Accept header supports text/html -func withConsoleRedirect(handler http.Handler, consolePublicURL string) http.Handler { - if len(consolePublicURL) == 0 { - return handler - } - - return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - if strings.HasPrefix(req.URL.Path, "/console") || - (req.URL.Path == "/" && httprequest.PrefersHTML(req)) { - http.Redirect(w, req, consolePublicURL, http.StatusFound) - return - } - // Dispatch to the next handler - handler.ServeHTTP(w, req) - }) -} diff --git a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_oauthserver.go b/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_oauthserver.go deleted file mode 100644 index 7c48c0691..000000000 --- a/vendor/k8s.io/kubernetes/openshift-kube-apiserver/openshiftkubeapiserver/patch_oauthserver.go +++ /dev/null @@ -1,41 +0,0 @@ -package openshiftkubeapiserver - -import ( - "net/http" - - osinv1 "github.com/openshift/api/osin/v1" - "github.com/openshift/oauth-server/pkg/oauthserver" - genericapiserver "k8s.io/apiserver/pkg/server" -) - -// TODO this is taking a very large config for a small piece of it. The information must be broken up at some point so that -// we can run this in a pod. This is an indication of leaky abstraction because it spent too much time in openshift start -func NewOAuthServerConfigFromMasterConfig(genericConfig *genericapiserver.Config, oauthConfig *osinv1.OAuthConfig) (*oauthserver.OAuthServerConfig, error) { - oauthServerConfig, err := oauthserver.NewOAuthServerConfig(*oauthConfig, genericConfig.LoopbackClientConfig, nil) - if err != nil { - return nil, err - } - - oauthServerConfig.GenericConfig.CorsAllowedOriginList = genericConfig.CorsAllowedOriginList - oauthServerConfig.GenericConfig.SecureServing = genericConfig.SecureServing - oauthServerConfig.GenericConfig.AuditBackend = genericConfig.AuditBackend - oauthServerConfig.GenericConfig.AuditPolicyChecker = genericConfig.AuditPolicyChecker - - return oauthServerConfig, nil -} - -func NewOAuthServerHandler(genericConfig *genericapiserver.Config, oauthConfig *osinv1.OAuthConfig) (http.Handler, error) { - if oauthConfig == nil { - return http.NotFoundHandler(), nil - } - - config, err := NewOAuthServerConfigFromMasterConfig(genericConfig, oauthConfig) - if err != nil { - return nil, err - } - oauthServer, err := config.Complete().New(genericapiserver.NewEmptyDelegate()) - if err != nil { - return nil, err - } - return oauthServer.GenericAPIServer.PrepareRun().GenericAPIServer.Handler.FullHandlerChain, nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/helper/qos/qos.go b/vendor/k8s.io/kubernetes/pkg/apis/core/helper/qos/qos.go index 4a4b8d79a..fad6fb240 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/helper/qos/qos.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/helper/qos/qos.go @@ -39,8 +39,7 @@ func GetPodQOS(pod *core.Pod) core.PodQOSClass { limits := core.ResourceList{} zeroQuantity := resource.MustParse("0") isGuaranteed := true - allContainers := append(pod.Spec.Containers, pod.Spec.InitContainers...) - for _, container := range allContainers { + for _, container := range pod.Spec.Containers { // process requests for name, quantity := range container.Resources.Requests { if !isSupportedQoSComputeResource(name) { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/qos/qos.go b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/qos/qos.go index 32ed8f713..426f054ef 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/qos/qos.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/qos/qos.go @@ -17,7 +17,7 @@ limitations under the License. package qos import ( - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/pkg/apis/core" @@ -41,8 +41,7 @@ func GetPodQOS(pod *v1.Pod) v1.PodQOSClass { limits := v1.ResourceList{} zeroQuantity := resource.MustParse("0") isGuaranteed := true - allContainers := append(pod.Spec.Containers, pod.Spec.InitContainers...) - for _, container := range allContainers { + for _, container := range pod.Spec.Containers { // process requests for name, quantity := range container.Resources.Requests { if !isSupportedQoSComputeResource(name) { diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/qos/qos_test.go b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/qos/qos_test.go index 6dd45f614..7e9b71fef 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/qos/qos_test.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/core/v1/helper/qos/qos_test.go @@ -19,7 +19,7 @@ package qos import ( "testing" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/apis/core" @@ -116,16 +116,6 @@ func TestGetPodQOS(t *testing.T) { }), expected: v1.PodQOSBestEffort, }, - { - pod: newPodWithInitContainers("init-container", - []v1.Container{ - newContainer("best-effort", getResourceList("", ""), getResourceList("", "")), - }, - []v1.Container{ - newContainer("burstable", getResourceList("10m", "100Mi"), getResourceList("100m", "200Mi")), - }), - expected: v1.PodQOSBurstable, - }, } for id, testCase := range testCases { if actual := GetPodQOS(testCase.pod); testCase.expected != actual { @@ -182,15 +172,3 @@ func newPod(name string, containers []v1.Container) *v1.Pod { }, } } - -func newPodWithInitContainers(name string, containers []v1.Container, initContainers []v1.Container) *v1.Pod { - return &v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: v1.PodSpec{ - Containers: containers, - InitContainers: initContainers, - }, - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/aws/aws.go b/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/aws/aws.go index c440379f7..c51e60617 100644 --- a/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/aws/aws.go +++ b/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/aws/aws.go @@ -1732,8 +1732,6 @@ func (c *Cloud) getMountDevice( } deviceMappings[mountDevice(name)] = EBSVolumeID(aws.StringValue(blockDevice.Ebs.VolumeId)) } - // De-flaking https://bugzilla.redhat.com/show_bug.cgi?id=1698829 - klog.V(2).Infof("volume ID: %s: device mappings from EC2 Instance: %+v", volumeID, deviceMappings) // We lock to prevent concurrent mounts from conflicting // We may still conflict if someone calls the API concurrently, @@ -1744,8 +1742,6 @@ func (c *Cloud) getMountDevice( for mountDevice, volume := range c.attaching[i.nodeName] { deviceMappings[mountDevice] = volume } - // De-flaking https://bugzilla.redhat.com/show_bug.cgi?id=1698829 - klog.V(2).Infof("volume ID: %s: Full device mappings: %+v", volumeID, deviceMappings) // Check to see if this volume is already assigned a device on this machine for mountDevice, mappingVolumeID := range deviceMappings { @@ -2107,8 +2103,6 @@ func (c *Cloud) AttachDisk(diskName KubernetesVolumeID, nodeName types.NodeName) if err != nil { return "", fmt.Errorf("error finding instance %s: %q", nodeName, err) } - // De-flaking https://bugzilla.redhat.com/show_bug.cgi?id=1698829 - klog.V(2).Infof("volumeID: %s, AttachDisk got AWS instance %+v", disk.awsID, info.BlockDeviceMappings) // mountDevice will hold the device where we should try to attach the disk var mountDevice mountDevice @@ -2260,13 +2254,6 @@ func (c *Cloud) DetachDisk(diskName KubernetesVolumeID, nodeName types.NodeName) // in progress, though it might have been } - // De-flaking https://bugzilla.redhat.com/show_bug.cgi?id=1698829 - _, info, err2 := c.getFullInstance(nodeName) - if err2 != nil { - klog.V(2).Infof("volume ID: %s: error finding instance %s: %q", diskInfo.disk.awsID, nodeName, err2) - } - klog.V(2).Infof("volume ID: %s: DetachDisk: instance after detach: %+v", diskInfo.disk.awsID, info.BlockDeviceMappings) - hostDevicePath := "/dev/xvd" + string(mountDevice) return hostDevicePath, err } diff --git a/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/aws/aws_test.go b/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/aws/aws_test.go index 16f23441f..d37630e83 100644 --- a/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/aws/aws_test.go +++ b/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/aws/aws_test.go @@ -21,7 +21,6 @@ import ( "fmt" "io" "reflect" - "sort" "strings" "testing" @@ -70,25 +69,6 @@ func (m *MockedFakeEC2) DescribeSecurityGroups(request *ec2.DescribeSecurityGrou } func (m *MockedFakeEC2) CreateVolume(request *ec2.CreateVolumeInput) (*ec2.Volume, error) { - // mock requires stable input, and in CreateDisk we invoke buildTags which uses - // a map to create tags, which then get converted into an array. This leads to - // unstable sorting order which confuses mock. Sorted tags are not needed in - // regular code, but are a must in tests here: - for i := 0; i < len(request.TagSpecifications); i++ { - if request.TagSpecifications[i] == nil { - continue - } - tags := request.TagSpecifications[i].Tags - sort.Slice(tags, func(i, j int) bool { - if tags[i] == nil && tags[j] != nil { - return false - } - if tags[i] != nil && tags[j] == nil { - return true - } - return *tags[i].Key < *tags[j].Key - }) - } args := m.Called(request) return args.Get(0).(*ec2.Volume), nil } @@ -1808,8 +1788,6 @@ func TestCreateDisk(t *testing.T) { Size: aws.Int64(10), TagSpecifications: []*ec2.TagSpecification{ {ResourceType: aws.String(ec2.ResourceTypeVolume), Tags: []*ec2.Tag{ - // CreateVolume from MockedFakeEC2 expects sorted tags, so we need to - // always have these tags sorted: {Key: aws.String(TagNameKubernetesClusterLegacy), Value: aws.String(TestClusterID)}, {Key: aws.String(fmt.Sprintf("%s%s", TagNameKubernetesClusterPrefix, TestClusterID)), Value: aws.String(ResourceLifecycleOwned)}, }}, diff --git a/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/openstack/BUILD b/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/openstack/BUILD index 334819679..934af2f75 100644 --- a/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/openstack/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/openstack/BUILD @@ -23,13 +23,10 @@ go_library( "//pkg/util/mount:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes:go_default_library", - "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library", "//staging/src/k8s.io/client-go/util/cert:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", "//staging/src/k8s.io/cloud-provider/node/helpers:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/openstack/openstack.go b/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/openstack/openstack.go index 439a69356..bc17f41a3 100644 --- a/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/openstack/openstack.go +++ b/vendor/k8s.io/kubernetes/pkg/cloudprovider/providers/openstack/openstack.go @@ -42,11 +42,8 @@ import ( "gopkg.in/gcfg.v1" "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" netutil "k8s.io/apimachinery/pkg/util/net" - "k8s.io/client-go/kubernetes" - "k8s.io/client-go/tools/clientcmd" certutil "k8s.io/client-go/util/cert" cloudprovider "k8s.io/cloud-provider" nodehelpers "k8s.io/cloud-provider/node/helpers" @@ -148,20 +145,17 @@ type OpenStack struct { // Config is used to read and store information from the cloud configuration file type Config struct { Global struct { - AuthURL string `gcfg:"auth-url"` - Username string - UserID string `gcfg:"user-id"` - Password string - TenantID string `gcfg:"tenant-id"` - TenantName string `gcfg:"tenant-name"` - TrustID string `gcfg:"trust-id"` - DomainID string `gcfg:"domain-id"` - DomainName string `gcfg:"domain-name"` - Region string - CAFile string `gcfg:"ca-file"` - SecretName string `gcfg:"secret-name"` - SecretNamespace string `gcfg:"secret-namespace"` - KubeconfigPath string `gcfg:"kubeconfig-path"` + AuthURL string `gcfg:"auth-url"` + Username string + UserID string `gcfg:"user-id"` + Password string + TenantID string `gcfg:"tenant-id"` + TenantName string `gcfg:"tenant-name"` + TrustID string `gcfg:"trust-id"` + DomainID string `gcfg:"domain-id"` + DomainName string `gcfg:"domain-name"` + Region string + CAFile string `gcfg:"ca-file"` } LoadBalancer LoadBalancerOpts BlockStorage BlockStorageOpts @@ -237,10 +231,6 @@ func configFromEnv() (cfg Config, ok bool) { cfg.Global.DomainName = os.Getenv("OS_USER_DOMAIN_NAME") } - cfg.Global.SecretName = os.Getenv("SECRET_NAME") - cfg.Global.SecretNamespace = os.Getenv("SECRET_NAMESPACE") - cfg.Global.KubeconfigPath = os.Getenv("KUBECONFIG_PATH") - ok = cfg.Global.AuthURL != "" && cfg.Global.Username != "" && cfg.Global.Password != "" && @@ -255,60 +245,6 @@ func configFromEnv() (cfg Config, ok bool) { return } -func createKubernetesClient(kubeconfigPath string) (*kubernetes.Clientset, error) { - klog.Info("Creating kubernetes API client.") - - cfg, err := clientcmd.BuildConfigFromFlags("", kubeconfigPath) - if err != nil { - return nil, err - } - - client, err := kubernetes.NewForConfig(cfg) - if err != nil { - return nil, err - } - - v, err := client.Discovery().ServerVersion() - if err != nil { - return nil, err - } - - klog.Infof("Kubernetes API client created, server version %s", fmt.Sprintf("v%v.%v", v.Major, v.Minor)) - return client, nil -} - -// setConfigFromSecret allows setting up the config from k8s secret -func setConfigFromSecret(cfg *Config) error { - secretName := cfg.Global.SecretName - secretNamespace := cfg.Global.SecretNamespace - kubeconfigPath := cfg.Global.KubeconfigPath - - k8sClient, err := createKubernetesClient(kubeconfigPath) - if err != nil { - return fmt.Errorf("failed to get kubernetes client: %v", err) - } - - secret, err := k8sClient.CoreV1().Secrets(secretNamespace).Get(secretName, metav1.GetOptions{}) - if err != nil { - klog.Warningf("Cannot get secret %s in namespace %s. error: %q", secretName, secretNamespace, err) - return err - } - - if content, ok := secret.Data["clouds.conf"]; ok { - err = gcfg.ReadStringInto(cfg, string(content)) - if err != nil { - klog.Errorf("Cannot parse data from the secret.") - return fmt.Errorf("cannot parse data from the secret") - } - return nil - } - - klog.Errorf("Cannot find \"clouds.conf\" key in the secret.") - return fmt.Errorf("cannot find \"clouds.conf\" key in the secret") -} - - - func readConfig(config io.Reader) (Config, error) { if config == nil { return Config{}, fmt.Errorf("no OpenStack cloud provider config file given") @@ -323,19 +259,7 @@ func readConfig(config io.Reader) (Config, error) { cfg.Metadata.SearchOrder = fmt.Sprintf("%s,%s", configDriveID, metadataID) err := gcfg.ReadInto(&cfg, config) - if err != nil { - return cfg, err - } - - if cfg.Global.SecretName != "" && cfg.Global.SecretNamespace != "" { - klog.Infof("Set credentials from secret %s in namespace %s", cfg.Global.SecretName, cfg.Global.SecretNamespace) - err = setConfigFromSecret(&cfg) - if err != nil { - return cfg, err - } - } - - return cfg, nil + return cfg, err } // caller is a tiny helper for conditional unwind logic diff --git a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils.go b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils.go index d1044a614..19fb91c4b 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils.go @@ -195,14 +195,13 @@ func (o byJobStartTime) Len() int { return len(o) } func (o byJobStartTime) Swap(i, j int) { o[i], o[j] = o[j], o[i] } func (o byJobStartTime) Less(i, j int) bool { - if o[i].Status.StartTime == nil && o[j].Status.StartTime != nil { - return false - } - if o[i].Status.StartTime != nil && o[j].Status.StartTime == nil { - return true + if o[j].Status.StartTime == nil { + return o[i].Status.StartTime != nil } + if o[i].Status.StartTime.Equal(o[j].Status.StartTime) { return o[i].Name < o[j].Name } + return o[i].Status.StartTime.Before(o[j].Status.StartTime) } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils_test.go b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils_test.go index 1e5ee4d03..fb6b569f2 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils_test.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/cronjob/utils_test.go @@ -17,8 +17,6 @@ limitations under the License. package cronjob import ( - "reflect" - "sort" "strings" "testing" "time" @@ -378,66 +376,3 @@ func TestGetRecentUnmetScheduleTimes(t *testing.T) { } } } - -func TestByJobStartTime(t *testing.T) { - now := metav1.NewTime(time.Date(2018, time.January, 1, 2, 3, 4, 5, time.UTC)) - later := metav1.NewTime(time.Date(2019, time.January, 1, 2, 3, 4, 5, time.UTC)) - aNil := batchv1.Job{ - ObjectMeta: metav1.ObjectMeta{Name: "a"}, - Status: batchv1.JobStatus{}, - } - bNil := batchv1.Job{ - ObjectMeta: metav1.ObjectMeta{Name: "b"}, - Status: batchv1.JobStatus{}, - } - aSet := batchv1.Job{ - ObjectMeta: metav1.ObjectMeta{Name: "a"}, - Status: batchv1.JobStatus{StartTime: &now}, - } - bSet := batchv1.Job{ - ObjectMeta: metav1.ObjectMeta{Name: "b"}, - Status: batchv1.JobStatus{StartTime: &now}, - } - aSetLater := batchv1.Job{ - ObjectMeta: metav1.ObjectMeta{Name: "a"}, - Status: batchv1.JobStatus{StartTime: &later}, - } - - testCases := []struct { - name string - input, expected []batchv1.Job - }{ - { - name: "both have nil start times", - input: []batchv1.Job{bNil, aNil}, - expected: []batchv1.Job{aNil, bNil}, - }, - { - name: "only the first has a nil start time", - input: []batchv1.Job{aNil, bSet}, - expected: []batchv1.Job{bSet, aNil}, - }, - { - name: "only the second has a nil start time", - input: []batchv1.Job{aSet, bNil}, - expected: []batchv1.Job{aSet, bNil}, - }, - { - name: "both have non-nil, equal start time", - input: []batchv1.Job{bSet, aSet}, - expected: []batchv1.Job{aSet, bSet}, - }, - { - name: "both have non-nil, different start time", - input: []batchv1.Job{aSetLater, bSet}, - expected: []batchv1.Job{bSet, aSetLater}, - }, - } - - for _, testCase := range testCases { - sort.Sort(byJobStartTime(testCase.input)) - if !reflect.DeepEqual(testCase.input, testCase.expected) { - t.Errorf("case: '%s', jobs not sorted as expected", testCase.name) - } - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/daemon/daemon_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/daemon/daemon_controller.go index 1a6ef7cd7..e70fa087d 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/daemon/daemon_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/daemon/daemon_controller.go @@ -124,13 +124,7 @@ type DaemonSetsController struct { nodeLister corelisters.NodeLister // nodeStoreSynced returns true if the node store has been synced at least once. // Added as a member to the struct to allow injection for testing. - nodeStoreSynced cache.InformerSynced - namespaceLister corelisters.NamespaceLister - namespaceStoreSynced cache.InformerSynced - openshiftDefaultNodeSelectorString string - openshiftDefaultNodeSelector labels.Selector - kubeDefaultNodeSelectorString string - kubeDefaultNodeSelector labels.Selector + nodeStoreSynced cache.InformerSynced // DaemonSet keys that need to be synced. queue workqueue.RateLimitingInterface @@ -276,11 +270,6 @@ func (dsc *DaemonSetsController) Run(workers int, stopCh <-chan struct{}) { if !controller.WaitForCacheSync("daemon sets", stopCh, dsc.podStoreSynced, dsc.nodeStoreSynced, dsc.historyStoreSynced, dsc.dsStoreSynced) { return } - if dsc.namespaceStoreSynced != nil { - if !controller.WaitForCacheSync("daemon sets", stopCh, dsc.namespaceStoreSynced) { - return - } - } for i := 0; i < workers; i++ { go wait.Until(dsc.runWorker, time.Second, stopCh) @@ -1419,14 +1408,6 @@ func (dsc *DaemonSetsController) nodeShouldRunDaemonPod(node *v1.Node, ds *apps. } } } - - if matches, matchErr := dsc.namespaceNodeSelectorMatches(node, ds); matchErr != nil { - return false, false, false, matchErr - } else if !matches { - shouldSchedule = false - shouldContinueRunning = false - } - // only emit this event if insufficient resource is the only thing // preventing the daemon pod from scheduling if shouldSchedule && insufficientResourceErr != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/controller/daemon/patch_nodeselector.go b/vendor/k8s.io/kubernetes/pkg/controller/daemon/patch_nodeselector.go deleted file mode 100644 index bea101397..000000000 --- a/vendor/k8s.io/kubernetes/pkg/controller/daemon/patch_nodeselector.go +++ /dev/null @@ -1,93 +0,0 @@ -package daemon - -import ( - appsv1 "k8s.io/api/apps/v1" - "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - appsinformers "k8s.io/client-go/informers/apps/v1" - coreinformers "k8s.io/client-go/informers/core/v1" - clientset "k8s.io/client-go/kubernetes" - "k8s.io/client-go/util/flowcontrol" -) - -func NewNodeSelectorAwareDaemonSetsController(openshiftDefaultNodeSelectorString, kubeDefaultNodeSelectorString string, namepaceInformer coreinformers.NamespaceInformer, daemonSetInformer appsinformers.DaemonSetInformer, historyInformer appsinformers.ControllerRevisionInformer, podInformer coreinformers.PodInformer, nodeInformer coreinformers.NodeInformer, kubeClient clientset.Interface, failedPodsBackoff *flowcontrol.Backoff) (*DaemonSetsController, error) { - controller, err := NewDaemonSetsController(daemonSetInformer, historyInformer, podInformer, nodeInformer, kubeClient, failedPodsBackoff) - if err != nil { - return controller, err - } - controller.namespaceLister = namepaceInformer.Lister() - controller.namespaceStoreSynced = namepaceInformer.Informer().HasSynced - controller.openshiftDefaultNodeSelectorString = openshiftDefaultNodeSelectorString - if len(controller.openshiftDefaultNodeSelectorString) > 0 { - controller.openshiftDefaultNodeSelector, err = labels.Parse(controller.openshiftDefaultNodeSelectorString) - if err != nil { - return nil, err - } - } - controller.kubeDefaultNodeSelectorString = kubeDefaultNodeSelectorString - if len(controller.kubeDefaultNodeSelectorString) > 0 { - controller.kubeDefaultNodeSelector, err = labels.Parse(controller.kubeDefaultNodeSelectorString) - if err != nil { - return nil, err - } - } - - return controller, nil -} - -func (dsc *DaemonSetsController) namespaceNodeSelectorMatches(node *v1.Node, ds *appsv1.DaemonSet) (bool, error) { - if dsc.namespaceLister == nil { - return true, nil - } - - // this is racy (different listers) and we get to choose which way to fail. This should requeue. - ns, err := dsc.namespaceLister.Get(ds.Namespace) - if apierrors.IsNotFound(err) { - return false, err - } - // if we had any error, default to the safe option of creating a pod for the node. - if err != nil { - utilruntime.HandleError(err) - return true, nil - } - - return dsc.nodeSelectorMatches(node, ns), nil -} - -func (dsc *DaemonSetsController) nodeSelectorMatches(node *v1.Node, ns *v1.Namespace) bool { - kubeNodeSelector, ok := ns.Annotations["scheduler.alpha.kubernetes.io/node-selector"] - if !ok { - originNodeSelector, ok := ns.Annotations["openshift.io/node-selector"] - switch { - case ok: - selector, err := labels.Parse(originNodeSelector) - if err == nil { - if !selector.Matches(labels.Set(node.Labels)) { - return false - } - } - case !ok && len(dsc.openshiftDefaultNodeSelectorString) > 0: - if !dsc.openshiftDefaultNodeSelector.Matches(labels.Set(node.Labels)) { - return false - } - } - } - - switch { - case ok: - selector, err := labels.Parse(kubeNodeSelector) - if err == nil { - if !selector.Matches(labels.Set(node.Labels)) { - return false - } - } - case !ok && len(dsc.kubeDefaultNodeSelectorString) > 0: - if !dsc.kubeDefaultNodeSelector.Matches(labels.Set(node.Labels)) { - return false - } - } - - return true -} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/daemon/patch_nodeselector_test.go b/vendor/k8s.io/kubernetes/pkg/controller/daemon/patch_nodeselector_test.go deleted file mode 100644 index 0c2126c3b..000000000 --- a/vendor/k8s.io/kubernetes/pkg/controller/daemon/patch_nodeselector_test.go +++ /dev/null @@ -1,185 +0,0 @@ -package daemon - -import ( - "testing" - - "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" -) - -func TestNamespaceNodeSelectorMatches(t *testing.T) { - nodes := []*v1.Node{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "first", - Labels: map[string]string{ - "alpha": "bravo", - }, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{ - Name: "second", - Labels: map[string]string{ - "charlie": "delta", - }, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{ - Name: "third", - Labels: map[string]string{ - "echo": "foxtrot", - }, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{ - Name: "fourth", - Labels: map[string]string{}, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{ - Name: "fifth", - Labels: map[string]string{ - "charlie": "delta", - "echo": "foxtrot", - }, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{ - Name: "sixth", - Labels: map[string]string{ - "alpha": "bravo", - "charlie": "delta", - "echo": "foxtrot", - }, - }, - }, - } - - pureDefault := &v1.Namespace{ - ObjectMeta: metav1.ObjectMeta{}, - } - all := &v1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: map[string]string{ - "openshift.io/node-selector": "", - }, - }, - } - projectSpecified := &v1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: map[string]string{ - "openshift.io/node-selector": "echo=foxtrot", - }, - }, - } - schedulerSpecified := &v1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: map[string]string{ - "scheduler.alpha.kubernetes.io/node-selector": "charlie=delta", - }, - }, - } - bothSpecified := &v1.Namespace{ - ObjectMeta: metav1.ObjectMeta{ - Annotations: map[string]string{ - "openshift.io/node-selector": "echo=foxtrot", - "scheduler.alpha.kubernetes.io/node-selector": "charlie=delta", - }, - }, - } - - tests := []struct { - name string - defaultSelector string - namespace *v1.Namespace - expected map[string]bool - }{ - { - name: "pure-default", - defaultSelector: "alpha=bravo", - namespace: pureDefault, - expected: map[string]bool{ - "first": true, - "sixth": true, - }, - }, - { - name: "all", - defaultSelector: "alpha=bravo", - namespace: all, - expected: map[string]bool{ - "first": true, - "second": true, - "third": true, - "fourth": true, - "fifth": true, - "sixth": true, - }, - }, - { - name: "pure-default-without-default", - namespace: pureDefault, - expected: map[string]bool{ - "first": true, - "second": true, - "third": true, - "fourth": true, - "fifth": true, - "sixth": true, - }, - }, - { - name: "projectSpecified", - namespace: projectSpecified, - expected: map[string]bool{ - "third": true, - "fifth": true, - "sixth": true, - }, - }, - { - name: "schedulerSpecified", - namespace: schedulerSpecified, - expected: map[string]bool{ - "second": true, - "fifth": true, - "sixth": true, - }, - }, - { - name: "bothSpecified", - namespace: bothSpecified, - expected: map[string]bool{ - "second": true, - "fifth": true, - "sixth": true, - }, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - c := &DaemonSetsController{} - c.openshiftDefaultNodeSelectorString = test.defaultSelector - if len(c.openshiftDefaultNodeSelectorString) > 0 { - var err error - c.openshiftDefaultNodeSelector, err = labels.Parse(c.openshiftDefaultNodeSelectorString) - if err != nil { - t.Fatal(err) - } - } - - for _, node := range nodes { - if e, a := test.expected[node.Name], c.nodeSelectorMatches(node, test.namespace); e != a { - t.Errorf("%q expected %v, got %v", node.Name, e, a) - } - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/garbagecollector_test.go b/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/garbagecollector_test.go index 4076ef014..2f4c98487 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/garbagecollector_test.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/garbagecollector/garbagecollector_test.go @@ -873,6 +873,7 @@ func TestGarbageCollectorSync(t *testing.T) { go gc.Sync(fakeDiscoveryClient, 200*time.Millisecond, stopCh) // Wait until the sync discovers the initial resources + fmt.Printf("Test output") time.Sleep(1 * time.Second) err = expectSyncNotBlocked(fakeDiscoveryClient, &gc.workerLock) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter.go b/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter.go index 4b5ec5035..379a8219c 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter.go @@ -24,7 +24,7 @@ import ( "k8s.io/klog" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" @@ -134,9 +134,6 @@ func (d *namespacedResourcesDeleter) Delete(nsName string) error { // there may still be content for us to remove estimate, err := d.deleteAllContent(namespace.Name, *namespace.DeletionTimestamp) - // we don't care about errors on reporting the status message update - // we unconditionally set this value to ensure that we clear it when deletion is complete - _, _ = d.retryOnConflictError(namespace, d.updateSetDeletionFailureFunc(err)) if err != nil { return err } @@ -298,20 +295,6 @@ func (d *namespacedResourcesDeleter) updateNamespaceStatusFunc(namespace *v1.Nam return d.nsClient.UpdateStatus(&newNamespace) } -// updateSetDeletionFailureFunc will set an annotation indicating that the namespace controller has failed to delete all content -func (d *namespacedResourcesDeleter) updateSetDeletionFailureFunc(err error) func(namespace *v1.Namespace) (*v1.Namespace, error) { - errorAnnotationName := "namespace-controller.kcm.openshift.io/deletion-error" - return func(namespace *v1.Namespace) (*v1.Namespace, error) { - newNamespace := namespace.DeepCopy() - if err == nil || len(err.Error()) == 0 { - delete(newNamespace.Annotations, errorAnnotationName) - } else { - newNamespace.Annotations[errorAnnotationName] = err.Error() - } - return d.nsClient.Update(newNamespace) - } -} - // finalized returns true if the namespace.Spec.Finalizers is an empty list func finalized(namespace *v1.Namespace) bool { return len(namespace.Spec.Finalizers) == 0 diff --git a/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter_test.go b/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter_test.go index a54e7b5a9..e7ca63335 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter_test.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/namespace/deletion/namespaced_resources_deleter_test.go @@ -25,7 +25,7 @@ import ( "sync" "testing" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -86,7 +86,7 @@ func TestFinalizeNamespaceFunc(t *testing.T) { } } -func testSyncNamespaceThatIsTerminating(t *testing.T) { +func testSyncNamespaceThatIsTerminating(t *testing.T, versions *metav1.APIVersions) { now := metav1.Now() namespaceName := "test" testNamespacePendingFinalize := &v1.Namespace{ @@ -135,6 +135,7 @@ func testSyncNamespaceThatIsTerminating(t *testing.T) { testNamespace *v1.Namespace kubeClientActionSet sets.String dynamicClientActionSet sets.String + gvrError error }{ "pending-finalize": { testNamespace: testNamespacePendingFinalize, @@ -142,7 +143,6 @@ func testSyncNamespaceThatIsTerminating(t *testing.T) { strings.Join([]string{"get", "namespaces", ""}, "-"), strings.Join([]string{"create", "namespaces", "finalize"}, "-"), strings.Join([]string{"list", "pods", ""}, "-"), - strings.Join([]string{"update", "namespaces", ""}, "-"), strings.Join([]string{"delete", "namespaces", ""}, "-"), ), dynamicClientActionSet: dynamicClientActionSet, @@ -162,49 +162,48 @@ func testSyncNamespaceThatIsTerminating(t *testing.T) { strings.Join([]string{"delete", "namespaces", ""}, "-"), ), dynamicClientActionSet: sets.NewString(), + gvrError: fmt.Errorf("test error"), }, } for scenario, testInput := range scenarios { - t.Run(scenario, func(t *testing.T) { - testHandler := &fakeActionHandler{statusCode: 200} - srv, clientConfig := testServerAndClientConfig(testHandler.ServeHTTP) - defer srv.Close() + testHandler := &fakeActionHandler{statusCode: 200} + srv, clientConfig := testServerAndClientConfig(testHandler.ServeHTTP) + defer srv.Close() - mockClient := fake.NewSimpleClientset(testInput.testNamespace) - dynamicClient, err := dynamic.NewForConfig(clientConfig) - if err != nil { - t.Fatal(err) - } + mockClient := fake.NewSimpleClientset(testInput.testNamespace) + dynamicClient, err := dynamic.NewForConfig(clientConfig) + if err != nil { + t.Fatal(err) + } - fn := func() ([]*metav1.APIResourceList, error) { - return resources, nil - } - d := NewNamespacedResourcesDeleter(mockClient.CoreV1().Namespaces(), dynamicClient, mockClient.CoreV1(), fn, v1.FinalizerKubernetes, true) - if err := d.Delete(testInput.testNamespace.Name); err != nil { - t.Errorf("scenario %s - Unexpected error when synching namespace %v", scenario, err) - } + fn := func() ([]*metav1.APIResourceList, error) { + return resources, nil + } + d := NewNamespacedResourcesDeleter(mockClient.CoreV1().Namespaces(), dynamicClient, mockClient.CoreV1(), fn, v1.FinalizerKubernetes, true) + if err := d.Delete(testInput.testNamespace.Name); err != nil { + t.Errorf("scenario %s - Unexpected error when synching namespace %v", scenario, err) + } - // validate traffic from kube client - actionSet := sets.NewString() - for _, action := range mockClient.Actions() { - actionSet.Insert(strings.Join([]string{action.GetVerb(), action.GetResource().Resource, action.GetSubresource()}, "-")) - } - if !actionSet.Equal(testInput.kubeClientActionSet) { - t.Errorf("scenario %s - mock client expected actions:\n%v\n but got:\n%v\nDifference:\n%v", scenario, - testInput.kubeClientActionSet, actionSet, testInput.kubeClientActionSet.Difference(actionSet)) - } + // validate traffic from kube client + actionSet := sets.NewString() + for _, action := range mockClient.Actions() { + actionSet.Insert(strings.Join([]string{action.GetVerb(), action.GetResource().Resource, action.GetSubresource()}, "-")) + } + if !actionSet.Equal(testInput.kubeClientActionSet) { + t.Errorf("scenario %s - mock client expected actions:\n%v\n but got:\n%v\nDifference:\n%v", scenario, + testInput.kubeClientActionSet, actionSet, testInput.kubeClientActionSet.Difference(actionSet)) + } - // validate traffic from dynamic client - actionSet = sets.NewString() - for _, action := range testHandler.actions { - actionSet.Insert(action.String()) - } - if !actionSet.Equal(testInput.dynamicClientActionSet) { - t.Errorf("scenario %s - dynamic client expected actions:\n%v\n but got:\n%v\nDifference:\n%v", scenario, - testInput.dynamicClientActionSet, actionSet, testInput.dynamicClientActionSet.Difference(actionSet)) - } - }) + // validate traffic from dynamic client + actionSet = sets.NewString() + for _, action := range testHandler.actions { + actionSet.Insert(action.String()) + } + if !actionSet.Equal(testInput.dynamicClientActionSet) { + t.Errorf("scenario %s - dynamic client expected actions:\n%v\n but got:\n%v\nDifference:\n%v", scenario, + testInput.dynamicClientActionSet, actionSet, testInput.dynamicClientActionSet.Difference(actionSet)) + } } } @@ -231,8 +230,12 @@ func TestRetryOnConflictError(t *testing.T) { } } +func TestSyncNamespaceThatIsTerminatingNonExperimental(t *testing.T) { + testSyncNamespaceThatIsTerminating(t, &metav1.APIVersions{}) +} + func TestSyncNamespaceThatIsTerminatingV1(t *testing.T) { - testSyncNamespaceThatIsTerminating(t) + testSyncNamespaceThatIsTerminating(t, &metav1.APIVersions{Versions: []string{"apps/v1"}}) } func TestSyncNamespaceThatIsActive(t *testing.T) { diff --git a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal.go b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal.go index a3948dc26..c6a31532f 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal.go @@ -535,7 +535,6 @@ func (a *HorizontalController) reconcileAutoscaler(hpav1Shared *autoscalingv1.Ho } mappings, err := a.mapper.RESTMappings(targetGK) - mappings, err = overrideMappingsForOapiDeploymentConfig(mappings, err, targetGK) if err != nil { a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedGetScale", err.Error()) setCondition(hpa, autoscalingv2.AbleToScale, v1.ConditionFalse, "FailedGetScale", "the HPA controller was unable to get the target's current scale: %v", err) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal_test.go b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal_test.go index 7b1bfc85f..524f6e7c8 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal_test.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/horizontal_test.go @@ -166,7 +166,6 @@ func (tc *testCase) prepareTestClient(t *testing.T) (*fake.Clientset, *metricsfa tc.scaleUpdated = false tc.statusUpdated = false tc.eventCreated = false - // the chan size helps prevent stuck writers tc.processed = make(chan string, 100) if tc.CPUCurrent == 0 { tc.computeCPUCurrent() @@ -331,43 +330,38 @@ func (tc *testCase) prepareTestClient(t *testing.T) (*fake.Clientset, *metricsfa }) fakeClient.AddReactor("update", "horizontalpodautoscalers", func(action core.Action) (handled bool, ret runtime.Object, err error) { - handled, obj, err := func() (handled bool, ret *autoscalingv1.HorizontalPodAutoscaler, err error) { - tc.Lock() - defer tc.Unlock() - - obj := action.(core.UpdateAction).GetObject().(*autoscalingv1.HorizontalPodAutoscaler) - assert.Equal(t, namespace, obj.Namespace, "the HPA namespace should be as expected") - assert.Equal(t, hpaName, obj.Name, "the HPA name should be as expected") - assert.Equal(t, tc.expectedDesiredReplicas, obj.Status.DesiredReplicas, "the desired replica count reported in the object status should be as expected") - if tc.verifyCPUCurrent { - if assert.NotNil(t, obj.Status.CurrentCPUUtilizationPercentage, "the reported CPU utilization percentage should be non-nil") { - assert.Equal(t, tc.CPUCurrent, *obj.Status.CurrentCPUUtilizationPercentage, "the report CPU utilization percentage should be as expected") - } - } - var actualConditions []autoscalingv1.HorizontalPodAutoscalerCondition - if err := json.Unmarshal([]byte(obj.ObjectMeta.Annotations[autoscaling.HorizontalPodAutoscalerConditionsAnnotation]), &actualConditions); err != nil { - return true, nil, err - } - // TODO: it's ok not to sort these becaues statusOk - // contains all the conditions, so we'll never be appending. - // Default to statusOk when missing any specific conditions - if tc.expectedConditions == nil { - tc.expectedConditions = statusOkWithOverrides() - } - // clear the message so that we can easily compare - for i := range actualConditions { - actualConditions[i].Message = "" - actualConditions[i].LastTransitionTime = metav1.Time{} + tc.Lock() + defer tc.Unlock() + + obj := action.(core.UpdateAction).GetObject().(*autoscalingv1.HorizontalPodAutoscaler) + assert.Equal(t, namespace, obj.Namespace, "the HPA namespace should be as expected") + assert.Equal(t, hpaName, obj.Name, "the HPA name should be as expected") + assert.Equal(t, tc.expectedDesiredReplicas, obj.Status.DesiredReplicas, "the desired replica count reported in the object status should be as expected") + if tc.verifyCPUCurrent { + if assert.NotNil(t, obj.Status.CurrentCPUUtilizationPercentage, "the reported CPU utilization percentage should be non-nil") { + assert.Equal(t, tc.CPUCurrent, *obj.Status.CurrentCPUUtilizationPercentage, "the report CPU utilization percentage should be as expected") } - assert.Equal(t, tc.expectedConditions, actualConditions, "the status conditions should have been as expected") - tc.statusUpdated = true - // Every time we reconcile HPA object we are updating status. - return true, obj, nil - }() - if obj != nil { - tc.processed <- obj.Name } - return handled, obj, err + var actualConditions []autoscalingv1.HorizontalPodAutoscalerCondition + if err := json.Unmarshal([]byte(obj.ObjectMeta.Annotations[autoscaling.HorizontalPodAutoscalerConditionsAnnotation]), &actualConditions); err != nil { + return true, nil, err + } + // TODO: it's ok not to sort these becaues statusOk + // contains all the conditions, so we'll never be appending. + // Default to statusOk when missing any specific conditions + if tc.expectedConditions == nil { + tc.expectedConditions = statusOkWithOverrides() + } + // clear the message so that we can easily compare + for i := range actualConditions { + actualConditions[i].Message = "" + actualConditions[i].LastTransitionTime = metav1.Time{} + } + assert.Equal(t, tc.expectedConditions, actualConditions, "the status conditions should have been as expected") + tc.statusUpdated = true + // Every time we reconcile HPA object we are updating status. + tc.processed <- obj.Name + return true, obj, nil }) fakeScaleClient := &scalefake.FakeScaleClient{} @@ -707,25 +701,15 @@ func (tc *testCase) runTestWithController(t *testing.T, hpaController *Horizonta go hpaController.Run(stop) tc.Lock() - shouldWait := tc.verifyEvents - tc.Unlock() - - if shouldWait { + if tc.verifyEvents { + tc.Unlock() // We need to wait for events to be broadcasted (sleep for longer than record.sleepDuration). - timeoutTime := time.Now().Add(2 * time.Second) - for now := time.Now(); timeoutTime.After(now); now = time.Now() { - sleepUntil := timeoutTime.Sub(now) - select { - case <-tc.processed: - // drain the chan of any sent events to keep it from filling before the timeout - case <-time.After(sleepUntil): - // timeout reached, time to verifyResults - } - } + time.Sleep(2 * time.Second) } else { - // Wait for HPA to be processed. - <-tc.processed + tc.Unlock() } + // Wait for HPA to be processed. + <-tc.processed tc.verifyResults(t) } @@ -2434,9 +2418,7 @@ func TestAvoidUncessaryUpdates(t *testing.T) { // wait a tick and then mark that we're finished (otherwise, we have no // way to indicate that we're finished, because the function decides not to do anything) time.Sleep(1 * time.Second) - tc.Lock() tc.statusUpdated = true - tc.Unlock() tc.processed <- "test-hpa" }() @@ -2511,6 +2493,8 @@ func TestAvoidUncessaryUpdates(t *testing.T) { return true, objv1, nil }) testClient.PrependReactor("update", "horizontalpodautoscalers", func(action core.Action) (handled bool, ret runtime.Object, err error) { + tc.Lock() + defer tc.Unlock() assert.Fail(t, "should not have attempted to update the HPA when nothing changed") // mark that we've processed this HPA tc.processed <- "" diff --git a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/legacy_horizontal_test.go b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/legacy_horizontal_test.go index a0621a36d..dfcda2e29 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/legacy_horizontal_test.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/legacy_horizontal_test.go @@ -332,22 +332,19 @@ func (tc *legacyTestCase) prepareTestClient(t *testing.T) (*fake.Clientset, *sca }) fakeClient.AddReactor("update", "horizontalpodautoscalers", func(action core.Action) (handled bool, ret runtime.Object, err error) { - obj := func() *autoscalingv1.HorizontalPodAutoscaler { - tc.Lock() - defer tc.Unlock() - - obj := action.(core.UpdateAction).GetObject().(*autoscalingv1.HorizontalPodAutoscaler) - assert.Equal(t, namespace, obj.Namespace, "the HPA namespace should be as expected") - assert.Equal(t, hpaName, obj.Name, "the HPA name should be as expected") - assert.Equal(t, tc.desiredReplicas, obj.Status.DesiredReplicas, "the desired replica count reported in the object status should be as expected") - if tc.verifyCPUCurrent { - if assert.NotNil(t, obj.Status.CurrentCPUUtilizationPercentage, "the reported CPU utilization percentage should be non-nil") { - assert.Equal(t, tc.CPUCurrent, *obj.Status.CurrentCPUUtilizationPercentage, "the report CPU utilization percentage should be as expected") - } + tc.Lock() + defer tc.Unlock() + + obj := action.(core.UpdateAction).GetObject().(*autoscalingv1.HorizontalPodAutoscaler) + assert.Equal(t, namespace, obj.Namespace, "the HPA namespace should be as expected") + assert.Equal(t, hpaName, obj.Name, "the HPA name should be as expected") + assert.Equal(t, tc.desiredReplicas, obj.Status.DesiredReplicas, "the desired replica count reported in the object status should be as expected") + if tc.verifyCPUCurrent { + if assert.NotNil(t, obj.Status.CurrentCPUUtilizationPercentage, "the reported CPU utilization percentage should be non-nil") { + assert.Equal(t, tc.CPUCurrent, *obj.Status.CurrentCPUUtilizationPercentage, "the report CPU utilization percentage should be as expected") } - tc.statusUpdated = true - return obj - }() + } + tc.statusUpdated = true // Every time we reconcile HPA object we are updating status. tc.processed <- obj.Name return true, obj, nil @@ -475,11 +472,7 @@ func (tc *legacyTestCase) runTest(t *testing.T) { if tc.finished { return true, &v1.Event{}, nil } - create, ok := action.(core.CreateAction) - if !ok { - return false, nil, nil - } - obj := create.GetObject().(*v1.Event) + obj := action.(core.CreateAction).GetObject().(*v1.Event) if tc.verifyEvents { switch obj.Reason { case "SuccessfulRescale": diff --git a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/patch_dc.go b/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/patch_dc.go deleted file mode 100644 index 6c5ef50af..000000000 --- a/vendor/k8s.io/kubernetes/pkg/controller/podautoscaler/patch_dc.go +++ /dev/null @@ -1,20 +0,0 @@ -package podautoscaler - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" - - apimeta "k8s.io/apimachinery/pkg/api/meta" -) - -func overrideMappingsForOapiDeploymentConfig(mappings []*apimeta.RESTMapping, err error, targetGK schema.GroupKind) ([]*apimeta.RESTMapping, error) { - if (targetGK == schema.GroupKind{Kind: "DeploymentConfig"}) { - err = nil - mappings = []*apimeta.RESTMapping{ - { - Resource: schema.GroupVersionResource{Group: "apps.openshift.io", Version: "v1", Resource: "deploymentconfigs"}, - GroupVersionKind: schema.GroupVersionKind{Group: "apps.openshift.io", Version: "v1", Kind: "DeploymentConfig"}, - }, - } - } - return mappings, err -} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/BUILD b/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/BUILD index 55952f1db..cce526c9b 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/BUILD @@ -29,7 +29,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/client-go/discovery:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", @@ -54,14 +53,12 @@ go_test( "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", - "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_controller.go index bac6b9ebd..948b31814 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_controller.go @@ -30,9 +30,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime/schema" - utilerrors "k8s.io/apimachinery/pkg/util/errors" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/discovery" "k8s.io/client-go/informers" @@ -322,12 +320,12 @@ func (rq *ResourceQuotaController) syncResourceQuotaFromKey(key string) (err err // syncResourceQuota runs a complete sync of resource quota status across all known kinds func (rq *ResourceQuotaController) syncResourceQuota(resourceQuota *v1.ResourceQuota) (err error) { // quota is dirty if any part of spec hard limits differs from the status hard limits - statusLimitsDirty := !apiequality.Semantic.DeepEqual(resourceQuota.Spec.Hard, resourceQuota.Status.Hard) + dirty := !apiequality.Semantic.DeepEqual(resourceQuota.Spec.Hard, resourceQuota.Status.Hard) // dirty tracks if the usage status differs from the previous sync, // if so, we send a new usage with latest status // if this is our first sync, it will be dirty by default, since we need track usage - dirty := statusLimitsDirty || resourceQuota.Status.Hard == nil || resourceQuota.Status.Used == nil + dirty = dirty || resourceQuota.Status.Hard == nil || resourceQuota.Status.Used == nil used := v1.ResourceList{} if resourceQuota.Status.Used != nil { @@ -335,12 +333,9 @@ func (rq *ResourceQuotaController) syncResourceQuota(resourceQuota *v1.ResourceQ } hardLimits := quota.Add(v1.ResourceList{}, resourceQuota.Spec.Hard) - errors := []error{} - newUsage, err := quota.CalculateUsage(resourceQuota.Namespace, resourceQuota.Spec.Scopes, hardLimits, rq.registry, resourceQuota.Spec.ScopeSelector) if err != nil { - // if err is non-nil, remember it to return, but continue updating status with any resources in newUsage - errors = append(errors, err) + return err } for key, value := range newUsage { used[key] = value @@ -363,11 +358,9 @@ func (rq *ResourceQuotaController) syncResourceQuota(resourceQuota *v1.ResourceQ // there was a change observed by this controller that requires we update quota if dirty { _, err = rq.rqClient.ResourceQuotas(usage.Namespace).UpdateStatus(usage) - if err != nil { - errors = append(errors, err) - } + return err } - return utilerrors.NewAggregate(errors) + return nil } // replenishQuota is a replenishment function invoked by a controller to notify that a quota should be recalculated @@ -430,66 +423,26 @@ func (rq *ResourceQuotaController) Sync(discoveryFunc NamespacedResourcesFunc, p return } + // Something has changed, so track the new state and perform a sync. + klog.V(2).Infof("syncing resource quota controller with updated resources from discovery: %v", newResources) + oldResources = newResources + // Ensure workers are paused to avoid processing events before informers // have resynced. rq.workerLock.Lock() defer rq.workerLock.Unlock() - // Something has changed, so track the new state and perform a sync. - if klog.V(2) { - klog.Infof("syncing resource quota controller with updated resources from discovery: %s", printDiff(oldResources, newResources)) - } - // Perform the monitor resync and wait for controllers to report cache sync. if err := rq.resyncMonitors(newResources); err != nil { utilruntime.HandleError(fmt.Errorf("failed to sync resource monitors: %v", err)) return } - // wait for caches to fill for a while (our sync period). - // this protects us from deadlocks where available resources changed and one of our informer caches will never fill. - // informers keep attempting to sync in the background, so retrying doesn't interrupt them. - // the call to resyncMonitors on the reattempt will no-op for resources that still exist. - if rq.quotaMonitor != nil && !controller.WaitForCacheSync("resource quota", waitForStopOrTimeout(stopCh, period), rq.quotaMonitor.IsSynced) { + if rq.quotaMonitor != nil && !controller.WaitForCacheSync("resource quota", stopCh, rq.quotaMonitor.IsSynced) { utilruntime.HandleError(fmt.Errorf("timed out waiting for quota monitor sync")) - return } - - // success, remember newly synced resources - oldResources = newResources - klog.V(2).Infof("synced quota controller") }, period, stopCh) } -// printDiff returns a human-readable summary of what resources were added and removed -func printDiff(oldResources, newResources map[schema.GroupVersionResource]struct{}) string { - removed := sets.NewString() - for oldResource := range oldResources { - if _, ok := newResources[oldResource]; !ok { - removed.Insert(fmt.Sprintf("%+v", oldResource)) - } - } - added := sets.NewString() - for newResource := range newResources { - if _, ok := oldResources[newResource]; !ok { - added.Insert(fmt.Sprintf("%+v", newResource)) - } - } - return fmt.Sprintf("added: %v, removed: %v", added.List(), removed.List()) -} - -// waitForStopOrTimeout returns a stop channel that closes when the provided stop channel closes or when the specified timeout is reached -func waitForStopOrTimeout(stopCh <-chan struct{}, timeout time.Duration) <-chan struct{} { - stopChWithTimeout := make(chan struct{}) - go func() { - defer close(stopChWithTimeout) - select { - case <-stopCh: - case <-time.After(timeout): - } - }() - return stopChWithTimeout -} - // resyncMonitors starts or stops quota monitors as needed to ensure that all // (and only) those resources present in the map are monitored. func (rq *ResourceQuotaController) resyncMonitors(resources map[schema.GroupVersionResource]struct{}) error { diff --git a/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_controller_test.go b/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_controller_test.go index 1d92197b0..769b23022 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_controller_test.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_controller_test.go @@ -18,24 +18,18 @@ package resourcequota import ( "fmt" - "net/http" - "net/http/httptest" "strings" - "sync" "testing" - "time" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/fake" - "k8s.io/client-go/rest" core "k8s.io/client-go/testing" "k8s.io/client-go/tools/cache" "k8s.io/kubernetes/pkg/controller" @@ -84,29 +78,12 @@ func newGenericLister(groupResource schema.GroupResource, items []runtime.Object return cache.NewGenericLister(store, groupResource) } -func newErrorLister() cache.GenericLister { - return errorLister{} -} - -type errorLister struct { -} - -func (errorLister) List(selector labels.Selector) (ret []runtime.Object, err error) { - return nil, fmt.Errorf("error listing") -} -func (errorLister) Get(name string) (runtime.Object, error) { - return nil, fmt.Errorf("error getting") -} -func (errorLister) ByNamespace(namespace string) cache.GenericNamespaceLister { - return errorLister{} -} - type quotaController struct { *ResourceQuotaController stop chan struct{} } -func setupQuotaController(t *testing.T, kubeClient kubernetes.Interface, lister quota.ListerForResourceFunc, discoveryFunc NamespacedResourcesFunc) quotaController { +func setupQuotaController(t *testing.T, kubeClient kubernetes.Interface, lister quota.ListerForResourceFunc) quotaController { informerFactory := informers.NewSharedInformerFactory(kubeClient, controller.NoResyncPeriodFunc()) quotaConfiguration := install.NewQuotaConfigurationForControllers(lister) alwaysStarted := make(chan struct{}) @@ -117,10 +94,9 @@ func setupQuotaController(t *testing.T, kubeClient kubernetes.Interface, lister ResyncPeriod: controller.NoResyncPeriodFunc, ReplenishmentResyncPeriod: controller.NoResyncPeriodFunc, IgnoredResourcesFunc: quotaConfiguration.IgnoredResources, - DiscoveryFunc: discoveryFunc, + DiscoveryFunc: mockDiscoveryFunc, Registry: generic.NewRegistry(quotaConfiguration.Evaluators()), InformersStarted: alwaysStarted, - InformerFactory: informerFactory, } qc, err := NewResourceQuotaController(resourceQuotaControllerOptions) if err != nil { @@ -223,11 +199,9 @@ func newTestPodsWithPriorityClasses() []runtime.Object { func TestSyncResourceQuota(t *testing.T) { testCases := map[string]struct { gvr schema.GroupVersionResource - errorGVR schema.GroupVersionResource items []runtime.Object quota v1.ResourceQuota status v1.ResourceQuotaStatus - expectedError string expectedActionSet sets.String }{ "non-matching-best-effort-scoped-quota": { @@ -719,75 +693,18 @@ func TestSyncResourceQuota(t *testing.T) { expectedActionSet: sets.NewString(), items: []runtime.Object{}, }, - "quota-missing-status-with-calculation-error": { - errorGVR: v1.SchemeGroupVersion.WithResource("pods"), - quota: v1.ResourceQuota{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "rq", - }, - Spec: v1.ResourceQuotaSpec{ - Hard: v1.ResourceList{ - v1.ResourcePods: resource.MustParse("1"), - }, - }, - Status: v1.ResourceQuotaStatus{}, - }, - status: v1.ResourceQuotaStatus{ - Hard: v1.ResourceList{ - v1.ResourcePods: resource.MustParse("1"), - }, - }, - expectedError: "error listing", - expectedActionSet: sets.NewString("update-resourcequotas-status"), - items: []runtime.Object{}, - }, - "quota-missing-status-with-partial-calculation-error": { - gvr: v1.SchemeGroupVersion.WithResource("configmaps"), - errorGVR: v1.SchemeGroupVersion.WithResource("pods"), - quota: v1.ResourceQuota{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: "default", - Name: "rq", - }, - Spec: v1.ResourceQuotaSpec{ - Hard: v1.ResourceList{ - v1.ResourcePods: resource.MustParse("1"), - v1.ResourceConfigMaps: resource.MustParse("1"), - }, - }, - Status: v1.ResourceQuotaStatus{}, - }, - status: v1.ResourceQuotaStatus{ - Hard: v1.ResourceList{ - v1.ResourcePods: resource.MustParse("1"), - v1.ResourceConfigMaps: resource.MustParse("1"), - }, - Used: v1.ResourceList{ - v1.ResourceConfigMaps: resource.MustParse("0"), - }, - }, - expectedError: "error listing", - expectedActionSet: sets.NewString("update-resourcequotas-status"), - items: []runtime.Object{}, - }, } for testName, testCase := range testCases { kubeClient := fake.NewSimpleClientset(&testCase.quota) listersForResourceConfig := map[schema.GroupVersionResource]cache.GenericLister{ - testCase.gvr: newGenericLister(testCase.gvr.GroupResource(), testCase.items), - testCase.errorGVR: newErrorLister(), + testCase.gvr: newGenericLister(testCase.gvr.GroupResource(), testCase.items), } - qc := setupQuotaController(t, kubeClient, mockListerForResourceFunc(listersForResourceConfig), mockDiscoveryFunc) + qc := setupQuotaController(t, kubeClient, mockListerForResourceFunc(listersForResourceConfig)) defer close(qc.stop) if err := qc.syncResourceQuota(&testCase.quota); err != nil { - if len(testCase.expectedError) == 0 || !strings.Contains(err.Error(), testCase.expectedError) { - t.Fatalf("test: %s, unexpected error: %v", testName, err) - } - } else if len(testCase.expectedError) > 0 { - t.Fatalf("test: %s, expected error %q, got none", testName, testCase.expectedError) + t.Fatalf("test: %s, unexpected error: %v", testName, err) } actionSet := sets.NewString() @@ -798,17 +715,8 @@ func TestSyncResourceQuota(t *testing.T) { t.Errorf("test: %s,\nExpected actions:\n%v\n but got:\n%v\nDifference:\n%v", testName, testCase.expectedActionSet, actionSet, testCase.expectedActionSet.Difference(actionSet)) } - var usage *v1.ResourceQuota - actions := kubeClient.Actions() - for i := len(actions) - 1; i >= 0; i-- { - if updateAction, ok := actions[i].(core.UpdateAction); ok { - usage = updateAction.GetObject().(*v1.ResourceQuota) - break - } - } - if usage == nil { - t.Errorf("test: %s,\nExpected update action usage, got none: actions:\n%v", testName, actions) - } + lastActionIndex := len(kubeClient.Actions()) - 1 + usage := kubeClient.Actions()[lastActionIndex].(core.UpdateAction).GetObject().(*v1.ResourceQuota) // ensure usage is as expected if len(usage.Status.Hard) != len(testCase.status.Hard) { @@ -843,7 +751,7 @@ func TestAddQuota(t *testing.T) { gvr: newGenericLister(gvr.GroupResource(), newTestPods()), } - qc := setupQuotaController(t, kubeClient, mockListerForResourceFunc(listersForResourceConfig), mockDiscoveryFunc) + qc := setupQuotaController(t, kubeClient, mockListerForResourceFunc(listersForResourceConfig)) defer close(qc.stop) testCases := []struct { @@ -1001,252 +909,3 @@ func TestAddQuota(t *testing.T) { } } } - -// TestDiscoverySync ensures that a discovery client error -// will not cause the quota controller to block infinitely. -func TestDiscoverySync(t *testing.T) { - serverResources := []*metav1.APIResourceList{ - { - GroupVersion: "v1", - APIResources: []metav1.APIResource{ - {Name: "pods", Namespaced: true, Kind: "Pod", Verbs: metav1.Verbs{"create", "delete", "list", "watch"}}, - }, - }, - } - unsyncableServerResources := []*metav1.APIResourceList{ - { - GroupVersion: "v1", - APIResources: []metav1.APIResource{ - {Name: "pods", Namespaced: true, Kind: "Pod", Verbs: metav1.Verbs{"create", "delete", "list", "watch"}}, - {Name: "secrets", Namespaced: true, Kind: "Secret", Verbs: metav1.Verbs{"create", "delete", "list", "watch"}}, - }, - }, - } - fakeDiscoveryClient := &fakeServerResources{ - PreferredResources: serverResources, - Error: nil, - Lock: sync.Mutex{}, - InterfaceUsedCount: 0, - } - - testHandler := &fakeActionHandler{ - response: map[string]FakeResponse{ - "GET" + "/api/v1/pods": { - 200, - []byte("{}"), - }, - "GET" + "/api/v1/secrets": { - 404, - []byte("{}"), - }, - }, - } - - srv, clientConfig := testServerAndClientConfig(testHandler.ServeHTTP) - defer srv.Close() - clientConfig.ContentConfig.NegotiatedSerializer = nil - kubeClient, err := kubernetes.NewForConfig(clientConfig) - if err != nil { - t.Fatal(err) - } - - pods := schema.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"} - secrets := schema.GroupVersionResource{Group: "", Version: "v1", Resource: "secrets"} - listersForResourceConfig := map[schema.GroupVersionResource]cache.GenericLister{ - pods: newGenericLister(pods.GroupResource(), []runtime.Object{}), - secrets: newGenericLister(secrets.GroupResource(), []runtime.Object{}), - } - qc := setupQuotaController(t, kubeClient, mockListerForResourceFunc(listersForResourceConfig), fakeDiscoveryClient.ServerPreferredNamespacedResources) - defer close(qc.stop) - - stopSync := make(chan struct{}) - defer close(stopSync) - // The pseudo-code of Sync(): - // Sync(client, period, stopCh): - // wait.Until() loops with `period` until the `stopCh` is closed : - // GetQuotableResources() - // resyncMonitors() - // controller.WaitForCacheSync() loops with `syncedPollPeriod` (hardcoded to 100ms), until either its stop channel is closed after `period`, or all caches synced. - // - // Setting the period to 200ms allows the WaitForCacheSync() to check - // for cache sync ~2 times in every wait.Until() loop. - // - // The 1s sleep in the test allows GetQuotableResources and - // resyncMonitors to run ~5 times to ensure the changes to the - // fakeDiscoveryClient are picked up. - go qc.Sync(fakeDiscoveryClient.ServerPreferredNamespacedResources, 200*time.Millisecond, stopSync) - - // Wait until the sync discovers the initial resources - time.Sleep(1 * time.Second) - - err = expectSyncNotBlocked(fakeDiscoveryClient, &qc.workerLock) - if err != nil { - t.Fatalf("Expected quotacontroller.Sync to be running but it is blocked: %v", err) - } - - // Simulate the discovery client returning an error - fakeDiscoveryClient.setPreferredResources(nil) - fakeDiscoveryClient.setError(fmt.Errorf("Error calling discoveryClient.ServerPreferredResources()")) - - // Wait until sync discovers the change - time.Sleep(1 * time.Second) - - // Remove the error from being returned and see if the quota sync is still working - fakeDiscoveryClient.setPreferredResources(serverResources) - fakeDiscoveryClient.setError(nil) - - err = expectSyncNotBlocked(fakeDiscoveryClient, &qc.workerLock) - if err != nil { - t.Fatalf("Expected quotacontroller.Sync to still be running but it is blocked: %v", err) - } - - // Simulate the discovery client returning a resource the restmapper can resolve, but will not sync caches - fakeDiscoveryClient.setPreferredResources(unsyncableServerResources) - fakeDiscoveryClient.setError(nil) - - // Wait until sync discovers the change - time.Sleep(1 * time.Second) - - // Put the resources back to normal and ensure quota sync recovers - fakeDiscoveryClient.setPreferredResources(serverResources) - fakeDiscoveryClient.setError(nil) - - err = expectSyncNotBlocked(fakeDiscoveryClient, &qc.workerLock) - if err != nil { - t.Fatalf("Expected quotacontroller.Sync to still be running but it is blocked: %v", err) - } -} - -// testServerAndClientConfig returns a server that listens and a config that can reference it -func testServerAndClientConfig(handler func(http.ResponseWriter, *http.Request)) (*httptest.Server, *rest.Config) { - srv := httptest.NewServer(http.HandlerFunc(handler)) - config := &rest.Config{ - Host: srv.URL, - } - return srv, config -} - -func expectSyncNotBlocked(fakeDiscoveryClient *fakeServerResources, workerLock *sync.RWMutex) error { - before := fakeDiscoveryClient.getInterfaceUsedCount() - t := 1 * time.Second - time.Sleep(t) - after := fakeDiscoveryClient.getInterfaceUsedCount() - if before == after { - return fmt.Errorf("discoveryClient.ServerPreferredResources() called %d times over %v", after-before, t) - } - - workerLockAcquired := make(chan struct{}) - go func() { - workerLock.Lock() - workerLock.Unlock() - close(workerLockAcquired) - }() - select { - case <-workerLockAcquired: - return nil - case <-time.After(t): - return fmt.Errorf("workerLock blocked for at least %v", t) - } -} - -type fakeServerResources struct { - PreferredResources []*metav1.APIResourceList - Error error - Lock sync.Mutex - InterfaceUsedCount int -} - -func (_ *fakeServerResources) ServerResourcesForGroupVersion(groupVersion string) (*metav1.APIResourceList, error) { - return nil, nil -} - -func (_ *fakeServerResources) ServerResources() ([]*metav1.APIResourceList, error) { - return nil, nil -} - -func (_ *fakeServerResources) ServerPreferredResources() ([]*metav1.APIResourceList, error) { - return nil, nil -} - -func (f *fakeServerResources) setPreferredResources(resources []*metav1.APIResourceList) { - f.Lock.Lock() - defer f.Lock.Unlock() - f.PreferredResources = resources -} - -func (f *fakeServerResources) setError(err error) { - f.Lock.Lock() - defer f.Lock.Unlock() - f.Error = err -} - -func (f *fakeServerResources) getInterfaceUsedCount() int { - f.Lock.Lock() - defer f.Lock.Unlock() - return f.InterfaceUsedCount -} - -func (f *fakeServerResources) ServerPreferredNamespacedResources() ([]*metav1.APIResourceList, error) { - f.Lock.Lock() - defer f.Lock.Unlock() - f.InterfaceUsedCount++ - return f.PreferredResources, f.Error -} - -// fakeAction records information about requests to aid in testing. -type fakeAction struct { - method string - path string - query string -} - -// String returns method=path to aid in testing -func (f *fakeAction) String() string { - return strings.Join([]string{f.method, f.path}, "=") -} - -type FakeResponse struct { - statusCode int - content []byte -} - -// fakeActionHandler holds a list of fakeActions received -type fakeActionHandler struct { - // statusCode and content returned by this handler for different method + path. - response map[string]FakeResponse - - lock sync.Mutex - actions []fakeAction -} - -// ServeHTTP logs the action that occurred and always returns the associated status code -func (f *fakeActionHandler) ServeHTTP(response http.ResponseWriter, request *http.Request) { - func() { - f.lock.Lock() - defer f.lock.Unlock() - - f.actions = append(f.actions, fakeAction{method: request.Method, path: request.URL.Path, query: request.URL.RawQuery}) - fakeResponse, ok := f.response[request.Method+request.URL.Path] - if !ok { - fakeResponse.statusCode = 200 - fakeResponse.content = []byte("{\"kind\": \"List\"}") - } - response.Header().Set("Content-Type", "application/json") - response.WriteHeader(fakeResponse.statusCode) - response.Write(fakeResponse.content) - }() - - // This is to allow the fakeActionHandler to simulate a watch being opened - if strings.Contains(request.URL.RawQuery, "watch=true") { - hijacker, ok := response.(http.Hijacker) - if !ok { - return - } - connection, _, err := hijacker.Hijack() - if err != nil { - return - } - defer connection.Close() - time.Sleep(30 * time.Second) - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_monitor.go b/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_monitor.go index 08dcc57e6..c3d9e1f3e 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_monitor.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/resourcequota/resource_quota_monitor.go @@ -284,13 +284,11 @@ func (qm *QuotaMonitor) IsSynced() bool { defer qm.monitorLock.Unlock() if len(qm.monitors) == 0 { - klog.V(4).Info("quota monitor not synced: no monitors") return false } - for resource, monitor := range qm.monitors { + for _, monitor := range qm.monitors { if !monitor.controller.HasSynced() { - klog.V(4).Infof("quota monitor not synced: %v", resource) return false } } diff --git a/vendor/k8s.io/kubernetes/pkg/controller/service/service_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/service/service_controller.go index 9dc738466..667611bc5 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/service/service_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/service/service_controller.go @@ -24,7 +24,7 @@ import ( "reflect" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" @@ -282,11 +282,6 @@ func (s *ServiceController) createLoadBalancerIfNeeded(key string, service *v1.S var err error if !wantsLoadBalancer(service) { - if v1helper.LoadBalancerStatusEqual(previousState, &v1.LoadBalancerStatus{}) { - return nil - } - - klog.V(3).Infof("Getting load balancer for service %s", key) _, exists, err := s.balancer.GetLoadBalancer(context.TODO(), s.clusterName, service) if err != nil { return fmt.Errorf("error getting LB for service %s: %v", key, err) diff --git a/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/tokens_controller.go b/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/tokens_controller.go index 0edc5db1c..f93cd5822 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/tokens_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/serviceaccount/tokens_controller.go @@ -42,8 +42,6 @@ import ( "k8s.io/kubernetes/pkg/util/metrics" ) -const ServiceServingCASecretKey = "service-ca.crt" - // RemoveTokenBackoff is the recommended (empirical) retry interval for removing // a secret reference from a service account when the secret is deleted. It is // exported for use by custom secret controllers. @@ -69,9 +67,6 @@ type TokensControllerOptions struct { // MaxRetries controls the maximum number of times a particular key is retried before giving up // If zero, a default max is used MaxRetries int - - // This CA will be added in the secrets of service accounts - ServiceServingCA []byte } // NewTokensController returns a new *TokensController. @@ -82,10 +77,9 @@ func NewTokensController(serviceAccounts informers.ServiceAccountInformer, secre } e := &TokensController{ - client: cl, - token: options.TokenGenerator, - rootCA: options.RootCA, - serviceServingCA: options.ServiceServingCA, + client: cl, + token: options.TokenGenerator, + rootCA: options.RootCA, syncServiceAccountQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "serviceaccount_tokens_service"), syncSecretQueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "serviceaccount_tokens_secret"), @@ -140,8 +134,7 @@ type TokensController struct { client clientset.Interface token serviceaccount.TokenGenerator - rootCA []byte - serviceServingCA []byte + rootCA []byte serviceAccounts listersv1.ServiceAccountLister // updatedSecrets is a wrapper around the shared cache which allows us to record @@ -412,9 +405,6 @@ func (e *TokensController) ensureReferencedToken(serviceAccount *v1.ServiceAccou if e.rootCA != nil && len(e.rootCA) > 0 { secret.Data[v1.ServiceAccountRootCAKey] = e.rootCA } - if e.serviceServingCA != nil && len(e.serviceServingCA) > 0 { - secret.Data[ServiceServingCASecretKey] = e.serviceServingCA - } // Save the secret createdToken, err := e.client.CoreV1().Secrets(serviceAccount.Namespace).Create(secret) @@ -504,23 +494,22 @@ func (e *TokensController) hasReferencedToken(serviceAccount *v1.ServiceAccount) return false, nil } -func (e *TokensController) secretUpdateNeeded(secret *v1.Secret) (bool, bool, bool, bool) { +func (e *TokensController) secretUpdateNeeded(secret *v1.Secret) (bool, bool, bool) { caData := secret.Data[v1.ServiceAccountRootCAKey] needsCA := len(e.rootCA) > 0 && bytes.Compare(caData, e.rootCA) != 0 - needsServiceServingCA := len(e.serviceServingCA) > 0 && bytes.Compare(secret.Data[ServiceServingCASecretKey], e.serviceServingCA) != 0 needsNamespace := len(secret.Data[v1.ServiceAccountNamespaceKey]) == 0 tokenData := secret.Data[v1.ServiceAccountTokenKey] needsToken := len(tokenData) == 0 - return needsCA, needsServiceServingCA, needsNamespace, needsToken + return needsCA, needsNamespace, needsToken } // generateTokenIfNeeded populates the token data for the given Secret if not already set func (e *TokensController) generateTokenIfNeeded(serviceAccount *v1.ServiceAccount, cachedSecret *v1.Secret) ( /* retry */ bool, error) { // Check the cached secret to see if changes are needed - if needsCA, needsServiceServingCA, needsNamespace, needsToken := e.secretUpdateNeeded(cachedSecret); !needsCA && !needsServiceServingCA && !needsToken && !needsNamespace { + if needsCA, needsNamespace, needsToken := e.secretUpdateNeeded(cachedSecret); !needsCA && !needsToken && !needsNamespace { return false, nil } @@ -539,8 +528,8 @@ func (e *TokensController) generateTokenIfNeeded(serviceAccount *v1.ServiceAccou return false, nil } - needsCA, needsServiceServingCA, needsNamespace, needsToken := e.secretUpdateNeeded(liveSecret) - if !needsCA && !needsServiceServingCA && !needsToken && !needsNamespace { + needsCA, needsNamespace, needsToken := e.secretUpdateNeeded(liveSecret) + if !needsCA && !needsToken && !needsNamespace { return false, nil } @@ -555,9 +544,6 @@ func (e *TokensController) generateTokenIfNeeded(serviceAccount *v1.ServiceAccou if needsCA { liveSecret.Data[v1.ServiceAccountRootCAKey] = e.rootCA } - if needsServiceServingCA { - liveSecret.Data[ServiceServingCASecretKey] = e.serviceServingCA - } // Set the namespace if needsNamespace { liveSecret.Data[v1.ServiceAccountNamespaceKey] = []byte(liveSecret.Namespace) diff --git a/vendor/k8s.io/kubernetes/pkg/features/kube_features.go b/vendor/k8s.io/kubernetes/pkg/features/kube_features.go index 443876c16..3a15ced22 100644 --- a/vendor/k8s.io/kubernetes/pkg/features/kube_features.go +++ b/vendor/k8s.io/kubernetes/pkg/features/kube_features.go @@ -524,7 +524,7 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS apiextensionsfeatures.CustomResourceValidation: {Default: true, PreRelease: utilfeature.Beta}, apiextensionsfeatures.CustomResourceSubresources: {Default: true, PreRelease: utilfeature.Beta}, apiextensionsfeatures.CustomResourceWebhookConversion: {Default: false, PreRelease: utilfeature.Alpha}, - apiextensionsfeatures.CustomResourcePublishOpenAPI: {Default: true, PreRelease: utilfeature.Alpha}, + apiextensionsfeatures.CustomResourcePublishOpenAPI: {Default: false, PreRelease: utilfeature.Alpha}, // features that enable backwards compatibility but are scheduled to be removed // ... diff --git a/vendor/k8s.io/kubernetes/pkg/generated/openapi/zz_generated.openapi.go b/vendor/k8s.io/kubernetes/pkg/generated/openapi/zz_generated.openapi.go deleted file mode 100644 index 3ff5ff9ea..000000000 --- a/vendor/k8s.io/kubernetes/pkg/generated/openapi/zz_generated.openapi.go +++ /dev/null @@ -1,39125 +0,0 @@ -// +build !ignore_autogenerated_openshift - -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by openapi-gen. DO NOT EDIT. - -// This file was autogenerated by openapi-gen. Do not edit it manually! - -package openapi - -import ( - spec "github.com/go-openapi/spec" - v1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - resource "k8s.io/apimachinery/pkg/api/resource" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - intstr "k8s.io/apimachinery/pkg/util/intstr" - common "k8s.io/kube-openapi/pkg/common" -) - -func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenAPIDefinition { - return map[string]common.OpenAPIDefinition{ - "k8s.io/api/admissionregistration/v1beta1.MutatingWebhookConfiguration": schema_k8sio_api_admissionregistration_v1beta1_MutatingWebhookConfiguration(ref), - "k8s.io/api/admissionregistration/v1beta1.MutatingWebhookConfigurationList": schema_k8sio_api_admissionregistration_v1beta1_MutatingWebhookConfigurationList(ref), - "k8s.io/api/admissionregistration/v1beta1.Rule": schema_k8sio_api_admissionregistration_v1beta1_Rule(ref), - "k8s.io/api/admissionregistration/v1beta1.RuleWithOperations": schema_k8sio_api_admissionregistration_v1beta1_RuleWithOperations(ref), - "k8s.io/api/admissionregistration/v1beta1.ServiceReference": schema_k8sio_api_admissionregistration_v1beta1_ServiceReference(ref), - "k8s.io/api/admissionregistration/v1beta1.ValidatingWebhookConfiguration": schema_k8sio_api_admissionregistration_v1beta1_ValidatingWebhookConfiguration(ref), - "k8s.io/api/admissionregistration/v1beta1.ValidatingWebhookConfigurationList": schema_k8sio_api_admissionregistration_v1beta1_ValidatingWebhookConfigurationList(ref), - "k8s.io/api/admissionregistration/v1beta1.Webhook": schema_k8sio_api_admissionregistration_v1beta1_Webhook(ref), - "k8s.io/api/admissionregistration/v1beta1.WebhookClientConfig": schema_k8sio_api_admissionregistration_v1beta1_WebhookClientConfig(ref), - "k8s.io/api/apps/v1.ControllerRevision": schema_k8sio_api_apps_v1_ControllerRevision(ref), - "k8s.io/api/apps/v1.ControllerRevisionList": schema_k8sio_api_apps_v1_ControllerRevisionList(ref), - "k8s.io/api/apps/v1.DaemonSet": schema_k8sio_api_apps_v1_DaemonSet(ref), - "k8s.io/api/apps/v1.DaemonSetCondition": schema_k8sio_api_apps_v1_DaemonSetCondition(ref), - "k8s.io/api/apps/v1.DaemonSetList": schema_k8sio_api_apps_v1_DaemonSetList(ref), - "k8s.io/api/apps/v1.DaemonSetSpec": schema_k8sio_api_apps_v1_DaemonSetSpec(ref), - "k8s.io/api/apps/v1.DaemonSetStatus": schema_k8sio_api_apps_v1_DaemonSetStatus(ref), - "k8s.io/api/apps/v1.DaemonSetUpdateStrategy": schema_k8sio_api_apps_v1_DaemonSetUpdateStrategy(ref), - "k8s.io/api/apps/v1.Deployment": schema_k8sio_api_apps_v1_Deployment(ref), - "k8s.io/api/apps/v1.DeploymentCondition": schema_k8sio_api_apps_v1_DeploymentCondition(ref), - "k8s.io/api/apps/v1.DeploymentList": schema_k8sio_api_apps_v1_DeploymentList(ref), - "k8s.io/api/apps/v1.DeploymentSpec": schema_k8sio_api_apps_v1_DeploymentSpec(ref), - "k8s.io/api/apps/v1.DeploymentStatus": schema_k8sio_api_apps_v1_DeploymentStatus(ref), - "k8s.io/api/apps/v1.DeploymentStrategy": schema_k8sio_api_apps_v1_DeploymentStrategy(ref), - "k8s.io/api/apps/v1.ReplicaSet": schema_k8sio_api_apps_v1_ReplicaSet(ref), - "k8s.io/api/apps/v1.ReplicaSetCondition": schema_k8sio_api_apps_v1_ReplicaSetCondition(ref), - "k8s.io/api/apps/v1.ReplicaSetList": schema_k8sio_api_apps_v1_ReplicaSetList(ref), - "k8s.io/api/apps/v1.ReplicaSetSpec": schema_k8sio_api_apps_v1_ReplicaSetSpec(ref), - "k8s.io/api/apps/v1.ReplicaSetStatus": schema_k8sio_api_apps_v1_ReplicaSetStatus(ref), - "k8s.io/api/apps/v1.RollingUpdateDaemonSet": schema_k8sio_api_apps_v1_RollingUpdateDaemonSet(ref), - "k8s.io/api/apps/v1.RollingUpdateDeployment": schema_k8sio_api_apps_v1_RollingUpdateDeployment(ref), - "k8s.io/api/apps/v1.RollingUpdateStatefulSetStrategy": schema_k8sio_api_apps_v1_RollingUpdateStatefulSetStrategy(ref), - "k8s.io/api/apps/v1.StatefulSet": schema_k8sio_api_apps_v1_StatefulSet(ref), - "k8s.io/api/apps/v1.StatefulSetCondition": schema_k8sio_api_apps_v1_StatefulSetCondition(ref), - "k8s.io/api/apps/v1.StatefulSetList": schema_k8sio_api_apps_v1_StatefulSetList(ref), - "k8s.io/api/apps/v1.StatefulSetSpec": schema_k8sio_api_apps_v1_StatefulSetSpec(ref), - "k8s.io/api/apps/v1.StatefulSetStatus": schema_k8sio_api_apps_v1_StatefulSetStatus(ref), - "k8s.io/api/apps/v1.StatefulSetUpdateStrategy": schema_k8sio_api_apps_v1_StatefulSetUpdateStrategy(ref), - "k8s.io/api/apps/v1beta1.ControllerRevision": schema_k8sio_api_apps_v1beta1_ControllerRevision(ref), - "k8s.io/api/apps/v1beta1.ControllerRevisionList": schema_k8sio_api_apps_v1beta1_ControllerRevisionList(ref), - "k8s.io/api/apps/v1beta1.Deployment": schema_k8sio_api_apps_v1beta1_Deployment(ref), - "k8s.io/api/apps/v1beta1.DeploymentCondition": schema_k8sio_api_apps_v1beta1_DeploymentCondition(ref), - "k8s.io/api/apps/v1beta1.DeploymentList": schema_k8sio_api_apps_v1beta1_DeploymentList(ref), - "k8s.io/api/apps/v1beta1.DeploymentRollback": schema_k8sio_api_apps_v1beta1_DeploymentRollback(ref), - "k8s.io/api/apps/v1beta1.DeploymentSpec": schema_k8sio_api_apps_v1beta1_DeploymentSpec(ref), - "k8s.io/api/apps/v1beta1.DeploymentStatus": schema_k8sio_api_apps_v1beta1_DeploymentStatus(ref), - "k8s.io/api/apps/v1beta1.DeploymentStrategy": schema_k8sio_api_apps_v1beta1_DeploymentStrategy(ref), - "k8s.io/api/apps/v1beta1.RollbackConfig": schema_k8sio_api_apps_v1beta1_RollbackConfig(ref), - "k8s.io/api/apps/v1beta1.RollingUpdateDeployment": schema_k8sio_api_apps_v1beta1_RollingUpdateDeployment(ref), - "k8s.io/api/apps/v1beta1.RollingUpdateStatefulSetStrategy": schema_k8sio_api_apps_v1beta1_RollingUpdateStatefulSetStrategy(ref), - "k8s.io/api/apps/v1beta1.Scale": schema_k8sio_api_apps_v1beta1_Scale(ref), - "k8s.io/api/apps/v1beta1.ScaleSpec": schema_k8sio_api_apps_v1beta1_ScaleSpec(ref), - "k8s.io/api/apps/v1beta1.ScaleStatus": schema_k8sio_api_apps_v1beta1_ScaleStatus(ref), - "k8s.io/api/apps/v1beta1.StatefulSet": schema_k8sio_api_apps_v1beta1_StatefulSet(ref), - "k8s.io/api/apps/v1beta1.StatefulSetCondition": schema_k8sio_api_apps_v1beta1_StatefulSetCondition(ref), - "k8s.io/api/apps/v1beta1.StatefulSetList": schema_k8sio_api_apps_v1beta1_StatefulSetList(ref), - "k8s.io/api/apps/v1beta1.StatefulSetSpec": schema_k8sio_api_apps_v1beta1_StatefulSetSpec(ref), - "k8s.io/api/apps/v1beta1.StatefulSetStatus": schema_k8sio_api_apps_v1beta1_StatefulSetStatus(ref), - "k8s.io/api/apps/v1beta1.StatefulSetUpdateStrategy": schema_k8sio_api_apps_v1beta1_StatefulSetUpdateStrategy(ref), - "k8s.io/api/apps/v1beta2.ControllerRevision": schema_k8sio_api_apps_v1beta2_ControllerRevision(ref), - "k8s.io/api/apps/v1beta2.ControllerRevisionList": schema_k8sio_api_apps_v1beta2_ControllerRevisionList(ref), - "k8s.io/api/apps/v1beta2.DaemonSet": schema_k8sio_api_apps_v1beta2_DaemonSet(ref), - "k8s.io/api/apps/v1beta2.DaemonSetCondition": schema_k8sio_api_apps_v1beta2_DaemonSetCondition(ref), - "k8s.io/api/apps/v1beta2.DaemonSetList": schema_k8sio_api_apps_v1beta2_DaemonSetList(ref), - "k8s.io/api/apps/v1beta2.DaemonSetSpec": schema_k8sio_api_apps_v1beta2_DaemonSetSpec(ref), - "k8s.io/api/apps/v1beta2.DaemonSetStatus": schema_k8sio_api_apps_v1beta2_DaemonSetStatus(ref), - "k8s.io/api/apps/v1beta2.DaemonSetUpdateStrategy": schema_k8sio_api_apps_v1beta2_DaemonSetUpdateStrategy(ref), - "k8s.io/api/apps/v1beta2.Deployment": schema_k8sio_api_apps_v1beta2_Deployment(ref), - "k8s.io/api/apps/v1beta2.DeploymentCondition": schema_k8sio_api_apps_v1beta2_DeploymentCondition(ref), - "k8s.io/api/apps/v1beta2.DeploymentList": schema_k8sio_api_apps_v1beta2_DeploymentList(ref), - "k8s.io/api/apps/v1beta2.DeploymentSpec": schema_k8sio_api_apps_v1beta2_DeploymentSpec(ref), - "k8s.io/api/apps/v1beta2.DeploymentStatus": schema_k8sio_api_apps_v1beta2_DeploymentStatus(ref), - "k8s.io/api/apps/v1beta2.DeploymentStrategy": schema_k8sio_api_apps_v1beta2_DeploymentStrategy(ref), - "k8s.io/api/apps/v1beta2.ReplicaSet": schema_k8sio_api_apps_v1beta2_ReplicaSet(ref), - "k8s.io/api/apps/v1beta2.ReplicaSetCondition": schema_k8sio_api_apps_v1beta2_ReplicaSetCondition(ref), - "k8s.io/api/apps/v1beta2.ReplicaSetList": schema_k8sio_api_apps_v1beta2_ReplicaSetList(ref), - "k8s.io/api/apps/v1beta2.ReplicaSetSpec": schema_k8sio_api_apps_v1beta2_ReplicaSetSpec(ref), - "k8s.io/api/apps/v1beta2.ReplicaSetStatus": schema_k8sio_api_apps_v1beta2_ReplicaSetStatus(ref), - "k8s.io/api/apps/v1beta2.RollingUpdateDaemonSet": schema_k8sio_api_apps_v1beta2_RollingUpdateDaemonSet(ref), - "k8s.io/api/apps/v1beta2.RollingUpdateDeployment": schema_k8sio_api_apps_v1beta2_RollingUpdateDeployment(ref), - "k8s.io/api/apps/v1beta2.RollingUpdateStatefulSetStrategy": schema_k8sio_api_apps_v1beta2_RollingUpdateStatefulSetStrategy(ref), - "k8s.io/api/apps/v1beta2.Scale": schema_k8sio_api_apps_v1beta2_Scale(ref), - "k8s.io/api/apps/v1beta2.ScaleSpec": schema_k8sio_api_apps_v1beta2_ScaleSpec(ref), - "k8s.io/api/apps/v1beta2.ScaleStatus": schema_k8sio_api_apps_v1beta2_ScaleStatus(ref), - "k8s.io/api/apps/v1beta2.StatefulSet": schema_k8sio_api_apps_v1beta2_StatefulSet(ref), - "k8s.io/api/apps/v1beta2.StatefulSetCondition": schema_k8sio_api_apps_v1beta2_StatefulSetCondition(ref), - "k8s.io/api/apps/v1beta2.StatefulSetList": schema_k8sio_api_apps_v1beta2_StatefulSetList(ref), - "k8s.io/api/apps/v1beta2.StatefulSetSpec": schema_k8sio_api_apps_v1beta2_StatefulSetSpec(ref), - "k8s.io/api/apps/v1beta2.StatefulSetStatus": schema_k8sio_api_apps_v1beta2_StatefulSetStatus(ref), - "k8s.io/api/apps/v1beta2.StatefulSetUpdateStrategy": schema_k8sio_api_apps_v1beta2_StatefulSetUpdateStrategy(ref), - "k8s.io/api/auditregistration/v1alpha1.AuditSink": schema_k8sio_api_auditregistration_v1alpha1_AuditSink(ref), - "k8s.io/api/auditregistration/v1alpha1.AuditSinkList": schema_k8sio_api_auditregistration_v1alpha1_AuditSinkList(ref), - "k8s.io/api/auditregistration/v1alpha1.AuditSinkSpec": schema_k8sio_api_auditregistration_v1alpha1_AuditSinkSpec(ref), - "k8s.io/api/auditregistration/v1alpha1.Policy": schema_k8sio_api_auditregistration_v1alpha1_Policy(ref), - "k8s.io/api/auditregistration/v1alpha1.ServiceReference": schema_k8sio_api_auditregistration_v1alpha1_ServiceReference(ref), - "k8s.io/api/auditregistration/v1alpha1.Webhook": schema_k8sio_api_auditregistration_v1alpha1_Webhook(ref), - "k8s.io/api/auditregistration/v1alpha1.WebhookClientConfig": schema_k8sio_api_auditregistration_v1alpha1_WebhookClientConfig(ref), - "k8s.io/api/auditregistration/v1alpha1.WebhookThrottleConfig": schema_k8sio_api_auditregistration_v1alpha1_WebhookThrottleConfig(ref), - "k8s.io/api/authentication/v1.BoundObjectReference": schema_k8sio_api_authentication_v1_BoundObjectReference(ref), - "k8s.io/api/authentication/v1.TokenRequest": schema_k8sio_api_authentication_v1_TokenRequest(ref), - "k8s.io/api/authentication/v1.TokenRequestSpec": schema_k8sio_api_authentication_v1_TokenRequestSpec(ref), - "k8s.io/api/authentication/v1.TokenRequestStatus": schema_k8sio_api_authentication_v1_TokenRequestStatus(ref), - "k8s.io/api/authentication/v1.TokenReview": schema_k8sio_api_authentication_v1_TokenReview(ref), - "k8s.io/api/authentication/v1.TokenReviewSpec": schema_k8sio_api_authentication_v1_TokenReviewSpec(ref), - "k8s.io/api/authentication/v1.TokenReviewStatus": schema_k8sio_api_authentication_v1_TokenReviewStatus(ref), - "k8s.io/api/authentication/v1.UserInfo": schema_k8sio_api_authentication_v1_UserInfo(ref), - "k8s.io/api/authentication/v1beta1.TokenReview": schema_k8sio_api_authentication_v1beta1_TokenReview(ref), - "k8s.io/api/authentication/v1beta1.TokenReviewSpec": schema_k8sio_api_authentication_v1beta1_TokenReviewSpec(ref), - "k8s.io/api/authentication/v1beta1.TokenReviewStatus": schema_k8sio_api_authentication_v1beta1_TokenReviewStatus(ref), - "k8s.io/api/authentication/v1beta1.UserInfo": schema_k8sio_api_authentication_v1beta1_UserInfo(ref), - "k8s.io/api/authorization/v1.LocalSubjectAccessReview": schema_k8sio_api_authorization_v1_LocalSubjectAccessReview(ref), - "k8s.io/api/authorization/v1.NonResourceAttributes": schema_k8sio_api_authorization_v1_NonResourceAttributes(ref), - "k8s.io/api/authorization/v1.NonResourceRule": schema_k8sio_api_authorization_v1_NonResourceRule(ref), - "k8s.io/api/authorization/v1.ResourceAttributes": schema_k8sio_api_authorization_v1_ResourceAttributes(ref), - "k8s.io/api/authorization/v1.ResourceRule": schema_k8sio_api_authorization_v1_ResourceRule(ref), - "k8s.io/api/authorization/v1.SelfSubjectAccessReview": schema_k8sio_api_authorization_v1_SelfSubjectAccessReview(ref), - "k8s.io/api/authorization/v1.SelfSubjectAccessReviewSpec": schema_k8sio_api_authorization_v1_SelfSubjectAccessReviewSpec(ref), - "k8s.io/api/authorization/v1.SelfSubjectRulesReview": schema_k8sio_api_authorization_v1_SelfSubjectRulesReview(ref), - "k8s.io/api/authorization/v1.SelfSubjectRulesReviewSpec": schema_k8sio_api_authorization_v1_SelfSubjectRulesReviewSpec(ref), - "k8s.io/api/authorization/v1.SubjectAccessReview": schema_k8sio_api_authorization_v1_SubjectAccessReview(ref), - "k8s.io/api/authorization/v1.SubjectAccessReviewSpec": schema_k8sio_api_authorization_v1_SubjectAccessReviewSpec(ref), - "k8s.io/api/authorization/v1.SubjectAccessReviewStatus": schema_k8sio_api_authorization_v1_SubjectAccessReviewStatus(ref), - "k8s.io/api/authorization/v1.SubjectRulesReviewStatus": schema_k8sio_api_authorization_v1_SubjectRulesReviewStatus(ref), - "k8s.io/api/authorization/v1beta1.LocalSubjectAccessReview": schema_k8sio_api_authorization_v1beta1_LocalSubjectAccessReview(ref), - "k8s.io/api/authorization/v1beta1.NonResourceAttributes": schema_k8sio_api_authorization_v1beta1_NonResourceAttributes(ref), - "k8s.io/api/authorization/v1beta1.NonResourceRule": schema_k8sio_api_authorization_v1beta1_NonResourceRule(ref), - "k8s.io/api/authorization/v1beta1.ResourceAttributes": schema_k8sio_api_authorization_v1beta1_ResourceAttributes(ref), - "k8s.io/api/authorization/v1beta1.ResourceRule": schema_k8sio_api_authorization_v1beta1_ResourceRule(ref), - "k8s.io/api/authorization/v1beta1.SelfSubjectAccessReview": schema_k8sio_api_authorization_v1beta1_SelfSubjectAccessReview(ref), - "k8s.io/api/authorization/v1beta1.SelfSubjectAccessReviewSpec": schema_k8sio_api_authorization_v1beta1_SelfSubjectAccessReviewSpec(ref), - "k8s.io/api/authorization/v1beta1.SelfSubjectRulesReview": schema_k8sio_api_authorization_v1beta1_SelfSubjectRulesReview(ref), - "k8s.io/api/authorization/v1beta1.SelfSubjectRulesReviewSpec": schema_k8sio_api_authorization_v1beta1_SelfSubjectRulesReviewSpec(ref), - "k8s.io/api/authorization/v1beta1.SubjectAccessReview": schema_k8sio_api_authorization_v1beta1_SubjectAccessReview(ref), - "k8s.io/api/authorization/v1beta1.SubjectAccessReviewSpec": schema_k8sio_api_authorization_v1beta1_SubjectAccessReviewSpec(ref), - "k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus": schema_k8sio_api_authorization_v1beta1_SubjectAccessReviewStatus(ref), - "k8s.io/api/authorization/v1beta1.SubjectRulesReviewStatus": schema_k8sio_api_authorization_v1beta1_SubjectRulesReviewStatus(ref), - "k8s.io/api/autoscaling/v1.CrossVersionObjectReference": schema_k8sio_api_autoscaling_v1_CrossVersionObjectReference(ref), - "k8s.io/api/autoscaling/v1.ExternalMetricSource": schema_k8sio_api_autoscaling_v1_ExternalMetricSource(ref), - "k8s.io/api/autoscaling/v1.ExternalMetricStatus": schema_k8sio_api_autoscaling_v1_ExternalMetricStatus(ref), - "k8s.io/api/autoscaling/v1.HorizontalPodAutoscaler": schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscaler(ref), - "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerCondition": schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerCondition(ref), - "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerList": schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerList(ref), - "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerSpec": schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerSpec(ref), - "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerStatus": schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerStatus(ref), - "k8s.io/api/autoscaling/v1.MetricSpec": schema_k8sio_api_autoscaling_v1_MetricSpec(ref), - "k8s.io/api/autoscaling/v1.MetricStatus": schema_k8sio_api_autoscaling_v1_MetricStatus(ref), - "k8s.io/api/autoscaling/v1.ObjectMetricSource": schema_k8sio_api_autoscaling_v1_ObjectMetricSource(ref), - "k8s.io/api/autoscaling/v1.ObjectMetricStatus": schema_k8sio_api_autoscaling_v1_ObjectMetricStatus(ref), - "k8s.io/api/autoscaling/v1.PodsMetricSource": schema_k8sio_api_autoscaling_v1_PodsMetricSource(ref), - "k8s.io/api/autoscaling/v1.PodsMetricStatus": schema_k8sio_api_autoscaling_v1_PodsMetricStatus(ref), - "k8s.io/api/autoscaling/v1.ResourceMetricSource": schema_k8sio_api_autoscaling_v1_ResourceMetricSource(ref), - "k8s.io/api/autoscaling/v1.ResourceMetricStatus": schema_k8sio_api_autoscaling_v1_ResourceMetricStatus(ref), - "k8s.io/api/autoscaling/v1.Scale": schema_k8sio_api_autoscaling_v1_Scale(ref), - "k8s.io/api/autoscaling/v1.ScaleSpec": schema_k8sio_api_autoscaling_v1_ScaleSpec(ref), - "k8s.io/api/autoscaling/v1.ScaleStatus": schema_k8sio_api_autoscaling_v1_ScaleStatus(ref), - "k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference": schema_k8sio_api_autoscaling_v2beta1_CrossVersionObjectReference(ref), - "k8s.io/api/autoscaling/v2beta1.ExternalMetricSource": schema_k8sio_api_autoscaling_v2beta1_ExternalMetricSource(ref), - "k8s.io/api/autoscaling/v2beta1.ExternalMetricStatus": schema_k8sio_api_autoscaling_v2beta1_ExternalMetricStatus(ref), - "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscaler": schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscaler(ref), - "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerCondition": schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerCondition(ref), - "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerList": schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerList(ref), - "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerSpec": schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerSpec(ref), - "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerStatus": schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerStatus(ref), - "k8s.io/api/autoscaling/v2beta1.MetricSpec": schema_k8sio_api_autoscaling_v2beta1_MetricSpec(ref), - "k8s.io/api/autoscaling/v2beta1.MetricStatus": schema_k8sio_api_autoscaling_v2beta1_MetricStatus(ref), - "k8s.io/api/autoscaling/v2beta1.ObjectMetricSource": schema_k8sio_api_autoscaling_v2beta1_ObjectMetricSource(ref), - "k8s.io/api/autoscaling/v2beta1.ObjectMetricStatus": schema_k8sio_api_autoscaling_v2beta1_ObjectMetricStatus(ref), - "k8s.io/api/autoscaling/v2beta1.PodsMetricSource": schema_k8sio_api_autoscaling_v2beta1_PodsMetricSource(ref), - "k8s.io/api/autoscaling/v2beta1.PodsMetricStatus": schema_k8sio_api_autoscaling_v2beta1_PodsMetricStatus(ref), - "k8s.io/api/autoscaling/v2beta1.ResourceMetricSource": schema_k8sio_api_autoscaling_v2beta1_ResourceMetricSource(ref), - "k8s.io/api/autoscaling/v2beta1.ResourceMetricStatus": schema_k8sio_api_autoscaling_v2beta1_ResourceMetricStatus(ref), - "k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference": schema_k8sio_api_autoscaling_v2beta2_CrossVersionObjectReference(ref), - "k8s.io/api/autoscaling/v2beta2.ExternalMetricSource": schema_k8sio_api_autoscaling_v2beta2_ExternalMetricSource(ref), - "k8s.io/api/autoscaling/v2beta2.ExternalMetricStatus": schema_k8sio_api_autoscaling_v2beta2_ExternalMetricStatus(ref), - "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscaler": schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscaler(ref), - "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerCondition": schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerCondition(ref), - "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerList": schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerList(ref), - "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerSpec": schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerSpec(ref), - "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerStatus": schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerStatus(ref), - "k8s.io/api/autoscaling/v2beta2.MetricIdentifier": schema_k8sio_api_autoscaling_v2beta2_MetricIdentifier(ref), - "k8s.io/api/autoscaling/v2beta2.MetricSpec": schema_k8sio_api_autoscaling_v2beta2_MetricSpec(ref), - "k8s.io/api/autoscaling/v2beta2.MetricStatus": schema_k8sio_api_autoscaling_v2beta2_MetricStatus(ref), - "k8s.io/api/autoscaling/v2beta2.MetricTarget": schema_k8sio_api_autoscaling_v2beta2_MetricTarget(ref), - "k8s.io/api/autoscaling/v2beta2.MetricValueStatus": schema_k8sio_api_autoscaling_v2beta2_MetricValueStatus(ref), - "k8s.io/api/autoscaling/v2beta2.ObjectMetricSource": schema_k8sio_api_autoscaling_v2beta2_ObjectMetricSource(ref), - "k8s.io/api/autoscaling/v2beta2.ObjectMetricStatus": schema_k8sio_api_autoscaling_v2beta2_ObjectMetricStatus(ref), - "k8s.io/api/autoscaling/v2beta2.PodsMetricSource": schema_k8sio_api_autoscaling_v2beta2_PodsMetricSource(ref), - "k8s.io/api/autoscaling/v2beta2.PodsMetricStatus": schema_k8sio_api_autoscaling_v2beta2_PodsMetricStatus(ref), - "k8s.io/api/autoscaling/v2beta2.ResourceMetricSource": schema_k8sio_api_autoscaling_v2beta2_ResourceMetricSource(ref), - "k8s.io/api/autoscaling/v2beta2.ResourceMetricStatus": schema_k8sio_api_autoscaling_v2beta2_ResourceMetricStatus(ref), - "k8s.io/api/batch/v1.Job": schema_k8sio_api_batch_v1_Job(ref), - "k8s.io/api/batch/v1.JobCondition": schema_k8sio_api_batch_v1_JobCondition(ref), - "k8s.io/api/batch/v1.JobList": schema_k8sio_api_batch_v1_JobList(ref), - "k8s.io/api/batch/v1.JobSpec": schema_k8sio_api_batch_v1_JobSpec(ref), - "k8s.io/api/batch/v1.JobStatus": schema_k8sio_api_batch_v1_JobStatus(ref), - "k8s.io/api/batch/v1beta1.CronJob": schema_k8sio_api_batch_v1beta1_CronJob(ref), - "k8s.io/api/batch/v1beta1.CronJobList": schema_k8sio_api_batch_v1beta1_CronJobList(ref), - "k8s.io/api/batch/v1beta1.CronJobSpec": schema_k8sio_api_batch_v1beta1_CronJobSpec(ref), - "k8s.io/api/batch/v1beta1.CronJobStatus": schema_k8sio_api_batch_v1beta1_CronJobStatus(ref), - "k8s.io/api/batch/v1beta1.JobTemplate": schema_k8sio_api_batch_v1beta1_JobTemplate(ref), - "k8s.io/api/batch/v1beta1.JobTemplateSpec": schema_k8sio_api_batch_v1beta1_JobTemplateSpec(ref), - "k8s.io/api/batch/v2alpha1.CronJob": schema_k8sio_api_batch_v2alpha1_CronJob(ref), - "k8s.io/api/batch/v2alpha1.CronJobList": schema_k8sio_api_batch_v2alpha1_CronJobList(ref), - "k8s.io/api/batch/v2alpha1.CronJobSpec": schema_k8sio_api_batch_v2alpha1_CronJobSpec(ref), - "k8s.io/api/batch/v2alpha1.CronJobStatus": schema_k8sio_api_batch_v2alpha1_CronJobStatus(ref), - "k8s.io/api/batch/v2alpha1.JobTemplate": schema_k8sio_api_batch_v2alpha1_JobTemplate(ref), - "k8s.io/api/batch/v2alpha1.JobTemplateSpec": schema_k8sio_api_batch_v2alpha1_JobTemplateSpec(ref), - "k8s.io/api/certificates/v1beta1.CertificateSigningRequest": schema_k8sio_api_certificates_v1beta1_CertificateSigningRequest(ref), - "k8s.io/api/certificates/v1beta1.CertificateSigningRequestCondition": schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestCondition(ref), - "k8s.io/api/certificates/v1beta1.CertificateSigningRequestList": schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestList(ref), - "k8s.io/api/certificates/v1beta1.CertificateSigningRequestSpec": schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestSpec(ref), - "k8s.io/api/certificates/v1beta1.CertificateSigningRequestStatus": schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestStatus(ref), - "k8s.io/api/coordination/v1.Lease": schema_k8sio_api_coordination_v1_Lease(ref), - "k8s.io/api/coordination/v1.LeaseList": schema_k8sio_api_coordination_v1_LeaseList(ref), - "k8s.io/api/coordination/v1.LeaseSpec": schema_k8sio_api_coordination_v1_LeaseSpec(ref), - "k8s.io/api/coordination/v1beta1.Lease": schema_k8sio_api_coordination_v1beta1_Lease(ref), - "k8s.io/api/coordination/v1beta1.LeaseList": schema_k8sio_api_coordination_v1beta1_LeaseList(ref), - "k8s.io/api/coordination/v1beta1.LeaseSpec": schema_k8sio_api_coordination_v1beta1_LeaseSpec(ref), - "k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource": schema_k8sio_api_core_v1_AWSElasticBlockStoreVolumeSource(ref), - "k8s.io/api/core/v1.Affinity": schema_k8sio_api_core_v1_Affinity(ref), - "k8s.io/api/core/v1.AttachedVolume": schema_k8sio_api_core_v1_AttachedVolume(ref), - "k8s.io/api/core/v1.AvoidPods": schema_k8sio_api_core_v1_AvoidPods(ref), - "k8s.io/api/core/v1.AzureDiskVolumeSource": schema_k8sio_api_core_v1_AzureDiskVolumeSource(ref), - "k8s.io/api/core/v1.AzureFilePersistentVolumeSource": schema_k8sio_api_core_v1_AzureFilePersistentVolumeSource(ref), - "k8s.io/api/core/v1.AzureFileVolumeSource": schema_k8sio_api_core_v1_AzureFileVolumeSource(ref), - "k8s.io/api/core/v1.Binding": schema_k8sio_api_core_v1_Binding(ref), - "k8s.io/api/core/v1.CSIPersistentVolumeSource": schema_k8sio_api_core_v1_CSIPersistentVolumeSource(ref), - "k8s.io/api/core/v1.CSIVolumeSource": schema_k8sio_api_core_v1_CSIVolumeSource(ref), - "k8s.io/api/core/v1.Capabilities": schema_k8sio_api_core_v1_Capabilities(ref), - "k8s.io/api/core/v1.CephFSPersistentVolumeSource": schema_k8sio_api_core_v1_CephFSPersistentVolumeSource(ref), - "k8s.io/api/core/v1.CephFSVolumeSource": schema_k8sio_api_core_v1_CephFSVolumeSource(ref), - "k8s.io/api/core/v1.CinderPersistentVolumeSource": schema_k8sio_api_core_v1_CinderPersistentVolumeSource(ref), - "k8s.io/api/core/v1.CinderVolumeSource": schema_k8sio_api_core_v1_CinderVolumeSource(ref), - "k8s.io/api/core/v1.ClientIPConfig": schema_k8sio_api_core_v1_ClientIPConfig(ref), - "k8s.io/api/core/v1.ComponentCondition": schema_k8sio_api_core_v1_ComponentCondition(ref), - "k8s.io/api/core/v1.ComponentStatus": schema_k8sio_api_core_v1_ComponentStatus(ref), - "k8s.io/api/core/v1.ComponentStatusList": schema_k8sio_api_core_v1_ComponentStatusList(ref), - "k8s.io/api/core/v1.ConfigMap": schema_k8sio_api_core_v1_ConfigMap(ref), - "k8s.io/api/core/v1.ConfigMapEnvSource": schema_k8sio_api_core_v1_ConfigMapEnvSource(ref), - "k8s.io/api/core/v1.ConfigMapKeySelector": schema_k8sio_api_core_v1_ConfigMapKeySelector(ref), - "k8s.io/api/core/v1.ConfigMapList": schema_k8sio_api_core_v1_ConfigMapList(ref), - "k8s.io/api/core/v1.ConfigMapNodeConfigSource": schema_k8sio_api_core_v1_ConfigMapNodeConfigSource(ref), - "k8s.io/api/core/v1.ConfigMapProjection": schema_k8sio_api_core_v1_ConfigMapProjection(ref), - "k8s.io/api/core/v1.ConfigMapVolumeSource": schema_k8sio_api_core_v1_ConfigMapVolumeSource(ref), - "k8s.io/api/core/v1.Container": schema_k8sio_api_core_v1_Container(ref), - "k8s.io/api/core/v1.ContainerImage": schema_k8sio_api_core_v1_ContainerImage(ref), - "k8s.io/api/core/v1.ContainerPort": schema_k8sio_api_core_v1_ContainerPort(ref), - "k8s.io/api/core/v1.ContainerState": schema_k8sio_api_core_v1_ContainerState(ref), - "k8s.io/api/core/v1.ContainerStateRunning": schema_k8sio_api_core_v1_ContainerStateRunning(ref), - "k8s.io/api/core/v1.ContainerStateTerminated": schema_k8sio_api_core_v1_ContainerStateTerminated(ref), - "k8s.io/api/core/v1.ContainerStateWaiting": schema_k8sio_api_core_v1_ContainerStateWaiting(ref), - "k8s.io/api/core/v1.ContainerStatus": schema_k8sio_api_core_v1_ContainerStatus(ref), - "k8s.io/api/core/v1.DaemonEndpoint": schema_k8sio_api_core_v1_DaemonEndpoint(ref), - "k8s.io/api/core/v1.DownwardAPIProjection": schema_k8sio_api_core_v1_DownwardAPIProjection(ref), - "k8s.io/api/core/v1.DownwardAPIVolumeFile": schema_k8sio_api_core_v1_DownwardAPIVolumeFile(ref), - "k8s.io/api/core/v1.DownwardAPIVolumeSource": schema_k8sio_api_core_v1_DownwardAPIVolumeSource(ref), - "k8s.io/api/core/v1.EmptyDirVolumeSource": schema_k8sio_api_core_v1_EmptyDirVolumeSource(ref), - "k8s.io/api/core/v1.EndpointAddress": schema_k8sio_api_core_v1_EndpointAddress(ref), - "k8s.io/api/core/v1.EndpointPort": schema_k8sio_api_core_v1_EndpointPort(ref), - "k8s.io/api/core/v1.EndpointSubset": schema_k8sio_api_core_v1_EndpointSubset(ref), - "k8s.io/api/core/v1.Endpoints": schema_k8sio_api_core_v1_Endpoints(ref), - "k8s.io/api/core/v1.EndpointsList": schema_k8sio_api_core_v1_EndpointsList(ref), - "k8s.io/api/core/v1.EnvFromSource": schema_k8sio_api_core_v1_EnvFromSource(ref), - "k8s.io/api/core/v1.EnvVar": schema_k8sio_api_core_v1_EnvVar(ref), - "k8s.io/api/core/v1.EnvVarSource": schema_k8sio_api_core_v1_EnvVarSource(ref), - "k8s.io/api/core/v1.Event": schema_k8sio_api_core_v1_Event(ref), - "k8s.io/api/core/v1.EventList": schema_k8sio_api_core_v1_EventList(ref), - "k8s.io/api/core/v1.EventSeries": schema_k8sio_api_core_v1_EventSeries(ref), - "k8s.io/api/core/v1.EventSource": schema_k8sio_api_core_v1_EventSource(ref), - "k8s.io/api/core/v1.ExecAction": schema_k8sio_api_core_v1_ExecAction(ref), - "k8s.io/api/core/v1.FCVolumeSource": schema_k8sio_api_core_v1_FCVolumeSource(ref), - "k8s.io/api/core/v1.FlexPersistentVolumeSource": schema_k8sio_api_core_v1_FlexPersistentVolumeSource(ref), - "k8s.io/api/core/v1.FlexVolumeSource": schema_k8sio_api_core_v1_FlexVolumeSource(ref), - "k8s.io/api/core/v1.FlockerVolumeSource": schema_k8sio_api_core_v1_FlockerVolumeSource(ref), - "k8s.io/api/core/v1.GCEPersistentDiskVolumeSource": schema_k8sio_api_core_v1_GCEPersistentDiskVolumeSource(ref), - "k8s.io/api/core/v1.GitRepoVolumeSource": schema_k8sio_api_core_v1_GitRepoVolumeSource(ref), - "k8s.io/api/core/v1.GlusterfsPersistentVolumeSource": schema_k8sio_api_core_v1_GlusterfsPersistentVolumeSource(ref), - "k8s.io/api/core/v1.GlusterfsVolumeSource": schema_k8sio_api_core_v1_GlusterfsVolumeSource(ref), - "k8s.io/api/core/v1.HTTPGetAction": schema_k8sio_api_core_v1_HTTPGetAction(ref), - "k8s.io/api/core/v1.HTTPHeader": schema_k8sio_api_core_v1_HTTPHeader(ref), - "k8s.io/api/core/v1.Handler": schema_k8sio_api_core_v1_Handler(ref), - "k8s.io/api/core/v1.HostAlias": schema_k8sio_api_core_v1_HostAlias(ref), - "k8s.io/api/core/v1.HostPathVolumeSource": schema_k8sio_api_core_v1_HostPathVolumeSource(ref), - "k8s.io/api/core/v1.ISCSIPersistentVolumeSource": schema_k8sio_api_core_v1_ISCSIPersistentVolumeSource(ref), - "k8s.io/api/core/v1.ISCSIVolumeSource": schema_k8sio_api_core_v1_ISCSIVolumeSource(ref), - "k8s.io/api/core/v1.KeyToPath": schema_k8sio_api_core_v1_KeyToPath(ref), - "k8s.io/api/core/v1.Lifecycle": schema_k8sio_api_core_v1_Lifecycle(ref), - "k8s.io/api/core/v1.LimitRange": schema_k8sio_api_core_v1_LimitRange(ref), - "k8s.io/api/core/v1.LimitRangeItem": schema_k8sio_api_core_v1_LimitRangeItem(ref), - "k8s.io/api/core/v1.LimitRangeList": schema_k8sio_api_core_v1_LimitRangeList(ref), - "k8s.io/api/core/v1.LimitRangeSpec": schema_k8sio_api_core_v1_LimitRangeSpec(ref), - "k8s.io/api/core/v1.List": schema_k8sio_api_core_v1_List(ref), - "k8s.io/api/core/v1.LoadBalancerIngress": schema_k8sio_api_core_v1_LoadBalancerIngress(ref), - "k8s.io/api/core/v1.LoadBalancerStatus": schema_k8sio_api_core_v1_LoadBalancerStatus(ref), - "k8s.io/api/core/v1.LocalObjectReference": schema_k8sio_api_core_v1_LocalObjectReference(ref), - "k8s.io/api/core/v1.LocalVolumeSource": schema_k8sio_api_core_v1_LocalVolumeSource(ref), - "k8s.io/api/core/v1.NFSVolumeSource": schema_k8sio_api_core_v1_NFSVolumeSource(ref), - "k8s.io/api/core/v1.Namespace": schema_k8sio_api_core_v1_Namespace(ref), - "k8s.io/api/core/v1.NamespaceList": schema_k8sio_api_core_v1_NamespaceList(ref), - "k8s.io/api/core/v1.NamespaceSpec": schema_k8sio_api_core_v1_NamespaceSpec(ref), - "k8s.io/api/core/v1.NamespaceStatus": schema_k8sio_api_core_v1_NamespaceStatus(ref), - "k8s.io/api/core/v1.Node": schema_k8sio_api_core_v1_Node(ref), - "k8s.io/api/core/v1.NodeAddress": schema_k8sio_api_core_v1_NodeAddress(ref), - "k8s.io/api/core/v1.NodeAffinity": schema_k8sio_api_core_v1_NodeAffinity(ref), - "k8s.io/api/core/v1.NodeCondition": schema_k8sio_api_core_v1_NodeCondition(ref), - "k8s.io/api/core/v1.NodeConfigSource": schema_k8sio_api_core_v1_NodeConfigSource(ref), - "k8s.io/api/core/v1.NodeConfigStatus": schema_k8sio_api_core_v1_NodeConfigStatus(ref), - "k8s.io/api/core/v1.NodeDaemonEndpoints": schema_k8sio_api_core_v1_NodeDaemonEndpoints(ref), - "k8s.io/api/core/v1.NodeList": schema_k8sio_api_core_v1_NodeList(ref), - "k8s.io/api/core/v1.NodeProxyOptions": schema_k8sio_api_core_v1_NodeProxyOptions(ref), - "k8s.io/api/core/v1.NodeResources": schema_k8sio_api_core_v1_NodeResources(ref), - "k8s.io/api/core/v1.NodeSelector": schema_k8sio_api_core_v1_NodeSelector(ref), - "k8s.io/api/core/v1.NodeSelectorRequirement": schema_k8sio_api_core_v1_NodeSelectorRequirement(ref), - "k8s.io/api/core/v1.NodeSelectorTerm": schema_k8sio_api_core_v1_NodeSelectorTerm(ref), - "k8s.io/api/core/v1.NodeSpec": schema_k8sio_api_core_v1_NodeSpec(ref), - "k8s.io/api/core/v1.NodeStatus": schema_k8sio_api_core_v1_NodeStatus(ref), - "k8s.io/api/core/v1.NodeSystemInfo": schema_k8sio_api_core_v1_NodeSystemInfo(ref), - "k8s.io/api/core/v1.ObjectFieldSelector": schema_k8sio_api_core_v1_ObjectFieldSelector(ref), - "k8s.io/api/core/v1.ObjectReference": schema_k8sio_api_core_v1_ObjectReference(ref), - "k8s.io/api/core/v1.PersistentVolume": schema_k8sio_api_core_v1_PersistentVolume(ref), - "k8s.io/api/core/v1.PersistentVolumeClaim": schema_k8sio_api_core_v1_PersistentVolumeClaim(ref), - "k8s.io/api/core/v1.PersistentVolumeClaimCondition": schema_k8sio_api_core_v1_PersistentVolumeClaimCondition(ref), - "k8s.io/api/core/v1.PersistentVolumeClaimList": schema_k8sio_api_core_v1_PersistentVolumeClaimList(ref), - "k8s.io/api/core/v1.PersistentVolumeClaimSpec": schema_k8sio_api_core_v1_PersistentVolumeClaimSpec(ref), - "k8s.io/api/core/v1.PersistentVolumeClaimStatus": schema_k8sio_api_core_v1_PersistentVolumeClaimStatus(ref), - "k8s.io/api/core/v1.PersistentVolumeClaimVolumeSource": schema_k8sio_api_core_v1_PersistentVolumeClaimVolumeSource(ref), - "k8s.io/api/core/v1.PersistentVolumeList": schema_k8sio_api_core_v1_PersistentVolumeList(ref), - "k8s.io/api/core/v1.PersistentVolumeSource": schema_k8sio_api_core_v1_PersistentVolumeSource(ref), - "k8s.io/api/core/v1.PersistentVolumeSpec": schema_k8sio_api_core_v1_PersistentVolumeSpec(ref), - "k8s.io/api/core/v1.PersistentVolumeStatus": schema_k8sio_api_core_v1_PersistentVolumeStatus(ref), - "k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource": schema_k8sio_api_core_v1_PhotonPersistentDiskVolumeSource(ref), - "k8s.io/api/core/v1.Pod": schema_k8sio_api_core_v1_Pod(ref), - "k8s.io/api/core/v1.PodAffinity": schema_k8sio_api_core_v1_PodAffinity(ref), - "k8s.io/api/core/v1.PodAffinityTerm": schema_k8sio_api_core_v1_PodAffinityTerm(ref), - "k8s.io/api/core/v1.PodAntiAffinity": schema_k8sio_api_core_v1_PodAntiAffinity(ref), - "k8s.io/api/core/v1.PodAttachOptions": schema_k8sio_api_core_v1_PodAttachOptions(ref), - "k8s.io/api/core/v1.PodCondition": schema_k8sio_api_core_v1_PodCondition(ref), - "k8s.io/api/core/v1.PodDNSConfig": schema_k8sio_api_core_v1_PodDNSConfig(ref), - "k8s.io/api/core/v1.PodDNSConfigOption": schema_k8sio_api_core_v1_PodDNSConfigOption(ref), - "k8s.io/api/core/v1.PodExecOptions": schema_k8sio_api_core_v1_PodExecOptions(ref), - "k8s.io/api/core/v1.PodList": schema_k8sio_api_core_v1_PodList(ref), - "k8s.io/api/core/v1.PodLogOptions": schema_k8sio_api_core_v1_PodLogOptions(ref), - "k8s.io/api/core/v1.PodPortForwardOptions": schema_k8sio_api_core_v1_PodPortForwardOptions(ref), - "k8s.io/api/core/v1.PodProxyOptions": schema_k8sio_api_core_v1_PodProxyOptions(ref), - "k8s.io/api/core/v1.PodReadinessGate": schema_k8sio_api_core_v1_PodReadinessGate(ref), - "k8s.io/api/core/v1.PodSecurityContext": schema_k8sio_api_core_v1_PodSecurityContext(ref), - "k8s.io/api/core/v1.PodSignature": schema_k8sio_api_core_v1_PodSignature(ref), - "k8s.io/api/core/v1.PodSpec": schema_k8sio_api_core_v1_PodSpec(ref), - "k8s.io/api/core/v1.PodStatus": schema_k8sio_api_core_v1_PodStatus(ref), - "k8s.io/api/core/v1.PodStatusResult": schema_k8sio_api_core_v1_PodStatusResult(ref), - "k8s.io/api/core/v1.PodTemplate": schema_k8sio_api_core_v1_PodTemplate(ref), - "k8s.io/api/core/v1.PodTemplateList": schema_k8sio_api_core_v1_PodTemplateList(ref), - "k8s.io/api/core/v1.PodTemplateSpec": schema_k8sio_api_core_v1_PodTemplateSpec(ref), - "k8s.io/api/core/v1.PortworxVolumeSource": schema_k8sio_api_core_v1_PortworxVolumeSource(ref), - "k8s.io/api/core/v1.PreferAvoidPodsEntry": schema_k8sio_api_core_v1_PreferAvoidPodsEntry(ref), - "k8s.io/api/core/v1.PreferredSchedulingTerm": schema_k8sio_api_core_v1_PreferredSchedulingTerm(ref), - "k8s.io/api/core/v1.Probe": schema_k8sio_api_core_v1_Probe(ref), - "k8s.io/api/core/v1.ProjectedVolumeSource": schema_k8sio_api_core_v1_ProjectedVolumeSource(ref), - "k8s.io/api/core/v1.QuobyteVolumeSource": schema_k8sio_api_core_v1_QuobyteVolumeSource(ref), - "k8s.io/api/core/v1.RBDPersistentVolumeSource": schema_k8sio_api_core_v1_RBDPersistentVolumeSource(ref), - "k8s.io/api/core/v1.RBDVolumeSource": schema_k8sio_api_core_v1_RBDVolumeSource(ref), - "k8s.io/api/core/v1.RangeAllocation": schema_k8sio_api_core_v1_RangeAllocation(ref), - "k8s.io/api/core/v1.ReplicationController": schema_k8sio_api_core_v1_ReplicationController(ref), - "k8s.io/api/core/v1.ReplicationControllerCondition": schema_k8sio_api_core_v1_ReplicationControllerCondition(ref), - "k8s.io/api/core/v1.ReplicationControllerList": schema_k8sio_api_core_v1_ReplicationControllerList(ref), - "k8s.io/api/core/v1.ReplicationControllerSpec": schema_k8sio_api_core_v1_ReplicationControllerSpec(ref), - "k8s.io/api/core/v1.ReplicationControllerStatus": schema_k8sio_api_core_v1_ReplicationControllerStatus(ref), - "k8s.io/api/core/v1.ResourceFieldSelector": schema_k8sio_api_core_v1_ResourceFieldSelector(ref), - "k8s.io/api/core/v1.ResourceQuota": schema_k8sio_api_core_v1_ResourceQuota(ref), - "k8s.io/api/core/v1.ResourceQuotaList": schema_k8sio_api_core_v1_ResourceQuotaList(ref), - "k8s.io/api/core/v1.ResourceQuotaSpec": schema_k8sio_api_core_v1_ResourceQuotaSpec(ref), - "k8s.io/api/core/v1.ResourceQuotaStatus": schema_k8sio_api_core_v1_ResourceQuotaStatus(ref), - "k8s.io/api/core/v1.ResourceRequirements": schema_k8sio_api_core_v1_ResourceRequirements(ref), - "k8s.io/api/core/v1.SELinuxOptions": schema_k8sio_api_core_v1_SELinuxOptions(ref), - "k8s.io/api/core/v1.ScaleIOPersistentVolumeSource": schema_k8sio_api_core_v1_ScaleIOPersistentVolumeSource(ref), - "k8s.io/api/core/v1.ScaleIOVolumeSource": schema_k8sio_api_core_v1_ScaleIOVolumeSource(ref), - "k8s.io/api/core/v1.ScopeSelector": schema_k8sio_api_core_v1_ScopeSelector(ref), - "k8s.io/api/core/v1.ScopedResourceSelectorRequirement": schema_k8sio_api_core_v1_ScopedResourceSelectorRequirement(ref), - "k8s.io/api/core/v1.Secret": schema_k8sio_api_core_v1_Secret(ref), - "k8s.io/api/core/v1.SecretEnvSource": schema_k8sio_api_core_v1_SecretEnvSource(ref), - "k8s.io/api/core/v1.SecretKeySelector": schema_k8sio_api_core_v1_SecretKeySelector(ref), - "k8s.io/api/core/v1.SecretList": schema_k8sio_api_core_v1_SecretList(ref), - "k8s.io/api/core/v1.SecretProjection": schema_k8sio_api_core_v1_SecretProjection(ref), - "k8s.io/api/core/v1.SecretReference": schema_k8sio_api_core_v1_SecretReference(ref), - "k8s.io/api/core/v1.SecretVolumeSource": schema_k8sio_api_core_v1_SecretVolumeSource(ref), - "k8s.io/api/core/v1.SecurityContext": schema_k8sio_api_core_v1_SecurityContext(ref), - "k8s.io/api/core/v1.SerializedReference": schema_k8sio_api_core_v1_SerializedReference(ref), - "k8s.io/api/core/v1.Service": schema_k8sio_api_core_v1_Service(ref), - "k8s.io/api/core/v1.ServiceAccount": schema_k8sio_api_core_v1_ServiceAccount(ref), - "k8s.io/api/core/v1.ServiceAccountList": schema_k8sio_api_core_v1_ServiceAccountList(ref), - "k8s.io/api/core/v1.ServiceAccountTokenProjection": schema_k8sio_api_core_v1_ServiceAccountTokenProjection(ref), - "k8s.io/api/core/v1.ServiceList": schema_k8sio_api_core_v1_ServiceList(ref), - "k8s.io/api/core/v1.ServicePort": schema_k8sio_api_core_v1_ServicePort(ref), - "k8s.io/api/core/v1.ServiceProxyOptions": schema_k8sio_api_core_v1_ServiceProxyOptions(ref), - "k8s.io/api/core/v1.ServiceSpec": schema_k8sio_api_core_v1_ServiceSpec(ref), - "k8s.io/api/core/v1.ServiceStatus": schema_k8sio_api_core_v1_ServiceStatus(ref), - "k8s.io/api/core/v1.SessionAffinityConfig": schema_k8sio_api_core_v1_SessionAffinityConfig(ref), - "k8s.io/api/core/v1.StorageOSPersistentVolumeSource": schema_k8sio_api_core_v1_StorageOSPersistentVolumeSource(ref), - "k8s.io/api/core/v1.StorageOSVolumeSource": schema_k8sio_api_core_v1_StorageOSVolumeSource(ref), - "k8s.io/api/core/v1.Sysctl": schema_k8sio_api_core_v1_Sysctl(ref), - "k8s.io/api/core/v1.TCPSocketAction": schema_k8sio_api_core_v1_TCPSocketAction(ref), - "k8s.io/api/core/v1.Taint": schema_k8sio_api_core_v1_Taint(ref), - "k8s.io/api/core/v1.Toleration": schema_k8sio_api_core_v1_Toleration(ref), - "k8s.io/api/core/v1.TopologySelectorLabelRequirement": schema_k8sio_api_core_v1_TopologySelectorLabelRequirement(ref), - "k8s.io/api/core/v1.TopologySelectorTerm": schema_k8sio_api_core_v1_TopologySelectorTerm(ref), - "k8s.io/api/core/v1.TypedLocalObjectReference": schema_k8sio_api_core_v1_TypedLocalObjectReference(ref), - "k8s.io/api/core/v1.Volume": schema_k8sio_api_core_v1_Volume(ref), - "k8s.io/api/core/v1.VolumeDevice": schema_k8sio_api_core_v1_VolumeDevice(ref), - "k8s.io/api/core/v1.VolumeMount": schema_k8sio_api_core_v1_VolumeMount(ref), - "k8s.io/api/core/v1.VolumeNodeAffinity": schema_k8sio_api_core_v1_VolumeNodeAffinity(ref), - "k8s.io/api/core/v1.VolumeProjection": schema_k8sio_api_core_v1_VolumeProjection(ref), - "k8s.io/api/core/v1.VolumeSource": schema_k8sio_api_core_v1_VolumeSource(ref), - "k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource": schema_k8sio_api_core_v1_VsphereVirtualDiskVolumeSource(ref), - "k8s.io/api/core/v1.WeightedPodAffinityTerm": schema_k8sio_api_core_v1_WeightedPodAffinityTerm(ref), - "k8s.io/api/events/v1beta1.Event": schema_k8sio_api_events_v1beta1_Event(ref), - "k8s.io/api/events/v1beta1.EventList": schema_k8sio_api_events_v1beta1_EventList(ref), - "k8s.io/api/events/v1beta1.EventSeries": schema_k8sio_api_events_v1beta1_EventSeries(ref), - "k8s.io/api/extensions/v1beta1.AllowedCSIDriver": schema_k8sio_api_extensions_v1beta1_AllowedCSIDriver(ref), - "k8s.io/api/extensions/v1beta1.AllowedFlexVolume": schema_k8sio_api_extensions_v1beta1_AllowedFlexVolume(ref), - "k8s.io/api/extensions/v1beta1.AllowedHostPath": schema_k8sio_api_extensions_v1beta1_AllowedHostPath(ref), - "k8s.io/api/extensions/v1beta1.DaemonSet": schema_k8sio_api_extensions_v1beta1_DaemonSet(ref), - "k8s.io/api/extensions/v1beta1.DaemonSetCondition": schema_k8sio_api_extensions_v1beta1_DaemonSetCondition(ref), - "k8s.io/api/extensions/v1beta1.DaemonSetList": schema_k8sio_api_extensions_v1beta1_DaemonSetList(ref), - "k8s.io/api/extensions/v1beta1.DaemonSetSpec": schema_k8sio_api_extensions_v1beta1_DaemonSetSpec(ref), - "k8s.io/api/extensions/v1beta1.DaemonSetStatus": schema_k8sio_api_extensions_v1beta1_DaemonSetStatus(ref), - "k8s.io/api/extensions/v1beta1.DaemonSetUpdateStrategy": schema_k8sio_api_extensions_v1beta1_DaemonSetUpdateStrategy(ref), - "k8s.io/api/extensions/v1beta1.Deployment": schema_k8sio_api_extensions_v1beta1_Deployment(ref), - "k8s.io/api/extensions/v1beta1.DeploymentCondition": schema_k8sio_api_extensions_v1beta1_DeploymentCondition(ref), - "k8s.io/api/extensions/v1beta1.DeploymentList": schema_k8sio_api_extensions_v1beta1_DeploymentList(ref), - "k8s.io/api/extensions/v1beta1.DeploymentRollback": schema_k8sio_api_extensions_v1beta1_DeploymentRollback(ref), - "k8s.io/api/extensions/v1beta1.DeploymentSpec": schema_k8sio_api_extensions_v1beta1_DeploymentSpec(ref), - "k8s.io/api/extensions/v1beta1.DeploymentStatus": schema_k8sio_api_extensions_v1beta1_DeploymentStatus(ref), - "k8s.io/api/extensions/v1beta1.DeploymentStrategy": schema_k8sio_api_extensions_v1beta1_DeploymentStrategy(ref), - "k8s.io/api/extensions/v1beta1.FSGroupStrategyOptions": schema_k8sio_api_extensions_v1beta1_FSGroupStrategyOptions(ref), - "k8s.io/api/extensions/v1beta1.HTTPIngressPath": schema_k8sio_api_extensions_v1beta1_HTTPIngressPath(ref), - "k8s.io/api/extensions/v1beta1.HTTPIngressRuleValue": schema_k8sio_api_extensions_v1beta1_HTTPIngressRuleValue(ref), - "k8s.io/api/extensions/v1beta1.HostPortRange": schema_k8sio_api_extensions_v1beta1_HostPortRange(ref), - "k8s.io/api/extensions/v1beta1.IDRange": schema_k8sio_api_extensions_v1beta1_IDRange(ref), - "k8s.io/api/extensions/v1beta1.IPBlock": schema_k8sio_api_extensions_v1beta1_IPBlock(ref), - "k8s.io/api/extensions/v1beta1.Ingress": schema_k8sio_api_extensions_v1beta1_Ingress(ref), - "k8s.io/api/extensions/v1beta1.IngressBackend": schema_k8sio_api_extensions_v1beta1_IngressBackend(ref), - "k8s.io/api/extensions/v1beta1.IngressList": schema_k8sio_api_extensions_v1beta1_IngressList(ref), - "k8s.io/api/extensions/v1beta1.IngressRule": schema_k8sio_api_extensions_v1beta1_IngressRule(ref), - "k8s.io/api/extensions/v1beta1.IngressRuleValue": schema_k8sio_api_extensions_v1beta1_IngressRuleValue(ref), - "k8s.io/api/extensions/v1beta1.IngressSpec": schema_k8sio_api_extensions_v1beta1_IngressSpec(ref), - "k8s.io/api/extensions/v1beta1.IngressStatus": schema_k8sio_api_extensions_v1beta1_IngressStatus(ref), - "k8s.io/api/extensions/v1beta1.IngressTLS": schema_k8sio_api_extensions_v1beta1_IngressTLS(ref), - "k8s.io/api/extensions/v1beta1.NetworkPolicy": schema_k8sio_api_extensions_v1beta1_NetworkPolicy(ref), - "k8s.io/api/extensions/v1beta1.NetworkPolicyEgressRule": schema_k8sio_api_extensions_v1beta1_NetworkPolicyEgressRule(ref), - "k8s.io/api/extensions/v1beta1.NetworkPolicyIngressRule": schema_k8sio_api_extensions_v1beta1_NetworkPolicyIngressRule(ref), - "k8s.io/api/extensions/v1beta1.NetworkPolicyList": schema_k8sio_api_extensions_v1beta1_NetworkPolicyList(ref), - "k8s.io/api/extensions/v1beta1.NetworkPolicyPeer": schema_k8sio_api_extensions_v1beta1_NetworkPolicyPeer(ref), - "k8s.io/api/extensions/v1beta1.NetworkPolicyPort": schema_k8sio_api_extensions_v1beta1_NetworkPolicyPort(ref), - "k8s.io/api/extensions/v1beta1.NetworkPolicySpec": schema_k8sio_api_extensions_v1beta1_NetworkPolicySpec(ref), - "k8s.io/api/extensions/v1beta1.PodSecurityPolicy": schema_k8sio_api_extensions_v1beta1_PodSecurityPolicy(ref), - "k8s.io/api/extensions/v1beta1.PodSecurityPolicyList": schema_k8sio_api_extensions_v1beta1_PodSecurityPolicyList(ref), - "k8s.io/api/extensions/v1beta1.PodSecurityPolicySpec": schema_k8sio_api_extensions_v1beta1_PodSecurityPolicySpec(ref), - "k8s.io/api/extensions/v1beta1.ReplicaSet": schema_k8sio_api_extensions_v1beta1_ReplicaSet(ref), - "k8s.io/api/extensions/v1beta1.ReplicaSetCondition": schema_k8sio_api_extensions_v1beta1_ReplicaSetCondition(ref), - "k8s.io/api/extensions/v1beta1.ReplicaSetList": schema_k8sio_api_extensions_v1beta1_ReplicaSetList(ref), - "k8s.io/api/extensions/v1beta1.ReplicaSetSpec": schema_k8sio_api_extensions_v1beta1_ReplicaSetSpec(ref), - "k8s.io/api/extensions/v1beta1.ReplicaSetStatus": schema_k8sio_api_extensions_v1beta1_ReplicaSetStatus(ref), - "k8s.io/api/extensions/v1beta1.ReplicationControllerDummy": schema_k8sio_api_extensions_v1beta1_ReplicationControllerDummy(ref), - "k8s.io/api/extensions/v1beta1.RollbackConfig": schema_k8sio_api_extensions_v1beta1_RollbackConfig(ref), - "k8s.io/api/extensions/v1beta1.RollingUpdateDaemonSet": schema_k8sio_api_extensions_v1beta1_RollingUpdateDaemonSet(ref), - "k8s.io/api/extensions/v1beta1.RollingUpdateDeployment": schema_k8sio_api_extensions_v1beta1_RollingUpdateDeployment(ref), - "k8s.io/api/extensions/v1beta1.RunAsGroupStrategyOptions": schema_k8sio_api_extensions_v1beta1_RunAsGroupStrategyOptions(ref), - "k8s.io/api/extensions/v1beta1.RunAsUserStrategyOptions": schema_k8sio_api_extensions_v1beta1_RunAsUserStrategyOptions(ref), - "k8s.io/api/extensions/v1beta1.SELinuxStrategyOptions": schema_k8sio_api_extensions_v1beta1_SELinuxStrategyOptions(ref), - "k8s.io/api/extensions/v1beta1.Scale": schema_k8sio_api_extensions_v1beta1_Scale(ref), - "k8s.io/api/extensions/v1beta1.ScaleSpec": schema_k8sio_api_extensions_v1beta1_ScaleSpec(ref), - "k8s.io/api/extensions/v1beta1.ScaleStatus": schema_k8sio_api_extensions_v1beta1_ScaleStatus(ref), - "k8s.io/api/extensions/v1beta1.SupplementalGroupsStrategyOptions": schema_k8sio_api_extensions_v1beta1_SupplementalGroupsStrategyOptions(ref), - "k8s.io/api/imagepolicy/v1alpha1.ImageReview": schema_k8sio_api_imagepolicy_v1alpha1_ImageReview(ref), - "k8s.io/api/imagepolicy/v1alpha1.ImageReviewContainerSpec": schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewContainerSpec(ref), - "k8s.io/api/imagepolicy/v1alpha1.ImageReviewSpec": schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewSpec(ref), - "k8s.io/api/imagepolicy/v1alpha1.ImageReviewStatus": schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewStatus(ref), - "k8s.io/api/networking/v1.IPBlock": schema_k8sio_api_networking_v1_IPBlock(ref), - "k8s.io/api/networking/v1.NetworkPolicy": schema_k8sio_api_networking_v1_NetworkPolicy(ref), - "k8s.io/api/networking/v1.NetworkPolicyEgressRule": schema_k8sio_api_networking_v1_NetworkPolicyEgressRule(ref), - "k8s.io/api/networking/v1.NetworkPolicyIngressRule": schema_k8sio_api_networking_v1_NetworkPolicyIngressRule(ref), - "k8s.io/api/networking/v1.NetworkPolicyList": schema_k8sio_api_networking_v1_NetworkPolicyList(ref), - "k8s.io/api/networking/v1.NetworkPolicyPeer": schema_k8sio_api_networking_v1_NetworkPolicyPeer(ref), - "k8s.io/api/networking/v1.NetworkPolicyPort": schema_k8sio_api_networking_v1_NetworkPolicyPort(ref), - "k8s.io/api/networking/v1.NetworkPolicySpec": schema_k8sio_api_networking_v1_NetworkPolicySpec(ref), - "k8s.io/api/networking/v1beta1.HTTPIngressPath": schema_k8sio_api_networking_v1beta1_HTTPIngressPath(ref), - "k8s.io/api/networking/v1beta1.HTTPIngressRuleValue": schema_k8sio_api_networking_v1beta1_HTTPIngressRuleValue(ref), - "k8s.io/api/networking/v1beta1.Ingress": schema_k8sio_api_networking_v1beta1_Ingress(ref), - "k8s.io/api/networking/v1beta1.IngressBackend": schema_k8sio_api_networking_v1beta1_IngressBackend(ref), - "k8s.io/api/networking/v1beta1.IngressList": schema_k8sio_api_networking_v1beta1_IngressList(ref), - "k8s.io/api/networking/v1beta1.IngressRule": schema_k8sio_api_networking_v1beta1_IngressRule(ref), - "k8s.io/api/networking/v1beta1.IngressRuleValue": schema_k8sio_api_networking_v1beta1_IngressRuleValue(ref), - "k8s.io/api/networking/v1beta1.IngressSpec": schema_k8sio_api_networking_v1beta1_IngressSpec(ref), - "k8s.io/api/networking/v1beta1.IngressStatus": schema_k8sio_api_networking_v1beta1_IngressStatus(ref), - "k8s.io/api/networking/v1beta1.IngressTLS": schema_k8sio_api_networking_v1beta1_IngressTLS(ref), - "k8s.io/api/node/v1alpha1.RuntimeClass": schema_k8sio_api_node_v1alpha1_RuntimeClass(ref), - "k8s.io/api/node/v1alpha1.RuntimeClassList": schema_k8sio_api_node_v1alpha1_RuntimeClassList(ref), - "k8s.io/api/node/v1alpha1.RuntimeClassSpec": schema_k8sio_api_node_v1alpha1_RuntimeClassSpec(ref), - "k8s.io/api/node/v1beta1.RuntimeClass": schema_k8sio_api_node_v1beta1_RuntimeClass(ref), - "k8s.io/api/node/v1beta1.RuntimeClassList": schema_k8sio_api_node_v1beta1_RuntimeClassList(ref), - "k8s.io/api/policy/v1beta1.AllowedCSIDriver": schema_k8sio_api_policy_v1beta1_AllowedCSIDriver(ref), - "k8s.io/api/policy/v1beta1.AllowedFlexVolume": schema_k8sio_api_policy_v1beta1_AllowedFlexVolume(ref), - "k8s.io/api/policy/v1beta1.AllowedHostPath": schema_k8sio_api_policy_v1beta1_AllowedHostPath(ref), - "k8s.io/api/policy/v1beta1.Eviction": schema_k8sio_api_policy_v1beta1_Eviction(ref), - "k8s.io/api/policy/v1beta1.FSGroupStrategyOptions": schema_k8sio_api_policy_v1beta1_FSGroupStrategyOptions(ref), - "k8s.io/api/policy/v1beta1.HostPortRange": schema_k8sio_api_policy_v1beta1_HostPortRange(ref), - "k8s.io/api/policy/v1beta1.IDRange": schema_k8sio_api_policy_v1beta1_IDRange(ref), - "k8s.io/api/policy/v1beta1.PodDisruptionBudget": schema_k8sio_api_policy_v1beta1_PodDisruptionBudget(ref), - "k8s.io/api/policy/v1beta1.PodDisruptionBudgetList": schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetList(ref), - "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec": schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetSpec(ref), - "k8s.io/api/policy/v1beta1.PodDisruptionBudgetStatus": schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetStatus(ref), - "k8s.io/api/policy/v1beta1.PodSecurityPolicy": schema_k8sio_api_policy_v1beta1_PodSecurityPolicy(ref), - "k8s.io/api/policy/v1beta1.PodSecurityPolicyList": schema_k8sio_api_policy_v1beta1_PodSecurityPolicyList(ref), - "k8s.io/api/policy/v1beta1.PodSecurityPolicySpec": schema_k8sio_api_policy_v1beta1_PodSecurityPolicySpec(ref), - "k8s.io/api/policy/v1beta1.RunAsGroupStrategyOptions": schema_k8sio_api_policy_v1beta1_RunAsGroupStrategyOptions(ref), - "k8s.io/api/policy/v1beta1.RunAsUserStrategyOptions": schema_k8sio_api_policy_v1beta1_RunAsUserStrategyOptions(ref), - "k8s.io/api/policy/v1beta1.SELinuxStrategyOptions": schema_k8sio_api_policy_v1beta1_SELinuxStrategyOptions(ref), - "k8s.io/api/policy/v1beta1.SupplementalGroupsStrategyOptions": schema_k8sio_api_policy_v1beta1_SupplementalGroupsStrategyOptions(ref), - "k8s.io/api/rbac/v1.AggregationRule": schema_k8sio_api_rbac_v1_AggregationRule(ref), - "k8s.io/api/rbac/v1.ClusterRole": schema_k8sio_api_rbac_v1_ClusterRole(ref), - "k8s.io/api/rbac/v1.ClusterRoleBinding": schema_k8sio_api_rbac_v1_ClusterRoleBinding(ref), - "k8s.io/api/rbac/v1.ClusterRoleBindingList": schema_k8sio_api_rbac_v1_ClusterRoleBindingList(ref), - "k8s.io/api/rbac/v1.ClusterRoleList": schema_k8sio_api_rbac_v1_ClusterRoleList(ref), - "k8s.io/api/rbac/v1.PolicyRule": schema_k8sio_api_rbac_v1_PolicyRule(ref), - "k8s.io/api/rbac/v1.Role": schema_k8sio_api_rbac_v1_Role(ref), - "k8s.io/api/rbac/v1.RoleBinding": schema_k8sio_api_rbac_v1_RoleBinding(ref), - "k8s.io/api/rbac/v1.RoleBindingList": schema_k8sio_api_rbac_v1_RoleBindingList(ref), - "k8s.io/api/rbac/v1.RoleList": schema_k8sio_api_rbac_v1_RoleList(ref), - "k8s.io/api/rbac/v1.RoleRef": schema_k8sio_api_rbac_v1_RoleRef(ref), - "k8s.io/api/rbac/v1.Subject": schema_k8sio_api_rbac_v1_Subject(ref), - "k8s.io/api/rbac/v1alpha1.AggregationRule": schema_k8sio_api_rbac_v1alpha1_AggregationRule(ref), - "k8s.io/api/rbac/v1alpha1.ClusterRole": schema_k8sio_api_rbac_v1alpha1_ClusterRole(ref), - "k8s.io/api/rbac/v1alpha1.ClusterRoleBinding": schema_k8sio_api_rbac_v1alpha1_ClusterRoleBinding(ref), - "k8s.io/api/rbac/v1alpha1.ClusterRoleBindingList": schema_k8sio_api_rbac_v1alpha1_ClusterRoleBindingList(ref), - "k8s.io/api/rbac/v1alpha1.ClusterRoleList": schema_k8sio_api_rbac_v1alpha1_ClusterRoleList(ref), - "k8s.io/api/rbac/v1alpha1.PolicyRule": schema_k8sio_api_rbac_v1alpha1_PolicyRule(ref), - "k8s.io/api/rbac/v1alpha1.Role": schema_k8sio_api_rbac_v1alpha1_Role(ref), - "k8s.io/api/rbac/v1alpha1.RoleBinding": schema_k8sio_api_rbac_v1alpha1_RoleBinding(ref), - "k8s.io/api/rbac/v1alpha1.RoleBindingList": schema_k8sio_api_rbac_v1alpha1_RoleBindingList(ref), - "k8s.io/api/rbac/v1alpha1.RoleList": schema_k8sio_api_rbac_v1alpha1_RoleList(ref), - "k8s.io/api/rbac/v1alpha1.RoleRef": schema_k8sio_api_rbac_v1alpha1_RoleRef(ref), - "k8s.io/api/rbac/v1alpha1.Subject": schema_k8sio_api_rbac_v1alpha1_Subject(ref), - "k8s.io/api/rbac/v1beta1.AggregationRule": schema_k8sio_api_rbac_v1beta1_AggregationRule(ref), - "k8s.io/api/rbac/v1beta1.ClusterRole": schema_k8sio_api_rbac_v1beta1_ClusterRole(ref), - "k8s.io/api/rbac/v1beta1.ClusterRoleBinding": schema_k8sio_api_rbac_v1beta1_ClusterRoleBinding(ref), - "k8s.io/api/rbac/v1beta1.ClusterRoleBindingList": schema_k8sio_api_rbac_v1beta1_ClusterRoleBindingList(ref), - "k8s.io/api/rbac/v1beta1.ClusterRoleList": schema_k8sio_api_rbac_v1beta1_ClusterRoleList(ref), - "k8s.io/api/rbac/v1beta1.PolicyRule": schema_k8sio_api_rbac_v1beta1_PolicyRule(ref), - "k8s.io/api/rbac/v1beta1.Role": schema_k8sio_api_rbac_v1beta1_Role(ref), - "k8s.io/api/rbac/v1beta1.RoleBinding": schema_k8sio_api_rbac_v1beta1_RoleBinding(ref), - "k8s.io/api/rbac/v1beta1.RoleBindingList": schema_k8sio_api_rbac_v1beta1_RoleBindingList(ref), - "k8s.io/api/rbac/v1beta1.RoleList": schema_k8sio_api_rbac_v1beta1_RoleList(ref), - "k8s.io/api/rbac/v1beta1.RoleRef": schema_k8sio_api_rbac_v1beta1_RoleRef(ref), - "k8s.io/api/rbac/v1beta1.Subject": schema_k8sio_api_rbac_v1beta1_Subject(ref), - "k8s.io/api/scheduling/v1.PriorityClass": schema_k8sio_api_scheduling_v1_PriorityClass(ref), - "k8s.io/api/scheduling/v1.PriorityClassList": schema_k8sio_api_scheduling_v1_PriorityClassList(ref), - "k8s.io/api/scheduling/v1alpha1.PriorityClass": schema_k8sio_api_scheduling_v1alpha1_PriorityClass(ref), - "k8s.io/api/scheduling/v1alpha1.PriorityClassList": schema_k8sio_api_scheduling_v1alpha1_PriorityClassList(ref), - "k8s.io/api/scheduling/v1beta1.PriorityClass": schema_k8sio_api_scheduling_v1beta1_PriorityClass(ref), - "k8s.io/api/scheduling/v1beta1.PriorityClassList": schema_k8sio_api_scheduling_v1beta1_PriorityClassList(ref), - "k8s.io/api/settings/v1alpha1.PodPreset": schema_k8sio_api_settings_v1alpha1_PodPreset(ref), - "k8s.io/api/settings/v1alpha1.PodPresetList": schema_k8sio_api_settings_v1alpha1_PodPresetList(ref), - "k8s.io/api/settings/v1alpha1.PodPresetSpec": schema_k8sio_api_settings_v1alpha1_PodPresetSpec(ref), - "k8s.io/api/storage/v1.StorageClass": schema_k8sio_api_storage_v1_StorageClass(ref), - "k8s.io/api/storage/v1.StorageClassList": schema_k8sio_api_storage_v1_StorageClassList(ref), - "k8s.io/api/storage/v1.VolumeAttachment": schema_k8sio_api_storage_v1_VolumeAttachment(ref), - "k8s.io/api/storage/v1.VolumeAttachmentList": schema_k8sio_api_storage_v1_VolumeAttachmentList(ref), - "k8s.io/api/storage/v1.VolumeAttachmentSource": schema_k8sio_api_storage_v1_VolumeAttachmentSource(ref), - "k8s.io/api/storage/v1.VolumeAttachmentSpec": schema_k8sio_api_storage_v1_VolumeAttachmentSpec(ref), - "k8s.io/api/storage/v1.VolumeAttachmentStatus": schema_k8sio_api_storage_v1_VolumeAttachmentStatus(ref), - "k8s.io/api/storage/v1.VolumeError": schema_k8sio_api_storage_v1_VolumeError(ref), - "k8s.io/api/storage/v1alpha1.VolumeAttachment": schema_k8sio_api_storage_v1alpha1_VolumeAttachment(ref), - "k8s.io/api/storage/v1alpha1.VolumeAttachmentList": schema_k8sio_api_storage_v1alpha1_VolumeAttachmentList(ref), - "k8s.io/api/storage/v1alpha1.VolumeAttachmentSource": schema_k8sio_api_storage_v1alpha1_VolumeAttachmentSource(ref), - "k8s.io/api/storage/v1alpha1.VolumeAttachmentSpec": schema_k8sio_api_storage_v1alpha1_VolumeAttachmentSpec(ref), - "k8s.io/api/storage/v1alpha1.VolumeAttachmentStatus": schema_k8sio_api_storage_v1alpha1_VolumeAttachmentStatus(ref), - "k8s.io/api/storage/v1alpha1.VolumeError": schema_k8sio_api_storage_v1alpha1_VolumeError(ref), - "k8s.io/api/storage/v1beta1.CSIDriver": schema_k8sio_api_storage_v1beta1_CSIDriver(ref), - "k8s.io/api/storage/v1beta1.CSIDriverList": schema_k8sio_api_storage_v1beta1_CSIDriverList(ref), - "k8s.io/api/storage/v1beta1.CSIDriverSpec": schema_k8sio_api_storage_v1beta1_CSIDriverSpec(ref), - "k8s.io/api/storage/v1beta1.CSINode": schema_k8sio_api_storage_v1beta1_CSINode(ref), - "k8s.io/api/storage/v1beta1.CSINodeDriver": schema_k8sio_api_storage_v1beta1_CSINodeDriver(ref), - "k8s.io/api/storage/v1beta1.CSINodeList": schema_k8sio_api_storage_v1beta1_CSINodeList(ref), - "k8s.io/api/storage/v1beta1.CSINodeSpec": schema_k8sio_api_storage_v1beta1_CSINodeSpec(ref), - "k8s.io/api/storage/v1beta1.StorageClass": schema_k8sio_api_storage_v1beta1_StorageClass(ref), - "k8s.io/api/storage/v1beta1.StorageClassList": schema_k8sio_api_storage_v1beta1_StorageClassList(ref), - "k8s.io/api/storage/v1beta1.VolumeAttachment": schema_k8sio_api_storage_v1beta1_VolumeAttachment(ref), - "k8s.io/api/storage/v1beta1.VolumeAttachmentList": schema_k8sio_api_storage_v1beta1_VolumeAttachmentList(ref), - "k8s.io/api/storage/v1beta1.VolumeAttachmentSource": schema_k8sio_api_storage_v1beta1_VolumeAttachmentSource(ref), - "k8s.io/api/storage/v1beta1.VolumeAttachmentSpec": schema_k8sio_api_storage_v1beta1_VolumeAttachmentSpec(ref), - "k8s.io/api/storage/v1beta1.VolumeAttachmentStatus": schema_k8sio_api_storage_v1beta1_VolumeAttachmentStatus(ref), - "k8s.io/api/storage/v1beta1.VolumeError": schema_k8sio_api_storage_v1beta1_VolumeError(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionRequest": schema_pkg_apis_apiextensions_v1beta1_ConversionRequest(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionResponse": schema_pkg_apis_apiextensions_v1beta1_ConversionResponse(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionReview": schema_pkg_apis_apiextensions_v1beta1_ConversionReview(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceColumnDefinition": schema_pkg_apis_apiextensions_v1beta1_CustomResourceColumnDefinition(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceConversion": schema_pkg_apis_apiextensions_v1beta1_CustomResourceConversion(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinition": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinition(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionCondition": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionCondition(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionList": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionList(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionNames": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionNames(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionSpec": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionSpec(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionStatus": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionStatus(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionVersion": schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionVersion(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceScale": schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresourceScale(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceStatus": schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresourceStatus(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresources": schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresources(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceValidation": schema_pkg_apis_apiextensions_v1beta1_CustomResourceValidation(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ExternalDocumentation": schema_pkg_apis_apiextensions_v1beta1_ExternalDocumentation(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSON": schema_pkg_apis_apiextensions_v1beta1_JSON(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps": schema_pkg_apis_apiextensions_v1beta1_JSONSchemaProps(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrArray": schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrArray(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrBool": schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrBool(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrStringArray": schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrStringArray(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ServiceReference": schema_pkg_apis_apiextensions_v1beta1_ServiceReference(ref), - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.WebhookClientConfig": schema_pkg_apis_apiextensions_v1beta1_WebhookClientConfig(ref), - "k8s.io/apimachinery/pkg/api/resource.Quantity": schema_apimachinery_pkg_api_resource_Quantity(ref), - "k8s.io/apimachinery/pkg/api/resource.int64Amount": schema_apimachinery_pkg_api_resource_int64Amount(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.APIGroup": schema_pkg_apis_meta_v1_APIGroup(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.APIGroupList": schema_pkg_apis_meta_v1_APIGroupList(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.APIResource": schema_pkg_apis_meta_v1_APIResource(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.APIResourceList": schema_pkg_apis_meta_v1_APIResourceList(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.APIVersions": schema_pkg_apis_meta_v1_APIVersions(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.CreateOptions": schema_pkg_apis_meta_v1_CreateOptions(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions": schema_pkg_apis_meta_v1_DeleteOptions(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration": schema_pkg_apis_meta_v1_Duration(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.ExportOptions": schema_pkg_apis_meta_v1_ExportOptions(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.Fields": schema_pkg_apis_meta_v1_Fields(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.GetOptions": schema_pkg_apis_meta_v1_GetOptions(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.GroupKind": schema_pkg_apis_meta_v1_GroupKind(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.GroupResource": schema_pkg_apis_meta_v1_GroupResource(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersion": schema_pkg_apis_meta_v1_GroupVersion(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionForDiscovery": schema_pkg_apis_meta_v1_GroupVersionForDiscovery(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionKind": schema_pkg_apis_meta_v1_GroupVersionKind(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionResource": schema_pkg_apis_meta_v1_GroupVersionResource(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.Initializer": schema_pkg_apis_meta_v1_Initializer(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.Initializers": schema_pkg_apis_meta_v1_Initializers(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.InternalEvent": schema_pkg_apis_meta_v1_InternalEvent(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector": schema_pkg_apis_meta_v1_LabelSelector(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelectorRequirement": schema_pkg_apis_meta_v1_LabelSelectorRequirement(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.List": schema_pkg_apis_meta_v1_List(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta": schema_pkg_apis_meta_v1_ListMeta(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.ListOptions": schema_pkg_apis_meta_v1_ListOptions(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry": schema_pkg_apis_meta_v1_ManagedFieldsEntry(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime": schema_pkg_apis_meta_v1_MicroTime(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta": schema_pkg_apis_meta_v1_ObjectMeta(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference": schema_pkg_apis_meta_v1_OwnerReference(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.Patch": schema_pkg_apis_meta_v1_Patch(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.PatchOptions": schema_pkg_apis_meta_v1_PatchOptions(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.Preconditions": schema_pkg_apis_meta_v1_Preconditions(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.RootPaths": schema_pkg_apis_meta_v1_RootPaths(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.ServerAddressByClientCIDR": schema_pkg_apis_meta_v1_ServerAddressByClientCIDR(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.Status": schema_pkg_apis_meta_v1_Status(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.StatusCause": schema_pkg_apis_meta_v1_StatusCause(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.StatusDetails": schema_pkg_apis_meta_v1_StatusDetails(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.Time": schema_pkg_apis_meta_v1_Time(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.Timestamp": schema_pkg_apis_meta_v1_Timestamp(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.TypeMeta": schema_pkg_apis_meta_v1_TypeMeta(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.UpdateOptions": schema_pkg_apis_meta_v1_UpdateOptions(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1.WatchEvent": schema_pkg_apis_meta_v1_WatchEvent(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1beta1.PartialObjectMetadata": schema_pkg_apis_meta_v1beta1_PartialObjectMetadata(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1beta1.PartialObjectMetadataList": schema_pkg_apis_meta_v1beta1_PartialObjectMetadataList(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1beta1.Table": schema_pkg_apis_meta_v1beta1_Table(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1beta1.TableColumnDefinition": schema_pkg_apis_meta_v1beta1_TableColumnDefinition(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1beta1.TableOptions": schema_pkg_apis_meta_v1beta1_TableOptions(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1beta1.TableRow": schema_pkg_apis_meta_v1beta1_TableRow(ref), - "k8s.io/apimachinery/pkg/apis/meta/v1beta1.TableRowCondition": schema_pkg_apis_meta_v1beta1_TableRowCondition(ref), - "k8s.io/apimachinery/pkg/runtime.RawExtension": schema_k8sio_apimachinery_pkg_runtime_RawExtension(ref), - "k8s.io/apimachinery/pkg/runtime.TypeMeta": schema_k8sio_apimachinery_pkg_runtime_TypeMeta(ref), - "k8s.io/apimachinery/pkg/runtime.Unknown": schema_k8sio_apimachinery_pkg_runtime_Unknown(ref), - "k8s.io/apimachinery/pkg/util/intstr.IntOrString": schema_apimachinery_pkg_util_intstr_IntOrString(ref), - "k8s.io/apimachinery/pkg/version.Info": schema_k8sio_apimachinery_pkg_version_Info(ref), - "k8s.io/apiserver/pkg/apis/audit/v1.Event": schema_pkg_apis_audit_v1_Event(ref), - "k8s.io/apiserver/pkg/apis/audit/v1.EventList": schema_pkg_apis_audit_v1_EventList(ref), - "k8s.io/apiserver/pkg/apis/audit/v1.GroupResources": schema_pkg_apis_audit_v1_GroupResources(ref), - "k8s.io/apiserver/pkg/apis/audit/v1.ObjectReference": schema_pkg_apis_audit_v1_ObjectReference(ref), - "k8s.io/apiserver/pkg/apis/audit/v1.Policy": schema_pkg_apis_audit_v1_Policy(ref), - "k8s.io/apiserver/pkg/apis/audit/v1.PolicyList": schema_pkg_apis_audit_v1_PolicyList(ref), - "k8s.io/apiserver/pkg/apis/audit/v1.PolicyRule": schema_pkg_apis_audit_v1_PolicyRule(ref), - "k8s.io/apiserver/pkg/apis/audit/v1alpha1.Event": schema_pkg_apis_audit_v1alpha1_Event(ref), - "k8s.io/apiserver/pkg/apis/audit/v1alpha1.EventList": schema_pkg_apis_audit_v1alpha1_EventList(ref), - "k8s.io/apiserver/pkg/apis/audit/v1alpha1.GroupResources": schema_pkg_apis_audit_v1alpha1_GroupResources(ref), - "k8s.io/apiserver/pkg/apis/audit/v1alpha1.ObjectReference": schema_pkg_apis_audit_v1alpha1_ObjectReference(ref), - "k8s.io/apiserver/pkg/apis/audit/v1alpha1.Policy": schema_pkg_apis_audit_v1alpha1_Policy(ref), - "k8s.io/apiserver/pkg/apis/audit/v1alpha1.PolicyList": schema_pkg_apis_audit_v1alpha1_PolicyList(ref), - "k8s.io/apiserver/pkg/apis/audit/v1alpha1.PolicyRule": schema_pkg_apis_audit_v1alpha1_PolicyRule(ref), - "k8s.io/apiserver/pkg/apis/audit/v1beta1.Event": schema_pkg_apis_audit_v1beta1_Event(ref), - "k8s.io/apiserver/pkg/apis/audit/v1beta1.EventList": schema_pkg_apis_audit_v1beta1_EventList(ref), - "k8s.io/apiserver/pkg/apis/audit/v1beta1.GroupResources": schema_pkg_apis_audit_v1beta1_GroupResources(ref), - "k8s.io/apiserver/pkg/apis/audit/v1beta1.ObjectReference": schema_pkg_apis_audit_v1beta1_ObjectReference(ref), - "k8s.io/apiserver/pkg/apis/audit/v1beta1.Policy": schema_pkg_apis_audit_v1beta1_Policy(ref), - "k8s.io/apiserver/pkg/apis/audit/v1beta1.PolicyList": schema_pkg_apis_audit_v1beta1_PolicyList(ref), - "k8s.io/apiserver/pkg/apis/audit/v1beta1.PolicyRule": schema_pkg_apis_audit_v1beta1_PolicyRule(ref), - "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredential": schema_pkg_apis_clientauthentication_v1alpha1_ExecCredential(ref), - "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialSpec": schema_pkg_apis_clientauthentication_v1alpha1_ExecCredentialSpec(ref), - "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialStatus": schema_pkg_apis_clientauthentication_v1alpha1_ExecCredentialStatus(ref), - "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.Response": schema_pkg_apis_clientauthentication_v1alpha1_Response(ref), - "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredential": schema_pkg_apis_clientauthentication_v1beta1_ExecCredential(ref), - "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialSpec": schema_pkg_apis_clientauthentication_v1beta1_ExecCredentialSpec(ref), - "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialStatus": schema_pkg_apis_clientauthentication_v1beta1_ExecCredentialStatus(ref), - "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriver": schema_pkg_apis_csi_v1alpha1_CSIDriver(ref), - "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriverInfoSpec": schema_pkg_apis_csi_v1alpha1_CSIDriverInfoSpec(ref), - "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriverInfoStatus": schema_pkg_apis_csi_v1alpha1_CSIDriverInfoStatus(ref), - "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriverList": schema_pkg_apis_csi_v1alpha1_CSIDriverList(ref), - "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriverSpec": schema_pkg_apis_csi_v1alpha1_CSIDriverSpec(ref), - "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSINodeInfo": schema_pkg_apis_csi_v1alpha1_CSINodeInfo(ref), - "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSINodeInfoList": schema_pkg_apis_csi_v1alpha1_CSINodeInfoList(ref), - "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSINodeInfoSpec": schema_pkg_apis_csi_v1alpha1_CSINodeInfoSpec(ref), - "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSINodeInfoStatus": schema_pkg_apis_csi_v1alpha1_CSINodeInfoStatus(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIService": schema_pkg_apis_apiregistration_v1_APIService(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceCondition": schema_pkg_apis_apiregistration_v1_APIServiceCondition(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceList": schema_pkg_apis_apiregistration_v1_APIServiceList(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceSpec": schema_pkg_apis_apiregistration_v1_APIServiceSpec(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceStatus": schema_pkg_apis_apiregistration_v1_APIServiceStatus(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.ServiceReference": schema_pkg_apis_apiregistration_v1_ServiceReference(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIService": schema_pkg_apis_apiregistration_v1beta1_APIService(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceCondition": schema_pkg_apis_apiregistration_v1beta1_APIServiceCondition(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceList": schema_pkg_apis_apiregistration_v1beta1_APIServiceList(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceSpec": schema_pkg_apis_apiregistration_v1beta1_APIServiceSpec(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceStatus": schema_pkg_apis_apiregistration_v1beta1_APIServiceStatus(ref), - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.ServiceReference": schema_pkg_apis_apiregistration_v1beta1_ServiceReference(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.AttachDetachControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_AttachDetachControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_CSRSigningControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.CloudProviderConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_CloudProviderConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.DaemonSetControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_DaemonSetControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.DeploymentControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_DeploymentControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.DeprecatedControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_DeprecatedControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.EndpointControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_EndpointControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.GarbageCollectorControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_GarbageCollectorControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.GenericControllerManagerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_GenericControllerManagerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.GroupResource": schema_k8sio_kube_controller_manager_config_v1alpha1_GroupResource(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.HPAControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_HPAControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.JobControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_JobControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.KubeCloudSharedConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_KubeCloudSharedConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.KubeControllerManagerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_KubeControllerManagerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.NamespaceControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_NamespaceControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.NodeIPAMControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_NodeIPAMControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.NodeLifecycleControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_NodeLifecycleControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeBinderControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_PersistentVolumeBinderControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeRecyclerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_PersistentVolumeRecyclerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.PodGCControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_PodGCControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.ReplicaSetControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_ReplicaSetControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.ReplicationControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_ReplicationControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.ResourceQuotaControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_ResourceQuotaControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.SAControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_SAControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.ServiceControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_ServiceControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.TTLAfterFinishedControllerConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_TTLAfterFinishedControllerConfiguration(ref), - "k8s.io/kube-controller-manager/config/v1alpha1.VolumeConfiguration": schema_k8sio_kube_controller_manager_config_v1alpha1_VolumeConfiguration(ref), - "k8s.io/kube-proxy/config/v1alpha1.KubeProxyConfiguration": schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyConfiguration(ref), - "k8s.io/kube-proxy/config/v1alpha1.KubeProxyConntrackConfiguration": schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyConntrackConfiguration(ref), - "k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPTablesConfiguration": schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyIPTablesConfiguration(ref), - "k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPVSConfiguration": schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyIPVSConfiguration(ref), - "k8s.io/kube-proxy/config/v1alpha1.KubeProxyWinkernelConfiguration": schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyWinkernelConfiguration(ref), - "k8s.io/kube-scheduler/config/v1alpha1.KubeSchedulerConfiguration": schema_k8sio_kube_scheduler_config_v1alpha1_KubeSchedulerConfiguration(ref), - "k8s.io/kube-scheduler/config/v1alpha1.KubeSchedulerLeaderElectionConfiguration": schema_k8sio_kube_scheduler_config_v1alpha1_KubeSchedulerLeaderElectionConfiguration(ref), - "k8s.io/kube-scheduler/config/v1alpha1.SchedulerAlgorithmSource": schema_k8sio_kube_scheduler_config_v1alpha1_SchedulerAlgorithmSource(ref), - "k8s.io/kube-scheduler/config/v1alpha1.SchedulerPolicyConfigMapSource": schema_k8sio_kube_scheduler_config_v1alpha1_SchedulerPolicyConfigMapSource(ref), - "k8s.io/kube-scheduler/config/v1alpha1.SchedulerPolicyFileSource": schema_k8sio_kube_scheduler_config_v1alpha1_SchedulerPolicyFileSource(ref), - "k8s.io/kube-scheduler/config/v1alpha1.SchedulerPolicySource": schema_k8sio_kube_scheduler_config_v1alpha1_SchedulerPolicySource(ref), - "k8s.io/kubelet/config/v1beta1.KubeletAnonymousAuthentication": schema_k8sio_kubelet_config_v1beta1_KubeletAnonymousAuthentication(ref), - "k8s.io/kubelet/config/v1beta1.KubeletAuthentication": schema_k8sio_kubelet_config_v1beta1_KubeletAuthentication(ref), - "k8s.io/kubelet/config/v1beta1.KubeletAuthorization": schema_k8sio_kubelet_config_v1beta1_KubeletAuthorization(ref), - "k8s.io/kubelet/config/v1beta1.KubeletConfiguration": schema_k8sio_kubelet_config_v1beta1_KubeletConfiguration(ref), - "k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthentication": schema_k8sio_kubelet_config_v1beta1_KubeletWebhookAuthentication(ref), - "k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthorization": schema_k8sio_kubelet_config_v1beta1_KubeletWebhookAuthorization(ref), - "k8s.io/kubelet/config/v1beta1.KubeletX509Authentication": schema_k8sio_kubelet_config_v1beta1_KubeletX509Authentication(ref), - "k8s.io/kubelet/config/v1beta1.SerializedNodeConfigSource": schema_k8sio_kubelet_config_v1beta1_SerializedNodeConfigSource(ref), - "k8s.io/kubernetes/cmd/cloud-controller-manager/app/apis/config/v1alpha1.CloudControllerManagerConfiguration": schema_app_apis_config_v1alpha1_CloudControllerManagerConfiguration(ref), - "k8s.io/kubernetes/pkg/apis/abac/v1beta1.Policy": schema_pkg_apis_abac_v1beta1_Policy(ref), - "k8s.io/kubernetes/pkg/apis/abac/v1beta1.PolicySpec": schema_pkg_apis_abac_v1beta1_PolicySpec(ref), - "k8s.io/metrics/pkg/apis/custom_metrics/v1beta1.MetricListOptions": schema_pkg_apis_custom_metrics_v1beta1_MetricListOptions(ref), - "k8s.io/metrics/pkg/apis/custom_metrics/v1beta1.MetricValue": schema_pkg_apis_custom_metrics_v1beta1_MetricValue(ref), - "k8s.io/metrics/pkg/apis/custom_metrics/v1beta1.MetricValueList": schema_pkg_apis_custom_metrics_v1beta1_MetricValueList(ref), - "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricIdentifier": schema_pkg_apis_custom_metrics_v1beta2_MetricIdentifier(ref), - "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricListOptions": schema_pkg_apis_custom_metrics_v1beta2_MetricListOptions(ref), - "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricValue": schema_pkg_apis_custom_metrics_v1beta2_MetricValue(ref), - "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricValueList": schema_pkg_apis_custom_metrics_v1beta2_MetricValueList(ref), - "k8s.io/metrics/pkg/apis/external_metrics/v1beta1.ExternalMetricValue": schema_pkg_apis_external_metrics_v1beta1_ExternalMetricValue(ref), - "k8s.io/metrics/pkg/apis/external_metrics/v1beta1.ExternalMetricValueList": schema_pkg_apis_external_metrics_v1beta1_ExternalMetricValueList(ref), - "k8s.io/metrics/pkg/apis/metrics/v1alpha1.ContainerMetrics": schema_pkg_apis_metrics_v1alpha1_ContainerMetrics(ref), - "k8s.io/metrics/pkg/apis/metrics/v1alpha1.NodeMetrics": schema_pkg_apis_metrics_v1alpha1_NodeMetrics(ref), - "k8s.io/metrics/pkg/apis/metrics/v1alpha1.NodeMetricsList": schema_pkg_apis_metrics_v1alpha1_NodeMetricsList(ref), - "k8s.io/metrics/pkg/apis/metrics/v1alpha1.PodMetrics": schema_pkg_apis_metrics_v1alpha1_PodMetrics(ref), - "k8s.io/metrics/pkg/apis/metrics/v1alpha1.PodMetricsList": schema_pkg_apis_metrics_v1alpha1_PodMetricsList(ref), - "k8s.io/metrics/pkg/apis/metrics/v1beta1.ContainerMetrics": schema_pkg_apis_metrics_v1beta1_ContainerMetrics(ref), - "k8s.io/metrics/pkg/apis/metrics/v1beta1.NodeMetrics": schema_pkg_apis_metrics_v1beta1_NodeMetrics(ref), - "k8s.io/metrics/pkg/apis/metrics/v1beta1.NodeMetricsList": schema_pkg_apis_metrics_v1beta1_NodeMetricsList(ref), - "k8s.io/metrics/pkg/apis/metrics/v1beta1.PodMetrics": schema_pkg_apis_metrics_v1beta1_PodMetrics(ref), - "k8s.io/metrics/pkg/apis/metrics/v1beta1.PodMetricsList": schema_pkg_apis_metrics_v1beta1_PodMetricsList(ref), - "k8s.io/node-api/pkg/apis/node/v1alpha1.RuntimeClass": schema_pkg_apis_node_v1alpha1_RuntimeClass(ref), - "k8s.io/node-api/pkg/apis/node/v1alpha1.RuntimeClassList": schema_pkg_apis_node_v1alpha1_RuntimeClassList(ref), - "k8s.io/node-api/pkg/apis/node/v1alpha1.RuntimeClassSpec": schema_pkg_apis_node_v1alpha1_RuntimeClassSpec(ref), - } -} - -func schema_k8sio_api_admissionregistration_v1beta1_MutatingWebhookConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MutatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and may change the object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "webhooks": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Webhooks is a list of webhooks and the affected resources and operations.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/admissionregistration/v1beta1.Webhook"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/admissionregistration/v1beta1.Webhook", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_admissionregistration_v1beta1_MutatingWebhookConfigurationList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MutatingWebhookConfigurationList is a list of MutatingWebhookConfiguration.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of MutatingWebhookConfiguration.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/admissionregistration/v1beta1.MutatingWebhookConfiguration"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/admissionregistration/v1beta1.MutatingWebhookConfiguration", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_admissionregistration_v1beta1_Rule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Rule is a tuple of APIGroups, APIVersion, and Resources.It is recommended to make sure that all the tuple expansions are valid.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "apiGroups": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "apiVersions": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "scope": { - SchemaProps: spec.SchemaProps{ - Description: "scope specifies the scope of this rule. Valid values are \"Cluster\", \"Namespaced\", and \"*\" \"Cluster\" means that only cluster-scoped resources will match this rule. Namespace API objects are cluster-scoped. \"Namespaced\" means that only namespaced resources will match this rule. \"*\" means that there are no scope restrictions. Subresources match the scope of their parent resource. Default is \"*\".", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_admissionregistration_v1beta1_RuleWithOperations(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RuleWithOperations is a tuple of Operations and Resources. It is recommended to make sure that all the tuple expansions are valid.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "operations": { - SchemaProps: spec.SchemaProps{ - Description: "Operations is the operations the admission hook cares about - CREATE, UPDATE, or * for all operations. If '*' is present, the length of the slice must be one. Required.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "apiGroups": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroups is the API groups the resources belong to. '*' is all groups. If '*' is present, the length of the slice must be one. Required.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "apiVersions": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersions is the API versions the resources belong to. '*' is all versions. If '*' is present, the length of the slice must be one. Required.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' means pods. 'pods/log' means the log subresource of pods. '*' means all resources, but not subresources. 'pods/*' means all subresources of pods. '*/scale' means all scale subresources. '*/*' means all resources and their subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nDepending on the enclosing object, subresources might not be allowed. Required.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "scope": { - SchemaProps: spec.SchemaProps{ - Description: "scope specifies the scope of this rule. Valid values are \"Cluster\", \"Namespaced\", and \"*\" \"Cluster\" means that only cluster-scoped resources will match this rule. Namespace API objects are cluster-scoped. \"Namespaced\" means that only namespaced resources will match this rule. \"*\" means that there are no scope restrictions. Subresources match the scope of their parent resource. Default is \"*\".", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_admissionregistration_v1beta1_ServiceReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceReference holds a reference to Service.legacy.k8s.io", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "`namespace` is the namespace of the service. Required", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "`name` is the name of the service. Required", - Type: []string{"string"}, - Format: "", - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "`path` is an optional URL path which will be sent in any request to this service.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"namespace", "name"}, - }, - }, - } -} - -func schema_k8sio_api_admissionregistration_v1beta1_ValidatingWebhookConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ValidatingWebhookConfiguration describes the configuration of and admission webhook that accept or reject and object without changing it.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "webhooks": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Webhooks is a list of webhooks and the affected resources and operations.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/admissionregistration/v1beta1.Webhook"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/admissionregistration/v1beta1.Webhook", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_admissionregistration_v1beta1_ValidatingWebhookConfigurationList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ValidatingWebhookConfigurationList is a list of ValidatingWebhookConfiguration.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of ValidatingWebhookConfiguration.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/admissionregistration/v1beta1.ValidatingWebhookConfiguration"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/admissionregistration/v1beta1.ValidatingWebhookConfiguration", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_admissionregistration_v1beta1_Webhook(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Webhook describes an admission webhook and the resources and operations it applies to.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "The name of the admission webhook. Name should be fully qualified, e.g., imagepolicy.kubernetes.io, where \"imagepolicy\" is the name of the webhook, and kubernetes.io is the name of the organization. Required.", - Type: []string{"string"}, - Format: "", - }, - }, - "clientConfig": { - SchemaProps: spec.SchemaProps{ - Description: "ClientConfig defines how to communicate with the hook. Required", - Ref: ref("k8s.io/api/admissionregistration/v1beta1.WebhookClientConfig"), - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "Rules describes what operations on what resources/subresources the webhook cares about. The webhook cares about an operation if it matches _any_ Rule. However, in order to prevent ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks from putting the cluster in a state which cannot be recovered from without completely disabling the plugin, ValidatingAdmissionWebhooks and MutatingAdmissionWebhooks are never called on admission requests for ValidatingWebhookConfiguration and MutatingWebhookConfiguration objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/admissionregistration/v1beta1.RuleWithOperations"), - }, - }, - }, - }, - }, - "failurePolicy": { - SchemaProps: spec.SchemaProps{ - Description: "FailurePolicy defines how unrecognized errors from the admission endpoint are handled - allowed values are Ignore or Fail. Defaults to Ignore.", - Type: []string{"string"}, - Format: "", - }, - }, - "namespaceSelector": { - SchemaProps: spec.SchemaProps{ - Description: "NamespaceSelector decides whether to run the webhook on an object based on whether the namespace for that object matches the selector. If the object itself is a namespace, the matching is performed on object.metadata.labels. If the object is another cluster scoped resource, it never skips the webhook.\n\nFor example, to run the webhook on any objects whose namespace is not associated with \"runlevel\" of \"0\" or \"1\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"runlevel\",\n \"operator\": \"NotIn\",\n \"values\": [\n \"0\",\n \"1\"\n ]\n }\n ]\n}\n\nIf instead you want to only run the webhook on any objects whose namespace is associated with the \"environment\" of \"prod\" or \"staging\"; you will set the selector as follows: \"namespaceSelector\": {\n \"matchExpressions\": [\n {\n \"key\": \"environment\",\n \"operator\": \"In\",\n \"values\": [\n \"prod\",\n \"staging\"\n ]\n }\n ]\n}\n\nSee https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ for more examples of label selectors.\n\nDefault to the empty LabelSelector, which matches everything.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "sideEffects": { - SchemaProps: spec.SchemaProps{ - Description: "SideEffects states whether this webhookk has side effects. Acceptable values are: Unknown, None, Some, NoneOnDryRun Webhooks with side effects MUST implement a reconciliation system, since a request may be rejected by a future step in the admission change and the side effects therefore need to be undone. Requests with the dryRun attribute will be auto-rejected if they match a webhook with sideEffects == Unknown or Some. Defaults to Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "timeoutSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "TimeoutSeconds specifies the timeout for this webhook. After the timeout passes, the webhook call will be ignored or the API call will fail based on the failure policy. The timeout value must be between 1 and 30 seconds. Default to 30 seconds.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "admissionReviewVersions": { - SchemaProps: spec.SchemaProps{ - Description: "AdmissionReviewVersions is an ordered list of preferred `AdmissionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, validation will fail for this object. If a persisted webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail and be subject to the failure policy. Default to `['v1beta1']`.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"name", "clientConfig"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/admissionregistration/v1beta1.RuleWithOperations", "k8s.io/api/admissionregistration/v1beta1.WebhookClientConfig", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_admissionregistration_v1beta1_WebhookClientConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "WebhookClientConfig contains the information to make a TLS connection with the webhook", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "url": { - SchemaProps: spec.SchemaProps{ - Description: "`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", - Type: []string{"string"}, - Format: "", - }, - }, - "service": { - SchemaProps: spec.SchemaProps{ - Description: "`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.\n\nPort 443 will be used if it is open, otherwise it is an error.", - Ref: ref("k8s.io/api/admissionregistration/v1beta1.ServiceReference"), - }, - }, - "caBundle": { - SchemaProps: spec.SchemaProps{ - Description: "`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", - Type: []string{"string"}, - Format: "byte", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/admissionregistration/v1beta1.ServiceReference"}, - } -} - -func schema_k8sio_api_apps_v1_ControllerRevision(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "data": { - SchemaProps: spec.SchemaProps{ - Description: "Data is the serialized representation of the state.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), - }, - }, - "revision": { - SchemaProps: spec.SchemaProps{ - Description: "Revision indicates the revision of the state represented by Data.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - Required: []string{"revision"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, - } -} - -func schema_k8sio_api_apps_v1_ControllerRevisionList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of ControllerRevisions", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1.ControllerRevision"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.ControllerRevision", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1_DaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSet represents the configuration of a daemon set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/apps/v1.DaemonSetSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/apps/v1.DaemonSetStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.DaemonSetSpec", "k8s.io/api/apps/v1.DaemonSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1_DaemonSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetCondition describes the state of a DaemonSet at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of DaemonSet condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_apps_v1_DaemonSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetList is a collection of daemon sets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "A list of daemon sets.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1.DaemonSet"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.DaemonSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1_DaemonSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetSpec is the specification of a daemon set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - "updateStrategy": { - SchemaProps: spec.SchemaProps{ - Description: "An update strategy to replace existing DaemonSet pods with new pods.", - Ref: ref("k8s.io/api/apps/v1.DaemonSetUpdateStrategy"), - }, - }, - "minReadySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "revisionHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"selector", "template"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.DaemonSetUpdateStrategy", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_apps_v1_DaemonSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetStatus represents the current status of a daemon set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "currentNumberScheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberMisscheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "desiredNumberScheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberReady": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "The most recent generation observed by the daemon set controller.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "updatedNumberScheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The total number of nodes that are running updated daemon pod", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberAvailable": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberUnavailable": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "collisionCount": { - SchemaProps: spec.SchemaProps{ - Description: "Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a DaemonSet's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1.DaemonSetCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled", "numberReady"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.DaemonSetCondition"}, - } -} - -func schema_k8sio_api_apps_v1_DaemonSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.", - Type: []string{"string"}, - Format: "", - }, - }, - "rollingUpdate": { - SchemaProps: spec.SchemaProps{ - Description: "Rolling update config params. Present only if type = \"RollingUpdate\".", - Ref: ref("k8s.io/api/apps/v1.RollingUpdateDaemonSet"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.RollingUpdateDaemonSet"}, - } -} - -func schema_k8sio_api_apps_v1_Deployment(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Deployment enables declarative updates for Pods and ReplicaSets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of the Deployment.", - Ref: ref("k8s.io/api/apps/v1.DeploymentSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Most recently observed status of the Deployment.", - Ref: ref("k8s.io/api/apps/v1.DeploymentStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.DeploymentSpec", "k8s.io/api/apps/v1.DeploymentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1_DeploymentCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentCondition describes the state of a deployment at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of deployment condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastUpdateTime": { - SchemaProps: spec.SchemaProps{ - Description: "The last time this condition was updated.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_apps_v1_DeploymentList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentList is a list of Deployments.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of Deployments.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1.Deployment"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.Deployment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1_DeploymentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentSpec is the specification of the desired behavior of the Deployment.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Template describes the pods that will be created.", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - "strategy": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-strategy": "retainKeys", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "The deployment strategy to use to replace existing pods with new ones.", - Ref: ref("k8s.io/api/apps/v1.DeploymentStrategy"), - }, - }, - "minReadySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "revisionHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "paused": { - SchemaProps: spec.SchemaProps{ - Description: "Indicates that the deployment is paused.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "progressDeadlineSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"selector", "template"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.DeploymentStrategy", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_apps_v1_DeploymentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentStatus is the most recently observed status of the Deployment.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "The generation observed by the deployment controller.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "updatedReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readyReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of ready pods targeted by this deployment.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "availableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "unavailableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a deployment's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1.DeploymentCondition"), - }, - }, - }, - }, - }, - "collisionCount": { - SchemaProps: spec.SchemaProps{ - Description: "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.DeploymentCondition"}, - } -} - -func schema_k8sio_api_apps_v1_DeploymentStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentStrategy describes how to replace existing pods with new ones.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", - Type: []string{"string"}, - Format: "", - }, - }, - "rollingUpdate": { - SchemaProps: spec.SchemaProps{ - Description: "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", - Ref: ref("k8s.io/api/apps/v1.RollingUpdateDeployment"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.RollingUpdateDeployment"}, - } -} - -func schema_k8sio_api_apps_v1_ReplicaSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSet ensures that a specified number of pod replicas are running at any given time.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/apps/v1.ReplicaSetSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/apps/v1.ReplicaSetStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.ReplicaSetSpec", "k8s.io/api/apps/v1.ReplicaSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1_ReplicaSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetCondition describes the state of a replica set at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of replica set condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "The last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_apps_v1_ReplicaSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetList is a collection of ReplicaSets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1.ReplicaSet"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.ReplicaSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1_ReplicaSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetSpec is the specification of a ReplicaSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "minReadySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - }, - Required: []string{"selector"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_apps_v1_ReplicaSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetStatus represents the current status of a ReplicaSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "fullyLabeledReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of pods that have labels matching the labels of the pod template of the replicaset.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readyReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of ready replicas for this replica set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "availableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of available replicas (ready for at least minReadySeconds) for this replica set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a replica set's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1.ReplicaSetCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"replicas"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.ReplicaSetCondition"}, - } -} - -func schema_k8sio_api_apps_v1_RollingUpdateDaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Spec to control the desired behavior of daemon set rolling update.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "maxUnavailable": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_apps_v1_RollingUpdateDeployment(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Spec to control the desired behavior of rolling update.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "maxUnavailable": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - "maxSurge": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_apps_v1_RollingUpdateStatefulSetStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "partition": { - SchemaProps: spec.SchemaProps{ - Description: "Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_apps_v1_StatefulSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the desired identities of pods in this set.", - Ref: ref("k8s.io/api/apps/v1.StatefulSetSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.", - Ref: ref("k8s.io/api/apps/v1.StatefulSetStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.StatefulSetSpec", "k8s.io/api/apps/v1.StatefulSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1_StatefulSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetCondition describes the state of a statefulset at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of statefulset condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_apps_v1_StatefulSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetList is a collection of StatefulSets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1.StatefulSet"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.StatefulSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1_StatefulSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A StatefulSetSpec is the specification of a StatefulSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - "volumeClaimTemplates": { - SchemaProps: spec.SchemaProps{ - Description: "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaim"), - }, - }, - }, - }, - }, - "serviceName": { - SchemaProps: spec.SchemaProps{ - Description: "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", - Type: []string{"string"}, - Format: "", - }, - }, - "podManagementPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", - Type: []string{"string"}, - Format: "", - }, - }, - "updateStrategy": { - SchemaProps: spec.SchemaProps{ - Description: "updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.", - Ref: ref("k8s.io/api/apps/v1.StatefulSetUpdateStrategy"), - }, - }, - "revisionHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"selector", "template", "serviceName"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_apps_v1_StatefulSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetStatus represents the current state of a StatefulSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "replicas is the number of Pods created by the StatefulSet controller.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readyReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "updatedReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentRevision": { - SchemaProps: spec.SchemaProps{ - Description: "currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).", - Type: []string{"string"}, - Format: "", - }, - }, - "updateRevision": { - SchemaProps: spec.SchemaProps{ - Description: "updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)", - Type: []string{"string"}, - Format: "", - }, - }, - "collisionCount": { - SchemaProps: spec.SchemaProps{ - Description: "collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a statefulset's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1.StatefulSetCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"replicas"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.StatefulSetCondition"}, - } -} - -func schema_k8sio_api_apps_v1_StatefulSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.", - Type: []string{"string"}, - Format: "", - }, - }, - "rollingUpdate": { - SchemaProps: spec.SchemaProps{ - Description: "RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.", - Ref: ref("k8s.io/api/apps/v1.RollingUpdateStatefulSetStrategy"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1.RollingUpdateStatefulSetStrategy"}, - } -} - -func schema_k8sio_api_apps_v1beta1_ControllerRevision(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1beta2/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "data": { - SchemaProps: spec.SchemaProps{ - Description: "Data is the serialized representation of the state.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), - }, - }, - "revision": { - SchemaProps: spec.SchemaProps{ - Description: "Revision indicates the revision of the state represented by Data.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - Required: []string{"revision"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, - } -} - -func schema_k8sio_api_apps_v1beta1_ControllerRevisionList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of ControllerRevisions", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta1.ControllerRevision"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.ControllerRevision", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta1_Deployment(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of the Deployment.", - Ref: ref("k8s.io/api/apps/v1beta1.DeploymentSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Most recently observed status of the Deployment.", - Ref: ref("k8s.io/api/apps/v1beta1.DeploymentStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.DeploymentSpec", "k8s.io/api/apps/v1beta1.DeploymentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta1_DeploymentCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentCondition describes the state of a deployment at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of deployment condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastUpdateTime": { - SchemaProps: spec.SchemaProps{ - Description: "The last time this condition was updated.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_apps_v1beta1_DeploymentList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentList is a list of Deployments.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of Deployments.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta1.Deployment"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.Deployment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta1_DeploymentRollback(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Required: This must match the Name of a deployment.", - Type: []string{"string"}, - Format: "", - }, - }, - "updatedAnnotations": { - SchemaProps: spec.SchemaProps{ - Description: "The annotations to be updated to a deployment", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "rollbackTo": { - SchemaProps: spec.SchemaProps{ - Description: "The config of this deployment rollback.", - Ref: ref("k8s.io/api/apps/v1beta1.RollbackConfig"), - }, - }, - }, - Required: []string{"name", "rollbackTo"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.RollbackConfig"}, - } -} - -func schema_k8sio_api_apps_v1beta1_DeploymentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentSpec is the specification of the desired behavior of the Deployment.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Template describes the pods that will be created.", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - "strategy": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-strategy": "retainKeys", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "The deployment strategy to use to replace existing pods with new ones.", - Ref: ref("k8s.io/api/apps/v1beta1.DeploymentStrategy"), - }, - }, - "minReadySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "revisionHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 2.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "paused": { - SchemaProps: spec.SchemaProps{ - Description: "Indicates that the deployment is paused.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "rollbackTo": { - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.", - Ref: ref("k8s.io/api/apps/v1beta1.RollbackConfig"), - }, - }, - "progressDeadlineSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"template"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.DeploymentStrategy", "k8s.io/api/apps/v1beta1.RollbackConfig", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_apps_v1beta1_DeploymentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentStatus is the most recently observed status of the Deployment.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "The generation observed by the deployment controller.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "updatedReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readyReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of ready pods targeted by this deployment.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "availableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "unavailableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a deployment's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta1.DeploymentCondition"), - }, - }, - }, - }, - }, - "collisionCount": { - SchemaProps: spec.SchemaProps{ - Description: "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.DeploymentCondition"}, - } -} - -func schema_k8sio_api_apps_v1beta1_DeploymentStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentStrategy describes how to replace existing pods with new ones.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", - Type: []string{"string"}, - Format: "", - }, - }, - "rollingUpdate": { - SchemaProps: spec.SchemaProps{ - Description: "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", - Ref: ref("k8s.io/api/apps/v1beta1.RollingUpdateDeployment"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.RollingUpdateDeployment"}, - } -} - -func schema_k8sio_api_apps_v1beta1_RollbackConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "revision": { - SchemaProps: spec.SchemaProps{ - Description: "The revision to rollback to. If set to 0, rollback to the last revision.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_apps_v1beta1_RollingUpdateDeployment(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Spec to control the desired behavior of rolling update.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "maxUnavailable": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - "maxSurge": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_apps_v1beta1_RollingUpdateStatefulSetStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "partition": { - SchemaProps: spec.SchemaProps{ - Description: "Partition indicates the ordinal at which the StatefulSet should be partitioned.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_apps_v1beta1_Scale(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Scale represents a scaling request for a resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - Ref: ref("k8s.io/api/apps/v1beta1.ScaleSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", - Ref: ref("k8s.io/api/apps/v1beta1.ScaleStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.ScaleSpec", "k8s.io/api/apps/v1beta1.ScaleStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta1_ScaleSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ScaleSpec describes the attributes of a scale subresource", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "desired number of instances for the scaled object.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_apps_v1beta1_ScaleStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ScaleStatus represents the current status of a scale subresource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "actual number of observed instances of the scaled object.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "targetSelector": { - SchemaProps: spec.SchemaProps{ - Description: "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"replicas"}, - }, - }, - } -} - -func schema_k8sio_api_apps_v1beta1_StatefulSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of StatefulSet is deprecated by apps/v1beta2/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the desired identities of pods in this set.", - Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.", - Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.StatefulSetSpec", "k8s.io/api/apps/v1beta1.StatefulSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta1_StatefulSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetCondition describes the state of a statefulset at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of statefulset condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_apps_v1beta1_StatefulSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetList is a collection of StatefulSets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta1.StatefulSet"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.StatefulSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta1_StatefulSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A StatefulSetSpec is the specification of a StatefulSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is a label query over pods that should match the replica count. If empty, defaulted to labels on the pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - "volumeClaimTemplates": { - SchemaProps: spec.SchemaProps{ - Description: "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaim"), - }, - }, - }, - }, - }, - "serviceName": { - SchemaProps: spec.SchemaProps{ - Description: "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", - Type: []string{"string"}, - Format: "", - }, - }, - "podManagementPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", - Type: []string{"string"}, - Format: "", - }, - }, - "updateStrategy": { - SchemaProps: spec.SchemaProps{ - Description: "updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.", - Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetUpdateStrategy"), - }, - }, - "revisionHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"template", "serviceName"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_apps_v1beta1_StatefulSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetStatus represents the current state of a StatefulSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "replicas is the number of Pods created by the StatefulSet controller.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readyReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "updatedReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentRevision": { - SchemaProps: spec.SchemaProps{ - Description: "currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).", - Type: []string{"string"}, - Format: "", - }, - }, - "updateRevision": { - SchemaProps: spec.SchemaProps{ - Description: "updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)", - Type: []string{"string"}, - Format: "", - }, - }, - "collisionCount": { - SchemaProps: spec.SchemaProps{ - Description: "collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a statefulset's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta1.StatefulSetCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"replicas"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.StatefulSetCondition"}, - } -} - -func schema_k8sio_api_apps_v1beta1_StatefulSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type indicates the type of the StatefulSetUpdateStrategy.", - Type: []string{"string"}, - Format: "", - }, - }, - "rollingUpdate": { - SchemaProps: spec.SchemaProps{ - Description: "RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.", - Ref: ref("k8s.io/api/apps/v1beta1.RollingUpdateStatefulSetStrategy"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta1.RollingUpdateStatefulSetStrategy"}, - } -} - -func schema_k8sio_api_apps_v1beta2_ControllerRevision(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of ControllerRevision is deprecated by apps/v1/ControllerRevision. See the release notes for more information. ControllerRevision implements an immutable snapshot of state data. Clients are responsible for serializing and deserializing the objects that contain their internal state. Once a ControllerRevision has been successfully created, it can not be updated. The API Server will fail validation of all requests that attempt to mutate the Data field. ControllerRevisions may, however, be deleted. Note that, due to its use by both the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However, it may be subject to name and representation changes in future releases, and clients should not depend on its stability. It is primarily for internal use by controllers.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "data": { - SchemaProps: spec.SchemaProps{ - Description: "Data is the serialized representation of the state.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), - }, - }, - "revision": { - SchemaProps: spec.SchemaProps{ - Description: "Revision indicates the revision of the state represented by Data.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - Required: []string{"revision"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, - } -} - -func schema_k8sio_api_apps_v1beta2_ControllerRevisionList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ControllerRevisionList is a resource containing a list of ControllerRevision objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of ControllerRevisions", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta2.ControllerRevision"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.ControllerRevision", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta2_DaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of DaemonSet is deprecated by apps/v1/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/apps/v1beta2.DaemonSetSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/apps/v1beta2.DaemonSetStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.DaemonSetSpec", "k8s.io/api/apps/v1beta2.DaemonSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta2_DaemonSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetCondition describes the state of a DaemonSet at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of DaemonSet condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_apps_v1beta2_DaemonSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetList is a collection of daemon sets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "A list of daemon sets.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta2.DaemonSet"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.DaemonSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta2_DaemonSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetSpec is the specification of a daemon set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "A label query over pods that are managed by the daemon set. Must match in order to be controlled. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - "updateStrategy": { - SchemaProps: spec.SchemaProps{ - Description: "An update strategy to replace existing DaemonSet pods with new pods.", - Ref: ref("k8s.io/api/apps/v1beta2.DaemonSetUpdateStrategy"), - }, - }, - "minReadySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "revisionHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"selector", "template"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.DaemonSetUpdateStrategy", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_apps_v1beta2_DaemonSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetStatus represents the current status of a daemon set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "currentNumberScheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberMisscheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "desiredNumberScheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberReady": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "The most recent generation observed by the daemon set controller.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "updatedNumberScheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The total number of nodes that are running updated daemon pod", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberAvailable": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberUnavailable": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "collisionCount": { - SchemaProps: spec.SchemaProps{ - Description: "Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a DaemonSet's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta2.DaemonSetCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled", "numberReady"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.DaemonSetCondition"}, - } -} - -func schema_k8sio_api_apps_v1beta2_DaemonSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.", - Type: []string{"string"}, - Format: "", - }, - }, - "rollingUpdate": { - SchemaProps: spec.SchemaProps{ - Description: "Rolling update config params. Present only if type = \"RollingUpdate\".", - Ref: ref("k8s.io/api/apps/v1beta2.RollingUpdateDaemonSet"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.RollingUpdateDaemonSet"}, - } -} - -func schema_k8sio_api_apps_v1beta2_Deployment(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of Deployment is deprecated by apps/v1/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of the Deployment.", - Ref: ref("k8s.io/api/apps/v1beta2.DeploymentSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Most recently observed status of the Deployment.", - Ref: ref("k8s.io/api/apps/v1beta2.DeploymentStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.DeploymentSpec", "k8s.io/api/apps/v1beta2.DeploymentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta2_DeploymentCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentCondition describes the state of a deployment at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of deployment condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastUpdateTime": { - SchemaProps: spec.SchemaProps{ - Description: "The last time this condition was updated.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_apps_v1beta2_DeploymentList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentList is a list of Deployments.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of Deployments.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta2.Deployment"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.Deployment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta2_DeploymentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentSpec is the specification of the desired behavior of the Deployment.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment. It must match the pod template's labels.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Template describes the pods that will be created.", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - "strategy": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-strategy": "retainKeys", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "The deployment strategy to use to replace existing pods with new ones.", - Ref: ref("k8s.io/api/apps/v1beta2.DeploymentStrategy"), - }, - }, - "minReadySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "revisionHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "paused": { - SchemaProps: spec.SchemaProps{ - Description: "Indicates that the deployment is paused.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "progressDeadlineSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. Defaults to 600s.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"selector", "template"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.DeploymentStrategy", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_apps_v1beta2_DeploymentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentStatus is the most recently observed status of the Deployment.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "The generation observed by the deployment controller.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "updatedReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readyReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of ready pods targeted by this deployment.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "availableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "unavailableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a deployment's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta2.DeploymentCondition"), - }, - }, - }, - }, - }, - "collisionCount": { - SchemaProps: spec.SchemaProps{ - Description: "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.DeploymentCondition"}, - } -} - -func schema_k8sio_api_apps_v1beta2_DeploymentStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentStrategy describes how to replace existing pods with new ones.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", - Type: []string{"string"}, - Format: "", - }, - }, - "rollingUpdate": { - SchemaProps: spec.SchemaProps{ - Description: "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", - Ref: ref("k8s.io/api/apps/v1beta2.RollingUpdateDeployment"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.RollingUpdateDeployment"}, - } -} - -func schema_k8sio_api_apps_v1beta2_ReplicaSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/apps/v1beta2.ReplicaSetSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/apps/v1beta2.ReplicaSetStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.ReplicaSetSpec", "k8s.io/api/apps/v1beta2.ReplicaSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta2_ReplicaSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetCondition describes the state of a replica set at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of replica set condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "The last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_apps_v1beta2_ReplicaSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetList is a collection of ReplicaSets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta2.ReplicaSet"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.ReplicaSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta2_ReplicaSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetSpec is the specification of a ReplicaSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "minReadySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "Selector is a label query over pods that should match the replica count. Label keys and values that must match in order to be controlled by this replica set. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - }, - Required: []string{"selector"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_apps_v1beta2_ReplicaSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetStatus represents the current status of a ReplicaSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "fullyLabeledReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of pods that have labels matching the labels of the pod template of the replicaset.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readyReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of ready replicas for this replica set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "availableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of available replicas (ready for at least minReadySeconds) for this replica set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a replica set's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta2.ReplicaSetCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"replicas"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.ReplicaSetCondition"}, - } -} - -func schema_k8sio_api_apps_v1beta2_RollingUpdateDaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Spec to control the desired behavior of daemon set rolling update.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "maxUnavailable": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_apps_v1beta2_RollingUpdateDeployment(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Spec to control the desired behavior of rolling update.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "maxUnavailable": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. Defaults to 25%. Example: when this is set to 30%, the old ReplicaSet can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old ReplicaSet can be scaled down further, followed by scaling up the new ReplicaSet, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - "maxSurge": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. Defaults to 25%. Example: when this is set to 30%, the new ReplicaSet can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new ReplicaSet can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_apps_v1beta2_RollingUpdateStatefulSetStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "partition": { - SchemaProps: spec.SchemaProps{ - Description: "Partition indicates the ordinal at which the StatefulSet should be partitioned. Default value is 0.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_apps_v1beta2_Scale(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Scale represents a scaling request for a resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", - Ref: ref("k8s.io/api/apps/v1beta2.ScaleSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.", - Ref: ref("k8s.io/api/apps/v1beta2.ScaleStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.ScaleSpec", "k8s.io/api/apps/v1beta2.ScaleStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta2_ScaleSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ScaleSpec describes the attributes of a scale subresource", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "desired number of instances for the scaled object.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_apps_v1beta2_ScaleStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ScaleStatus represents the current status of a scale subresource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "actual number of observed instances of the scaled object.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "targetSelector": { - SchemaProps: spec.SchemaProps{ - Description: "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"replicas"}, - }, - }, - } -} - -func schema_k8sio_api_apps_v1beta2_StatefulSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of StatefulSet is deprecated by apps/v1/StatefulSet. See the release notes for more information. StatefulSet represents a set of pods with consistent identities. Identities are defined as:\n - Network: A single stable DNS and hostname.\n - Storage: As many VolumeClaims as requested.\nThe StatefulSet guarantees that a given network identity will always map to the same storage identity.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the desired identities of pods in this set.", - Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the current status of Pods in this StatefulSet. This data may be out of date by some window of time.", - Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.StatefulSetSpec", "k8s.io/api/apps/v1beta2.StatefulSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta2_StatefulSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetCondition describes the state of a statefulset at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of statefulset condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_apps_v1beta2_StatefulSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetList is a collection of StatefulSets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta2.StatefulSet"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.StatefulSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_apps_v1beta2_StatefulSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A StatefulSetSpec is the specification of a StatefulSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "replicas is the desired number of replicas of the given Template. These are replicas in the sense that they are instantiations of the same Template, but individual replicas also have a consistent identity. If unspecified, defaults to 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is a label query over pods that should match the replica count. It must match the pod template's labels. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "template is the object that describes the pod that will be created if insufficient replicas are detected. Each pod stamped out by the StatefulSet will fulfill this Template, but have a unique identity from the rest of the StatefulSet.", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - "volumeClaimTemplates": { - SchemaProps: spec.SchemaProps{ - Description: "volumeClaimTemplates is a list of claims that pods are allowed to reference. The StatefulSet controller is responsible for mapping network identities to claims in a way that maintains the identity of a pod. Every claim in this list must have at least one matching (by name) volumeMount in one container in the template. A claim in this list takes precedence over any volumes in the template, with the same name.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaim"), - }, - }, - }, - }, - }, - "serviceName": { - SchemaProps: spec.SchemaProps{ - Description: "serviceName is the name of the service that governs this StatefulSet. This service must exist before the StatefulSet, and is responsible for the network identity of the set. Pods get DNS/hostnames that follow the pattern: pod-specific-string.serviceName.default.svc.cluster.local where \"pod-specific-string\" is managed by the StatefulSet controller.", - Type: []string{"string"}, - Format: "", - }, - }, - "podManagementPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "podManagementPolicy controls how pods are created during initial scale up, when replacing pods on nodes, or when scaling down. The default policy is `OrderedReady`, where pods are created in increasing order (pod-0, then pod-1, etc) and the controller will wait until each pod is ready before continuing. When scaling down, the pods are removed in the opposite order. The alternative policy is `Parallel` which will create pods in parallel to match the desired scale without waiting, and on scale down will delete all pods at once.", - Type: []string{"string"}, - Format: "", - }, - }, - "updateStrategy": { - SchemaProps: spec.SchemaProps{ - Description: "updateStrategy indicates the StatefulSetUpdateStrategy that will be employed to update Pods in the StatefulSet when a revision is made to Template.", - Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetUpdateStrategy"), - }, - }, - "revisionHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "revisionHistoryLimit is the maximum number of revisions that will be maintained in the StatefulSet's revision history. The revision history consists of all revisions not represented by a currently applied StatefulSetSpec version. The default value is 10.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"selector", "template", "serviceName"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.StatefulSetUpdateStrategy", "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_apps_v1beta2_StatefulSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetStatus represents the current state of a StatefulSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the StatefulSet's generation, which is updated on mutation by the API Server.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "replicas is the number of Pods created by the StatefulSet controller.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readyReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "readyReplicas is the number of Pods created by the StatefulSet controller that have a Ready Condition.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "currentReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "updatedReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "updatedReplicas is the number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentRevision": { - SchemaProps: spec.SchemaProps{ - Description: "currentRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [0,currentReplicas).", - Type: []string{"string"}, - Format: "", - }, - }, - "updateRevision": { - SchemaProps: spec.SchemaProps{ - Description: "updateRevision, if not empty, indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)", - Type: []string{"string"}, - Format: "", - }, - }, - "collisionCount": { - SchemaProps: spec.SchemaProps{ - Description: "collisionCount is the count of hash collisions for the StatefulSet. The StatefulSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a statefulset's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/apps/v1beta2.StatefulSetCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"replicas"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.StatefulSetCondition"}, - } -} - -func schema_k8sio_api_apps_v1beta2_StatefulSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatefulSetUpdateStrategy indicates the strategy that the StatefulSet controller will use to perform updates. It includes any additional parameters necessary to perform the update for the indicated strategy.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type indicates the type of the StatefulSetUpdateStrategy. Default is RollingUpdate.", - Type: []string{"string"}, - Format: "", - }, - }, - "rollingUpdate": { - SchemaProps: spec.SchemaProps{ - Description: "RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.", - Ref: ref("k8s.io/api/apps/v1beta2.RollingUpdateStatefulSetStrategy"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/apps/v1beta2.RollingUpdateStatefulSetStrategy"}, - } -} - -func schema_k8sio_api_auditregistration_v1alpha1_AuditSink(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AuditSink represents a cluster level audit sink", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the audit configuration spec", - Ref: ref("k8s.io/api/auditregistration/v1alpha1.AuditSinkSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/auditregistration/v1alpha1.AuditSinkSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_auditregistration_v1alpha1_AuditSinkList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AuditSinkList is a list of AuditSink items.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of audit configurations.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/auditregistration/v1alpha1.AuditSink"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/auditregistration/v1alpha1.AuditSink", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_auditregistration_v1alpha1_AuditSinkSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AuditSinkSpec holds the spec for the audit sink", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "policy": { - SchemaProps: spec.SchemaProps{ - Description: "Policy defines the policy for selecting which events should be sent to the webhook required", - Ref: ref("k8s.io/api/auditregistration/v1alpha1.Policy"), - }, - }, - "webhook": { - SchemaProps: spec.SchemaProps{ - Description: "Webhook to send events required", - Ref: ref("k8s.io/api/auditregistration/v1alpha1.Webhook"), - }, - }, - }, - Required: []string{"policy", "webhook"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/auditregistration/v1alpha1.Policy", "k8s.io/api/auditregistration/v1alpha1.Webhook"}, - } -} - -func schema_k8sio_api_auditregistration_v1alpha1_Policy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Policy defines the configuration of how audit events are logged", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "level": { - SchemaProps: spec.SchemaProps{ - Description: "The Level that all requests are recorded at. available options: None, Metadata, Request, RequestResponse required", - Type: []string{"string"}, - Format: "", - }, - }, - "stages": { - SchemaProps: spec.SchemaProps{ - Description: "Stages is a list of stages for which events are created.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"level"}, - }, - }, - } -} - -func schema_k8sio_api_auditregistration_v1alpha1_ServiceReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceReference holds a reference to Service.legacy.k8s.io", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "`namespace` is the namespace of the service. Required", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "`name` is the name of the service. Required", - Type: []string{"string"}, - Format: "", - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "`path` is an optional URL path which will be sent in any request to this service.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"namespace", "name"}, - }, - }, - } -} - -func schema_k8sio_api_auditregistration_v1alpha1_Webhook(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Webhook holds the configuration of the webhook", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "throttle": { - SchemaProps: spec.SchemaProps{ - Description: "Throttle holds the options for throttling the webhook", - Ref: ref("k8s.io/api/auditregistration/v1alpha1.WebhookThrottleConfig"), - }, - }, - "clientConfig": { - SchemaProps: spec.SchemaProps{ - Description: "ClientConfig holds the connection parameters for the webhook required", - Ref: ref("k8s.io/api/auditregistration/v1alpha1.WebhookClientConfig"), - }, - }, - }, - Required: []string{"clientConfig"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/auditregistration/v1alpha1.WebhookClientConfig", "k8s.io/api/auditregistration/v1alpha1.WebhookThrottleConfig"}, - } -} - -func schema_k8sio_api_auditregistration_v1alpha1_WebhookClientConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "WebhookClientConfig contains the information to make a connection with the webhook", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "url": { - SchemaProps: spec.SchemaProps{ - Description: "`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", - Type: []string{"string"}, - Format: "", - }, - }, - "service": { - SchemaProps: spec.SchemaProps{ - Description: "`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.\n\nPort 443 will be used if it is open, otherwise it is an error.", - Ref: ref("k8s.io/api/auditregistration/v1alpha1.ServiceReference"), - }, - }, - "caBundle": { - SchemaProps: spec.SchemaProps{ - Description: "`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", - Type: []string{"string"}, - Format: "byte", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/auditregistration/v1alpha1.ServiceReference"}, - } -} - -func schema_k8sio_api_auditregistration_v1alpha1_WebhookThrottleConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "WebhookThrottleConfig holds the configuration for throttling events", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "qps": { - SchemaProps: spec.SchemaProps{ - Description: "ThrottleQPS maximum number of batches per second default 10 QPS", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "burst": { - SchemaProps: spec.SchemaProps{ - Description: "ThrottleBurst is the maximum number of events sent at the same moment default 15 QPS", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authentication_v1_BoundObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "BoundObjectReference is a reference to an object that a token is bound to.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind of the referent. Valid kinds are 'Pod' and 'Secret'.", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "API version of the referent.", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent.", - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "UID of the referent.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authentication_v1_TokenRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TokenRequest requests a token for a given service account.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/authentication/v1.TokenRequestSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/authentication/v1.TokenRequestStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authentication/v1.TokenRequestSpec", "k8s.io/api/authentication/v1.TokenRequestStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_authentication_v1_TokenRequestSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TokenRequestSpec contains client provided parameters of a token request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "audiences": { - SchemaProps: spec.SchemaProps{ - Description: "Audiences are the intendend audiences of the token. A recipient of a token must identitfy themself with an identifier in the list of audiences of the token, and otherwise should reject the token. A token issued for multiple audiences may be used to authenticate against any of the audiences listed but implies a high degree of trust between the target audiences.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "expirationSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "ExpirationSeconds is the requested duration of validity of the request. The token issuer may return a token with a different validity duration so a client needs to check the 'expiration' field in a response.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "boundObjectRef": { - SchemaProps: spec.SchemaProps{ - Description: "BoundObjectRef is a reference to an object that the token will be bound to. The token will only be valid for as long as the bound object exists. NOTE: The API server's TokenReview endpoint will validate the BoundObjectRef, but other audiences may not. Keep ExpirationSeconds small if you want prompt revocation.", - Ref: ref("k8s.io/api/authentication/v1.BoundObjectReference"), - }, - }, - }, - Required: []string{"audiences"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authentication/v1.BoundObjectReference"}, - } -} - -func schema_k8sio_api_authentication_v1_TokenRequestStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TokenRequestStatus is the result of a token request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "token": { - SchemaProps: spec.SchemaProps{ - Description: "Token is the opaque bearer token.", - Type: []string{"string"}, - Format: "", - }, - }, - "expirationTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "ExpirationTimestamp is the time of expiration of the returned token.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - }, - Required: []string{"token", "expirationTimestamp"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_authentication_v1_TokenReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information about the request being evaluated", - Ref: ref("k8s.io/api/authentication/v1.TokenReviewSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the server and indicates whether the request can be authenticated.", - Ref: ref("k8s.io/api/authentication/v1.TokenReviewStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authentication/v1.TokenReviewSpec", "k8s.io/api/authentication/v1.TokenReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_authentication_v1_TokenReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TokenReviewSpec is a description of the token authentication request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "token": { - SchemaProps: spec.SchemaProps{ - Description: "Token is the opaque bearer token.", - Type: []string{"string"}, - Format: "", - }, - }, - "audiences": { - SchemaProps: spec.SchemaProps{ - Description: "Audiences is a list of the identifiers that the resource server presented with the token identifies as. Audience-aware token authenticators will verify that the token was intended for at least one of the audiences in this list. If no audiences are provided, the audience will default to the audience of the Kubernetes apiserver.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authentication_v1_TokenReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TokenReviewStatus is the result of the token authentication request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "authenticated": { - SchemaProps: spec.SchemaProps{ - Description: "Authenticated indicates that the token was associated with a known user.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "User is the UserInfo associated with the provided token.", - Ref: ref("k8s.io/api/authentication/v1.UserInfo"), - }, - }, - "audiences": { - SchemaProps: spec.SchemaProps{ - Description: "Audiences are audience identifiers chosen by the authenticator that are compatible with both the TokenReview and token. An identifier is any identifier in the intersection of the TokenReviewSpec audiences and the token's audiences. A client of the TokenReview API that sets the spec.audiences field should validate that a compatible audience identifier is returned in the status.audiences field to ensure that the TokenReview server is audience aware. If a TokenReview returns an empty status.audience field where status.authenticated is \"true\", the token is valid against the audience of the Kubernetes API server.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "error": { - SchemaProps: spec.SchemaProps{ - Description: "Error indicates that the token couldn't be checked", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/authentication/v1.UserInfo"}, - } -} - -func schema_k8sio_api_authentication_v1_UserInfo(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "UserInfo holds the information about the user needed to implement the user.Info interface.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "username": { - SchemaProps: spec.SchemaProps{ - Description: "The name that uniquely identifies this user among all active users.", - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.", - Type: []string{"string"}, - Format: "", - }, - }, - "groups": { - SchemaProps: spec.SchemaProps{ - Description: "The names of groups this user is a part of.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "extra": { - SchemaProps: spec.SchemaProps{ - Description: "Any additional information provided by the authenticator.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authentication_v1beta1_TokenReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TokenReview attempts to authenticate a token to a known user. Note: TokenReview requests may be cached by the webhook token authenticator plugin in the kube-apiserver.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information about the request being evaluated", - Ref: ref("k8s.io/api/authentication/v1beta1.TokenReviewSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the server and indicates whether the request can be authenticated.", - Ref: ref("k8s.io/api/authentication/v1beta1.TokenReviewStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authentication/v1beta1.TokenReviewSpec", "k8s.io/api/authentication/v1beta1.TokenReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_authentication_v1beta1_TokenReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TokenReviewSpec is a description of the token authentication request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "token": { - SchemaProps: spec.SchemaProps{ - Description: "Token is the opaque bearer token.", - Type: []string{"string"}, - Format: "", - }, - }, - "audiences": { - SchemaProps: spec.SchemaProps{ - Description: "Audiences is a list of the identifiers that the resource server presented with the token identifies as. Audience-aware token authenticators will verify that the token was intended for at least one of the audiences in this list. If no audiences are provided, the audience will default to the audience of the Kubernetes apiserver.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authentication_v1beta1_TokenReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TokenReviewStatus is the result of the token authentication request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "authenticated": { - SchemaProps: spec.SchemaProps{ - Description: "Authenticated indicates that the token was associated with a known user.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "User is the UserInfo associated with the provided token.", - Ref: ref("k8s.io/api/authentication/v1beta1.UserInfo"), - }, - }, - "audiences": { - SchemaProps: spec.SchemaProps{ - Description: "Audiences are audience identifiers chosen by the authenticator that are compatible with both the TokenReview and token. An identifier is any identifier in the intersection of the TokenReviewSpec audiences and the token's audiences. A client of the TokenReview API that sets the spec.audiences field should validate that a compatible audience identifier is returned in the status.audiences field to ensure that the TokenReview server is audience aware. If a TokenReview returns an empty status.audience field where status.authenticated is \"true\", the token is valid against the audience of the Kubernetes API server.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "error": { - SchemaProps: spec.SchemaProps{ - Description: "Error indicates that the token couldn't be checked", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/authentication/v1beta1.UserInfo"}, - } -} - -func schema_k8sio_api_authentication_v1beta1_UserInfo(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "UserInfo holds the information about the user needed to implement the user.Info interface.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "username": { - SchemaProps: spec.SchemaProps{ - Description: "The name that uniquely identifies this user among all active users.", - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "A unique value that identifies this user across time. If this user is deleted and another user by the same name is added, they will have different UIDs.", - Type: []string{"string"}, - Format: "", - }, - }, - "groups": { - SchemaProps: spec.SchemaProps{ - Description: "The names of groups this user is a part of.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "extra": { - SchemaProps: spec.SchemaProps{ - Description: "Any additional information provided by the authenticator.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1_LocalSubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted.", - Ref: ref("k8s.io/api/authorization/v1.SubjectAccessReviewSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the server and indicates whether the request is allowed or not", - Ref: ref("k8s.io/api/authorization/v1.SubjectAccessReviewStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1.SubjectAccessReviewSpec", "k8s.io/api/authorization/v1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_authorization_v1_NonResourceAttributes(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path is the URL path of the request", - Type: []string{"string"}, - Format: "", - }, - }, - "verb": { - SchemaProps: spec.SchemaProps{ - Description: "Verb is the standard HTTP verb", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1_NonResourceRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NonResourceRule holds information that describes a rule for the non-resource", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "verbs": { - SchemaProps: spec.SchemaProps{ - Description: "Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options. \"*\" means all.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "nonResourceURLs": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path. \"*\" means all.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"verbs"}, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1_ResourceAttributes(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview", - Type: []string{"string"}, - Format: "", - }, - }, - "verb": { - SchemaProps: spec.SchemaProps{ - Description: "Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", - Type: []string{"string"}, - Format: "", - }, - }, - "group": { - SchemaProps: spec.SchemaProps{ - Description: "Group is the API Group of the Resource. \"*\" means all.", - Type: []string{"string"}, - Format: "", - }, - }, - "version": { - SchemaProps: spec.SchemaProps{ - Description: "Version is the API Version of the Resource. \"*\" means all.", - Type: []string{"string"}, - Format: "", - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Description: "Resource is one of the existing resource types. \"*\" means all.", - Type: []string{"string"}, - Format: "", - }, - }, - "subresource": { - SchemaProps: spec.SchemaProps{ - Description: "Subresource is one of the existing resource types. \"\" means none.", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1_ResourceRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "verbs": { - SchemaProps: spec.SchemaProps{ - Description: "Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "apiGroups": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. \"*\" means all.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources is a list of resources this rule applies to. \"*\" means all in the specified apiGroups.\n \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resourceNames": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. \"*\" means all.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"verbs"}, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1_SelfSubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means \"in all namespaces\". Self is a special case, because users should always be able to check whether they can perform an action", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information about the request being evaluated. user and groups must be empty", - Ref: ref("k8s.io/api/authorization/v1.SelfSubjectAccessReviewSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the server and indicates whether the request is allowed or not", - Ref: ref("k8s.io/api/authorization/v1.SubjectAccessReviewStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1.SelfSubjectAccessReviewSpec", "k8s.io/api/authorization/v1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_authorization_v1_SelfSubjectAccessReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "resourceAttributes": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceAuthorizationAttributes describes information for a resource access request", - Ref: ref("k8s.io/api/authorization/v1.ResourceAttributes"), - }, - }, - "nonResourceAttributes": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceAttributes describes information for a non-resource access request", - Ref: ref("k8s.io/api/authorization/v1.NonResourceAttributes"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1.NonResourceAttributes", "k8s.io/api/authorization/v1.ResourceAttributes"}, - } -} - -func schema_k8sio_api_authorization_v1_SelfSubjectRulesReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information about the request being evaluated.", - Ref: ref("k8s.io/api/authorization/v1.SelfSubjectRulesReviewSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the server and indicates the set of actions a user can perform.", - Ref: ref("k8s.io/api/authorization/v1.SubjectRulesReviewStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1.SelfSubjectRulesReviewSpec", "k8s.io/api/authorization/v1.SubjectRulesReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_authorization_v1_SelfSubjectRulesReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace to evaluate rules for. Required.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1_SubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SubjectAccessReview checks whether or not a user or group can perform an action.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information about the request being evaluated", - Ref: ref("k8s.io/api/authorization/v1.SubjectAccessReviewSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the server and indicates whether the request is allowed or not", - Ref: ref("k8s.io/api/authorization/v1.SubjectAccessReviewStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1.SubjectAccessReviewSpec", "k8s.io/api/authorization/v1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_authorization_v1_SubjectAccessReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "resourceAttributes": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceAuthorizationAttributes describes information for a resource access request", - Ref: ref("k8s.io/api/authorization/v1.ResourceAttributes"), - }, - }, - "nonResourceAttributes": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceAttributes describes information for a non-resource access request", - Ref: ref("k8s.io/api/authorization/v1.NonResourceAttributes"), - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "User is the user you're testing for. If you specify \"User\" but not \"Groups\", then is it interpreted as \"What if User were not a member of any groups", - Type: []string{"string"}, - Format: "", - }, - }, - "groups": { - SchemaProps: spec.SchemaProps{ - Description: "Groups is the groups you're testing for.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "extra": { - SchemaProps: spec.SchemaProps{ - Description: "Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "UID information about the requesting user.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1.NonResourceAttributes", "k8s.io/api/authorization/v1.ResourceAttributes"}, - } -} - -func schema_k8sio_api_authorization_v1_SubjectAccessReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SubjectAccessReviewStatus", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "allowed": { - SchemaProps: spec.SchemaProps{ - Description: "Allowed is required. True if the action would be allowed, false otherwise.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "denied": { - SchemaProps: spec.SchemaProps{ - Description: "Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "Reason is optional. It indicates why a request was allowed or denied.", - Type: []string{"string"}, - Format: "", - }, - }, - "evaluationError": { - SchemaProps: spec.SchemaProps{ - Description: "EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"allowed"}, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1_SubjectRulesReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "resourceRules": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/authorization/v1.ResourceRule"), - }, - }, - }, - }, - }, - "nonResourceRules": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/authorization/v1.NonResourceRule"), - }, - }, - }, - }, - }, - "incomplete": { - SchemaProps: spec.SchemaProps{ - Description: "Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "evaluationError": { - SchemaProps: spec.SchemaProps{ - Description: "EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"resourceRules", "nonResourceRules", "incomplete"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1.NonResourceRule", "k8s.io/api/authorization/v1.ResourceRule"}, - } -} - -func schema_k8sio_api_authorization_v1beta1_LocalSubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LocalSubjectAccessReview checks whether or not a user or group can perform an action in a given namespace. Having a namespace scoped resource makes it much easier to grant namespace scoped policy that includes permissions checking.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information about the request being evaluated. spec.namespace must be equal to the namespace you made the request against. If empty, it is defaulted.", - Ref: ref("k8s.io/api/authorization/v1beta1.SubjectAccessReviewSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the server and indicates whether the request is allowed or not", - Ref: ref("k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1beta1.SubjectAccessReviewSpec", "k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_authorization_v1beta1_NonResourceAttributes(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NonResourceAttributes includes the authorization attributes available for non-resource requests to the Authorizer interface", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path is the URL path of the request", - Type: []string{"string"}, - Format: "", - }, - }, - "verb": { - SchemaProps: spec.SchemaProps{ - Description: "Verb is the standard HTTP verb", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1beta1_NonResourceRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NonResourceRule holds information that describes a rule for the non-resource", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "verbs": { - SchemaProps: spec.SchemaProps{ - Description: "Verb is a list of kubernetes non-resource API verbs, like: get, post, put, delete, patch, head, options. \"*\" means all.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "nonResourceURLs": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path. \"*\" means all.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"verbs"}, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1beta1_ResourceAttributes(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceAttributes includes the authorization attributes available for resource requests to the Authorizer interface", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace is the namespace of the action being requested. Currently, there is no distinction between no namespace and all namespaces \"\" (empty) is defaulted for LocalSubjectAccessReviews \"\" (empty) is empty for cluster-scoped resources \"\" (empty) means \"all\" for namespace scoped resources from a SubjectAccessReview or SelfSubjectAccessReview", - Type: []string{"string"}, - Format: "", - }, - }, - "verb": { - SchemaProps: spec.SchemaProps{ - Description: "Verb is a kubernetes resource API verb, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", - Type: []string{"string"}, - Format: "", - }, - }, - "group": { - SchemaProps: spec.SchemaProps{ - Description: "Group is the API Group of the Resource. \"*\" means all.", - Type: []string{"string"}, - Format: "", - }, - }, - "version": { - SchemaProps: spec.SchemaProps{ - Description: "Version is the API Version of the Resource. \"*\" means all.", - Type: []string{"string"}, - Format: "", - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Description: "Resource is one of the existing resource types. \"*\" means all.", - Type: []string{"string"}, - Format: "", - }, - }, - "subresource": { - SchemaProps: spec.SchemaProps{ - Description: "Subresource is one of the existing resource types. \"\" means none.", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the name of the resource being requested for a \"get\" or deleted for a \"delete\". \"\" (empty) means all.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1beta1_ResourceRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "verbs": { - SchemaProps: spec.SchemaProps{ - Description: "Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "apiGroups": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. \"*\" means all.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources is a list of resources this rule applies to. \"*\" means all in the specified apiGroups.\n \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resourceNames": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. \"*\" means all.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"verbs"}, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1beta1_SelfSubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SelfSubjectAccessReview checks whether or the current user can perform an action. Not filling in a spec.namespace means \"in all namespaces\". Self is a special case, because users should always be able to check whether they can perform an action", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information about the request being evaluated. user and groups must be empty", - Ref: ref("k8s.io/api/authorization/v1beta1.SelfSubjectAccessReviewSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the server and indicates whether the request is allowed or not", - Ref: ref("k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1beta1.SelfSubjectAccessReviewSpec", "k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_authorization_v1beta1_SelfSubjectAccessReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SelfSubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "resourceAttributes": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceAuthorizationAttributes describes information for a resource access request", - Ref: ref("k8s.io/api/authorization/v1beta1.ResourceAttributes"), - }, - }, - "nonResourceAttributes": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceAttributes describes information for a non-resource access request", - Ref: ref("k8s.io/api/authorization/v1beta1.NonResourceAttributes"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1beta1.NonResourceAttributes", "k8s.io/api/authorization/v1beta1.ResourceAttributes"}, - } -} - -func schema_k8sio_api_authorization_v1beta1_SelfSubjectRulesReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SelfSubjectRulesReview enumerates the set of actions the current user can perform within a namespace. The returned list of actions may be incomplete depending on the server's authorization mode, and any errors experienced during the evaluation. SelfSubjectRulesReview should be used by UIs to show/hide actions, or to quickly let an end user reason about their permissions. It should NOT Be used by external systems to drive authorization decisions as this raises confused deputy, cache lifetime/revocation, and correctness concerns. SubjectAccessReview, and LocalAccessReview are the correct way to defer authorization decisions to the API server.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information about the request being evaluated.", - Ref: ref("k8s.io/api/authorization/v1beta1.SelfSubjectRulesReviewSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the server and indicates the set of actions a user can perform.", - Ref: ref("k8s.io/api/authorization/v1beta1.SubjectRulesReviewStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1beta1.SelfSubjectRulesReviewSpec", "k8s.io/api/authorization/v1beta1.SubjectRulesReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_authorization_v1beta1_SelfSubjectRulesReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace to evaluate rules for. Required.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1beta1_SubjectAccessReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SubjectAccessReview checks whether or not a user or group can perform an action.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information about the request being evaluated", - Ref: ref("k8s.io/api/authorization/v1beta1.SubjectAccessReviewSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the server and indicates whether the request is allowed or not", - Ref: ref("k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1beta1.SubjectAccessReviewSpec", "k8s.io/api/authorization/v1beta1.SubjectAccessReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_authorization_v1beta1_SubjectAccessReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SubjectAccessReviewSpec is a description of the access request. Exactly one of ResourceAuthorizationAttributes and NonResourceAuthorizationAttributes must be set", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "resourceAttributes": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceAuthorizationAttributes describes information for a resource access request", - Ref: ref("k8s.io/api/authorization/v1beta1.ResourceAttributes"), - }, - }, - "nonResourceAttributes": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceAttributes describes information for a non-resource access request", - Ref: ref("k8s.io/api/authorization/v1beta1.NonResourceAttributes"), - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "User is the user you're testing for. If you specify \"User\" but not \"Group\", then is it interpreted as \"What if User were not a member of any groups", - Type: []string{"string"}, - Format: "", - }, - }, - "group": { - SchemaProps: spec.SchemaProps{ - Description: "Groups is the groups you're testing for.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "extra": { - SchemaProps: spec.SchemaProps{ - Description: "Extra corresponds to the user.Info.GetExtra() method from the authenticator. Since that is input to the authorizer it needs a reflection here.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "UID information about the requesting user.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1beta1.NonResourceAttributes", "k8s.io/api/authorization/v1beta1.ResourceAttributes"}, - } -} - -func schema_k8sio_api_authorization_v1beta1_SubjectAccessReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SubjectAccessReviewStatus", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "allowed": { - SchemaProps: spec.SchemaProps{ - Description: "Allowed is required. True if the action would be allowed, false otherwise.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "denied": { - SchemaProps: spec.SchemaProps{ - Description: "Denied is optional. True if the action would be denied, otherwise false. If both allowed is false and denied is false, then the authorizer has no opinion on whether to authorize the action. Denied may not be true if Allowed is true.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "Reason is optional. It indicates why a request was allowed or denied.", - Type: []string{"string"}, - Format: "", - }, - }, - "evaluationError": { - SchemaProps: spec.SchemaProps{ - Description: "EvaluationError is an indication that some error occurred during the authorization check. It is entirely possible to get an error and be able to continue determine authorization status in spite of it. For instance, RBAC can be missing a role, but enough roles are still present and bound to reason about the request.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"allowed"}, - }, - }, - } -} - -func schema_k8sio_api_authorization_v1beta1_SubjectRulesReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SubjectRulesReviewStatus contains the result of a rules check. This check can be incomplete depending on the set of authorizers the server is configured with and any errors experienced during evaluation. Because authorization rules are additive, if a rule appears in a list it's safe to assume the subject has that permission, even if that list is incomplete.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "resourceRules": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceRules is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/authorization/v1beta1.ResourceRule"), - }, - }, - }, - }, - }, - "nonResourceRules": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceRules is the list of actions the subject is allowed to perform on non-resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/authorization/v1beta1.NonResourceRule"), - }, - }, - }, - }, - }, - "incomplete": { - SchemaProps: spec.SchemaProps{ - Description: "Incomplete is true when the rules returned by this call are incomplete. This is most commonly encountered when an authorizer, such as an external authorizer, doesn't support rules evaluation.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "evaluationError": { - SchemaProps: spec.SchemaProps{ - Description: "EvaluationError can appear in combination with Rules. It indicates an error occurred during rule evaluation, such as an authorizer that doesn't support rule evaluation, and that ResourceRules and/or NonResourceRules may be incomplete.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"resourceRules", "nonResourceRules", "incomplete"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authorization/v1beta1.NonResourceRule", "k8s.io/api/authorization/v1beta1.ResourceRule"}, - } -} - -func schema_k8sio_api_autoscaling_v1_CrossVersionObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CrossVersionObjectReference contains enough information to let you identify the referred resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "API version of the referent", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"kind", "name"}, - }, - }, - } -} - -func schema_k8sio_api_autoscaling_v1_ExternalMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of the metric in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "metricSelector": { - SchemaProps: spec.SchemaProps{ - Description: "metricSelector is used to identify a specific time series within a given metric.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "targetValue": { - SchemaProps: spec.SchemaProps{ - Description: "targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "targetAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"metricName"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v1_ExternalMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of a metric used for autoscaling in metric system.", - Type: []string{"string"}, - Format: "", - }, - }, - "metricSelector": { - SchemaProps: spec.SchemaProps{ - Description: "metricSelector is used to identify a specific time series within a given metric.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "currentValue": { - SchemaProps: spec.SchemaProps{ - Description: "currentValue is the current value of the metric (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "currentAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "currentAverageValue is the current value of metric averaged over autoscaled pods.", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"metricName", "currentValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscaler(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "configuration of a horizontal pod autoscaler.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "behaviour of autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - Ref: ref("k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "current information about the autoscaler.", - Ref: ref("k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerSpec", "k8s.io/api/autoscaling/v1.HorizontalPodAutoscalerStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type describes the current condition", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "status is the status of the condition (True, False, Unknown)", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "lastTransitionTime is the last time the condition transitioned from one status to another", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "reason is the reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "message is a human-readable explanation containing details about the transition", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "list of horizontal pod autoscaler objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "list of horizontal pod autoscaler objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/autoscaling/v1.HorizontalPodAutoscaler"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v1.HorizontalPodAutoscaler", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "specification of a horizontal pod autoscaler.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "scaleTargetRef": { - SchemaProps: spec.SchemaProps{ - Description: "reference to scaled resource; horizontal pod autoscaler will learn the current resource consumption and will set the desired number of pods by using its Scale subresource.", - Ref: ref("k8s.io/api/autoscaling/v1.CrossVersionObjectReference"), - }, - }, - "minReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "lower limit for the number of pods that can be set by the autoscaler, default 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "maxReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "upper limit for the number of pods that can be set by the autoscaler; cannot be smaller than MinReplicas.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "targetCPUUtilizationPercentage": { - SchemaProps: spec.SchemaProps{ - Description: "target average CPU utilization (represented as a percentage of requested CPU) over all the pods; if not specified the default autoscaling policy will be used.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"scaleTargetRef", "maxReplicas"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v1.CrossVersionObjectReference"}, - } -} - -func schema_k8sio_api_autoscaling_v1_HorizontalPodAutoscalerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "current status of a horizontal pod autoscaler", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "most recent generation observed by this autoscaler.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "lastScaleTime": { - SchemaProps: spec.SchemaProps{ - Description: "last time the HorizontalPodAutoscaler scaled the number of pods; used by the autoscaler to control how often the number of pods is changed.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "currentReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "current number of replicas of pods managed by this autoscaler.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "desiredReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "desired number of replicas of pods managed by this autoscaler.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentCPUUtilizationPercentage": { - SchemaProps: spec.SchemaProps{ - Description: "current average CPU utilization over all pods, represented as a percentage of requested CPU, e.g. 70 means that an average pod is using now 70% of its requested CPU.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"currentReplicas", "desiredReplicas"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_autoscaling_v1_MetricSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type is the type of metric source. It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.", - Type: []string{"string"}, - Format: "", - }, - }, - "object": { - SchemaProps: spec.SchemaProps{ - Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", - Ref: ref("k8s.io/api/autoscaling/v1.ObjectMetricSource"), - }, - }, - "pods": { - SchemaProps: spec.SchemaProps{ - Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - Ref: ref("k8s.io/api/autoscaling/v1.PodsMetricSource"), - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - Ref: ref("k8s.io/api/autoscaling/v1.ResourceMetricSource"), - }, - }, - "external": { - SchemaProps: spec.SchemaProps{ - Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", - Ref: ref("k8s.io/api/autoscaling/v1.ExternalMetricSource"), - }, - }, - }, - Required: []string{"type"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v1.ExternalMetricSource", "k8s.io/api/autoscaling/v1.ObjectMetricSource", "k8s.io/api/autoscaling/v1.PodsMetricSource", "k8s.io/api/autoscaling/v1.ResourceMetricSource"}, - } -} - -func schema_k8sio_api_autoscaling_v1_MetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricStatus describes the last-read state of a single metric.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type is the type of metric source. It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.", - Type: []string{"string"}, - Format: "", - }, - }, - "object": { - SchemaProps: spec.SchemaProps{ - Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", - Ref: ref("k8s.io/api/autoscaling/v1.ObjectMetricStatus"), - }, - }, - "pods": { - SchemaProps: spec.SchemaProps{ - Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - Ref: ref("k8s.io/api/autoscaling/v1.PodsMetricStatus"), - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - Ref: ref("k8s.io/api/autoscaling/v1.ResourceMetricStatus"), - }, - }, - "external": { - SchemaProps: spec.SchemaProps{ - Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", - Ref: ref("k8s.io/api/autoscaling/v1.ExternalMetricStatus"), - }, - }, - }, - Required: []string{"type"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v1.ExternalMetricStatus", "k8s.io/api/autoscaling/v1.ObjectMetricStatus", "k8s.io/api/autoscaling/v1.PodsMetricStatus", "k8s.io/api/autoscaling/v1.ResourceMetricStatus"}, - } -} - -func schema_k8sio_api_autoscaling_v1_ObjectMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "target": { - SchemaProps: spec.SchemaProps{ - Description: "target is the described Kubernetes object.", - Ref: ref("k8s.io/api/autoscaling/v1.CrossVersionObjectReference"), - }, - }, - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of the metric in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "targetValue": { - SchemaProps: spec.SchemaProps{ - Description: "targetValue is the target value of the metric (as a quantity).", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric. When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "averageValue": { - SchemaProps: spec.SchemaProps{ - Description: "averageValue is the target value of the average of the metric across all relevant pods (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"target", "metricName", "targetValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v1.CrossVersionObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v1_ObjectMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "target": { - SchemaProps: spec.SchemaProps{ - Description: "target is the described Kubernetes object.", - Ref: ref("k8s.io/api/autoscaling/v1.CrossVersionObjectReference"), - }, - }, - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of the metric in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "currentValue": { - SchemaProps: spec.SchemaProps{ - Description: "currentValue is the current value of the metric (as a quantity).", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "averageValue": { - SchemaProps: spec.SchemaProps{ - Description: "averageValue is the current value of the average of the metric across all relevant pods (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"target", "metricName", "currentValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v1.CrossVersionObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v1_PodsMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of the metric in question", - Type: []string{"string"}, - Format: "", - }, - }, - "targetAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - }, - Required: []string{"metricName", "targetAverageValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v1_PodsMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of the metric in question", - Type: []string{"string"}, - Format: "", - }, - }, - "currentAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - }, - Required: []string{"metricName", "currentAverageValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v1_ResourceMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is the name of the resource in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "targetAverageUtilization": { - SchemaProps: spec.SchemaProps{ - Description: "targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "targetAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"name"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_autoscaling_v1_ResourceMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is the name of the resource in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "currentAverageUtilization": { - SchemaProps: spec.SchemaProps{ - Description: "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"name", "currentAverageValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_autoscaling_v1_Scale(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Scale represents a scaling request for a resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - Ref: ref("k8s.io/api/autoscaling/v1.ScaleSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status. Read-only.", - Ref: ref("k8s.io/api/autoscaling/v1.ScaleStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v1.ScaleSpec", "k8s.io/api/autoscaling/v1.ScaleStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_autoscaling_v1_ScaleSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ScaleSpec describes the attributes of a scale subresource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "desired number of instances for the scaled object.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_autoscaling_v1_ScaleStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ScaleStatus represents the current status of a scale subresource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "actual number of observed instances of the scaled object.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "label query over pods that should match the replicas count. This is same as the label selector but in the string format to avoid introspection by clients. The string will be in the same format as the query-param syntax. More info about label selectors: http://kubernetes.io/docs/user-guide/labels#label-selectors", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"replicas"}, - }, - }, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_CrossVersionObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CrossVersionObjectReference contains enough information to let you identify the referred resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "API version of the referent", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"kind", "name"}, - }, - }, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_ExternalMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster). Exactly one \"target\" type should be set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of the metric in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "metricSelector": { - SchemaProps: spec.SchemaProps{ - Description: "metricSelector is used to identify a specific time series within a given metric.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "targetValue": { - SchemaProps: spec.SchemaProps{ - Description: "targetValue is the target value of the metric (as a quantity). Mutually exclusive with TargetAverageValue.", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "targetAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "targetAverageValue is the target per-pod value of global metric (as a quantity). Mutually exclusive with TargetValue.", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"metricName"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_ExternalMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of a metric used for autoscaling in metric system.", - Type: []string{"string"}, - Format: "", - }, - }, - "metricSelector": { - SchemaProps: spec.SchemaProps{ - Description: "metricSelector is used to identify a specific time series within a given metric.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "currentValue": { - SchemaProps: spec.SchemaProps{ - Description: "currentValue is the current value of the metric (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "currentAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "currentAverageValue is the current value of metric averaged over autoscaled pods.", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"metricName", "currentValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscaler(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - Ref: ref("k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "status is the current information about the autoscaler.", - Ref: ref("k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerSpec", "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type describes the current condition", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "status is the status of the condition (True, False, Unknown)", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "lastTransitionTime is the last time the condition transitioned from one status to another", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "reason is the reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "message is a human-readable explanation containing details about the transition", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscaler is a list of horizontal pod autoscaler objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "metadata is the standard list metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of horizontal pod autoscaler objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscaler"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscaler", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "scaleTargetRef": { - SchemaProps: spec.SchemaProps{ - Description: "scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.", - Ref: ref("k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference"), - }, - }, - "minReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "maxReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "metrics": { - SchemaProps: spec.SchemaProps{ - Description: "metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/autoscaling/v2beta1.MetricSpec"), - }, - }, - }, - }, - }, - }, - Required: []string{"scaleTargetRef", "maxReplicas"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference", "k8s.io/api/autoscaling/v2beta1.MetricSpec"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_HorizontalPodAutoscalerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "observedGeneration is the most recent generation observed by this autoscaler.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "lastScaleTime": { - SchemaProps: spec.SchemaProps{ - Description: "lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "currentReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "desiredReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentMetrics": { - SchemaProps: spec.SchemaProps{ - Description: "currentMetrics is the last read state of the metrics used by this autoscaler.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/autoscaling/v2beta1.MetricStatus"), - }, - }, - }, - }, - }, - "conditions": { - SchemaProps: spec.SchemaProps{ - Description: "conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"currentReplicas", "desiredReplicas", "conditions"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta1.HorizontalPodAutoscalerCondition", "k8s.io/api/autoscaling/v2beta1.MetricStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_MetricSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type is the type of metric source. It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.", - Type: []string{"string"}, - Format: "", - }, - }, - "object": { - SchemaProps: spec.SchemaProps{ - Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", - Ref: ref("k8s.io/api/autoscaling/v2beta1.ObjectMetricSource"), - }, - }, - "pods": { - SchemaProps: spec.SchemaProps{ - Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - Ref: ref("k8s.io/api/autoscaling/v2beta1.PodsMetricSource"), - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - Ref: ref("k8s.io/api/autoscaling/v2beta1.ResourceMetricSource"), - }, - }, - "external": { - SchemaProps: spec.SchemaProps{ - Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", - Ref: ref("k8s.io/api/autoscaling/v2beta1.ExternalMetricSource"), - }, - }, - }, - Required: []string{"type"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta1.ExternalMetricSource", "k8s.io/api/autoscaling/v2beta1.ObjectMetricSource", "k8s.io/api/autoscaling/v2beta1.PodsMetricSource", "k8s.io/api/autoscaling/v2beta1.ResourceMetricSource"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_MetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricStatus describes the last-read state of a single metric.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type is the type of metric source. It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.", - Type: []string{"string"}, - Format: "", - }, - }, - "object": { - SchemaProps: spec.SchemaProps{ - Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", - Ref: ref("k8s.io/api/autoscaling/v2beta1.ObjectMetricStatus"), - }, - }, - "pods": { - SchemaProps: spec.SchemaProps{ - Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - Ref: ref("k8s.io/api/autoscaling/v2beta1.PodsMetricStatus"), - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - Ref: ref("k8s.io/api/autoscaling/v2beta1.ResourceMetricStatus"), - }, - }, - "external": { - SchemaProps: spec.SchemaProps{ - Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", - Ref: ref("k8s.io/api/autoscaling/v2beta1.ExternalMetricStatus"), - }, - }, - }, - Required: []string{"type"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta1.ExternalMetricStatus", "k8s.io/api/autoscaling/v2beta1.ObjectMetricStatus", "k8s.io/api/autoscaling/v2beta1.PodsMetricStatus", "k8s.io/api/autoscaling/v2beta1.ResourceMetricStatus"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_ObjectMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "target": { - SchemaProps: spec.SchemaProps{ - Description: "target is the described Kubernetes object.", - Ref: ref("k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference"), - }, - }, - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of the metric in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "targetValue": { - SchemaProps: spec.SchemaProps{ - Description: "targetValue is the target value of the metric (as a quantity).", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "averageValue": { - SchemaProps: spec.SchemaProps{ - Description: "averageValue is the target value of the average of the metric across all relevant pods (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"target", "metricName", "targetValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_ObjectMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "target": { - SchemaProps: spec.SchemaProps{ - Description: "target is the described Kubernetes object.", - Ref: ref("k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference"), - }, - }, - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of the metric in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "currentValue": { - SchemaProps: spec.SchemaProps{ - Description: "currentValue is the current value of the metric (as a quantity).", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the ObjectMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "averageValue": { - SchemaProps: spec.SchemaProps{ - Description: "averageValue is the current value of the average of the metric across all relevant pods (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"target", "metricName", "currentValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta1.CrossVersionObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_PodsMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of the metric in question", - Type: []string{"string"}, - Format: "", - }, - }, - "targetAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "targetAverageValue is the target value of the average of the metric across all relevant pods (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping When unset, just the metricName will be used to gather metrics.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - }, - Required: []string{"metricName", "targetAverageValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_PodsMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "metricName is the name of the metric in question", - Type: []string{"string"}, - Format: "", - }, - }, - "currentAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "currentAverageValue is the current value of the average of the metric across all relevant pods (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set in the PodsMetricSource, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - }, - Required: []string{"metricName", "currentAverageValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_ResourceMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is the name of the resource in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "targetAverageUtilization": { - SchemaProps: spec.SchemaProps{ - Description: "targetAverageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "targetAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "targetAverageValue is the target value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type.", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"name"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta1_ResourceMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is the name of the resource in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "currentAverageUtilization": { - SchemaProps: spec.SchemaProps{ - Description: "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. It will only be present if `targetAverageValue` was set in the corresponding metric specification.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentAverageValue": { - SchemaProps: spec.SchemaProps{ - Description: "currentAverageValue is the current value of the average of the resource metric across all relevant pods, as a raw value (instead of as a percentage of the request), similar to the \"pods\" metric source type. It will always be set, regardless of the corresponding metric specification.", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"name", "currentAverageValue"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_CrossVersionObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CrossVersionObjectReference contains enough information to let you identify the referred resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind of the referent; More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds\"", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent; More info: http://kubernetes.io/docs/user-guide/identifiers#names", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "API version of the referent", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"kind", "name"}, - }, - }, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_ExternalMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExternalMetricSource indicates how to scale on a metric not associated with any Kubernetes object (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metric": { - SchemaProps: spec.SchemaProps{ - Description: "metric identifies the target metric by name and selector", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), - }, - }, - "target": { - SchemaProps: spec.SchemaProps{ - Description: "target specifies the target value for the given metric", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricTarget"), - }, - }, - }, - Required: []string{"metric", "target"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricTarget"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_ExternalMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExternalMetricStatus indicates the current value of a global metric not associated with any Kubernetes object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metric": { - SchemaProps: spec.SchemaProps{ - Description: "metric identifies the target metric by name and selector", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), - }, - }, - "current": { - SchemaProps: spec.SchemaProps{ - Description: "current contains the current value for the given metric", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricValueStatus"), - }, - }, - }, - Required: []string{"metric", "current"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricValueStatus"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscaler(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscaler is the configuration for a horizontal pod autoscaler, which automatically manages the replica count of any resource implementing the scale subresource based on the metrics specified.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "metadata is the standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "spec is the specification for the behaviour of the autoscaler. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status.", - Ref: ref("k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "status is the current information about the autoscaler.", - Ref: ref("k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerSpec", "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerCondition describes the state of a HorizontalPodAutoscaler at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type describes the current condition", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "status is the status of the condition (True, False, Unknown)", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "lastTransitionTime is the last time the condition transitioned from one status to another", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "reason is the reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "message is a human-readable explanation containing details about the transition", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerList is a list of horizontal pod autoscaler objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "metadata is the standard list metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of horizontal pod autoscaler objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscaler"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscaler", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerSpec describes the desired functionality of the HorizontalPodAutoscaler.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "scaleTargetRef": { - SchemaProps: spec.SchemaProps{ - Description: "scaleTargetRef points to the target resource to scale, and is used to the pods for which metrics should be collected, as well as to actually change the replica count.", - Ref: ref("k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference"), - }, - }, - "minReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "minReplicas is the lower limit for the number of replicas to which the autoscaler can scale down. It defaults to 1 pod.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "maxReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "maxReplicas is the upper limit for the number of replicas to which the autoscaler can scale up. It cannot be less that minReplicas.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "metrics": { - SchemaProps: spec.SchemaProps{ - Description: "metrics contains the specifications for which to use to calculate the desired replica count (the maximum replica count across all metrics will be used). The desired replica count is calculated multiplying the ratio between the target value and the current value by the current number of pods. Ergo, metrics used must decrease as the pod count is increased, and vice-versa. See the individual metric source types for more information about how each type of metric must respond. If not set, the default metric will be set to 80% average CPU utilization.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricSpec"), - }, - }, - }, - }, - }, - }, - Required: []string{"scaleTargetRef", "maxReplicas"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference", "k8s.io/api/autoscaling/v2beta2.MetricSpec"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_HorizontalPodAutoscalerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerStatus describes the current status of a horizontal pod autoscaler.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "observedGeneration is the most recent generation observed by this autoscaler.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "lastScaleTime": { - SchemaProps: spec.SchemaProps{ - Description: "lastScaleTime is the last time the HorizontalPodAutoscaler scaled the number of pods, used by the autoscaler to control how often the number of pods is changed.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "currentReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "currentReplicas is current number of replicas of pods managed by this autoscaler, as last seen by the autoscaler.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "desiredReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "desiredReplicas is the desired number of replicas of pods managed by this autoscaler, as last calculated by the autoscaler.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentMetrics": { - SchemaProps: spec.SchemaProps{ - Description: "currentMetrics is the last read state of the metrics used by this autoscaler.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricStatus"), - }, - }, - }, - }, - }, - "conditions": { - SchemaProps: spec.SchemaProps{ - Description: "conditions is the set of conditions required for this autoscaler to scale its target, and indicates whether or not those conditions are met.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"currentReplicas", "desiredReplicas", "conditions"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.HorizontalPodAutoscalerCondition", "k8s.io/api/autoscaling/v2beta2.MetricStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_MetricIdentifier(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricIdentifier defines the name and optionally selector for a metric", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is the name of the given metric", - Type: []string{"string"}, - Format: "", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector is the string-encoded form of a standard kubernetes label selector for the given metric When set, it is passed as an additional parameter to the metrics server for more specific metrics scoping. When unset, just the metricName will be used to gather metrics.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - }, - Required: []string{"name"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_MetricSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricSpec specifies how to scale based on a single metric (only `type` and one other matching field should be set at once).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type is the type of metric source. It should be one of \"Object\", \"Pods\" or \"Resource\", each mapping to a matching field in the object.", - Type: []string{"string"}, - Format: "", - }, - }, - "object": { - SchemaProps: spec.SchemaProps{ - Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", - Ref: ref("k8s.io/api/autoscaling/v2beta2.ObjectMetricSource"), - }, - }, - "pods": { - SchemaProps: spec.SchemaProps{ - Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - Ref: ref("k8s.io/api/autoscaling/v2beta2.PodsMetricSource"), - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - Ref: ref("k8s.io/api/autoscaling/v2beta2.ResourceMetricSource"), - }, - }, - "external": { - SchemaProps: spec.SchemaProps{ - Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", - Ref: ref("k8s.io/api/autoscaling/v2beta2.ExternalMetricSource"), - }, - }, - }, - Required: []string{"type"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.ExternalMetricSource", "k8s.io/api/autoscaling/v2beta2.ObjectMetricSource", "k8s.io/api/autoscaling/v2beta2.PodsMetricSource", "k8s.io/api/autoscaling/v2beta2.ResourceMetricSource"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_MetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricStatus describes the last-read state of a single metric.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type is the type of metric source. It will be one of \"Object\", \"Pods\" or \"Resource\", each corresponds to a matching field in the object.", - Type: []string{"string"}, - Format: "", - }, - }, - "object": { - SchemaProps: spec.SchemaProps{ - Description: "object refers to a metric describing a single kubernetes object (for example, hits-per-second on an Ingress object).", - Ref: ref("k8s.io/api/autoscaling/v2beta2.ObjectMetricStatus"), - }, - }, - "pods": { - SchemaProps: spec.SchemaProps{ - Description: "pods refers to a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - Ref: ref("k8s.io/api/autoscaling/v2beta2.PodsMetricStatus"), - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Description: "resource refers to a resource metric (such as those specified in requests and limits) known to Kubernetes describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - Ref: ref("k8s.io/api/autoscaling/v2beta2.ResourceMetricStatus"), - }, - }, - "external": { - SchemaProps: spec.SchemaProps{ - Description: "external refers to a global metric that is not associated with any Kubernetes object. It allows autoscaling based on information coming from components running outside of cluster (for example length of queue in cloud messaging service, or QPS from loadbalancer running outside of cluster).", - Ref: ref("k8s.io/api/autoscaling/v2beta2.ExternalMetricStatus"), - }, - }, - }, - Required: []string{"type"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.ExternalMetricStatus", "k8s.io/api/autoscaling/v2beta2.ObjectMetricStatus", "k8s.io/api/autoscaling/v2beta2.PodsMetricStatus", "k8s.io/api/autoscaling/v2beta2.ResourceMetricStatus"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_MetricTarget(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricTarget defines the target value, average value, or average utilization of a specific metric", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type represents whether the metric type is Utilization, Value, or AverageValue", - Type: []string{"string"}, - Format: "", - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "value is the target value of the metric (as a quantity).", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "averageValue": { - SchemaProps: spec.SchemaProps{ - Description: "averageValue is the target value of the average of the metric across all relevant pods (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "averageUtilization": { - SchemaProps: spec.SchemaProps{ - Description: "averageUtilization is the target value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods. Currently only valid for Resource metric source type", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"type"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_MetricValueStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricValueStatus holds the current value for a metric", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "value": { - SchemaProps: spec.SchemaProps{ - Description: "value is the current value of the metric (as a quantity).", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "averageValue": { - SchemaProps: spec.SchemaProps{ - Description: "averageValue is the current value of the average of the metric across all relevant pods (as a quantity)", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "averageUtilization": { - SchemaProps: spec.SchemaProps{ - Description: "currentAverageUtilization is the current value of the average of the resource metric across all relevant pods, represented as a percentage of the requested value of the resource for the pods.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_ObjectMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectMetricSource indicates how to scale on a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "describedObject": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference"), - }, - }, - "target": { - SchemaProps: spec.SchemaProps{ - Description: "target specifies the target value for the given metric", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricTarget"), - }, - }, - "metric": { - SchemaProps: spec.SchemaProps{ - Description: "metric identifies the target metric by name and selector", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), - }, - }, - }, - Required: []string{"describedObject", "target", "metric"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference", "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricTarget"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_ObjectMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectMetricStatus indicates the current value of a metric describing a kubernetes object (for example, hits-per-second on an Ingress object).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metric": { - SchemaProps: spec.SchemaProps{ - Description: "metric identifies the target metric by name and selector", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), - }, - }, - "current": { - SchemaProps: spec.SchemaProps{ - Description: "current contains the current value for the given metric", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricValueStatus"), - }, - }, - "describedObject": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference"), - }, - }, - }, - Required: []string{"metric", "current", "describedObject"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.CrossVersionObjectReference", "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricValueStatus"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_PodsMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodsMetricSource indicates how to scale on a metric describing each pod in the current scale target (for example, transactions-processed-per-second). The values will be averaged together before being compared to the target value.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metric": { - SchemaProps: spec.SchemaProps{ - Description: "metric identifies the target metric by name and selector", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), - }, - }, - "target": { - SchemaProps: spec.SchemaProps{ - Description: "target specifies the target value for the given metric", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricTarget"), - }, - }, - }, - Required: []string{"metric", "target"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricTarget"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_PodsMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodsMetricStatus indicates the current value of a metric describing each pod in the current scale target (for example, transactions-processed-per-second).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metric": { - SchemaProps: spec.SchemaProps{ - Description: "metric identifies the target metric by name and selector", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricIdentifier"), - }, - }, - "current": { - SchemaProps: spec.SchemaProps{ - Description: "current contains the current value for the given metric", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricValueStatus"), - }, - }, - }, - Required: []string{"metric", "current"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.MetricIdentifier", "k8s.io/api/autoscaling/v2beta2.MetricValueStatus"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_ResourceMetricSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceMetricSource indicates how to scale on a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). The values will be averaged together before being compared to the target. Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source. Only one \"target\" type should be set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is the name of the resource in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "target": { - SchemaProps: spec.SchemaProps{ - Description: "target specifies the target value for the given metric", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricTarget"), - }, - }, - }, - Required: []string{"name", "target"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.MetricTarget"}, - } -} - -func schema_k8sio_api_autoscaling_v2beta2_ResourceMetricStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceMetricStatus indicates the current value of a resource metric known to Kubernetes, as specified in requests and limits, describing each pod in the current scale target (e.g. CPU or memory). Such metrics are built in to Kubernetes, and have special scaling options on top of those available to normal per-pod metrics using the \"pods\" source.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the name of the resource in question.", - Type: []string{"string"}, - Format: "", - }, - }, - "current": { - SchemaProps: spec.SchemaProps{ - Description: "current contains the current value for the given metric", - Ref: ref("k8s.io/api/autoscaling/v2beta2.MetricValueStatus"), - }, - }, - }, - Required: []string{"name", "current"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/autoscaling/v2beta2.MetricValueStatus"}, - } -} - -func schema_k8sio_api_batch_v1_Job(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Job represents the configuration of a single job.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/batch/v1.JobSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Current status of a job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/batch/v1.JobStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v1.JobSpec", "k8s.io/api/batch/v1.JobStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_batch_v1_JobCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JobCondition describes current state of a job.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of job condition, Complete or Failed.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastProbeTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition was checked.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transit from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "(brief) reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Human readable message indicating details about last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_batch_v1_JobList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JobList is a collection of jobs.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of Jobs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/batch/v1.Job"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v1.Job", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_batch_v1_JobSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JobSpec describes how the job execution will look like.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "parallelism": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "completions": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "activeDeadlineSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "backoffLimit": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the number of retries before marking this job failed. Defaults to 6", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "manualSelector": { - SchemaProps: spec.SchemaProps{ - Description: "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector", - Type: []string{"boolean"}, - Format: "", - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - "ttlSecondsAfterFinished": { - SchemaProps: spec.SchemaProps{ - Description: "ttlSecondsAfterFinished limits the lifetime of a Job that has finished execution (either Complete or Failed). If this field is set, ttlSecondsAfterFinished after the Job finishes, it is eligible to be automatically deleted. When the Job is being deleted, its lifecycle guarantees (e.g. finalizers) will be honored. If this field is unset, the Job won't be automatically deleted. If this field is set to zero, the Job becomes eligible to be deleted immediately after it finishes. This field is alpha-level and is only honored by servers that enable the TTLAfterFinished feature.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"template"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_batch_v1_JobStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JobStatus represents the current state of a Job.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "The latest available observations of an object's current state. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/batch/v1.JobCondition"), - }, - }, - }, - }, - }, - "startTime": { - SchemaProps: spec.SchemaProps{ - Description: "Represents time when the job was acknowledged by the job controller. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "completionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Represents time when the job was completed. It is not guaranteed to be set in happens-before order across separate operations. It is represented in RFC3339 form and is in UTC.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "active": { - SchemaProps: spec.SchemaProps{ - Description: "The number of actively running pods.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "succeeded": { - SchemaProps: spec.SchemaProps{ - Description: "The number of pods which reached phase Succeeded.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "failed": { - SchemaProps: spec.SchemaProps{ - Description: "The number of pods which reached phase Failed.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v1.JobCondition", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_batch_v1beta1_CronJob(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CronJob represents the configuration of a single cron job.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/batch/v1beta1.CronJobSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/batch/v1beta1.CronJobStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v1beta1.CronJobSpec", "k8s.io/api/batch/v1beta1.CronJobStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_batch_v1beta1_CronJobList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CronJobList is a collection of cron jobs.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of CronJobs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/batch/v1beta1.CronJob"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v1beta1.CronJob", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_batch_v1beta1_CronJobSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CronJobSpec describes how the job execution will look like and when it will actually run.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "schedule": { - SchemaProps: spec.SchemaProps{ - Description: "The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.", - Type: []string{"string"}, - Format: "", - }, - }, - "startingDeadlineSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "concurrencyPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one", - Type: []string{"string"}, - Format: "", - }, - }, - "suspend": { - SchemaProps: spec.SchemaProps{ - Description: "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "jobTemplate": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the job that will be created when executing a CronJob.", - Ref: ref("k8s.io/api/batch/v1beta1.JobTemplateSpec"), - }, - }, - "successfulJobsHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "failedJobsHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"schedule", "jobTemplate"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v1beta1.JobTemplateSpec"}, - } -} - -func schema_k8sio_api_batch_v1beta1_CronJobStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CronJobStatus represents the current state of a cron job.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "active": { - SchemaProps: spec.SchemaProps{ - Description: "A list of pointers to currently running jobs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - }, - }, - }, - "lastScheduleTime": { - SchemaProps: spec.SchemaProps{ - Description: "Information when was the last time the job was successfully scheduled.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_batch_v1beta1_JobTemplate(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JobTemplate describes a template for creating copies of a predefined pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Defines jobs that will be created from this template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/batch/v1beta1.JobTemplateSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v1beta1.JobTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_batch_v1beta1_JobTemplateSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JobTemplateSpec describes the data a Job should have when created from a template", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/batch/v1.JobSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v1.JobSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_batch_v2alpha1_CronJob(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CronJob represents the configuration of a single cron job.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of a cron job, including the schedule. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/batch/v2alpha1.CronJobSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Current status of a cron job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/batch/v2alpha1.CronJobStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v2alpha1.CronJobSpec", "k8s.io/api/batch/v2alpha1.CronJobStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_batch_v2alpha1_CronJobList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CronJobList is a collection of cron jobs.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of CronJobs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/batch/v2alpha1.CronJob"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v2alpha1.CronJob", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_batch_v2alpha1_CronJobSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CronJobSpec describes how the job execution will look like and when it will actually run.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "schedule": { - SchemaProps: spec.SchemaProps{ - Description: "The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.", - Type: []string{"string"}, - Format: "", - }, - }, - "startingDeadlineSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Optional deadline in seconds for starting the job if it misses scheduled time for any reason. Missed jobs executions will be counted as failed ones.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "concurrencyPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies how to treat concurrent executions of a Job. Valid values are: - \"Allow\" (default): allows CronJobs to run concurrently; - \"Forbid\": forbids concurrent runs, skipping next run if previous run hasn't finished yet; - \"Replace\": cancels currently running job and replaces it with a new one", - Type: []string{"string"}, - Format: "", - }, - }, - "suspend": { - SchemaProps: spec.SchemaProps{ - Description: "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "jobTemplate": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the job that will be created when executing a CronJob.", - Ref: ref("k8s.io/api/batch/v2alpha1.JobTemplateSpec"), - }, - }, - "successfulJobsHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "failedJobsHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"schedule", "jobTemplate"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v2alpha1.JobTemplateSpec"}, - } -} - -func schema_k8sio_api_batch_v2alpha1_CronJobStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CronJobStatus represents the current state of a cron job.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "active": { - SchemaProps: spec.SchemaProps{ - Description: "A list of pointers to currently running jobs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - }, - }, - }, - "lastScheduleTime": { - SchemaProps: spec.SchemaProps{ - Description: "Information when was the last time the job was successfully scheduled.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_batch_v2alpha1_JobTemplate(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JobTemplate describes a template for creating copies of a predefined pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Defines jobs that will be created from this template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/batch/v2alpha1.JobTemplateSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v2alpha1.JobTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_batch_v2alpha1_JobTemplateSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JobTemplateSpec describes the data a Job should have when created from a template", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata of the jobs created from this template. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of the job. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/batch/v1.JobSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/batch/v1.JobSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_certificates_v1beta1_CertificateSigningRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Describes a certificate signing request", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "The certificate request itself and any additional information.", - Ref: ref("k8s.io/api/certificates/v1beta1.CertificateSigningRequestSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Derived information about the request.", - Ref: ref("k8s.io/api/certificates/v1beta1.CertificateSigningRequestStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/certificates/v1beta1.CertificateSigningRequestSpec", "k8s.io/api/certificates/v1beta1.CertificateSigningRequestStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "request approval state, currently Approved or Denied.", - Type: []string{"string"}, - Format: "", - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "brief reason for the request state", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "human readable message with details about the request state", - Type: []string{"string"}, - Format: "", - }, - }, - "lastUpdateTime": { - SchemaProps: spec.SchemaProps{ - Description: "timestamp for the last update to this condition", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - }, - Required: []string{"type"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/certificates/v1beta1.CertificateSigningRequest"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/certificates/v1beta1.CertificateSigningRequest", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "This information is immutable after the request is created. Only the Request and Usages fields can be set on creation, other fields are derived by Kubernetes and cannot be modified by users.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "request": { - SchemaProps: spec.SchemaProps{ - Description: "Base64-encoded PKCS#10 CSR data", - Type: []string{"string"}, - Format: "byte", - }, - }, - "usages": { - SchemaProps: spec.SchemaProps{ - Description: "allowedUsages specifies a set of usage contexts the key will be valid for. See: https://tools.ietf.org/html/rfc5280#section-4.2.1.3\n https://tools.ietf.org/html/rfc5280#section-4.2.1.12", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "username": { - SchemaProps: spec.SchemaProps{ - Description: "Information about the requesting user. See user.Info interface for details.", - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "UID information about the requesting user. See user.Info interface for details.", - Type: []string{"string"}, - Format: "", - }, - }, - "groups": { - SchemaProps: spec.SchemaProps{ - Description: "Group information about the requesting user. See user.Info interface for details.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "extra": { - SchemaProps: spec.SchemaProps{ - Description: "Extra information about the requesting user. See user.Info interface for details.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - }, - Required: []string{"request"}, - }, - }, - } -} - -func schema_k8sio_api_certificates_v1beta1_CertificateSigningRequestStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "conditions": { - SchemaProps: spec.SchemaProps{ - Description: "Conditions applied to the request, such as approval or denial.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/certificates/v1beta1.CertificateSigningRequestCondition"), - }, - }, - }, - }, - }, - "certificate": { - SchemaProps: spec.SchemaProps{ - Description: "If request was approved, the controller will place the issued certificate here.", - Type: []string{"string"}, - Format: "byte", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/certificates/v1beta1.CertificateSigningRequestCondition"}, - } -} - -func schema_k8sio_api_coordination_v1_Lease(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Lease defines a lease concept.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the Lease. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/coordination/v1.LeaseSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/coordination/v1.LeaseSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_coordination_v1_LeaseList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LeaseList is a list of Lease objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of schema objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/coordination/v1.Lease"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/coordination/v1.Lease", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_coordination_v1_LeaseSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LeaseSpec is a specification of a Lease.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "holderIdentity": { - SchemaProps: spec.SchemaProps{ - Description: "holderIdentity contains the identity of the holder of a current lease.", - Type: []string{"string"}, - Format: "", - }, - }, - "leaseDurationSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measure against time of last observed RenewTime.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "acquireTime": { - SchemaProps: spec.SchemaProps{ - Description: "acquireTime is a time when the current lease was acquired.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "renewTime": { - SchemaProps: spec.SchemaProps{ - Description: "renewTime is a time when the current holder of a lease has last updated the lease.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "leaseTransitions": { - SchemaProps: spec.SchemaProps{ - Description: "leaseTransitions is the number of transitions of a lease between holders.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"}, - } -} - -func schema_k8sio_api_coordination_v1beta1_Lease(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Lease defines a lease concept.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the Lease. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/coordination/v1beta1.LeaseSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/coordination/v1beta1.LeaseSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_coordination_v1beta1_LeaseList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LeaseList is a list of Lease objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of schema objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/coordination/v1beta1.Lease"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/coordination/v1beta1.Lease", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_coordination_v1beta1_LeaseSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LeaseSpec is a specification of a Lease.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "holderIdentity": { - SchemaProps: spec.SchemaProps{ - Description: "holderIdentity contains the identity of the holder of a current lease.", - Type: []string{"string"}, - Format: "", - }, - }, - "leaseDurationSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "leaseDurationSeconds is a duration that candidates for a lease need to wait to force acquire it. This is measure against time of last observed RenewTime.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "acquireTime": { - SchemaProps: spec.SchemaProps{ - Description: "acquireTime is a time when the current lease was acquired.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "renewTime": { - SchemaProps: spec.SchemaProps{ - Description: "renewTime is a time when the current holder of a lease has last updated the lease.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "leaseTransitions": { - SchemaProps: spec.SchemaProps{ - Description: "leaseTransitions is the number of transitions of a lease between holders.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"}, - } -} - -func schema_k8sio_api_core_v1_AWSElasticBlockStoreVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Persistent Disk resource in AWS.\n\nAn AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "volumeID": { - SchemaProps: spec.SchemaProps{ - Description: "Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - Type: []string{"string"}, - Format: "", - }, - }, - "partition": { - SchemaProps: spec.SchemaProps{ - Description: "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty).", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Specify \"true\" to force and set the ReadOnly property in VolumeMounts to \"true\". If omitted, the default is \"false\". More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"volumeID"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_Affinity(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Affinity is a group of affinity scheduling rules.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "nodeAffinity": { - SchemaProps: spec.SchemaProps{ - Description: "Describes node affinity scheduling rules for the pod.", - Ref: ref("k8s.io/api/core/v1.NodeAffinity"), - }, - }, - "podAffinity": { - SchemaProps: spec.SchemaProps{ - Description: "Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).", - Ref: ref("k8s.io/api/core/v1.PodAffinity"), - }, - }, - "podAntiAffinity": { - SchemaProps: spec.SchemaProps{ - Description: "Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).", - Ref: ref("k8s.io/api/core/v1.PodAntiAffinity"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.NodeAffinity", "k8s.io/api/core/v1.PodAffinity", "k8s.io/api/core/v1.PodAntiAffinity"}, - } -} - -func schema_k8sio_api_core_v1_AttachedVolume(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AttachedVolume describes a volume attached to a node", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the attached volume", - Type: []string{"string"}, - Format: "", - }, - }, - "devicePath": { - SchemaProps: spec.SchemaProps{ - Description: "DevicePath represents the device path where the volume should be available", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name", "devicePath"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_AvoidPods(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AvoidPods describes pods that should avoid this node. This is the value for a Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and will eventually become a field of NodeStatus.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "preferAvoidPods": { - SchemaProps: spec.SchemaProps{ - Description: "Bounded-sized list of signatures of pods that should avoid this node, sorted in timestamp order from oldest to newest. Size of the slice is unspecified.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PreferAvoidPodsEntry"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PreferAvoidPodsEntry"}, - } -} - -func schema_k8sio_api_core_v1_AzureDiskVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "diskName": { - SchemaProps: spec.SchemaProps{ - Description: "The Name of the data disk in the blob storage", - Type: []string{"string"}, - Format: "", - }, - }, - "diskURI": { - SchemaProps: spec.SchemaProps{ - Description: "The URI the data disk in the blob storage", - Type: []string{"string"}, - Format: "", - }, - }, - "cachingMode": { - SchemaProps: spec.SchemaProps{ - Description: "Host Caching mode: None, Read Only, Read Write.", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"diskName", "diskURI"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_AzureFilePersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "secretName": { - SchemaProps: spec.SchemaProps{ - Description: "the name of secret that contains Azure Storage Account Name and Key", - Type: []string{"string"}, - Format: "", - }, - }, - "shareName": { - SchemaProps: spec.SchemaProps{ - Description: "Share Name", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "secretNamespace": { - SchemaProps: spec.SchemaProps{ - Description: "the namespace of the secret that contains Azure Storage Account Name and Key default is the same as the Pod", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"secretName", "shareName"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_AzureFileVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "secretName": { - SchemaProps: spec.SchemaProps{ - Description: "the name of secret that contains Azure Storage Account Name and Key", - Type: []string{"string"}, - Format: "", - }, - }, - "shareName": { - SchemaProps: spec.SchemaProps{ - Description: "Share Name", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"secretName", "shareName"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_Binding(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Binding ties one object to another; for example, a pod is bound to a node by a scheduler. Deprecated in 1.7, please use the bindings subresource of pods instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "target": { - SchemaProps: spec.SchemaProps{ - Description: "The target object that you want to bind to the standard object.", - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - }, - Required: []string{"target"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_CSIPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents storage that is managed by an external CSI volume driver (Beta feature)", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "driver": { - SchemaProps: spec.SchemaProps{ - Description: "Driver is the name of the driver to use for this volume. Required.", - Type: []string{"string"}, - Format: "", - }, - }, - "volumeHandle": { - SchemaProps: spec.SchemaProps{ - Description: "VolumeHandle is the unique volume name returned by the CSI volume plugin’s CreateVolume to refer to the volume on all subsequent calls. Required.", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: The value to pass to ControllerPublishVolumeRequest. Defaults to false (read/write).", - Type: []string{"boolean"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\".", - Type: []string{"string"}, - Format: "", - }, - }, - "volumeAttributes": { - SchemaProps: spec.SchemaProps{ - Description: "Attributes of the volume to publish.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "controllerPublishSecretRef": { - SchemaProps: spec.SchemaProps{ - Description: "ControllerPublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI ControllerPublishVolume and ControllerUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", - Ref: ref("k8s.io/api/core/v1.SecretReference"), - }, - }, - "nodeStageSecretRef": { - SchemaProps: spec.SchemaProps{ - Description: "NodeStageSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodeStageVolume and NodeStageVolume and NodeUnstageVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", - Ref: ref("k8s.io/api/core/v1.SecretReference"), - }, - }, - "nodePublishSecretRef": { - SchemaProps: spec.SchemaProps{ - Description: "NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secrets are passed.", - Ref: ref("k8s.io/api/core/v1.SecretReference"), - }, - }, - }, - Required: []string{"driver", "volumeHandle"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.SecretReference"}, - } -} - -func schema_k8sio_api_core_v1_CSIVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a source location of a volume to mount, managed by an external CSI driver", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "driver": { - SchemaProps: spec.SchemaProps{ - Description: "Driver is the name of the CSI driver that handles this volume. Consult with your admin for the correct name as registered in the cluster.", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies a read-only configuration for the volume. Defaults to false (read/write).", - Type: []string{"boolean"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Ex. \"ext4\", \"xfs\", \"ntfs\". If not provided, the empty value is passed to the associated CSI driver which will determine the default filesystem to apply.", - Type: []string{"string"}, - Format: "", - }, - }, - "volumeAttributes": { - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttributes stores driver-specific properties that are passed to the CSI driver. Consult your driver's documentation for supported values.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "nodePublishSecretRef": { - SchemaProps: spec.SchemaProps{ - Description: "NodePublishSecretRef is a reference to the secret object containing sensitive information to pass to the CSI driver to complete the CSI NodePublishVolume and NodeUnpublishVolume calls. This field is optional, and may be empty if no secret is required. If the secret object contains more than one secret, all secret references are passed.", - Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), - }, - }, - }, - Required: []string{"driver"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LocalObjectReference"}, - } -} - -func schema_k8sio_api_core_v1_Capabilities(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Adds and removes POSIX capabilities from running containers.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "add": { - SchemaProps: spec.SchemaProps{ - Description: "Added capabilities", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "drop": { - SchemaProps: spec.SchemaProps{ - Description: "Removed capabilities", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_CephFSPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "monitors": { - SchemaProps: spec.SchemaProps{ - Description: "Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Used as the mounted root, rather than the full Ceph tree, default is /", - Type: []string{"string"}, - Format: "", - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "secretFile": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - Ref: ref("k8s.io/api/core/v1.SecretReference"), - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"monitors"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.SecretReference"}, - } -} - -func schema_k8sio_api_core_v1_CephFSVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Ceph Filesystem mount that lasts the lifetime of a pod Cephfs volumes do not support ownership management or SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "monitors": { - SchemaProps: spec.SchemaProps{ - Description: "Required: Monitors is a collection of Ceph monitors More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Used as the mounted root, rather than the full Ceph tree, default is /", - Type: []string{"string"}, - Format: "", - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: User is the rados user name, default is admin More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "secretFile": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: SecretRef is reference to the authentication secret for User, default is empty. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/volumes/cephfs/README.md#how-to-use-it", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"monitors"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LocalObjectReference"}, - } -} - -func schema_k8sio_api_core_v1_CinderPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "volumeID": { - SchemaProps: spec.SchemaProps{ - Description: "volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - Type: []string{"boolean"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: points to a secret object containing parameters used to connect to OpenStack.", - Ref: ref("k8s.io/api/core/v1.SecretReference"), - }, - }, - }, - Required: []string{"volumeID"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.SecretReference"}, - } -} - -func schema_k8sio_api_core_v1_CinderVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "volumeID": { - SchemaProps: spec.SchemaProps{ - Description: "volume id used to identify the volume in cinder More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - Type: []string{"boolean"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: points to a secret object containing parameters used to connect to OpenStack.", - Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), - }, - }, - }, - Required: []string{"volumeID"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LocalObjectReference"}, - } -} - -func schema_k8sio_api_core_v1_ClientIPConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClientIPConfig represents the configurations of Client IP based session affinity.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "timeoutSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "timeoutSeconds specifies the seconds of ClientIP type session sticky time. The value must be >0 && <=86400(for 1 day) if ServiceAffinity == \"ClientIP\". Default value is 10800(for 3 hours).", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ComponentCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Information about the condition of a component.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of condition for a component. Valid value: \"Healthy\"", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition for a component. Valid values for \"Healthy\": \"True\", \"False\", or \"Unknown\".", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Message about the condition for a component. For example, information about a health check.", - Type: []string{"string"}, - Format: "", - }, - }, - "error": { - SchemaProps: spec.SchemaProps{ - Description: "Condition error code for a component. For example, a health check error code.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ComponentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ComponentStatus (and ComponentStatusList) holds the cluster validation info.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "List of component conditions observed", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ComponentCondition"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ComponentCondition", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_ComponentStatusList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Status of all the conditions for the component as a list of ComponentStatus objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of ComponentStatus objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ComponentStatus"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ComponentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_ConfigMap(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ConfigMap holds configuration data for pods to consume.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "data": { - SchemaProps: spec.SchemaProps{ - Description: "Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "binaryData": { - SchemaProps: spec.SchemaProps{ - Description: "BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "byte", - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_ConfigMapEnvSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.\n\nThe contents of the target ConfigMap's Data field will represent the key-value pairs as environment variables.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - Type: []string{"string"}, - Format: "", - }, - }, - "optional": { - SchemaProps: spec.SchemaProps{ - Description: "Specify whether the ConfigMap must be defined", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ConfigMapKeySelector(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Selects a key from a ConfigMap.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - Type: []string{"string"}, - Format: "", - }, - }, - "key": { - SchemaProps: spec.SchemaProps{ - Description: "The key to select.", - Type: []string{"string"}, - Format: "", - }, - }, - "optional": { - SchemaProps: spec.SchemaProps{ - Description: "Specify whether the ConfigMap or it's key must be defined", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"key"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ConfigMapList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ConfigMapList is a resource containing a list of ConfigMap objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of ConfigMaps.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ConfigMap"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ConfigMap", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_ConfigMapNodeConfigSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace is the metadata.namespace of the referenced ConfigMap. This field is required in all cases.", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the metadata.name of the referenced ConfigMap. This field is required in all cases.", - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "UID is the metadata.UID of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.", - Type: []string{"string"}, - Format: "", - }, - }, - "resourceVersion": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. This field is forbidden in Node.Spec, and required in Node.Status.", - Type: []string{"string"}, - Format: "", - }, - }, - "kubeletConfigKey": { - SchemaProps: spec.SchemaProps{ - Description: "KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure This field is required in all cases.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"namespace", "name", "kubeletConfigKey"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ConfigMapProjection(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Adapts a ConfigMap into a projected volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - Type: []string{"string"}, - Format: "", - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.KeyToPath"), - }, - }, - }, - }, - }, - "optional": { - SchemaProps: spec.SchemaProps{ - Description: "Specify whether the ConfigMap or it's keys must be defined", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.KeyToPath"}, - } -} - -func schema_k8sio_api_core_v1_ConfigMapVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - Type: []string{"string"}, - Format: "", - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.KeyToPath"), - }, - }, - }, - }, - }, - "defaultMode": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "optional": { - SchemaProps: spec.SchemaProps{ - Description: "Specify whether the ConfigMap or it's keys must be defined", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.KeyToPath"}, - } -} - -func schema_k8sio_api_core_v1_Container(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A single application container that you want to run within a pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.", - Type: []string{"string"}, - Format: "", - }, - }, - "image": { - SchemaProps: spec.SchemaProps{ - Description: "Docker image name. More info: https://kubernetes.io/docs/concepts/containers/images This field is optional to allow higher level config management to default or override container images in workload controllers like Deployments and StatefulSets.", - Type: []string{"string"}, - Format: "", - }, - }, - "command": { - SchemaProps: spec.SchemaProps{ - Description: "Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "args": { - SchemaProps: spec.SchemaProps{ - Description: "Arguments to the entrypoint. The docker image's CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "workingDir": { - SchemaProps: spec.SchemaProps{ - Description: "Container's working directory. If not specified, the container runtime's default will be used, which might be configured in the container image. Cannot be updated.", - Type: []string{"string"}, - Format: "", - }, - }, - "ports": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-list-map-keys": []interface{}{ - "containerPort", - "protocol", - }, - "x-kubernetes-list-type": "map", - "x-kubernetes-patch-merge-key": "containerPort", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default \"0.0.0.0\" address inside a container will be accessible from the network. Cannot be updated.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ContainerPort"), - }, - }, - }, - }, - }, - "envFrom": { - SchemaProps: spec.SchemaProps{ - Description: "List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.EnvFromSource"), - }, - }, - }, - }, - }, - "env": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "List of environment variables to set in the container. Cannot be updated.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.EnvVar"), - }, - }, - }, - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Compute Resources required by this container. Cannot be updated. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - Ref: ref("k8s.io/api/core/v1.ResourceRequirements"), - }, - }, - "volumeMounts": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "mountPath", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Pod volumes to mount into the container's filesystem. Cannot be updated.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.VolumeMount"), - }, - }, - }, - }, - }, - "volumeDevices": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "devicePath", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "volumeDevices is the list of block devices to be used by the container. This is a beta feature.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.VolumeDevice"), - }, - }, - }, - }, - }, - "livenessProbe": { - SchemaProps: spec.SchemaProps{ - Description: "Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - Ref: ref("k8s.io/api/core/v1.Probe"), - }, - }, - "readinessProbe": { - SchemaProps: spec.SchemaProps{ - Description: "Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - Ref: ref("k8s.io/api/core/v1.Probe"), - }, - }, - "lifecycle": { - SchemaProps: spec.SchemaProps{ - Description: "Actions that the management system should take in response to container lifecycle events. Cannot be updated.", - Ref: ref("k8s.io/api/core/v1.Lifecycle"), - }, - }, - "terminationMessagePath": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.", - Type: []string{"string"}, - Format: "", - }, - }, - "terminationMessagePolicy": { - SchemaProps: spec.SchemaProps{ - Description: "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.", - Type: []string{"string"}, - Format: "", - }, - }, - "imagePullPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", - Type: []string{"string"}, - Format: "", - }, - }, - "securityContext": { - SchemaProps: spec.SchemaProps{ - Description: "Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", - Ref: ref("k8s.io/api/core/v1.SecurityContext"), - }, - }, - "stdin": { - SchemaProps: spec.SchemaProps{ - Description: "Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "stdinOnce": { - SchemaProps: spec.SchemaProps{ - Description: "Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false", - Type: []string{"boolean"}, - Format: "", - }, - }, - "tty": { - SchemaProps: spec.SchemaProps{ - Description: "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"name"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ContainerPort", "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Lifecycle", "k8s.io/api/core/v1.Probe", "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.SecurityContext", "k8s.io/api/core/v1.VolumeDevice", "k8s.io/api/core/v1.VolumeMount"}, - } -} - -func schema_k8sio_api_core_v1_ContainerImage(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Describe a container image", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "names": { - SchemaProps: spec.SchemaProps{ - Description: "Names by which this image is known. e.g. [\"k8s.gcr.io/hyperkube:v1.0.7\", \"dockerhub.io/google_containers/hyperkube:v1.0.7\"]", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "sizeBytes": { - SchemaProps: spec.SchemaProps{ - Description: "The size of the image in bytes.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - Required: []string{"names"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ContainerPort(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ContainerPort represents a network port in a single container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.", - Type: []string{"string"}, - Format: "", - }, - }, - "hostPort": { - SchemaProps: spec.SchemaProps{ - Description: "Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "containerPort": { - SchemaProps: spec.SchemaProps{ - Description: "Number of port to expose on the pod's IP address. This must be a valid port number, 0 < x < 65536.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "protocol": { - SchemaProps: spec.SchemaProps{ - Description: "Protocol for port. Must be UDP, TCP, or SCTP. Defaults to \"TCP\".", - Type: []string{"string"}, - Format: "", - }, - }, - "hostIP": { - SchemaProps: spec.SchemaProps{ - Description: "What host IP to bind the external port to.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"containerPort"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ContainerState(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ContainerState holds a possible state of container. Only one of its members may be specified. If none of them is specified, the default one is ContainerStateWaiting.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "waiting": { - SchemaProps: spec.SchemaProps{ - Description: "Details about a waiting container", - Ref: ref("k8s.io/api/core/v1.ContainerStateWaiting"), - }, - }, - "running": { - SchemaProps: spec.SchemaProps{ - Description: "Details about a running container", - Ref: ref("k8s.io/api/core/v1.ContainerStateRunning"), - }, - }, - "terminated": { - SchemaProps: spec.SchemaProps{ - Description: "Details about a terminated container", - Ref: ref("k8s.io/api/core/v1.ContainerStateTerminated"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ContainerStateRunning", "k8s.io/api/core/v1.ContainerStateTerminated", "k8s.io/api/core/v1.ContainerStateWaiting"}, - } -} - -func schema_k8sio_api_core_v1_ContainerStateRunning(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ContainerStateRunning is a running state of a container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "startedAt": { - SchemaProps: spec.SchemaProps{ - Description: "Time at which the container was last (re-)started", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_core_v1_ContainerStateTerminated(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ContainerStateTerminated is a terminated state of a container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "exitCode": { - SchemaProps: spec.SchemaProps{ - Description: "Exit status from the last termination of the container", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "signal": { - SchemaProps: spec.SchemaProps{ - Description: "Signal from the last termination of the container", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "(brief) reason from the last termination of the container", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Message regarding the last termination of the container", - Type: []string{"string"}, - Format: "", - }, - }, - "startedAt": { - SchemaProps: spec.SchemaProps{ - Description: "Time at which previous execution of the container started", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "finishedAt": { - SchemaProps: spec.SchemaProps{ - Description: "Time at which the container last terminated", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "containerID": { - SchemaProps: spec.SchemaProps{ - Description: "Container's ID in the format 'docker://'", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"exitCode"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_core_v1_ContainerStateWaiting(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ContainerStateWaiting is a waiting state of a container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "(brief) reason the container is not yet running.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Message regarding why the container is not yet running.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ContainerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ContainerStatus contains details for the current status of this container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "This must be a DNS_LABEL. Each container in a pod must have a unique name. Cannot be updated.", - Type: []string{"string"}, - Format: "", - }, - }, - "state": { - SchemaProps: spec.SchemaProps{ - Description: "Details about the container's current condition.", - Ref: ref("k8s.io/api/core/v1.ContainerState"), - }, - }, - "lastState": { - SchemaProps: spec.SchemaProps{ - Description: "Details about the container's last termination condition.", - Ref: ref("k8s.io/api/core/v1.ContainerState"), - }, - }, - "ready": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies whether the container has passed its readiness probe.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "restartCount": { - SchemaProps: spec.SchemaProps{ - Description: "The number of times the container has been restarted, currently based on the number of dead containers that have not yet been removed. Note that this is calculated from dead containers. But those containers are subject to garbage collection. This value will get capped at 5 by GC.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "image": { - SchemaProps: spec.SchemaProps{ - Description: "The image the container is running. More info: https://kubernetes.io/docs/concepts/containers/images", - Type: []string{"string"}, - Format: "", - }, - }, - "imageID": { - SchemaProps: spec.SchemaProps{ - Description: "ImageID of the container's image.", - Type: []string{"string"}, - Format: "", - }, - }, - "containerID": { - SchemaProps: spec.SchemaProps{ - Description: "Container's ID in the format 'docker://'.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name", "ready", "restartCount", "image", "imageID"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ContainerState"}, - } -} - -func schema_k8sio_api_core_v1_DaemonEndpoint(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonEndpoint contains information about a single Daemon endpoint.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "Port": { - SchemaProps: spec.SchemaProps{ - Description: "Port number of the given endpoint.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"Port"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_DownwardAPIProjection(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of DownwardAPIVolume file", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.DownwardAPIVolumeFile"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.DownwardAPIVolumeFile"}, - } -} - -func schema_k8sio_api_core_v1_DownwardAPIVolumeFile(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DownwardAPIVolumeFile represents information to create the file containing the pod field", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", - Type: []string{"string"}, - Format: "", - }, - }, - "fieldRef": { - SchemaProps: spec.SchemaProps{ - Description: "Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.", - Ref: ref("k8s.io/api/core/v1.ObjectFieldSelector"), - }, - }, - "resourceFieldRef": { - SchemaProps: spec.SchemaProps{ - Description: "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.", - Ref: ref("k8s.io/api/core/v1.ResourceFieldSelector"), - }, - }, - "mode": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"path"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ObjectFieldSelector", "k8s.io/api/core/v1.ResourceFieldSelector"}, - } -} - -func schema_k8sio_api_core_v1_DownwardAPIVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of downward API volume file", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.DownwardAPIVolumeFile"), - }, - }, - }, - }, - }, - "defaultMode": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.DownwardAPIVolumeFile"}, - } -} - -func schema_k8sio_api_core_v1_EmptyDirVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents an empty directory for a pod. Empty directory volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "medium": { - SchemaProps: spec.SchemaProps{ - Description: "What type of storage medium should back this directory. The default is \"\" which means to use the node's default medium. Must be an empty string (default) or Memory. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir", - Type: []string{"string"}, - Format: "", - }, - }, - "sizeLimit": { - SchemaProps: spec.SchemaProps{ - Description: "Total amount of local storage required for this EmptyDir volume. The size limit is also applicable for memory medium. The maximum usage on memory medium EmptyDir would be the minimum value between the SizeLimit specified here and the sum of memory limits of all containers in a pod. The default is nil which means that the limit is undefined. More info: http://kubernetes.io/docs/user-guide/volumes#emptydir", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_core_v1_EndpointAddress(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EndpointAddress is a tuple that describes single IP address.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ip": { - SchemaProps: spec.SchemaProps{ - Description: "The IP of this endpoint. May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16), or link-local multicast ((224.0.0.0/24). IPv6 is also accepted but not fully supported on all platforms. Also, certain kubernetes components, like kube-proxy, are not IPv6 ready.", - Type: []string{"string"}, - Format: "", - }, - }, - "hostname": { - SchemaProps: spec.SchemaProps{ - Description: "The Hostname of this endpoint", - Type: []string{"string"}, - Format: "", - }, - }, - "nodeName": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node.", - Type: []string{"string"}, - Format: "", - }, - }, - "targetRef": { - SchemaProps: spec.SchemaProps{ - Description: "Reference to object providing the endpoint.", - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - }, - Required: []string{"ip"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ObjectReference"}, - } -} - -func schema_k8sio_api_core_v1_EndpointPort(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EndpointPort is a tuple that describes a single port.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "The name of this port (corresponds to ServicePort.Name). Must be a DNS_LABEL. Optional only if one port is defined.", - Type: []string{"string"}, - Format: "", - }, - }, - "port": { - SchemaProps: spec.SchemaProps{ - Description: "The port number of the endpoint.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "protocol": { - SchemaProps: spec.SchemaProps{ - Description: "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"port"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_EndpointSubset(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EndpointSubset is a group of addresses with a common set of ports. The expanded set of endpoints is the Cartesian product of Addresses x Ports. For example, given:\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n }\nThe resulting set of endpoints can be viewed as:\n a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],\n b: [ 10.10.1.1:309, 10.10.2.2:309 ]", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "addresses": { - SchemaProps: spec.SchemaProps{ - Description: "IP addresses which offer the related ports that are marked as ready. These endpoints should be considered safe for load balancers and clients to utilize.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.EndpointAddress"), - }, - }, - }, - }, - }, - "notReadyAddresses": { - SchemaProps: spec.SchemaProps{ - Description: "IP addresses which offer the related ports but are not currently marked as ready because they have not yet finished starting, have recently failed a readiness check, or have recently failed a liveness check.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.EndpointAddress"), - }, - }, - }, - }, - }, - "ports": { - SchemaProps: spec.SchemaProps{ - Description: "Port numbers available on the related IP addresses.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.EndpointPort"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.EndpointAddress", "k8s.io/api/core/v1.EndpointPort"}, - } -} - -func schema_k8sio_api_core_v1_Endpoints(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Endpoints is a collection of endpoints that implement the actual service. Example:\n Name: \"mysvc\",\n Subsets: [\n {\n Addresses: [{\"ip\": \"10.10.1.1\"}, {\"ip\": \"10.10.2.2\"}],\n Ports: [{\"name\": \"a\", \"port\": 8675}, {\"name\": \"b\", \"port\": 309}]\n },\n {\n Addresses: [{\"ip\": \"10.10.3.3\"}],\n Ports: [{\"name\": \"a\", \"port\": 93}, {\"name\": \"b\", \"port\": 76}]\n },\n ]", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "subsets": { - SchemaProps: spec.SchemaProps{ - Description: "The set of all endpoints is the union of all subsets. Addresses are placed into subsets according to the IPs they share. A single address with multiple ports, some of which are ready and some of which are not (because they come from different containers) will result in the address being displayed in different subsets for the different ports. No address will appear in both Addresses and NotReadyAddresses in the same subset. Sets of addresses and ports that comprise a service.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.EndpointSubset"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.EndpointSubset", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_EndpointsList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EndpointsList is a list of endpoints.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of endpoints.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Endpoints"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.Endpoints", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_EnvFromSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EnvFromSource represents the source of a set of ConfigMaps", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "prefix": { - SchemaProps: spec.SchemaProps{ - Description: "An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.", - Type: []string{"string"}, - Format: "", - }, - }, - "configMapRef": { - SchemaProps: spec.SchemaProps{ - Description: "The ConfigMap to select from", - Ref: ref("k8s.io/api/core/v1.ConfigMapEnvSource"), - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "The Secret to select from", - Ref: ref("k8s.io/api/core/v1.SecretEnvSource"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ConfigMapEnvSource", "k8s.io/api/core/v1.SecretEnvSource"}, - } -} - -func schema_k8sio_api_core_v1_EnvVar(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EnvVar represents an environment variable present in a Container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the environment variable. Must be a C_IDENTIFIER.", - Type: []string{"string"}, - Format: "", - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to \"\".", - Type: []string{"string"}, - Format: "", - }, - }, - "valueFrom": { - SchemaProps: spec.SchemaProps{ - Description: "Source for the environment variable's value. Cannot be used if value is not empty.", - Ref: ref("k8s.io/api/core/v1.EnvVarSource"), - }, - }, - }, - Required: []string{"name"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.EnvVarSource"}, - } -} - -func schema_k8sio_api_core_v1_EnvVarSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EnvVarSource represents a source for the value of an EnvVar.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "fieldRef": { - SchemaProps: spec.SchemaProps{ - Description: "Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.", - Ref: ref("k8s.io/api/core/v1.ObjectFieldSelector"), - }, - }, - "resourceFieldRef": { - SchemaProps: spec.SchemaProps{ - Description: "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.", - Ref: ref("k8s.io/api/core/v1.ResourceFieldSelector"), - }, - }, - "configMapKeyRef": { - SchemaProps: spec.SchemaProps{ - Description: "Selects a key of a ConfigMap.", - Ref: ref("k8s.io/api/core/v1.ConfigMapKeySelector"), - }, - }, - "secretKeyRef": { - SchemaProps: spec.SchemaProps{ - Description: "Selects a key of a secret in the pod's namespace", - Ref: ref("k8s.io/api/core/v1.SecretKeySelector"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ConfigMapKeySelector", "k8s.io/api/core/v1.ObjectFieldSelector", "k8s.io/api/core/v1.ResourceFieldSelector", "k8s.io/api/core/v1.SecretKeySelector"}, - } -} - -func schema_k8sio_api_core_v1_Event(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Event is a report of an event somewhere in the cluster.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "involvedObject": { - SchemaProps: spec.SchemaProps{ - Description: "The object that this event is about.", - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "This should be a short, machine understandable string that gives the reason for the transition into the object's current status.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human-readable description of the status of this operation.", - Type: []string{"string"}, - Format: "", - }, - }, - "source": { - SchemaProps: spec.SchemaProps{ - Description: "The component reporting this event. Should be a short machine understandable string.", - Ref: ref("k8s.io/api/core/v1.EventSource"), - }, - }, - "firstTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "lastTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "The time at which the most recent occurrence of this event was recorded.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "count": { - SchemaProps: spec.SchemaProps{ - Description: "The number of times this event has occurred.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of this event (Normal, Warning), new types could be added in the future", - Type: []string{"string"}, - Format: "", - }, - }, - "eventTime": { - SchemaProps: spec.SchemaProps{ - Description: "Time when this Event was first observed.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "series": { - SchemaProps: spec.SchemaProps{ - Description: "Data about the Event series this event represents or nil if it's a singleton Event.", - Ref: ref("k8s.io/api/core/v1.EventSeries"), - }, - }, - "action": { - SchemaProps: spec.SchemaProps{ - Description: "What action was taken/failed regarding to the Regarding object.", - Type: []string{"string"}, - Format: "", - }, - }, - "related": { - SchemaProps: spec.SchemaProps{ - Description: "Optional secondary object for more complex actions.", - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - "reportingComponent": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.", - Type: []string{"string"}, - Format: "", - }, - }, - "reportingInstance": { - SchemaProps: spec.SchemaProps{ - Description: "ID of the controller instance, e.g. `kubelet-xyzf`.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"metadata", "involvedObject"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.EventSeries", "k8s.io/api/core/v1.EventSource", "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_core_v1_EventList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EventList is a list of events.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of events", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Event"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.Event", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_EventSeries(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "count": { - SchemaProps: spec.SchemaProps{ - Description: "Number of occurrences in this series up to the last heartbeat time", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "lastObservedTime": { - SchemaProps: spec.SchemaProps{ - Description: "Time of the last occurrence observed", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "state": { - SchemaProps: spec.SchemaProps{ - Description: "State of this Series: Ongoing or Finished", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"}, - } -} - -func schema_k8sio_api_core_v1_EventSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EventSource contains information for an event.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "component": { - SchemaProps: spec.SchemaProps{ - Description: "Component from which the event is generated.", - Type: []string{"string"}, - Format: "", - }, - }, - "host": { - SchemaProps: spec.SchemaProps{ - Description: "Node name on which the event is generated.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ExecAction(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExecAction describes a \"run in container\" action.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "command": { - SchemaProps: spec.SchemaProps{ - Description: "Command is the command line to execute inside the container, the working directory for the command is root ('/') in the container's filesystem. The command is simply exec'd, it is not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use a shell, you need to explicitly call out to that shell. Exit status of 0 is treated as live/healthy and non-zero is unhealthy.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_FCVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "targetWWNs": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: FC target worldwide names (WWNs)", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "lun": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: FC target lun number", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "wwids": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: FC volume world wide identifiers (wwids) Either wwids or combination of targetWWNs and lun must be set, but not both simultaneously.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_FlexPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "FlexPersistentVolumeSource represents a generic persistent volume resource that is provisioned/attached using an exec based plugin.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "driver": { - SchemaProps: spec.SchemaProps{ - Description: "Driver is the name of the driver to use for this volume.", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.", - Type: []string{"string"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.", - Ref: ref("k8s.io/api/core/v1.SecretReference"), - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "options": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Extra command options if any.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"driver"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.SecretReference"}, - } -} - -func schema_k8sio_api_core_v1_FlexVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "driver": { - SchemaProps: spec.SchemaProps{ - Description: "Driver is the name of the driver to use for this volume.", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default filesystem depends on FlexVolume script.", - Type: []string{"string"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: SecretRef is reference to the secret object containing sensitive information to pass to the plugin scripts. This may be empty if no secret object is specified. If the secret object contains more than one secret, all secrets are passed to the plugin scripts.", - Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "options": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Extra command options if any.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"driver"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LocalObjectReference"}, - } -} - -func schema_k8sio_api_core_v1_FlockerVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "datasetName": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the dataset stored as metadata -> name on the dataset for Flocker should be considered as deprecated", - Type: []string{"string"}, - Format: "", - }, - }, - "datasetUUID": { - SchemaProps: spec.SchemaProps{ - Description: "UUID of the dataset. This is unique identifier of a Flocker dataset", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_GCEPersistentDiskVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Persistent Disk resource in Google Compute Engine.\n\nA GCE PD must exist before mounting to a container. The disk must also be in the same GCE project and zone as the kubelet. A GCE PD can only be mounted as read/write once or read-only many times. GCE PDs support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "pdName": { - SchemaProps: spec.SchemaProps{ - Description: "Unique name of the PD resource in GCE. Used to identify the disk in GCE. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - Type: []string{"string"}, - Format: "", - }, - }, - "partition": { - SchemaProps: spec.SchemaProps{ - Description: "The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as \"1\". Similarly, the volume partition for /dev/sda is \"0\" (or you can leave the property empty). More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"pdName"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_GitRepoVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a volume that is populated with the contents of a git repository. Git repo volumes do not support ownership management. Git repo volumes support SELinux relabeling.\n\nDEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "repository": { - SchemaProps: spec.SchemaProps{ - Description: "Repository URL", - Type: []string{"string"}, - Format: "", - }, - }, - "revision": { - SchemaProps: spec.SchemaProps{ - Description: "Commit hash for the specified revision.", - Type: []string{"string"}, - Format: "", - }, - }, - "directory": { - SchemaProps: spec.SchemaProps{ - Description: "Target directory name. Must not contain or start with '..'. If '.' is supplied, the volume directory will be the git repository. Otherwise, if specified, the volume will contain the git repository in the subdirectory with the given name.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"repository"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_GlusterfsPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "endpoints": { - SchemaProps: spec.SchemaProps{ - Description: "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - Type: []string{"string"}, - Format: "", - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - Type: []string{"boolean"}, - Format: "", - }, - }, - "endpointsNamespace": { - SchemaProps: spec.SchemaProps{ - Description: "EndpointsNamespace is the namespace that contains Glusterfs endpoint. If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"endpoints", "path"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_GlusterfsVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Glusterfs mount that lasts the lifetime of a pod. Glusterfs volumes do not support ownership management or SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "endpoints": { - SchemaProps: spec.SchemaProps{ - Description: "EndpointsName is the endpoint name that details Glusterfs topology. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - Type: []string{"string"}, - Format: "", - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path is the Glusterfs volume path. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md#create-a-pod", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"endpoints", "path"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_HTTPGetAction(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HTTPGetAction describes an action based on HTTP Get requests.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path to access on the HTTP server.", - Type: []string{"string"}, - Format: "", - }, - }, - "port": { - SchemaProps: spec.SchemaProps{ - Description: "Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - "host": { - SchemaProps: spec.SchemaProps{ - Description: "Host name to connect to, defaults to the pod IP. You probably want to set \"Host\" in httpHeaders instead.", - Type: []string{"string"}, - Format: "", - }, - }, - "scheme": { - SchemaProps: spec.SchemaProps{ - Description: "Scheme to use for connecting to the host. Defaults to HTTP.", - Type: []string{"string"}, - Format: "", - }, - }, - "httpHeaders": { - SchemaProps: spec.SchemaProps{ - Description: "Custom headers to set in the request. HTTP allows repeated headers.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.HTTPHeader"), - }, - }, - }, - }, - }, - }, - Required: []string{"port"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.HTTPHeader", "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_core_v1_HTTPHeader(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HTTPHeader describes a custom header to be used in HTTP probes", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "The header field name", - Type: []string{"string"}, - Format: "", - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "The header field value", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name", "value"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_Handler(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Handler defines a specific action that should be taken", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "exec": { - SchemaProps: spec.SchemaProps{ - Description: "One and only one of the following should be specified. Exec specifies the action to take.", - Ref: ref("k8s.io/api/core/v1.ExecAction"), - }, - }, - "httpGet": { - SchemaProps: spec.SchemaProps{ - Description: "HTTPGet specifies the http request to perform.", - Ref: ref("k8s.io/api/core/v1.HTTPGetAction"), - }, - }, - "tcpSocket": { - SchemaProps: spec.SchemaProps{ - Description: "TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported", - Ref: ref("k8s.io/api/core/v1.TCPSocketAction"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ExecAction", "k8s.io/api/core/v1.HTTPGetAction", "k8s.io/api/core/v1.TCPSocketAction"}, - } -} - -func schema_k8sio_api_core_v1_HostAlias(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod's hosts file.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ip": { - SchemaProps: spec.SchemaProps{ - Description: "IP address of the host file entry.", - Type: []string{"string"}, - Format: "", - }, - }, - "hostnames": { - SchemaProps: spec.SchemaProps{ - Description: "Hostnames for the above IP address.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_HostPathVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path of the directory on the host. If the path is a symlink, it will follow the link to the real path. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - Type: []string{"string"}, - Format: "", - }, - }, - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type for HostPath Volume Defaults to \"\" More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"path"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ISCSIPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ISCSIPersistentVolumeSource represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "targetPortal": { - SchemaProps: spec.SchemaProps{ - Description: "iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", - Type: []string{"string"}, - Format: "", - }, - }, - "iqn": { - SchemaProps: spec.SchemaProps{ - Description: "Target iSCSI Qualified Name.", - Type: []string{"string"}, - Format: "", - }, - }, - "lun": { - SchemaProps: spec.SchemaProps{ - Description: "iSCSI Target Lun number.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "iscsiInterface": { - SchemaProps: spec.SchemaProps{ - Description: "iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "portals": { - SchemaProps: spec.SchemaProps{ - Description: "iSCSI Target Portal List. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "chapAuthDiscovery": { - SchemaProps: spec.SchemaProps{ - Description: "whether support iSCSI Discovery CHAP authentication", - Type: []string{"boolean"}, - Format: "", - }, - }, - "chapAuthSession": { - SchemaProps: spec.SchemaProps{ - Description: "whether support iSCSI Session CHAP authentication", - Type: []string{"boolean"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "CHAP Secret for iSCSI target and initiator authentication", - Ref: ref("k8s.io/api/core/v1.SecretReference"), - }, - }, - "initiatorName": { - SchemaProps: spec.SchemaProps{ - Description: "Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"targetPortal", "iqn", "lun"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.SecretReference"}, - } -} - -func schema_k8sio_api_core_v1_ISCSIVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents an ISCSI disk. ISCSI volumes can only be mounted as read/write once. ISCSI volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "targetPortal": { - SchemaProps: spec.SchemaProps{ - Description: "iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", - Type: []string{"string"}, - Format: "", - }, - }, - "iqn": { - SchemaProps: spec.SchemaProps{ - Description: "Target iSCSI Qualified Name.", - Type: []string{"string"}, - Format: "", - }, - }, - "lun": { - SchemaProps: spec.SchemaProps{ - Description: "iSCSI Target Lun number.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "iscsiInterface": { - SchemaProps: spec.SchemaProps{ - Description: "iSCSI Interface Name that uses an iSCSI transport. Defaults to 'default' (tcp).", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#iscsi", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "portals": { - SchemaProps: spec.SchemaProps{ - Description: "iSCSI Target Portal List. The portal is either an IP or ip_addr:port if the port is other than default (typically TCP ports 860 and 3260).", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "chapAuthDiscovery": { - SchemaProps: spec.SchemaProps{ - Description: "whether support iSCSI Discovery CHAP authentication", - Type: []string{"boolean"}, - Format: "", - }, - }, - "chapAuthSession": { - SchemaProps: spec.SchemaProps{ - Description: "whether support iSCSI Session CHAP authentication", - Type: []string{"boolean"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "CHAP Secret for iSCSI target and initiator authentication", - Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), - }, - }, - "initiatorName": { - SchemaProps: spec.SchemaProps{ - Description: "Custom iSCSI Initiator Name. If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface : will be created for the connection.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"targetPortal", "iqn", "lun"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LocalObjectReference"}, - } -} - -func schema_k8sio_api_core_v1_KeyToPath(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Maps a string key to a path within a volume.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "key": { - SchemaProps: spec.SchemaProps{ - Description: "The key to project.", - Type: []string{"string"}, - Format: "", - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.", - Type: []string{"string"}, - Format: "", - }, - }, - "mode": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"key", "path"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_Lifecycle(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Lifecycle describes actions that the management system should take in response to container lifecycle events. For the PostStart and PreStop lifecycle handlers, management of the container blocks until the action is complete, unless the container process fails, in which case the handler is aborted.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "postStart": { - SchemaProps: spec.SchemaProps{ - Description: "PostStart is called immediately after a container is created. If the handler fails, the container is terminated and restarted according to its restart policy. Other management of the container blocks until the hook completes. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks", - Ref: ref("k8s.io/api/core/v1.Handler"), - }, - }, - "preStop": { - SchemaProps: spec.SchemaProps{ - Description: "PreStop is called immediately before a container is terminated due to an API request or management event such as liveness probe failure, preemption, resource contention, etc. The handler is not called if the container crashes or exits. The reason for termination is passed to the handler. The Pod's termination grace period countdown begins before the PreStop hooked is executed. Regardless of the outcome of the handler, the container will eventually terminate within the Pod's termination grace period. Other management of the container blocks until the hook completes or until the termination grace period is reached. More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks", - Ref: ref("k8s.io/api/core/v1.Handler"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.Handler"}, - } -} - -func schema_k8sio_api_core_v1_LimitRange(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LimitRange sets resource usage limits for each kind of resource in a Namespace.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the limits enforced. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.LimitRangeSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LimitRangeSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_LimitRangeItem(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LimitRangeItem defines a min/max usage limit for any resource that matches on kind.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of resource that this limit applies to.", - Type: []string{"string"}, - Format: "", - }, - }, - "max": { - SchemaProps: spec.SchemaProps{ - Description: "Max usage constraints on this kind by resource name.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - "min": { - SchemaProps: spec.SchemaProps{ - Description: "Min usage constraints on this kind by resource name.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - "default": { - SchemaProps: spec.SchemaProps{ - Description: "Default resource requirement limit value by resource name if resource limit is omitted.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - "defaultRequest": { - SchemaProps: spec.SchemaProps{ - Description: "DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - "maxLimitRequestRatio": { - SchemaProps: spec.SchemaProps{ - Description: "MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_core_v1_LimitRangeList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LimitRangeList is a list of LimitRange items.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.LimitRange"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LimitRange", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_LimitRangeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LimitRangeSpec defines a min/max usage limit for resources that match on kind.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "limits": { - SchemaProps: spec.SchemaProps{ - Description: "Limits is the list of LimitRangeItem objects that are enforced.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.LimitRangeItem"), - }, - }, - }, - }, - }, - }, - Required: []string{"limits"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LimitRangeItem"}, - } -} - -func schema_k8sio_api_core_v1_List(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "List holds a list of objects, which may not be known by the server.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of objects", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, - } -} - -func schema_k8sio_api_core_v1_LoadBalancerIngress(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LoadBalancerIngress represents the status of a load-balancer ingress point: traffic intended for the service should be sent to an ingress point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ip": { - SchemaProps: spec.SchemaProps{ - Description: "IP is set for load-balancer ingress points that are IP based (typically GCE or OpenStack load-balancers)", - Type: []string{"string"}, - Format: "", - }, - }, - "hostname": { - SchemaProps: spec.SchemaProps{ - Description: "Hostname is set for load-balancer ingress points that are DNS based (typically AWS load-balancers)", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_LoadBalancerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LoadBalancerStatus represents the status of a load-balancer.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ingress": { - SchemaProps: spec.SchemaProps{ - Description: "Ingress is a list containing ingress points for the load-balancer. Traffic intended for the service should be sent to these ingress points.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.LoadBalancerIngress"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LoadBalancerIngress"}, - } -} - -func schema_k8sio_api_core_v1_LocalObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_LocalVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Local represents directly-attached storage with node affinity (Beta feature)", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "path": { - SchemaProps: spec.SchemaProps{ - Description: "The full path to the volume on the node. It can be either a directory or block device (disk, partition, ...).", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. It applies only when the Path is a block device. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". The default value is to auto-select a fileystem if unspecified.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"path"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_NFSVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "server": { - SchemaProps: spec.SchemaProps{ - Description: "Server is the hostname or IP address of the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - Type: []string{"string"}, - Format: "", - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path that is exported by the NFS server. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"server", "path"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_Namespace(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Namespace provides a scope for Names. Use of multiple namespaces is optional.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.NamespaceSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.NamespaceStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.NamespaceSpec", "k8s.io/api/core/v1.NamespaceStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_NamespaceList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NamespaceList is a list of Namespaces.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Namespace"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.Namespace", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_NamespaceSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NamespaceSpec describes the attributes on a Namespace.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "finalizers": { - SchemaProps: spec.SchemaProps{ - Description: "Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_NamespaceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NamespaceStatus is information about the current status of a Namespace.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "phase": { - SchemaProps: spec.SchemaProps{ - Description: "Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_Node(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Node is a worker node in Kubernetes. Each node will have a unique identifier in the cache (i.e. in etcd).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the behavior of a node. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.NodeSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Most recently observed status of the node. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.NodeStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.NodeSpec", "k8s.io/api/core/v1.NodeStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_NodeAddress(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeAddress contains information for the node's address.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Node address type, one of Hostname, ExternalIP or InternalIP.", - Type: []string{"string"}, - Format: "", - }, - }, - "address": { - SchemaProps: spec.SchemaProps{ - Description: "The node address.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "address"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_NodeAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Node affinity is a group of node affinity scheduling rules.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "requiredDuringSchedulingIgnoredDuringExecution": { - SchemaProps: spec.SchemaProps{ - Description: "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.", - Ref: ref("k8s.io/api/core/v1.NodeSelector"), - }, - }, - "preferredDuringSchedulingIgnoredDuringExecution": { - SchemaProps: spec.SchemaProps{ - Description: "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PreferredSchedulingTerm"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.NodeSelector", "k8s.io/api/core/v1.PreferredSchedulingTerm"}, - } -} - -func schema_k8sio_api_core_v1_NodeCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeCondition contains condition information for a node.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of node condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastHeartbeatTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time we got an update on a given condition.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transit from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "(brief) reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Human readable message indicating details about last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_core_v1_NodeConfigSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "configMap": { - SchemaProps: spec.SchemaProps{ - Description: "ConfigMap is a reference to a Node's ConfigMap", - Ref: ref("k8s.io/api/core/v1.ConfigMapNodeConfigSource"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ConfigMapNodeConfigSource"}, - } -} - -func schema_k8sio_api_core_v1_NodeConfigStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "assigned": { - SchemaProps: spec.SchemaProps{ - Description: "Assigned reports the checkpointed config the node will try to use. When Node.Spec.ConfigSource is updated, the node checkpoints the associated config payload to local disk, along with a record indicating intended config. The node refers to this record to choose its config checkpoint, and reports this record in Assigned. Assigned only updates in the status after the record has been checkpointed to disk. When the Kubelet is restarted, it tries to make the Assigned config the Active config by loading and validating the checkpointed payload identified by Assigned.", - Ref: ref("k8s.io/api/core/v1.NodeConfigSource"), - }, - }, - "active": { - SchemaProps: spec.SchemaProps{ - Description: "Active reports the checkpointed config the node is actively using. Active will represent either the current version of the Assigned config, or the current LastKnownGood config, depending on whether attempting to use the Assigned config results in an error.", - Ref: ref("k8s.io/api/core/v1.NodeConfigSource"), - }, - }, - "lastKnownGood": { - SchemaProps: spec.SchemaProps{ - Description: "LastKnownGood reports the checkpointed config the node will fall back to when it encounters an error attempting to use the Assigned config. The Assigned config becomes the LastKnownGood config when the node determines that the Assigned config is stable and correct. This is currently implemented as a 10-minute soak period starting when the local record of Assigned config is updated. If the Assigned config is Active at the end of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil, because the local default config is always assumed good. You should not make assumptions about the node's method of determining config stability and correctness, as this may change or become configurable in the future.", - Ref: ref("k8s.io/api/core/v1.NodeConfigSource"), - }, - }, - "error": { - SchemaProps: spec.SchemaProps{ - Description: "Error describes any problems reconciling the Spec.ConfigSource to the Active config. Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting to load or validate the Assigned config, etc. Errors may occur at different points while syncing config. Earlier errors (e.g. download or checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error by fixing the config assigned in Spec.ConfigSource. You can find additional information for debugging by searching the error message in the Kubelet log. Error is a human-readable description of the error state; machines can check whether or not Error is empty, but should not rely on the stability of the Error text across Kubelet versions.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.NodeConfigSource"}, - } -} - -func schema_k8sio_api_core_v1_NodeDaemonEndpoints(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeDaemonEndpoints lists ports opened by daemons running on the Node.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kubeletEndpoint": { - SchemaProps: spec.SchemaProps{ - Description: "Endpoint on which Kubelet is listening.", - Ref: ref("k8s.io/api/core/v1.DaemonEndpoint"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.DaemonEndpoint"}, - } -} - -func schema_k8sio_api_core_v1_NodeList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeList is the whole list of all Nodes which have been registered with master.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of nodes", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Node"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.Node", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_NodeProxyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeProxyOptions is the query options to a Node's proxy call.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path is the URL path to use for the current proxy request to node.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_NodeResources(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeResources is an object for conveying resource information about a node. see http://releases.k8s.io/HEAD/docs/design/resources.md for more details.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "Capacity": { - SchemaProps: spec.SchemaProps{ - Description: "Capacity represents the available resources of a node", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - }, - Required: []string{"Capacity"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_core_v1_NodeSelector(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "nodeSelectorTerms": { - SchemaProps: spec.SchemaProps{ - Description: "Required. A list of node selector terms. The terms are ORed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.NodeSelectorTerm"), - }, - }, - }, - }, - }, - }, - Required: []string{"nodeSelectorTerms"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.NodeSelectorTerm"}, - } -} - -func schema_k8sio_api_core_v1_NodeSelectorRequirement(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "key": { - SchemaProps: spec.SchemaProps{ - Description: "The label key that the selector applies to.", - Type: []string{"string"}, - Format: "", - }, - }, - "operator": { - SchemaProps: spec.SchemaProps{ - Description: "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.", - Type: []string{"string"}, - Format: "", - }, - }, - "values": { - SchemaProps: spec.SchemaProps{ - Description: "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"key", "operator"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_NodeSelectorTerm(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "matchExpressions": { - SchemaProps: spec.SchemaProps{ - Description: "A list of node selector requirements by node's labels.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.NodeSelectorRequirement"), - }, - }, - }, - }, - }, - "matchFields": { - SchemaProps: spec.SchemaProps{ - Description: "A list of node selector requirements by node's fields.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.NodeSelectorRequirement"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.NodeSelectorRequirement"}, - } -} - -func schema_k8sio_api_core_v1_NodeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeSpec describes the attributes that a node is created with.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "podCIDR": { - SchemaProps: spec.SchemaProps{ - Description: "PodCIDR represents the pod IP range assigned to the node.", - Type: []string{"string"}, - Format: "", - }, - }, - "providerID": { - SchemaProps: spec.SchemaProps{ - Description: "ID of the node assigned by the cloud provider in the format: ://", - Type: []string{"string"}, - Format: "", - }, - }, - "unschedulable": { - SchemaProps: spec.SchemaProps{ - Description: "Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration", - Type: []string{"boolean"}, - Format: "", - }, - }, - "taints": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, the node's taints.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Taint"), - }, - }, - }, - }, - }, - "configSource": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, the source to get node configuration from The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field", - Ref: ref("k8s.io/api/core/v1.NodeConfigSource"), - }, - }, - "externalID": { - SchemaProps: spec.SchemaProps{ - Description: "Deprecated. Not all kubelets will set this field. Remove field after 1.13. see: https://issues.k8s.io/61966", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.NodeConfigSource", "k8s.io/api/core/v1.Taint"}, - } -} - -func schema_k8sio_api_core_v1_NodeStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeStatus is information about the current status of a node.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "capacity": { - SchemaProps: spec.SchemaProps{ - Description: "Capacity represents the total resources of a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - "allocatable": { - SchemaProps: spec.SchemaProps{ - Description: "Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - "phase": { - SchemaProps: spec.SchemaProps{ - Description: "NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.", - Type: []string{"string"}, - Format: "", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.NodeCondition"), - }, - }, - }, - }, - }, - "addresses": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses Note: This field is declared as mergeable, but the merge key is not sufficiently unique, which can cause data corruption when it is merged. Callers should instead use a full-replacement patch. See http://pr.k8s.io/79391 for an example.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.NodeAddress"), - }, - }, - }, - }, - }, - "daemonEndpoints": { - SchemaProps: spec.SchemaProps{ - Description: "Endpoints of daemons running on the Node.", - Ref: ref("k8s.io/api/core/v1.NodeDaemonEndpoints"), - }, - }, - "nodeInfo": { - SchemaProps: spec.SchemaProps{ - Description: "Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info", - Ref: ref("k8s.io/api/core/v1.NodeSystemInfo"), - }, - }, - "images": { - SchemaProps: spec.SchemaProps{ - Description: "List of container images on this node", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ContainerImage"), - }, - }, - }, - }, - }, - "volumesInUse": { - SchemaProps: spec.SchemaProps{ - Description: "List of attachable volumes in use (mounted) by the node.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "volumesAttached": { - SchemaProps: spec.SchemaProps{ - Description: "List of volumes that are attached to the node.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.AttachedVolume"), - }, - }, - }, - }, - }, - "config": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the config assigned to the node via the dynamic Kubelet config feature.", - Ref: ref("k8s.io/api/core/v1.NodeConfigStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.AttachedVolume", "k8s.io/api/core/v1.ContainerImage", "k8s.io/api/core/v1.NodeAddress", "k8s.io/api/core/v1.NodeCondition", "k8s.io/api/core/v1.NodeConfigStatus", "k8s.io/api/core/v1.NodeDaemonEndpoints", "k8s.io/api/core/v1.NodeSystemInfo", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_core_v1_NodeSystemInfo(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeSystemInfo is a set of ids/uuids to uniquely identify the node.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "machineID": { - SchemaProps: spec.SchemaProps{ - Description: "MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html", - Type: []string{"string"}, - Format: "", - }, - }, - "systemUUID": { - SchemaProps: spec.SchemaProps{ - Description: "SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html", - Type: []string{"string"}, - Format: "", - }, - }, - "bootID": { - SchemaProps: spec.SchemaProps{ - Description: "Boot ID reported by the node.", - Type: []string{"string"}, - Format: "", - }, - }, - "kernelVersion": { - SchemaProps: spec.SchemaProps{ - Description: "Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).", - Type: []string{"string"}, - Format: "", - }, - }, - "osImage": { - SchemaProps: spec.SchemaProps{ - Description: "OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).", - Type: []string{"string"}, - Format: "", - }, - }, - "containerRuntimeVersion": { - SchemaProps: spec.SchemaProps{ - Description: "ContainerRuntime Version reported by the node through runtime remote API (e.g. docker://1.5.0).", - Type: []string{"string"}, - Format: "", - }, - }, - "kubeletVersion": { - SchemaProps: spec.SchemaProps{ - Description: "Kubelet Version reported by the node.", - Type: []string{"string"}, - Format: "", - }, - }, - "kubeProxyVersion": { - SchemaProps: spec.SchemaProps{ - Description: "KubeProxy Version reported by the node.", - Type: []string{"string"}, - Format: "", - }, - }, - "operatingSystem": { - SchemaProps: spec.SchemaProps{ - Description: "The Operating System reported by the node", - Type: []string{"string"}, - Format: "", - }, - }, - "architecture": { - SchemaProps: spec.SchemaProps{ - Description: "The Architecture reported by the node", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"machineID", "systemUUID", "bootID", "kernelVersion", "osImage", "containerRuntimeVersion", "kubeletVersion", "kubeProxyVersion", "operatingSystem", "architecture"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ObjectFieldSelector(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectFieldSelector selects an APIVersioned field of an object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".", - Type: []string{"string"}, - Format: "", - }, - }, - "fieldPath": { - SchemaProps: spec.SchemaProps{ - Description: "Path of the field to select in the specified API version.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"fieldPath"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectReference contains enough information to let you inspect or modify the referred object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "API version of the referent.", - Type: []string{"string"}, - Format: "", - }, - }, - "resourceVersion": { - SchemaProps: spec.SchemaProps{ - Description: "Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", - Type: []string{"string"}, - Format: "", - }, - }, - "fieldPath": { - SchemaProps: spec.SchemaProps{ - Description: "If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: \"spec.containers{name}\" (where \"name\" refers to the name of the container that triggered the event) or if no container name is specified \"spec.containers[2]\" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_PersistentVolume(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolume (PV) is a storage resource provisioned by an administrator. It is analogous to a node. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines a specification of a persistent volume owned by the cluster. Provisioned by an administrator. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes", - Ref: ref("k8s.io/api/core/v1.PersistentVolumeSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status represents the current information/status for the persistent volume. Populated by the system. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes", - Ref: ref("k8s.io/api/core/v1.PersistentVolumeStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PersistentVolumeSpec", "k8s.io/api/core/v1.PersistentVolumeStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_PersistentVolumeClaim(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeClaim is a user's request for and claim to a persistent volume", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the desired characteristics of a volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status represents the current information/status of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PersistentVolumeClaimSpec", "k8s.io/api/core/v1.PersistentVolumeClaimStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_PersistentVolumeClaimCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeClaimCondition contails details about state of pvc", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "lastProbeTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time we probed the condition.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "Unique, this should be a short, machine understandable string that gives the reason for condition's last transition. If it reports \"ResizeStarted\" that means the underlying persistent volume is being resized.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Human-readable message indicating details about last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_core_v1_PersistentVolumeClaimList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeClaimList is a list of PersistentVolumeClaim items.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "A list of persistent volume claims. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaim"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PersistentVolumeClaim", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_PersistentVolumeClaimSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeClaimSpec describes the common attributes of storage devices and allows a Source for provider-specific attributes", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "accessModes": { - SchemaProps: spec.SchemaProps{ - Description: "AccessModes contains the desired access modes the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "A label query over volumes to consider for binding.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources represents the minimum resources the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources", - Ref: ref("k8s.io/api/core/v1.ResourceRequirements"), - }, - }, - "volumeName": { - SchemaProps: spec.SchemaProps{ - Description: "VolumeName is the binding reference to the PersistentVolume backing this claim.", - Type: []string{"string"}, - Format: "", - }, - }, - "storageClassName": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the StorageClass required by the claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1", - Type: []string{"string"}, - Format: "", - }, - }, - "volumeMode": { - SchemaProps: spec.SchemaProps{ - Description: "volumeMode defines what type of volume is required by the claim. Value of Filesystem is implied when not included in claim spec. This is a beta feature.", - Type: []string{"string"}, - Format: "", - }, - }, - "dataSource": { - SchemaProps: spec.SchemaProps{ - Description: "This field requires the VolumeSnapshotDataSource alpha feature gate to be enabled and currently VolumeSnapshot is the only supported data source. If the provisioner can support VolumeSnapshot data source, it will create a new volume and data will be restored to the volume at the same time. If the provisioner does not support VolumeSnapshot data source, volume will not be created and the failure will be reported as an event. In the future, we plan to support more data source types and the behavior of the provisioner may change.", - Ref: ref("k8s.io/api/core/v1.TypedLocalObjectReference"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ResourceRequirements", "k8s.io/api/core/v1.TypedLocalObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_core_v1_PersistentVolumeClaimStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeClaimStatus is the current status of a persistent volume claim.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "phase": { - SchemaProps: spec.SchemaProps{ - Description: "Phase represents the current phase of PersistentVolumeClaim.", - Type: []string{"string"}, - Format: "", - }, - }, - "accessModes": { - SchemaProps: spec.SchemaProps{ - Description: "AccessModes contains the actual access modes the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "capacity": { - SchemaProps: spec.SchemaProps{ - Description: "Represents the actual resources of the underlying volume.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Current Condition of persistent volume claim. If underlying persistent volume is being resized then the Condition will be set to 'ResizeStarted'.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimCondition"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PersistentVolumeClaimCondition", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_core_v1_PersistentVolumeClaimVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. This volume finds the bound PV and mounts that volume for the pod. A PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another type of volume that is owned by someone else (the system).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "claimName": { - SchemaProps: spec.SchemaProps{ - Description: "ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Will force the ReadOnly setting in VolumeMounts. Default false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"claimName"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_PersistentVolumeList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeList is a list of PersistentVolume items.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of persistent volumes. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PersistentVolume"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PersistentVolume", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_PersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeSource is similar to VolumeSource but meant for the administrator who creates PVs. Exactly one of its members must be set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "gcePersistentDisk": { - SchemaProps: spec.SchemaProps{ - Description: "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - Ref: ref("k8s.io/api/core/v1.GCEPersistentDiskVolumeSource"), - }, - }, - "awsElasticBlockStore": { - SchemaProps: spec.SchemaProps{ - Description: "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - Ref: ref("k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource"), - }, - }, - "hostPath": { - SchemaProps: spec.SchemaProps{ - Description: "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - Ref: ref("k8s.io/api/core/v1.HostPathVolumeSource"), - }, - }, - "glusterfs": { - SchemaProps: spec.SchemaProps{ - Description: "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md", - Ref: ref("k8s.io/api/core/v1.GlusterfsPersistentVolumeSource"), - }, - }, - "nfs": { - SchemaProps: spec.SchemaProps{ - Description: "NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - Ref: ref("k8s.io/api/core/v1.NFSVolumeSource"), - }, - }, - "rbd": { - SchemaProps: spec.SchemaProps{ - Description: "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md", - Ref: ref("k8s.io/api/core/v1.RBDPersistentVolumeSource"), - }, - }, - "iscsi": { - SchemaProps: spec.SchemaProps{ - Description: "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.", - Ref: ref("k8s.io/api/core/v1.ISCSIPersistentVolumeSource"), - }, - }, - "cinder": { - SchemaProps: spec.SchemaProps{ - Description: "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - Ref: ref("k8s.io/api/core/v1.CinderPersistentVolumeSource"), - }, - }, - "cephfs": { - SchemaProps: spec.SchemaProps{ - Description: "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", - Ref: ref("k8s.io/api/core/v1.CephFSPersistentVolumeSource"), - }, - }, - "fc": { - SchemaProps: spec.SchemaProps{ - Description: "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", - Ref: ref("k8s.io/api/core/v1.FCVolumeSource"), - }, - }, - "flocker": { - SchemaProps: spec.SchemaProps{ - Description: "Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running", - Ref: ref("k8s.io/api/core/v1.FlockerVolumeSource"), - }, - }, - "flexVolume": { - SchemaProps: spec.SchemaProps{ - Description: "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", - Ref: ref("k8s.io/api/core/v1.FlexPersistentVolumeSource"), - }, - }, - "azureFile": { - SchemaProps: spec.SchemaProps{ - Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - Ref: ref("k8s.io/api/core/v1.AzureFilePersistentVolumeSource"), - }, - }, - "vsphereVolume": { - SchemaProps: spec.SchemaProps{ - Description: "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"), - }, - }, - "quobyte": { - SchemaProps: spec.SchemaProps{ - Description: "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", - Ref: ref("k8s.io/api/core/v1.QuobyteVolumeSource"), - }, - }, - "azureDisk": { - SchemaProps: spec.SchemaProps{ - Description: "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - Ref: ref("k8s.io/api/core/v1.AzureDiskVolumeSource"), - }, - }, - "photonPersistentDisk": { - SchemaProps: spec.SchemaProps{ - Description: "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource"), - }, - }, - "portworxVolume": { - SchemaProps: spec.SchemaProps{ - Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.PortworxVolumeSource"), - }, - }, - "scaleIO": { - SchemaProps: spec.SchemaProps{ - Description: "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", - Ref: ref("k8s.io/api/core/v1.ScaleIOPersistentVolumeSource"), - }, - }, - "local": { - SchemaProps: spec.SchemaProps{ - Description: "Local represents directly-attached storage with node affinity", - Ref: ref("k8s.io/api/core/v1.LocalVolumeSource"), - }, - }, - "storageos": { - SchemaProps: spec.SchemaProps{ - Description: "StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md", - Ref: ref("k8s.io/api/core/v1.StorageOSPersistentVolumeSource"), - }, - }, - "csi": { - SchemaProps: spec.SchemaProps{ - Description: "CSI represents storage that is handled by an external CSI driver (Beta feature).", - Ref: ref("k8s.io/api/core/v1.CSIPersistentVolumeSource"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/api/core/v1.AzureDiskVolumeSource", "k8s.io/api/core/v1.AzureFilePersistentVolumeSource", "k8s.io/api/core/v1.CSIPersistentVolumeSource", "k8s.io/api/core/v1.CephFSPersistentVolumeSource", "k8s.io/api/core/v1.CinderPersistentVolumeSource", "k8s.io/api/core/v1.FCVolumeSource", "k8s.io/api/core/v1.FlexPersistentVolumeSource", "k8s.io/api/core/v1.FlockerVolumeSource", "k8s.io/api/core/v1.GCEPersistentDiskVolumeSource", "k8s.io/api/core/v1.GlusterfsPersistentVolumeSource", "k8s.io/api/core/v1.HostPathVolumeSource", "k8s.io/api/core/v1.ISCSIPersistentVolumeSource", "k8s.io/api/core/v1.LocalVolumeSource", "k8s.io/api/core/v1.NFSVolumeSource", "k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource", "k8s.io/api/core/v1.PortworxVolumeSource", "k8s.io/api/core/v1.QuobyteVolumeSource", "k8s.io/api/core/v1.RBDPersistentVolumeSource", "k8s.io/api/core/v1.ScaleIOPersistentVolumeSource", "k8s.io/api/core/v1.StorageOSPersistentVolumeSource", "k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"}, - } -} - -func schema_k8sio_api_core_v1_PersistentVolumeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeSpec is the specification of a persistent volume.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "capacity": { - SchemaProps: spec.SchemaProps{ - Description: "A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - "gcePersistentDisk": { - SchemaProps: spec.SchemaProps{ - Description: "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - Ref: ref("k8s.io/api/core/v1.GCEPersistentDiskVolumeSource"), - }, - }, - "awsElasticBlockStore": { - SchemaProps: spec.SchemaProps{ - Description: "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - Ref: ref("k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource"), - }, - }, - "hostPath": { - SchemaProps: spec.SchemaProps{ - Description: "HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - Ref: ref("k8s.io/api/core/v1.HostPathVolumeSource"), - }, - }, - "glusterfs": { - SchemaProps: spec.SchemaProps{ - Description: "Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md", - Ref: ref("k8s.io/api/core/v1.GlusterfsPersistentVolumeSource"), - }, - }, - "nfs": { - SchemaProps: spec.SchemaProps{ - Description: "NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - Ref: ref("k8s.io/api/core/v1.NFSVolumeSource"), - }, - }, - "rbd": { - SchemaProps: spec.SchemaProps{ - Description: "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md", - Ref: ref("k8s.io/api/core/v1.RBDPersistentVolumeSource"), - }, - }, - "iscsi": { - SchemaProps: spec.SchemaProps{ - Description: "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.", - Ref: ref("k8s.io/api/core/v1.ISCSIPersistentVolumeSource"), - }, - }, - "cinder": { - SchemaProps: spec.SchemaProps{ - Description: "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - Ref: ref("k8s.io/api/core/v1.CinderPersistentVolumeSource"), - }, - }, - "cephfs": { - SchemaProps: spec.SchemaProps{ - Description: "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", - Ref: ref("k8s.io/api/core/v1.CephFSPersistentVolumeSource"), - }, - }, - "fc": { - SchemaProps: spec.SchemaProps{ - Description: "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", - Ref: ref("k8s.io/api/core/v1.FCVolumeSource"), - }, - }, - "flocker": { - SchemaProps: spec.SchemaProps{ - Description: "Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running", - Ref: ref("k8s.io/api/core/v1.FlockerVolumeSource"), - }, - }, - "flexVolume": { - SchemaProps: spec.SchemaProps{ - Description: "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", - Ref: ref("k8s.io/api/core/v1.FlexPersistentVolumeSource"), - }, - }, - "azureFile": { - SchemaProps: spec.SchemaProps{ - Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - Ref: ref("k8s.io/api/core/v1.AzureFilePersistentVolumeSource"), - }, - }, - "vsphereVolume": { - SchemaProps: spec.SchemaProps{ - Description: "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"), - }, - }, - "quobyte": { - SchemaProps: spec.SchemaProps{ - Description: "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", - Ref: ref("k8s.io/api/core/v1.QuobyteVolumeSource"), - }, - }, - "azureDisk": { - SchemaProps: spec.SchemaProps{ - Description: "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - Ref: ref("k8s.io/api/core/v1.AzureDiskVolumeSource"), - }, - }, - "photonPersistentDisk": { - SchemaProps: spec.SchemaProps{ - Description: "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource"), - }, - }, - "portworxVolume": { - SchemaProps: spec.SchemaProps{ - Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.PortworxVolumeSource"), - }, - }, - "scaleIO": { - SchemaProps: spec.SchemaProps{ - Description: "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", - Ref: ref("k8s.io/api/core/v1.ScaleIOPersistentVolumeSource"), - }, - }, - "local": { - SchemaProps: spec.SchemaProps{ - Description: "Local represents directly-attached storage with node affinity", - Ref: ref("k8s.io/api/core/v1.LocalVolumeSource"), - }, - }, - "storageos": { - SchemaProps: spec.SchemaProps{ - Description: "StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md", - Ref: ref("k8s.io/api/core/v1.StorageOSPersistentVolumeSource"), - }, - }, - "csi": { - SchemaProps: spec.SchemaProps{ - Description: "CSI represents storage that is handled by an external CSI driver (Beta feature).", - Ref: ref("k8s.io/api/core/v1.CSIPersistentVolumeSource"), - }, - }, - "accessModes": { - SchemaProps: spec.SchemaProps{ - Description: "AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "claimRef": { - SchemaProps: spec.SchemaProps{ - Description: "ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding", - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - "persistentVolumeReclaimPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "What happens to a persistent volume when released from its claim. Valid options are Retain (default for manually created PersistentVolumes), Delete (default for dynamically provisioned PersistentVolumes), and Recycle (deprecated). Recycle must be supported by the volume plugin underlying this PersistentVolume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming", - Type: []string{"string"}, - Format: "", - }, - }, - "storageClassName": { - SchemaProps: spec.SchemaProps{ - Description: "Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.", - Type: []string{"string"}, - Format: "", - }, - }, - "mountOptions": { - SchemaProps: spec.SchemaProps{ - Description: "A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "volumeMode": { - SchemaProps: spec.SchemaProps{ - Description: "volumeMode defines if a volume is intended to be used with a formatted filesystem or to remain in raw block state. Value of Filesystem is implied when not included in spec. This is a beta feature.", - Type: []string{"string"}, - Format: "", - }, - }, - "nodeAffinity": { - SchemaProps: spec.SchemaProps{ - Description: "NodeAffinity defines constraints that limit what nodes this volume can be accessed from. This field influences the scheduling of pods that use this volume.", - Ref: ref("k8s.io/api/core/v1.VolumeNodeAffinity"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/api/core/v1.AzureDiskVolumeSource", "k8s.io/api/core/v1.AzureFilePersistentVolumeSource", "k8s.io/api/core/v1.CSIPersistentVolumeSource", "k8s.io/api/core/v1.CephFSPersistentVolumeSource", "k8s.io/api/core/v1.CinderPersistentVolumeSource", "k8s.io/api/core/v1.FCVolumeSource", "k8s.io/api/core/v1.FlexPersistentVolumeSource", "k8s.io/api/core/v1.FlockerVolumeSource", "k8s.io/api/core/v1.GCEPersistentDiskVolumeSource", "k8s.io/api/core/v1.GlusterfsPersistentVolumeSource", "k8s.io/api/core/v1.HostPathVolumeSource", "k8s.io/api/core/v1.ISCSIPersistentVolumeSource", "k8s.io/api/core/v1.LocalVolumeSource", "k8s.io/api/core/v1.NFSVolumeSource", "k8s.io/api/core/v1.ObjectReference", "k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource", "k8s.io/api/core/v1.PortworxVolumeSource", "k8s.io/api/core/v1.QuobyteVolumeSource", "k8s.io/api/core/v1.RBDPersistentVolumeSource", "k8s.io/api/core/v1.ScaleIOPersistentVolumeSource", "k8s.io/api/core/v1.StorageOSPersistentVolumeSource", "k8s.io/api/core/v1.VolumeNodeAffinity", "k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_core_v1_PersistentVolumeStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeStatus is the current status of a persistent volume.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "phase": { - SchemaProps: spec.SchemaProps{ - Description: "Phase indicates if a volume is available, bound to a claim, or released by a claim. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human-readable message indicating details about why the volume is in this state.", - Type: []string{"string"}, - Format: "", - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_PhotonPersistentDiskVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Photon Controller persistent disk resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "pdID": { - SchemaProps: spec.SchemaProps{ - Description: "ID that identifies Photon Controller persistent disk", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"pdID"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_Pod(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Pod is a collection of containers that can run on a host. This resource is created by clients and scheduled onto hosts.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.PodSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.PodStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodSpec", "k8s.io/api/core/v1.PodStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_PodAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Pod affinity is a group of inter pod affinity scheduling rules.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "requiredDuringSchedulingIgnoredDuringExecution": { - SchemaProps: spec.SchemaProps{ - Description: "If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PodAffinityTerm"), - }, - }, - }, - }, - }, - "preferredDuringSchedulingIgnoredDuringExecution": { - SchemaProps: spec.SchemaProps{ - Description: "The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.WeightedPodAffinityTerm"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodAffinityTerm", "k8s.io/api/core/v1.WeightedPodAffinityTerm"}, - } -} - -func schema_k8sio_api_core_v1_PodAffinityTerm(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key matches that of any node on which a pod of the set of pods is running", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "labelSelector": { - SchemaProps: spec.SchemaProps{ - Description: "A label query over a set of resources, in this case pods.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "namespaces": { - SchemaProps: spec.SchemaProps{ - Description: "namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "topologyKey": { - SchemaProps: spec.SchemaProps{ - Description: "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. Empty topologyKey is not allowed.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"topologyKey"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_core_v1_PodAntiAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Pod anti affinity is a group of inter pod anti affinity scheduling rules.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "requiredDuringSchedulingIgnoredDuringExecution": { - SchemaProps: spec.SchemaProps{ - Description: "If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PodAffinityTerm"), - }, - }, - }, - }, - }, - "preferredDuringSchedulingIgnoredDuringExecution": { - SchemaProps: spec.SchemaProps{ - Description: "The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding \"weight\" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.WeightedPodAffinityTerm"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodAffinityTerm", "k8s.io/api/core/v1.WeightedPodAffinityTerm"}, - } -} - -func schema_k8sio_api_core_v1_PodAttachOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodAttachOptions is the query options to a Pod's remote attach call.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "stdin": { - SchemaProps: spec.SchemaProps{ - Description: "Stdin if true, redirects the standard input stream of the pod for this call. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "stdout": { - SchemaProps: spec.SchemaProps{ - Description: "Stdout if true indicates that stdout is to be redirected for the attach call. Defaults to true.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "stderr": { - SchemaProps: spec.SchemaProps{ - Description: "Stderr if true indicates that stderr is to be redirected for the attach call. Defaults to true.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "tty": { - SchemaProps: spec.SchemaProps{ - Description: "TTY if true indicates that a tty will be allocated for the attach call. This is passed through the container runtime so the tty is allocated on the worker node by the container runtime. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "container": { - SchemaProps: spec.SchemaProps{ - Description: "The container in which to execute the command. Defaults to only container if there is only one container in the pod.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_PodCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodCondition contains details for the current condition of this pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type is the type of the condition. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the status of the condition. Can be True, False, Unknown. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", - Type: []string{"string"}, - Format: "", - }, - }, - "lastProbeTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time we probed the condition.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "Unique, one-word, CamelCase reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Human-readable message indicating details about last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_core_v1_PodDNSConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "nameservers": { - SchemaProps: spec.SchemaProps{ - Description: "A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "searches": { - SchemaProps: spec.SchemaProps{ - Description: "A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "options": { - SchemaProps: spec.SchemaProps{ - Description: "A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PodDNSConfigOption"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodDNSConfigOption"}, - } -} - -func schema_k8sio_api_core_v1_PodDNSConfigOption(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodDNSConfigOption defines DNS resolver options of a pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Required.", - Type: []string{"string"}, - Format: "", - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_PodExecOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodExecOptions is the query options to a Pod's remote exec call.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "stdin": { - SchemaProps: spec.SchemaProps{ - Description: "Redirect the standard input stream of the pod for this call. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "stdout": { - SchemaProps: spec.SchemaProps{ - Description: "Redirect the standard output stream of the pod for this call. Defaults to true.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "stderr": { - SchemaProps: spec.SchemaProps{ - Description: "Redirect the standard error stream of the pod for this call. Defaults to true.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "tty": { - SchemaProps: spec.SchemaProps{ - Description: "TTY if true indicates that a tty will be allocated for the exec call. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "container": { - SchemaProps: spec.SchemaProps{ - Description: "Container in which to execute the command. Defaults to only container if there is only one container in the pod.", - Type: []string{"string"}, - Format: "", - }, - }, - "command": { - SchemaProps: spec.SchemaProps{ - Description: "Command is the remote command to execute. argv array. Not executed within a shell.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"command"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_PodList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodList is a list of Pods.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of pods. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Pod"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.Pod", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_PodLogOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodLogOptions is the query options for a Pod's logs REST call.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "container": { - SchemaProps: spec.SchemaProps{ - Description: "The container for which to stream logs. Defaults to only container if there is one container in the pod.", - Type: []string{"string"}, - Format: "", - }, - }, - "follow": { - SchemaProps: spec.SchemaProps{ - Description: "Follow the log stream of the pod. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "previous": { - SchemaProps: spec.SchemaProps{ - Description: "Return previous terminated container logs. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "sinceSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "A relative time in seconds before the current time from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "sinceTime": { - SchemaProps: spec.SchemaProps{ - Description: "An RFC3339 timestamp from which to show logs. If this value precedes the time a pod was started, only logs since the pod start will be returned. If this value is in the future, no logs will be returned. Only one of sinceSeconds or sinceTime may be specified.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "timestamps": { - SchemaProps: spec.SchemaProps{ - Description: "If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line of log output. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "tailLines": { - SchemaProps: spec.SchemaProps{ - Description: "If set, the number of lines from the end of the logs to show. If not specified, logs are shown from the creation of the container or sinceSeconds or sinceTime", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "limitBytes": { - SchemaProps: spec.SchemaProps{ - Description: "If set, the number of bytes to read from the server before terminating the log output. This may not display a complete final line of logging, and may return slightly more or slightly less than the specified limit.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_core_v1_PodPortForwardOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodPortForwardOptions is the query options to a Pod's port forward call when using WebSockets. The `port` query parameter must specify the port or ports (comma separated) to forward over. Port forwarding over SPDY does not use these options. It requires the port to be passed in the `port` header as part of request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "ports": { - SchemaProps: spec.SchemaProps{ - Description: "List of ports to forward Required when using WebSockets", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_PodProxyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodProxyOptions is the query options to a Pod's proxy call.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path is the URL path to use for the current proxy request to pod.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_PodReadinessGate(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodReadinessGate contains the reference to a pod condition", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "conditionType": { - SchemaProps: spec.SchemaProps{ - Description: "ConditionType refers to a condition in the pod's condition list with matching type.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"conditionType"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_PodSecurityContext(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "seLinuxOptions": { - SchemaProps: spec.SchemaProps{ - Description: "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", - Ref: ref("k8s.io/api/core/v1.SELinuxOptions"), - }, - }, - "runAsUser": { - SchemaProps: spec.SchemaProps{ - Description: "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "runAsGroup": { - SchemaProps: spec.SchemaProps{ - Description: "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "runAsNonRoot": { - SchemaProps: spec.SchemaProps{ - Description: "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "supplementalGroups": { - SchemaProps: spec.SchemaProps{ - Description: "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - }, - }, - "fsGroup": { - SchemaProps: spec.SchemaProps{ - Description: "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw----\n\nIf unset, the Kubelet will not modify the ownership and permissions of any volume.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "sysctls": { - SchemaProps: spec.SchemaProps{ - Description: "Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported sysctls (by the container runtime) might fail to launch.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Sysctl"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.SELinuxOptions", "k8s.io/api/core/v1.Sysctl"}, - } -} - -func schema_k8sio_api_core_v1_PodSignature(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Describes the class of pods that should avoid this node. Exactly one field should be set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "podController": { - SchemaProps: spec.SchemaProps{ - Description: "Reference to controller whose pods should avoid this node.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference"}, - } -} - -func schema_k8sio_api_core_v1_PodSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodSpec is a description of a pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "volumes": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge,retainKeys", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Volume"), - }, - }, - }, - }, - }, - "initContainers": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Container"), - }, - }, - }, - }, - }, - "containers": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Container"), - }, - }, - }, - }, - }, - "restartPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy", - Type: []string{"string"}, - Format: "", - }, - }, - "terminationGracePeriodSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "activeDeadlineSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "dnsPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "Set DNS policy for the pod. Defaults to \"ClusterFirst\". Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.", - Type: []string{"string"}, - Format: "", - }, - }, - "nodeSelector": { - SchemaProps: spec.SchemaProps{ - Description: "NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "serviceAccountName": { - SchemaProps: spec.SchemaProps{ - Description: "ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", - Type: []string{"string"}, - Format: "", - }, - }, - "serviceAccount": { - SchemaProps: spec.SchemaProps{ - Description: "DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.", - Type: []string{"string"}, - Format: "", - }, - }, - "automountServiceAccountToken": { - SchemaProps: spec.SchemaProps{ - Description: "AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "nodeName": { - SchemaProps: spec.SchemaProps{ - Description: "NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.", - Type: []string{"string"}, - Format: "", - }, - }, - "hostNetwork": { - SchemaProps: spec.SchemaProps{ - Description: "Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "hostPID": { - SchemaProps: spec.SchemaProps{ - Description: "Use the host's pid namespace. Optional: Default to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "hostIPC": { - SchemaProps: spec.SchemaProps{ - Description: "Use the host's ipc namespace. Optional: Default to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "shareProcessNamespace": { - SchemaProps: spec.SchemaProps{ - Description: "Share a single process namespace between all of the containers in a pod. When this is set containers will be able to view and signal processes from other containers in the same pod, and the first process in each container will not be assigned PID 1. HostPID and ShareProcessNamespace cannot both be set. Optional: Default to false. This field is beta-level and may be disabled with the PodShareProcessNamespace feature.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "securityContext": { - SchemaProps: spec.SchemaProps{ - Description: "SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.", - Ref: ref("k8s.io/api/core/v1.PodSecurityContext"), - }, - }, - "imagePullSecrets": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), - }, - }, - }, - }, - }, - "hostname": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.", - Type: []string{"string"}, - Format: "", - }, - }, - "subdomain": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, the fully qualified Pod hostname will be \"...svc.\". If not specified, the pod will not have a domainname at all.", - Type: []string{"string"}, - Format: "", - }, - }, - "affinity": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, the pod's scheduling constraints", - Ref: ref("k8s.io/api/core/v1.Affinity"), - }, - }, - "schedulerName": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.", - Type: []string{"string"}, - Format: "", - }, - }, - "tolerations": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, the pod's tolerations.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Toleration"), - }, - }, - }, - }, - }, - "hostAliases": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "ip", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.HostAlias"), - }, - }, - }, - }, - }, - "priorityClassName": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, indicates the pod's priority. \"system-node-critical\" and \"system-cluster-critical\" are two special keywords which indicate the highest priorities with the former being the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.", - Type: []string{"string"}, - Format: "", - }, - }, - "priority": { - SchemaProps: spec.SchemaProps{ - Description: "The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "dnsConfig": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the DNS parameters of a pod. Parameters specified here will be merged to the generated DNS configuration based on DNSPolicy.", - Ref: ref("k8s.io/api/core/v1.PodDNSConfig"), - }, - }, - "readinessGates": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, all readiness gates will be evaluated for pod readiness. A pod is ready when all its containers are ready AND all conditions specified in the readiness gates have status equal to \"True\" More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PodReadinessGate"), - }, - }, - }, - }, - }, - "runtimeClassName": { - SchemaProps: spec.SchemaProps{ - Description: "RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the \"legacy\" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md This is an alpha feature and may change in the future.", - Type: []string{"string"}, - Format: "", - }, - }, - "enableServiceLinks": { - SchemaProps: spec.SchemaProps{ - Description: "EnableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links. Optional: Defaults to true.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"containers"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.HostAlias", "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.PodDNSConfig", "k8s.io/api/core/v1.PodReadinessGate", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume"}, - } -} - -func schema_k8sio_api_core_v1_PodStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodStatus represents information about the status of a pod. Status may trail the actual state of a system, especially if the node that hosts the pod cannot contact the control plane.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "phase": { - SchemaProps: spec.SchemaProps{ - Description: "The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle. The conditions array, the reason and message fields, and the individual container status arrays contain more detail about the pod's status. There are five possible phase values:\n\nPending: The pod has been accepted by the Kubernetes system, but one or more of the container images has not been created. This includes time before being scheduled as well as time spent downloading images over the network, which could take a while. Running: The pod has been bound to a node, and all of the containers have been created. At least one container is still running, or is in the process of starting or restarting. Succeeded: All containers in the pod have terminated in success, and will not be restarted. Failed: All containers in the pod have terminated, and at least one container has terminated in failure. The container either exited with non-zero status or was terminated by the system. Unknown: For some reason the state of the pod could not be obtained, typically due to an error in communicating with the host of the pod.\n\nMore info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase", - Type: []string{"string"}, - Format: "", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Current service state of pod. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PodCondition"), - }, - }, - }, - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about why the pod is in this condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted'", - Type: []string{"string"}, - Format: "", - }, - }, - "nominatedNodeName": { - SchemaProps: spec.SchemaProps{ - Description: "nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.", - Type: []string{"string"}, - Format: "", - }, - }, - "hostIP": { - SchemaProps: spec.SchemaProps{ - Description: "IP address of the host to which the pod is assigned. Empty if not yet scheduled.", - Type: []string{"string"}, - Format: "", - }, - }, - "podIP": { - SchemaProps: spec.SchemaProps{ - Description: "IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.", - Type: []string{"string"}, - Format: "", - }, - }, - "startTime": { - SchemaProps: spec.SchemaProps{ - Description: "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "initContainerStatuses": { - SchemaProps: spec.SchemaProps{ - Description: "The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ContainerStatus"), - }, - }, - }, - }, - }, - "containerStatuses": { - SchemaProps: spec.SchemaProps{ - Description: "The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ContainerStatus"), - }, - }, - }, - }, - }, - "qosClass": { - SchemaProps: spec.SchemaProps{ - Description: "The Quality of Service (QOS) classification assigned to the pod based on resource requirements See PodQOSClass type for available QOS classes More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ContainerStatus", "k8s.io/api/core/v1.PodCondition", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_core_v1_PodStatusResult(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Most recently observed status of the pod. This data may not be up to date. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.PodStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_PodTemplate(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodTemplate describes a template for creating copies of a predefined pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Template defines the pods that will be created from this pod template. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_PodTemplateList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodTemplateList is a list of PodTemplates.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of pod templates", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.PodTemplate"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodTemplate", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_PodTemplateSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodTemplateSpec describes the data a pod should have when created from a template", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of the pod. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.PodSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_PortworxVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PortworxVolumeSource represents a Portworx volume resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "volumeID": { - SchemaProps: spec.SchemaProps{ - Description: "VolumeID uniquely identifies a Portworx volume", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"volumeID"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_PreferAvoidPodsEntry(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Describes a class of pods that should avoid this node.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "podSignature": { - SchemaProps: spec.SchemaProps{ - Description: "The class of pods.", - Ref: ref("k8s.io/api/core/v1.PodSignature"), - }, - }, - "evictionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Time at which this entry was added to the list.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "(brief) reason why this entry was added to the list.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Human readable message indicating why this entry was added to the list.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"podSignature"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodSignature", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_core_v1_PreferredSchedulingTerm(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "weight": { - SchemaProps: spec.SchemaProps{ - Description: "Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "preference": { - SchemaProps: spec.SchemaProps{ - Description: "A node selector term, associated with the corresponding weight.", - Ref: ref("k8s.io/api/core/v1.NodeSelectorTerm"), - }, - }, - }, - Required: []string{"weight", "preference"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.NodeSelectorTerm"}, - } -} - -func schema_k8sio_api_core_v1_Probe(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Probe describes a health check to be performed against a container to determine whether it is alive or ready to receive traffic.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "exec": { - SchemaProps: spec.SchemaProps{ - Description: "One and only one of the following should be specified. Exec specifies the action to take.", - Ref: ref("k8s.io/api/core/v1.ExecAction"), - }, - }, - "httpGet": { - SchemaProps: spec.SchemaProps{ - Description: "HTTPGet specifies the http request to perform.", - Ref: ref("k8s.io/api/core/v1.HTTPGetAction"), - }, - }, - "tcpSocket": { - SchemaProps: spec.SchemaProps{ - Description: "TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported", - Ref: ref("k8s.io/api/core/v1.TCPSocketAction"), - }, - }, - "initialDelaySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Number of seconds after the container has started before liveness probes are initiated. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "timeoutSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "periodSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "successThreshold": { - SchemaProps: spec.SchemaProps{ - Description: "Minimum consecutive successes for the probe to be considered successful after having failed. Defaults to 1. Must be 1 for liveness. Minimum value is 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "failureThreshold": { - SchemaProps: spec.SchemaProps{ - Description: "Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ExecAction", "k8s.io/api/core/v1.HTTPGetAction", "k8s.io/api/core/v1.TCPSocketAction"}, - } -} - -func schema_k8sio_api_core_v1_ProjectedVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a projected volume source", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "sources": { - SchemaProps: spec.SchemaProps{ - Description: "list of volume projections", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.VolumeProjection"), - }, - }, - }, - }, - }, - "defaultMode": { - SchemaProps: spec.SchemaProps{ - Description: "Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"sources"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.VolumeProjection"}, - } -} - -func schema_k8sio_api_core_v1_QuobyteVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "registry": { - SchemaProps: spec.SchemaProps{ - Description: "Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes", - Type: []string{"string"}, - Format: "", - }, - }, - "volume": { - SchemaProps: spec.SchemaProps{ - Description: "Volume is a string that references an already created Quobyte volume by name.", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "User to map volume access to Defaults to serivceaccount user", - Type: []string{"string"}, - Format: "", - }, - }, - "group": { - SchemaProps: spec.SchemaProps{ - Description: "Group to map volume access to Default is no group", - Type: []string{"string"}, - Format: "", - }, - }, - "tenant": { - SchemaProps: spec.SchemaProps{ - Description: "Tenant owning the given Quobyte volume in the Backend Used with dynamically provisioned Quobyte volumes, value is set by the plugin", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"registry", "volume"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_RBDPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "monitors": { - SchemaProps: spec.SchemaProps{ - Description: "A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "image": { - SchemaProps: spec.SchemaProps{ - Description: "The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd", - Type: []string{"string"}, - Format: "", - }, - }, - "pool": { - SchemaProps: spec.SchemaProps{ - Description: "The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "keyring": { - SchemaProps: spec.SchemaProps{ - Description: "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Ref: ref("k8s.io/api/core/v1.SecretReference"), - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"monitors", "image"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.SecretReference"}, - } -} - -func schema_k8sio_api_core_v1_RBDVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "monitors": { - SchemaProps: spec.SchemaProps{ - Description: "A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "image": { - SchemaProps: spec.SchemaProps{ - Description: "The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd", - Type: []string{"string"}, - Format: "", - }, - }, - "pool": { - SchemaProps: spec.SchemaProps{ - Description: "The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "keyring": { - SchemaProps: spec.SchemaProps{ - Description: "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"string"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"monitors", "image"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LocalObjectReference"}, - } -} - -func schema_k8sio_api_core_v1_RangeAllocation(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RangeAllocation is not a public type.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "range": { - SchemaProps: spec.SchemaProps{ - Description: "Range is string that identifies the range represented by 'data'.", - Type: []string{"string"}, - Format: "", - }, - }, - "data": { - SchemaProps: spec.SchemaProps{ - Description: "Data is a bit array containing all allocated addresses in the previous segment.", - Type: []string{"string"}, - Format: "byte", - }, - }, - }, - Required: []string{"range", "data"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_ReplicationController(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicationController represents the configuration of a replication controller.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "If the Labels of a ReplicationController are empty, they are defaulted to be the same as the Pod(s) that the replication controller manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the specification of the desired behavior of the replication controller. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.ReplicationControllerSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the most recently observed status of the replication controller. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.ReplicationControllerStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ReplicationControllerSpec", "k8s.io/api/core/v1.ReplicationControllerStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_ReplicationControllerCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicationControllerCondition describes the state of a replication controller at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of replication controller condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "The last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_core_v1_ReplicationControllerList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicationControllerList is a collection of replication controllers.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of replication controllers. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ReplicationController"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ReplicationController", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_ReplicationControllerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicationControllerSpec is the specification of a replication controller.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "minReadySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "Selector is a label query over pods that should match the Replicas count. If Selector is empty, it is defaulted to the labels present on the Pod template. Label keys and values that must match in order to be controlled by this replication controller, if empty defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. This takes precedence over a TemplateRef. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodTemplateSpec"}, - } -} - -func schema_k8sio_api_core_v1_ReplicationControllerStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicationControllerStatus represents the current status of a replication controller.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "fullyLabeledReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of pods that have labels matching the labels of the pod template of the replication controller.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readyReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of ready replicas for this replication controller.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "availableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of available replicas (ready for at least minReadySeconds) for this replication controller.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "ObservedGeneration reflects the generation of the most recently observed replication controller.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a replication controller's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ReplicationControllerCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"replicas"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ReplicationControllerCondition"}, - } -} - -func schema_k8sio_api_core_v1_ResourceFieldSelector(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceFieldSelector represents container resources (cpu, memory) and their output format", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "containerName": { - SchemaProps: spec.SchemaProps{ - Description: "Container name: required for volumes, optional for env vars", - Type: []string{"string"}, - Format: "", - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Description: "Required: resource to select", - Type: []string{"string"}, - Format: "", - }, - }, - "divisor": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the output format of the exposed resources, defaults to \"1\"", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"resource"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_core_v1_ResourceQuota(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceQuota sets aggregate quota restrictions enforced per namespace", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the desired quota. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.ResourceQuotaSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status defines the actual enforced quota and its current usage. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.ResourceQuotaStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ResourceQuotaSpec", "k8s.io/api/core/v1.ResourceQuotaStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_ResourceQuotaList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceQuotaList is a list of ResourceQuota items.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ResourceQuota"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ResourceQuota", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_ResourceQuotaSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceQuotaSpec defines the desired hard limits to enforce for Quota.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "hard": { - SchemaProps: spec.SchemaProps{ - Description: "hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - "scopes": { - SchemaProps: spec.SchemaProps{ - Description: "A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "scopeSelector": { - SchemaProps: spec.SchemaProps{ - Description: "scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota but expressed using ScopeSelectorOperator in combination with possible values. For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched.", - Ref: ref("k8s.io/api/core/v1.ScopeSelector"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ScopeSelector", "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_core_v1_ResourceQuotaStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceQuotaStatus defines the enforced hard limits and observed use.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "hard": { - SchemaProps: spec.SchemaProps{ - Description: "Hard is the set of enforced hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - "used": { - SchemaProps: spec.SchemaProps{ - Description: "Used is the current observed total usage of the resource in the namespace.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_core_v1_ResourceRequirements(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceRequirements describes the compute resource requirements.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "limits": { - SchemaProps: spec.SchemaProps{ - Description: "Limits describes the maximum amount of compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - "requests": { - SchemaProps: spec.SchemaProps{ - Description: "Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_k8sio_api_core_v1_SELinuxOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SELinuxOptions are the labels to be applied to the container", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "user": { - SchemaProps: spec.SchemaProps{ - Description: "User is a SELinux user label that applies to the container.", - Type: []string{"string"}, - Format: "", - }, - }, - "role": { - SchemaProps: spec.SchemaProps{ - Description: "Role is a SELinux role label that applies to the container.", - Type: []string{"string"}, - Format: "", - }, - }, - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type is a SELinux type label that applies to the container.", - Type: []string{"string"}, - Format: "", - }, - }, - "level": { - SchemaProps: spec.SchemaProps{ - Description: "Level is SELinux level label that applies to the container.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ScaleIOPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "gateway": { - SchemaProps: spec.SchemaProps{ - Description: "The host address of the ScaleIO API Gateway.", - Type: []string{"string"}, - Format: "", - }, - }, - "system": { - SchemaProps: spec.SchemaProps{ - Description: "The name of the storage system as configured in ScaleIO.", - Type: []string{"string"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.", - Ref: ref("k8s.io/api/core/v1.SecretReference"), - }, - }, - "sslEnabled": { - SchemaProps: spec.SchemaProps{ - Description: "Flag to enable/disable SSL communication with Gateway, default false", - Type: []string{"boolean"}, - Format: "", - }, - }, - "protectionDomain": { - SchemaProps: spec.SchemaProps{ - Description: "The name of the ScaleIO Protection Domain for the configured storage.", - Type: []string{"string"}, - Format: "", - }, - }, - "storagePool": { - SchemaProps: spec.SchemaProps{ - Description: "The ScaleIO Storage Pool associated with the protection domain.", - Type: []string{"string"}, - Format: "", - }, - }, - "storageMode": { - SchemaProps: spec.SchemaProps{ - Description: "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.", - Type: []string{"string"}, - Format: "", - }, - }, - "volumeName": { - SchemaProps: spec.SchemaProps{ - Description: "The name of a volume already created in the ScaleIO system that is associated with this volume source.", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\"", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"gateway", "system", "secretRef"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.SecretReference"}, - } -} - -func schema_k8sio_api_core_v1_ScaleIOVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ScaleIOVolumeSource represents a persistent ScaleIO volume", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "gateway": { - SchemaProps: spec.SchemaProps{ - Description: "The host address of the ScaleIO API Gateway.", - Type: []string{"string"}, - Format: "", - }, - }, - "system": { - SchemaProps: spec.SchemaProps{ - Description: "The name of the storage system as configured in ScaleIO.", - Type: []string{"string"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.", - Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), - }, - }, - "sslEnabled": { - SchemaProps: spec.SchemaProps{ - Description: "Flag to enable/disable SSL communication with Gateway, default false", - Type: []string{"boolean"}, - Format: "", - }, - }, - "protectionDomain": { - SchemaProps: spec.SchemaProps{ - Description: "The name of the ScaleIO Protection Domain for the configured storage.", - Type: []string{"string"}, - Format: "", - }, - }, - "storagePool": { - SchemaProps: spec.SchemaProps{ - Description: "The ScaleIO Storage Pool associated with the protection domain.", - Type: []string{"string"}, - Format: "", - }, - }, - "storageMode": { - SchemaProps: spec.SchemaProps{ - Description: "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. Default is ThinProvisioned.", - Type: []string{"string"}, - Format: "", - }, - }, - "volumeName": { - SchemaProps: spec.SchemaProps{ - Description: "The name of a volume already created in the ScaleIO system that is associated with this volume source.", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Default is \"xfs\".", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"gateway", "system", "secretRef"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LocalObjectReference"}, - } -} - -func schema_k8sio_api_core_v1_ScopeSelector(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A scope selector represents the AND of the selectors represented by the scoped-resource selector requirements.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "matchExpressions": { - SchemaProps: spec.SchemaProps{ - Description: "A list of scope selector requirements by scope of the resources.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ScopedResourceSelectorRequirement"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ScopedResourceSelectorRequirement"}, - } -} - -func schema_k8sio_api_core_v1_ScopedResourceSelectorRequirement(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator that relates the scope name and values.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "scopeName": { - SchemaProps: spec.SchemaProps{ - Description: "The name of the scope that the selector applies to.", - Type: []string{"string"}, - Format: "", - }, - }, - "operator": { - SchemaProps: spec.SchemaProps{ - Description: "Represents a scope's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist.", - Type: []string{"string"}, - Format: "", - }, - }, - "values": { - SchemaProps: spec.SchemaProps{ - Description: "An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"scopeName", "operator"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_Secret(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "data": { - SchemaProps: spec.SchemaProps{ - Description: "Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "byte", - }, - }, - }, - }, - }, - "stringData": { - SchemaProps: spec.SchemaProps{ - Description: "stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Used to facilitate programmatic handling of secret data.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_SecretEnvSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SecretEnvSource selects a Secret to populate the environment variables with.\n\nThe contents of the target Secret's Data field will represent the key-value pairs as environment variables.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - Type: []string{"string"}, - Format: "", - }, - }, - "optional": { - SchemaProps: spec.SchemaProps{ - Description: "Specify whether the Secret must be defined", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_SecretKeySelector(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SecretKeySelector selects a key of a Secret.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - Type: []string{"string"}, - Format: "", - }, - }, - "key": { - SchemaProps: spec.SchemaProps{ - Description: "The key of the secret to select from. Must be a valid secret key.", - Type: []string{"string"}, - Format: "", - }, - }, - "optional": { - SchemaProps: spec.SchemaProps{ - Description: "Specify whether the Secret or it's key must be defined", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"key"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_SecretList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SecretList is a list of Secret.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of secret objects. More info: https://kubernetes.io/docs/concepts/configuration/secret", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Secret"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.Secret", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_SecretProjection(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Adapts a secret into a projected volume.\n\nThe contents of the target Secret's Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - Type: []string{"string"}, - Format: "", - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.KeyToPath"), - }, - }, - }, - }, - }, - "optional": { - SchemaProps: spec.SchemaProps{ - Description: "Specify whether the Secret or its key must be defined", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.KeyToPath"}, - } -} - -func schema_k8sio_api_core_v1_SecretReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SecretReference represents a Secret Reference. It has enough information to retrieve secret in any namespace", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is unique within a namespace to reference a secret resource.", - Type: []string{"string"}, - Format: "", - }, - }, - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace defines the space within which the secret name must be unique.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_SecretVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Adapts a Secret into a volume.\n\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "secretName": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", - Type: []string{"string"}, - Format: "", - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.KeyToPath"), - }, - }, - }, - }, - }, - "defaultMode": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "optional": { - SchemaProps: spec.SchemaProps{ - Description: "Specify whether the Secret or it's keys must be defined", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.KeyToPath"}, - } -} - -func schema_k8sio_api_core_v1_SecurityContext(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "capabilities": { - SchemaProps: spec.SchemaProps{ - Description: "The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.", - Ref: ref("k8s.io/api/core/v1.Capabilities"), - }, - }, - "privileged": { - SchemaProps: spec.SchemaProps{ - Description: "Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "seLinuxOptions": { - SchemaProps: spec.SchemaProps{ - Description: "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - Ref: ref("k8s.io/api/core/v1.SELinuxOptions"), - }, - }, - "runAsUser": { - SchemaProps: spec.SchemaProps{ - Description: "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "runAsGroup": { - SchemaProps: spec.SchemaProps{ - Description: "The GID to run the entrypoint of the container process. Uses runtime default if unset. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "runAsNonRoot": { - SchemaProps: spec.SchemaProps{ - Description: "Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "readOnlyRootFilesystem": { - SchemaProps: spec.SchemaProps{ - Description: "Whether this container has a read-only root filesystem. Default is false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "allowPrivilegeEscalation": { - SchemaProps: spec.SchemaProps{ - Description: "AllowPrivilegeEscalation controls whether a process can gain more privileges than its parent process. This bool directly controls if the no_new_privs flag will be set on the container process. AllowPrivilegeEscalation is true always when the container is: 1) run as Privileged 2) has CAP_SYS_ADMIN", - Type: []string{"boolean"}, - Format: "", - }, - }, - "procMount": { - SchemaProps: spec.SchemaProps{ - Description: "procMount denotes the type of proc mount to use for the containers. The default is DefaultProcMount which uses the container runtime defaults for readonly paths and masked paths. This requires the ProcMountType feature flag to be enabled.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.Capabilities", "k8s.io/api/core/v1.SELinuxOptions"}, - } -} - -func schema_k8sio_api_core_v1_SerializedReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SerializedReference is a reference to serialized object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "reference": { - SchemaProps: spec.SchemaProps{ - Description: "The reference to an object in the system.", - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ObjectReference"}, - } -} - -func schema_k8sio_api_core_v1_Service(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Service is a named abstraction of software service (for example, mysql) consisting of local port (for example 3306) that the proxy listens on, and the selector that determines which pods will answer requests sent through the proxy.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the behavior of a service. https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.ServiceSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Most recently observed status of the service. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/core/v1.ServiceStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ServiceSpec", "k8s.io/api/core/v1.ServiceStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_ServiceAccount(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceAccount binds together: * a name, understood by users, and perhaps by peripheral systems, for an identity * a principal that can be authenticated and authorized * a set of secrets", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "secrets": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount. More info: https://kubernetes.io/docs/concepts/configuration/secret", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - }, - }, - }, - "imagePullSecrets": { - SchemaProps: spec.SchemaProps{ - Description: "ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), - }, - }, - }, - }, - }, - "automountServiceAccountToken": { - SchemaProps: spec.SchemaProps{ - Description: "AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. Can be overridden at the pod level.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LocalObjectReference", "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_core_v1_ServiceAccountList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceAccountList is a list of ServiceAccount objects", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of ServiceAccounts. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ServiceAccount"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ServiceAccount", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_ServiceAccountTokenProjection(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceAccountTokenProjection represents a projected service account token volume. This projection can be used to insert a service account token into the pods runtime filesystem for use against APIs (Kubernetes API Server or otherwise).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "audience": { - SchemaProps: spec.SchemaProps{ - Description: "Audience is the intended audience of the token. A recipient of a token must identify itself with an identifier specified in the audience of the token, and otherwise should reject the token. The audience defaults to the identifier of the apiserver.", - Type: []string{"string"}, - Format: "", - }, - }, - "expirationSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "ExpirationSeconds is the requested duration of validity of the service account token. As the token approaches expiration, the kubelet volume plugin will proactively rotate the service account token. The kubelet will start trying to rotate the token if the token is older than 80 percent of its time to live or if the token is older than 24 hours.Defaults to 1 hour and must be at least 10 minutes.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path is the path relative to the mount point of the file to project the token into.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"path"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ServiceList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceList holds a list of services.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of services", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Service"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.Service", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_core_v1_ServicePort(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServicePort contains information on service's port.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. This maps to the 'Name' field in EndpointPort objects. Optional if only one ServicePort is defined on this service.", - Type: []string{"string"}, - Format: "", - }, - }, - "protocol": { - SchemaProps: spec.SchemaProps{ - Description: "The IP protocol for this port. Supports \"TCP\", \"UDP\", and \"SCTP\". Default is TCP.", - Type: []string{"string"}, - Format: "", - }, - }, - "port": { - SchemaProps: spec.SchemaProps{ - Description: "The port that will be exposed by this service.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "targetPort": { - SchemaProps: spec.SchemaProps{ - Description: "Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - "nodePort": { - SchemaProps: spec.SchemaProps{ - Description: "The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"port"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_core_v1_ServiceProxyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceProxyOptions is the query options to a Service's proxy call.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path is the part of URLs that include service endpoints, suffixes, and parameters to use for the current proxy request to service. For example, the whole request URL is http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. Path is _search?q=user:kimchy.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_ServiceSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceSpec describes the attributes that a user creates on a service.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ports": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-list-map-keys": []interface{}{ - "port", - "protocol", - }, - "x-kubernetes-list-type": "map", - "x-kubernetes-patch-merge-key": "port", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "The list of ports that are exposed by this service. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.ServicePort"), - }, - }, - }, - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "Route service traffic to pods with label keys and values matching this selector. If empty or not present, the service is assumed to have an external process managing its endpoints, which Kubernetes will not modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "clusterIP": { - SchemaProps: spec.SchemaProps{ - Description: "clusterIP is the IP address of the service and is usually assigned randomly by the master. If an address is specified manually and is not in use by others, it will be allocated to the service; otherwise, creation of the service will fail. This field can not be changed through updates. Valid values are \"None\", empty string (\"\"), or a valid IP address. \"None\" can be specified for headless services when proxying is not required. Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if type is ExternalName. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", - Type: []string{"string"}, - Format: "", - }, - }, - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type determines how the Service is exposed. Defaults to ClusterIP. Valid options are ExternalName, ClusterIP, NodePort, and LoadBalancer. \"ExternalName\" maps to the specified externalName. \"ClusterIP\" allocates a cluster-internal IP address for load-balancing to endpoints. Endpoints are determined by the selector or if that is not specified, by manual construction of an Endpoints object. If clusterIP is \"None\", no virtual IP is allocated and the endpoints are published as a set of endpoints rather than a stable IP. \"NodePort\" builds on ClusterIP and allocates a port on every node which routes to the clusterIP. \"LoadBalancer\" builds on NodePort and creates an external load-balancer (if supported in the current cloud) which routes to the clusterIP. More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types", - Type: []string{"string"}, - Format: "", - }, - }, - "externalIPs": { - SchemaProps: spec.SchemaProps{ - Description: "externalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. These IPs are not managed by Kubernetes. The user is responsible for ensuring that traffic arrives at a node with this IP. A common example is external load-balancers that are not part of the Kubernetes system.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "sessionAffinity": { - SchemaProps: spec.SchemaProps{ - Description: "Supports \"ClientIP\" and \"None\". Used to maintain session affinity. Enable client IP based session affinity. Must be ClientIP or None. Defaults to None. More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies", - Type: []string{"string"}, - Format: "", - }, - }, - "loadBalancerIP": { - SchemaProps: spec.SchemaProps{ - Description: "Only applies to Service Type: LoadBalancer LoadBalancer will get created with the IP specified in this field. This feature depends on whether the underlying cloud-provider supports specifying the loadBalancerIP when a load balancer is created. This field will be ignored if the cloud-provider does not support the feature.", - Type: []string{"string"}, - Format: "", - }, - }, - "loadBalancerSourceRanges": { - SchemaProps: spec.SchemaProps{ - Description: "If specified and supported by the platform, this will restrict traffic through the cloud-provider load-balancer will be restricted to the specified client IPs. This field will be ignored if the cloud-provider does not support the feature.\" More info: https://kubernetes.io/docs/tasks/access-application-cluster/configure-cloud-provider-firewall/", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "externalName": { - SchemaProps: spec.SchemaProps{ - Description: "externalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. No proxying will be involved. Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) and requires Type to be ExternalName.", - Type: []string{"string"}, - Format: "", - }, - }, - "externalTrafficPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "externalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. \"Local\" preserves the client source IP and avoids a second hop for LoadBalancer and Nodeport type services, but risks potentially imbalanced traffic spreading. \"Cluster\" obscures the client source IP and may cause a second hop to another node, but should have good overall load-spreading.", - Type: []string{"string"}, - Format: "", - }, - }, - "healthCheckNodePort": { - SchemaProps: spec.SchemaProps{ - Description: "healthCheckNodePort specifies the healthcheck nodePort for the service. If not specified, HealthCheckNodePort is created by the service api backend with the allocated nodePort. Will use user-specified nodePort value if specified by the client. Only effects when Type is set to LoadBalancer and ExternalTrafficPolicy is set to Local.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "publishNotReadyAddresses": { - SchemaProps: spec.SchemaProps{ - Description: "publishNotReadyAddresses, when set to true, indicates that DNS implementations must publish the notReadyAddresses of subsets for the Endpoints associated with the Service. The default value is false. The primary use case for setting this field is to use a StatefulSet's Headless Service to propagate SRV records for its Pods without respect to their readiness for purpose of peer discovery.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "sessionAffinityConfig": { - SchemaProps: spec.SchemaProps{ - Description: "sessionAffinityConfig contains the configurations of session affinity.", - Ref: ref("k8s.io/api/core/v1.SessionAffinityConfig"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ServicePort", "k8s.io/api/core/v1.SessionAffinityConfig"}, - } -} - -func schema_k8sio_api_core_v1_ServiceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceStatus represents the current status of a service.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "loadBalancer": { - SchemaProps: spec.SchemaProps{ - Description: "LoadBalancer contains the current status of the load-balancer, if one is present.", - Ref: ref("k8s.io/api/core/v1.LoadBalancerStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LoadBalancerStatus"}, - } -} - -func schema_k8sio_api_core_v1_SessionAffinityConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SessionAffinityConfig represents the configurations of session affinity.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "clientIP": { - SchemaProps: spec.SchemaProps{ - Description: "clientIP contains the configurations of Client IP based session affinity.", - Ref: ref("k8s.io/api/core/v1.ClientIPConfig"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ClientIPConfig"}, - } -} - -func schema_k8sio_api_core_v1_StorageOSPersistentVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a StorageOS persistent volume resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "volumeName": { - SchemaProps: spec.SchemaProps{ - Description: "VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.", - Type: []string{"string"}, - Format: "", - }, - }, - "volumeNamespace": { - SchemaProps: spec.SchemaProps{ - Description: "VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.", - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ObjectReference"}, - } -} - -func schema_k8sio_api_core_v1_StorageOSVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a StorageOS persistent volume resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "volumeName": { - SchemaProps: spec.SchemaProps{ - Description: "VolumeName is the human-readable name of the StorageOS volume. Volume names are only unique within a namespace.", - Type: []string{"string"}, - Format: "", - }, - }, - "volumeNamespace": { - SchemaProps: spec.SchemaProps{ - Description: "VolumeNamespace specifies the scope of the volume within StorageOS. If no namespace is specified then the Pod's namespace will be used. This allows the Kubernetes name scoping to be mirrored within StorageOS for tighter integration. Set VolumeName to any name to override the default behaviour. Set to \"default\" if you are not using namespaces within StorageOS. Namespaces that do not pre-exist within StorageOS will be created.", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "secretRef": { - SchemaProps: spec.SchemaProps{ - Description: "SecretRef specifies the secret to use for obtaining the StorageOS API credentials. If not specified, default values will be attempted.", - Ref: ref("k8s.io/api/core/v1.LocalObjectReference"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LocalObjectReference"}, - } -} - -func schema_k8sio_api_core_v1_Sysctl(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Sysctl defines a kernel parameter to be set", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of a property to set", - Type: []string{"string"}, - Format: "", - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "Value of a property to set", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name", "value"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_TCPSocketAction(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TCPSocketAction describes an action based on opening a socket", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "port": { - SchemaProps: spec.SchemaProps{ - Description: "Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - "host": { - SchemaProps: spec.SchemaProps{ - Description: "Optional: Host name to connect to, defaults to the pod IP.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"port"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_core_v1_Taint(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "The node this Taint is attached to has the \"effect\" on any pod that does not tolerate the Taint.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "key": { - SchemaProps: spec.SchemaProps{ - Description: "Required. The taint key to be applied to a node.", - Type: []string{"string"}, - Format: "", - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "Required. The taint value corresponding to the taint key.", - Type: []string{"string"}, - Format: "", - }, - }, - "effect": { - SchemaProps: spec.SchemaProps{ - Description: "Required. The effect of the taint on pods that do not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule and NoExecute.", - Type: []string{"string"}, - Format: "", - }, - }, - "timeAdded": { - SchemaProps: spec.SchemaProps{ - Description: "TimeAdded represents the time at which the taint was added. It is only written for NoExecute taints.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - }, - Required: []string{"key", "effect"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_core_v1_Toleration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "The pod this Toleration is attached to tolerates any taint that matches the triple using the matching operator .", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "key": { - SchemaProps: spec.SchemaProps{ - Description: "Key is the taint key that the toleration applies to. Empty means match all taint keys. If the key is empty, operator must be Exists; this combination means to match all values and all keys.", - Type: []string{"string"}, - Format: "", - }, - }, - "operator": { - SchemaProps: spec.SchemaProps{ - Description: "Operator represents a key's relationship to the value. Valid operators are Exists and Equal. Defaults to Equal. Exists is equivalent to wildcard for value, so that a pod can tolerate all taints of a particular category.", - Type: []string{"string"}, - Format: "", - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "Value is the taint value the toleration matches to. If the operator is Exists, the value should be empty, otherwise just a regular string.", - Type: []string{"string"}, - Format: "", - }, - }, - "effect": { - SchemaProps: spec.SchemaProps{ - Description: "Effect indicates the taint effect to match. Empty means match all taint effects. When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.", - Type: []string{"string"}, - Format: "", - }, - }, - "tolerationSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "TolerationSeconds represents the period of time the toleration (which must be of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, it is not set, which means tolerate the taint forever (do not evict). Zero and negative values will be treated as 0 (evict immediately) by the system.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_core_v1_TopologySelectorLabelRequirement(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A topology selector requirement is a selector that matches given label. This is an alpha feature and may change in the future.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "key": { - SchemaProps: spec.SchemaProps{ - Description: "The label key that the selector applies to.", - Type: []string{"string"}, - Format: "", - }, - }, - "values": { - SchemaProps: spec.SchemaProps{ - Description: "An array of string values. One value must match the label to be selected. Each entry in Values is ORed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"key", "values"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_TopologySelectorTerm(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A topology selector term represents the result of label queries. A null or empty topology selector term matches no objects. The requirements of them are ANDed. It provides a subset of functionality as NodeSelectorTerm. This is an alpha feature and may change in the future.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "matchLabelExpressions": { - SchemaProps: spec.SchemaProps{ - Description: "A list of topology selector requirements by labels.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.TopologySelectorLabelRequirement"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.TopologySelectorLabelRequirement"}, - } -} - -func schema_k8sio_api_core_v1_TypedLocalObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "apiGroup": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroup is the group for the resource being referenced. If APIGroup is not specified, the specified Kind must be in the core API group. For any other third-party types, APIGroup is required.", - Type: []string{"string"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is the type of resource being referenced", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the name of resource being referenced", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"kind", "name"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_Volume(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Volume represents a named volume in a pod that may be accessed by any container in the pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Volume's name. Must be a DNS_LABEL and unique within the pod. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names", - Type: []string{"string"}, - Format: "", - }, - }, - "hostPath": { - SchemaProps: spec.SchemaProps{ - Description: "HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - Ref: ref("k8s.io/api/core/v1.HostPathVolumeSource"), - }, - }, - "emptyDir": { - SchemaProps: spec.SchemaProps{ - Description: "EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir", - Ref: ref("k8s.io/api/core/v1.EmptyDirVolumeSource"), - }, - }, - "gcePersistentDisk": { - SchemaProps: spec.SchemaProps{ - Description: "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - Ref: ref("k8s.io/api/core/v1.GCEPersistentDiskVolumeSource"), - }, - }, - "awsElasticBlockStore": { - SchemaProps: spec.SchemaProps{ - Description: "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - Ref: ref("k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource"), - }, - }, - "gitRepo": { - SchemaProps: spec.SchemaProps{ - Description: "GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.", - Ref: ref("k8s.io/api/core/v1.GitRepoVolumeSource"), - }, - }, - "secret": { - SchemaProps: spec.SchemaProps{ - Description: "Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", - Ref: ref("k8s.io/api/core/v1.SecretVolumeSource"), - }, - }, - "nfs": { - SchemaProps: spec.SchemaProps{ - Description: "NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - Ref: ref("k8s.io/api/core/v1.NFSVolumeSource"), - }, - }, - "iscsi": { - SchemaProps: spec.SchemaProps{ - Description: "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md", - Ref: ref("k8s.io/api/core/v1.ISCSIVolumeSource"), - }, - }, - "glusterfs": { - SchemaProps: spec.SchemaProps{ - Description: "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md", - Ref: ref("k8s.io/api/core/v1.GlusterfsVolumeSource"), - }, - }, - "persistentVolumeClaim": { - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimVolumeSource"), - }, - }, - "rbd": { - SchemaProps: spec.SchemaProps{ - Description: "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md", - Ref: ref("k8s.io/api/core/v1.RBDVolumeSource"), - }, - }, - "flexVolume": { - SchemaProps: spec.SchemaProps{ - Description: "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", - Ref: ref("k8s.io/api/core/v1.FlexVolumeSource"), - }, - }, - "cinder": { - SchemaProps: spec.SchemaProps{ - Description: "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - Ref: ref("k8s.io/api/core/v1.CinderVolumeSource"), - }, - }, - "cephfs": { - SchemaProps: spec.SchemaProps{ - Description: "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", - Ref: ref("k8s.io/api/core/v1.CephFSVolumeSource"), - }, - }, - "flocker": { - SchemaProps: spec.SchemaProps{ - Description: "Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running", - Ref: ref("k8s.io/api/core/v1.FlockerVolumeSource"), - }, - }, - "downwardAPI": { - SchemaProps: spec.SchemaProps{ - Description: "DownwardAPI represents downward API about the pod that should populate this volume", - Ref: ref("k8s.io/api/core/v1.DownwardAPIVolumeSource"), - }, - }, - "fc": { - SchemaProps: spec.SchemaProps{ - Description: "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", - Ref: ref("k8s.io/api/core/v1.FCVolumeSource"), - }, - }, - "azureFile": { - SchemaProps: spec.SchemaProps{ - Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - Ref: ref("k8s.io/api/core/v1.AzureFileVolumeSource"), - }, - }, - "configMap": { - SchemaProps: spec.SchemaProps{ - Description: "ConfigMap represents a configMap that should populate this volume", - Ref: ref("k8s.io/api/core/v1.ConfigMapVolumeSource"), - }, - }, - "vsphereVolume": { - SchemaProps: spec.SchemaProps{ - Description: "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"), - }, - }, - "quobyte": { - SchemaProps: spec.SchemaProps{ - Description: "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", - Ref: ref("k8s.io/api/core/v1.QuobyteVolumeSource"), - }, - }, - "azureDisk": { - SchemaProps: spec.SchemaProps{ - Description: "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - Ref: ref("k8s.io/api/core/v1.AzureDiskVolumeSource"), - }, - }, - "photonPersistentDisk": { - SchemaProps: spec.SchemaProps{ - Description: "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource"), - }, - }, - "projected": { - SchemaProps: spec.SchemaProps{ - Description: "Items for all in one resources secrets, configmaps, and downward API", - Ref: ref("k8s.io/api/core/v1.ProjectedVolumeSource"), - }, - }, - "portworxVolume": { - SchemaProps: spec.SchemaProps{ - Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.PortworxVolumeSource"), - }, - }, - "scaleIO": { - SchemaProps: spec.SchemaProps{ - Description: "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", - Ref: ref("k8s.io/api/core/v1.ScaleIOVolumeSource"), - }, - }, - "storageos": { - SchemaProps: spec.SchemaProps{ - Description: "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.", - Ref: ref("k8s.io/api/core/v1.StorageOSVolumeSource"), - }, - }, - "csi": { - SchemaProps: spec.SchemaProps{ - Description: "CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature).", - Ref: ref("k8s.io/api/core/v1.CSIVolumeSource"), - }, - }, - }, - Required: []string{"name"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/api/core/v1.AzureDiskVolumeSource", "k8s.io/api/core/v1.AzureFileVolumeSource", "k8s.io/api/core/v1.CSIVolumeSource", "k8s.io/api/core/v1.CephFSVolumeSource", "k8s.io/api/core/v1.CinderVolumeSource", "k8s.io/api/core/v1.ConfigMapVolumeSource", "k8s.io/api/core/v1.DownwardAPIVolumeSource", "k8s.io/api/core/v1.EmptyDirVolumeSource", "k8s.io/api/core/v1.FCVolumeSource", "k8s.io/api/core/v1.FlexVolumeSource", "k8s.io/api/core/v1.FlockerVolumeSource", "k8s.io/api/core/v1.GCEPersistentDiskVolumeSource", "k8s.io/api/core/v1.GitRepoVolumeSource", "k8s.io/api/core/v1.GlusterfsVolumeSource", "k8s.io/api/core/v1.HostPathVolumeSource", "k8s.io/api/core/v1.ISCSIVolumeSource", "k8s.io/api/core/v1.NFSVolumeSource", "k8s.io/api/core/v1.PersistentVolumeClaimVolumeSource", "k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource", "k8s.io/api/core/v1.PortworxVolumeSource", "k8s.io/api/core/v1.ProjectedVolumeSource", "k8s.io/api/core/v1.QuobyteVolumeSource", "k8s.io/api/core/v1.RBDVolumeSource", "k8s.io/api/core/v1.ScaleIOVolumeSource", "k8s.io/api/core/v1.SecretVolumeSource", "k8s.io/api/core/v1.StorageOSVolumeSource", "k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"}, - } -} - -func schema_k8sio_api_core_v1_VolumeDevice(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "volumeDevice describes a mapping of a raw block device within a container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name must match the name of a persistentVolumeClaim in the pod", - Type: []string{"string"}, - Format: "", - }, - }, - "devicePath": { - SchemaProps: spec.SchemaProps{ - Description: "devicePath is the path inside of the container that the device will be mapped to.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name", "devicePath"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_VolumeMount(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeMount describes a mounting of a Volume within a container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "This must match the Name of a Volume.", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "Mounted read-only if true, read-write otherwise (false or unspecified). Defaults to false.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "mountPath": { - SchemaProps: spec.SchemaProps{ - Description: "Path within the container at which the volume should be mounted. Must not contain ':'.", - Type: []string{"string"}, - Format: "", - }, - }, - "subPath": { - SchemaProps: spec.SchemaProps{ - Description: "Path within the volume from which the container's volume should be mounted. Defaults to \"\" (volume's root).", - Type: []string{"string"}, - Format: "", - }, - }, - "mountPropagation": { - SchemaProps: spec.SchemaProps{ - Description: "mountPropagation determines how mounts are propagated from the host to container and the other way around. When not set, MountPropagationNone is used. This field is beta in 1.10.", - Type: []string{"string"}, - Format: "", - }, - }, - "subPathExpr": { - SchemaProps: spec.SchemaProps{ - Description: "Expanded path within the volume from which the container's volume should be mounted. Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. Defaults to \"\" (volume's root). SubPathExpr and SubPath are mutually exclusive. This field is alpha in 1.14.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name", "mountPath"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_VolumeNodeAffinity(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "required": { - SchemaProps: spec.SchemaProps{ - Description: "Required specifies hard node constraints that must be met.", - Ref: ref("k8s.io/api/core/v1.NodeSelector"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.NodeSelector"}, - } -} - -func schema_k8sio_api_core_v1_VolumeProjection(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Projection that may be projected along with other supported volume types", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "secret": { - SchemaProps: spec.SchemaProps{ - Description: "information about the secret data to project", - Ref: ref("k8s.io/api/core/v1.SecretProjection"), - }, - }, - "downwardAPI": { - SchemaProps: spec.SchemaProps{ - Description: "information about the downwardAPI data to project", - Ref: ref("k8s.io/api/core/v1.DownwardAPIProjection"), - }, - }, - "configMap": { - SchemaProps: spec.SchemaProps{ - Description: "information about the configMap data to project", - Ref: ref("k8s.io/api/core/v1.ConfigMapProjection"), - }, - }, - "serviceAccountToken": { - SchemaProps: spec.SchemaProps{ - Description: "information about the serviceAccountToken data to project", - Ref: ref("k8s.io/api/core/v1.ServiceAccountTokenProjection"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ConfigMapProjection", "k8s.io/api/core/v1.DownwardAPIProjection", "k8s.io/api/core/v1.SecretProjection", "k8s.io/api/core/v1.ServiceAccountTokenProjection"}, - } -} - -func schema_k8sio_api_core_v1_VolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents the source of a volume to mount. Only one of its members may be specified.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "hostPath": { - SchemaProps: spec.SchemaProps{ - Description: "HostPath represents a pre-existing file or directory on the host machine that is directly exposed to the container. This is generally used for system agents or other privileged things that are allowed to see the host machine. Most containers will NOT need this. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath", - Ref: ref("k8s.io/api/core/v1.HostPathVolumeSource"), - }, - }, - "emptyDir": { - SchemaProps: spec.SchemaProps{ - Description: "EmptyDir represents a temporary directory that shares a pod's lifetime. More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir", - Ref: ref("k8s.io/api/core/v1.EmptyDirVolumeSource"), - }, - }, - "gcePersistentDisk": { - SchemaProps: spec.SchemaProps{ - Description: "GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk", - Ref: ref("k8s.io/api/core/v1.GCEPersistentDiskVolumeSource"), - }, - }, - "awsElasticBlockStore": { - SchemaProps: spec.SchemaProps{ - Description: "AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore", - Ref: ref("k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource"), - }, - }, - "gitRepo": { - SchemaProps: spec.SchemaProps{ - Description: "GitRepo represents a git repository at a particular revision. DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir into the Pod's container.", - Ref: ref("k8s.io/api/core/v1.GitRepoVolumeSource"), - }, - }, - "secret": { - SchemaProps: spec.SchemaProps{ - Description: "Secret represents a secret that should populate this volume. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", - Ref: ref("k8s.io/api/core/v1.SecretVolumeSource"), - }, - }, - "nfs": { - SchemaProps: spec.SchemaProps{ - Description: "NFS represents an NFS mount on the host that shares a pod's lifetime More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs", - Ref: ref("k8s.io/api/core/v1.NFSVolumeSource"), - }, - }, - "iscsi": { - SchemaProps: spec.SchemaProps{ - Description: "ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://releases.k8s.io/HEAD/examples/volumes/iscsi/README.md", - Ref: ref("k8s.io/api/core/v1.ISCSIVolumeSource"), - }, - }, - "glusterfs": { - SchemaProps: spec.SchemaProps{ - Description: "Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md", - Ref: ref("k8s.io/api/core/v1.GlusterfsVolumeSource"), - }, - }, - "persistentVolumeClaim": { - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims", - Ref: ref("k8s.io/api/core/v1.PersistentVolumeClaimVolumeSource"), - }, - }, - "rbd": { - SchemaProps: spec.SchemaProps{ - Description: "RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md", - Ref: ref("k8s.io/api/core/v1.RBDVolumeSource"), - }, - }, - "flexVolume": { - SchemaProps: spec.SchemaProps{ - Description: "FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin.", - Ref: ref("k8s.io/api/core/v1.FlexVolumeSource"), - }, - }, - "cinder": { - SchemaProps: spec.SchemaProps{ - Description: "Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md", - Ref: ref("k8s.io/api/core/v1.CinderVolumeSource"), - }, - }, - "cephfs": { - SchemaProps: spec.SchemaProps{ - Description: "CephFS represents a Ceph FS mount on the host that shares a pod's lifetime", - Ref: ref("k8s.io/api/core/v1.CephFSVolumeSource"), - }, - }, - "flocker": { - SchemaProps: spec.SchemaProps{ - Description: "Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running", - Ref: ref("k8s.io/api/core/v1.FlockerVolumeSource"), - }, - }, - "downwardAPI": { - SchemaProps: spec.SchemaProps{ - Description: "DownwardAPI represents downward API about the pod that should populate this volume", - Ref: ref("k8s.io/api/core/v1.DownwardAPIVolumeSource"), - }, - }, - "fc": { - SchemaProps: spec.SchemaProps{ - Description: "FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.", - Ref: ref("k8s.io/api/core/v1.FCVolumeSource"), - }, - }, - "azureFile": { - SchemaProps: spec.SchemaProps{ - Description: "AzureFile represents an Azure File Service mount on the host and bind mount to the pod.", - Ref: ref("k8s.io/api/core/v1.AzureFileVolumeSource"), - }, - }, - "configMap": { - SchemaProps: spec.SchemaProps{ - Description: "ConfigMap represents a configMap that should populate this volume", - Ref: ref("k8s.io/api/core/v1.ConfigMapVolumeSource"), - }, - }, - "vsphereVolume": { - SchemaProps: spec.SchemaProps{ - Description: "VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"), - }, - }, - "quobyte": { - SchemaProps: spec.SchemaProps{ - Description: "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", - Ref: ref("k8s.io/api/core/v1.QuobyteVolumeSource"), - }, - }, - "azureDisk": { - SchemaProps: spec.SchemaProps{ - Description: "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", - Ref: ref("k8s.io/api/core/v1.AzureDiskVolumeSource"), - }, - }, - "photonPersistentDisk": { - SchemaProps: spec.SchemaProps{ - Description: "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource"), - }, - }, - "projected": { - SchemaProps: spec.SchemaProps{ - Description: "Items for all in one resources secrets, configmaps, and downward API", - Ref: ref("k8s.io/api/core/v1.ProjectedVolumeSource"), - }, - }, - "portworxVolume": { - SchemaProps: spec.SchemaProps{ - Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", - Ref: ref("k8s.io/api/core/v1.PortworxVolumeSource"), - }, - }, - "scaleIO": { - SchemaProps: spec.SchemaProps{ - Description: "ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.", - Ref: ref("k8s.io/api/core/v1.ScaleIOVolumeSource"), - }, - }, - "storageos": { - SchemaProps: spec.SchemaProps{ - Description: "StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.", - Ref: ref("k8s.io/api/core/v1.StorageOSVolumeSource"), - }, - }, - "csi": { - SchemaProps: spec.SchemaProps{ - Description: "CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature).", - Ref: ref("k8s.io/api/core/v1.CSIVolumeSource"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/api/core/v1.AzureDiskVolumeSource", "k8s.io/api/core/v1.AzureFileVolumeSource", "k8s.io/api/core/v1.CSIVolumeSource", "k8s.io/api/core/v1.CephFSVolumeSource", "k8s.io/api/core/v1.CinderVolumeSource", "k8s.io/api/core/v1.ConfigMapVolumeSource", "k8s.io/api/core/v1.DownwardAPIVolumeSource", "k8s.io/api/core/v1.EmptyDirVolumeSource", "k8s.io/api/core/v1.FCVolumeSource", "k8s.io/api/core/v1.FlexVolumeSource", "k8s.io/api/core/v1.FlockerVolumeSource", "k8s.io/api/core/v1.GCEPersistentDiskVolumeSource", "k8s.io/api/core/v1.GitRepoVolumeSource", "k8s.io/api/core/v1.GlusterfsVolumeSource", "k8s.io/api/core/v1.HostPathVolumeSource", "k8s.io/api/core/v1.ISCSIVolumeSource", "k8s.io/api/core/v1.NFSVolumeSource", "k8s.io/api/core/v1.PersistentVolumeClaimVolumeSource", "k8s.io/api/core/v1.PhotonPersistentDiskVolumeSource", "k8s.io/api/core/v1.PortworxVolumeSource", "k8s.io/api/core/v1.ProjectedVolumeSource", "k8s.io/api/core/v1.QuobyteVolumeSource", "k8s.io/api/core/v1.RBDVolumeSource", "k8s.io/api/core/v1.ScaleIOVolumeSource", "k8s.io/api/core/v1.SecretVolumeSource", "k8s.io/api/core/v1.StorageOSVolumeSource", "k8s.io/api/core/v1.VsphereVirtualDiskVolumeSource"}, - } -} - -func schema_k8sio_api_core_v1_VsphereVirtualDiskVolumeSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Represents a vSphere volume resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "volumePath": { - SchemaProps: spec.SchemaProps{ - Description: "Path that identifies vSphere volume vmdk", - Type: []string{"string"}, - Format: "", - }, - }, - "fsType": { - SchemaProps: spec.SchemaProps{ - Description: "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", - Type: []string{"string"}, - Format: "", - }, - }, - "storagePolicyName": { - SchemaProps: spec.SchemaProps{ - Description: "Storage Policy Based Management (SPBM) profile name.", - Type: []string{"string"}, - Format: "", - }, - }, - "storagePolicyID": { - SchemaProps: spec.SchemaProps{ - Description: "Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"volumePath"}, - }, - }, - } -} - -func schema_k8sio_api_core_v1_WeightedPodAffinityTerm(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "weight": { - SchemaProps: spec.SchemaProps{ - Description: "weight associated with matching the corresponding podAffinityTerm, in the range 1-100.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "podAffinityTerm": { - SchemaProps: spec.SchemaProps{ - Description: "Required. A pod affinity term, associated with the corresponding weight.", - Ref: ref("k8s.io/api/core/v1.PodAffinityTerm"), - }, - }, - }, - Required: []string{"weight", "podAffinityTerm"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodAffinityTerm"}, - } -} - -func schema_k8sio_api_events_v1beta1_Event(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Event is a report of an event somewhere in the cluster. It generally denotes some state change in the system.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "eventTime": { - SchemaProps: spec.SchemaProps{ - Description: "Required. Time when this Event was first observed.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "series": { - SchemaProps: spec.SchemaProps{ - Description: "Data about the Event series this event represents or nil if it's a singleton Event.", - Ref: ref("k8s.io/api/events/v1beta1.EventSeries"), - }, - }, - "reportingController": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.", - Type: []string{"string"}, - Format: "", - }, - }, - "reportingInstance": { - SchemaProps: spec.SchemaProps{ - Description: "ID of the controller instance, e.g. `kubelet-xyzf`.", - Type: []string{"string"}, - Format: "", - }, - }, - "action": { - SchemaProps: spec.SchemaProps{ - Description: "What action was taken/failed regarding to the regarding object.", - Type: []string{"string"}, - Format: "", - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "Why the action was taken.", - Type: []string{"string"}, - Format: "", - }, - }, - "regarding": { - SchemaProps: spec.SchemaProps{ - Description: "The object this Event is about. In most cases it's an Object reporting controller implements. E.g. ReplicaSetController implements ReplicaSets and this event is emitted because it acts on some changes in a ReplicaSet object.", - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - "related": { - SchemaProps: spec.SchemaProps{ - Description: "Optional secondary object for more complex actions. E.g. when regarding object triggers a creation or deletion of related object.", - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - "note": { - SchemaProps: spec.SchemaProps{ - Description: "Optional. A human-readable description of the status of this operation. Maximal length of the note is 1kB, but libraries should be prepared to handle values up to 64kB.", - Type: []string{"string"}, - Format: "", - }, - }, - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of this event (Normal, Warning), new types could be added in the future.", - Type: []string{"string"}, - Format: "", - }, - }, - "deprecatedSource": { - SchemaProps: spec.SchemaProps{ - Description: "Deprecated field assuring backward compatibility with core.v1 Event type", - Ref: ref("k8s.io/api/core/v1.EventSource"), - }, - }, - "deprecatedFirstTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "Deprecated field assuring backward compatibility with core.v1 Event type", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "deprecatedLastTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "Deprecated field assuring backward compatibility with core.v1 Event type", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "deprecatedCount": { - SchemaProps: spec.SchemaProps{ - Description: "Deprecated field assuring backward compatibility with core.v1 Event type", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"eventTime"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.EventSource", "k8s.io/api/core/v1.ObjectReference", "k8s.io/api/events/v1beta1.EventSeries", "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_events_v1beta1_EventList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EventList is a list of Event objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of schema objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/events/v1beta1.Event"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/events/v1beta1.Event", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_events_v1beta1_EventSeries(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "count": { - SchemaProps: spec.SchemaProps{ - Description: "Number of occurrences in this series up to the last heartbeat time", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "lastObservedTime": { - SchemaProps: spec.SchemaProps{ - Description: "Time when last Event from the series was seen before last heartbeat.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "state": { - SchemaProps: spec.SchemaProps{ - Description: "Information whether this series is ongoing or finished.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"count", "lastObservedTime", "state"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_AllowedCSIDriver(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the registered name of the CSI driver", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name"}, - }, - }, - } -} - -func schema_k8sio_api_extensions_v1beta1_AllowedFlexVolume(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AllowedFlexVolume represents a single Flexvolume that is allowed to be used. Deprecated: use AllowedFlexVolume from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "driver": { - SchemaProps: spec.SchemaProps{ - Description: "driver is the name of the Flexvolume driver.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"driver"}, - }, - }, - } -} - -func schema_k8sio_api_extensions_v1beta1_AllowedHostPath(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined. Deprecated: use AllowedHostPath from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "pathPrefix": { - SchemaProps: spec.SchemaProps{ - Description: "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_extensions_v1beta1_DaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of DaemonSet is deprecated by apps/v1beta2/DaemonSet. See the release notes for more information. DaemonSet represents the configuration of a daemon set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/extensions/v1beta1.DaemonSetSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/extensions/v1beta1.DaemonSetStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.DaemonSetSpec", "k8s.io/api/extensions/v1beta1.DaemonSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_DaemonSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetCondition describes the state of a DaemonSet at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of DaemonSet condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_DaemonSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetList is a collection of daemon sets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "A list of daemon sets.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.DaemonSet"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.DaemonSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_DaemonSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetSpec is the specification of a daemon set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - "updateStrategy": { - SchemaProps: spec.SchemaProps{ - Description: "An update strategy to replace existing DaemonSet pods with new pods.", - Ref: ref("k8s.io/api/extensions/v1beta1.DaemonSetUpdateStrategy"), - }, - }, - "minReadySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "templateGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED. A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "revisionHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"template"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/api/extensions/v1beta1.DaemonSetUpdateStrategy", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_DaemonSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetStatus represents the current status of a daemon set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "currentNumberScheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberMisscheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "desiredNumberScheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberReady": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "The most recent generation observed by the daemon set controller.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "updatedNumberScheduled": { - SchemaProps: spec.SchemaProps{ - Description: "The total number of nodes that are running updated daemon pod", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberAvailable": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "numberUnavailable": { - SchemaProps: spec.SchemaProps{ - Description: "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "collisionCount": { - SchemaProps: spec.SchemaProps{ - Description: "Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a DaemonSet's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.DaemonSetCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled", "numberReady"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.DaemonSetCondition"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_DaemonSetUpdateStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is OnDelete.", - Type: []string{"string"}, - Format: "", - }, - }, - "rollingUpdate": { - SchemaProps: spec.SchemaProps{ - Description: "Rolling update config params. Present only if type = \"RollingUpdate\".", - Ref: ref("k8s.io/api/extensions/v1beta1.RollingUpdateDaemonSet"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.RollingUpdateDaemonSet"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_Deployment(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of Deployment is deprecated by apps/v1beta2/Deployment. See the release notes for more information. Deployment enables declarative updates for Pods and ReplicaSets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of the Deployment.", - Ref: ref("k8s.io/api/extensions/v1beta1.DeploymentSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Most recently observed status of the Deployment.", - Ref: ref("k8s.io/api/extensions/v1beta1.DeploymentStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.DeploymentSpec", "k8s.io/api/extensions/v1beta1.DeploymentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_DeploymentCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentCondition describes the state of a deployment at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of deployment condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastUpdateTime": { - SchemaProps: spec.SchemaProps{ - Description: "The last time this condition was updated.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_DeploymentList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentList is a list of Deployments.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of Deployments.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.Deployment"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.Deployment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_DeploymentRollback(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED. DeploymentRollback stores the information required to rollback a deployment.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Required: This must match the Name of a deployment.", - Type: []string{"string"}, - Format: "", - }, - }, - "updatedAnnotations": { - SchemaProps: spec.SchemaProps{ - Description: "The annotations to be updated to a deployment", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "rollbackTo": { - SchemaProps: spec.SchemaProps{ - Description: "The config of this deployment rollback.", - Ref: ref("k8s.io/api/extensions/v1beta1.RollbackConfig"), - }, - }, - }, - Required: []string{"name", "rollbackTo"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.RollbackConfig"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_DeploymentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentSpec is the specification of the desired behavior of the Deployment.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Number of desired pods. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "Label selector for pods. Existing ReplicaSets whose pods are selected by this will be the ones affected by this deployment.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Template describes the pods that will be created.", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - "strategy": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-strategy": "retainKeys", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "The deployment strategy to use to replace existing pods with new ones.", - Ref: ref("k8s.io/api/extensions/v1beta1.DeploymentStrategy"), - }, - }, - "minReadySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "revisionHistoryLimit": { - SchemaProps: spec.SchemaProps{ - Description: "The number of old ReplicaSets to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. This is set to the max value of int32 (i.e. 2147483647) by default, which means \"retaining all old RelicaSets\".", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "paused": { - SchemaProps: spec.SchemaProps{ - Description: "Indicates that the deployment is paused and will not be processed by the deployment controller.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "rollbackTo": { - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED. The config this deployment is rolling back to. Will be cleared after rollback is done.", - Ref: ref("k8s.io/api/extensions/v1beta1.RollbackConfig"), - }, - }, - "progressDeadlineSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum time in seconds for a deployment to make progress before it is considered to be failed. The deployment controller will continue to process failed deployments and a condition with a ProgressDeadlineExceeded reason will be surfaced in the deployment status. Note that progress will not be estimated during the time a deployment is paused. This is set to the max value of int32 (i.e. 2147483647) by default, which means \"no deadline\".", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"template"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/api/extensions/v1beta1.DeploymentStrategy", "k8s.io/api/extensions/v1beta1.RollbackConfig", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_DeploymentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentStatus is the most recently observed status of the Deployment.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "The generation observed by the deployment controller.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of non-terminated pods targeted by this deployment (their labels match the selector).", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "updatedReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of non-terminated pods targeted by this deployment that have the desired template spec.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readyReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of ready pods targeted by this deployment.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "availableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of available pods (ready for at least minReadySeconds) targeted by this deployment.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "unavailableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a deployment's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.DeploymentCondition"), - }, - }, - }, - }, - }, - "collisionCount": { - SchemaProps: spec.SchemaProps{ - Description: "Count of hash collisions for the Deployment. The Deployment controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ReplicaSet.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.DeploymentCondition"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_DeploymentStrategy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentStrategy describes how to replace existing pods with new ones.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of deployment. Can be \"Recreate\" or \"RollingUpdate\". Default is RollingUpdate.", - Type: []string{"string"}, - Format: "", - }, - }, - "rollingUpdate": { - SchemaProps: spec.SchemaProps{ - Description: "Rolling update config params. Present only if DeploymentStrategyType = RollingUpdate.", - Ref: ref("k8s.io/api/extensions/v1beta1.RollingUpdateDeployment"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.RollingUpdateDeployment"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_FSGroupStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "FSGroupStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use FSGroupStrategyOptions from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "rule": { - SchemaProps: spec.SchemaProps{ - Description: "rule is the strategy that will dictate what FSGroup is used in the SecurityContext.", - Type: []string{"string"}, - Format: "", - }, - }, - "ranges": { - SchemaProps: spec.SchemaProps{ - Description: "ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.IDRange"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.IDRange"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_HTTPIngressPath(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.", - Type: []string{"string"}, - Format: "", - }, - }, - "backend": { - SchemaProps: spec.SchemaProps{ - Description: "Backend defines the referenced service endpoint to which the traffic will be forwarded to.", - Ref: ref("k8s.io/api/extensions/v1beta1.IngressBackend"), - }, - }, - }, - Required: []string{"backend"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.IngressBackend"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_HTTPIngressRuleValue(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "paths": { - SchemaProps: spec.SchemaProps{ - Description: "A collection of paths that map requests to backends.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.HTTPIngressPath"), - }, - }, - }, - }, - }, - }, - Required: []string{"paths"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.HTTPIngressPath"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_HostPortRange(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined. Deprecated: use HostPortRange from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "min": { - SchemaProps: spec.SchemaProps{ - Description: "min is the start of the range, inclusive.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "max": { - SchemaProps: spec.SchemaProps{ - Description: "max is the end of the range, inclusive.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"min", "max"}, - }, - }, - } -} - -func schema_k8sio_api_extensions_v1beta1_IDRange(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IDRange provides a min/max of an allowed range of IDs. Deprecated: use IDRange from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "min": { - SchemaProps: spec.SchemaProps{ - Description: "min is the start of the range, inclusive.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "max": { - SchemaProps: spec.SchemaProps{ - Description: "max is the end of the range, inclusive.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - Required: []string{"min", "max"}, - }, - }, - } -} - -func schema_k8sio_api_extensions_v1beta1_IPBlock(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED 1.9 - This group version of IPBlock is deprecated by networking/v1/IPBlock. IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "cidr": { - SchemaProps: spec.SchemaProps{ - Description: "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"", - Type: []string{"string"}, - Format: "", - }, - }, - "except": { - SchemaProps: spec.SchemaProps{ - Description: "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"cidr"}, - }, - }, - } -} - -func schema_k8sio_api_extensions_v1beta1_Ingress(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc. DEPRECATED - This group version of Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release notes for more information.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/extensions/v1beta1.IngressSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/extensions/v1beta1.IngressStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.IngressSpec", "k8s.io/api/extensions/v1beta1.IngressStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_IngressBackend(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressBackend describes all endpoints for a given service and port.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "serviceName": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the name of the referenced service.", - Type: []string{"string"}, - Format: "", - }, - }, - "servicePort": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the port of the referenced service.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - Required: []string{"serviceName", "servicePort"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_IngressList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressList is a collection of Ingress.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of Ingress.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.Ingress"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.Ingress", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_IngressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "host": { - SchemaProps: spec.SchemaProps{ - Description: "Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the\n\t IP in the Spec of the parent Ingress.\n2. The `:` delimiter is not respected because ports are not allowed.\n\t Currently the port of an Ingress is implicitly :80 for http and\n\t :443 for https.\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.", - Type: []string{"string"}, - Format: "", - }, - }, - "http": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.HTTPIngressRuleValue"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.HTTPIngressRuleValue"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_IngressRuleValue(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressRuleValue represents a rule to apply against incoming requests. If the rule is satisfied, the request is routed to the specified backend. Currently mixing different types of rules in a single Ingress is disallowed, so exactly one of the following must be set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "http": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.HTTPIngressRuleValue"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.HTTPIngressRuleValue"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_IngressSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressSpec describes the Ingress the user wishes to exist.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "backend": { - SchemaProps: spec.SchemaProps{ - Description: "A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.", - Ref: ref("k8s.io/api/extensions/v1beta1.IngressBackend"), - }, - }, - "tls": { - SchemaProps: spec.SchemaProps{ - Description: "TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.IngressTLS"), - }, - }, - }, - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.IngressRule"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.IngressBackend", "k8s.io/api/extensions/v1beta1.IngressRule", "k8s.io/api/extensions/v1beta1.IngressTLS"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_IngressStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressStatus describe the current state of the Ingress.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "loadBalancer": { - SchemaProps: spec.SchemaProps{ - Description: "LoadBalancer contains the current status of the load-balancer.", - Ref: ref("k8s.io/api/core/v1.LoadBalancerStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LoadBalancerStatus"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_IngressTLS(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressTLS describes the transport layer security associated with an Ingress.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "hosts": { - SchemaProps: spec.SchemaProps{ - Description: "Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "secretName": { - SchemaProps: spec.SchemaProps{ - Description: "SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_extensions_v1beta1_NetworkPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. NetworkPolicy describes what network traffic is allowed for a set of Pods", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior for this NetworkPolicy.", - Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicySpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.NetworkPolicySpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_NetworkPolicyEgressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED 1.9 - This group version of NetworkPolicyEgressRule is deprecated by networking/v1/NetworkPolicyEgressRule. NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ports": { - SchemaProps: spec.SchemaProps{ - Description: "List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyPort"), - }, - }, - }, - }, - }, - "to": { - SchemaProps: spec.SchemaProps{ - Description: "List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyPeer"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.NetworkPolicyPeer", "k8s.io/api/extensions/v1beta1.NetworkPolicyPort"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_NetworkPolicyIngressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED 1.9 - This group version of NetworkPolicyIngressRule is deprecated by networking/v1/NetworkPolicyIngressRule. This NetworkPolicyIngressRule matches traffic if and only if the traffic matches both ports AND from.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ports": { - SchemaProps: spec.SchemaProps{ - Description: "List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyPort"), - }, - }, - }, - }, - }, - "from": { - SchemaProps: spec.SchemaProps{ - Description: "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyPeer"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.NetworkPolicyPeer", "k8s.io/api/extensions/v1beta1.NetworkPolicyPort"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_NetworkPolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED 1.9 - This group version of NetworkPolicyList is deprecated by networking/v1/NetworkPolicyList. Network Policy List is a list of NetworkPolicy objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of schema objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicy"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.NetworkPolicy", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_NetworkPolicyPeer(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED 1.9 - This group version of NetworkPolicyPeer is deprecated by networking/v1/NetworkPolicyPeer.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "podSelector": { - SchemaProps: spec.SchemaProps{ - Description: "This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\n\nIf NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "namespaceSelector": { - SchemaProps: spec.SchemaProps{ - Description: "Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\n\nIf PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "ipBlock": { - SchemaProps: spec.SchemaProps{ - Description: "IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.", - Ref: ref("k8s.io/api/extensions/v1beta1.IPBlock"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.IPBlock", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_NetworkPolicyPort(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED 1.9 - This group version of NetworkPolicyPort is deprecated by networking/v1/NetworkPolicyPort.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "protocol": { - SchemaProps: spec.SchemaProps{ - Description: "Optional. The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", - Type: []string{"string"}, - Format: "", - }, - }, - "port": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, the port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers. If present, only traffic on the specified protocol AND port will be matched.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_NetworkPolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED 1.9 - This group version of NetworkPolicySpec is deprecated by networking/v1/NetworkPolicySpec.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "podSelector": { - SchemaProps: spec.SchemaProps{ - Description: "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "ingress": { - SchemaProps: spec.SchemaProps{ - Description: "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default).", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyIngressRule"), - }, - }, - }, - }, - }, - "egress": { - SchemaProps: spec.SchemaProps{ - Description: "List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.NetworkPolicyEgressRule"), - }, - }, - }, - }, - }, - "policyTypes": { - SchemaProps: spec.SchemaProps{ - Description: "List of rule types that the NetworkPolicy relates to. Valid options are \"Ingress\", \"Egress\", or \"Ingress,Egress\". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"podSelector"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.NetworkPolicyEgressRule", "k8s.io/api/extensions/v1beta1.NetworkPolicyIngressRule", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_PodSecurityPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container. Deprecated: use PodSecurityPolicy from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "spec defines the policy enforced.", - Ref: ref("k8s.io/api/extensions/v1beta1.PodSecurityPolicySpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.PodSecurityPolicySpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_PodSecurityPolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodSecurityPolicyList is a list of PodSecurityPolicy objects. Deprecated: use PodSecurityPolicyList from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is a list of schema objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.PodSecurityPolicy"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.PodSecurityPolicy", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_PodSecurityPolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodSecurityPolicySpec defines the policy enforced. Deprecated: use PodSecurityPolicySpec from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "privileged": { - SchemaProps: spec.SchemaProps{ - Description: "privileged determines if a pod can request to be run as privileged.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "defaultAddCapabilities": { - SchemaProps: spec.SchemaProps{ - Description: "defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "requiredDropCapabilities": { - SchemaProps: spec.SchemaProps{ - Description: "requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "allowedCapabilities": { - SchemaProps: spec.SchemaProps{ - Description: "allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "volumes": { - SchemaProps: spec.SchemaProps{ - Description: "volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "hostNetwork": { - SchemaProps: spec.SchemaProps{ - Description: "hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "hostPorts": { - SchemaProps: spec.SchemaProps{ - Description: "hostPorts determines which host port ranges are allowed to be exposed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.HostPortRange"), - }, - }, - }, - }, - }, - "hostPID": { - SchemaProps: spec.SchemaProps{ - Description: "hostPID determines if the policy allows the use of HostPID in the pod spec.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "hostIPC": { - SchemaProps: spec.SchemaProps{ - Description: "hostIPC determines if the policy allows the use of HostIPC in the pod spec.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "seLinux": { - SchemaProps: spec.SchemaProps{ - Description: "seLinux is the strategy that will dictate the allowable labels that may be set.", - Ref: ref("k8s.io/api/extensions/v1beta1.SELinuxStrategyOptions"), - }, - }, - "runAsUser": { - SchemaProps: spec.SchemaProps{ - Description: "runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.", - Ref: ref("k8s.io/api/extensions/v1beta1.RunAsUserStrategyOptions"), - }, - }, - "runAsGroup": { - SchemaProps: spec.SchemaProps{ - Description: "RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.", - Ref: ref("k8s.io/api/extensions/v1beta1.RunAsGroupStrategyOptions"), - }, - }, - "supplementalGroups": { - SchemaProps: spec.SchemaProps{ - Description: "supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", - Ref: ref("k8s.io/api/extensions/v1beta1.SupplementalGroupsStrategyOptions"), - }, - }, - "fsGroup": { - SchemaProps: spec.SchemaProps{ - Description: "fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.", - Ref: ref("k8s.io/api/extensions/v1beta1.FSGroupStrategyOptions"), - }, - }, - "readOnlyRootFilesystem": { - SchemaProps: spec.SchemaProps{ - Description: "readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "defaultAllowPrivilegeEscalation": { - SchemaProps: spec.SchemaProps{ - Description: "defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "allowPrivilegeEscalation": { - SchemaProps: spec.SchemaProps{ - Description: "allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "allowedHostPaths": { - SchemaProps: spec.SchemaProps{ - Description: "allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.AllowedHostPath"), - }, - }, - }, - }, - }, - "allowedFlexVolumes": { - SchemaProps: spec.SchemaProps{ - Description: "allowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.AllowedFlexVolume"), - }, - }, - }, - }, - }, - "allowedCSIDrivers": { - SchemaProps: spec.SchemaProps{ - Description: "AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. An empty value means no CSI drivers can run inline within a pod spec.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.AllowedCSIDriver"), - }, - }, - }, - }, - }, - "allowedUnsafeSysctls": { - SchemaProps: spec.SchemaProps{ - Description: "allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "forbiddenSysctls": { - SchemaProps: spec.SchemaProps{ - Description: "forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "allowedProcMountTypes": { - SchemaProps: spec.SchemaProps{ - Description: "AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"seLinux", "runAsUser", "supplementalGroups", "fsGroup"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.AllowedCSIDriver", "k8s.io/api/extensions/v1beta1.AllowedFlexVolume", "k8s.io/api/extensions/v1beta1.AllowedHostPath", "k8s.io/api/extensions/v1beta1.FSGroupStrategyOptions", "k8s.io/api/extensions/v1beta1.HostPortRange", "k8s.io/api/extensions/v1beta1.RunAsGroupStrategyOptions", "k8s.io/api/extensions/v1beta1.RunAsUserStrategyOptions", "k8s.io/api/extensions/v1beta1.SELinuxStrategyOptions", "k8s.io/api/extensions/v1beta1.SupplementalGroupsStrategyOptions"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_ReplicaSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/extensions/v1beta1.ReplicaSetSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/extensions/v1beta1.ReplicaSetStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.ReplicaSetSpec", "k8s.io/api/extensions/v1beta1.ReplicaSetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_ReplicaSetCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetCondition describes the state of a replica set at a certain point.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of replica set condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "The last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "The reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human readable message indicating details about the transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_ReplicaSetList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetList is a collection of ReplicaSets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of ReplicaSets. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.ReplicaSet"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.ReplicaSet", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_ReplicaSetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetSpec is the specification of a ReplicaSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Replicas is the number of desired replicas. This is a pointer to distinguish between explicit zero and unspecified. Defaults to 1. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "minReadySeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Minimum number of seconds for which a newly created pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "Selector is a label query over pods that should match the replica count. If the selector is empty, it is defaulted to the labels present on the pod template. Label keys and values that must match in order to be controlled by this replica set. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "template": { - SchemaProps: spec.SchemaProps{ - Description: "Template is the object that describes the pod that will be created if insufficient replicas are detected. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", - Ref: ref("k8s.io/api/core/v1.PodTemplateSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.PodTemplateSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_ReplicaSetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetStatus represents the current status of a ReplicaSet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "Replicas is the most recently oberved number of replicas. More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "fullyLabeledReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of pods that have labels matching the labels of the pod template of the replicaset.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readyReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of ready replicas for this replica set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "availableReplicas": { - SchemaProps: spec.SchemaProps{ - Description: "The number of available replicas (ready for at least minReadySeconds) for this replica set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "ObservedGeneration reflects the generation of the most recently observed ReplicaSet.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Represents the latest available observations of a replica set's current state.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.ReplicaSetCondition"), - }, - }, - }, - }, - }, - }, - Required: []string{"replicas"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.ReplicaSetCondition"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_ReplicationControllerDummy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Dummy definition", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_extensions_v1beta1_RollbackConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "revision": { - SchemaProps: spec.SchemaProps{ - Description: "The revision to rollback to. If set to 0, rollback to the last revision.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_extensions_v1beta1_RollingUpdateDaemonSet(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Spec to control the desired behavior of daemon set rolling update.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "maxUnavailable": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_RollingUpdateDeployment(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Spec to control the desired behavior of rolling update.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "maxUnavailable": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum number of pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). Absolute number is calculated from percentage by rounding down. This can not be 0 if MaxSurge is 0. By default, a fixed value of 1 is used. Example: when this is set to 30%, the old RC can be scaled down to 70% of desired pods immediately when the rolling update starts. Once new pods are ready, old RC can be scaled down further, followed by scaling up the new RC, ensuring that the total number of pods available at all times during the update is at least 70% of desired pods.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - "maxSurge": { - SchemaProps: spec.SchemaProps{ - Description: "The maximum number of pods that can be scheduled above the desired number of pods. Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%). This can not be 0 if MaxUnavailable is 0. Absolute number is calculated from percentage by rounding up. By default, a value of 1 is used. Example: when this is set to 30%, the new RC can be scaled up immediately when the rolling update starts, such that the total number of old and new pods do not exceed 130% of desired pods. Once old pods have been killed, new RC can be scaled up further, ensuring that total number of pods running at any time during the update is at most 130% of desired pods.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_RunAsGroupStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsGroupStrategyOptions from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "rule": { - SchemaProps: spec.SchemaProps{ - Description: "rule is the strategy that will dictate the allowable RunAsGroup values that may be set.", - Type: []string{"string"}, - Format: "", - }, - }, - "ranges": { - SchemaProps: spec.SchemaProps{ - Description: "ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.IDRange"), - }, - }, - }, - }, - }, - }, - Required: []string{"rule"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.IDRange"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_RunAsUserStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use RunAsUserStrategyOptions from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "rule": { - SchemaProps: spec.SchemaProps{ - Description: "rule is the strategy that will dictate the allowable RunAsUser values that may be set.", - Type: []string{"string"}, - Format: "", - }, - }, - "ranges": { - SchemaProps: spec.SchemaProps{ - Description: "ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.IDRange"), - }, - }, - }, - }, - }, - }, - Required: []string{"rule"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.IDRange"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_SELinuxStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SELinuxStrategyOptions defines the strategy type and any options used to create the strategy. Deprecated: use SELinuxStrategyOptions from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "rule": { - SchemaProps: spec.SchemaProps{ - Description: "rule is the strategy that will dictate the allowable labels that may be set.", - Type: []string{"string"}, - Format: "", - }, - }, - "seLinuxOptions": { - SchemaProps: spec.SchemaProps{ - Description: "seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", - Ref: ref("k8s.io/api/core/v1.SELinuxOptions"), - }, - }, - }, - Required: []string{"rule"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.SELinuxOptions"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_Scale(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "represents a scaling request for a resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata; More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "defines the behavior of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status.", - Ref: ref("k8s.io/api/extensions/v1beta1.ScaleSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "current status of the scale. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status. Read-only.", - Ref: ref("k8s.io/api/extensions/v1beta1.ScaleStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.ScaleSpec", "k8s.io/api/extensions/v1beta1.ScaleStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_extensions_v1beta1_ScaleSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "describes the attributes of a scale subresource", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "desired number of instances for the scaled object.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_extensions_v1beta1_ScaleStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "represents the current status of a scale subresource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "replicas": { - SchemaProps: spec.SchemaProps{ - Description: "actual number of observed instances of the scaled object.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "label query over pods that should match the replicas count. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "targetSelector": { - SchemaProps: spec.SchemaProps{ - Description: "label selector for pods that should match the replicas count. This is a serializated version of both map-based and more expressive set-based selectors. This is done to avoid introspection in the clients. The string will be in the same format as the query-param syntax. If the target type only supports map-based selectors, both this field and map-based selector field are populated. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"replicas"}, - }, - }, - } -} - -func schema_k8sio_api_extensions_v1beta1_SupplementalGroupsStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy. Deprecated: use SupplementalGroupsStrategyOptions from policy API Group instead.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "rule": { - SchemaProps: spec.SchemaProps{ - Description: "rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.", - Type: []string{"string"}, - Format: "", - }, - }, - "ranges": { - SchemaProps: spec.SchemaProps{ - Description: "ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/extensions/v1beta1.IDRange"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/extensions/v1beta1.IDRange"}, - } -} - -func schema_k8sio_api_imagepolicy_v1alpha1_ImageReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ImageReview checks if the set of images in a pod are allowed.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information about the pod being evaluated", - Ref: ref("k8s.io/api/imagepolicy/v1alpha1.ImageReviewSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the backend and indicates whether the pod should be allowed.", - Ref: ref("k8s.io/api/imagepolicy/v1alpha1.ImageReviewStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/imagepolicy/v1alpha1.ImageReviewSpec", "k8s.io/api/imagepolicy/v1alpha1.ImageReviewStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewContainerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ImageReviewContainerSpec is a description of a container within the pod creation request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "image": { - SchemaProps: spec.SchemaProps{ - Description: "This can be in the form image:tag or image@SHA:012345679abcdef.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ImageReviewSpec is a description of the pod creation request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "containers": { - SchemaProps: spec.SchemaProps{ - Description: "Containers is a list of a subset of the information in each container of the Pod being created.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/imagepolicy/v1alpha1.ImageReviewContainerSpec"), - }, - }, - }, - }, - }, - "annotations": { - SchemaProps: spec.SchemaProps{ - Description: "Annotations is a list of key-value pairs extracted from the Pod's annotations. It only includes keys which match the pattern `*.image-policy.k8s.io/*`. It is up to each webhook backend to determine how to interpret these annotations, if at all.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace is the namespace the pod is being created in.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/imagepolicy/v1alpha1.ImageReviewContainerSpec"}, - } -} - -func schema_k8sio_api_imagepolicy_v1alpha1_ImageReviewStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ImageReviewStatus is the result of the review for the pod creation request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "allowed": { - SchemaProps: spec.SchemaProps{ - Description: "Allowed indicates that all images were allowed to be run.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "Reason should be empty unless Allowed is false in which case it may contain a short description of what is wrong. Kubernetes may truncate excessively long errors when displaying to the user.", - Type: []string{"string"}, - Format: "", - }, - }, - "auditAnnotations": { - SchemaProps: spec.SchemaProps{ - Description: "AuditAnnotations will be added to the attributes object of the admission controller request using 'AddAnnotation'. The keys should be prefix-less (i.e., the admission controller will add an appropriate prefix).", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"allowed"}, - }, - }, - } -} - -func schema_k8sio_api_networking_v1_IPBlock(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IPBlock describes a particular CIDR (Ex. \"192.168.1.1/24\") that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The except entry describes CIDRs that should not be included within this rule.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "cidr": { - SchemaProps: spec.SchemaProps{ - Description: "CIDR is a string representing the IP Block Valid examples are \"192.168.1.1/24\"", - Type: []string{"string"}, - Format: "", - }, - }, - "except": { - SchemaProps: spec.SchemaProps{ - Description: "Except is a slice of CIDRs that should not be included within an IP Block Valid examples are \"192.168.1.1/24\" Except values will be rejected if they are outside the CIDR range", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"cidr"}, - }, - }, - } -} - -func schema_k8sio_api_networking_v1_NetworkPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NetworkPolicy describes what network traffic is allowed for a set of Pods", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior for this NetworkPolicy.", - Ref: ref("k8s.io/api/networking/v1.NetworkPolicySpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1.NetworkPolicySpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_networking_v1_NetworkPolicyEgressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NetworkPolicyEgressRule describes a particular set of traffic that is allowed out of pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and to. This type is beta-level in 1.8", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ports": { - SchemaProps: spec.SchemaProps{ - Description: "List of destination ports for outgoing traffic. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1.NetworkPolicyPort"), - }, - }, - }, - }, - }, - "to": { - SchemaProps: spec.SchemaProps{ - Description: "List of destinations for outgoing traffic of pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all destinations (traffic not restricted by destination). If this field is present and contains at least one item, this rule allows traffic only if the traffic matches at least one item in the to list.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1.NetworkPolicyPeer"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1.NetworkPolicyPeer", "k8s.io/api/networking/v1.NetworkPolicyPort"}, - } -} - -func schema_k8sio_api_networking_v1_NetworkPolicyIngressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NetworkPolicyIngressRule describes a particular set of traffic that is allowed to the pods matched by a NetworkPolicySpec's podSelector. The traffic must match both ports and from.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ports": { - SchemaProps: spec.SchemaProps{ - Description: "List of ports which should be made accessible on the pods selected for this rule. Each item in this list is combined using a logical OR. If this field is empty or missing, this rule matches all ports (traffic not restricted by port). If this field is present and contains at least one item, then this rule allows traffic only if the traffic matches at least one port in the list.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1.NetworkPolicyPort"), - }, - }, - }, - }, - }, - "from": { - SchemaProps: spec.SchemaProps{ - Description: "List of sources which should be able to access the pods selected for this rule. Items in this list are combined using a logical OR operation. If this field is empty or missing, this rule matches all sources (traffic not restricted by source). If this field is present and contains at least on item, this rule allows traffic only if the traffic matches at least one item in the from list.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1.NetworkPolicyPeer"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1.NetworkPolicyPeer", "k8s.io/api/networking/v1.NetworkPolicyPort"}, - } -} - -func schema_k8sio_api_networking_v1_NetworkPolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NetworkPolicyList is a list of NetworkPolicy objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of schema objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1.NetworkPolicy"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1.NetworkPolicy", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_networking_v1_NetworkPolicyPeer(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NetworkPolicyPeer describes a peer to allow traffic from. Only certain combinations of fields are allowed", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "podSelector": { - SchemaProps: spec.SchemaProps{ - Description: "This is a label selector which selects Pods. This field follows standard label selector semantics; if present but empty, it selects all pods.\n\nIf NamespaceSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects the Pods matching PodSelector in the policy's own Namespace.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "namespaceSelector": { - SchemaProps: spec.SchemaProps{ - Description: "Selects Namespaces using cluster-scoped labels. This field follows standard label selector semantics; if present but empty, it selects all namespaces.\n\nIf PodSelector is also set, then the NetworkPolicyPeer as a whole selects the Pods matching PodSelector in the Namespaces selected by NamespaceSelector. Otherwise it selects all Pods in the Namespaces selected by NamespaceSelector.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "ipBlock": { - SchemaProps: spec.SchemaProps{ - Description: "IPBlock defines policy on a particular IPBlock. If this field is set then neither of the other fields can be.", - Ref: ref("k8s.io/api/networking/v1.IPBlock"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1.IPBlock", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_networking_v1_NetworkPolicyPort(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NetworkPolicyPort describes a port to allow traffic on", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "protocol": { - SchemaProps: spec.SchemaProps{ - Description: "The protocol (TCP, UDP, or SCTP) which traffic must match. If not specified, this field defaults to TCP.", - Type: []string{"string"}, - Format: "", - }, - }, - "port": { - SchemaProps: spec.SchemaProps{ - Description: "The port on the given protocol. This can either be a numerical or named port on a pod. If this field is not provided, this matches all port names and numbers.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_networking_v1_NetworkPolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NetworkPolicySpec provides the specification of a NetworkPolicy", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "podSelector": { - SchemaProps: spec.SchemaProps{ - Description: "Selects the pods to which this NetworkPolicy object applies. The array of ingress rules is applied to any pods selected by this field. Multiple network policies can select the same set of pods. In this case, the ingress rules for each are combined additively. This field is NOT optional and follows standard label selector semantics. An empty podSelector matches all pods in this namespace.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "ingress": { - SchemaProps: spec.SchemaProps{ - Description: "List of ingress rules to be applied to the selected pods. Traffic is allowed to a pod if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic source is the pod's local node, OR if the traffic matches at least one ingress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy does not allow any traffic (and serves solely to ensure that the pods it selects are isolated by default)", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1.NetworkPolicyIngressRule"), - }, - }, - }, - }, - }, - "egress": { - SchemaProps: spec.SchemaProps{ - Description: "List of egress rules to be applied to the selected pods. Outgoing traffic is allowed if there are no NetworkPolicies selecting the pod (and cluster policy otherwise allows the traffic), OR if the traffic matches at least one egress rule across all of the NetworkPolicy objects whose podSelector matches the pod. If this field is empty then this NetworkPolicy limits all outgoing traffic (and serves solely to ensure that the pods it selects are isolated by default). This field is beta-level in 1.8", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1.NetworkPolicyEgressRule"), - }, - }, - }, - }, - }, - "policyTypes": { - SchemaProps: spec.SchemaProps{ - Description: "List of rule types that the NetworkPolicy relates to. Valid options are \"Ingress\", \"Egress\", or \"Ingress,Egress\". If this field is not specified, it will default based on the existence of Ingress or Egress rules; policies that contain an Egress section are assumed to affect Egress, and all policies (whether or not they contain an Ingress section) are assumed to affect Ingress. If you want to write an egress-only policy, you must explicitly specify policyTypes [ \"Egress\" ]. Likewise, if you want to write a policy that specifies that no egress is allowed, you must specify a policyTypes value that include \"Egress\" (since such a policy would not include an Egress section and would otherwise default to just [ \"Ingress\" ]). This field is beta-level in 1.8", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"podSelector"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1.NetworkPolicyEgressRule", "k8s.io/api/networking/v1.NetworkPolicyIngressRule", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_networking_v1beta1_HTTPIngressPath(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.", - Type: []string{"string"}, - Format: "", - }, - }, - "backend": { - SchemaProps: spec.SchemaProps{ - Description: "Backend defines the referenced service endpoint to which the traffic will be forwarded to.", - Ref: ref("k8s.io/api/networking/v1beta1.IngressBackend"), - }, - }, - }, - Required: []string{"backend"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1beta1.IngressBackend"}, - } -} - -func schema_k8sio_api_networking_v1beta1_HTTPIngressRuleValue(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "paths": { - SchemaProps: spec.SchemaProps{ - Description: "A collection of paths that map requests to backends.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1beta1.HTTPIngressPath"), - }, - }, - }, - }, - }, - }, - Required: []string{"paths"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1beta1.HTTPIngressPath"}, - } -} - -func schema_k8sio_api_networking_v1beta1_Ingress(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/networking/v1beta1.IngressSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/networking/v1beta1.IngressStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1beta1.IngressSpec", "k8s.io/api/networking/v1beta1.IngressStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_networking_v1beta1_IngressBackend(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressBackend describes all endpoints for a given service and port.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "serviceName": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the name of the referenced service.", - Type: []string{"string"}, - Format: "", - }, - }, - "servicePort": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the port of the referenced service.", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - Required: []string{"serviceName", "servicePort"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_networking_v1beta1_IngressList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressList is a collection of Ingress.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of Ingress.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1beta1.Ingress"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1beta1.Ingress", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_networking_v1beta1_IngressRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "host": { - SchemaProps: spec.SchemaProps{ - Description: "Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the\n\t IP in the Spec of the parent Ingress.\n2. The `:` delimiter is not respected because ports are not allowed.\n\t Currently the port of an Ingress is implicitly :80 for http and\n\t :443 for https.\nBoth these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.", - Type: []string{"string"}, - Format: "", - }, - }, - "http": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1beta1.HTTPIngressRuleValue"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1beta1.HTTPIngressRuleValue"}, - } -} - -func schema_k8sio_api_networking_v1beta1_IngressRuleValue(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressRuleValue represents a rule to apply against incoming requests. If the rule is satisfied, the request is routed to the specified backend. Currently mixing different types of rules in a single Ingress is disallowed, so exactly one of the following must be set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "http": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1beta1.HTTPIngressRuleValue"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1beta1.HTTPIngressRuleValue"}, - } -} - -func schema_k8sio_api_networking_v1beta1_IngressSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressSpec describes the Ingress the user wishes to exist.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "backend": { - SchemaProps: spec.SchemaProps{ - Description: "A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.", - Ref: ref("k8s.io/api/networking/v1beta1.IngressBackend"), - }, - }, - "tls": { - SchemaProps: spec.SchemaProps{ - Description: "TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1beta1.IngressTLS"), - }, - }, - }, - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/networking/v1beta1.IngressRule"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/networking/v1beta1.IngressBackend", "k8s.io/api/networking/v1beta1.IngressRule", "k8s.io/api/networking/v1beta1.IngressTLS"}, - } -} - -func schema_k8sio_api_networking_v1beta1_IngressStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressStatus describe the current state of the Ingress.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "loadBalancer": { - SchemaProps: spec.SchemaProps{ - Description: "LoadBalancer contains the current status of the load-balancer.", - Ref: ref("k8s.io/api/core/v1.LoadBalancerStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.LoadBalancerStatus"}, - } -} - -func schema_k8sio_api_networking_v1beta1_IngressTLS(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IngressTLS describes the transport layer security associated with an Ingress.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "hosts": { - SchemaProps: spec.SchemaProps{ - Description: "Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "secretName": { - SchemaProps: spec.SchemaProps{ - Description: "SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_node_v1alpha1_RuntimeClass(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the RuntimeClass More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/api/node/v1alpha1.RuntimeClassSpec"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/node/v1alpha1.RuntimeClassSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_node_v1alpha1_RuntimeClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RuntimeClassList is a list of RuntimeClass objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of schema objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/node/v1alpha1.RuntimeClass"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/node/v1alpha1.RuntimeClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_node_v1alpha1_RuntimeClassSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RuntimeClassSpec is a specification of a RuntimeClass. It contains parameters that are required to describe the RuntimeClass to the Container Runtime Interface (CRI) implementation, as well as any other components that need to understand how the pod will be run. The RuntimeClassSpec is immutable.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "runtimeHandler": { - SchemaProps: spec.SchemaProps{ - Description: "RuntimeHandler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node & CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called \"runc\" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The RuntimeHandler must conform to the DNS Label (RFC 1123) requirements and is immutable.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"runtimeHandler"}, - }, - }, - } -} - -func schema_k8sio_api_node_v1beta1_RuntimeClass(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "handler": { - SchemaProps: spec.SchemaProps{ - Description: "Handler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node & CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called \"runc\" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The Handler must conform to the DNS Label (RFC 1123) requirements, and is immutable.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"handler"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_node_v1beta1_RuntimeClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RuntimeClassList is a list of RuntimeClass objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of schema objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/node/v1beta1.RuntimeClass"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/node/v1beta1.RuntimeClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_policy_v1beta1_AllowedCSIDriver(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AllowedCSIDriver represents a single inline CSI Driver that is allowed to be used.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the registered name of the CSI driver", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name"}, - }, - }, - } -} - -func schema_k8sio_api_policy_v1beta1_AllowedFlexVolume(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AllowedFlexVolume represents a single Flexvolume that is allowed to be used.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "driver": { - SchemaProps: spec.SchemaProps{ - Description: "driver is the name of the Flexvolume driver.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"driver"}, - }, - }, - } -} - -func schema_k8sio_api_policy_v1beta1_AllowedHostPath(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AllowedHostPath defines the host volume conditions that will be enabled by a policy for pods to use. It requires the path prefix to be defined.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "pathPrefix": { - SchemaProps: spec.SchemaProps{ - Description: "pathPrefix is the path prefix that the host volume must match. It does not support `*`. Trailing slashes are trimmed when validating the path prefix with a host path.\n\nExamples: `/foo` would allow `/foo`, `/foo/` and `/foo/bar` `/foo` would not allow `/food` or `/etc/foo`", - Type: []string{"string"}, - Format: "", - }, - }, - "readOnly": { - SchemaProps: spec.SchemaProps{ - Description: "when set to true, will allow host volumes matching the pathPrefix only if all volume mounts are readOnly.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_policy_v1beta1_Eviction(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Eviction evicts a pod from its node subject to certain policies and safety constraints. This is a subresource of Pod. A request to cause such an eviction is created by POSTing to .../pods//evictions.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "ObjectMeta describes the pod that is being evicted.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "deleteOptions": { - SchemaProps: spec.SchemaProps{ - Description: "DeleteOptions may be provided", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.DeleteOptions", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_policy_v1beta1_FSGroupStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "FSGroupStrategyOptions defines the strategy type and options used to create the strategy.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "rule": { - SchemaProps: spec.SchemaProps{ - Description: "rule is the strategy that will dictate what FSGroup is used in the SecurityContext.", - Type: []string{"string"}, - Format: "", - }, - }, - "ranges": { - SchemaProps: spec.SchemaProps{ - Description: "ranges are the allowed ranges of fs groups. If you would like to force a single fs group then supply a single range with the same start and end. Required for MustRunAs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/policy/v1beta1.IDRange"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/policy/v1beta1.IDRange"}, - } -} - -func schema_k8sio_api_policy_v1beta1_HostPortRange(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HostPortRange defines a range of host ports that will be enabled by a policy for pods to use. It requires both the start and end to be defined.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "min": { - SchemaProps: spec.SchemaProps{ - Description: "min is the start of the range, inclusive.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "max": { - SchemaProps: spec.SchemaProps{ - Description: "max is the end of the range, inclusive.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"min", "max"}, - }, - }, - } -} - -func schema_k8sio_api_policy_v1beta1_IDRange(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IDRange provides a min/max of an allowed range of IDs.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "min": { - SchemaProps: spec.SchemaProps{ - Description: "min is the start of the range, inclusive.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "max": { - SchemaProps: spec.SchemaProps{ - Description: "max is the end of the range, inclusive.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - Required: []string{"min", "max"}, - }, - }, - } -} - -func schema_k8sio_api_policy_v1beta1_PodDisruptionBudget(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodDisruptionBudget is an object to define the max disruption that can be caused to a collection of pods", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired behavior of the PodDisruptionBudget.", - Ref: ref("k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Most recently observed status of the PodDisruptionBudget.", - Ref: ref("k8s.io/api/policy/v1beta1.PodDisruptionBudgetStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/policy/v1beta1.PodDisruptionBudgetSpec", "k8s.io/api/policy/v1beta1.PodDisruptionBudgetStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodDisruptionBudgetList is a collection of PodDisruptionBudgets.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/policy/v1beta1.PodDisruptionBudget"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/policy/v1beta1.PodDisruptionBudget", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodDisruptionBudgetSpec is a description of a PodDisruptionBudget.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "minAvailable": { - SchemaProps: spec.SchemaProps{ - Description: "An eviction is allowed if at least \"minAvailable\" pods selected by \"selector\" will still be available after the eviction, i.e. even in the absence of the evicted pod. So for example you can prevent all voluntary evictions by specifying \"100%\".", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "Label query over pods whose evictions are managed by the disruption budget.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "maxUnavailable": { - SchemaProps: spec.SchemaProps{ - Description: "An eviction is allowed if at most \"maxUnavailable\" pods selected by \"selector\" are unavailable after the eviction, i.e. even in absence of the evicted pod. For example, one can prevent all voluntary evictions by specifying 0. This is a mutually exclusive setting with \"minAvailable\".", - Ref: ref("k8s.io/apimachinery/pkg/util/intstr.IntOrString"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector", "k8s.io/apimachinery/pkg/util/intstr.IntOrString"}, - } -} - -func schema_k8sio_api_policy_v1beta1_PodDisruptionBudgetStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodDisruptionBudgetStatus represents information about the status of a PodDisruptionBudget. Status may trail the actual state of a system.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "observedGeneration": { - SchemaProps: spec.SchemaProps{ - Description: "Most recent generation observed when updating this PDB status. PodDisruptionsAllowed and other status informatio is valid only if observedGeneration equals to PDB's object generation.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "disruptedPods": { - SchemaProps: spec.SchemaProps{ - Description: "DisruptedPods contains information about pods whose eviction was processed by the API server eviction subresource handler but has not yet been observed by the PodDisruptionBudget controller. A pod will be in this map from the time when the API server processed the eviction request to the time when the pod is seen by PDB controller as having been marked for deletion (or after a timeout). The key in the map is the name of the pod and the value is the time when the API server processed the eviction request. If the deletion didn't occur and a pod is still there it will be removed from the list automatically by PodDisruptionBudget controller after some time. If everything goes smooth this map should be empty for the most of the time. Large number of entries in the map may indicate problems with pod deletions.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - }, - }, - }, - "disruptionsAllowed": { - SchemaProps: spec.SchemaProps{ - Description: "Number of pod disruptions that are currently allowed.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "currentHealthy": { - SchemaProps: spec.SchemaProps{ - Description: "current number of healthy pods", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "desiredHealthy": { - SchemaProps: spec.SchemaProps{ - Description: "minimum desired number of healthy pods", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "expectedPods": { - SchemaProps: spec.SchemaProps{ - Description: "total number of pods counted by this disruption budget", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"disruptionsAllowed", "currentHealthy", "desiredHealthy", "expectedPods"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_policy_v1beta1_PodSecurityPolicy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "spec defines the policy enforced.", - Ref: ref("k8s.io/api/policy/v1beta1.PodSecurityPolicySpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/policy/v1beta1.PodSecurityPolicySpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_policy_v1beta1_PodSecurityPolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodSecurityPolicyList is a list of PodSecurityPolicy objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is a list of schema objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/policy/v1beta1.PodSecurityPolicy"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/policy/v1beta1.PodSecurityPolicy", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_policy_v1beta1_PodSecurityPolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodSecurityPolicySpec defines the policy enforced.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "privileged": { - SchemaProps: spec.SchemaProps{ - Description: "privileged determines if a pod can request to be run as privileged.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "defaultAddCapabilities": { - SchemaProps: spec.SchemaProps{ - Description: "defaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capability in both defaultAddCapabilities and requiredDropCapabilities. Capabilities added here are implicitly allowed, and need not be included in the allowedCapabilities list.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "requiredDropCapabilities": { - SchemaProps: spec.SchemaProps{ - Description: "requiredDropCapabilities are the capabilities that will be dropped from the container. These are required to be dropped and cannot be added.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "allowedCapabilities": { - SchemaProps: spec.SchemaProps{ - Description: "allowedCapabilities is a list of capabilities that can be requested to add to the container. Capabilities in this field may be added at the pod author's discretion. You must not list a capability in both allowedCapabilities and requiredDropCapabilities.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "volumes": { - SchemaProps: spec.SchemaProps{ - Description: "volumes is a white list of allowed volume plugins. Empty indicates that no volumes may be used. To allow all volumes you may use '*'.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "hostNetwork": { - SchemaProps: spec.SchemaProps{ - Description: "hostNetwork determines if the policy allows the use of HostNetwork in the pod spec.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "hostPorts": { - SchemaProps: spec.SchemaProps{ - Description: "hostPorts determines which host port ranges are allowed to be exposed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/policy/v1beta1.HostPortRange"), - }, - }, - }, - }, - }, - "hostPID": { - SchemaProps: spec.SchemaProps{ - Description: "hostPID determines if the policy allows the use of HostPID in the pod spec.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "hostIPC": { - SchemaProps: spec.SchemaProps{ - Description: "hostIPC determines if the policy allows the use of HostIPC in the pod spec.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "seLinux": { - SchemaProps: spec.SchemaProps{ - Description: "seLinux is the strategy that will dictate the allowable labels that may be set.", - Ref: ref("k8s.io/api/policy/v1beta1.SELinuxStrategyOptions"), - }, - }, - "runAsUser": { - SchemaProps: spec.SchemaProps{ - Description: "runAsUser is the strategy that will dictate the allowable RunAsUser values that may be set.", - Ref: ref("k8s.io/api/policy/v1beta1.RunAsUserStrategyOptions"), - }, - }, - "runAsGroup": { - SchemaProps: spec.SchemaProps{ - Description: "RunAsGroup is the strategy that will dictate the allowable RunAsGroup values that may be set. If this field is omitted, the pod's RunAsGroup can take any value. This field requires the RunAsGroup feature gate to be enabled.", - Ref: ref("k8s.io/api/policy/v1beta1.RunAsGroupStrategyOptions"), - }, - }, - "supplementalGroups": { - SchemaProps: spec.SchemaProps{ - Description: "supplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", - Ref: ref("k8s.io/api/policy/v1beta1.SupplementalGroupsStrategyOptions"), - }, - }, - "fsGroup": { - SchemaProps: spec.SchemaProps{ - Description: "fsGroup is the strategy that will dictate what fs group is used by the SecurityContext.", - Ref: ref("k8s.io/api/policy/v1beta1.FSGroupStrategyOptions"), - }, - }, - "readOnlyRootFilesystem": { - SchemaProps: spec.SchemaProps{ - Description: "readOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "defaultAllowPrivilegeEscalation": { - SchemaProps: spec.SchemaProps{ - Description: "defaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "allowPrivilegeEscalation": { - SchemaProps: spec.SchemaProps{ - Description: "allowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "allowedHostPaths": { - SchemaProps: spec.SchemaProps{ - Description: "allowedHostPaths is a white list of allowed host paths. Empty indicates that all host paths may be used.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/policy/v1beta1.AllowedHostPath"), - }, - }, - }, - }, - }, - "allowedFlexVolumes": { - SchemaProps: spec.SchemaProps{ - Description: "allowedFlexVolumes is a whitelist of allowed Flexvolumes. Empty or nil indicates that all Flexvolumes may be used. This parameter is effective only when the usage of the Flexvolumes is allowed in the \"volumes\" field.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/policy/v1beta1.AllowedFlexVolume"), - }, - }, - }, - }, - }, - "allowedCSIDrivers": { - SchemaProps: spec.SchemaProps{ - Description: "AllowedCSIDrivers is a whitelist of inline CSI drivers that must be explicitly set to be embedded within a pod spec. An empty value means no CSI drivers can run inline within a pod spec.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/policy/v1beta1.AllowedCSIDriver"), - }, - }, - }, - }, - }, - "allowedUnsafeSysctls": { - SchemaProps: spec.SchemaProps{ - Description: "allowedUnsafeSysctls is a list of explicitly allowed unsafe sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of allowed sysctls. Single * means all unsafe sysctls are allowed. Kubelet has to whitelist all allowed unsafe sysctls explicitly to avoid rejection.\n\nExamples: e.g. \"foo/*\" allows \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" allows \"foo.bar\", \"foo.baz\", etc.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "forbiddenSysctls": { - SchemaProps: spec.SchemaProps{ - Description: "forbiddenSysctls is a list of explicitly forbidden sysctls, defaults to none. Each entry is either a plain sysctl name or ends in \"*\" in which case it is considered as a prefix of forbidden sysctls. Single * means all sysctls are forbidden.\n\nExamples: e.g. \"foo/*\" forbids \"foo/bar\", \"foo/baz\", etc. e.g. \"foo.*\" forbids \"foo.bar\", \"foo.baz\", etc.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "allowedProcMountTypes": { - SchemaProps: spec.SchemaProps{ - Description: "AllowedProcMountTypes is a whitelist of allowed ProcMountTypes. Empty or nil indicates that only the DefaultProcMountType may be used. This requires the ProcMountType feature flag to be enabled.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"seLinux", "runAsUser", "supplementalGroups", "fsGroup"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/policy/v1beta1.AllowedCSIDriver", "k8s.io/api/policy/v1beta1.AllowedFlexVolume", "k8s.io/api/policy/v1beta1.AllowedHostPath", "k8s.io/api/policy/v1beta1.FSGroupStrategyOptions", "k8s.io/api/policy/v1beta1.HostPortRange", "k8s.io/api/policy/v1beta1.RunAsGroupStrategyOptions", "k8s.io/api/policy/v1beta1.RunAsUserStrategyOptions", "k8s.io/api/policy/v1beta1.SELinuxStrategyOptions", "k8s.io/api/policy/v1beta1.SupplementalGroupsStrategyOptions"}, - } -} - -func schema_k8sio_api_policy_v1beta1_RunAsGroupStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RunAsGroupStrategyOptions defines the strategy type and any options used to create the strategy.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "rule": { - SchemaProps: spec.SchemaProps{ - Description: "rule is the strategy that will dictate the allowable RunAsGroup values that may be set.", - Type: []string{"string"}, - Format: "", - }, - }, - "ranges": { - SchemaProps: spec.SchemaProps{ - Description: "ranges are the allowed ranges of gids that may be used. If you would like to force a single gid then supply a single range with the same start and end. Required for MustRunAs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/policy/v1beta1.IDRange"), - }, - }, - }, - }, - }, - }, - Required: []string{"rule"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/policy/v1beta1.IDRange"}, - } -} - -func schema_k8sio_api_policy_v1beta1_RunAsUserStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RunAsUserStrategyOptions defines the strategy type and any options used to create the strategy.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "rule": { - SchemaProps: spec.SchemaProps{ - Description: "rule is the strategy that will dictate the allowable RunAsUser values that may be set.", - Type: []string{"string"}, - Format: "", - }, - }, - "ranges": { - SchemaProps: spec.SchemaProps{ - Description: "ranges are the allowed ranges of uids that may be used. If you would like to force a single uid then supply a single range with the same start and end. Required for MustRunAs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/policy/v1beta1.IDRange"), - }, - }, - }, - }, - }, - }, - Required: []string{"rule"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/policy/v1beta1.IDRange"}, - } -} - -func schema_k8sio_api_policy_v1beta1_SELinuxStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SELinuxStrategyOptions defines the strategy type and any options used to create the strategy.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "rule": { - SchemaProps: spec.SchemaProps{ - Description: "rule is the strategy that will dictate the allowable labels that may be set.", - Type: []string{"string"}, - Format: "", - }, - }, - "seLinuxOptions": { - SchemaProps: spec.SchemaProps{ - Description: "seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", - Ref: ref("k8s.io/api/core/v1.SELinuxOptions"), - }, - }, - }, - Required: []string{"rule"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.SELinuxOptions"}, - } -} - -func schema_k8sio_api_policy_v1beta1_SupplementalGroupsStrategyOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SupplementalGroupsStrategyOptions defines the strategy type and options used to create the strategy.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "rule": { - SchemaProps: spec.SchemaProps{ - Description: "rule is the strategy that will dictate what supplemental groups is used in the SecurityContext.", - Type: []string{"string"}, - Format: "", - }, - }, - "ranges": { - SchemaProps: spec.SchemaProps{ - Description: "ranges are the allowed ranges of supplemental groups. If you would like to force a single supplemental group then supply a single range with the same start and end. Required for MustRunAs.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/policy/v1beta1.IDRange"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/policy/v1beta1.IDRange"}, - } -} - -func schema_k8sio_api_rbac_v1_AggregationRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "clusterRoleSelectors": { - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_rbac_v1_ClusterRole(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "Rules holds all the PolicyRules for this ClusterRole", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1.PolicyRule"), - }, - }, - }, - }, - }, - "aggregationRule": { - SchemaProps: spec.SchemaProps{ - Description: "AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.", - Ref: ref("k8s.io/api/rbac/v1.AggregationRule"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1.AggregationRule", "k8s.io/api/rbac/v1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1_ClusterRoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "subjects": { - SchemaProps: spec.SchemaProps{ - Description: "Subjects holds references to the objects the role applies to.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1.Subject"), - }, - }, - }, - }, - }, - "roleRef": { - SchemaProps: spec.SchemaProps{ - Description: "RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - Ref: ref("k8s.io/api/rbac/v1.RoleRef"), - }, - }, - }, - Required: []string{"roleRef"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1.RoleRef", "k8s.io/api/rbac/v1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1_ClusterRoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleBindingList is a collection of ClusterRoleBindings", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of ClusterRoleBindings", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1.ClusterRoleBinding"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1.ClusterRoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1_ClusterRoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleList is a collection of ClusterRoles", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of ClusterRoles", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1.ClusterRole"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1.ClusterRole", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "verbs": { - SchemaProps: spec.SchemaProps{ - Description: "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "apiGroups": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources is a list of resources this rule applies to. ResourceAll represents all resources.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resourceNames": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "nonResourceURLs": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"verbs"}, - }, - }, - } -} - -func schema_k8sio_api_rbac_v1_Role(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "Rules holds all the PolicyRules for this Role", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1.PolicyRule"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1_RoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "subjects": { - SchemaProps: spec.SchemaProps{ - Description: "Subjects holds references to the objects the role applies to.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1.Subject"), - }, - }, - }, - }, - }, - "roleRef": { - SchemaProps: spec.SchemaProps{ - Description: "RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - Ref: ref("k8s.io/api/rbac/v1.RoleRef"), - }, - }, - }, - Required: []string{"roleRef"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1.RoleRef", "k8s.io/api/rbac/v1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1_RoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleBindingList is a collection of RoleBindings", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of RoleBindings", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1.RoleBinding"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1.RoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1_RoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleList is a collection of Roles", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of Roles", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1.Role"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1.Role", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1_RoleRef(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleRef contains information that points to the role being used", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "apiGroup": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroup is the group for the resource being referenced", - Type: []string{"string"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is the type of resource being referenced", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the name of resource being referenced", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"apiGroup", "kind", "name"}, - }, - }, - } -} - -func schema_k8sio_api_rbac_v1_Subject(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.", - Type: []string{"string"}, - Format: "", - }, - }, - "apiGroup": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the object being referenced.", - Type: []string{"string"}, - Format: "", - }, - }, - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"kind", "name"}, - }, - }, - } -} - -func schema_k8sio_api_rbac_v1alpha1_AggregationRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "clusterRoleSelectors": { - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_rbac_v1alpha1_ClusterRole(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "Rules holds all the PolicyRules for this ClusterRole", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1alpha1.PolicyRule"), - }, - }, - }, - }, - }, - "aggregationRule": { - SchemaProps: spec.SchemaProps{ - Description: "AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.", - Ref: ref("k8s.io/api/rbac/v1alpha1.AggregationRule"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1alpha1.AggregationRule", "k8s.io/api/rbac/v1alpha1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1alpha1_ClusterRoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "subjects": { - SchemaProps: spec.SchemaProps{ - Description: "Subjects holds references to the objects the role applies to.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1alpha1.Subject"), - }, - }, - }, - }, - }, - "roleRef": { - SchemaProps: spec.SchemaProps{ - Description: "RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - Ref: ref("k8s.io/api/rbac/v1alpha1.RoleRef"), - }, - }, - }, - Required: []string{"roleRef"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1alpha1.RoleRef", "k8s.io/api/rbac/v1alpha1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1alpha1_ClusterRoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleBindingList is a collection of ClusterRoleBindings", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of ClusterRoleBindings", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1alpha1.ClusterRoleBinding"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1alpha1.ClusterRoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1alpha1_ClusterRoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleList is a collection of ClusterRoles", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of ClusterRoles", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1alpha1.ClusterRole"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1alpha1.ClusterRole", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1alpha1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "verbs": { - SchemaProps: spec.SchemaProps{ - Description: "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "apiGroups": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources is a list of resources this rule applies to. ResourceAll represents all resources.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resourceNames": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "nonResourceURLs": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path This name is intentionally different than the internal type so that the DefaultConvert works nicely and because the ordering may be different. Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"verbs"}, - }, - }, - } -} - -func schema_k8sio_api_rbac_v1alpha1_Role(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "Rules holds all the PolicyRules for this Role", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1alpha1.PolicyRule"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1alpha1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1alpha1_RoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "subjects": { - SchemaProps: spec.SchemaProps{ - Description: "Subjects holds references to the objects the role applies to.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1alpha1.Subject"), - }, - }, - }, - }, - }, - "roleRef": { - SchemaProps: spec.SchemaProps{ - Description: "RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - Ref: ref("k8s.io/api/rbac/v1alpha1.RoleRef"), - }, - }, - }, - Required: []string{"roleRef"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1alpha1.RoleRef", "k8s.io/api/rbac/v1alpha1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1alpha1_RoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleBindingList is a collection of RoleBindings", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of RoleBindings", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1alpha1.RoleBinding"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1alpha1.RoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1alpha1_RoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleList is a collection of Roles", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of Roles", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1alpha1.Role"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1alpha1.Role", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1alpha1_RoleRef(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleRef contains information that points to the role being used", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "apiGroup": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroup is the group for the resource being referenced", - Type: []string{"string"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is the type of resource being referenced", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the name of resource being referenced", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"apiGroup", "kind", "name"}, - }, - }, - } -} - -func schema_k8sio_api_rbac_v1alpha1_Subject(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion holds the API group and version of the referenced subject. Defaults to \"v1\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io/v1alpha1\" for User and Group subjects.", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the object being referenced.", - Type: []string{"string"}, - Format: "", - }, - }, - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"kind", "name"}, - }, - }, - } -} - -func schema_k8sio_api_rbac_v1beta1_AggregationRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AggregationRule describes how to locate ClusterRoles to aggregate into the ClusterRole", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "clusterRoleSelectors": { - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleSelectors holds a list of selectors which will be used to find ClusterRoles and create the rules. If any of the selectors match, then the ClusterRole's permissions will be added", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_rbac_v1beta1_ClusterRole(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRole is a cluster level, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding or ClusterRoleBinding.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "Rules holds all the PolicyRules for this ClusterRole", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1beta1.PolicyRule"), - }, - }, - }, - }, - }, - "aggregationRule": { - SchemaProps: spec.SchemaProps{ - Description: "AggregationRule is an optional field that describes how to build the Rules for this ClusterRole. If AggregationRule is set, then the Rules are controller managed and direct changes to Rules will be stomped by the controller.", - Ref: ref("k8s.io/api/rbac/v1beta1.AggregationRule"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1beta1.AggregationRule", "k8s.io/api/rbac/v1beta1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1beta1_ClusterRoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleBinding references a ClusterRole, but not contain it. It can reference a ClusterRole in the global namespace, and adds who information via Subject.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "subjects": { - SchemaProps: spec.SchemaProps{ - Description: "Subjects holds references to the objects the role applies to.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1beta1.Subject"), - }, - }, - }, - }, - }, - "roleRef": { - SchemaProps: spec.SchemaProps{ - Description: "RoleRef can only reference a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - Ref: ref("k8s.io/api/rbac/v1beta1.RoleRef"), - }, - }, - }, - Required: []string{"roleRef"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1beta1.RoleRef", "k8s.io/api/rbac/v1beta1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1beta1_ClusterRoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleBindingList is a collection of ClusterRoleBindings", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of ClusterRoleBindings", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1beta1.ClusterRoleBinding"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1beta1.ClusterRoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1beta1_ClusterRoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ClusterRoleList is a collection of ClusterRoles", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of ClusterRoles", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1beta1.ClusterRole"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1beta1.ClusterRole", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1beta1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "verbs": { - SchemaProps: spec.SchemaProps{ - Description: "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "apiGroups": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources is a list of resources this rule applies to. '*' represents all resources in the specified apiGroups. '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resourceNames": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "nonResourceURLs": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"verbs"}, - }, - }, - } -} - -func schema_k8sio_api_rbac_v1beta1_Role(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Role is a namespaced, logical grouping of PolicyRules that can be referenced as a unit by a RoleBinding.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "Rules holds all the PolicyRules for this Role", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1beta1.PolicyRule"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1beta1.PolicyRule", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1beta1_RoleBinding(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleBinding references a role, but does not contain it. It can reference a Role in the same namespace or a ClusterRole in the global namespace. It adds who information via Subjects and namespace information by which namespace it exists in. RoleBindings in a given namespace only have effect in that namespace.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "subjects": { - SchemaProps: spec.SchemaProps{ - Description: "Subjects holds references to the objects the role applies to.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1beta1.Subject"), - }, - }, - }, - }, - }, - "roleRef": { - SchemaProps: spec.SchemaProps{ - Description: "RoleRef can reference a Role in the current namespace or a ClusterRole in the global namespace. If the RoleRef cannot be resolved, the Authorizer must return an error.", - Ref: ref("k8s.io/api/rbac/v1beta1.RoleRef"), - }, - }, - }, - Required: []string{"roleRef"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1beta1.RoleRef", "k8s.io/api/rbac/v1beta1.Subject", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_rbac_v1beta1_RoleBindingList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleBindingList is a collection of RoleBindings", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of RoleBindings", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1beta1.RoleBinding"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1beta1.RoleBinding", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1beta1_RoleList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleList is a collection of Roles", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of Roles", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/rbac/v1beta1.Role"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/rbac/v1beta1.Role", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_rbac_v1beta1_RoleRef(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RoleRef contains information that points to the role being used", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "apiGroup": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroup is the group for the resource being referenced", - Type: []string{"string"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is the type of resource being referenced", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the name of resource being referenced", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"apiGroup", "kind", "name"}, - }, - }, - } -} - -func schema_k8sio_api_rbac_v1beta1_Subject(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Subject contains a reference to the object or user identities a role binding applies to. This can either hold a direct API object reference, or a value for non-objects such as user and group names.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind of object being referenced. Values defined by this API group are \"User\", \"Group\", and \"ServiceAccount\". If the Authorizer does not recognized the kind value, the Authorizer should report an error.", - Type: []string{"string"}, - Format: "", - }, - }, - "apiGroup": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroup holds the API group of the referenced subject. Defaults to \"\" for ServiceAccount subjects. Defaults to \"rbac.authorization.k8s.io\" for User and Group subjects.", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the object being referenced.", - Type: []string{"string"}, - Format: "", - }, - }, - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace of the referenced object. If the object kind is non-namespace, such as \"User\" or \"Group\", and this value is not empty the Authorizer should report an error.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"kind", "name"}, - }, - }, - } -} - -func schema_k8sio_api_scheduling_v1_PriorityClass(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "globalDefault": { - SchemaProps: spec.SchemaProps{ - Description: "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "description": { - SchemaProps: spec.SchemaProps{ - Description: "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"value"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_scheduling_v1_PriorityClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PriorityClassList is a collection of priority classes.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of PriorityClasses", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/scheduling/v1.PriorityClass"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/scheduling/v1.PriorityClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_scheduling_v1alpha1_PriorityClass(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "globalDefault": { - SchemaProps: spec.SchemaProps{ - Description: "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "description": { - SchemaProps: spec.SchemaProps{ - Description: "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"value"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_scheduling_v1alpha1_PriorityClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PriorityClassList is a collection of priority classes.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of PriorityClasses", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/scheduling/v1alpha1.PriorityClass"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/scheduling/v1alpha1.PriorityClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_scheduling_v1beta1_PriorityClass(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED - This group version of PriorityClass is deprecated by scheduling.k8s.io/v1/PriorityClass. PriorityClass defines mapping from a priority class name to the priority integer value. The value can be any valid integer.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "The value of this priority class. This is the actual priority that pods receive when they have the name of this class in their pod spec.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "globalDefault": { - SchemaProps: spec.SchemaProps{ - Description: "globalDefault specifies whether this PriorityClass should be considered as the default priority for pods that do not have any priority class. Only one PriorityClass can be marked as `globalDefault`. However, if more than one PriorityClasses exists with their `globalDefault` field set to true, the smallest value of such global default PriorityClasses will be used as the default priority.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "description": { - SchemaProps: spec.SchemaProps{ - Description: "description is an arbitrary string that usually provides guidelines on when this priority class should be used.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"value"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_scheduling_v1beta1_PriorityClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PriorityClassList is a collection of priority classes.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of PriorityClasses", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/scheduling/v1beta1.PriorityClass"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/scheduling/v1beta1.PriorityClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_settings_v1alpha1_PodPreset(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodPreset is a policy resource that defines additional runtime requirements for a Pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/settings/v1alpha1.PodPresetSpec"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/settings/v1alpha1.PodPresetSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_settings_v1alpha1_PodPresetList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodPresetList is a list of PodPreset objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of schema objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/settings/v1alpha1.PodPreset"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/settings/v1alpha1.PodPreset", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_settings_v1alpha1_PodPresetSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodPresetSpec is a description of a pod preset.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "Selector is a label query over a set of resources, in this case pods. Required.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - "env": { - SchemaProps: spec.SchemaProps{ - Description: "Env defines the collection of EnvVar to inject into containers.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.EnvVar"), - }, - }, - }, - }, - }, - "envFrom": { - SchemaProps: spec.SchemaProps{ - Description: "EnvFrom defines the collection of EnvFromSource to inject into containers.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.EnvFromSource"), - }, - }, - }, - }, - }, - "volumes": { - SchemaProps: spec.SchemaProps{ - Description: "Volumes defines the collection of Volume to inject into the pod.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.Volume"), - }, - }, - }, - }, - }, - "volumeMounts": { - SchemaProps: spec.SchemaProps{ - Description: "VolumeMounts defines the collection of VolumeMount to inject into containers.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.VolumeMount"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.EnvFromSource", "k8s.io/api/core/v1.EnvVar", "k8s.io/api/core/v1.Volume", "k8s.io/api/core/v1.VolumeMount", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_k8sio_api_storage_v1_StorageClass(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "provisioner": { - SchemaProps: spec.SchemaProps{ - Description: "Provisioner indicates the type of the provisioner.", - Type: []string{"string"}, - Format: "", - }, - }, - "parameters": { - SchemaProps: spec.SchemaProps{ - Description: "Parameters holds the parameters for the provisioner that should create volumes of this storage class.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "reclaimPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.", - Type: []string{"string"}, - Format: "", - }, - }, - "mountOptions": { - SchemaProps: spec.SchemaProps{ - Description: "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "allowVolumeExpansion": { - SchemaProps: spec.SchemaProps{ - Description: "AllowVolumeExpansion shows whether the storage class allow volume expand", - Type: []string{"boolean"}, - Format: "", - }, - }, - "volumeBindingMode": { - SchemaProps: spec.SchemaProps{ - Description: "VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.", - Type: []string{"string"}, - Format: "", - }, - }, - "allowedTopologies": { - SchemaProps: spec.SchemaProps{ - Description: "Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.TopologySelectorTerm"), - }, - }, - }, - }, - }, - }, - Required: []string{"provisioner"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.TopologySelectorTerm", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_storage_v1_StorageClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StorageClassList is a collection of storage classes.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of StorageClasses", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/storage/v1.StorageClass"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1.StorageClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_storage_v1_VolumeAttachment(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.", - Ref: ref("k8s.io/api/storage/v1.VolumeAttachmentSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.", - Ref: ref("k8s.io/api/storage/v1.VolumeAttachmentStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1.VolumeAttachmentSpec", "k8s.io/api/storage/v1.VolumeAttachmentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_storage_v1_VolumeAttachmentList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentList is a collection of VolumeAttachment objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of VolumeAttachments", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/storage/v1.VolumeAttachment"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1.VolumeAttachment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_storage_v1_VolumeAttachmentSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "persistentVolumeName": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the persistent volume to attach.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_storage_v1_VolumeAttachmentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentSpec is the specification of a VolumeAttachment request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "attacher": { - SchemaProps: spec.SchemaProps{ - Description: "Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().", - Type: []string{"string"}, - Format: "", - }, - }, - "source": { - SchemaProps: spec.SchemaProps{ - Description: "Source represents the volume that should be attached.", - Ref: ref("k8s.io/api/storage/v1.VolumeAttachmentSource"), - }, - }, - "nodeName": { - SchemaProps: spec.SchemaProps{ - Description: "The node that the volume should be attached to.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"attacher", "source", "nodeName"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1.VolumeAttachmentSource"}, - } -} - -func schema_k8sio_api_storage_v1_VolumeAttachmentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentStatus is the status of a VolumeAttachment request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "attached": { - SchemaProps: spec.SchemaProps{ - Description: "Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "attachmentMetadata": { - SchemaProps: spec.SchemaProps{ - Description: "Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "attachError": { - SchemaProps: spec.SchemaProps{ - Description: "The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - Ref: ref("k8s.io/api/storage/v1.VolumeError"), - }, - }, - "detachError": { - SchemaProps: spec.SchemaProps{ - Description: "The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.", - Ref: ref("k8s.io/api/storage/v1.VolumeError"), - }, - }, - }, - Required: []string{"attached"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1.VolumeError"}, - } -} - -func schema_k8sio_api_storage_v1_VolumeError(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeError captures an error encountered during a volume operation.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "time": { - SchemaProps: spec.SchemaProps{ - Description: "Time the error was encountered.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "String detailing the error encountered during Attach or Detach operation. This string may be logged, so it should not contain sensitive information.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_storage_v1alpha1_VolumeAttachment(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.", - Ref: ref("k8s.io/api/storage/v1alpha1.VolumeAttachmentSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.", - Ref: ref("k8s.io/api/storage/v1alpha1.VolumeAttachmentStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1alpha1.VolumeAttachmentSpec", "k8s.io/api/storage/v1alpha1.VolumeAttachmentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_storage_v1alpha1_VolumeAttachmentList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentList is a collection of VolumeAttachment objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of VolumeAttachments", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/storage/v1alpha1.VolumeAttachment"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1alpha1.VolumeAttachment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_storage_v1alpha1_VolumeAttachmentSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "persistentVolumeName": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the persistent volume to attach.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_storage_v1alpha1_VolumeAttachmentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentSpec is the specification of a VolumeAttachment request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "attacher": { - SchemaProps: spec.SchemaProps{ - Description: "Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().", - Type: []string{"string"}, - Format: "", - }, - }, - "source": { - SchemaProps: spec.SchemaProps{ - Description: "Source represents the volume that should be attached.", - Ref: ref("k8s.io/api/storage/v1alpha1.VolumeAttachmentSource"), - }, - }, - "nodeName": { - SchemaProps: spec.SchemaProps{ - Description: "The node that the volume should be attached to.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"attacher", "source", "nodeName"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1alpha1.VolumeAttachmentSource"}, - } -} - -func schema_k8sio_api_storage_v1alpha1_VolumeAttachmentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentStatus is the status of a VolumeAttachment request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "attached": { - SchemaProps: spec.SchemaProps{ - Description: "Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "attachmentMetadata": { - SchemaProps: spec.SchemaProps{ - Description: "Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "attachError": { - SchemaProps: spec.SchemaProps{ - Description: "The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - Ref: ref("k8s.io/api/storage/v1alpha1.VolumeError"), - }, - }, - "detachError": { - SchemaProps: spec.SchemaProps{ - Description: "The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.", - Ref: ref("k8s.io/api/storage/v1alpha1.VolumeError"), - }, - }, - }, - Required: []string{"attached"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1alpha1.VolumeError"}, - } -} - -func schema_k8sio_api_storage_v1alpha1_VolumeError(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeError captures an error encountered during a volume operation.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "time": { - SchemaProps: spec.SchemaProps{ - Description: "Time the error was encountered.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "String detailing the error encountered during Attach or Detach operation. This string maybe logged, so it should not contain sensitive information.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_k8sio_api_storage_v1beta1_CSIDriver(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSIDriver captures information about a Container Storage Interface (CSI) volume driver deployed on the cluster. CSI drivers do not need to create the CSIDriver object directly. Instead they may use the cluster-driver-registrar sidecar container. When deployed with a CSI driver it automatically creates a CSIDriver object representing the driver. Kubernetes attach detach controller uses this object to determine whether attach is required. Kubelet uses this object to determine whether pod information needs to be passed on mount. CSIDriver objects are non-namespaced.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata. metadata.Name indicates the name of the CSI driver that this object refers to; it MUST be the same name returned by the CSI GetPluginName() call for that driver. The driver name must be 63 characters or less, beginning and ending with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), dots (.), and alphanumerics between. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the CSI Driver.", - Ref: ref("k8s.io/api/storage/v1beta1.CSIDriverSpec"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1beta1.CSIDriverSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_storage_v1beta1_CSIDriverList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSIDriverList is a collection of CSIDriver objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of CSIDriver", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/storage/v1beta1.CSIDriver"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1beta1.CSIDriver", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_storage_v1beta1_CSIDriverSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSIDriverSpec is the specification of a CSIDriver.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "attachRequired": { - SchemaProps: spec.SchemaProps{ - Description: "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that the Kubernetes attach detach controller should call the attach volume interface which checks the volumeattachment status and waits until the volume is attached before proceeding to mounting. The CSI external-attacher coordinates with CSI volume driver and updates the volumeattachment status when the attach operation is complete. If the CSIDriverRegistry feature gate is enabled and the value is specified to false, the attach operation will be skipped. Otherwise the attach operation will be called.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "podInfoOnMount": { - SchemaProps: spec.SchemaProps{ - Description: "If set to true, podInfoOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations. If set to false, pod information will not be passed on mount. Default is false. The CSI driver specifies podInfoOnMount as part of driver deployment. If true, Kubelet will pass pod information as VolumeContext in the CSI NodePublishVolume() calls. The CSI driver is responsible for parsing and validating the information passed in as VolumeContext. The following VolumeConext will be passed if podInfoOnMount is set to true. This list might grow, but the prefix will be used. \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID)", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_storage_v1beta1_CSINode(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSINode holds information about all CSI drivers installed on a node. CSI drivers do not need to create the CSINode object directly. As long as they use the node-driver-registrar sidecar container, the kubelet will automatically populate the CSINode object for the CSI driver as part of kubelet plugin registration. CSINode has the same name as a node. If the object is missing, it means either there are no CSI Drivers available on the node, or the Kubelet version is low enough that it doesn't create this object. CSINode has an OwnerReference that points to the corresponding node object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "metadata.name must be the Kubernetes node name.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "spec is the specification of CSINode", - Ref: ref("k8s.io/api/storage/v1beta1.CSINodeSpec"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1beta1.CSINodeSpec", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_storage_v1beta1_CSINodeDriver(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSINodeDriver holds information about the specification of one CSI driver installed on a node", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "This is the name of the CSI driver that this object refers to. This MUST be the same name returned by the CSI GetPluginName() call for that driver.", - Type: []string{"string"}, - Format: "", - }, - }, - "nodeID": { - SchemaProps: spec.SchemaProps{ - Description: "nodeID of the node from the driver point of view. This field enables Kubernetes to communicate with storage systems that do not share the same nomenclature for nodes. For example, Kubernetes may refer to a given node as \"node1\", but the storage system may refer to the same node as \"nodeA\". When Kubernetes issues a command to the storage system to attach a volume to a specific node, it can use this field to refer to the node name using the ID that the storage system will understand, e.g. \"nodeA\" instead of \"node1\". This field is required.", - Type: []string{"string"}, - Format: "", - }, - }, - "topologyKeys": { - SchemaProps: spec.SchemaProps{ - Description: "topologyKeys is the list of keys supported by the driver. When a driver is initialized on a cluster, it provides a set of topology keys that it understands (e.g. \"company.com/zone\", \"company.com/region\"). When a driver is initialized on a node, it provides the same topology keys along with values. Kubelet will expose these topology keys as labels on its own node object. When Kubernetes does topology aware provisioning, it can use this list to determine which labels it should retrieve from the node object and pass back to the driver. It is possible for different nodes to use different topology keys. This can be empty if driver does not support topology.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"name", "nodeID"}, - }, - }, - } -} - -func schema_k8sio_api_storage_v1beta1_CSINodeList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSINodeList is a collection of CSINode objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of CSINode", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/storage/v1beta1.CSINode"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1beta1.CSINode", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_storage_v1beta1_CSINodeSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSINodeSpec holds information about the specification of all CSI drivers installed on a node", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "drivers": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "drivers is a list of information of all CSI Drivers existing on a node. If all drivers in the list are uninstalled, this can become empty.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/storage/v1beta1.CSINodeDriver"), - }, - }, - }, - }, - }, - }, - Required: []string{"drivers"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1beta1.CSINodeDriver"}, - } -} - -func schema_k8sio_api_storage_v1beta1_StorageClass(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StorageClass describes the parameters for a class of storage for which PersistentVolumes can be dynamically provisioned.\n\nStorageClasses are non-namespaced; the name of the storage class according to etcd is in ObjectMeta.Name.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "provisioner": { - SchemaProps: spec.SchemaProps{ - Description: "Provisioner indicates the type of the provisioner.", - Type: []string{"string"}, - Format: "", - }, - }, - "parameters": { - SchemaProps: spec.SchemaProps{ - Description: "Parameters holds the parameters for the provisioner that should create volumes of this storage class.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "reclaimPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "Dynamically provisioned PersistentVolumes of this storage class are created with this reclaimPolicy. Defaults to Delete.", - Type: []string{"string"}, - Format: "", - }, - }, - "mountOptions": { - SchemaProps: spec.SchemaProps{ - Description: "Dynamically provisioned PersistentVolumes of this storage class are created with these mountOptions, e.g. [\"ro\", \"soft\"]. Not validated - mount of the PVs will simply fail if one is invalid.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "allowVolumeExpansion": { - SchemaProps: spec.SchemaProps{ - Description: "AllowVolumeExpansion shows whether the storage class allow volume expand", - Type: []string{"boolean"}, - Format: "", - }, - }, - "volumeBindingMode": { - SchemaProps: spec.SchemaProps{ - Description: "VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound. When unset, VolumeBindingImmediate is used. This field is only honored by servers that enable the VolumeScheduling feature.", - Type: []string{"string"}, - Format: "", - }, - }, - "allowedTopologies": { - SchemaProps: spec.SchemaProps{ - Description: "Restrict the node topologies where volumes can be dynamically provisioned. Each volume plugin defines its own supported topology specifications. An empty TopologySelectorTerm list means there is no topology restriction. This field is only honored by servers that enable the VolumeScheduling feature.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/core/v1.TopologySelectorTerm"), - }, - }, - }, - }, - }, - }, - Required: []string{"provisioner"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.TopologySelectorTerm", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_storage_v1beta1_StorageClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StorageClassList is a collection of storage classes.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of StorageClasses", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/storage/v1beta1.StorageClass"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1beta1.StorageClass", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_storage_v1beta1_VolumeAttachment(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachment captures the intent to attach or detach the specified volume to/from the specified node.\n\nVolumeAttachment objects are non-namespaced.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the desired attach/detach volume behavior. Populated by the Kubernetes system.", - Ref: ref("k8s.io/api/storage/v1beta1.VolumeAttachmentSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the VolumeAttachment request. Populated by the entity completing the attach or detach operation, i.e. the external-attacher.", - Ref: ref("k8s.io/api/storage/v1beta1.VolumeAttachmentStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1beta1.VolumeAttachmentSpec", "k8s.io/api/storage/v1beta1.VolumeAttachmentStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_k8sio_api_storage_v1beta1_VolumeAttachmentList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentList is a collection of VolumeAttachment objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is the list of VolumeAttachments", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/api/storage/v1beta1.VolumeAttachment"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1beta1.VolumeAttachment", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_k8sio_api_storage_v1beta1_VolumeAttachmentSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentSource represents a volume that should be attached. Right now only PersistenVolumes can be attached via external attacher, in future we may allow also inline volumes in pods. Exactly one member can be set.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "persistentVolumeName": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the persistent volume to attach.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_api_storage_v1beta1_VolumeAttachmentSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentSpec is the specification of a VolumeAttachment request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "attacher": { - SchemaProps: spec.SchemaProps{ - Description: "Attacher indicates the name of the volume driver that MUST handle this request. This is the name returned by GetPluginName().", - Type: []string{"string"}, - Format: "", - }, - }, - "source": { - SchemaProps: spec.SchemaProps{ - Description: "Source represents the volume that should be attached.", - Ref: ref("k8s.io/api/storage/v1beta1.VolumeAttachmentSource"), - }, - }, - "nodeName": { - SchemaProps: spec.SchemaProps{ - Description: "The node that the volume should be attached to.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"attacher", "source", "nodeName"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1beta1.VolumeAttachmentSource"}, - } -} - -func schema_k8sio_api_storage_v1beta1_VolumeAttachmentStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeAttachmentStatus is the status of a VolumeAttachment request.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "attached": { - SchemaProps: spec.SchemaProps{ - Description: "Indicates the volume is successfully attached. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "attachmentMetadata": { - SchemaProps: spec.SchemaProps{ - Description: "Upon successful attach, this field is populated with any information returned by the attach operation that must be passed into subsequent WaitForAttach or Mount calls. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "attachError": { - SchemaProps: spec.SchemaProps{ - Description: "The last error encountered during attach operation, if any. This field must only be set by the entity completing the attach operation, i.e. the external-attacher.", - Ref: ref("k8s.io/api/storage/v1beta1.VolumeError"), - }, - }, - "detachError": { - SchemaProps: spec.SchemaProps{ - Description: "The last error encountered during detach operation, if any. This field must only be set by the entity completing the detach operation, i.e. the external-attacher.", - Ref: ref("k8s.io/api/storage/v1beta1.VolumeError"), - }, - }, - }, - Required: []string{"attached"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/storage/v1beta1.VolumeError"}, - } -} - -func schema_k8sio_api_storage_v1beta1_VolumeError(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeError captures an error encountered during a volume operation.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "time": { - SchemaProps: spec.SchemaProps{ - Description: "Time the error was encountered.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "String detailing the error encountered during Attach or Detach operation. This string may be logged, so it should not contain sensitive information.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_ConversionRequest(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ConversionRequest describes the conversion request parameters.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "`uid` is an identifier for the individual request/response. It allows us to distinguish instances of requests which are otherwise identical (parallel requests, requests when earlier requests did not modify etc) The UID is meant to track the round trip (request/response) between the KAS and the WebHook, not the user request. It is suitable for correlating log entries between the webhook and apiserver, for either auditing or debugging.", - Type: []string{"string"}, - Format: "", - }, - }, - "desiredAPIVersion": { - SchemaProps: spec.SchemaProps{ - Description: "`desiredAPIVersion` is the version to convert given objects to. e.g. \"myapi.example.com/v1\"", - Type: []string{"string"}, - Format: "", - }, - }, - "objects": { - SchemaProps: spec.SchemaProps{ - Description: "`objects` is the list of CR objects to be converted.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), - }, - }, - }, - }, - }, - }, - Required: []string{"uid", "desiredAPIVersion", "objects"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/runtime.RawExtension"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_ConversionResponse(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ConversionResponse describes a conversion response.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "`uid` is an identifier for the individual request/response. This should be copied over from the corresponding AdmissionRequest.", - Type: []string{"string"}, - Format: "", - }, - }, - "convertedObjects": { - SchemaProps: spec.SchemaProps{ - Description: "`convertedObjects` is the list of converted version of `request.objects` if the `result` is successful otherwise empty. The webhook is expected to set apiVersion of these objects to the ConversionRequest.desiredAPIVersion. The list must also has the same size as input list with the same objects in the same order(i.e. equal UIDs and object meta)", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), - }, - }, - }, - }, - }, - "result": { - SchemaProps: spec.SchemaProps{ - Description: "`result` contains the result of conversion with extra details if the conversion failed. `result.status` determines if the conversion failed or succeeded. The `result.status` field is required and represent the success or failure of the conversion. A successful conversion must set `result.status` to `Success`. A failed conversion must set `result.status` to `Failure` and provide more details in `result.message` and return http status 200. The `result.message` will be used to construct an error message for the end user.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Status"), - }, - }, - }, - Required: []string{"uid", "convertedObjects", "result"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Status", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_ConversionReview(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ConversionReview describes a conversion request/response.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "request": { - SchemaProps: spec.SchemaProps{ - Description: "`request` describes the attributes for the conversion request.", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionRequest"), - }, - }, - "response": { - SchemaProps: spec.SchemaProps{ - Description: "`response` describes the attributes for the conversion response.", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionResponse"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionRequest", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ConversionResponse"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceColumnDefinition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceColumnDefinition specifies a column for server side printing.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is a human readable name for the column.", - Type: []string{"string"}, - Format: "", - }, - }, - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type is an OpenAPI type definition for this column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", - Type: []string{"string"}, - Format: "", - }, - }, - "format": { - SchemaProps: spec.SchemaProps{ - Description: "format is an optional OpenAPI type definition for this column. The 'name' format is applied to the primary identifier column to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", - Type: []string{"string"}, - Format: "", - }, - }, - "description": { - SchemaProps: spec.SchemaProps{ - Description: "description is a human readable description of this column.", - Type: []string{"string"}, - Format: "", - }, - }, - "priority": { - SchemaProps: spec.SchemaProps{ - Description: "priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a higher priority.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "JSONPath": { - SchemaProps: spec.SchemaProps{ - Description: "JSONPath is a simple JSON path, i.e. with array notation.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name", "type", "JSONPath"}, - }, - }, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceConversion(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceConversion describes how to convert different versions of a CR.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "strategy": { - SchemaProps: spec.SchemaProps{ - Description: "`strategy` specifies the conversion strategy. Allowed values are: - `None`: The converter only change the apiVersion and would not touch any other field in the CR. - `Webhook`: API Server will call to an external webhook to do the conversion. Additional information is needed for this option.", - Type: []string{"string"}, - Format: "", - }, - }, - "webhookClientConfig": { - SchemaProps: spec.SchemaProps{ - Description: "`webhookClientConfig` is the instructions for how to call the webhook if strategy is `Webhook`. This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature.", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.WebhookClientConfig"), - }, - }, - "conversionReviewVersions": { - SchemaProps: spec.SchemaProps{ - Description: "ConversionReviewVersions is an ordered list of preferred `ConversionReview` versions the Webhook expects. API server will try to use first version in the list which it supports. If none of the versions specified in this list supported by API server, conversion will fail for this object. If a persisted Webhook configuration specifies allowed versions and does not include any versions known to the API Server, calls to the webhook will fail. Default to `['v1beta1']`.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"strategy"}, - }, - }, - Dependencies: []string{ - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.WebhookClientConfig"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceDefinition represents a resource that should be exposed on the API server. Its name MUST be in the format <.spec.name>.<.spec.group>.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec describes how the user wants the resources to appear", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status indicates the actual state of the CustomResourceDefinition", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionStatus"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionSpec", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceDefinitionCondition contains details for the current condition of this pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type is the type of the condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the status of the condition. Can be True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "Unique, one-word, CamelCase reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Human-readable message indicating details about last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceDefinitionList is a list of CustomResourceDefinition objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items individual CustomResourceDefinitions", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinition"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinition", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionNames(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceDefinitionNames indicates the names to serve this CustomResourceDefinition", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "plural": { - SchemaProps: spec.SchemaProps{ - Description: "Plural is the plural name of the resource to serve. It must match the name of the CustomResourceDefinition-registration too: plural.group and it must be all lowercase.", - Type: []string{"string"}, - Format: "", - }, - }, - "singular": { - SchemaProps: spec.SchemaProps{ - Description: "Singular is the singular name of the resource. It must be all lowercase Defaults to lowercased ", - Type: []string{"string"}, - Format: "", - }, - }, - "shortNames": { - SchemaProps: spec.SchemaProps{ - Description: "ShortNames are short names for the resource. It must be all lowercase.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is the serialized kind of the resource. It is normally CamelCase and singular.", - Type: []string{"string"}, - Format: "", - }, - }, - "listKind": { - SchemaProps: spec.SchemaProps{ - Description: "ListKind is the serialized kind of the list for this resource. Defaults to List.", - Type: []string{"string"}, - Format: "", - }, - }, - "categories": { - SchemaProps: spec.SchemaProps{ - Description: "Categories is a list of grouped resources custom resources belong to (e.g. 'all')", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"plural", "kind"}, - }, - }, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceDefinitionSpec describes how a user wants their resource to appear", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "group": { - SchemaProps: spec.SchemaProps{ - Description: "Group is the group this resource belongs in", - Type: []string{"string"}, - Format: "", - }, - }, - "version": { - SchemaProps: spec.SchemaProps{ - Description: "Version is the version this resource belongs in Should be always first item in Versions field if provided. Optional, but at least one of Version or Versions must be set. Deprecated: Please use `Versions`.", - Type: []string{"string"}, - Format: "", - }, - }, - "names": { - SchemaProps: spec.SchemaProps{ - Description: "Names are the names used to describe this custom resource", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionNames"), - }, - }, - "scope": { - SchemaProps: spec.SchemaProps{ - Description: "Scope indicates whether this resource is cluster or namespace scoped. Default is namespaced", - Type: []string{"string"}, - Format: "", - }, - }, - "validation": { - SchemaProps: spec.SchemaProps{ - Description: "Validation describes the validation methods for CustomResources Optional, the global validation schema for all versions. Top-level and per-version schemas are mutually exclusive.", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceValidation"), - }, - }, - "subresources": { - SchemaProps: spec.SchemaProps{ - Description: "Subresources describes the subresources for CustomResource Optional, the global subresources for all versions. Top-level and per-version subresources are mutually exclusive.", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresources"), - }, - }, - "versions": { - SchemaProps: spec.SchemaProps{ - Description: "Versions is the list of all supported versions for this resource. If Version field is provided, this field is optional. Validation: All versions must use the same validation schema for now. i.e., top level Validation field is applied to all of these versions. Order: The version name will be used to compute the order. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionVersion"), - }, - }, - }, - }, - }, - "additionalPrinterColumns": { - SchemaProps: spec.SchemaProps{ - Description: "AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column. Optional, the global columns for all versions. Top-level and per-version columns are mutually exclusive.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceColumnDefinition"), - }, - }, - }, - }, - }, - "conversion": { - SchemaProps: spec.SchemaProps{ - Description: "`conversion` defines conversion settings for the CRD.", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceConversion"), - }, - }, - }, - Required: []string{"group", "names", "scope"}, - }, - }, - Dependencies: []string{ - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceColumnDefinition", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceConversion", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionNames", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionVersion", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresources", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceValidation"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceDefinitionStatus indicates the state of the CustomResourceDefinition", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "conditions": { - SchemaProps: spec.SchemaProps{ - Description: "Conditions indicate state for particular aspects of a CustomResourceDefinition", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionCondition"), - }, - }, - }, - }, - }, - "acceptedNames": { - SchemaProps: spec.SchemaProps{ - Description: "AcceptedNames are the names that are actually being used to serve discovery They may be different than the names in spec.", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionNames"), - }, - }, - "storedVersions": { - SchemaProps: spec.SchemaProps{ - Description: "StoredVersions are all versions of CustomResources that were ever persisted. Tracking these versions allows a migration path for stored versions in etcd. The field is mutable so the migration controller can first finish a migration to another version (i.e. that no old objects are left in the storage), and then remove the rest of the versions from this list. None of the versions in this list can be removed from the spec.Versions field.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"conditions", "acceptedNames", "storedVersions"}, - }, - }, - Dependencies: []string{ - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionCondition", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceDefinitionNames"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceDefinitionVersion(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceDefinitionVersion describes a version for CRD.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the version name, e.g. “v1”, “v2beta1”, etc.", - Type: []string{"string"}, - Format: "", - }, - }, - "served": { - SchemaProps: spec.SchemaProps{ - Description: "Served is a flag enabling/disabling this version from being served via REST APIs", - Type: []string{"boolean"}, - Format: "", - }, - }, - "storage": { - SchemaProps: spec.SchemaProps{ - Description: "Storage flags the version as storage version. There must be exactly one flagged as storage version.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "schema": { - SchemaProps: spec.SchemaProps{ - Description: "Schema describes the schema for CustomResource used in validation, pruning, and defaulting. Top-level and per-version schemas are mutually exclusive. Per-version schemas must not all be set to identical values (top-level validation schema should be used instead) This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature.", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceValidation"), - }, - }, - "subresources": { - SchemaProps: spec.SchemaProps{ - Description: "Subresources describes the subresources for CustomResource Top-level and per-version subresources are mutually exclusive. Per-version subresources must not all be set to identical values (top-level subresources should be used instead) This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature.", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresources"), - }, - }, - "additionalPrinterColumns": { - SchemaProps: spec.SchemaProps{ - Description: "AdditionalPrinterColumns are additional columns shown e.g. in kubectl next to the name. Defaults to a created-at column. Top-level and per-version columns are mutually exclusive. Per-version columns must not all be set to identical values (top-level columns should be used instead) This field is alpha-level and is only honored by servers that enable the CustomResourceWebhookConversion feature. NOTE: CRDs created prior to 1.13 populated the top-level additionalPrinterColumns field by default. To apply an update that changes to per-version additionalPrinterColumns, the top-level additionalPrinterColumns field must be explicitly set to null", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceColumnDefinition"), - }, - }, - }, - }, - }, - }, - Required: []string{"name", "served", "storage"}, - }, - }, - Dependencies: []string{ - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceColumnDefinition", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresources", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceValidation"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresourceScale(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceSubresourceScale defines how to serve the scale subresource for CustomResources.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "specReplicasPath": { - SchemaProps: spec.SchemaProps{ - Description: "SpecReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Spec.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .spec. If there is no value under the given path in the CustomResource, the /scale subresource will return an error on GET.", - Type: []string{"string"}, - Format: "", - }, - }, - "statusReplicasPath": { - SchemaProps: spec.SchemaProps{ - Description: "StatusReplicasPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Replicas. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. If there is no value under the given path in the CustomResource, the status replica value in the /scale subresource will default to 0.", - Type: []string{"string"}, - Format: "", - }, - }, - "labelSelectorPath": { - SchemaProps: spec.SchemaProps{ - Description: "LabelSelectorPath defines the JSON path inside of a CustomResource that corresponds to Scale.Status.Selector. Only JSON paths without the array notation are allowed. Must be a JSON Path under .status. Must be set to work with HPA. If there is no value under the given path in the CustomResource, the status label selector value in the /scale subresource will default to the empty string.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"specReplicasPath", "statusReplicasPath"}, - }, - }, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresourceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceSubresourceStatus defines how to serve the status subresource for CustomResources. Status is represented by the `.status` JSON path inside of a CustomResource. When set, * exposes a /status subresource for the custom resource * PUT requests to the /status subresource take a custom resource object, and ignore changes to anything except the status stanza * PUT/POST/PATCH requests to the custom resource ignore changes to the status stanza", - Type: []string{"object"}, - }, - }, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceSubresources(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceSubresources defines the status and scale subresources for CustomResources.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status denotes the status subresource for CustomResources", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceStatus"), - }, - }, - "scale": { - SchemaProps: spec.SchemaProps{ - Description: "Scale denotes the scale subresource for CustomResources", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceScale"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceScale", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.CustomResourceSubresourceStatus"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_CustomResourceValidation(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CustomResourceValidation is a list of validation methods for CustomResources.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "openAPIV3Schema": { - SchemaProps: spec.SchemaProps{ - Description: "OpenAPIV3Schema is the OpenAPI v3 schema to be validated against.", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_ExternalDocumentation(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExternalDocumentation allows referencing an external resource for extended documentation.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "description": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "url": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_JSON(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JSON represents any valid JSON value. These types are supported: bool, int64, float64, string, []interface{}, map[string]interface{} and nil.", - Type: v1beta1.JSON{}.OpenAPISchemaType(), - Format: v1beta1.JSON{}.OpenAPISchemaFormat(), - }, - }, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_JSONSchemaProps(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "id": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "$schema": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "$ref": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "description": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "type": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "format": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "title": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "default": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSON"), - }, - }, - "maximum": { - SchemaProps: spec.SchemaProps{ - Type: []string{"number"}, - Format: "double", - }, - }, - "exclusiveMaximum": { - SchemaProps: spec.SchemaProps{ - Type: []string{"boolean"}, - Format: "", - }, - }, - "minimum": { - SchemaProps: spec.SchemaProps{ - Type: []string{"number"}, - Format: "double", - }, - }, - "exclusiveMinimum": { - SchemaProps: spec.SchemaProps{ - Type: []string{"boolean"}, - Format: "", - }, - }, - "maxLength": { - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int64", - }, - }, - "minLength": { - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int64", - }, - }, - "pattern": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "maxItems": { - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int64", - }, - }, - "minItems": { - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int64", - }, - }, - "uniqueItems": { - SchemaProps: spec.SchemaProps{ - Type: []string{"boolean"}, - Format: "", - }, - }, - "multipleOf": { - SchemaProps: spec.SchemaProps{ - Type: []string{"number"}, - Format: "double", - }, - }, - "enum": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSON"), - }, - }, - }, - }, - }, - "maxProperties": { - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int64", - }, - }, - "minProperties": { - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int64", - }, - }, - "required": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrArray"), - }, - }, - "allOf": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), - }, - }, - }, - }, - }, - "oneOf": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), - }, - }, - }, - }, - }, - "anyOf": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), - }, - }, - }, - }, - }, - "not": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), - }, - }, - "properties": { - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), - }, - }, - }, - }, - }, - "additionalProperties": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrBool"), - }, - }, - "patternProperties": { - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), - }, - }, - }, - }, - }, - "dependencies": { - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrStringArray"), - }, - }, - }, - }, - }, - "additionalItems": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrBool"), - }, - }, - "definitions": { - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps"), - }, - }, - }, - }, - }, - "externalDocs": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ExternalDocumentation"), - }, - }, - "example": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSON"), - }, - }, - "nullable": { - SchemaProps: spec.SchemaProps{ - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ExternalDocumentation", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSON", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaProps", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrArray", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrBool", "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.JSONSchemaPropsOrStringArray"}, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrArray(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JSONSchemaPropsOrArray represents a value that can either be a JSONSchemaProps or an array of JSONSchemaProps. Mainly here for serialization purposes.", - Type: v1beta1.JSONSchemaPropsOrArray{}.OpenAPISchemaType(), - Format: v1beta1.JSONSchemaPropsOrArray{}.OpenAPISchemaFormat(), - }, - }, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrBool(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JSONSchemaPropsOrBool represents JSONSchemaProps or a boolean value. Defaults to true for the boolean property.", - Type: v1beta1.JSONSchemaPropsOrBool{}.OpenAPISchemaType(), - Format: v1beta1.JSONSchemaPropsOrBool{}.OpenAPISchemaFormat(), - }, - }, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_JSONSchemaPropsOrStringArray(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JSONSchemaPropsOrStringArray represents a JSONSchemaProps or a string array.", - Type: v1beta1.JSONSchemaPropsOrStringArray{}.OpenAPISchemaType(), - Format: v1beta1.JSONSchemaPropsOrStringArray{}.OpenAPISchemaFormat(), - }, - }, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_ServiceReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceReference holds a reference to Service.legacy.k8s.io", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "`namespace` is the namespace of the service. Required", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "`name` is the name of the service. Required", - Type: []string{"string"}, - Format: "", - }, - }, - "path": { - SchemaProps: spec.SchemaProps{ - Description: "`path` is an optional URL path which will be sent in any request to this service.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"namespace", "name"}, - }, - }, - } -} - -func schema_pkg_apis_apiextensions_v1beta1_WebhookClientConfig(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "WebhookClientConfig contains the information to make a TLS connection with the webhook. It has the same field as admissionregistration.v1beta1.WebhookClientConfig.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "url": { - SchemaProps: spec.SchemaProps{ - Description: "`url` gives the location of the webhook, in standard URL form (`scheme://host:port/path`). Exactly one of `url` or `service` must be specified.\n\nThe `host` should not refer to a service running in the cluster; use the `service` field instead. The host might be resolved via external DNS in some apiservers (e.g., `kube-apiserver` cannot resolve in-cluster DNS as that would be a layering violation). `host` may also be an IP address.\n\nPlease note that using `localhost` or `127.0.0.1` as a `host` is risky unless you take great care to run this webhook on all hosts which run an apiserver which might need to make calls to this webhook. Such installs are likely to be non-portable, i.e., not easy to turn up in a new cluster.\n\nThe scheme must be \"https\"; the URL must begin with \"https://\".\n\nA path is optional, and if present may be any string permissible in a URL. You may use the path to pass an arbitrary string to the webhook, for example, a cluster identifier.\n\nAttempting to use a user or basic auth e.g. \"user:password@\" is not allowed. Fragments (\"#...\") and query parameters (\"?...\") are not allowed, either.", - Type: []string{"string"}, - Format: "", - }, - }, - "service": { - SchemaProps: spec.SchemaProps{ - Description: "`service` is a reference to the service for this webhook. Either `service` or `url` must be specified.\n\nIf the webhook is running within the cluster, then you should use `service`.\n\nPort 443 will be used if it is open, otherwise it is an error.", - Ref: ref("k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ServiceReference"), - }, - }, - "caBundle": { - SchemaProps: spec.SchemaProps{ - Description: "`caBundle` is a PEM encoded CA bundle which will be used to validate the webhook's server certificate. If unspecified, system trust roots on the apiserver are used.", - Type: []string{"string"}, - Format: "byte", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1.ServiceReference"}, - } -} - -func schema_apimachinery_pkg_api_resource_Quantity(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Quantity is a fixed-point representation of a number. It provides convenient marshaling/unmarshaling in JSON and YAML, in addition to String() and Int64() accessors.\n\nThe serialization format is:\n\n ::= \n (Note that may be empty, from the \"\" case in .)\n ::= 0 | 1 | ... | 9 ::= | ::= | . | . | . ::= \"+\" | \"-\" ::= | ::= | | ::= Ki | Mi | Gi | Ti | Pi | Ei\n (International System of units; See: http://physics.nist.gov/cuu/Units/binary.html)\n ::= m | \"\" | k | M | G | T | P | E\n (Note that 1024 = 1Ki but 1000 = 1k; I didn't choose the capitalization.)\n ::= \"e\" | \"E\" \n\nNo matter which of the three exponent forms is used, no quantity may represent a number greater than 2^63-1 in magnitude, nor may it have more than 3 decimal places. Numbers larger or more precise will be capped or rounded up. (E.g.: 0.1m will rounded up to 1m.) This may be extended in the future if we require larger or smaller quantities.\n\nWhen a Quantity is parsed from a string, it will remember the type of suffix it had, and will use the same type again when it is serialized.\n\nBefore serializing, Quantity will be put in \"canonical form\". This means that Exponent/suffix will be adjusted up or down (with a corresponding increase or decrease in Mantissa) such that:\n a. No precision is lost\n b. No fractional digits will be emitted\n c. The exponent (or suffix) is as large as possible.\nThe sign will be omitted unless the number is negative.\n\nExamples:\n 1.5 will be serialized as \"1500m\"\n 1.5Gi will be serialized as \"1536Mi\"\n\nNote that the quantity will NEVER be internally represented by a floating point number. That is the whole point of this exercise.\n\nNon-canonical values will still parse as long as they are well formed, but will be re-emitted in their canonical form. (So always use canonical form, or don't diff.)\n\nThis format is intended to make it difficult to use these numbers without writing some sort of special handling code in the hopes that that will cause implementors to also use a fixed point implementation.", - Type: resource.Quantity{}.OpenAPISchemaType(), - Format: resource.Quantity{}.OpenAPISchemaFormat(), - }, - }, - } -} - -func schema_apimachinery_pkg_api_resource_int64Amount(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "int64Amount represents a fixed precision numerator and arbitrary scale exponent. It is faster than operations on inf.Dec for values that can be represented as int64.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "value": { - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int64", - }, - }, - "scale": { - SchemaProps: spec.SchemaProps{ - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"value", "scale"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_APIGroup(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIGroup contains the name, the supported versions, and the preferred version of a group.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is the name of the group.", - Type: []string{"string"}, - Format: "", - }, - }, - "versions": { - SchemaProps: spec.SchemaProps{ - Description: "versions are the versions supported in this group.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionForDiscovery"), - }, - }, - }, - }, - }, - "preferredVersion": { - SchemaProps: spec.SchemaProps{ - Description: "preferredVersion is the version preferred by the API server, which probably is the storage version.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionForDiscovery"), - }, - }, - "serverAddressByClientCIDRs": { - SchemaProps: spec.SchemaProps{ - Description: "a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ServerAddressByClientCIDR"), - }, - }, - }, - }, - }, - }, - Required: []string{"name", "versions"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.GroupVersionForDiscovery", "k8s.io/apimachinery/pkg/apis/meta/v1.ServerAddressByClientCIDR"}, - } -} - -func schema_pkg_apis_meta_v1_APIGroupList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIGroupList is a list of APIGroup, to allow clients to discover the API at /apis.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "groups": { - SchemaProps: spec.SchemaProps{ - Description: "groups is a list of APIGroup.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.APIGroup"), - }, - }, - }, - }, - }, - }, - Required: []string{"groups"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.APIGroup"}, - } -} - -func schema_pkg_apis_meta_v1_APIResource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIResource specifies the name of a resource and whether it is namespaced.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is the plural name of the resource.", - Type: []string{"string"}, - Format: "", - }, - }, - "singularName": { - SchemaProps: spec.SchemaProps{ - Description: "singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.", - Type: []string{"string"}, - Format: "", - }, - }, - "namespaced": { - SchemaProps: spec.SchemaProps{ - Description: "namespaced indicates if a resource is namespaced or not.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "group": { - SchemaProps: spec.SchemaProps{ - Description: "group is the preferred group of the resource. Empty implies the group of the containing resource list. For subresources, this may have a different value, for example: Scale\".", - Type: []string{"string"}, - Format: "", - }, - }, - "version": { - SchemaProps: spec.SchemaProps{ - Description: "version is the preferred version of the resource. Empty implies the version of the containing resource list For subresources, this may have a different value, for example: v1 (while inside a v1beta1 version of the core resource's group)\".", - Type: []string{"string"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "kind is the kind for the resource (e.g. 'Foo' is the kind for a resource 'foo')", - Type: []string{"string"}, - Format: "", - }, - }, - "verbs": { - SchemaProps: spec.SchemaProps{ - Description: "verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "shortNames": { - SchemaProps: spec.SchemaProps{ - Description: "shortNames is a list of suggested short names of the resource.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "categories": { - SchemaProps: spec.SchemaProps{ - Description: "categories is a list of the grouped resources this resource belongs to (e.g. 'all')", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "storageVersionHash": { - SchemaProps: spec.SchemaProps{ - Description: "The hash value of the storage version, the version this resource is converted to when written to the data store. Value must be treated as opaque by clients. Only equality comparison on the value is valid. This is an alpha feature and may change or be removed in the future. The field is populated by the apiserver only if the StorageVersionHash feature gate is enabled. This field will remain optional even if it graduates.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name", "singularName", "namespaced", "kind", "verbs"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_APIResourceList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIResourceList is a list of APIResource, it is used to expose the name of the resources supported in a specific group and version, and if the resource is namespaced.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "groupVersion": { - SchemaProps: spec.SchemaProps{ - Description: "groupVersion is the group and version this APIResourceList is for.", - Type: []string{"string"}, - Format: "", - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "resources contains the name of the resources and if they are namespaced.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.APIResource"), - }, - }, - }, - }, - }, - }, - Required: []string{"groupVersion", "resources"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.APIResource"}, - } -} - -func schema_pkg_apis_meta_v1_APIVersions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIVersions lists the versions that are available, to allow clients to discover the API at /api, which is the root path of the legacy v1 API.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "versions": { - SchemaProps: spec.SchemaProps{ - Description: "versions are the api versions that are available.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "serverAddressByClientCIDRs": { - SchemaProps: spec.SchemaProps{ - Description: "a map of client CIDR to server address that is serving this group. This is to help clients reach servers in the most network-efficient way possible. Clients can use the appropriate server address as per the CIDR that they match. In case of multiple matches, clients should use the longest matching CIDR. The server returns only those CIDRs that it thinks that the client can match. For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP. Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ServerAddressByClientCIDR"), - }, - }, - }, - }, - }, - }, - Required: []string{"versions", "serverAddressByClientCIDRs"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ServerAddressByClientCIDR"}, - } -} - -func schema_pkg_apis_meta_v1_CreateOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CreateOptions may be provided when creating an API object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "dryRun": { - SchemaProps: spec.SchemaProps{ - Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "fieldManager": { - SchemaProps: spec.SchemaProps{ - Description: "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_DeleteOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeleteOptions may be provided when deleting an API object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "gracePeriodSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "preconditions": { - SchemaProps: spec.SchemaProps{ - Description: "Must be fulfilled before a deletion is carried out. If not possible, a 409 Conflict status will be returned.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Preconditions"), - }, - }, - "orphanDependents": { - SchemaProps: spec.SchemaProps{ - Description: "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "propagationPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", - Type: []string{"string"}, - Format: "", - }, - }, - "dryRun": { - SchemaProps: spec.SchemaProps{ - Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Preconditions"}, - } -} - -func schema_pkg_apis_meta_v1_Duration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Duration is a wrapper around time.Duration which supports correct marshaling to YAML and JSON. In particular, it marshals into strings, which can be used as map keys in json.", - Type: v1.Duration{}.OpenAPISchemaType(), - Format: v1.Duration{}.OpenAPISchemaFormat(), - }, - }, - } -} - -func schema_pkg_apis_meta_v1_ExportOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExportOptions is the query options to the standard REST get call. Deprecated. Planned for removal in 1.18.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "export": { - SchemaProps: spec.SchemaProps{ - Description: "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "exact": { - SchemaProps: spec.SchemaProps{ - Description: "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"export", "exact"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_Fields(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Fields stores a set of fields in a data structure like a Trie. To understand how this is used, see: https://github.com/kubernetes-sigs/structured-merge-diff", - Type: []string{"object"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_GetOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GetOptions is the standard query options to the standard REST get call.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "resourceVersion": { - SchemaProps: spec.SchemaProps{ - Description: "When specified: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_GroupKind(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GroupKind specifies a Group and a Kind, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "group": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"group", "kind"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_GroupResource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GroupResource specifies a Group and a Resource, but does not force a version. This is useful for identifying concepts during lookup stages without having partially valid types", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "group": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"group", "resource"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_GroupVersion(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GroupVersion contains the \"group\" and the \"version\", which uniquely identifies the API.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "group": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "version": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"group", "version"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_GroupVersionForDiscovery(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GroupVersion contains the \"group/version\" and \"version\" string of a version. It is made a struct to keep extensibility.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "groupVersion": { - SchemaProps: spec.SchemaProps{ - Description: "groupVersion specifies the API group and version in the form \"group/version\"", - Type: []string{"string"}, - Format: "", - }, - }, - "version": { - SchemaProps: spec.SchemaProps{ - Description: "version specifies the version in the form of \"version\". This is to save the clients the trouble of splitting the GroupVersion.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"groupVersion", "version"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_GroupVersionKind(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GroupVersionKind unambiguously identifies a kind. It doesn't anonymously include GroupVersion to avoid automatic coersion. It doesn't use a GroupVersion to avoid custom marshalling", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "group": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "version": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"group", "version", "kind"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_GroupVersionResource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GroupVersionResource unambiguously identifies a resource. It doesn't anonymously include GroupVersion to avoid automatic coersion. It doesn't use a GroupVersion to avoid custom marshalling", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "group": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "version": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"group", "version", "resource"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_Initializer(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Initializer is information about an initializer that has not yet completed.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name of the process that is responsible for initializing this object.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_Initializers(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Initializers tracks the progress of initialization.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "pending": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Initializer"), - }, - }, - }, - }, - }, - "result": { - SchemaProps: spec.SchemaProps{ - Description: "If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Status"), - }, - }, - }, - Required: []string{"pending"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Initializer", "k8s.io/apimachinery/pkg/apis/meta/v1.Status"}, - } -} - -func schema_pkg_apis_meta_v1_InternalEvent(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "InternalEvent makes watch.Event versioned", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "Type": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "Object": { - SchemaProps: spec.SchemaProps{ - Description: "Object is:\n * If Type is Added or Modified: the new state of the object.\n * If Type is Deleted: the state of the object immediately before deletion.\n * If Type is Error: *api.Status is recommended; other types may make sense\n depending on context.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.Object"), - }, - }, - }, - Required: []string{"Type", "Object"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/runtime.Object"}, - } -} - -func schema_pkg_apis_meta_v1_LabelSelector(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all objects. A null label selector matches no objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "matchLabels": { - SchemaProps: spec.SchemaProps{ - Description: "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "matchExpressions": { - SchemaProps: spec.SchemaProps{ - Description: "matchExpressions is a list of label selector requirements. The requirements are ANDed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelectorRequirement"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelectorRequirement"}, - } -} - -func schema_pkg_apis_meta_v1_LabelSelectorRequirement(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "key": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "key", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "key is the label key that the selector applies to.", - Type: []string{"string"}, - Format: "", - }, - }, - "operator": { - SchemaProps: spec.SchemaProps{ - Description: "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", - Type: []string{"string"}, - Format: "", - }, - }, - "values": { - SchemaProps: spec.SchemaProps{ - Description: "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"key", "operator"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_List(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "List holds a list of objects, which may not be known by the server.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of objects", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, - } -} - -func schema_pkg_apis_meta_v1_ListMeta(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "selfLink": { - SchemaProps: spec.SchemaProps{ - Description: "selfLink is a URL representing this object. Populated by the system. Read-only.", - Type: []string{"string"}, - Format: "", - }, - }, - "resourceVersion": { - SchemaProps: spec.SchemaProps{ - Description: "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", - Type: []string{"string"}, - Format: "", - }, - }, - "continue": { - SchemaProps: spec.SchemaProps{ - Description: "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a consistent list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response, unless you have received this token from an error message.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_ListOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ListOptions is the query options to a standard REST list call.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "labelSelector": { - SchemaProps: spec.SchemaProps{ - Description: "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - Type: []string{"string"}, - Format: "", - }, - }, - "fieldSelector": { - SchemaProps: spec.SchemaProps{ - Description: "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - Type: []string{"string"}, - Format: "", - }, - }, - "watch": { - SchemaProps: spec.SchemaProps{ - Description: "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "resourceVersion": { - SchemaProps: spec.SchemaProps{ - Description: "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - Type: []string{"string"}, - Format: "", - }, - }, - "timeoutSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "limit": { - SchemaProps: spec.SchemaProps{ - Description: "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "continue": { - SchemaProps: spec.SchemaProps{ - Description: "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_ManagedFieldsEntry(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource that the fieldset applies to.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "manager": { - SchemaProps: spec.SchemaProps{ - Description: "Manager is an identifier of the workflow managing these fields.", - Type: []string{"string"}, - Format: "", - }, - }, - "operation": { - SchemaProps: spec.SchemaProps{ - Description: "Operation is the type of operation which lead to this ManagedFieldsEntry being created. The only valid values for this field are 'Apply' and 'Update'.", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the version of this resource that this field set applies to. The format is \"group/version\" just like the top-level APIVersion field. It is necessary to track the version of a field set because it cannot be automatically converted.", - Type: []string{"string"}, - Format: "", - }, - }, - "time": { - SchemaProps: spec.SchemaProps{ - Description: "Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply'", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "fields": { - SchemaProps: spec.SchemaProps{ - Description: "Fields identifies a set of fields.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Fields"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Fields", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_meta_v1_MicroTime(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MicroTime is version of Time with microsecond level precision.", - Type: v1.MicroTime{}.OpenAPISchemaType(), - Format: v1.MicroTime{}.OpenAPISchemaFormat(), - }, - }, - } -} - -func schema_pkg_apis_meta_v1_ObjectMeta(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", - Type: []string{"string"}, - Format: "", - }, - }, - "generateName": { - SchemaProps: spec.SchemaProps{ - Description: "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency", - Type: []string{"string"}, - Format: "", - }, - }, - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces", - Type: []string{"string"}, - Format: "", - }, - }, - "selfLink": { - SchemaProps: spec.SchemaProps{ - Description: "SelfLink is a URL representing this object. Populated by the system. Read-only.", - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", - Type: []string{"string"}, - Format: "", - }, - }, - "resourceVersion": { - SchemaProps: spec.SchemaProps{ - Description: "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", - Type: []string{"string"}, - Format: "", - }, - }, - "generation": { - SchemaProps: spec.SchemaProps{ - Description: "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "creationTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "deletionTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "deletionGracePeriodSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "labels": { - SchemaProps: spec.SchemaProps{ - Description: "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "annotations": { - SchemaProps: spec.SchemaProps{ - Description: "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "ownerReferences": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "uid", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference"), - }, - }, - }, - }, - }, - "initializers": { - SchemaProps: spec.SchemaProps{ - Description: "An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n\nWhen an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.\n\nDEPRECATED - initializers are an alpha field and will be removed in v1.15.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Initializers"), - }, - }, - "finalizers": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "clusterName": { - SchemaProps: spec.SchemaProps{ - Description: "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", - Type: []string{"string"}, - Format: "", - }, - }, - "managedFields": { - SchemaProps: spec.SchemaProps{ - Description: "ManagedFields maps workflow-id and version to the set of fields that are managed by that workflow. This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field. A workflow can be the user's name, a controller's name, or the name of a specific apply path like \"ci-cd\". The set of fields is always in the version that the workflow used when modifying the object.\n\nThis field is alpha and can be changed or removed without notice.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Initializers", "k8s.io/apimachinery/pkg/apis/meta/v1.ManagedFieldsEntry", "k8s.io/apimachinery/pkg/apis/meta/v1.OwnerReference", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_meta_v1_OwnerReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "OwnerReference contains enough information to let you identify an owning object. An owning object must be in the same namespace as the dependent, or be cluster-scoped, so there is no namespace field.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "API version of the referent.", - Type: []string{"string"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", - Type: []string{"string"}, - Format: "", - }, - }, - "controller": { - SchemaProps: spec.SchemaProps{ - Description: "If true, this reference points to the managing controller.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "blockOwnerDeletion": { - SchemaProps: spec.SchemaProps{ - Description: "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"apiVersion", "kind", "name", "uid"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_Patch(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.", - Type: []string{"object"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_PatchOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PatchOptions may be provided when patching an API object. PatchOptions is meant to be a superset of UpdateOptions.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "dryRun": { - SchemaProps: spec.SchemaProps{ - Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "force": { - SchemaProps: spec.SchemaProps{ - Description: "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "fieldManager": { - SchemaProps: spec.SchemaProps{ - Description: "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_Preconditions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the target UID.", - Type: []string{"string"}, - Format: "", - }, - }, - "resourceVersion": { - SchemaProps: spec.SchemaProps{ - Description: "Specifies the target ResourceVersion", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_RootPaths(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RootPaths lists the paths available at root. For example: \"/healthz\", \"/apis\".", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "paths": { - SchemaProps: spec.SchemaProps{ - Description: "paths are the paths available at root.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"paths"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_ServerAddressByClientCIDR(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "clientCIDR": { - SchemaProps: spec.SchemaProps{ - Description: "The CIDR with which clients can match their IP to figure out the server address that they should use.", - Type: []string{"string"}, - Format: "", - }, - }, - "serverAddress": { - SchemaProps: spec.SchemaProps{ - Description: "Address of this server, suitable for a client that matches the above CIDR. This can be a hostname, hostname:port, IP or IP:port.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"clientCIDR", "serverAddress"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_Status(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Status is a return value for calls that don't return other objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human-readable description of the status of this operation.", - Type: []string{"string"}, - Format: "", - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.", - Type: []string{"string"}, - Format: "", - }, - }, - "details": { - SchemaProps: spec.SchemaProps{ - Description: "Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.StatusDetails"), - }, - }, - "code": { - SchemaProps: spec.SchemaProps{ - Description: "Suggested HTTP return code for this status, 0 if not set.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.StatusDetails"}, - } -} - -func schema_pkg_apis_meta_v1_StatusCause(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "A machine-readable description of the cause of the error. If this value is empty there is no information available.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "A human-readable description of the cause of the error. This field may be presented as-is to a reader.", - Type: []string{"string"}, - Format: "", - }, - }, - "field": { - SchemaProps: spec.SchemaProps{ - Description: "The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n\nExamples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\"", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_StatusDetails(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).", - Type: []string{"string"}, - Format: "", - }, - }, - "group": { - SchemaProps: spec.SchemaProps{ - Description: "The group attribute of the resource associated with the status StatusReason.", - Type: []string{"string"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Description: "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids", - Type: []string{"string"}, - Format: "", - }, - }, - "causes": { - SchemaProps: spec.SchemaProps{ - Description: "The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.StatusCause"), - }, - }, - }, - }, - }, - "retryAfterSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.StatusCause"}, - } -} - -func schema_pkg_apis_meta_v1_Time(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Time is a wrapper around time.Time which supports correct marshaling to YAML and JSON. Wrappers are provided for many of the factory methods that the time package offers.", - Type: v1.Time{}.OpenAPISchemaType(), - Format: v1.Time{}.OpenAPISchemaFormat(), - }, - }, - } -} - -func schema_pkg_apis_meta_v1_Timestamp(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Timestamp is a struct that is equivalent to Time, but intended for protobuf marshalling/unmarshalling. It is generated into a serialization that matches Time. Do not use in Go structs.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "seconds": { - SchemaProps: spec.SchemaProps{ - Description: "Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "nanos": { - SchemaProps: spec.SchemaProps{ - Description: "Non-negative fractions of a second at nanosecond resolution. Negative second values with fractions must still have non-negative nanos values that count forward in time. Must be from 0 to 999,999,999 inclusive. This field may be limited in precision depending on context.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"seconds", "nanos"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_TypeMeta(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TypeMeta describes an individual object in an API response or request with strings representing the type of the object and its API schema version. Structures that are versioned or persisted should inline TypeMeta.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_UpdateOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "UpdateOptions may be provided when updating an API object. All fields in UpdateOptions should also be present in PatchOptions.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "dryRun": { - SchemaProps: spec.SchemaProps{ - Description: "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "fieldManager": { - SchemaProps: spec.SchemaProps{ - Description: "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_meta_v1_WatchEvent(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Event represents a single event to a watched resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "object": { - SchemaProps: spec.SchemaProps{ - Description: "Object is:\n * If Type is Added or Modified: the new state of the object.\n * If Type is Deleted: the state of the object immediately before deletion.\n * If Type is Error: *Status is recommended; other types may make sense\n depending on context.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), - }, - }, - }, - Required: []string{"type", "object"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/runtime.RawExtension"}, - } -} - -func schema_pkg_apis_meta_v1beta1_PartialObjectMetadata(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PartialObjectMetadata is a generic representation of any object with ObjectMeta. It allows clients to get access to a particular ObjectMeta schema without knowing the details of the version.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, - } -} - -func schema_pkg_apis_meta_v1beta1_PartialObjectMetadataList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PartialObjectMetadataList contains a list of objects containing only their metadata", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items contains each of the included items.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1beta1.PartialObjectMetadata"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1beta1.PartialObjectMetadata"}, - } -} - -func schema_pkg_apis_meta_v1beta1_Table(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Table is a tabular representation of a set of API resources. The server transforms the object into a set of preferred columns for quickly reviewing the objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "columnDefinitions": { - SchemaProps: spec.SchemaProps{ - Description: "columnDefinitions describes each column in the returned items array. The number of cells per row will always match the number of column definitions.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1beta1.TableColumnDefinition"), - }, - }, - }, - }, - }, - "rows": { - SchemaProps: spec.SchemaProps{ - Description: "rows is the list of items in the table.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1beta1.TableRow"), - }, - }, - }, - }, - }, - }, - Required: []string{"columnDefinitions", "rows"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apimachinery/pkg/apis/meta/v1beta1.TableColumnDefinition", "k8s.io/apimachinery/pkg/apis/meta/v1beta1.TableRow"}, - } -} - -func schema_pkg_apis_meta_v1beta1_TableColumnDefinition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TableColumnDefinition contains information about a column returned in the Table.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is a human readable name for the column.", - Type: []string{"string"}, - Format: "", - }, - }, - "type": { - SchemaProps: spec.SchemaProps{ - Description: "type is an OpenAPI type definition for this column. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", - Type: []string{"string"}, - Format: "", - }, - }, - "format": { - SchemaProps: spec.SchemaProps{ - Description: "format is an optional OpenAPI type definition for this column. The 'name' format is applied to the primary identifier column to assist in clients identifying column is the resource name. See https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types for more.", - Type: []string{"string"}, - Format: "", - }, - }, - "description": { - SchemaProps: spec.SchemaProps{ - Description: "description is a human readable description of this column.", - Type: []string{"string"}, - Format: "", - }, - }, - "priority": { - SchemaProps: spec.SchemaProps{ - Description: "priority is an integer defining the relative importance of this column compared to others. Lower numbers are considered higher priority. Columns that may be omitted in limited space scenarios should be given a higher priority.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"name", "type", "format", "description", "priority"}, - }, - }, - } -} - -func schema_pkg_apis_meta_v1beta1_TableOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TableOptions are used when a Table is requested by the caller.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "includeObject": { - SchemaProps: spec.SchemaProps{ - Description: "includeObject decides whether to include each object along with its columnar information. Specifying \"None\" will return no object, specifying \"Object\" will return the full object contents, and specifying \"Metadata\" (the default) will return the object's metadata in the PartialObjectMetadata kind in version v1beta1 of the meta.k8s.io API group.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_meta_v1beta1_TableRow(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TableRow is an individual row in a table.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "cells": { - SchemaProps: spec.SchemaProps{ - Description: "cells will be as wide as headers and may contain strings, numbers (float64 or int64), booleans, simple maps, or lists, or null. See the type field of the column definition for a more detailed description.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Format: "", - }, - }, - }, - }, - }, - "conditions": { - SchemaProps: spec.SchemaProps{ - Description: "conditions describe additional status of a row that are relevant for a human user.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1beta1.TableRowCondition"), - }, - }, - }, - }, - }, - "object": { - SchemaProps: spec.SchemaProps{ - Description: "This field contains the requested additional information about each object based on the includeObject policy when requesting the Table. If \"None\", this field is empty, if \"Object\" this will be the default serialization of the object for the current API version, and if \"Metadata\" (the default) will contain the object metadata. Check the returned kind and apiVersion of the object before parsing.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.RawExtension"), - }, - }, - }, - Required: []string{"cells"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1beta1.TableRowCondition", "k8s.io/apimachinery/pkg/runtime.RawExtension"}, - } -} - -func schema_pkg_apis_meta_v1beta1_TableRowCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TableRowCondition allows a row to be marked with additional information.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type of row condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status of the condition, one of True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "(brief) machine readable reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Human readable message indicating details about last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - } -} - -func schema_k8sio_apimachinery_pkg_runtime_RawExtension(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RawExtension is used to hold extensions in external versions.\n\nTo use this, make a field which has RawExtension as its type in your external, versioned struct, and Object in your internal struct. You also need to register your various plugin types.\n\n// Internal package: type MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.Object `json:\"myPlugin\"`\n} type PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// External package: type MyAPIObject struct {\n\truntime.TypeMeta `json:\",inline\"`\n\tMyPlugin runtime.RawExtension `json:\"myPlugin\"`\n} type PluginA struct {\n\tAOption string `json:\"aOption\"`\n}\n\n// On the wire, the JSON will look something like this: {\n\t\"kind\":\"MyAPIObject\",\n\t\"apiVersion\":\"v1\",\n\t\"myPlugin\": {\n\t\t\"kind\":\"PluginA\",\n\t\t\"aOption\":\"foo\",\n\t},\n}\n\nSo what happens? Decode first uses json or yaml to unmarshal the serialized data into your external MyAPIObject. That causes the raw JSON to be stored, but not unpacked. The next step is to copy (using pkg/conversion) into the internal struct. The runtime package's DefaultScheme has conversion functions installed which will unpack the JSON stored in RawExtension, turning it into the correct object type, and storing it in the Object. (TODO: In the case where the object is of an unknown type, a runtime.Unknown object will be created and stored.)", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "Raw": { - SchemaProps: spec.SchemaProps{ - Description: "Raw is the underlying serialization of this object.", - Type: []string{"string"}, - Format: "byte", - }, - }, - }, - Required: []string{"Raw"}, - }, - }, - } -} - -func schema_k8sio_apimachinery_pkg_runtime_TypeMeta(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TypeMeta is shared by all top level objects. The proper way to use it is to inline it in your type, like this: type MyAwesomeAPIObject struct {\n runtime.TypeMeta `json:\",inline\"`\n ... // other fields\n} func (obj *MyAwesomeAPIObject) SetGroupVersionKind(gvk *metav1.GroupVersionKind) { metav1.UpdateTypeMeta(obj,gvk) }; GroupVersionKind() *GroupVersionKind\n\nTypeMeta is provided here for convenience. You may use it directly from this package or define your own with the same fields.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_apimachinery_pkg_runtime_Unknown(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Unknown allows api objects with unknown types to be passed-through. This can be used to deal with the API objects from a plug-in. Unknown objects still have functioning TypeMeta features-- kind, version, etc. metadata and field mutatation.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "kind": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "Raw": { - SchemaProps: spec.SchemaProps{ - Description: "Raw will hold the complete serialized object which couldn't be matched with a registered type. Most likely, nothing should be done with this except for passing it through the system.", - Type: []string{"string"}, - Format: "byte", - }, - }, - "ContentEncoding": { - SchemaProps: spec.SchemaProps{ - Description: "ContentEncoding is encoding used to encode 'Raw' data. Unspecified means no encoding.", - Type: []string{"string"}, - Format: "", - }, - }, - "ContentType": { - SchemaProps: spec.SchemaProps{ - Description: "ContentType is serialization method used to serialize 'Raw'. Unspecified means ContentTypeJSON.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"Raw", "ContentEncoding", "ContentType"}, - }, - }, - } -} - -func schema_apimachinery_pkg_util_intstr_IntOrString(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "IntOrString is a type that can hold an int32 or a string. When used in JSON or YAML marshalling and unmarshalling, it produces or consumes the inner type. This allows you to have, for example, a JSON field that can accept a name or number.", - Type: intstr.IntOrString{}.OpenAPISchemaType(), - Format: intstr.IntOrString{}.OpenAPISchemaFormat(), - }, - }, - } -} - -func schema_k8sio_apimachinery_pkg_version_Info(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Info contains versioning information. how we'll want to distribute that information.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "major": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "minor": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "gitVersion": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "gitCommit": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "gitTreeState": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "buildDate": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "goVersion": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "compiler": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "platform": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"major", "minor", "gitVersion", "gitCommit", "gitTreeState", "buildDate", "goVersion", "compiler", "platform"}, - }, - }, - } -} - -func schema_pkg_apis_audit_v1_Event(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Event captures all the information that can be included in an API audit log.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "level": { - SchemaProps: spec.SchemaProps{ - Description: "AuditLevel at which event was generated", - Type: []string{"string"}, - Format: "", - }, - }, - "auditID": { - SchemaProps: spec.SchemaProps{ - Description: "Unique audit ID, generated for each request.", - Type: []string{"string"}, - Format: "", - }, - }, - "stage": { - SchemaProps: spec.SchemaProps{ - Description: "Stage of the request handling when this event instance was generated.", - Type: []string{"string"}, - Format: "", - }, - }, - "requestURI": { - SchemaProps: spec.SchemaProps{ - Description: "RequestURI is the request URI as sent by the client to a server.", - Type: []string{"string"}, - Format: "", - }, - }, - "verb": { - SchemaProps: spec.SchemaProps{ - Description: "Verb is the kubernetes verb associated with the request. For non-resource requests, this is the lower-cased HTTP method.", - Type: []string{"string"}, - Format: "", - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "Authenticated user information.", - Ref: ref("k8s.io/api/authentication/v1.UserInfo"), - }, - }, - "impersonatedUser": { - SchemaProps: spec.SchemaProps{ - Description: "Impersonated user information.", - Ref: ref("k8s.io/api/authentication/v1.UserInfo"), - }, - }, - "sourceIPs": { - SchemaProps: spec.SchemaProps{ - Description: "Source IPs, from where the request originated and intermediate proxies.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "userAgent": { - SchemaProps: spec.SchemaProps{ - Description: "UserAgent records the user agent string reported by the client. Note that the UserAgent is provided by the client, and must not be trusted.", - Type: []string{"string"}, - Format: "", - }, - }, - "objectRef": { - SchemaProps: spec.SchemaProps{ - Description: "Object reference this request is targeted at. Does not apply for List-type requests, or non-resource requests.", - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1.ObjectReference"), - }, - }, - "responseStatus": { - SchemaProps: spec.SchemaProps{ - Description: "The response status, populated even when the ResponseObject is not a Status type. For successful responses, this will only include the Code and StatusSuccess. For non-status type error responses, this will be auto-populated with the error Message.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Status"), - }, - }, - "requestObject": { - SchemaProps: spec.SchemaProps{ - Description: "API object from the request, in JSON format. The RequestObject is recorded as-is in the request (possibly re-encoded as JSON), prior to version conversion, defaulting, admission or merging. It is an external versioned object type, and may not be a valid object on its own. Omitted for non-resource requests. Only logged at Request Level and higher.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), - }, - }, - "responseObject": { - SchemaProps: spec.SchemaProps{ - Description: "API object returned in the response, in JSON. The ResponseObject is recorded after conversion to the external type, and serialized as JSON. Omitted for non-resource requests. Only logged at Response Level.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), - }, - }, - "requestReceivedTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "Time the request reached the apiserver.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "stageTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "Time the request reached current audit stage.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "annotations": { - SchemaProps: spec.SchemaProps{ - Description: "Annotations is an unstructured key value map stored with an audit event that may be set by plugins invoked in the request serving chain, including authentication, authorization and admission plugins. Note that these annotations are for the audit event, and do not correspond to the metadata.annotations of the submitted object. Keys should uniquely identify the informing component to avoid name collisions (e.g. podsecuritypolicy.admission.k8s.io/policy). Values should be short. Annotations are included in the Metadata level.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"level", "auditID", "stage", "requestURI", "verb", "user"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authentication/v1.UserInfo", "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime", "k8s.io/apimachinery/pkg/apis/meta/v1.Status", "k8s.io/apimachinery/pkg/runtime.Unknown", "k8s.io/apiserver/pkg/apis/audit/v1.ObjectReference"}, - } -} - -func schema_pkg_apis_audit_v1_EventList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EventList is a list of audit Events.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1.Event"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1.Event"}, - } -} - -func schema_pkg_apis_audit_v1_GroupResources(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GroupResources represents resource kinds in an API group.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "group": { - SchemaProps: spec.SchemaProps{ - Description: "Group is the name of the API group that contains the resources. The empty string represents the core API group.", - Type: []string{"string"}, - Format: "", - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' matches pods. 'pods/log' matches the log subresource of pods. '*' matches all resources and their subresources. 'pods/*' matches all subresources of pods. '*/scale' matches all scale subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nAn empty list implies all resources and subresources in this API groups apply.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resourceNames": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceNames is a list of resource instance names that the policy matches. Using this field requires Resources to be specified. An empty list implies that every instance of the resource is matched.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_audit_v1_ObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectReference contains enough information to let you inspect or modify the referred object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "resource": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "namespace": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "apiGroup": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroup is the name of the API group that contains the referred object. The empty string represents the core API group.", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion is the version of the API group that contains the referred object.", - Type: []string{"string"}, - Format: "", - }, - }, - "resourceVersion": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "subresource": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_audit_v1_Policy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Policy defines the configuration of audit logging, and the rules for how different request categories are logged.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "ObjectMeta is included for interoperability with API infrastructure.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "Rules specify the audit Level a request should be recorded at. A request may match multiple rules, in which case the FIRST matching rule is used. The default audit level is None, but can be overridden by a catch-all rule at the end of the list. PolicyRules are strictly ordered.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1.PolicyRule"), - }, - }, - }, - }, - }, - "omitStages": { - SchemaProps: spec.SchemaProps{ - Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified per rule in which case the union of both are omitted.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"rules"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apiserver/pkg/apis/audit/v1.PolicyRule"}, - } -} - -func schema_pkg_apis_audit_v1_PolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PolicyList is a list of audit Policies.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1.Policy"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1.Policy"}, - } -} - -func schema_pkg_apis_audit_v1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PolicyRule maps requests based off metadata to an audit Level. Requests must match the rules of every field (an intersection of rules).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "level": { - SchemaProps: spec.SchemaProps{ - Description: "The Level that requests matching this rule are recorded at.", - Type: []string{"string"}, - Format: "", - }, - }, - "users": { - SchemaProps: spec.SchemaProps{ - Description: "The users (by authenticated user name) this rule applies to. An empty list implies every user.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "userGroups": { - SchemaProps: spec.SchemaProps{ - Description: "The user groups this rule applies to. A user is considered matching if it is a member of any of the UserGroups. An empty list implies every user group.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "verbs": { - SchemaProps: spec.SchemaProps{ - Description: "The verbs that match this rule. An empty list implies every verb.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources that this rule matches. An empty list implies all kinds in all API groups.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1.GroupResources"), - }, - }, - }, - }, - }, - "namespaces": { - SchemaProps: spec.SchemaProps{ - Description: "Namespaces that this rule matches. The empty string \"\" matches non-namespaced resources. An empty list implies every namespace.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "nonResourceURLs": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceURLs is a set of URL paths that should be audited. *s are allowed, but only as the full, final step in the path. Examples:\n \"/metrics\" - Log requests for apiserver metrics\n \"/healthz*\" - Log all health checks", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "omitStages": { - SchemaProps: spec.SchemaProps{ - Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified policy wide in which case the union of both are omitted. An empty list means no restrictions will apply.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"level"}, - }, - }, - Dependencies: []string{ - "k8s.io/apiserver/pkg/apis/audit/v1.GroupResources"}, - } -} - -func schema_pkg_apis_audit_v1alpha1_Event(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Event captures all the information that can be included in an API audit log.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "ObjectMeta is included for interoperability with API infrastructure.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "level": { - SchemaProps: spec.SchemaProps{ - Description: "AuditLevel at which event was generated", - Type: []string{"string"}, - Format: "", - }, - }, - "timestamp": { - SchemaProps: spec.SchemaProps{ - Description: "Time the request reached the apiserver.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "auditID": { - SchemaProps: spec.SchemaProps{ - Description: "Unique audit ID, generated for each request.", - Type: []string{"string"}, - Format: "", - }, - }, - "stage": { - SchemaProps: spec.SchemaProps{ - Description: "Stage of the request handling when this event instance was generated.", - Type: []string{"string"}, - Format: "", - }, - }, - "requestURI": { - SchemaProps: spec.SchemaProps{ - Description: "RequestURI is the request URI as sent by the client to a server.", - Type: []string{"string"}, - Format: "", - }, - }, - "verb": { - SchemaProps: spec.SchemaProps{ - Description: "Verb is the kubernetes verb associated with the request. For non-resource requests, this is the lower-cased HTTP method.", - Type: []string{"string"}, - Format: "", - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "Authenticated user information.", - Ref: ref("k8s.io/api/authentication/v1.UserInfo"), - }, - }, - "impersonatedUser": { - SchemaProps: spec.SchemaProps{ - Description: "Impersonated user information.", - Ref: ref("k8s.io/api/authentication/v1.UserInfo"), - }, - }, - "sourceIPs": { - SchemaProps: spec.SchemaProps{ - Description: "Source IPs, from where the request originated and intermediate proxies.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "userAgent": { - SchemaProps: spec.SchemaProps{ - Description: "UserAgent records the user agent string reported by the client. Note that the UserAgent is provided by the client, and must not be trusted.", - Type: []string{"string"}, - Format: "", - }, - }, - "objectRef": { - SchemaProps: spec.SchemaProps{ - Description: "Object reference this request is targeted at. Does not apply for List-type requests, or non-resource requests.", - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1alpha1.ObjectReference"), - }, - }, - "responseStatus": { - SchemaProps: spec.SchemaProps{ - Description: "The response status, populated even when the ResponseObject is not a Status type. For successful responses, this will only include the Code and StatusSuccess. For non-status type error responses, this will be auto-populated with the error Message.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Status"), - }, - }, - "requestObject": { - SchemaProps: spec.SchemaProps{ - Description: "API object from the request, in JSON format. The RequestObject is recorded as-is in the request (possibly re-encoded as JSON), prior to version conversion, defaulting, admission or merging. It is an external versioned object type, and may not be a valid object on its own. Omitted for non-resource requests. Only logged at Request Level and higher.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), - }, - }, - "responseObject": { - SchemaProps: spec.SchemaProps{ - Description: "API object returned in the response, in JSON. The ResponseObject is recorded after conversion to the external type, and serialized as JSON. Omitted for non-resource requests. Only logged at Response Level.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), - }, - }, - "requestReceivedTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "Time the request reached the apiserver.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "stageTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "Time the request reached current audit stage.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "annotations": { - SchemaProps: spec.SchemaProps{ - Description: "Annotations is an unstructured key value map stored with an audit event that may be set by plugins invoked in the request serving chain, including authentication, authorization and admission plugins. Note that these annotations are for the audit event, and do not correspond to the metadata.annotations of the submitted object. Keys should uniquely identify the informing component to avoid name collisions (e.g. podsecuritypolicy.admission.k8s.io/policy). Values should be short. Annotations are included in the Metadata level.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"level", "timestamp", "auditID", "stage", "requestURI", "verb", "user"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authentication/v1.UserInfo", "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Status", "k8s.io/apimachinery/pkg/apis/meta/v1.Time", "k8s.io/apimachinery/pkg/runtime.Unknown", "k8s.io/apiserver/pkg/apis/audit/v1alpha1.ObjectReference"}, - } -} - -func schema_pkg_apis_audit_v1alpha1_EventList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EventList is a list of audit Events.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1alpha1.Event"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1alpha1.Event"}, - } -} - -func schema_pkg_apis_audit_v1alpha1_GroupResources(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GroupResources represents resource kinds in an API group.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "group": { - SchemaProps: spec.SchemaProps{ - Description: "Group is the name of the API group that contains the resources. The empty string represents the core API group.", - Type: []string{"string"}, - Format: "", - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' matches pods. 'pods/log' matches the log subresource of pods. '*' matches all resources and their subresources. 'pods/*' matches all subresources of pods. '*/scale' matches all scale subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nAn empty list implies all resources and subresources in this API groups apply.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resourceNames": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceNames is a list of resource instance names that the policy matches. Using this field requires Resources to be specified. An empty list implies that every instance of the resource is matched.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_audit_v1alpha1_ObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectReference contains enough information to let you inspect or modify the referred object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "resource": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "namespace": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "resourceVersion": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "subresource": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_audit_v1alpha1_Policy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Policy defines the configuration of audit logging, and the rules for how different request categories are logged.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "ObjectMeta is included for interoperability with API infrastructure.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "Rules specify the audit Level a request should be recorded at. A request may match multiple rules, in which case the FIRST matching rule is used. The default audit level is None, but can be overridden by a catch-all rule at the end of the list. PolicyRules are strictly ordered.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1alpha1.PolicyRule"), - }, - }, - }, - }, - }, - "omitStages": { - SchemaProps: spec.SchemaProps{ - Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified per rule in which case the union of both are omitted.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"rules"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apiserver/pkg/apis/audit/v1alpha1.PolicyRule"}, - } -} - -func schema_pkg_apis_audit_v1alpha1_PolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PolicyList is a list of audit Policies.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1alpha1.Policy"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1alpha1.Policy"}, - } -} - -func schema_pkg_apis_audit_v1alpha1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PolicyRule maps requests based off metadata to an audit Level. Requests must match the rules of every field (an intersection of rules).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "level": { - SchemaProps: spec.SchemaProps{ - Description: "The Level that requests matching this rule are recorded at.", - Type: []string{"string"}, - Format: "", - }, - }, - "users": { - SchemaProps: spec.SchemaProps{ - Description: "The users (by authenticated user name) this rule applies to. An empty list implies every user.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "userGroups": { - SchemaProps: spec.SchemaProps{ - Description: "The user groups this rule applies to. A user is considered matching if it is a member of any of the UserGroups. An empty list implies every user group.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "verbs": { - SchemaProps: spec.SchemaProps{ - Description: "The verbs that match this rule. An empty list implies every verb.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources that this rule matches. An empty list implies all kinds in all API groups.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1alpha1.GroupResources"), - }, - }, - }, - }, - }, - "namespaces": { - SchemaProps: spec.SchemaProps{ - Description: "Namespaces that this rule matches. The empty string \"\" matches non-namespaced resources. An empty list implies every namespace.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "nonResourceURLs": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceURLs is a set of URL paths that should be audited. *s are allowed, but only as the full, final step in the path. Examples:\n \"/metrics\" - Log requests for apiserver metrics\n \"/healthz*\" - Log all health checks", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "omitStages": { - SchemaProps: spec.SchemaProps{ - Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified policy wide in which case the union of both are omitted. An empty list means no restrictions will apply.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"level"}, - }, - }, - Dependencies: []string{ - "k8s.io/apiserver/pkg/apis/audit/v1alpha1.GroupResources"}, - } -} - -func schema_pkg_apis_audit_v1beta1_Event(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Event captures all the information that can be included in an API audit log.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "ObjectMeta is included for interoperability with API infrastructure. DEPRECATED: Use StageTimestamp which supports micro second instead of ObjectMeta.CreateTimestamp and the rest of the object is not used", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "level": { - SchemaProps: spec.SchemaProps{ - Description: "AuditLevel at which event was generated", - Type: []string{"string"}, - Format: "", - }, - }, - "timestamp": { - SchemaProps: spec.SchemaProps{ - Description: "Time the request reached the apiserver. DEPRECATED: Use RequestReceivedTimestamp which supports micro second instead.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "auditID": { - SchemaProps: spec.SchemaProps{ - Description: "Unique audit ID, generated for each request.", - Type: []string{"string"}, - Format: "", - }, - }, - "stage": { - SchemaProps: spec.SchemaProps{ - Description: "Stage of the request handling when this event instance was generated.", - Type: []string{"string"}, - Format: "", - }, - }, - "requestURI": { - SchemaProps: spec.SchemaProps{ - Description: "RequestURI is the request URI as sent by the client to a server.", - Type: []string{"string"}, - Format: "", - }, - }, - "verb": { - SchemaProps: spec.SchemaProps{ - Description: "Verb is the kubernetes verb associated with the request. For non-resource requests, this is the lower-cased HTTP method.", - Type: []string{"string"}, - Format: "", - }, - }, - "user": { - SchemaProps: spec.SchemaProps{ - Description: "Authenticated user information.", - Ref: ref("k8s.io/api/authentication/v1.UserInfo"), - }, - }, - "impersonatedUser": { - SchemaProps: spec.SchemaProps{ - Description: "Impersonated user information.", - Ref: ref("k8s.io/api/authentication/v1.UserInfo"), - }, - }, - "sourceIPs": { - SchemaProps: spec.SchemaProps{ - Description: "Source IPs, from where the request originated and intermediate proxies.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "userAgent": { - SchemaProps: spec.SchemaProps{ - Description: "UserAgent records the user agent string reported by the client. Note that the UserAgent is provided by the client, and must not be trusted.", - Type: []string{"string"}, - Format: "", - }, - }, - "objectRef": { - SchemaProps: spec.SchemaProps{ - Description: "Object reference this request is targeted at. Does not apply for List-type requests, or non-resource requests.", - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1beta1.ObjectReference"), - }, - }, - "responseStatus": { - SchemaProps: spec.SchemaProps{ - Description: "The response status, populated even when the ResponseObject is not a Status type. For successful responses, this will only include the Code and StatusSuccess. For non-status type error responses, this will be auto-populated with the error Message.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Status"), - }, - }, - "requestObject": { - SchemaProps: spec.SchemaProps{ - Description: "API object from the request, in JSON format. The RequestObject is recorded as-is in the request (possibly re-encoded as JSON), prior to version conversion, defaulting, admission or merging. It is an external versioned object type, and may not be a valid object on its own. Omitted for non-resource requests. Only logged at Request Level and higher.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), - }, - }, - "responseObject": { - SchemaProps: spec.SchemaProps{ - Description: "API object returned in the response, in JSON. The ResponseObject is recorded after conversion to the external type, and serialized as JSON. Omitted for non-resource requests. Only logged at Response Level.", - Ref: ref("k8s.io/apimachinery/pkg/runtime.Unknown"), - }, - }, - "requestReceivedTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "Time the request reached the apiserver.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "stageTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "Time the request reached current audit stage.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime"), - }, - }, - "annotations": { - SchemaProps: spec.SchemaProps{ - Description: "Annotations is an unstructured key value map stored with an audit event that may be set by plugins invoked in the request serving chain, including authentication, authorization and admission plugins. Note that these annotations are for the audit event, and do not correspond to the metadata.annotations of the submitted object. Keys should uniquely identify the informing component to avoid name collisions (e.g. podsecuritypolicy.admission.k8s.io/policy). Values should be short. Annotations are included in the Metadata level.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"level", "timestamp", "auditID", "stage", "requestURI", "verb", "user"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/authentication/v1.UserInfo", "k8s.io/apimachinery/pkg/apis/meta/v1.MicroTime", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Status", "k8s.io/apimachinery/pkg/apis/meta/v1.Time", "k8s.io/apimachinery/pkg/runtime.Unknown", "k8s.io/apiserver/pkg/apis/audit/v1beta1.ObjectReference"}, - } -} - -func schema_pkg_apis_audit_v1beta1_EventList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EventList is a list of audit Events.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1beta1.Event"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1beta1.Event"}, - } -} - -func schema_pkg_apis_audit_v1beta1_GroupResources(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GroupResources represents resource kinds in an API group.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "group": { - SchemaProps: spec.SchemaProps{ - Description: "Group is the name of the API group that contains the resources. The empty string represents the core API group.", - Type: []string{"string"}, - Format: "", - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources is a list of resources this rule applies to.\n\nFor example: 'pods' matches pods. 'pods/log' matches the log subresource of pods. '*' matches all resources and their subresources. 'pods/*' matches all subresources of pods. '*/scale' matches all scale subresources.\n\nIf wildcard is present, the validation rule will ensure resources do not overlap with each other.\n\nAn empty list implies all resources and subresources in this API groups apply.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resourceNames": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceNames is a list of resource instance names that the policy matches. Using this field requires Resources to be specified. An empty list implies that every instance of the resource is matched.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_audit_v1beta1_ObjectReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ObjectReference contains enough information to let you inspect or modify the referred object.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "resource": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "namespace": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "uid": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "apiGroup": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroup is the name of the API group that contains the referred object. The empty string represents the core API group.", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion is the version of the API group that contains the referred object.", - Type: []string{"string"}, - Format: "", - }, - }, - "resourceVersion": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - "subresource": { - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_audit_v1beta1_Policy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Policy defines the configuration of audit logging, and the rules for how different request categories are logged.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "ObjectMeta is included for interoperability with API infrastructure.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "rules": { - SchemaProps: spec.SchemaProps{ - Description: "Rules specify the audit Level a request should be recorded at. A request may match multiple rules, in which case the FIRST matching rule is used. The default audit level is None, but can be overridden by a catch-all rule at the end of the list. PolicyRules are strictly ordered.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1beta1.PolicyRule"), - }, - }, - }, - }, - }, - "omitStages": { - SchemaProps: spec.SchemaProps{ - Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified per rule in which case the union of both are omitted.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"rules"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apiserver/pkg/apis/audit/v1beta1.PolicyRule"}, - } -} - -func schema_pkg_apis_audit_v1beta1_PolicyList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PolicyList is a list of audit Policies.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1beta1.Policy"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/apiserver/pkg/apis/audit/v1beta1.Policy"}, - } -} - -func schema_pkg_apis_audit_v1beta1_PolicyRule(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PolicyRule maps requests based off metadata to an audit Level. Requests must match the rules of every field (an intersection of rules).", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "level": { - SchemaProps: spec.SchemaProps{ - Description: "The Level that requests matching this rule are recorded at.", - Type: []string{"string"}, - Format: "", - }, - }, - "users": { - SchemaProps: spec.SchemaProps{ - Description: "The users (by authenticated user name) this rule applies to. An empty list implies every user.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "userGroups": { - SchemaProps: spec.SchemaProps{ - Description: "The user groups this rule applies to. A user is considered matching if it is a member of any of the UserGroups. An empty list implies every user group.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "verbs": { - SchemaProps: spec.SchemaProps{ - Description: "The verbs that match this rule. An empty list implies every verb.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "resources": { - SchemaProps: spec.SchemaProps{ - Description: "Resources that this rule matches. An empty list implies all kinds in all API groups.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apiserver/pkg/apis/audit/v1beta1.GroupResources"), - }, - }, - }, - }, - }, - "namespaces": { - SchemaProps: spec.SchemaProps{ - Description: "Namespaces that this rule matches. The empty string \"\" matches non-namespaced resources. An empty list implies every namespace.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "nonResourceURLs": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourceURLs is a set of URL paths that should be audited. *s are allowed, but only as the full, final step in the path. Examples:\n \"/metrics\" - Log requests for apiserver metrics\n \"/healthz*\" - Log all health checks", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "omitStages": { - SchemaProps: spec.SchemaProps{ - Description: "OmitStages is a list of stages for which no events are created. Note that this can also be specified policy wide in which case the union of both are omitted. An empty list means no restrictions will apply.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"level"}, - }, - }, - Dependencies: []string{ - "k8s.io/apiserver/pkg/apis/audit/v1beta1.GroupResources"}, - } -} - -func schema_pkg_apis_clientauthentication_v1alpha1_ExecCredential(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExecCredential is used by exec-based plugins to communicate credentials to HTTP transports.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information passed to the plugin by the transport. This contains request and runtime specific information, such as if the session is interactive.", - Ref: ref("k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the plugin and holds the credentials that the transport should use to contact the API.", - Ref: ref("k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialSpec", "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.ExecCredentialStatus"}, - } -} - -func schema_pkg_apis_clientauthentication_v1alpha1_ExecCredentialSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExecCredenitalSpec holds request and runtime specific information provided by the transport.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "response": { - SchemaProps: spec.SchemaProps{ - Description: "Response is populated when the transport encounters HTTP status codes, such as 401, suggesting previous credentials were invalid.", - Ref: ref("k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.Response"), - }, - }, - "interactive": { - SchemaProps: spec.SchemaProps{ - Description: "Interactive is true when the transport detects the command is being called from an interactive prompt.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1.Response"}, - } -} - -func schema_pkg_apis_clientauthentication_v1alpha1_ExecCredentialStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExecCredentialStatus holds credentials for the transport to use.\n\nToken and ClientKeyData are sensitive fields. This data should only be transmitted in-memory between client and exec plugin process. Exec plugin itself should at least be protected via file permissions.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "expirationTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "ExpirationTimestamp indicates a time when the provided credentials expire.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "token": { - SchemaProps: spec.SchemaProps{ - Description: "Token is a bearer token used by the client for request authentication.", - Type: []string{"string"}, - Format: "", - }, - }, - "clientCertificateData": { - SchemaProps: spec.SchemaProps{ - Description: "PEM-encoded client TLS certificates (including intermediates, if any).", - Type: []string{"string"}, - Format: "", - }, - }, - "clientKeyData": { - SchemaProps: spec.SchemaProps{ - Description: "PEM-encoded private key for the above certificate.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_clientauthentication_v1alpha1_Response(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Response defines metadata about a failed request, including HTTP status code and response headers.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "header": { - SchemaProps: spec.SchemaProps{ - Description: "Header holds HTTP headers returned by the server.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - "code": { - SchemaProps: spec.SchemaProps{ - Description: "Code is the HTTP status code returned by the server.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_clientauthentication_v1beta1_ExecCredential(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExecCredentials is used by exec-based plugins to communicate credentials to HTTP transports.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec holds information passed to the plugin by the transport. This contains request and runtime specific information, such as if the session is interactive.", - Ref: ref("k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is filled in by the plugin and holds the credentials that the transport should use to contact the API.", - Ref: ref("k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialSpec", "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1.ExecCredentialStatus"}, - } -} - -func schema_pkg_apis_clientauthentication_v1beta1_ExecCredentialSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExecCredenitalSpec holds request and runtime specific information provided by the transport.", - Type: []string{"object"}, - }, - }, - } -} - -func schema_pkg_apis_clientauthentication_v1beta1_ExecCredentialStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExecCredentialStatus holds credentials for the transport to use.\n\nToken and ClientKeyData are sensitive fields. This data should only be transmitted in-memory between client and exec plugin process. Exec plugin itself should at least be protected via file permissions.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "expirationTimestamp": { - SchemaProps: spec.SchemaProps{ - Description: "ExpirationTimestamp indicates a time when the provided credentials expire.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "token": { - SchemaProps: spec.SchemaProps{ - Description: "Token is a bearer token used by the client for request authentication.", - Type: []string{"string"}, - Format: "", - }, - }, - "clientCertificateData": { - SchemaProps: spec.SchemaProps{ - Description: "PEM-encoded client TLS certificates (including intermediates, if any).", - Type: []string{"string"}, - Format: "", - }, - }, - "clientKeyData": { - SchemaProps: spec.SchemaProps{ - Description: "PEM-encoded private key for the above certificate.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_csi_v1alpha1_CSIDriver(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSIDriver captures information about a Container Storage Interface (CSI) volume driver deployed on the cluster. CSIDriver objects are non-namespaced.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard object metadata. metadata.Name indicates the name of the CSI driver that this object refers to; it MUST be the same name returned by the CSI GetPluginName() call for that driver. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the CSI Driver.", - Ref: ref("k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriverSpec"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriverSpec"}, - } -} - -func schema_pkg_apis_csi_v1alpha1_CSIDriverInfoSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSIDriverInfoSpec holds information about the specification of one CSI driver installed on a node", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is the name of the CSI driver that this object refers to. This MUST be the same name returned by the CSI GetPluginName() call for that driver.", - Type: []string{"string"}, - Format: "", - }, - }, - "nodeID": { - SchemaProps: spec.SchemaProps{ - Description: "nodeID of the node from the driver point of view. This field enables Kubernetes to communicate with storage systems that do not share the same nomenclature for nodes. For example, Kubernetes may refer to a given node as \"node1\", but the storage system may refer to the same node as \"nodeA\". When Kubernetes issues a command to the storage system to attach a volume to a specific node, it can use this field to refer to the node name using the ID that the storage system will understand, e.g. \"nodeA\" instead of \"node1\".", - Type: []string{"string"}, - Format: "", - }, - }, - "topologyKeys": { - SchemaProps: spec.SchemaProps{ - Description: "topologyKeys is the list of keys supported by the driver. When a driver is initialized on a cluster, it provides a set of topology keys that it understands (e.g. \"company.com/zone\", \"company.com/region\"). When a driver is initialized on a node it provides the same topology keys along with values that kubelet applies to the coresponding node API object as labels. When Kubernetes does topology aware provisioning, it can use this list to determine which labels it should retrieve from the node object and pass back to the driver.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"name", "nodeID", "topologyKeys"}, - }, - }, - } -} - -func schema_pkg_apis_csi_v1alpha1_CSIDriverInfoStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSIDriverInfoStatus holds information about the status of one CSI driver installed on a node", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is the name of the CSI driver that this object refers to. This MUST be the same name returned by the CSI GetPluginName() call for that driver.", - Type: []string{"string"}, - Format: "", - }, - }, - "available": { - SchemaProps: spec.SchemaProps{ - Description: "available is a boolean representing whether the driver has been installed on this node or not.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "volumePluginMechanism": { - SchemaProps: spec.SchemaProps{ - Description: "volumePluginMechanism announces what mechanism underlies volume plugins. It is set by Kubelet. It is used by the attach/detach controller, which needs to know how to perform attachments. The allowed values are: * \"in-tree\": the volume operation (e.g., attach/detach) ought to be\n directly performed by the attach/detach controller.\n* \"csi-plugin\": the attach/detach controller ought to request\n the csi plugin to perform the volume operation rather than perform it directly.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"name", "available", "volumePluginMechanism"}, - }, - }, - } -} - -func schema_pkg_apis_csi_v1alpha1_CSIDriverList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSIDriverList is a collection of CSIDriver objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of CSIDriver", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriver"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriver"}, - } -} - -func schema_pkg_apis_csi_v1alpha1_CSIDriverSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSIDriverSpec is the specification of a CSIDriver.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "attachRequired": { - SchemaProps: spec.SchemaProps{ - Description: "attachRequired indicates this CSI volume driver requires an attach operation (because it implements the CSI ControllerPublishVolume() method), and that Kubernetes should call attach and wait for any attach operation to complete before proceeding to mounting. If value is not specified, default is false -- meaning attach will not be called.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "podInfoOnMountVersion": { - SchemaProps: spec.SchemaProps{ - Description: "If specified, podInfoRequiredOnMount indicates this CSI volume driver requires additional pod information (like podName, podUID, etc.) during mount operations. If value is not specified, pod information will not be passed on mount. If value is set to a valid version, Kubelet will pass pod information as VolumeAttributes in the CSI NodePublishVolume() calls. Supported versions: Version \"v1\" will pass the following ValueAttributes \"csi.storage.k8s.io/pod.name\": pod.Name \"csi.storage.k8s.io/pod.namespace\": pod.Namespace \"csi.storage.k8s.io/pod.uid\": string(pod.UID)", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_csi_v1alpha1_CSINodeInfo(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSINodeInfo holds information about all CSI drivers installed on a node.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "metadata.name must be the Kubernetes node name.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "spec is the specification of CSINodeInfo", - Ref: ref("k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSINodeInfoSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "status is the current status of CSINodeInfo", - Ref: ref("k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSINodeInfoStatus"), - }, - }, - }, - Required: []string{"spec", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSINodeInfoSpec", "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSINodeInfoStatus"}, - } -} - -func schema_pkg_apis_csi_v1alpha1_CSINodeInfoList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSINodeInfoList is a collection of CSINodeInfo objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "items is the list of CSINodeInfo", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSINodeInfo"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSINodeInfo"}, - } -} - -func schema_pkg_apis_csi_v1alpha1_CSINodeInfoSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSINodeInfoSpec holds information about the specification of all CSI drivers installed on a node", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "drivers": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "drivers is a list of specifications of CSIDriverInfo", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriverInfoSpec"), - }, - }, - }, - }, - }, - }, - Required: []string{"drivers"}, - }, - }, - Dependencies: []string{ - "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriverInfoSpec"}, - } -} - -func schema_pkg_apis_csi_v1alpha1_CSINodeInfoStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSINodeInfoStatus holds information about the status of all CSI drivers installed on a node", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "drivers": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "name", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "drivers is a list of the statuses of CSIDriverInfo", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriverInfoStatus"), - }, - }, - }, - }, - }, - }, - Required: []string{"drivers"}, - }, - }, - Dependencies: []string{ - "k8s.io/csi-api/pkg/apis/csi/v1alpha1.CSIDriverInfoStatus"}, - } -} - -func schema_pkg_apis_apiregistration_v1_APIService(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIService represents a server for a particular GroupVersion. Name must be \"version.group\".", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec contains information for locating and communicating with a server", - Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status contains derived information about an API server", - Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceSpec", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceStatus"}, - } -} - -func schema_pkg_apis_apiregistration_v1_APIServiceCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIServiceCondition describes the state of an APIService at a particular point", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type is the type of the condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the status of the condition. Can be True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "Unique, one-word, CamelCase reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Human-readable message indicating details about last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_apiregistration_v1_APIServiceList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIServiceList is a list of APIService objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIService"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIService"}, - } -} - -func schema_pkg_apis_apiregistration_v1_APIServiceSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "service": { - SchemaProps: spec.SchemaProps{ - Description: "Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.", - Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.ServiceReference"), - }, - }, - "group": { - SchemaProps: spec.SchemaProps{ - Description: "Group is the API group name this server hosts", - Type: []string{"string"}, - Format: "", - }, - }, - "version": { - SchemaProps: spec.SchemaProps{ - Description: "Version is the API version this server hosts. For example, \"v1\"", - Type: []string{"string"}, - Format: "", - }, - }, - "insecureSkipTLSVerify": { - SchemaProps: spec.SchemaProps{ - Description: "InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "caBundle": { - SchemaProps: spec.SchemaProps{ - Description: "CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.", - Type: []string{"string"}, - Format: "byte", - }, - }, - "groupPriorityMinimum": { - SchemaProps: spec.SchemaProps{ - Description: "GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "versionPriority": { - SchemaProps: spec.SchemaProps{ - Description: "VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"service", "groupPriorityMinimum", "versionPriority"}, - }, - }, - Dependencies: []string{ - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.ServiceReference"}, - } -} - -func schema_pkg_apis_apiregistration_v1_APIServiceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIServiceStatus contains derived information about an API server", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Current service state of apiService.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceCondition"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1.APIServiceCondition"}, - } -} - -func schema_pkg_apis_apiregistration_v1_ServiceReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceReference holds a reference to Service.legacy.k8s.io", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace is the namespace of the service", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the name of the service", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_apiregistration_v1beta1_APIService(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIService represents a server for a particular GroupVersion. Name must be \"version.group\".", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec contains information for locating and communicating with a server", - Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceSpec"), - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status contains derived information about an API server", - Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceStatus"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceSpec", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceStatus"}, - } -} - -func schema_pkg_apis_apiregistration_v1beta1_APIServiceCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIServiceCondition describes the state of an APIService at a particular point", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "type": { - SchemaProps: spec.SchemaProps{ - Description: "Type is the type of the condition.", - Type: []string{"string"}, - Format: "", - }, - }, - "status": { - SchemaProps: spec.SchemaProps{ - Description: "Status is the status of the condition. Can be True, False, Unknown.", - Type: []string{"string"}, - Format: "", - }, - }, - "lastTransitionTime": { - SchemaProps: spec.SchemaProps{ - Description: "Last time the condition transitioned from one status to another.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "reason": { - SchemaProps: spec.SchemaProps{ - Description: "Unique, one-word, CamelCase reason for the condition's last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - "message": { - SchemaProps: spec.SchemaProps{ - Description: "Human-readable message indicating details about last transition.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"type", "status"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_apiregistration_v1beta1_APIServiceList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIServiceList is a list of APIService objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIService"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIService"}, - } -} - -func schema_pkg_apis_apiregistration_v1beta1_APIServiceSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIServiceSpec contains information for locating and communicating with a server. Only https is supported, though you are able to disable certificate verification.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "service": { - SchemaProps: spec.SchemaProps{ - Description: "Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled.", - Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.ServiceReference"), - }, - }, - "group": { - SchemaProps: spec.SchemaProps{ - Description: "Group is the API group name this server hosts", - Type: []string{"string"}, - Format: "", - }, - }, - "version": { - SchemaProps: spec.SchemaProps{ - Description: "Version is the API version this server hosts. For example, \"v1\"", - Type: []string{"string"}, - Format: "", - }, - }, - "insecureSkipTLSVerify": { - SchemaProps: spec.SchemaProps{ - Description: "InsecureSkipTLSVerify disables TLS certificate verification when communicating with this server. This is strongly discouraged. You should use the CABundle instead.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "caBundle": { - SchemaProps: spec.SchemaProps{ - Description: "CABundle is a PEM encoded CA bundle which will be used to validate an API server's serving certificate. If unspecified, system trust roots on the apiserver are used.", - Type: []string{"string"}, - Format: "byte", - }, - }, - "groupPriorityMinimum": { - SchemaProps: spec.SchemaProps{ - Description: "GroupPriorityMininum is the priority this group should have at least. Higher priority means that the group is preferred by clients over lower priority ones. Note that other versions of this group might specify even higher GroupPriorityMininum values such that the whole group gets a higher priority. The primary sort is based on GroupPriorityMinimum, ordered highest number to lowest (20 before 10). The secondary sort is based on the alphabetical comparison of the name of the object. (v1.bar before v1.foo) We'd recommend something like: *.k8s.io (except extensions) at 18000 and PaaSes (OpenShift, Deis) are recommended to be in the 2000s", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "versionPriority": { - SchemaProps: spec.SchemaProps{ - Description: "VersionPriority controls the ordering of this API version inside of its group. Must be greater than zero. The primary sort is based on VersionPriority, ordered highest to lowest (20 before 10). Since it's inside of a group, the number can be small, probably in the 10s. In case of equal version priorities, the version string will be used to compute the order inside a group. If the version string is \"kube-like\", it will sort above non \"kube-like\" version strings, which are ordered lexicographically. \"Kube-like\" versions start with a \"v\", then are followed by a number (the major version), then optionally the string \"alpha\" or \"beta\" and another number (the minor version). These are sorted first by GA > beta > alpha (where GA is a version with no suffix such as beta or alpha), and then by comparing major version, then minor version. An example sorted list of versions: v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"service", "groupPriorityMinimum", "versionPriority"}, - }, - }, - Dependencies: []string{ - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.ServiceReference"}, - } -} - -func schema_pkg_apis_apiregistration_v1beta1_APIServiceStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "APIServiceStatus contains derived information about an API server", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "conditions": { - VendorExtensible: spec.VendorExtensible{ - Extensions: spec.Extensions{ - "x-kubernetes-patch-merge-key": "type", - "x-kubernetes-patch-strategy": "merge", - }, - }, - SchemaProps: spec.SchemaProps{ - Description: "Current service state of apiService.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceCondition"), - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1.APIServiceCondition"}, - } -} - -func schema_pkg_apis_apiregistration_v1beta1_ServiceReference(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceReference holds a reference to Service.legacy.k8s.io", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace is the namespace of the service", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the name of the service", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_AttachDetachControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "AttachDetachControllerConfiguration contains elements describing AttachDetachController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "DisableAttachDetachReconcilerSync": { - SchemaProps: spec.SchemaProps{ - Description: "Reconciler runs a periodic loop to reconcile the desired state of the with the actual state of the world by triggering attach detach operations. This flag enables or disables reconcile. Is false by default, and thus enabled.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "ReconcilerSyncLoopPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "ReconcilerSyncLoopPeriod is the amount of time the reconciler sync states loop wait between successive executions. Is set to 5 sec by default.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - }, - Required: []string{"DisableAttachDetachReconcilerSync", "ReconcilerSyncLoopPeriod"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_CSRSigningControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CSRSigningControllerConfiguration contains elements describing CSRSigningController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ClusterSigningCertFile": { - SchemaProps: spec.SchemaProps{ - Description: "clusterSigningCertFile is the filename containing a PEM-encoded X509 CA certificate used to issue cluster-scoped certificates", - Type: []string{"string"}, - Format: "", - }, - }, - "ClusterSigningKeyFile": { - SchemaProps: spec.SchemaProps{ - Description: "clusterSigningCertFile is the filename containing a PEM-encoded RSA or ECDSA private key used to issue cluster-scoped certificates", - Type: []string{"string"}, - Format: "", - }, - }, - "ClusterSigningDuration": { - SchemaProps: spec.SchemaProps{ - Description: "clusterSigningDuration is the length of duration signed certificates will be given.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - }, - Required: []string{"ClusterSigningCertFile", "ClusterSigningKeyFile", "ClusterSigningDuration"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_CloudProviderConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "CloudProviderConfiguration contains basically elements about cloud provider.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "Name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the provider for cloud services.", - Type: []string{"string"}, - Format: "", - }, - }, - "CloudConfigFile": { - SchemaProps: spec.SchemaProps{ - Description: "cloudConfigFile is the path to the cloud provider configuration file.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"Name", "CloudConfigFile"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_DaemonSetControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetControllerConfiguration contains elements describing DaemonSetController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ConcurrentDaemonSetSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentDaemonSetSyncs is the number of daemonset objects that are allowed to sync concurrently. Larger number = more responsive daemonset, but more CPU (and network) load.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"ConcurrentDaemonSetSyncs"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_DeploymentControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeploymentControllerConfiguration contains elements describing DeploymentController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ConcurrentDeploymentSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentDeploymentSyncs is the number of deployment objects that are allowed to sync concurrently. Larger number = more responsive deployments, but more CPU (and network) load.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "DeploymentControllerSyncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "deploymentControllerSyncPeriod is the period for syncing the deployments.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - }, - Required: []string{"ConcurrentDeploymentSyncs", "DeploymentControllerSyncPeriod"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_DeprecatedControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "DeprecatedControllerConfiguration contains elements be deprecated.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "DeletingPodsQPS": { - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED: deletingPodsQps is the number of nodes per second on which pods are deleted in case of node failure.", - Type: []string{"number"}, - Format: "float", - }, - }, - "DeletingPodsBurst": { - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED: deletingPodsBurst is the number of nodes on which pods are bursty deleted in case of node failure. For more details look into RateLimiter.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "RegisterRetryCount": { - SchemaProps: spec.SchemaProps{ - Description: "registerRetryCount is the number of retries for initial node registration. Retry interval equals node-sync-period.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"DeletingPodsQPS", "DeletingPodsBurst", "RegisterRetryCount"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_EndpointControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "EndpointControllerConfiguration contains elements describing EndpointController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ConcurrentEndpointSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentEndpointSyncs is the number of endpoint syncing operations that will be done concurrently. Larger number = faster endpoint updating, but more CPU (and network) load.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"ConcurrentEndpointSyncs"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_GarbageCollectorControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GarbageCollectorControllerConfiguration contains elements describing GarbageCollectorController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "EnableGarbageCollector": { - SchemaProps: spec.SchemaProps{ - Description: "enables the generic garbage collector. MUST be synced with the corresponding flag of the kube-apiserver. WARNING: the generic garbage collector is an alpha feature.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "ConcurrentGCSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentGCSyncs is the number of garbage collector workers that are allowed to sync concurrently.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "GCIgnoredResources": { - SchemaProps: spec.SchemaProps{ - Description: "gcIgnoredResources is the list of GroupResources that garbage collection should ignore.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.GroupResource"), - }, - }, - }, - }, - }, - }, - Required: []string{"EnableGarbageCollector", "ConcurrentGCSyncs", "GCIgnoredResources"}, - }, - }, - Dependencies: []string{ - "k8s.io/kube-controller-manager/config/v1alpha1.GroupResource"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_GenericControllerManagerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GenericControllerManagerConfiguration holds configuration for a generic controller-manager.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "Port": { - SchemaProps: spec.SchemaProps{ - Description: "port is the port that the controller-manager's http service runs on.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "Address": { - SchemaProps: spec.SchemaProps{ - Description: "address is the IP address to serve on (set to 0.0.0.0 for all interfaces).", - Type: []string{"string"}, - Format: "", - }, - }, - "MinResyncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "minResyncPeriod is the resync period in reflectors; will be random between minResyncPeriod and 2*minResyncPeriod.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "ClientConnection": { - SchemaProps: spec.SchemaProps{ - Description: "ClientConnection specifies the kubeconfig file and client connection settings for the proxy server to use when communicating with the apiserver.", - Ref: ref("k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration"), - }, - }, - "ControllerStartInterval": { - SchemaProps: spec.SchemaProps{ - Description: "How long to wait between starting controller managers", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "LeaderElection": { - SchemaProps: spec.SchemaProps{ - Description: "leaderElection defines the configuration of leader election client.", - Ref: ref("k8s.io/component-base/config/v1alpha1.LeaderElectionConfiguration"), - }, - }, - "Controllers": { - SchemaProps: spec.SchemaProps{ - Description: "Controllers is the list of controllers to enable or disable '*' means \"all enabled by default controllers\" 'foo' means \"enable 'foo'\" '-foo' means \"disable 'foo'\" first item for a particular name wins", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "Debugging": { - SchemaProps: spec.SchemaProps{ - Description: "DebuggingConfiguration holds configuration for Debugging related features.", - Ref: ref("k8s.io/component-base/config/v1alpha1.DebuggingConfiguration"), - }, - }, - }, - Required: []string{"Port", "Address", "MinResyncPeriod", "ClientConnection", "ControllerStartInterval", "LeaderElection", "Controllers", "Debugging"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration", "k8s.io/component-base/config/v1alpha1.DebuggingConfiguration", "k8s.io/component-base/config/v1alpha1.LeaderElectionConfiguration"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_GroupResource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "GroupResource describes an group resource.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "Group": { - SchemaProps: spec.SchemaProps{ - Description: "group is the group portion of the GroupResource.", - Type: []string{"string"}, - Format: "", - }, - }, - "Resource": { - SchemaProps: spec.SchemaProps{ - Description: "resource is the resource portion of the GroupResource.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"Group", "Resource"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_HPAControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "HPAControllerConfiguration contains elements describing HPAController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "HorizontalPodAutoscalerSyncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerSyncPeriod is the period for syncing the number of pods in horizontal pod autoscaler.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "HorizontalPodAutoscalerUpscaleForbiddenWindow": { - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerUpscaleForbiddenWindow is a period after which next upscale allowed.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "HorizontalPodAutoscalerDownscaleStabilizationWindow": { - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerDowncaleStabilizationWindow is a period for which autoscaler will look backwards and not scale down below any recommendation it made during that period.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "HorizontalPodAutoscalerDownscaleForbiddenWindow": { - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerDownscaleForbiddenWindow is a period after which next downscale allowed.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "HorizontalPodAutoscalerTolerance": { - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerTolerance is the tolerance for when resource usage suggests upscaling/downscaling", - Type: []string{"number"}, - Format: "double", - }, - }, - "HorizontalPodAutoscalerUseRESTClients": { - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerUseRESTClients causes the HPA controller to use REST clients through the kube-aggregator when enabled, instead of using the legacy metrics client through the API server proxy.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "HorizontalPodAutoscalerCPUInitializationPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerCPUInitializationPeriod is the period after pod start when CPU samples might be skipped.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "HorizontalPodAutoscalerInitialReadinessDelay": { - SchemaProps: spec.SchemaProps{ - Description: "HorizontalPodAutoscalerInitialReadinessDelay is period after pod start during which readiness changes are treated as readiness being set for the first time. The only effect of this is that HPA will disregard CPU samples from unready pods that had last readiness change during that period.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - }, - Required: []string{"HorizontalPodAutoscalerSyncPeriod", "HorizontalPodAutoscalerUpscaleForbiddenWindow", "HorizontalPodAutoscalerDownscaleStabilizationWindow", "HorizontalPodAutoscalerDownscaleForbiddenWindow", "HorizontalPodAutoscalerTolerance", "HorizontalPodAutoscalerUseRESTClients", "HorizontalPodAutoscalerCPUInitializationPeriod", "HorizontalPodAutoscalerInitialReadinessDelay"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_JobControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "JobControllerConfiguration contains elements describing JobController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ConcurrentJobSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentJobSyncs is the number of job objects that are allowed to sync concurrently. Larger number = more responsive jobs, but more CPU (and network) load.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"ConcurrentJobSyncs"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_KubeCloudSharedConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "KubeCloudSharedConfiguration contains elements shared by both kube-controller manager and cloud-controller manager, but not genericconfig.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "CloudProvider": { - SchemaProps: spec.SchemaProps{ - Description: "CloudProviderConfiguration holds configuration for CloudProvider related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.CloudProviderConfiguration"), - }, - }, - "ExternalCloudVolumePlugin": { - SchemaProps: spec.SchemaProps{ - Description: "externalCloudVolumePlugin specifies the plugin to use when cloudProvider is \"external\". It is currently used by the in repo cloud providers to handle node and volume control in the KCM.", - Type: []string{"string"}, - Format: "", - }, - }, - "UseServiceAccountCredentials": { - SchemaProps: spec.SchemaProps{ - Description: "useServiceAccountCredentials indicates whether controllers should be run with individual service account credentials.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "AllowUntaggedCloud": { - SchemaProps: spec.SchemaProps{ - Description: "run with untagged cloud instances", - Type: []string{"boolean"}, - Format: "", - }, - }, - "RouteReconciliationPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "routeReconciliationPeriod is the period for reconciling routes created for Nodes by cloud provider..", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "NodeMonitorPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "nodeMonitorPeriod is the period for syncing NodeStatus in NodeController.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "ClusterName": { - SchemaProps: spec.SchemaProps{ - Description: "clusterName is the instance prefix for the cluster.", - Type: []string{"string"}, - Format: "", - }, - }, - "ClusterCIDR": { - SchemaProps: spec.SchemaProps{ - Description: "clusterCIDR is CIDR Range for Pods in cluster.", - Type: []string{"string"}, - Format: "", - }, - }, - "AllocateNodeCIDRs": { - SchemaProps: spec.SchemaProps{ - Description: "AllocateNodeCIDRs enables CIDRs for Pods to be allocated and, if ConfigureCloudRoutes is true, to be set on the cloud provider.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "CIDRAllocatorType": { - SchemaProps: spec.SchemaProps{ - Description: "CIDRAllocatorType determines what kind of pod CIDR allocator will be used.", - Type: []string{"string"}, - Format: "", - }, - }, - "ConfigureCloudRoutes": { - SchemaProps: spec.SchemaProps{ - Description: "configureCloudRoutes enables CIDRs allocated with allocateNodeCIDRs to be configured on the cloud provider.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "NodeSyncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "nodeSyncPeriod is the period for syncing nodes from cloudprovider. Longer periods will result in fewer calls to cloud provider, but may delay addition of new nodes to cluster.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - }, - Required: []string{"CloudProvider", "ExternalCloudVolumePlugin", "UseServiceAccountCredentials", "AllowUntaggedCloud", "RouteReconciliationPeriod", "NodeMonitorPeriod", "ClusterName", "ClusterCIDR", "AllocateNodeCIDRs", "CIDRAllocatorType", "ConfigureCloudRoutes", "NodeSyncPeriod"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/kube-controller-manager/config/v1alpha1.CloudProviderConfiguration"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_KubeControllerManagerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "KubeControllerManagerConfiguration contains elements describing kube-controller manager.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "Generic": { - SchemaProps: spec.SchemaProps{ - Description: "Generic holds configuration for a generic controller-manager", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.GenericControllerManagerConfiguration"), - }, - }, - "KubeCloudShared": { - SchemaProps: spec.SchemaProps{ - Description: "KubeCloudSharedConfiguration holds configuration for shared related features both in cloud controller manager and kube-controller manager.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.KubeCloudSharedConfiguration"), - }, - }, - "AttachDetachController": { - SchemaProps: spec.SchemaProps{ - Description: "AttachDetachControllerConfiguration holds configuration for AttachDetachController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.AttachDetachControllerConfiguration"), - }, - }, - "CSRSigningController": { - SchemaProps: spec.SchemaProps{ - Description: "CSRSigningControllerConfiguration holds configuration for CSRSigningController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningControllerConfiguration"), - }, - }, - "DaemonSetController": { - SchemaProps: spec.SchemaProps{ - Description: "DaemonSetControllerConfiguration holds configuration for DaemonSetController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.DaemonSetControllerConfiguration"), - }, - }, - "DeploymentController": { - SchemaProps: spec.SchemaProps{ - Description: "DeploymentControllerConfiguration holds configuration for DeploymentController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.DeploymentControllerConfiguration"), - }, - }, - "DeprecatedController": { - SchemaProps: spec.SchemaProps{ - Description: "DeprecatedControllerConfiguration holds configuration for some deprecated features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.DeprecatedControllerConfiguration"), - }, - }, - "EndpointController": { - SchemaProps: spec.SchemaProps{ - Description: "EndpointControllerConfiguration holds configuration for EndpointController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.EndpointControllerConfiguration"), - }, - }, - "GarbageCollectorController": { - SchemaProps: spec.SchemaProps{ - Description: "GarbageCollectorControllerConfiguration holds configuration for GarbageCollectorController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.GarbageCollectorControllerConfiguration"), - }, - }, - "HPAController": { - SchemaProps: spec.SchemaProps{ - Description: "HPAControllerConfiguration holds configuration for HPAController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.HPAControllerConfiguration"), - }, - }, - "JobController": { - SchemaProps: spec.SchemaProps{ - Description: "JobControllerConfiguration holds configuration for JobController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.JobControllerConfiguration"), - }, - }, - "NamespaceController": { - SchemaProps: spec.SchemaProps{ - Description: "NamespaceControllerConfiguration holds configuration for NamespaceController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.NamespaceControllerConfiguration"), - }, - }, - "NodeIPAMController": { - SchemaProps: spec.SchemaProps{ - Description: "NodeIPAMControllerConfiguration holds configuration for NodeIPAMController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.NodeIPAMControllerConfiguration"), - }, - }, - "NodeLifecycleController": { - SchemaProps: spec.SchemaProps{ - Description: "NodeLifecycleControllerConfiguration holds configuration for NodeLifecycleController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.NodeLifecycleControllerConfiguration"), - }, - }, - "PersistentVolumeBinderController": { - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeBinderControllerConfiguration holds configuration for PersistentVolumeBinderController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeBinderControllerConfiguration"), - }, - }, - "PodGCController": { - SchemaProps: spec.SchemaProps{ - Description: "PodGCControllerConfiguration holds configuration for PodGCController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.PodGCControllerConfiguration"), - }, - }, - "ReplicaSetController": { - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetControllerConfiguration holds configuration for ReplicaSet related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.ReplicaSetControllerConfiguration"), - }, - }, - "ReplicationController": { - SchemaProps: spec.SchemaProps{ - Description: "ReplicationControllerConfiguration holds configuration for ReplicationController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.ReplicationControllerConfiguration"), - }, - }, - "ResourceQuotaController": { - SchemaProps: spec.SchemaProps{ - Description: "ResourceQuotaControllerConfiguration holds configuration for ResourceQuotaController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.ResourceQuotaControllerConfiguration"), - }, - }, - "SAController": { - SchemaProps: spec.SchemaProps{ - Description: "SAControllerConfiguration holds configuration for ServiceAccountController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.SAControllerConfiguration"), - }, - }, - "ServiceController": { - SchemaProps: spec.SchemaProps{ - Description: "ServiceControllerConfiguration holds configuration for ServiceController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.ServiceControllerConfiguration"), - }, - }, - "TTLAfterFinishedController": { - SchemaProps: spec.SchemaProps{ - Description: "TTLAfterFinishedControllerConfiguration holds configuration for TTLAfterFinishedController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.TTLAfterFinishedControllerConfiguration"), - }, - }, - }, - Required: []string{"Generic", "KubeCloudShared", "AttachDetachController", "CSRSigningController", "DaemonSetController", "DeploymentController", "DeprecatedController", "EndpointController", "GarbageCollectorController", "HPAController", "JobController", "NamespaceController", "NodeIPAMController", "NodeLifecycleController", "PersistentVolumeBinderController", "PodGCController", "ReplicaSetController", "ReplicationController", "ResourceQuotaController", "SAController", "ServiceController", "TTLAfterFinishedController"}, - }, - }, - Dependencies: []string{ - "k8s.io/kube-controller-manager/config/v1alpha1.AttachDetachControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.CSRSigningControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.DaemonSetControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.DeploymentControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.DeprecatedControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.EndpointControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.GarbageCollectorControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.GenericControllerManagerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.HPAControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.JobControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.KubeCloudSharedConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.NamespaceControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.NodeIPAMControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.NodeLifecycleControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeBinderControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.PodGCControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.ReplicaSetControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.ReplicationControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.ResourceQuotaControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.SAControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.ServiceControllerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.TTLAfterFinishedControllerConfiguration"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_NamespaceControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NamespaceControllerConfiguration contains elements describing NamespaceController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "NamespaceSyncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "namespaceSyncPeriod is the period for syncing namespace life-cycle updates.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "ConcurrentNamespaceSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentNamespaceSyncs is the number of namespace objects that are allowed to sync concurrently.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"NamespaceSyncPeriod", "ConcurrentNamespaceSyncs"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_NodeIPAMControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeIPAMControllerConfiguration contains elements describing NodeIpamController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ServiceCIDR": { - SchemaProps: spec.SchemaProps{ - Description: "serviceCIDR is CIDR Range for Services in cluster.", - Type: []string{"string"}, - Format: "", - }, - }, - "NodeCIDRMaskSize": { - SchemaProps: spec.SchemaProps{ - Description: "NodeCIDRMaskSize is the mask size for node cidr in cluster.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"ServiceCIDR", "NodeCIDRMaskSize"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_NodeLifecycleControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeLifecycleControllerConfiguration contains elements describing NodeLifecycleController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "EnableTaintManager": { - SchemaProps: spec.SchemaProps{ - Description: "If set to true enables NoExecute Taints and will evict all not-tolerating Pod running on Nodes tainted with this kind of Taints.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "NodeEvictionRate": { - SchemaProps: spec.SchemaProps{ - Description: "nodeEvictionRate is the number of nodes per second on which pods are deleted in case of node failure when a zone is healthy", - Type: []string{"number"}, - Format: "float", - }, - }, - "SecondaryNodeEvictionRate": { - SchemaProps: spec.SchemaProps{ - Description: "secondaryNodeEvictionRate is the number of nodes per second on which pods are deleted in case of node failure when a zone is unhealthy", - Type: []string{"number"}, - Format: "float", - }, - }, - "NodeStartupGracePeriod": { - SchemaProps: spec.SchemaProps{ - Description: "nodeStartupGracePeriod is the amount of time which we allow starting a node to be unresponsive before marking it unhealthy.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "NodeMonitorGracePeriod": { - SchemaProps: spec.SchemaProps{ - Description: "nodeMontiorGracePeriod is the amount of time which we allow a running node to be unresponsive before marking it unhealthy. Must be N times more than kubelet's nodeStatusUpdateFrequency, where N means number of retries allowed for kubelet to post node status.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "PodEvictionTimeout": { - SchemaProps: spec.SchemaProps{ - Description: "podEvictionTimeout is the grace period for deleting pods on failed nodes.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "LargeClusterSizeThreshold": { - SchemaProps: spec.SchemaProps{ - Description: "secondaryNodeEvictionRate is implicitly overridden to 0 for clusters smaller than or equal to largeClusterSizeThreshold", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "UnhealthyZoneThreshold": { - SchemaProps: spec.SchemaProps{ - Description: "Zone is treated as unhealthy in nodeEvictionRate and secondaryNodeEvictionRate when at least unhealthyZoneThreshold (no less than 3) of Nodes in the zone are NotReady", - Type: []string{"number"}, - Format: "float", - }, - }, - }, - Required: []string{"EnableTaintManager", "NodeEvictionRate", "SecondaryNodeEvictionRate", "NodeStartupGracePeriod", "NodeMonitorGracePeriod", "PodEvictionTimeout", "LargeClusterSizeThreshold", "UnhealthyZoneThreshold"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_PersistentVolumeBinderControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeBinderControllerConfiguration contains elements describing PersistentVolumeBinderController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "PVClaimBinderSyncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "pvClaimBinderSyncPeriod is the period for syncing persistent volumes and persistent volume claims.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "VolumeConfiguration": { - SchemaProps: spec.SchemaProps{ - Description: "volumeConfiguration holds configuration for volume related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.VolumeConfiguration"), - }, - }, - }, - Required: []string{"PVClaimBinderSyncPeriod", "VolumeConfiguration"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/kube-controller-manager/config/v1alpha1.VolumeConfiguration"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_PersistentVolumeRecyclerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PersistentVolumeRecyclerConfiguration contains elements describing persistent volume plugins.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "MaximumRetry": { - SchemaProps: spec.SchemaProps{ - Description: "maximumRetry is number of retries the PV recycler will execute on failure to recycle PV.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "MinimumTimeoutNFS": { - SchemaProps: spec.SchemaProps{ - Description: "minimumTimeoutNFS is the minimum ActiveDeadlineSeconds to use for an NFS Recycler pod.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "PodTemplateFilePathNFS": { - SchemaProps: spec.SchemaProps{ - Description: "podTemplateFilePathNFS is the file path to a pod definition used as a template for NFS persistent volume recycling", - Type: []string{"string"}, - Format: "", - }, - }, - "IncrementTimeoutNFS": { - SchemaProps: spec.SchemaProps{ - Description: "incrementTimeoutNFS is the increment of time added per Gi to ActiveDeadlineSeconds for an NFS scrubber pod.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "PodTemplateFilePathHostPath": { - SchemaProps: spec.SchemaProps{ - Description: "podTemplateFilePathHostPath is the file path to a pod definition used as a template for HostPath persistent volume recycling. This is for development and testing only and will not work in a multi-node cluster.", - Type: []string{"string"}, - Format: "", - }, - }, - "MinimumTimeoutHostPath": { - SchemaProps: spec.SchemaProps{ - Description: "minimumTimeoutHostPath is the minimum ActiveDeadlineSeconds to use for a HostPath Recycler pod. This is for development and testing only and will not work in a multi-node cluster.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "IncrementTimeoutHostPath": { - SchemaProps: spec.SchemaProps{ - Description: "incrementTimeoutHostPath is the increment of time added per Gi to ActiveDeadlineSeconds for a HostPath scrubber pod. This is for development and testing only and will not work in a multi-node cluster.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"MaximumRetry", "MinimumTimeoutNFS", "PodTemplateFilePathNFS", "IncrementTimeoutNFS", "PodTemplateFilePathHostPath", "MinimumTimeoutHostPath", "IncrementTimeoutHostPath"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_PodGCControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodGCControllerConfiguration contains elements describing PodGCController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "TerminatedPodGCThreshold": { - SchemaProps: spec.SchemaProps{ - Description: "terminatedPodGCThreshold is the number of terminated pods that can exist before the terminated pod garbage collector starts deleting terminated pods. If <= 0, the terminated pod garbage collector is disabled.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"TerminatedPodGCThreshold"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_ReplicaSetControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicaSetControllerConfiguration contains elements describing ReplicaSetController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ConcurrentRSSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentRSSyncs is the number of replica sets that are allowed to sync concurrently. Larger number = more responsive replica management, but more CPU (and network) load.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"ConcurrentRSSyncs"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_ReplicationControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ReplicationControllerConfiguration contains elements describing ReplicationController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ConcurrentRCSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentRCSyncs is the number of replication controllers that are allowed to sync concurrently. Larger number = more responsive replica management, but more CPU (and network) load.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"ConcurrentRCSyncs"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_ResourceQuotaControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ResourceQuotaControllerConfiguration contains elements describing ResourceQuotaController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ResourceQuotaSyncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "resourceQuotaSyncPeriod is the period for syncing quota usage status in the system.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "ConcurrentResourceQuotaSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentResourceQuotaSyncs is the number of resource quotas that are allowed to sync concurrently. Larger number = more responsive quota management, but more CPU (and network) load.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"ResourceQuotaSyncPeriod", "ConcurrentResourceQuotaSyncs"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_SAControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SAControllerConfiguration contains elements describing ServiceAccountController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ServiceAccountKeyFile": { - SchemaProps: spec.SchemaProps{ - Description: "serviceAccountKeyFile is the filename containing a PEM-encoded private RSA key used to sign service account tokens.", - Type: []string{"string"}, - Format: "", - }, - }, - "ConcurrentSATokenSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentSATokenSyncs is the number of service account token syncing operations that will be done concurrently.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "RootCAFile": { - SchemaProps: spec.SchemaProps{ - Description: "rootCAFile is the root certificate authority will be included in service account's token secret. This must be a valid PEM-encoded CA bundle.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"ServiceAccountKeyFile", "ConcurrentSATokenSyncs", "RootCAFile"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_ServiceControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ServiceControllerConfiguration contains elements describing ServiceController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ConcurrentServiceSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentServiceSyncs is the number of services that are allowed to sync concurrently. Larger number = more responsive service management, but more CPU (and network) load.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"ConcurrentServiceSyncs"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_TTLAfterFinishedControllerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "TTLAfterFinishedControllerConfiguration contains elements describing TTLAfterFinishedController.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "ConcurrentTTLSyncs": { - SchemaProps: spec.SchemaProps{ - Description: "concurrentTTLSyncs is the number of TTL-after-finished collector workers that are allowed to sync concurrently.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - }, - Required: []string{"ConcurrentTTLSyncs"}, - }, - }, - } -} - -func schema_k8sio_kube_controller_manager_config_v1alpha1_VolumeConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "VolumeConfiguration contains *all* enumerated flags meant to configure all volume plugins. From this config, the controller-manager binary will create many instances of volume.VolumeConfig, each containing only the configuration needed for that plugin which are then passed to the appropriate plugin. The ControllerManager binary is the only part of the code which knows what plugins are supported and which flags correspond to each plugin.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "EnableHostPathProvisioning": { - SchemaProps: spec.SchemaProps{ - Description: "enableHostPathProvisioning enables HostPath PV provisioning when running without a cloud provider. This allows testing and development of provisioning features. HostPath provisioning is not supported in any way, won't work in a multi-node cluster, and should not be used for anything other than testing or development.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "EnableDynamicProvisioning": { - SchemaProps: spec.SchemaProps{ - Description: "enableDynamicProvisioning enables the provisioning of volumes when running within an environment that supports dynamic provisioning. Defaults to true.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "PersistentVolumeRecyclerConfiguration": { - SchemaProps: spec.SchemaProps{ - Description: "persistentVolumeRecyclerConfiguration holds configuration for persistent volume plugins.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeRecyclerConfiguration"), - }, - }, - "FlexVolumePluginDir": { - SchemaProps: spec.SchemaProps{ - Description: "volumePluginDir is the full path of the directory in which the flex volume plugin should search for additional third party volume plugins", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"EnableHostPathProvisioning", "EnableDynamicProvisioning", "PersistentVolumeRecyclerConfiguration", "FlexVolumePluginDir"}, - }, - }, - Dependencies: []string{ - "k8s.io/kube-controller-manager/config/v1alpha1.PersistentVolumeRecyclerConfiguration"}, - } -} - -func schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "KubeProxyConfiguration contains everything necessary to configure the Kubernetes proxy server.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "featureGates": { - SchemaProps: spec.SchemaProps{ - Description: "featureGates is a map of feature names to bools that enable or disable alpha/experimental features.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - "bindAddress": { - SchemaProps: spec.SchemaProps{ - Description: "bindAddress is the IP address for the proxy server to serve on (set to 0.0.0.0 for all interfaces)", - Type: []string{"string"}, - Format: "", - }, - }, - "healthzBindAddress": { - SchemaProps: spec.SchemaProps{ - Description: "healthzBindAddress is the IP address and port for the health check server to serve on, defaulting to 0.0.0.0:10256", - Type: []string{"string"}, - Format: "", - }, - }, - "metricsBindAddress": { - SchemaProps: spec.SchemaProps{ - Description: "metricsBindAddress is the IP address and port for the metrics server to serve on, defaulting to 127.0.0.1:10249 (set to 0.0.0.0 for all interfaces)", - Type: []string{"string"}, - Format: "", - }, - }, - "enableProfiling": { - SchemaProps: spec.SchemaProps{ - Description: "enableProfiling enables profiling via web interface on /debug/pprof handler. Profiling handlers will be handled by metrics server.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "clusterCIDR": { - SchemaProps: spec.SchemaProps{ - Description: "clusterCIDR is the CIDR range of the pods in the cluster. It is used to bridge traffic coming from outside of the cluster. If not provided, no off-cluster bridging will be performed.", - Type: []string{"string"}, - Format: "", - }, - }, - "hostnameOverride": { - SchemaProps: spec.SchemaProps{ - Description: "hostnameOverride, if non-empty, will be used as the identity instead of the actual hostname.", - Type: []string{"string"}, - Format: "", - }, - }, - "clientConnection": { - SchemaProps: spec.SchemaProps{ - Description: "clientConnection specifies the kubeconfig file and client connection settings for the proxy server to use when communicating with the apiserver.", - Ref: ref("k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration"), - }, - }, - "iptables": { - SchemaProps: spec.SchemaProps{ - Description: "iptables contains iptables-related configuration options.", - Ref: ref("k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPTablesConfiguration"), - }, - }, - "ipvs": { - SchemaProps: spec.SchemaProps{ - Description: "ipvs contains ipvs-related configuration options.", - Ref: ref("k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPVSConfiguration"), - }, - }, - "oomScoreAdj": { - SchemaProps: spec.SchemaProps{ - Description: "oomScoreAdj is the oom-score-adj value for kube-proxy process. Values must be within the range [-1000, 1000]", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "mode": { - SchemaProps: spec.SchemaProps{ - Description: "mode specifies which proxy mode to use.", - Type: []string{"string"}, - Format: "", - }, - }, - "portRange": { - SchemaProps: spec.SchemaProps{ - Description: "portRange is the range of host ports (beginPort-endPort, inclusive) that may be consumed in order to proxy service traffic. If unspecified (0-0) then ports will be randomly chosen.", - Type: []string{"string"}, - Format: "", - }, - }, - "resourceContainer": { - SchemaProps: spec.SchemaProps{ - Description: "resourceContainer is the bsolute name of the resource-only container to create and run the Kube-proxy in (Default: /kube-proxy).", - Type: []string{"string"}, - Format: "", - }, - }, - "udpIdleTimeout": { - SchemaProps: spec.SchemaProps{ - Description: "udpIdleTimeout is how long an idle UDP connection will be kept open (e.g. '250ms', '2s'). Must be greater than 0. Only applicable for proxyMode=userspace.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "conntrack": { - SchemaProps: spec.SchemaProps{ - Description: "conntrack contains conntrack-related configuration options.", - Ref: ref("k8s.io/kube-proxy/config/v1alpha1.KubeProxyConntrackConfiguration"), - }, - }, - "configSyncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "configSyncPeriod is how often configuration from the apiserver is refreshed. Must be greater than 0.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "nodePortAddresses": { - SchemaProps: spec.SchemaProps{ - Description: "nodePortAddresses is the --nodeport-addresses value for kube-proxy process. Values must be valid IP blocks. These values are as a parameter to select the interfaces where nodeport works. In case someone would like to expose a service on localhost for local visit and some other interfaces for particular purpose, a list of IP blocks would do that. If set it to \"127.0.0.0/8\", kube-proxy will only select the loopback interface for NodePort. If set it to a non-zero IP block, kube-proxy will filter that down to just the IPs that applied to the node. An empty string slice is meant to select all network interfaces.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "winkernel": { - SchemaProps: spec.SchemaProps{ - Description: "winkernel contains winkernel-related configuration options.", - Ref: ref("k8s.io/kube-proxy/config/v1alpha1.KubeProxyWinkernelConfiguration"), - }, - }, - }, - Required: []string{"bindAddress", "healthzBindAddress", "metricsBindAddress", "enableProfiling", "clusterCIDR", "hostnameOverride", "clientConnection", "iptables", "ipvs", "oomScoreAdj", "mode", "portRange", "resourceContainer", "udpIdleTimeout", "conntrack", "configSyncPeriod", "nodePortAddresses", "winkernel"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration", "k8s.io/kube-proxy/config/v1alpha1.KubeProxyConntrackConfiguration", "k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPTablesConfiguration", "k8s.io/kube-proxy/config/v1alpha1.KubeProxyIPVSConfiguration", "k8s.io/kube-proxy/config/v1alpha1.KubeProxyWinkernelConfiguration"}, - } -} - -func schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyConntrackConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "KubeProxyConntrackConfiguration contains conntrack settings for the Kubernetes proxy server.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "max": { - SchemaProps: spec.SchemaProps{ - Description: "max is the maximum number of NAT connections to track (0 to leave as-is). This takes precedence over maxPerCore and min.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "maxPerCore": { - SchemaProps: spec.SchemaProps{ - Description: "maxPerCore is the maximum number of NAT connections to track per CPU core (0 to leave the limit as-is and ignore min).", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "min": { - SchemaProps: spec.SchemaProps{ - Description: "min is the minimum value of connect-tracking records to allocate, regardless of conntrackMaxPerCore (set maxPerCore=0 to leave the limit as-is).", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "tcpEstablishedTimeout": { - SchemaProps: spec.SchemaProps{ - Description: "tcpEstablishedTimeout is how long an idle TCP connection will be kept open (e.g. '2s'). Must be greater than 0 to set.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "tcpCloseWaitTimeout": { - SchemaProps: spec.SchemaProps{ - Description: "tcpCloseWaitTimeout is how long an idle conntrack entry in CLOSE_WAIT state will remain in the conntrack table. (e.g. '60s'). Must be greater than 0 to set.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - }, - Required: []string{"max", "maxPerCore", "min", "tcpEstablishedTimeout", "tcpCloseWaitTimeout"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyIPTablesConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "KubeProxyIPTablesConfiguration contains iptables-related configuration details for the Kubernetes proxy server.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "masqueradeBit": { - SchemaProps: spec.SchemaProps{ - Description: "masqueradeBit is the bit of the iptables fwmark space to use for SNAT if using the pure iptables proxy mode. Values must be within the range [0, 31].", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "masqueradeAll": { - SchemaProps: spec.SchemaProps{ - Description: "masqueradeAll tells kube-proxy to SNAT everything if using the pure iptables proxy mode.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "syncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "syncPeriod is the period that iptables rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "minSyncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "minSyncPeriod is the minimum period that iptables rules are refreshed (e.g. '5s', '1m', '2h22m').", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - }, - Required: []string{"masqueradeBit", "masqueradeAll", "syncPeriod", "minSyncPeriod"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyIPVSConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "KubeProxyIPVSConfiguration contains ipvs-related configuration details for the Kubernetes proxy server.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "syncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "syncPeriod is the period that ipvs rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "minSyncPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "minSyncPeriod is the minimum period that ipvs rules are refreshed (e.g. '5s', '1m', '2h22m').", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "scheduler": { - SchemaProps: spec.SchemaProps{ - Description: "ipvs scheduler", - Type: []string{"string"}, - Format: "", - }, - }, - "excludeCIDRs": { - SchemaProps: spec.SchemaProps{ - Description: "excludeCIDRs is a list of CIDR's which the ipvs proxier should not touch when cleaning up ipvs services.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - Required: []string{"syncPeriod", "minSyncPeriod", "scheduler", "excludeCIDRs"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kube_proxy_config_v1alpha1_KubeProxyWinkernelConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "KubeProxyWinkernelConfiguration contains Windows/HNS settings for the Kubernetes proxy server.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "networkName": { - SchemaProps: spec.SchemaProps{ - Description: "networkName is the name of the network kube-proxy will use to create endpoints and policies", - Type: []string{"string"}, - Format: "", - }, - }, - "sourceVip": { - SchemaProps: spec.SchemaProps{ - Description: "sourceVip is the IP address of the source VIP endoint used for NAT when loadbalancing", - Type: []string{"string"}, - Format: "", - }, - }, - "enableDSR": { - SchemaProps: spec.SchemaProps{ - Description: "enableDSR tells kube-proxy whether HNS policies should be created with DSR", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - Required: []string{"networkName", "sourceVip", "enableDSR"}, - }, - }, - } -} - -func schema_k8sio_kube_scheduler_config_v1alpha1_KubeSchedulerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "KubeSchedulerConfiguration configures a scheduler", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "schedulerName": { - SchemaProps: spec.SchemaProps{ - Description: "SchedulerName is name of the scheduler, used to select which pods will be processed by this scheduler, based on pod's \"spec.SchedulerName\".", - Type: []string{"string"}, - Format: "", - }, - }, - "algorithmSource": { - SchemaProps: spec.SchemaProps{ - Description: "AlgorithmSource specifies the scheduler algorithm source.", - Ref: ref("k8s.io/kube-scheduler/config/v1alpha1.SchedulerAlgorithmSource"), - }, - }, - "hardPodAffinitySymmetricWeight": { - SchemaProps: spec.SchemaProps{ - Description: "RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule corresponding to every RequiredDuringScheduling affinity rule. HardPodAffinitySymmetricWeight represents the weight of implicit PreferredDuringScheduling affinity rule, in the range 0-100.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "leaderElection": { - SchemaProps: spec.SchemaProps{ - Description: "LeaderElection defines the configuration of leader election client.", - Ref: ref("k8s.io/kube-scheduler/config/v1alpha1.KubeSchedulerLeaderElectionConfiguration"), - }, - }, - "clientConnection": { - SchemaProps: spec.SchemaProps{ - Description: "ClientConnection specifies the kubeconfig file and client connection settings for the proxy server to use when communicating with the apiserver.", - Ref: ref("k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration"), - }, - }, - "healthzBindAddress": { - SchemaProps: spec.SchemaProps{ - Description: "HealthzBindAddress is the IP address and port for the health check server to serve on, defaulting to 0.0.0.0:10251", - Type: []string{"string"}, - Format: "", - }, - }, - "metricsBindAddress": { - SchemaProps: spec.SchemaProps{ - Description: "MetricsBindAddress is the IP address and port for the metrics server to serve on, defaulting to 0.0.0.0:10251.", - Type: []string{"string"}, - Format: "", - }, - }, - "enableProfiling": { - SchemaProps: spec.SchemaProps{ - Description: "enableProfiling enables profiling via web interface host:port/debug/pprof/", - Type: []string{"boolean"}, - Format: "", - }, - }, - "enableContentionProfiling": { - SchemaProps: spec.SchemaProps{ - Description: "enableContentionProfiling enables lock contention profiling, if enableProfiling is true.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "disablePreemption": { - SchemaProps: spec.SchemaProps{ - Description: "DisablePreemption disables the pod preemption feature.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "percentageOfNodesToScore": { - SchemaProps: spec.SchemaProps{ - Description: "PercentageOfNodeToScore is the percentage of all nodes that once found feasible for running a pod, the scheduler stops its search for more feasible nodes in the cluster. This helps improve scheduler's performance. Scheduler always tries to find at least \"minFeasibleNodesToFind\" feasible nodes no matter what the value of this flag is. Example: if the cluster size is 500 nodes and the value of this flag is 30, then scheduler stops finding further feasible nodes once it finds 150 feasible ones. When the value is 0, default percentage (5%--50% based on the size of the cluster) of the nodes will be scored.", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "failureDomains": { - SchemaProps: spec.SchemaProps{ - Description: "DEPRECATED. Indicate the \"all topologies\" set for empty topologyKey when it's used for PreferredDuringScheduling pod anti-affinity.", - Type: []string{"string"}, - Format: "", - }, - }, - "bindTimeoutSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "Duration to wait for a binding operation to complete before timing out Value must be non-negative integer. The value zero indicates no waiting. If this value is nil, the default value will be used.", - Type: []string{"integer"}, - Format: "int64", - }, - }, - }, - Required: []string{"schedulerName", "algorithmSource", "hardPodAffinitySymmetricWeight", "leaderElection", "clientConnection", "healthzBindAddress", "metricsBindAddress", "enableProfiling", "enableContentionProfiling", "disablePreemption", "percentageOfNodesToScore", "failureDomains", "bindTimeoutSeconds"}, - }, - }, - Dependencies: []string{ - "k8s.io/component-base/config/v1alpha1.ClientConnectionConfiguration", "k8s.io/kube-scheduler/config/v1alpha1.KubeSchedulerLeaderElectionConfiguration", "k8s.io/kube-scheduler/config/v1alpha1.SchedulerAlgorithmSource"}, - } -} - -func schema_k8sio_kube_scheduler_config_v1alpha1_KubeSchedulerLeaderElectionConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "KubeSchedulerLeaderElectionConfiguration expands LeaderElectionConfiguration to include scheduler specific configuration.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "leaderElect": { - SchemaProps: spec.SchemaProps{ - Description: "leaderElect enables a leader election client to gain leadership before executing the main loop. Enable this when running replicated components for high availability.", - Type: []string{"boolean"}, - Format: "", - }, - }, - "leaseDuration": { - SchemaProps: spec.SchemaProps{ - Description: "leaseDuration is the duration that non-leader candidates will wait after observing a leadership renewal until attempting to acquire leadership of a led but unrenewed leader slot. This is effectively the maximum duration that a leader can be stopped before it is replaced by another candidate. This is only applicable if leader election is enabled.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "renewDeadline": { - SchemaProps: spec.SchemaProps{ - Description: "renewDeadline is the interval between attempts by the acting master to renew a leadership slot before it stops leading. This must be less than or equal to the lease duration. This is only applicable if leader election is enabled.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "retryPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "retryPeriod is the duration the clients should wait between attempting acquisition and renewal of a leadership. This is only applicable if leader election is enabled.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "resourceLock": { - SchemaProps: spec.SchemaProps{ - Description: "resourceLock indicates the resource object type that will be used to lock during leader election cycles.", - Type: []string{"string"}, - Format: "", - }, - }, - "lockObjectNamespace": { - SchemaProps: spec.SchemaProps{ - Description: "LockObjectNamespace defines the namespace of the lock object", - Type: []string{"string"}, - Format: "", - }, - }, - "lockObjectName": { - SchemaProps: spec.SchemaProps{ - Description: "LockObjectName defines the lock object name", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"leaderElect", "leaseDuration", "renewDeadline", "retryPeriod", "resourceLock", "lockObjectNamespace", "lockObjectName"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kube_scheduler_config_v1alpha1_SchedulerAlgorithmSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SchedulerAlgorithmSource is the source of a scheduler algorithm. One source field must be specified, and source fields are mutually exclusive.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "policy": { - SchemaProps: spec.SchemaProps{ - Description: "Policy is a policy based algorithm source.", - Ref: ref("k8s.io/kube-scheduler/config/v1alpha1.SchedulerPolicySource"), - }, - }, - "provider": { - SchemaProps: spec.SchemaProps{ - Description: "Provider is the name of a scheduling algorithm provider to use.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/kube-scheduler/config/v1alpha1.SchedulerPolicySource"}, - } -} - -func schema_k8sio_kube_scheduler_config_v1alpha1_SchedulerPolicyConfigMapSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SchedulerPolicyConfigMapSource is a policy serialized into a config map value under the SchedulerPolicyConfigMapKey key.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace is the namespace of the policy config map.", - Type: []string{"string"}, - Format: "", - }, - }, - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Name is the name of hte policy config map.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"namespace", "name"}, - }, - }, - } -} - -func schema_k8sio_kube_scheduler_config_v1alpha1_SchedulerPolicyFileSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SchedulerPolicyFileSource is a policy serialized to disk and accessed via path.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "path": { - SchemaProps: spec.SchemaProps{ - Description: "Path is the location of a serialized policy.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - Required: []string{"path"}, - }, - }, - } -} - -func schema_k8sio_kube_scheduler_config_v1alpha1_SchedulerPolicySource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SchedulerPolicySource configures a means to obtain a scheduler Policy. One source field must be specified, and source fields are mutually exclusive.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "file": { - SchemaProps: spec.SchemaProps{ - Description: "File is a file policy source.", - Ref: ref("k8s.io/kube-scheduler/config/v1alpha1.SchedulerPolicyFileSource"), - }, - }, - "configMap": { - SchemaProps: spec.SchemaProps{ - Description: "ConfigMap is a config map policy source.", - Ref: ref("k8s.io/kube-scheduler/config/v1alpha1.SchedulerPolicyConfigMapSource"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/kube-scheduler/config/v1alpha1.SchedulerPolicyConfigMapSource", "k8s.io/kube-scheduler/config/v1alpha1.SchedulerPolicyFileSource"}, - } -} - -func schema_k8sio_kubelet_config_v1beta1_KubeletAnonymousAuthentication(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "enabled": { - SchemaProps: spec.SchemaProps{ - Description: "enabled allows anonymous requests to the kubelet server. Requests that are not rejected by another authentication method are treated as anonymous requests. Anonymous requests have a username of system:anonymous, and a group name of system:unauthenticated.", - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_kubelet_config_v1beta1_KubeletAuthentication(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "x509": { - SchemaProps: spec.SchemaProps{ - Description: "x509 contains settings related to x509 client certificate authentication", - Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletX509Authentication"), - }, - }, - "webhook": { - SchemaProps: spec.SchemaProps{ - Description: "webhook contains settings related to webhook bearer token authentication", - Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthentication"), - }, - }, - "anonymous": { - SchemaProps: spec.SchemaProps{ - Description: "anonymous contains settings related to anonymous authentication", - Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletAnonymousAuthentication"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/kubelet/config/v1beta1.KubeletAnonymousAuthentication", "k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthentication", "k8s.io/kubelet/config/v1beta1.KubeletX509Authentication"}, - } -} - -func schema_k8sio_kubelet_config_v1beta1_KubeletAuthorization(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "mode": { - SchemaProps: spec.SchemaProps{ - Description: "mode is the authorization mode to apply to requests to the kubelet server. Valid values are AlwaysAllow and Webhook. Webhook mode uses the SubjectAccessReview API to determine authorization.", - Type: []string{"string"}, - Format: "", - }, - }, - "webhook": { - SchemaProps: spec.SchemaProps{ - Description: "webhook contains settings related to Webhook authorization.", - Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthorization"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/kubelet/config/v1beta1.KubeletWebhookAuthorization"}, - } -} - -func schema_k8sio_kubelet_config_v1beta1_KubeletConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "KubeletConfiguration contains the configuration for the Kubelet", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "staticPodPath": { - SchemaProps: spec.SchemaProps{ - Description: "staticPodPath is the path to the directory containing local (static) pods to run, or the path to a single static pod file. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that the set of static pods specified at the new path may be different than the ones the Kubelet initially started with, and this may disrupt your node. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "syncFrequency": { - SchemaProps: spec.SchemaProps{ - Description: "syncFrequency is the max period between synchronizing running containers and config. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that shortening this duration may have a negative performance impact, especially as the number of Pods on the node increases. Alternatively, increasing this duration will result in longer refresh times for ConfigMaps and Secrets. Default: \"1m\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "fileCheckFrequency": { - SchemaProps: spec.SchemaProps{ - Description: "fileCheckFrequency is the duration between checking config files for new data Dynamic Kubelet Config (beta): If dynamically updating this field, consider that shortening the duration will cause the Kubelet to reload local Static Pod configurations more frequently, which may have a negative performance impact. Default: \"20s\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "httpCheckFrequency": { - SchemaProps: spec.SchemaProps{ - Description: "httpCheckFrequency is the duration between checking http for new data Dynamic Kubelet Config (beta): If dynamically updating this field, consider that shortening the duration will cause the Kubelet to poll staticPodURL more frequently, which may have a negative performance impact. Default: \"20s\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "staticPodURL": { - SchemaProps: spec.SchemaProps{ - Description: "staticPodURL is the URL for accessing static pods to run Dynamic Kubelet Config (beta): If dynamically updating this field, consider that the set of static pods specified at the new URL may be different than the ones the Kubelet initially started with, and this may disrupt your node. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "staticPodURLHeader": { - SchemaProps: spec.SchemaProps{ - Description: "staticPodURLHeader is a map of slices with HTTP headers to use when accessing the podURL Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt the ability to read the latest set of static pods from StaticPodURL. Default: nil", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - "address": { - SchemaProps: spec.SchemaProps{ - Description: "address is the IP address for the Kubelet to serve on (set to 0.0.0.0 for all interfaces). Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: \"0.0.0.0\"", - Type: []string{"string"}, - Format: "", - }, - }, - "port": { - SchemaProps: spec.SchemaProps{ - Description: "port is the port for the Kubelet to serve on. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: 10250", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "readOnlyPort": { - SchemaProps: spec.SchemaProps{ - Description: "readOnlyPort is the read-only port for the Kubelet to serve on with no authentication/authorization. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: 0 (disabled)", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "tlsCertFile": { - SchemaProps: spec.SchemaProps{ - Description: "tlsCertFile is the file containing x509 Certificate for HTTPS. (CA cert, if any, concatenated after server cert). If tlsCertFile and tlsPrivateKeyFile are not provided, a self-signed certificate and key are generated for the public address and saved to the directory passed to the Kubelet's --cert-dir flag. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "tlsPrivateKeyFile": { - SchemaProps: spec.SchemaProps{ - Description: "tlsPrivateKeyFile is the file containing x509 private key matching tlsCertFile Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "tlsCipherSuites": { - SchemaProps: spec.SchemaProps{ - Description: "TLSCipherSuites is the list of allowed cipher suites for the server. Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: nil", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "tlsMinVersion": { - SchemaProps: spec.SchemaProps{ - Description: "TLSMinVersion is the minimum TLS version supported. Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "rotateCertificates": { - SchemaProps: spec.SchemaProps{ - Description: "rotateCertificates enables client certificate rotation. The Kubelet will request a new certificate from the certificates.k8s.io API. This requires an approver to approve the certificate signing requests. The RotateKubeletClientCertificate feature must be enabled. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that disabling it may disrupt the Kubelet's ability to authenticate with the API server after the current certificate expires. Default: false", - Type: []string{"boolean"}, - Format: "", - }, - }, - "serverTLSBootstrap": { - SchemaProps: spec.SchemaProps{ - Description: "serverTLSBootstrap enables server certificate bootstrap. Instead of self signing a serving certificate, the Kubelet will request a certificate from the certificates.k8s.io API. This requires an approver to approve the certificate signing requests. The RotateKubeletServerCertificate feature must be enabled. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that disabling it will stop the renewal of Kubelet server certificates, which can disrupt components that interact with the Kubelet server in the long term, due to certificate expiration. Default: false", - Type: []string{"boolean"}, - Format: "", - }, - }, - "authentication": { - SchemaProps: spec.SchemaProps{ - Description: "authentication specifies how requests to the Kubelet's server are authenticated Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Defaults:\n anonymous:\n enabled: false\n webhook:\n enabled: true\n cacheTTL: \"2m\"", - Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletAuthentication"), - }, - }, - "authorization": { - SchemaProps: spec.SchemaProps{ - Description: "authorization specifies how requests to the Kubelet's server are authorized Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Defaults:\n mode: Webhook\n webhook:\n cacheAuthorizedTTL: \"5m\"\n cacheUnauthorizedTTL: \"30s\"", - Ref: ref("k8s.io/kubelet/config/v1beta1.KubeletAuthorization"), - }, - }, - "registryPullQPS": { - SchemaProps: spec.SchemaProps{ - Description: "registryPullQPS is the limit of registry pulls per second. Set to 0 for no limit. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic produced by image pulls. Default: 5", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "registryBurst": { - SchemaProps: spec.SchemaProps{ - Description: "registryBurst is the maximum size of bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding registryPullQPS. Only used if registryPullQPS > 0. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic produced by image pulls. Default: 10", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "eventRecordQPS": { - SchemaProps: spec.SchemaProps{ - Description: "eventRecordQPS is the maximum event creations per second. If 0, there is no limit enforced. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic produced by event creations. Default: 5", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "eventBurst": { - SchemaProps: spec.SchemaProps{ - Description: "eventBurst is the maximum size of a burst of event creations, temporarily allows event creations to burst to this number, while still not exceeding eventRecordQPS. Only used if eventRecordQPS > 0. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic produced by event creations. Default: 10", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "enableDebuggingHandlers": { - SchemaProps: spec.SchemaProps{ - Description: "enableDebuggingHandlers enables server endpoints for log access and local running of containers and commands, including the exec, attach, logs, and portforward features. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that disabling it may disrupt components that interact with the Kubelet server. Default: true", - Type: []string{"boolean"}, - Format: "", - }, - }, - "enableContentionProfiling": { - SchemaProps: spec.SchemaProps{ - Description: "enableContentionProfiling enables lock contention profiling, if enableDebuggingHandlers is true. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that enabling it may carry a performance impact. Default: false", - Type: []string{"boolean"}, - Format: "", - }, - }, - "healthzPort": { - SchemaProps: spec.SchemaProps{ - Description: "healthzPort is the port of the localhost healthz endpoint (set to 0 to disable) Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that monitor Kubelet health. Default: 10248", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "healthzBindAddress": { - SchemaProps: spec.SchemaProps{ - Description: "healthzBindAddress is the IP address for the healthz server to serve on Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that monitor Kubelet health. Default: \"127.0.0.1\"", - Type: []string{"string"}, - Format: "", - }, - }, - "oomScoreAdj": { - SchemaProps: spec.SchemaProps{ - Description: "oomScoreAdj is The oom-score-adj value for kubelet process. Values must be within the range [-1000, 1000]. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact the stability of nodes under memory pressure. Default: -999", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "clusterDomain": { - SchemaProps: spec.SchemaProps{ - Description: "clusterDomain is the DNS domain for this cluster. If set, kubelet will configure all containers to search this domain in addition to the host's search domains. Dynamic Kubelet Config (beta): Dynamically updating this field is not recommended, as it should be kept in sync with the rest of the cluster. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "clusterDNS": { - SchemaProps: spec.SchemaProps{ - Description: "clusterDNS is a list of IP addresses for the cluster DNS server. If set, kubelet will configure all containers to use this for DNS resolution instead of the host's DNS servers. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that changes will only take effect on Pods created after the update. Draining the node is recommended before changing this field. Default: nil", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "streamingConnectionIdleTimeout": { - SchemaProps: spec.SchemaProps{ - Description: "streamingConnectionIdleTimeout is the maximum time a streaming connection can be idle before the connection is automatically closed. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact components that rely on infrequent updates over streaming connections to the Kubelet server. Default: \"4h\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "nodeStatusUpdateFrequency": { - SchemaProps: spec.SchemaProps{ - Description: "nodeStatusUpdateFrequency is the frequency that kubelet computes node status. If node lease feature is not enabled, it is also the frequency that kubelet posts node status to master. Note: When node lease feature is not enabled, be cautious when changing the constant, it must work with nodeMonitorGracePeriod in nodecontroller. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact node scalability, and also that the node controller's nodeMonitorGracePeriod must be set to N*NodeStatusUpdateFrequency, where N is the number of retries before the node controller marks the node unhealthy. Default: \"10s\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "nodeStatusReportFrequency": { - SchemaProps: spec.SchemaProps{ - Description: "nodeStatusReportFrequency is the frequency that kubelet posts node status to master if node status does not change. Kubelet will ignore this frequency and post node status immediately if any change is detected. It is only used when node lease feature is enabled. nodeStatusReportFrequency's default value is 1m. But if nodeStatusUpdateFrequency is set explicitly, nodeStatusReportFrequency's default value will be set to nodeStatusUpdateFrequency for backward compatibility. Default: \"1m\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "nodeLeaseDurationSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "nodeLeaseDurationSeconds is the duration the Kubelet will set on its corresponding Lease, when the NodeLease feature is enabled. This feature provides an indicator of node health by having the Kublet create and periodically renew a lease, named after the node, in the kube-node-lease namespace. If the lease expires, the node can be considered unhealthy. The lease is currently renewed every 10s, per KEP-0009. In the future, the lease renewal interval may be set based on the lease duration. Requires the NodeLease feature gate to be enabled. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that decreasing the duration may reduce tolerance for issues that temporarily prevent the Kubelet from renewing the lease (e.g. a short-lived network issue). Default: 40", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "imageMinimumGCAge": { - SchemaProps: spec.SchemaProps{ - Description: "imageMinimumGCAge is the minimum age for an unused image before it is garbage collected. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay garbage collection, and may change the image overhead on the node. Default: \"2m\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "imageGCHighThresholdPercent": { - SchemaProps: spec.SchemaProps{ - Description: "imageGCHighThresholdPercent is the percent of disk usage after which image garbage collection is always run. The percent is calculated as this field value out of 100. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay garbage collection, and may change the image overhead on the node. Default: 85", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "imageGCLowThresholdPercent": { - SchemaProps: spec.SchemaProps{ - Description: "imageGCLowThresholdPercent is the percent of disk usage before which image garbage collection is never run. Lowest disk usage to garbage collect to. The percent is calculated as this field value out of 100. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay garbage collection, and may change the image overhead on the node. Default: 80", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "volumeStatsAggPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "How frequently to calculate and cache volume disk usage for all pods Dynamic Kubelet Config (beta): If dynamically updating this field, consider that shortening the period may carry a performance impact. Default: \"1m\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "kubeletCgroups": { - SchemaProps: spec.SchemaProps{ - Description: "kubeletCgroups is the absolute name of cgroups to isolate the kubelet in Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "systemCgroups": { - SchemaProps: spec.SchemaProps{ - Description: "systemCgroups is absolute name of cgroups in which to place all non-kernel processes that are not already in a container. Empty for no container. Rolling back the flag requires a reboot. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "cgroupRoot": { - SchemaProps: spec.SchemaProps{ - Description: "cgroupRoot is the root cgroup to use for pods. This is handled by the container runtime on a best effort basis. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "cgroupsPerQOS": { - SchemaProps: spec.SchemaProps{ - Description: "Enable QoS based Cgroup hierarchy: top level cgroups for QoS Classes And all Burstable and BestEffort pods are brought up under their specific top level QoS cgroup. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: true", - Type: []string{"boolean"}, - Format: "", - }, - }, - "cgroupDriver": { - SchemaProps: spec.SchemaProps{ - Description: "driver that the kubelet uses to manipulate cgroups on the host (cgroupfs or systemd) Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"cgroupfs\"", - Type: []string{"string"}, - Format: "", - }, - }, - "cpuManagerPolicy": { - SchemaProps: spec.SchemaProps{ - Description: "CPUManagerPolicy is the name of the policy to use. Requires the CPUManager feature gate to be enabled. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"none\"", - Type: []string{"string"}, - Format: "", - }, - }, - "cpuManagerReconcilePeriod": { - SchemaProps: spec.SchemaProps{ - Description: "CPU Manager reconciliation period. Requires the CPUManager feature gate to be enabled. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that shortening the period may carry a performance impact. Default: \"10s\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "qosReserved": { - SchemaProps: spec.SchemaProps{ - Description: "qosReserved is a set of resource name to percentage pairs that specify the minimum percentage of a resource reserved for exclusive use by the guaranteed QoS tier. Currently supported resources: \"memory\" Requires the QOSReserved feature gate to be enabled. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: nil", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "runtimeRequestTimeout": { - SchemaProps: spec.SchemaProps{ - Description: "runtimeRequestTimeout is the timeout for all runtime requests except long running requests - pull, logs, exec and attach. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may disrupt components that interact with the Kubelet server. Default: \"2m\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "hairpinMode": { - SchemaProps: spec.SchemaProps{ - Description: "hairpinMode specifies how the Kubelet should configure the container bridge for hairpin packets. Setting this flag allows endpoints in a Service to loadbalance back to themselves if they should try to access their own Service. Values:\n \"promiscuous-bridge\": make the container bridge promiscuous.\n \"hairpin-veth\": set the hairpin flag on container veth interfaces.\n \"none\": do nothing.\nGenerally, one must set --hairpin-mode=hairpin-veth to achieve hairpin NAT, because promiscuous-bridge assumes the existence of a container bridge named cbr0. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may require a node reboot, depending on the network plugin. Default: \"promiscuous-bridge\"", - Type: []string{"string"}, - Format: "", - }, - }, - "maxPods": { - SchemaProps: spec.SchemaProps{ - Description: "maxPods is the number of pods that can run on this Kubelet. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that changes may cause Pods to fail admission on Kubelet restart, and may change the value reported in Node.Status.Capacity[v1.ResourcePods], thus affecting future scheduling decisions. Increasing this value may also decrease performance, as more Pods can be packed into a single node. Default: 110", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "podCIDR": { - SchemaProps: spec.SchemaProps{ - Description: "The CIDR to use for pod IP addresses, only used in standalone mode. In cluster mode, this is obtained from the master. Dynamic Kubelet Config (beta): This field should always be set to the empty default. It should only set for standalone Kubelets, which cannot use Dynamic Kubelet Config. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "podPidsLimit": { - SchemaProps: spec.SchemaProps{ - Description: "PodPidsLimit is the maximum number of pids in any pod. Requires the SupportPodPidsLimit feature gate to be enabled. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that lowering it may prevent container processes from forking after the change. Default: -1", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "resolvConf": { - SchemaProps: spec.SchemaProps{ - Description: "ResolverConfig is the resolver configuration file used as the basis for the container DNS resolution configuration. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that changes will only take effect on Pods created after the update. Draining the node is recommended before changing this field. Default: \"/etc/resolv.conf\"", - Type: []string{"string"}, - Format: "", - }, - }, - "cpuCFSQuota": { - SchemaProps: spec.SchemaProps{ - Description: "cpuCFSQuota enables CPU CFS quota enforcement for containers that specify CPU limits. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that disabling it may reduce node stability. Default: true", - Type: []string{"boolean"}, - Format: "", - }, - }, - "cpuCFSQuotaPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "CPUCFSQuotaPeriod is the CPU CFS quota period value, cpu.cfs_period_us. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that limits set for containers will result in different cpu.cfs_quota settings. This will trigger container restarts on the node being reconfigured. Default: \"100ms\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "maxOpenFiles": { - SchemaProps: spec.SchemaProps{ - Description: "maxOpenFiles is Number of files that can be opened by Kubelet process. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact the ability of the Kubelet to interact with the node's filesystem. Default: 1000000", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "contentType": { - SchemaProps: spec.SchemaProps{ - Description: "contentType is contentType of requests sent to apiserver. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact the ability for the Kubelet to communicate with the API server. If the Kubelet loses contact with the API server due to a change to this field, the change cannot be reverted via dynamic Kubelet config. Default: \"application/vnd.kubernetes.protobuf\"", - Type: []string{"string"}, - Format: "", - }, - }, - "kubeAPIQPS": { - SchemaProps: spec.SchemaProps{ - Description: "kubeAPIQPS is the QPS to use while talking with kubernetes apiserver Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic the Kubelet sends to the API server. Default: 5", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "kubeAPIBurst": { - SchemaProps: spec.SchemaProps{ - Description: "kubeAPIBurst is the burst to allow while talking with kubernetes apiserver Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact scalability by changing the amount of traffic the Kubelet sends to the API server. Default: 10", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "serializeImagePulls": { - SchemaProps: spec.SchemaProps{ - Description: "serializeImagePulls when enabled, tells the Kubelet to pull images one at a time. We recommend *not* changing the default value on nodes that run docker daemon with version < 1.9 or an Aufs storage backend. Issue #10959 has more details. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may impact the performance of image pulls. Default: true", - Type: []string{"boolean"}, - Format: "", - }, - }, - "evictionHard": { - SchemaProps: spec.SchemaProps{ - Description: "Map of signal names to quantities that defines hard eviction thresholds. For example: {\"memory.available\": \"300Mi\"}. To explicitly disable, pass a 0% or 100% threshold on an arbitrary resource. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay Pod evictions. Default:\n memory.available: \"100Mi\"\n nodefs.available: \"10%\"\n nodefs.inodesFree: \"5%\"\n imagefs.available: \"15%\"", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "evictionSoft": { - SchemaProps: spec.SchemaProps{ - Description: "Map of signal names to quantities that defines soft eviction thresholds. For example: {\"memory.available\": \"300Mi\"}. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay Pod evictions, and may change the allocatable reported by the node. Default: nil", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "evictionSoftGracePeriod": { - SchemaProps: spec.SchemaProps{ - Description: "Map of signal names to quantities that defines grace periods for each soft eviction signal. For example: {\"memory.available\": \"30s\"}. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger or delay Pod evictions. Default: nil", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "evictionPressureTransitionPeriod": { - SchemaProps: spec.SchemaProps{ - Description: "Duration for which the kubelet has to wait before transitioning out of an eviction pressure condition. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that lowering it may decrease the stability of the node when the node is overcommitted. Default: \"5m\"", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "evictionMaxPodGracePeriod": { - SchemaProps: spec.SchemaProps{ - Description: "Maximum allowed grace period (in seconds) to use when terminating pods in response to a soft eviction threshold being met. This value effectively caps the Pod's TerminationGracePeriodSeconds value during soft evictions. Note: Due to issue #64530, the behavior has a bug where this value currently just overrides the grace period during soft eviction, which can increase the grace period from what is set on the Pod. This bug will be fixed in a future release. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that lowering it decreases the amount of time Pods will have to gracefully clean up before being killed during a soft eviction. Default: 0", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "evictionMinimumReclaim": { - SchemaProps: spec.SchemaProps{ - Description: "Map of signal names to quantities that defines minimum reclaims, which describe the minimum amount of a given resource the kubelet will reclaim when performing a pod eviction while that resource is under pressure. For example: {\"imagefs.available\": \"2Gi\"} Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may change how well eviction can manage resource pressure. Default: nil", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "podsPerCore": { - SchemaProps: spec.SchemaProps{ - Description: "podsPerCore is the maximum number of pods per core. Cannot exceed MaxPods. If 0, this field is ignored. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that changes may cause Pods to fail admission on Kubelet restart, and may change the value reported in Node.Status.Capacity[v1.ResourcePods], thus affecting future scheduling decisions. Increasing this value may also decrease performance, as more Pods can be packed into a single node. Default: 0", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "enableControllerAttachDetach": { - SchemaProps: spec.SchemaProps{ - Description: "enableControllerAttachDetach enables the Attach/Detach controller to manage attachment/detachment of volumes scheduled to this node, and disables kubelet from executing any attach/detach operations Dynamic Kubelet Config (beta): If dynamically updating this field, consider that changing which component is responsible for volume management on a live node may result in volumes refusing to detach if the node is not drained prior to the update, and if Pods are scheduled to the node before the volumes.kubernetes.io/controller-managed-attach-detach annotation is updated by the Kubelet. In general, it is safest to leave this value set the same as local config. Default: true", - Type: []string{"boolean"}, - Format: "", - }, - }, - "protectKernelDefaults": { - SchemaProps: spec.SchemaProps{ - Description: "protectKernelDefaults, if true, causes the Kubelet to error if kernel flags are not as it expects. Otherwise the Kubelet will attempt to modify kernel flags to match its expectation. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that enabling it may cause the Kubelet to crash-loop if the Kernel is not configured as Kubelet expects. Default: false", - Type: []string{"boolean"}, - Format: "", - }, - }, - "makeIPTablesUtilChains": { - SchemaProps: spec.SchemaProps{ - Description: "If true, Kubelet ensures a set of iptables rules are present on host. These rules will serve as utility rules for various components, e.g. KubeProxy. The rules will be created based on IPTablesMasqueradeBit and IPTablesDropBit. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that disabling it will prevent the Kubelet from healing locally misconfigured iptables rules. Default: true", - Type: []string{"boolean"}, - Format: "", - }, - }, - "iptablesMasqueradeBit": { - SchemaProps: spec.SchemaProps{ - Description: "iptablesMasqueradeBit is the bit of the iptables fwmark space to mark for SNAT Values must be within the range [0, 31]. Must be different from other mark bits. Warning: Please match the value of the corresponding parameter in kube-proxy. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it needs to be coordinated with other components, like kube-proxy, and the update will only be effective if MakeIPTablesUtilChains is enabled. Default: 14", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "iptablesDropBit": { - SchemaProps: spec.SchemaProps{ - Description: "iptablesDropBit is the bit of the iptables fwmark space to mark for dropping packets. Values must be within the range [0, 31]. Must be different from other mark bits. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it needs to be coordinated with other components, like kube-proxy, and the update will only be effective if MakeIPTablesUtilChains is enabled. Default: 15", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "featureGates": { - SchemaProps: spec.SchemaProps{ - Description: "featureGates is a map of feature names to bools that enable or disable alpha/experimental features. This field modifies piecemeal the built-in default values from \"k8s.io/kubernetes/pkg/features/kube_features.go\". Dynamic Kubelet Config (beta): If dynamically updating this field, consider the documentation for the features you are enabling or disabling. While we encourage feature developers to make it possible to dynamically enable and disable features, some changes may require node reboots, and some features may require careful coordination to retroactively disable. Default: nil", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"boolean"}, - Format: "", - }, - }, - }, - }, - }, - "failSwapOn": { - SchemaProps: spec.SchemaProps{ - Description: "failSwapOn tells the Kubelet to fail to start if swap is enabled on the node. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that setting it to true will cause the Kubelet to crash-loop if swap is enabled. Default: true", - Type: []string{"boolean"}, - Format: "", - }, - }, - "containerLogMaxSize": { - SchemaProps: spec.SchemaProps{ - Description: "A quantity defines the maximum size of the container log file before it is rotated. For example: \"5Mi\" or \"256Ki\". Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may trigger log rotation. Default: \"10Mi\"", - Type: []string{"string"}, - Format: "", - }, - }, - "containerLogMaxFiles": { - SchemaProps: spec.SchemaProps{ - Description: "Maximum number of container log files that can be present for a container. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that lowering it may cause log files to be deleted. Default: 5", - Type: []string{"integer"}, - Format: "int32", - }, - }, - "configMapAndSecretChangeDetectionStrategy": { - SchemaProps: spec.SchemaProps{ - Description: "ConfigMapAndSecretChangeDetectionStrategy is a mode in which config map and secret managers are running. Default: \"Watching\"", - Type: []string{"string"}, - Format: "", - }, - }, - "systemReserved": { - SchemaProps: spec.SchemaProps{ - Description: "systemReserved is a set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G) pairs that describe resources reserved for non-kubernetes components. Currently only cpu and memory are supported. See http://kubernetes.io/docs/user-guide/compute-resources for more detail. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may not be possible to increase the reserved resources, because this requires resizing cgroups. Always look for a NodeAllocatableEnforced event after updating this field to ensure that the update was successful. Default: nil", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "kubeReserved": { - SchemaProps: spec.SchemaProps{ - Description: "A set of ResourceName=ResourceQuantity (e.g. cpu=200m,memory=150G) pairs that describe resources reserved for kubernetes system components. Currently cpu, memory and local storage for root file system are supported. See http://kubernetes.io/docs/user-guide/compute-resources for more detail. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that it may not be possible to increase the reserved resources, because this requires resizing cgroups. Always look for a NodeAllocatableEnforced event after updating this field to ensure that the update was successful. Default: nil", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "systemReservedCgroup": { - SchemaProps: spec.SchemaProps{ - Description: "This flag helps kubelet identify absolute name of top level cgroup used to enforce `SystemReserved` compute resource reservation for OS system daemons. Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "kubeReservedCgroup": { - SchemaProps: spec.SchemaProps{ - Description: "This flag helps kubelet identify absolute name of top level cgroup used to enforce `KubeReserved` compute resource reservation for Kubernetes node system daemons. Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information. Dynamic Kubelet Config (beta): This field should not be updated without a full node reboot. It is safest to keep this value the same as the local config. Default: \"\"", - Type: []string{"string"}, - Format: "", - }, - }, - "enforceNodeAllocatable": { - SchemaProps: spec.SchemaProps{ - Description: "This flag specifies the various Node Allocatable enforcements that Kubelet needs to perform. This flag accepts a list of options. Acceptable options are `none`, `pods`, `system-reserved` & `kube-reserved`. If `none` is specified, no other options may be specified. Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information. Dynamic Kubelet Config (beta): If dynamically updating this field, consider that removing enforcements may reduce the stability of the node. Alternatively, adding enforcements may reduce the stability of components which were using more than the reserved amount of resources; for example, enforcing kube-reserved may cause Kubelets to OOM if it uses more than the reserved resources, and enforcing system-reserved may cause system daemons to OOM if they use more than the reserved resources. Default: [\"pods\"]", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/kubelet/config/v1beta1.KubeletAuthentication", "k8s.io/kubelet/config/v1beta1.KubeletAuthorization"}, - } -} - -func schema_k8sio_kubelet_config_v1beta1_KubeletWebhookAuthentication(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "enabled": { - SchemaProps: spec.SchemaProps{ - Description: "enabled allows bearer token authentication backed by the tokenreviews.authentication.k8s.io API", - Type: []string{"boolean"}, - Format: "", - }, - }, - "cacheTTL": { - SchemaProps: spec.SchemaProps{ - Description: "cacheTTL enables caching of authentication results", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kubelet_config_v1beta1_KubeletWebhookAuthorization(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "cacheAuthorizedTTL": { - SchemaProps: spec.SchemaProps{ - Description: "cacheAuthorizedTTL is the duration to cache 'authorized' responses from the webhook authorizer.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "cacheUnauthorizedTTL": { - SchemaProps: spec.SchemaProps{ - Description: "cacheUnauthorizedTTL is the duration to cache 'unauthorized' responses from the webhook authorizer.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, - } -} - -func schema_k8sio_kubelet_config_v1beta1_KubeletX509Authentication(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "clientCAFile": { - SchemaProps: spec.SchemaProps{ - Description: "clientCAFile is the path to a PEM-encoded certificate bundle. If set, any request presenting a client certificate signed by one of the authorities in the bundle is authenticated with a username corresponding to the CommonName, and groups corresponding to the Organization in the client certificate.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_k8sio_kubelet_config_v1beta1_SerializedNodeConfigSource(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "SerializedNodeConfigSource allows us to serialize v1.NodeConfigSource. This type is used internally by the Kubelet for tracking checkpointed dynamic configs. It exists in the kubeletconfig API group because it is classified as a versioned input to the Kubelet.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "source": { - SchemaProps: spec.SchemaProps{ - Description: "Source is the source that we are serializing", - Ref: ref("k8s.io/api/core/v1.NodeConfigSource"), - }, - }, - }, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.NodeConfigSource"}, - } -} - -func schema_app_apis_config_v1alpha1_CloudControllerManagerConfiguration(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "Generic": { - SchemaProps: spec.SchemaProps{ - Description: "Generic holds configuration for a generic controller-manager", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.GenericControllerManagerConfiguration"), - }, - }, - "KubeCloudShared": { - SchemaProps: spec.SchemaProps{ - Description: "KubeCloudSharedConfiguration holds configuration for shared related features both in cloud controller manager and kube-controller manager.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.KubeCloudSharedConfiguration"), - }, - }, - "ServiceController": { - SchemaProps: spec.SchemaProps{ - Description: "ServiceControllerConfiguration holds configuration for ServiceController related features.", - Ref: ref("k8s.io/kube-controller-manager/config/v1alpha1.ServiceControllerConfiguration"), - }, - }, - "NodeStatusUpdateFrequency": { - SchemaProps: spec.SchemaProps{ - Description: "NodeStatusUpdateFrequency is the frequency at which the controller updates nodes' status", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - }, - Required: []string{"Generic", "KubeCloudShared", "ServiceController", "NodeStatusUpdateFrequency"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/kube-controller-manager/config/v1alpha1.GenericControllerManagerConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.KubeCloudSharedConfiguration", "k8s.io/kube-controller-manager/config/v1alpha1.ServiceControllerConfiguration"}, - } -} - -func schema_pkg_apis_abac_v1beta1_Policy(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "Policy contains a single ABAC policy rule", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Spec describes the policy rule", - Ref: ref("k8s.io/kubernetes/pkg/apis/abac/v1beta1.PolicySpec"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/kubernetes/pkg/apis/abac/v1beta1.PolicySpec"}, - } -} - -func schema_pkg_apis_abac_v1beta1_PolicySpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PolicySpec contains the attributes for a policy rule", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "user": { - SchemaProps: spec.SchemaProps{ - Description: "User is the username this rule applies to. Either user or group is required to match the request. \"*\" matches all users.", - Type: []string{"string"}, - Format: "", - }, - }, - "group": { - SchemaProps: spec.SchemaProps{ - Description: "Group is the group this rule applies to. Either user or group is required to match the request. \"*\" matches all groups.", - Type: []string{"string"}, - Format: "", - }, - }, - "readonly": { - SchemaProps: spec.SchemaProps{ - Description: "Readonly matches readonly requests when true, and all requests when false", - Type: []string{"boolean"}, - Format: "", - }, - }, - "apiGroup": { - SchemaProps: spec.SchemaProps{ - Description: "APIGroup is the name of an API group. APIGroup, Resource, and Namespace are required to match resource requests. \"*\" matches all API groups", - Type: []string{"string"}, - Format: "", - }, - }, - "resource": { - SchemaProps: spec.SchemaProps{ - Description: "Resource is the name of a resource. APIGroup, Resource, and Namespace are required to match resource requests. \"*\" matches all resources", - Type: []string{"string"}, - Format: "", - }, - }, - "namespace": { - SchemaProps: spec.SchemaProps{ - Description: "Namespace is the name of a namespace. APIGroup, Resource, and Namespace are required to match resource requests. \"*\" matches all namespaces (including unnamespaced requests)", - Type: []string{"string"}, - Format: "", - }, - }, - "nonResourcePath": { - SchemaProps: spec.SchemaProps{ - Description: "NonResourcePath matches non-resource request paths. \"*\" matches all paths \"/foo/*\" matches all subpaths of foo", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_custom_metrics_v1beta1_MetricListOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricListOptions is used to select metrics by their label selectors", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "labelSelector": { - SchemaProps: spec.SchemaProps{ - Description: "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - Type: []string{"string"}, - Format: "", - }, - }, - "metricLabelSelector": { - SchemaProps: spec.SchemaProps{ - Description: "A selector to restrict the list of returned metrics by their labels", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_custom_metrics_v1beta1_MetricValue(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricValue is a metric value for some object", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "describedObject": { - SchemaProps: spec.SchemaProps{ - Description: "a reference to the described object", - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "the name of the metric", - Type: []string{"string"}, - Format: "", - }, - }, - "timestamp": { - SchemaProps: spec.SchemaProps{ - Description: "indicates the time at which the metrics were produced", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "window": { - SchemaProps: spec.SchemaProps{ - Description: "indicates the window ([Timestamp-Window, Timestamp]) from which these metrics were calculated, when returning rate metrics calculated from cumulative metrics (or zero for non-calculated instantaneous metrics).", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "the value of the metric for this", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector represents the label selector that could be used to select this metric, and will generally just be the selector passed in to the query used to fetch this metric. When left blank, only the metric's Name will be used to gather metrics.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - }, - Required: []string{"describedObject", "metricName", "timestamp", "value"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_custom_metrics_v1beta1_MetricValueList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricValueList is a list of values for a given metric for some set of objects", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "the value of the metric across the described objects", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/metrics/pkg/apis/custom_metrics/v1beta1.MetricValue"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/custom_metrics/v1beta1.MetricValue"}, - } -} - -func schema_pkg_apis_custom_metrics_v1beta2_MetricIdentifier(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricIdentifier identifies a metric by name and, optionally, selector", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "name is the name of the given metric", - Type: []string{"string"}, - Format: "", - }, - }, - "selector": { - SchemaProps: spec.SchemaProps{ - Description: "selector represents the label selector that could be used to select this metric, and will generally just be the selector passed in to the query used to fetch this metric. When left blank, only the metric's Name will be used to gather metrics.", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"), - }, - }, - }, - Required: []string{"name"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.LabelSelector"}, - } -} - -func schema_pkg_apis_custom_metrics_v1beta2_MetricListOptions(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricListOptions is used to select metrics by their label selectors", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "labelSelector": { - SchemaProps: spec.SchemaProps{ - Description: "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - Type: []string{"string"}, - Format: "", - }, - }, - "metricLabelSelector": { - SchemaProps: spec.SchemaProps{ - Description: "A selector to restrict the list of returned metrics by their labels", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} - -func schema_pkg_apis_custom_metrics_v1beta2_MetricValue(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricValue is the metric value for some object", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "describedObject": { - SchemaProps: spec.SchemaProps{ - Description: "a reference to the described object", - Ref: ref("k8s.io/api/core/v1.ObjectReference"), - }, - }, - "metric": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricIdentifier"), - }, - }, - "timestamp": { - SchemaProps: spec.SchemaProps{ - Description: "indicates the time at which the metrics were produced", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "windowSeconds": { - SchemaProps: spec.SchemaProps{ - Description: "indicates the window ([Timestamp-Window, Timestamp]) from which these metrics were calculated, when returning rate metrics calculated from cumulative metrics (or zero for non-calculated instantaneous metrics).", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "the value of the metric for this", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"describedObject", "metric", "timestamp", "value"}, - }, - }, - Dependencies: []string{ - "k8s.io/api/core/v1.ObjectReference", "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.Time", "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricIdentifier"}, - } -} - -func schema_pkg_apis_custom_metrics_v1beta2_MetricValueList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "MetricValueList is a list of values for a given metric for some set of objects", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "the value of the metric across the described objects", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricValue"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/custom_metrics/v1beta2.MetricValue"}, - } -} - -func schema_pkg_apis_external_metrics_v1beta1_ExternalMetricValue(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExternalMetricValue is a metric value for external metric A single metric value is identified by metric name and a set of string labels. For one metric there can be multiple values with different sets of labels.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metricName": { - SchemaProps: spec.SchemaProps{ - Description: "the name of the metric", - Type: []string{"string"}, - Format: "", - }, - }, - "metricLabels": { - SchemaProps: spec.SchemaProps{ - Description: "a set of labels that identify a single time series for the metric", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - "timestamp": { - SchemaProps: spec.SchemaProps{ - Description: "indicates the time at which the metrics were produced", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "window": { - SchemaProps: spec.SchemaProps{ - Description: "indicates the window ([Timestamp-Window, Timestamp]) from which these metrics were calculated, when returning rate metrics calculated from cumulative metrics (or zero for non-calculated instantaneous metrics).", - Type: []string{"integer"}, - Format: "int64", - }, - }, - "value": { - SchemaProps: spec.SchemaProps{ - Description: "the value of the metric", - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - Required: []string{"metricName", "metricLabels", "timestamp", "value"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_external_metrics_v1beta1_ExternalMetricValueList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ExternalMetricValueList is a list of values for a given metric for some set labels", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "value of the metric matching a given set of labels", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/metrics/pkg/apis/external_metrics/v1beta1.ExternalMetricValue"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/external_metrics/v1beta1.ExternalMetricValue"}, - } -} - -func schema_pkg_apis_metrics_v1alpha1_ContainerMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ContainerMetrics sets resource usage metrics of a container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Container name corresponding to the one from pod.spec.containers.", - Type: []string{"string"}, - Format: "", - }, - }, - "usage": { - SchemaProps: spec.SchemaProps{ - Description: "The memory usage is the memory working set.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - }, - Required: []string{"name", "usage"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_pkg_apis_metrics_v1alpha1_NodeMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeMetrics sets resource usage metrics of a node.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "timestamp": { - SchemaProps: spec.SchemaProps{ - Description: "The following fields define time interval from which metrics were collected from the interval [Timestamp-Window, Timestamp].", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "window": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "usage": { - SchemaProps: spec.SchemaProps{ - Description: "The memory usage is the memory working set.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - }, - Required: []string{"timestamp", "window", "usage"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_metrics_v1alpha1_NodeMetricsList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeMetricsList is a list of NodeMetrics.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of node metrics.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1alpha1.NodeMetrics"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/metrics/v1alpha1.NodeMetrics"}, - } -} - -func schema_pkg_apis_metrics_v1alpha1_PodMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodMetrics sets resource usage metrics of a pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "timestamp": { - SchemaProps: spec.SchemaProps{ - Description: "The following fields define time interval from which metrics were collected from the interval [Timestamp-Window, Timestamp].", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "window": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "containers": { - SchemaProps: spec.SchemaProps{ - Description: "Metrics for all containers are collected within the same time window.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1alpha1.ContainerMetrics"), - }, - }, - }, - }, - }, - }, - Required: []string{"timestamp", "window", "containers"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time", "k8s.io/metrics/pkg/apis/metrics/v1alpha1.ContainerMetrics"}, - } -} - -func schema_pkg_apis_metrics_v1alpha1_PodMetricsList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodMetricsList is a list of PodMetrics.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of pod metrics.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1alpha1.PodMetrics"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/metrics/v1alpha1.PodMetrics"}, - } -} - -func schema_pkg_apis_metrics_v1beta1_ContainerMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "ContainerMetrics sets resource usage metrics of a container.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "name": { - SchemaProps: spec.SchemaProps{ - Description: "Container name corresponding to the one from pod.spec.containers.", - Type: []string{"string"}, - Format: "", - }, - }, - "usage": { - SchemaProps: spec.SchemaProps{ - Description: "The memory usage is the memory working set.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - }, - Required: []string{"name", "usage"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity"}, - } -} - -func schema_pkg_apis_metrics_v1beta1_NodeMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeMetrics sets resource usage metrics of a node.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "timestamp": { - SchemaProps: spec.SchemaProps{ - Description: "The following fields define time interval from which metrics were collected from the interval [Timestamp-Window, Timestamp].", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "window": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "usage": { - SchemaProps: spec.SchemaProps{ - Description: "The memory usage is the memory working set.", - Type: []string{"object"}, - AdditionalProperties: &spec.SchemaOrBool{ - Allows: true, - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/api/resource.Quantity"), - }, - }, - }, - }, - }, - }, - Required: []string{"timestamp", "window", "usage"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, - } -} - -func schema_pkg_apis_metrics_v1beta1_NodeMetricsList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "NodeMetricsList is a list of NodeMetrics.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of node metrics.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1beta1.NodeMetrics"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/metrics/v1beta1.NodeMetrics"}, - } -} - -func schema_pkg_apis_metrics_v1beta1_PodMetrics(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodMetrics sets resource usage metrics of a pod.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "timestamp": { - SchemaProps: spec.SchemaProps{ - Description: "The following fields define time interval from which metrics were collected from the interval [Timestamp-Window, Timestamp].", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), - }, - }, - "window": { - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), - }, - }, - "containers": { - SchemaProps: spec.SchemaProps{ - Description: "Metrics for all containers are collected within the same time window.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1beta1.ContainerMetrics"), - }, - }, - }, - }, - }, - }, - Required: []string{"timestamp", "window", "containers"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.Duration", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/apimachinery/pkg/apis/meta/v1.Time", "k8s.io/metrics/pkg/apis/metrics/v1beta1.ContainerMetrics"}, - } -} - -func schema_pkg_apis_metrics_v1beta1_PodMetricsList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "PodMetricsList is a list of PodMetrics.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "List of pod metrics.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/metrics/pkg/apis/metrics/v1beta1.PodMetrics"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/metrics/pkg/apis/metrics/v1beta1.PodMetrics"}, - } -} - -func schema_pkg_apis_node_v1alpha1_RuntimeClass(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to select or configure the container runtime that is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), - }, - }, - "spec": { - SchemaProps: spec.SchemaProps{ - Description: "Specification of the RuntimeClass More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", - Ref: ref("k8s.io/node-api/pkg/apis/node/v1alpha1.RuntimeClassSpec"), - }, - }, - }, - Required: []string{"spec"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/node-api/pkg/apis/node/v1alpha1.RuntimeClassSpec"}, - } -} - -func schema_pkg_apis_node_v1alpha1_RuntimeClassList(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RuntimeClassList is a list of RuntimeClass objects.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "kind": { - SchemaProps: spec.SchemaProps{ - Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - Type: []string{"string"}, - Format: "", - }, - }, - "apiVersion": { - SchemaProps: spec.SchemaProps{ - Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", - Type: []string{"string"}, - Format: "", - }, - }, - "metadata": { - SchemaProps: spec.SchemaProps{ - Description: "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", - Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), - }, - }, - "items": { - SchemaProps: spec.SchemaProps{ - Description: "Items is a list of schema objects.", - Type: []string{"array"}, - Items: &spec.SchemaOrArray{ - Schema: &spec.Schema{ - SchemaProps: spec.SchemaProps{ - Ref: ref("k8s.io/node-api/pkg/apis/node/v1alpha1.RuntimeClass"), - }, - }, - }, - }, - }, - }, - Required: []string{"items"}, - }, - }, - Dependencies: []string{ - "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta", "k8s.io/node-api/pkg/apis/node/v1alpha1.RuntimeClass"}, - } -} - -func schema_pkg_apis_node_v1alpha1_RuntimeClassSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { - return common.OpenAPIDefinition{ - Schema: spec.Schema{ - SchemaProps: spec.SchemaProps{ - Description: "RuntimeClassSpec is a specification of a RuntimeClass. It contains parameters that required to describe the RuntimeClass to the Container Runtime Interface (CRI) implementation, as well as any other components that need to understand how the pod will be run. The RuntimeClassSpec should be treated as immutable.", - Type: []string{"object"}, - Properties: map[string]spec.Schema{ - "runtimeHandler": { - SchemaProps: spec.SchemaProps{ - Description: "RuntimeHandler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node configuration & CRI implementation. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called \"runc\" might specify that the runc OCI runtime (using native Linux containers) should be used to run the containers in a pod. If this is not specified (or empty), a default will be chosen by the implementation.", - Type: []string{"string"}, - Format: "", - }, - }, - }, - }, - }, - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/config.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/config.go index b2be46190..52788434e 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/config.go +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/config.go @@ -66,7 +66,7 @@ func (c *Config) New(proxyTransport *http.Transport, serviceResolver webhook.Ser discoveryRESTMapper := restmapper.NewDeferredDiscoveryRESTMapper(discoveryClient) kubePluginInitializer := NewPluginInitializer( cloudConfig, - NewAdmissionRESTMapper(discoveryRESTMapper), + discoveryRESTMapper, quotainstall.NewQuotaConfigurationForAdmission(), ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/patch_restmapper.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/patch_restmapper.go deleted file mode 100644 index 7f465c519..000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/admission/patch_restmapper.go +++ /dev/null @@ -1,108 +0,0 @@ -package admission - -import ( - "fmt" - - "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// defaultRESTMappings contains enough RESTMappings to have enough of the kube-controller-manager succeed when running -// against a kube-apiserver that cannot reach aggregated APIs to do a full mapping. This happens when the OwnerReferencesPermissionEnforcement -// admission plugin runs to confirm permissions. Don't add things just because you don't want to fail. These are here so that -// we can start enough back up to get the rest of the system working correctly. -var defaultRESTMappings = []meta.RESTMapping{ - { - GroupVersionKind: schema.GroupVersionKind{Group: "", Version: "v1", Kind: "ConfigMap"}, - Scope: meta.RESTScopeNamespace, - Resource: schema.GroupVersionResource{Group: "", Version: "v1", Resource: "configmaps"}, - }, - { - GroupVersionKind: schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Pod"}, - Scope: meta.RESTScopeNamespace, - Resource: schema.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"}, - }, - { - GroupVersionKind: schema.GroupVersionKind{Group: "", Version: "v1", Kind: "ReplicationController"}, - Scope: meta.RESTScopeNamespace, - Resource: schema.GroupVersionResource{Group: "", Version: "v1", Resource: "replicationcontrollers"}, - }, - { - GroupVersionKind: schema.GroupVersionKind{Group: "", Version: "v1", Kind: "Secret"}, - Scope: meta.RESTScopeNamespace, - Resource: schema.GroupVersionResource{Group: "", Version: "v1", Resource: "secrets"}, - }, - { - GroupVersionKind: schema.GroupVersionKind{Group: "", Version: "v1", Kind: "ServiceAccount"}, - Scope: meta.RESTScopeNamespace, - Resource: schema.GroupVersionResource{Group: "", Version: "v1", Resource: "serviceaccounts"}, - }, - { - GroupVersionKind: schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "ControllerRevision"}, - Scope: meta.RESTScopeNamespace, - Resource: schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "controllerrevisions"}, - }, - { - GroupVersionKind: schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "DaemonSet"}, - Scope: meta.RESTScopeNamespace, - Resource: schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "daemonsets"}, - }, - { - GroupVersionKind: schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "Deployment"}, - Scope: meta.RESTScopeNamespace, - Resource: schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "deployments"}, - }, - { - GroupVersionKind: schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "ReplicaSet"}, - Scope: meta.RESTScopeNamespace, - Resource: schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "replicasets"}, - }, - { - GroupVersionKind: schema.GroupVersionKind{Group: "apps", Version: "v1", Kind: "StatefulSet"}, - Scope: meta.RESTScopeNamespace, - Resource: schema.GroupVersionResource{Group: "apps", Version: "v1", Resource: "statefulsets"}, - }, -} - -func NewAdmissionRESTMapper(delegate meta.RESTMapper) meta.RESTMapper { - ret := HardCodedFirstRESTMapper{ - Mapping: map[schema.GroupVersionKind]meta.RESTMapping{}, - RESTMapper: delegate, - } - for i := range defaultRESTMappings { - curr := defaultRESTMappings[i] - ret.Mapping[curr.GroupVersionKind] = curr - } - return ret -} - -// HardCodedFirstRESTMapper is a RESTMapper that will look for hardcoded mappings first, then delegate. -// This is done in service to `OwnerReferencesPermissionEnforcement` -type HardCodedFirstRESTMapper struct { - Mapping map[schema.GroupVersionKind]meta.RESTMapping - meta.RESTMapper -} - -var _ meta.RESTMapper = HardCodedFirstRESTMapper{} - -func (m HardCodedFirstRESTMapper) String() string { - return fmt.Sprintf("HardCodedRESTMapper{\n\t%v\n%v\n}", m.Mapping, m.RESTMapper) -} - -// RESTMapping is the only function called today. The firsthit restmapper ought to make this work right. OwnerReferencesPermissionEnforcement -// only ever calls with one version. -func (m HardCodedFirstRESTMapper) RESTMappings(gk schema.GroupKind, versions ...string) ([]*meta.RESTMapping, error) { - // not exactly one version, delegate - if len(versions) != 1 { - return m.RESTMapper.RESTMappings(gk, versions...) - } - gvk := gk.WithVersion(versions[0]) - - single, ok := m.Mapping[gvk] - // not handled, delegate - if !ok { - return m.RESTMapper.RESTMappings(gk, versions...) - } - - return []*meta.RESTMapping{&single}, nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/config.go b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/config.go index 3437c1a4e..03e05d797 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/config.go +++ b/vendor/k8s.io/kubernetes/pkg/kubeapiserver/authenticator/config.go @@ -17,7 +17,6 @@ limitations under the License. package authenticator import ( - "fmt" "time" "github.com/go-openapi/spec" @@ -34,8 +33,6 @@ import ( tokencache "k8s.io/apiserver/pkg/authentication/token/cache" "k8s.io/apiserver/pkg/authentication/token/tokenfile" tokenunion "k8s.io/apiserver/pkg/authentication/token/union" - genericapiserver "k8s.io/apiserver/pkg/server" - "k8s.io/apiserver/pkg/server/certs" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/apiserver/plugin/pkg/authenticator/password/passwordfile" "k8s.io/apiserver/plugin/pkg/authenticator/request/basicauth" @@ -85,16 +82,15 @@ type Config struct { // New returns an authenticator.Request or an error that supports the standard // Kubernetes authentication mechanisms. -func (config Config) New() (authenticator.Request, *spec.SecurityDefinitions, map[string]genericapiserver.PostStartHookFunc, error) { +func (config Config) New() (authenticator.Request, *spec.SecurityDefinitions, error) { var authenticators []authenticator.Request var tokenAuthenticators []authenticator.Token securityDefinitions := spec.SecurityDefinitions{} - dynamicReloadHooks := map[string]genericapiserver.PostStartHookFunc{} // front-proxy, BasicAuth methods, local first, then remote // Add the front proxy authenticator if requested if config.RequestHeaderConfig != nil { - requestHeaderAuthenticator, dynamicReloadFn, err := headerrequest.NewSecure( + requestHeaderAuthenticator, err := headerrequest.NewSecure( config.RequestHeaderConfig.ClientCA, config.RequestHeaderConfig.AllowedClientNames, config.RequestHeaderConfig.UsernameHeaders, @@ -102,11 +98,7 @@ func (config Config) New() (authenticator.Request, *spec.SecurityDefinitions, ma config.RequestHeaderConfig.ExtraHeaderPrefixes, ) if err != nil { - return nil, nil, nil, err - } - dynamicReloadHooks["kube-apiserver-requestheader-reload"] = func(context genericapiserver.PostStartHookContext) error { - go dynamicReloadFn(context.StopCh) - return nil + return nil, nil, err } authenticators = append(authenticators, authenticator.WrapAudienceAgnosticRequest(config.APIAudiences, requestHeaderAuthenticator)) } @@ -115,7 +107,7 @@ func (config Config) New() (authenticator.Request, *spec.SecurityDefinitions, ma if len(config.BasicAuthFile) > 0 { basicAuth, err := newAuthenticatorFromBasicAuthFile(config.BasicAuthFile) if err != nil { - return nil, nil, nil, err + return nil, nil, err } authenticators = append(authenticators, authenticator.WrapAudienceAgnosticRequest(config.APIAudiences, basicAuth)) @@ -129,36 +121,32 @@ func (config Config) New() (authenticator.Request, *spec.SecurityDefinitions, ma // X509 methods if len(config.ClientCAFile) > 0 { - dynamicVerifier := certs.NewDynamicCA(config.ClientCAFile) - if err := dynamicVerifier.CheckCerts(); err != nil { - return nil, nil, nil, fmt.Errorf("unable to load client CA file %s: %v", config.ClientCAFile, err) - } - dynamicReloadHooks["kube-apiserver-clientCA-reload"] = func(context genericapiserver.PostStartHookContext) error { - go dynamicVerifier.Run(context.StopCh) - return nil + certAuth, err := newAuthenticatorFromClientCAFile(config.ClientCAFile) + if err != nil { + return nil, nil, err } - authenticators = append(authenticators, x509.NewDynamic(dynamicVerifier.GetVerifier, x509.CommonNameUserConversion)) + authenticators = append(authenticators, certAuth) } // Bearer token methods, local first, then remote if len(config.TokenAuthFile) > 0 { tokenAuth, err := newAuthenticatorFromTokenFile(config.TokenAuthFile) if err != nil { - return nil, nil, nil, err + return nil, nil, err } tokenAuthenticators = append(tokenAuthenticators, authenticator.WrapAudienceAgnosticToken(config.APIAudiences, tokenAuth)) } if len(config.ServiceAccountKeyFiles) > 0 { serviceAccountAuth, err := newLegacyServiceAccountAuthenticator(config.ServiceAccountKeyFiles, config.ServiceAccountLookup, config.APIAudiences, config.ServiceAccountTokenGetter) if err != nil { - return nil, nil, nil, err + return nil, nil, err } tokenAuthenticators = append(tokenAuthenticators, serviceAccountAuth) } if utilfeature.DefaultFeatureGate.Enabled(features.TokenRequest) && config.ServiceAccountIssuer != "" { serviceAccountAuth, err := newServiceAccountAuthenticator(config.ServiceAccountIssuer, config.ServiceAccountKeyFiles, config.APIAudiences, config.ServiceAccountTokenGetter) if err != nil { - return nil, nil, nil, err + return nil, nil, err } tokenAuthenticators = append(tokenAuthenticators, serviceAccountAuth) } @@ -188,14 +176,14 @@ func (config Config) New() (authenticator.Request, *spec.SecurityDefinitions, ma RequiredClaims: config.OIDCRequiredClaims, }) if err != nil { - return nil, nil, nil, err + return nil, nil, err } tokenAuthenticators = append(tokenAuthenticators, oidcAuth) } if len(config.WebhookTokenAuthnConfigFile) > 0 { webhookTokenAuth, err := newWebhookTokenAuthenticator(config.WebhookTokenAuthnConfigFile, config.WebhookTokenAuthnCacheTTL, config.APIAudiences) if err != nil { - return nil, nil, nil, err + return nil, nil, err } tokenAuthenticators = append(tokenAuthenticators, webhookTokenAuth) } @@ -220,9 +208,9 @@ func (config Config) New() (authenticator.Request, *spec.SecurityDefinitions, ma if len(authenticators) == 0 { if config.Anonymous { - return anonymous.NewAuthenticator(), &securityDefinitions, dynamicReloadHooks, nil + return anonymous.NewAuthenticator(), &securityDefinitions, nil } - return nil, &securityDefinitions, dynamicReloadHooks, nil + return nil, &securityDefinitions, nil } authenticator := union.New(authenticators...) @@ -235,7 +223,7 @@ func (config Config) New() (authenticator.Request, *spec.SecurityDefinitions, ma authenticator = union.NewFailOnError(authenticator, anonymous.NewAuthenticator()) } - return authenticator, &securityDefinitions, dynamicReloadHooks, nil + return authenticator, &securityDefinitions, nil } // IsValidServiceAccountKeyFile returns true if a valid public RSA key can be read from the given file diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/convert.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/convert.go index 0fda87031..873d8e600 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/convert.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/convert.go @@ -145,14 +145,6 @@ func (o *ConvertOptions) RunConvert() error { // Another possible solution is to make convert a plugin. fmt.Fprintf(o.ErrOut, "kubectl convert is DEPRECATED and will be removed in a future version.\nIn order to convert, kubectl apply the object to the cluster, then kubectl get at the desired version.\n") - ok, err := o.containsOpenShiftTypes() - if err != nil { - return err - } - if ok { - return nil - } - b := o.builder(). WithScheme(scheme.Scheme). LocalParam(o.local) @@ -170,7 +162,7 @@ func (o *ConvertOptions) RunConvert() error { Flatten(). Do() - err = r.Err() + err := r.Err() if err != nil { return err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/patch_convert_openshift.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/patch_convert_openshift.go deleted file mode 100644 index c30c2e4b8..000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/convert/patch_convert_openshift.go +++ /dev/null @@ -1,66 +0,0 @@ -package convert - -import ( - "strings" - - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - scheme "k8s.io/kubernetes/pkg/api/legacyscheme" -) - -// containsOpenShiftTypes iterates over objects and shortcircuits the execution when -// find OpenShift types. Returns true if OpenShift resources where identified -// and error if there was a problem. -func (o *ConvertOptions) containsOpenShiftTypes() (bool, error) { - b := o.builder(). - WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). - LocalParam(o.local) - if !o.local { - schema, err := o.validator() - if err != nil { - return false, err - } - b.Schema(schema) - } - - r := b.NamespaceParam(o.Namespace). - ContinueOnError(). - FilenameParam(false, &o.FilenameOptions). - Flatten(). - Do() - - err := r.Err() - if err != nil { - return false, err - } - - singleItemImplied := false - infos, err := r.IntoSingleItemImplied(&singleItemImplied).Infos() - if err != nil { - return false, err - } - - openshiftTypes := false - printableList := &corev1.List{ - // this is ok because we know exactly how we want to be serialized - TypeMeta: metav1.TypeMeta{APIVersion: corev1.SchemeGroupVersion.String(), Kind: "List"}, - } - for _, info := range infos { - if info.Object == nil { - continue - } - gv := info.Object.GetObjectKind().GroupVersionKind().GroupVersion() - // if we find at least one OpenShift type (they are already converted to groupped, - // see shim_kubectl.go openshiftpatch.OAPIToGroupified) just print all - // resources - if strings.Contains(gv.String(), "openshift.io") { - openshiftTypes = true - } - printableList.Items = append(printableList.Items, runtime.RawExtension{ - Object: info.Object, - }) - } - - return openshiftTypes, o.Printer.PrintObj(printableList, o.Out) -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/BUILD index 77a19b4dc..160688835 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/BUILD @@ -32,7 +32,6 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", "//staging/src/k8s.io/client-go/rest/fake:go_default_library", - "//vendor/github.com/stretchr/testify/require:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp.go index 2679c6f7a..e0a624a29 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp.go @@ -300,8 +300,7 @@ func (o *CopyOptions) copyFromPod(src, dest fileSpec) error { go func() { defer outStream.Close() - err := o.execute(options) - cmdutil.CheckErr(err) + o.execute(options) }() prefix := getPrefix(src.File) prefix = path.Clean(prefix) @@ -419,7 +418,9 @@ func clean(fileName string) string { return path.Clean(string(os.PathSeparator) + fileName) } -func (o *CopyOptions) untarAll(reader io.Reader, destDir, prefix string) error { +func (o *CopyOptions) untarAll(reader io.Reader, destFile, prefix string) error { + entrySeq := -1 + // TODO: use compression here? tarReader := tar.NewReader(reader) for { @@ -430,60 +431,52 @@ func (o *CopyOptions) untarAll(reader io.Reader, destDir, prefix string) error { } break } - - // All the files will start with the prefix, which is the directory where + entrySeq++ + mode := header.FileInfo().Mode() + // all the files will start with the prefix, which is the directory where // they were located on the pod, we need to strip down that prefix, but - // if the prefix is missing it means the tar was tempered with. - // For the case where prefix is empty we need to ensure that the path - // is not absolute, which also indicates the tar file was tempered with. + // if the prefix is missing it means the tar was tempered with if !strings.HasPrefix(header.Name, prefix) { return fmt.Errorf("tar contents corrupted") } - - // basic file information - mode := header.FileInfo().Mode() - destFileName := path.Join(destDir, header.Name[len(prefix):]) - baseName := path.Dir(destFileName) - + outFileName := path.Join(destFile, clean(header.Name[len(prefix):])) + baseName := path.Dir(outFileName) if err := os.MkdirAll(baseName, 0755); err != nil { return err } if header.FileInfo().IsDir() { - if err := os.MkdirAll(destFileName, 0755); err != nil { + if err := os.MkdirAll(outFileName, 0755); err != nil { return err } continue } - // We need to ensure that the destination file is always within boundries - // of the destination directory. This prevents any kind of path traversal - // from within tar archive. - dir, file := filepath.Split(destFileName) - evaledPath, err := filepath.EvalSymlinks(dir) - if err != nil { - return err - } - // For scrutiny we verify both the actual destination as well as we follow - // all the links that might lead outside of the destination directory. - if !isDestRelative(destDir, destFileName) || !isDestRelative(destDir, filepath.Join(evaledPath, file)) { - fmt.Fprintf(o.IOStreams.ErrOut, "warning: link %q is pointing to %q which is outside target destination, skipping\n", destFileName, header.Linkname) - continue + // handle coping remote file into local directory + if entrySeq == 0 && !header.FileInfo().IsDir() { + exists, err := dirExists(outFileName) + if err != nil { + return err + } + if exists { + outFileName = filepath.Join(outFileName, path.Base(clean(header.Name))) + } } if mode&os.ModeSymlink != 0 { linkname := header.Linkname - // We need to ensure that the link destination is always within boundries - // of the destination directory. This prevents any kind of path traversal - // from within tar archive. - if !isDestRelative(destDir, linkJoin(destFileName, linkname)) { - fmt.Fprintf(o.IOStreams.ErrOut, "warning: link %q is pointing to %q which is outside target destination, skipping\n", destFileName, header.Linkname) + // error is returned if linkname can't be made relative to destFile, + // but relative can end up being ../dir that's why we also need to + // verify if relative path is the same after Clean-ing + relative, err := filepath.Rel(destFile, linkname) + if path.IsAbs(linkname) && (err != nil || relative != stripPathShortcuts(relative)) { + fmt.Fprintf(o.IOStreams.ErrOut, "warning: link %q is pointing to %q which is outside target destination, skipping\n", outFileName, header.Linkname) continue } - if err := os.Symlink(linkname, destFileName); err != nil { + if err := os.Symlink(linkname, outFileName); err != nil { return err } } else { - outFile, err := os.Create(destFileName) + outFile, err := os.Create(outFileName) if err != nil { return err } @@ -497,30 +490,12 @@ func (o *CopyOptions) untarAll(reader io.Reader, destDir, prefix string) error { } } - return nil -} - -// linkJoin joins base and link to get the final path to be created. -// It will consider whether link is an absolute path or not when returning result. -func linkJoin(base, link string) string { - if filepath.IsAbs(link) { - return link - } - return filepath.Join(base, link) -} - -// isDestRelative returns true if dest is pointing outside the base directory, -// false otherwise. -func isDestRelative(base, dest string) bool { - fullPath := dest - if !filepath.IsAbs(dest) { - fullPath = filepath.Join(base, dest) + if entrySeq == -1 { + //if no file was copied + errInfo := fmt.Sprintf("error: %s no such file or directory", prefix) + return errors.New(errInfo) } - relative, err := filepath.Rel(base, fullPath) - if err != nil { - return false - } - return relative == "." || relative == stripPathShortcuts(relative) + return nil } func getPrefix(file string) string { @@ -549,3 +524,15 @@ func (o *CopyOptions) execute(options *exec.ExecOptions) error { } return nil } + +// dirExists checks if a path exists and is a directory. +func dirExists(path string) (bool, error) { + fi, err := os.Stat(path) + if err == nil && fi.IsDir() { + return true, nil + } + if os.IsNotExist(err) { + return false, nil + } + return false, err +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp_test.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp_test.go index c7d75573d..388171455 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/cp/cp_test.go @@ -19,19 +19,17 @@ package cp import ( "archive/tar" "bytes" - "fmt" "io" "io/ioutil" "net/http" "os" + "os/exec" "path" "path/filepath" "reflect" "strings" "testing" - "github.com/stretchr/testify/require" - "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" @@ -192,67 +190,6 @@ func TestStripPathShortcuts(t *testing.T) { } } } -func TestIsDestRelative(t *testing.T) { - tests := []struct { - base string - dest string - relative bool - }{ - { - base: "/dir", - dest: "../link", - relative: false, - }, - { - base: "/dir", - dest: "../../link", - relative: false, - }, - { - base: "/dir", - dest: "/link", - relative: false, - }, - { - base: "/dir", - dest: "link", - relative: true, - }, - { - base: "/dir", - dest: "int/file/link", - relative: true, - }, - { - base: "/dir", - dest: "int/../link", - relative: true, - }, - { - base: "/dir", - dest: "/dir/link", - relative: true, - }, - { - base: "/dir", - dest: "/dir/int/../link", - relative: true, - }, - { - base: "/dir", - dest: "/dir/../../link", - relative: false, - }, - } - - for i, test := range tests { - t.Run(fmt.Sprintf("%d", i), func(t *testing.T) { - if test.relative != isDestRelative(test.base, test.dest) { - t.Errorf("unexpected result for: base %q, dest %q", test.base, test.dest) - } - }) - } -} func checkErr(t *testing.T, err error) { if err != nil { @@ -429,6 +366,97 @@ func TestTarUntarWrongPrefix(t *testing.T) { } } +// TestCopyToLocalFileOrDir tests untarAll in two cases : +// 1: copy pod file to local file +// 2: copy pod file into local directory +func TestCopyToLocalFileOrDir(t *testing.T) { + dir, err := ioutil.TempDir(os.TempDir(), "input") + dir2, err2 := ioutil.TempDir(os.TempDir(), "output") + if err != nil || err2 != nil { + t.Errorf("unexpected error: %v | %v", err, err2) + t.FailNow() + } + defer func() { + if err := os.RemoveAll(dir); err != nil { + t.Errorf("Unexpected error cleaning up: %v", err) + } + if err := os.RemoveAll(dir2); err != nil { + t.Errorf("Unexpected error cleaning up: %v", err) + } + }() + + files := []struct { + name string + data string + dest string + destDirExists bool + }{ + { + name: "foo", + data: "foobarbaz", + dest: "path/to/dest", + destDirExists: false, + }, + { + name: "dir/blah", + data: "bazblahfoo", + dest: "dest/file/path", + destDirExists: true, + }, + } + + for _, file := range files { + func() { + // setup + srcFilePath := filepath.Join(dir, file.name) + destPath := filepath.Join(dir2, file.dest) + if err := os.MkdirAll(filepath.Dir(srcFilePath), 0755); err != nil { + t.Errorf("unexpected error: %v", err) + t.FailNow() + } + createTmpFile(t, srcFilePath, file.data) + if file.destDirExists { + if err := os.MkdirAll(destPath, 0755); err != nil { + t.Errorf("unexpected error: %v", err) + t.FailNow() + } + } + + // start tests + srcTarFilePath := filepath.Join(dir, file.name+".tar") + // here use tar command to create tar file instead of calling makeTar func + // because makeTar func can not generate correct header name + err = exec.Command("tar", "cf", srcTarFilePath, srcFilePath).Run() + if err != nil { + t.Errorf("unexpected error: %v", err) + t.FailNow() + } + srcTarFile, err := os.Open(srcTarFilePath) + if err != nil { + t.Errorf("unexpected error: %v", err) + t.FailNow() + } + defer srcTarFile.Close() + + opts := NewCopyOptions(genericclioptions.NewTestIOStreamsDiscard()) + if err := opts.untarAll(srcTarFile, destPath, getPrefix(srcFilePath)); err != nil { + t.Errorf("unexpected error: %v", err) + t.FailNow() + } + actualDestFilePath := destPath + if file.destDirExists { + actualDestFilePath = filepath.Join(destPath, filepath.Base(srcFilePath)) + } + _, err = os.Stat(actualDestFilePath) + if err != nil && os.IsNotExist(err) { + t.Errorf("expecting %s exists, but actually it's missing", actualDestFilePath) + } + cmpFileData(t, actualDestFilePath, file.data) + }() + } + +} + func TestTarDestinationName(t *testing.T) { dir, err := ioutil.TempDir(os.TempDir(), "input") dir2, err2 := ioutil.TempDir(os.TempDir(), "output") @@ -515,6 +543,7 @@ func TestBadTar(t *testing.T) { name string body string }{ + {"/prefix/../../../tmp/foo", "Up to temp"}, {"/prefix/foo/bar/../../home/bburns/names.txt", "Down and back"}, } for _, file := range files { @@ -549,6 +578,7 @@ func TestBadTar(t *testing.T) { t.Errorf("Error finding file: %v", err) } } + } func TestClean(t *testing.T) { @@ -738,184 +768,6 @@ func TestValidate(t *testing.T) { } } -func TestUntar(t *testing.T) { - testdir, err := ioutil.TempDir("", "test-untar") - require.NoError(t, err) - defer os.RemoveAll(testdir) - t.Logf("Test base: %s", testdir) - - const ( - dest = "base" - ) - - type file struct { - path string - linkTarget string // For link types - expected string // Expect to find the file here (or not, if empty) - } - files := []file{{ - // Absolute file within dest - path: filepath.Join(testdir, dest, "abs"), - expected: filepath.Join(testdir, dest, testdir, dest, "abs"), - }, { // Absolute file outside dest - path: filepath.Join(testdir, "abs-out"), - expected: filepath.Join(testdir, dest, testdir, "abs-out"), - }, { // Absolute nested file within dest - path: filepath.Join(testdir, dest, "nested/nest-abs"), - expected: filepath.Join(testdir, dest, testdir, dest, "nested/nest-abs"), - }, { // Absolute nested file outside dest - path: filepath.Join(testdir, dest, "nested/../../nest-abs-out"), - expected: filepath.Join(testdir, dest, testdir, "nest-abs-out"), - }, { // Relative file inside dest - path: "relative", - expected: filepath.Join(testdir, dest, "relative"), - }, { // Relative file outside dest - path: "../unrelative", - expected: "", - }, { // Nested relative file inside dest - path: "nested/nest-rel", - expected: filepath.Join(testdir, dest, "nested/nest-rel"), - }, { // Nested relative file outside dest - path: "nested/../../nest-unrelative", - expected: "", - }} - - mkExpectation := func(expected, suffix string) string { - if expected == "" { - return "" - } - return expected + suffix - } - mkBacktickExpectation := func(expected, suffix string) string { - dir, _ := filepath.Split(filepath.Clean(expected)) - if len(strings.Split(dir, string(os.PathSeparator))) <= 1 { - return "" - } - return expected + suffix - } - links := []file{} - for _, f := range files { - links = append(links, file{ - path: f.path + "-innerlink", - linkTarget: "link-target", - expected: mkExpectation(f.expected, "-innerlink"), - }, file{ - path: f.path + "-innerlink-abs", - linkTarget: filepath.Join(testdir, dest, "link-target"), - expected: mkExpectation(f.expected, "-innerlink-abs"), - }, file{ - path: f.path + "-outerlink", - linkTarget: filepath.Join(backtick(f.path), "link-target"), - expected: mkBacktickExpectation(f.expected, "-outerlink"), - }, file{ - path: f.path + "-outerlink-abs", - linkTarget: filepath.Join(testdir, "link-target"), - expected: "", - }) - } - files = append(files, links...) - - // Test back-tick escaping through a symlink. - files = append(files, - file{ - path: "nested/again/back-link", - linkTarget: "../../nested", - expected: filepath.Join(testdir, dest, "nested/again/back-link"), - }, - file{ - path: "nested/again/back-link/../../../back-link-file", - expected: filepath.Join(testdir, dest, "back-link-file"), - }) - - // Test chaining back-tick symlinks. - files = append(files, - file{ - path: "nested/back-link-first", - linkTarget: "../", - expected: filepath.Join(testdir, dest, "nested/back-link-first"), - }, - file{ - path: "nested/back-link-first/back-link-second", - linkTarget: "../", - expected: filepath.Join(testdir, dest, "back-link-second"), - }, - file{ - // This case is chaining together symlinks that step back, so that - // if you just look at the target relative to the path it appears - // inside the destination directory, but if you actually follow each - // step of the path you end up outside the destination directory. - path: "nested/back-link-first/back-link-second/back-link-term", - linkTarget: "", - expected: "", - }) - - files = append(files, - file{ // Relative directory path with terminating / - path: "direct/dir/", - expected: "", - }) - - buf := &bytes.Buffer{} - tw := tar.NewWriter(buf) - expectations := map[string]bool{} - for _, f := range files { - if f.expected != "" { - expectations[f.expected] = false - } - if f.linkTarget == "" { - hdr := &tar.Header{ - Name: f.path, - Mode: 0666, - Size: int64(len(f.path)), - } - require.NoError(t, tw.WriteHeader(hdr), f.path) - if !strings.HasSuffix(f.path, "/") { - _, err := tw.Write([]byte(f.path)) - require.NoError(t, err, f.path) - } - } else { - hdr := &tar.Header{ - Name: f.path, - Mode: int64(0777 | os.ModeSymlink), - Typeflag: tar.TypeSymlink, - Linkname: f.linkTarget, - } - require.NoError(t, tw.WriteHeader(hdr), f.path) - } - } - tw.Close() - - opts := NewCopyOptions(genericclioptions.NewTestIOStreamsDiscard()) - - require.NoError(t, opts.untarAll(buf, filepath.Join(testdir, dest), "")) - - filepath.Walk(testdir, func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - if info.IsDir() { - return nil // Ignore directories. - } - if _, ok := expectations[path]; !ok { - t.Errorf("Unexpected file at %s", path) - } else { - expectations[path] = true - } - return nil - }) - for path, found := range expectations { - if !found { - t.Errorf("Missing expected file %s", path) - } - } -} - -// backtick returns a path to one directory up from the target -func backtick(target string) string { - rel, _ := filepath.Rel(filepath.Dir(target), "../") - return rel -} - func createTmpFile(t *testing.T, filepath, data string) { f, err := os.Create(filepath) if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_secret.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_secret.go index cc4d39e9e..8ba703c28 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_secret.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/create_secret.go @@ -61,13 +61,13 @@ var ( kubectl create secret generic my-secret --from-file=path/to/bar # Create a new secret named my-secret with specified keys instead of names on disk - kubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa --from-file=ssh-publickey=path/to/id_rsa.pub + kubectl create secret generic my-secret --from-file=ssh-privatekey=~/.ssh/id_rsa --from-file=ssh-publickey=~/.ssh/id_rsa.pub # Create a new secret named my-secret with key1=supersecret and key2=topsecret kubectl create secret generic my-secret --from-literal=key1=supersecret --from-literal=key2=topsecret # Create a new secret named my-secret using a combination of a file and a literal - kubectl create secret generic my-secret --from-file=ssh-privatekey=path/to/id_rsa --from-literal=passphrase=topsecret + kubectl create secret generic my-secret --from-file=ssh-privatekey=~/.ssh/id_rsa --from-literal=passphrase=topsecret # Create a new secret named my-secret from an env file kubectl create secret generic my-secret --from-env-file=path/to/bar.env`)) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/patch_scc.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/patch_scc.go deleted file mode 100644 index de467d3f0..000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/create/patch_scc.go +++ /dev/null @@ -1,13 +0,0 @@ -package create - -import "k8s.io/apimachinery/pkg/runtime/schema" - -func init() { - specialVerbs["use"] = append( - specialVerbs["use"], - schema.GroupResource{ - Group: "security.openshift.io", - Resource: "securitycontextconstraints", - }, - ) -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/BUILD b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/BUILD index 5d9b2cd2b..6541bc9fc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/BUILD @@ -11,6 +11,7 @@ go_library( "//pkg/kubectl/util/templates:go_default_library", "//staging/src/k8s.io/cli-runtime/pkg/genericclioptions:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", + "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/plugin.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/plugin.go index 99c55d604..ebe1f0952 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/plugin.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/plugin/plugin.go @@ -28,6 +28,7 @@ import ( "github.com/spf13/cobra" "k8s.io/cli-runtime/pkg/genericclioptions" + "k8s.io/klog" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" @@ -115,8 +116,8 @@ func (o *PluginListOptions) Run() error { for _, dir := range uniquePathsList(o.PluginPaths) { files, err := ioutil.ReadDir(dir) if err != nil { - if _, ok := err.(*os.PathError); ok { - fmt.Fprintf(o.ErrOut, "Unable read directory %q from your PATH: %v. Skipping...", dir, err) + if _, ok := err.(*os.PathError); ok && strings.Contains(err.Error(), "no such file") { + klog.V(3).Infof("unable to find directory %q in your PATH. Skipping...", dir) continue } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/run.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/run.go index df8db0e59..c89457b4c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/run.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/run/run.go @@ -34,7 +34,6 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/watch" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" "k8s.io/cli-runtime/pkg/resource" "k8s.io/client-go/dynamic" "k8s.io/client-go/kubernetes" @@ -139,9 +138,6 @@ type RunOptions struct { TTY bool genericclioptions.IOStreams - - DefaultRestartAlwaysGenerator string - DefaultGenerator string } func NewRunOptions(streams genericclioptions.IOStreams) *RunOptions { @@ -158,9 +154,6 @@ func NewRunOptions(streams genericclioptions.IOStreams) *RunOptions { func NewCmdRun(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command { o := NewRunOptions(streams) - if openshiftpatch.IsOC { - o.DefaultRestartAlwaysGenerator = "deploymentconfig/v1" - } cmd := &cobra.Command{ Use: "run NAME --image=image [--env=\"key=value\"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]", @@ -320,14 +313,6 @@ func (o *RunOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e } generatorName := o.Generator - if len(generatorName) == 0 { - switch { - case restartPolicy == "Always": - generatorName = o.DefaultRestartAlwaysGenerator - default: - generatorName = o.DefaultGenerator - } - } if len(o.Schedule) != 0 && len(generatorName) == 0 { generatorName = generateversioned.CronJobV1Beta1GeneratorName } @@ -699,7 +684,6 @@ func (o *RunOptions) createGeneratedObject(f cmdutil.Factory, cmd *cobra.Command if err != nil { return nil, err } - openshiftpatch.FixOAPIGroupifiedGVK(&mapping.GroupVersionKind) if len(overrides) > 0 { codec := runtime.NewCodec(scheme.DefaultJSONEncoder(), scheme.Codecs.UniversalDecoder(scheme.Scheme.PrioritizedVersionsAllGroups()...)) diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/patch_setimage_openshift.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/patch_setimage_openshift.go deleted file mode 100644 index 485f4e35b..000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/patch_setimage_openshift.go +++ /dev/null @@ -1,105 +0,0 @@ -package set - -import ( - "fmt" - "strings" - - "github.com/spf13/cobra" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" - - imageclient "github.com/openshift/client-go/image/clientset/versioned" - imagetypedclient "github.com/openshift/client-go/image/clientset/versioned/typed/image/v1" -) - -// this relies on internal APIs that we don't access to in kubectl -var ParseDockerImageReferenceToStringFunc func(spec string) (string, error) - -func resolveImageFactory(f cmdutil.Factory, cmd *cobra.Command) ImageResolver { - source, err := cmd.Flags().GetString("source") - if err != nil { - return resolveImageFunc - } - - return func(image string) (string, error) { - if isDockerImageSource(source) { - return resolveImageFunc(image) - } - config, err := f.ToRESTConfig() - if err != nil { - return "", err - } - imageClient, err := imageclient.NewForConfig(config) - if err != nil { - return "", err - } - namespace, _, err := f.ToRawKubeConfigLoader().Namespace() - if err != nil { - return "", err - } - - return resolveImagePullSpec(imageClient.ImageV1(), source, image, namespace) - } -} - -// resolveImagePullSpec resolves the provided source which can be "docker", "istag" or -// "isimage" and returns the full Docker pull spec. -func resolveImagePullSpec(imageClient imagetypedclient.ImageV1Interface, source, name, defaultNamespace string) (string, error) { - // for Docker source, just passtrough the image name - if isDockerImageSource(source) { - return name, nil - } - // parse the namespace from the provided image - namespace, image := splitNamespaceAndImage(name) - if len(namespace) == 0 { - namespace = defaultNamespace - } - - dockerImageReference := "" - - if isImageStreamTag(source) { - if resolved, err := imageClient.ImageStreamTags(namespace).Get(image, metav1.GetOptions{}); err != nil { - return "", fmt.Errorf("failed to get image stream tag %q: %v", image, err) - } else { - dockerImageReference = resolved.Image.DockerImageReference - } - } - - if isImageStreamImage(source) { - if resolved, err := imageClient.ImageStreamImages(namespace).Get(image, metav1.GetOptions{}); err != nil { - return "", fmt.Errorf("failed to get image stream image %q: %v", image, err) - } else { - dockerImageReference = resolved.Image.DockerImageReference - } - } - - if len(dockerImageReference) == 0 { - return "", fmt.Errorf("unable to resolve %s %q", source, name) - } - - return ParseDockerImageReferenceToStringFunc(dockerImageReference) -} - -func isDockerImageSource(source string) bool { - return source == "docker" -} - -func isImageStreamTag(source string) bool { - return source == "istag" || source == "imagestreamtag" -} - -func isImageStreamImage(source string) bool { - return source == "isimage" || source == "imagestreamimage" -} - -func splitNamespaceAndImage(name string) (string, string) { - namespace := "" - imageName := "" - if parts := strings.Split(name, "/"); len(parts) == 2 { - namespace, imageName = parts[0], parts[1] - } else if len(parts) == 1 { - imageName = parts[0] - } - return namespace, imageName -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_image.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_image.go index 40d8e2de8..c433ae71d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_image.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/set/set_image.go @@ -22,7 +22,7 @@ import ( "github.com/spf13/cobra" "k8s.io/klog" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" @@ -60,8 +60,6 @@ type SetImageOptions struct { ContainerImages map[string]string genericclioptions.IOStreams - - Source string } var ( @@ -125,8 +123,6 @@ func NewCmdImage(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra. cmd.Flags().BoolVar(&o.All, "all", o.All, "Select all resources, including uninitialized ones, in the namespace of the specified resource types") cmd.Flags().StringVarP(&o.Selector, "selector", "l", o.Selector, "Selector (label query) to filter on, not including uninitialized ones, supports '=', '==', and '!='.(e.g. -l key1=value1,key2=value2)") cmd.Flags().BoolVar(&o.Local, "local", o.Local, "If true, set image will NOT contact api-server but run locally.") - o.Source = "docker" - cmd.Flags().StringVar(&o.Source, "source", o.Source, "The image source type; valid types are 'imagestreamtag', 'istag', 'imagestreamimage', 'isimage', and 'docker'") cmdutil.AddDryRunFlag(cmd) cmdutil.AddIncludeUninitializedFlag(cmd) return cmd @@ -145,7 +141,7 @@ func (o *SetImageOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, args [ o.UpdatePodSpecForObject = polymorphichelpers.UpdatePodSpecForObjectFn o.DryRun = cmdutil.GetDryRunFlag(cmd) o.Output = cmdutil.GetFlagString(cmd, "output") - o.ResolveImage = resolveImageFactory(f, cmd) + o.ResolveImage = resolveImageFunc if o.DryRun { o.PrintFlags.Complete("%s (dry run)") diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editoptions.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editoptions.go index b0eec7a64..f9b869eb6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editoptions.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/util/editor/editoptions.go @@ -28,7 +28,7 @@ import ( goruntime "runtime" "strings" - jsonpatch "github.com/evanphx/json-patch" + "github.com/evanphx/json-patch" "github.com/spf13/cobra" "k8s.io/klog" @@ -44,7 +44,6 @@ import ( "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" "k8s.io/cli-runtime/pkg/printers" "k8s.io/cli-runtime/pkg/resource" "k8s.io/kubernetes/pkg/kubectl" @@ -824,10 +823,6 @@ func hashOnLineBreak(s string) string { // editorEnvs returns an ordered list of env vars to check for editor preferences. func editorEnvs() []string { - if openshiftpatch.IsOC { - return []string{"OC_EDITOR", "KUBE_EDITOR", "EDITOR"} - } - return []string{ "KUBE_EDITOR", "EDITOR", diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/version/patch_version.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/version/patch_version.go deleted file mode 100644 index 5128d169d..000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/version/patch_version.go +++ /dev/null @@ -1,16 +0,0 @@ -package version - -import ( - apimachineryversion "k8s.io/apimachinery/pkg/version" - "k8s.io/kubernetes/pkg/version" -) - -var OverrideGetVersionFn func() apimachineryversion.Info = nil - -func getKubectlVersion() apimachineryversion.Info { - if OverrideGetVersionFn != nil { - return OverrideGetVersionFn() - } - - return version.Get() -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/version/version.go b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/version/version.go index aaf450ef3..1d249e213 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/version/version.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/cmd/version/version.go @@ -31,6 +31,7 @@ import ( cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" "k8s.io/kubernetes/pkg/kubectl/util/i18n" "k8s.io/kubernetes/pkg/kubectl/util/templates" + "k8s.io/kubernetes/pkg/version" ) type Version struct { @@ -106,7 +107,7 @@ func (o *VersionOptions) Run() error { versionInfo Version ) - clientVersion := getKubectlVersion() + clientVersion := version.Get() versionInfo.ClientVersion = &clientVersion if !o.ClientOnly && o.discoveryClient != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe.go b/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe.go index 031f64231..557952104 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe.go @@ -29,7 +29,6 @@ import ( "strings" "text/tabwriter" "time" - "unicode" "github.com/fatih/camelcase" @@ -303,14 +302,6 @@ func printUnstructuredContent(w PrefixWriter, level int, content map[string]inte } func smartLabelFor(field string) string { - // skip creating smart label if field name contains - // special characters other than '-' - if strings.IndexFunc(field, func(r rune) bool { - return !unicode.IsLetter(r) && r != '-' - }) != -1 { - return field - } - commonAcronyms := []string{"API", "URL", "UID", "OSB", "GUID"} parts := camelcase.Split(field) @@ -2096,7 +2087,7 @@ func describeCronJob(cronJob *batchv1beta1.CronJob, events *corev1.EventList) (s w.Write(LEVEL_0, "Concurrency Policy:\t%s\n", cronJob.Spec.ConcurrencyPolicy) w.Write(LEVEL_0, "Suspend:\t%s\n", printBoolPtr(cronJob.Spec.Suspend)) if cronJob.Spec.SuccessfulJobsHistoryLimit != nil { - w.Write(LEVEL_0, "Successful Job History Limit:\t%d\n", *cronJob.Spec.SuccessfulJobsHistoryLimit) + w.Write(LEVEL_0, "Successful Job History Limit:\t%d\n", cronJob.Spec.SuccessfulJobsHistoryLimit) } else { w.Write(LEVEL_0, "Successful Job History Limit:\t\n") } diff --git a/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe_test.go b/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe_test.go index f4c6504d4..f58c10373 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubectl/describe/versioned/describe_test.go @@ -2499,11 +2499,7 @@ func TestDescribeUnstructuredContent(t *testing.T) { }{ { expected: `API Version: v1 -Dummy - Dummy: present -dummy-dummy@dummy: present -dummy/dummy: present -dummy2: present -Dummy Dummy: present +Dummy 2: present Items: Item Bool: true Item Int: 42 @@ -2541,14 +2537,10 @@ URL: http://localhost w := NewPrefixWriter(out) obj := &unstructured.Unstructured{ Object: map[string]interface{}{ - "apiVersion": "v1", - "kind": "Test", - "dummyDummy": "present", - "dummy/dummy": "present", - "dummy-dummy@dummy": "present", - "dummy-dummy": "present", - "dummy1": "present", - "dummy2": "present", + "apiVersion": "v1", + "kind": "Test", + "dummy1": "present", + "dummy2": "present", "metadata": map[string]interface{}{ "name": "MyName", "namespace": "MyNamespace", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/v1beta1/defaults.go b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/v1beta1/defaults.go index 451169f28..8c1568e91 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/v1beta1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/config/v1beta1/defaults.go @@ -215,7 +215,7 @@ func SetDefaults_KubeletConfiguration(obj *kubeletconfigv1beta1.KubeletConfigura obj.ContainerLogMaxFiles = utilpointer.Int32Ptr(5) } if obj.ConfigMapAndSecretChangeDetectionStrategy == "" { - obj.ConfigMapAndSecretChangeDetectionStrategy = kubeletconfigv1beta1.TTLCacheChangeDetectionStrategy + obj.ConfigMapAndSecretChangeDetectionStrategy = kubeletconfigv1beta1.WatchChangeDetectionStrategy } if obj.EnforceNodeAllocatable == nil { obj.EnforceNodeAllocatable = DefaultNodeAllocatableEnforcement diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go index d364d8977..27da4ab59 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet.go @@ -33,7 +33,7 @@ import ( cadvisorapi "github.com/google/cadvisor/info/v1" cadvisorapiv2 "github.com/google/cadvisor/info/v2" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" @@ -656,7 +656,7 @@ func NewMainKubelet(kubeCfg *kubeletconfiginternal.KubeletConfiguration, } klet.runtimeService = runtimeService - if utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClass) && kubeDeps.KubeClient != nil { + if utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClass) { klet.runtimeClassManager = runtimeclass.NewManager(kubeDeps.KubeClient) } @@ -1381,14 +1381,7 @@ func (kl *Kubelet) initializeRuntimeDependentModules() { // Run starts the kubelet reacting to config updates func (kl *Kubelet) Run(updates <-chan kubetypes.PodUpdate) { if kl.logServer == nil { - file := http.FileServer(http.Dir("/var/log/")) - kl.logServer = http.StripPrefix("/logs/", http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - if req.URL.Path == "journal" { - journal.ServeHTTP(w, req) - return - } - file.ServeHTTP(w, req) - })) + kl.logServer = http.StripPrefix("/logs/", http.FileServer(http.Dir("/var/log/"))) } if kl.kubeClient == nil { klog.Warning("No api server defined - no node status update will be sent.") @@ -1628,13 +1621,11 @@ func (kl *Kubelet) syncPod(o syncPodOptions) error { if mirrorPod.DeletionTimestamp != nil || !kl.podManager.IsMirrorPodOf(mirrorPod, pod) { // The mirror pod is semantically different from the static pod. Remove // it. The mirror pod will get recreated later. - klog.Infof("Trying to delete pod %s %v", podFullName, mirrorPod.ObjectMeta.UID) - var err error - deleted, err = kl.podManager.DeleteMirrorPod(podFullName, &mirrorPod.ObjectMeta.UID) - if deleted { - klog.Warningf("Deleted mirror pod %q because it is outdated", format.Pod(mirrorPod)) - } else if err != nil { + klog.Warningf("Deleting mirror pod %q because it is outdated", format.Pod(mirrorPod)) + if err := kl.podManager.DeleteMirrorPod(podFullName); err != nil { klog.Errorf("Failed deleting mirror pod %q: %v", format.Pod(mirrorPod), err) + } else { + deleted = true } } } @@ -1988,10 +1979,9 @@ func (kl *Kubelet) syncLoopIteration(configCh <-chan kubetypes.PodUpdate, handle } // dispatchWork starts the asynchronous sync of the pod in a pod worker. -// If the pod is terminated, dispatchWork will perform no action. +// If the pod is terminated, dispatchWork func (kl *Kubelet) dispatchWork(pod *v1.Pod, syncType kubetypes.SyncPodType, mirrorPod *v1.Pod, start time.Time) { if kl.podIsTerminated(pod) { - klog.V(4).Infof("Pod %q is terminated, ignoring remaining sync work: %s", format.Pod(pod), syncType) if pod.DeletionTimestamp != nil { // If the pod is in a terminated state, there is no pod worker to // handle the work item. Check if the DeletionTimestamp has been diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status_test.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status_test.go index c478a3189..02a9723ac 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_node_status_test.go @@ -2131,156 +2131,3 @@ func TestNodeStatusHasChanged(t *testing.T) { }) } } - -func TestUpdateNodeAddresses(t *testing.T) { - testKubelet := newTestKubelet(t, false /* controllerAttachDetachEnabled */) - defer testKubelet.Cleanup() - kubelet := testKubelet.kubelet - kubeClient := testKubelet.fakeKubeClient - - existingNode := v1.Node{ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname}} - kubeClient.ReactionChain = fake.NewSimpleClientset(&v1.NodeList{Items: []v1.Node{existingNode}}).ReactionChain - - tests := []struct { - Name string - Before []v1.NodeAddress - After []v1.NodeAddress - }{ - { - Name: "nil to populated", - Before: nil, - After: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - }, - { - Name: "empty to populated", - Before: []v1.NodeAddress{}, - After: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - }, - { - Name: "populated to nil", - Before: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - After: nil, - }, - { - Name: "populated to empty", - Before: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - After: []v1.NodeAddress{}, - }, - { - Name: "multiple addresses of same type, no change", - Before: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeInternalIP, Address: "127.0.0.2"}, - {Type: v1.NodeInternalIP, Address: "127.0.0.3"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - After: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeInternalIP, Address: "127.0.0.2"}, - {Type: v1.NodeInternalIP, Address: "127.0.0.3"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - }, - { - Name: "1 InternalIP to 2 InternalIP", - Before: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - After: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeInternalIP, Address: "127.0.0.2"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - }, - { - Name: "2 InternalIP to 1 InternalIP", - Before: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeInternalIP, Address: "127.0.0.2"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - After: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - }, - { - Name: "2 InternalIP to 2 different InternalIP", - Before: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeInternalIP, Address: "127.0.0.2"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - After: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.3"}, - {Type: v1.NodeInternalIP, Address: "127.0.0.4"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - }, - { - Name: "2 InternalIP to reversed order", - Before: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeInternalIP, Address: "127.0.0.2"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - After: []v1.NodeAddress{ - {Type: v1.NodeInternalIP, Address: "127.0.0.2"}, - {Type: v1.NodeInternalIP, Address: "127.0.0.1"}, - {Type: v1.NodeHostName, Address: testKubeletHostname}, - }, - }, - } - - for _, test := range tests { - t.Run(test.Name, func(t *testing.T) { - oldNode := &v1.Node{ - ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname}, - Spec: v1.NodeSpec{}, - Status: v1.NodeStatus{ - Addresses: test.Before, - }, - } - expectedNode := &v1.Node{ - ObjectMeta: metav1.ObjectMeta{Name: testKubeletHostname}, - Spec: v1.NodeSpec{}, - Status: v1.NodeStatus{ - Addresses: test.After, - }, - } - - _, err := kubeClient.CoreV1().Nodes().Update(oldNode) - assert.NoError(t, err) - kubelet.setNodeStatusFuncs = []func(*v1.Node) error{ - func(node *v1.Node) error { - node.Status.Addresses = expectedNode.Status.Addresses - return nil - }, - } - assert.NoError(t, kubelet.updateNodeStatus()) - - actions := kubeClient.Actions() - lastAction := actions[len(actions)-1] - assert.IsType(t, core.PatchActionImpl{}, lastAction) - patchAction := lastAction.(core.PatchActionImpl) - - updatedNode, err := applyNodeStatusPatch(oldNode, patchAction.GetPatch()) - require.NoError(t, err) - - assert.True(t, apiequality.Semantic.DeepEqual(updatedNode, expectedNode), "%s", diff.ObjectDiff(expectedNode, updatedNode)) - }) - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go index 2582a392c..f583f7811 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_pods.go @@ -89,19 +89,7 @@ func (kl *Kubelet) listPodsFromDisk() ([]types.UID, error) { // GetActivePods returns non-terminal pods func (kl *Kubelet) GetActivePods() []*v1.Pod { - allPods, mirrorPods := kl.podManager.GetPodsAndMirrorPods() - mirrorPodSet := make(map[string]*v1.Pod) - for _, p := range mirrorPods { - mirrorPodSet[kubecontainer.GetPodFullName(p)] = p - } - for i := range allPods { - podFullName := kubecontainer.GetPodFullName(allPods[i]) - // replace static pod with mirror pod as some info (e.g. spec.Priority) - // is needed to make further decisions (e.g. eviction) - if mirrorPod, ok := mirrorPodSet[podFullName]; ok { - allPods[i] = mirrorPod - } - } + allPods := kl.podManager.GetPods() activePods := kl.filterOutTerminatedPods(allPods) return activePods } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_server_journal.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_server_journal.go deleted file mode 100644 index a8bfff475..000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_server_journal.go +++ /dev/null @@ -1,264 +0,0 @@ -package kubelet - -import ( - "compress/gzip" - "context" - "fmt" - "io" - "net/http" - "net/url" - "os/exec" - "regexp" - "strconv" - "strings" - "time" -) - -var journal = journalServer{} - -// journalServer returns text output from the system journal to view from -// the client. It runs with the privileges of the calling process (the -// kubelet) and should only be allowed to be invoked by a root user. -type journalServer struct{} - -// ServeHTTP translates HTTP query parameters into arguments to be passed -// to journalctl on the current system. It supports content-encoding of -// gzip to reduce total content size. -func (journalServer) ServeHTTP(w http.ResponseWriter, req *http.Request) { - var out io.Writer = w - args, err := newJournalArgsFromURL(req.URL.Query()) - if err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - w.Header().Set("Content-Type", "text/plain;charset=UTF-8") - if req.Header.Get("Accept-Encoding") == "gzip" { - w.Header().Set("Content-Encoding", "gzip") - - gz := gzip.NewWriter(out) - defer gz.Close() - out = gz - } - args.Copy(out) -} - -// journalArgs assists in invoking the journalctl command. -type journalArgs struct { - Since string - Until string - Tail int - Timeout int - Format string - Units []string - Pattern string - CaseSensitive bool -} - -// newJournalArgsFromURL returns bounds checked values based on query -// parameters. Parameter names are deliberately chosen to align with -// journalctl arguments. If journalctl ever creates incompatible arguments, -// this method should introduce new parameters that preserves compatibility. -func newJournalArgsFromURL(query url.Values) (*journalArgs, error) { - since, err := validJournalDateRange(query.Get("since")) - if err != nil { - return nil, fmt.Errorf("parameter 'since' is invalid: %v", err) - } - until, err := validJournalDateRange(query.Get("until")) - if err != nil { - return nil, fmt.Errorf("parameter 'until' is invalid: %v", err) - } - format, err := stringInSlice(query.Get("output"), "short-precise", "json", "short", "short-unix", "short-iso", "short-iso-precise", "cat", "") - if err != nil { - return nil, fmt.Errorf("parameter 'output' is invalid: %v", err) - } - units, err := safeStrings(query["unit"]) - if err != nil { - return nil, fmt.Errorf("parameter 'unit' is invalid: %v", err) - } - pattern, err := safeString(query.Get("grep")) - if err != nil { - return nil, fmt.Errorf("parameter 'grep' is invalid: %v", err) - } - - // All parameters loaded from the query must be thoroughly sanitized - do - // not pass query parameters directly to journalctl without limiting them - // as demonstrated above. - return &journalArgs{ - Units: units, - - Since: since, - Until: until, - Tail: boundedIntegerOrDefault(query.Get("tail"), 0, 100000, 0), - - Timeout: boundedIntegerOrDefault(query.Get("timeout"), 1, 60, 30), - - Pattern: pattern, - CaseSensitive: boolean(query.Get("case-sensitive"), true), - - Format: format, - }, nil -} - -// Args returns the journalctl arguments for the given args. -func (a *journalArgs) Args() []string { - args := []string{ - "--utc", - "--no-pager", - } - if len(a.Since) > 0 { - args = append(args, "--since="+a.Since) - } - if len(a.Until) > 0 { - args = append(args, "--until="+a.Until) - } - if a.Tail > 0 { - args = append(args, "--pager-end", fmt.Sprintf("--lines=%d", a.Tail)) - } - if len(a.Format) > 0 { - args = append(args, "--output="+a.Format) - } - for _, unit := range a.Units { - if len(unit) > 0 { - args = append(args, "--unit="+unit) - } - } - if len(a.Pattern) > 0 { - args = append(args, "--grep="+a.Pattern) - args = append(args, fmt.Sprintf("--case-sensitive=%t", a.CaseSensitive)) - } - return args -} - -// Copy streams the contents of the journalctl command executed with the current -// args to the provided writer, timing out at a.Timeout. If an error occurs a line -// is written to the output. -func (a *journalArgs) Copy(w io.Writer) { - // set the deadline to the maximum across both runs - ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Duration(a.Timeout)*time.Second)) - defer cancel() - // show the previous boot if possible, eating errors - a.copyForBoot(ctx, w, 1) - // show the current boot - a.copyForBoot(ctx, w, 0) -} - -// copyForBoot invokes the provided args for a named boot record. If previousBoot is != 0, then -// errors are silently ignored. -func (a *journalArgs) copyForBoot(ctx context.Context, w io.Writer, previousBoot int) { - if ctx.Err() != nil { - return - } - - args := a.Args() - args = append(args, "--boot", fmt.Sprintf("-%d", previousBoot)) - cmd := exec.Command("journalctl", args...) - cmd.Stdout = w - cmd.Stderr = w - - // force termination - go func() { - <-ctx.Done() - if p := cmd.Process; p != nil { - p.Kill() - } - }() - - if err := cmd.Run(); err != nil { - if _, ok := err.(*exec.ExitError); ok { - return - } - if previousBoot == 0 { - fmt.Fprintf(w, "error: journal output not available\n") - } - } - -} - -func stringInSlice(s string, allowed ...string) (string, error) { - for _, allow := range allowed { - if s == allow { - return allow, nil - } - } - return "", fmt.Errorf("only the following values are allowed: %s", strings.Join(allowed, ", ")) -} - -func boolean(s string, defaultValue bool) bool { - if len(s) == 0 { - return defaultValue - } - if s == "1" || s == "true" { - return true - } - return false -} - -func boundedIntegerOrDefault(s string, min, max, defaultValue int) int { - i, err := strconv.Atoi(s) - if err != nil { - i = defaultValue - } - if i < min { - i = min - } - if i > max { - i = max - } - return i -} - -var ( - reRelativeDate = regexp.MustCompile(`^(\+|\-)?[\d]+(s|m|h|d)$`) - // The set of known safe characters to pass to journalctl flags - only - // add to this list if the character cannot be used to create invalid - // sequences. This is intended as a broad defense against malformed - // input that could cause a journalctl escape. - reUnsafeCharacters = regexp.MustCompile(`[^a-zA-Z\-_.0-9\s@]+`) -) - -const ( - dateFormat = `"2006-01-02T15:04:05.999999Z` - maxParameterLength = 100 - maxTotalLength = 1000 -) - -func validJournalDateRange(s string) (string, error) { - if len(s) == 0 { - return "", nil - } - if reRelativeDate.MatchString(s) { - return s, nil - } - if _, err := time.Parse(dateFormat, s); err == nil { - return s, nil - } - return "", fmt.Errorf("date must be a relative time of the form '(+|-)[0-9]+(s|m|h|d)' or a date in 'YYYY-MM-DDTHH:MM:SSZ' form") -} - -func safeString(s string) (string, error) { - if len(s) > maxParameterLength { - return "", fmt.Errorf("input is too long, max length is %d", maxParameterLength) - } - if reUnsafeCharacters.MatchString(s) { - return "", fmt.Errorf("input contains unsupported characters") - } - return s, nil -} - -func safeStrings(arr []string) ([]string, error) { - var out []string - var total int - for _, s := range arr { - s, err := safeString(s) - if err != nil { - return nil, err - } - total += len(s) - if total > maxTotalLength { - return nil, fmt.Errorf("total input length across all values must be less than %d", maxTotalLength) - } - out = append(out, s) - } - return out, nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_server_journal_test.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_server_journal_test.go deleted file mode 100644 index 85a0f9f42..000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kubelet_server_journal_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package kubelet - -import ( - "net/url" - "reflect" - "strings" - "testing" - - "k8s.io/apimachinery/pkg/util/diff" -) - -func Test_journalArgs_Args(t *testing.T) { - tests := []struct { - name string - args journalArgs - want []string - }{ - {args: journalArgs{}, want: []string{"--utc", "--no-pager"}}, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if got := tt.args.Args(); !reflect.DeepEqual(got, tt.want) { - t.Errorf("journalArgs.Args() = %v, want %v", got, tt.want) - } - }) - } -} - -func repeatString(s string, times int) []string { - var arr []string - for i := 0; i < times; i++ { - arr = append(arr, s) - } - return arr -} - -func Test_newJournalArgsFromURL(t *testing.T) { - type args struct { - } - tests := []struct { - name string - query url.Values - want *journalArgs - wantErr bool - }{ - {query: url.Values{}, want: &journalArgs{Timeout: 30, CaseSensitive: true}}, - {query: url.Values{"unknown": []string{"true"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true}}, - - {query: url.Values{"since": []string{""}}, want: &journalArgs{Timeout: 30, CaseSensitive: true}}, - {query: url.Values{"since": []string{"1m"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Since: "1m"}}, - {query: url.Values{"since": []string{"12d"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Since: "12d"}}, - {query: url.Values{"since": []string{"516s"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Since: "516s"}}, - {query: url.Values{"since": []string{"-516s"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Since: "-516s"}}, - {query: url.Values{"since": []string{"1y"}}, wantErr: true}, - {query: url.Values{"since": []string{"1"}}, wantErr: true}, - {query: url.Values{"since": []string{"y"}}, wantErr: true}, - {query: url.Values{"since": []string{"-1"}}, wantErr: true}, - {query: url.Values{"since": []string{"-y"}}, wantErr: true}, - - {query: url.Values{"until": []string{""}}, want: &journalArgs{Timeout: 30, CaseSensitive: true}}, - {query: url.Values{"until": []string{"1m"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Until: "1m"}}, - {query: url.Values{"until": []string{"-y"}}, wantErr: true}, - - {query: url.Values{"output": []string{"short", "precise"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Format: "short"}}, - {query: url.Values{"output": []string{"short"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Format: "short"}}, - {query: url.Values{"output": []string{""}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Format: ""}}, - - {query: url.Values{"tail": []string{"100"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Tail: 100}}, - {query: url.Values{"tail": []string{"10000000"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Tail: 100000}}, - - {query: url.Values{"case-sensitive": []string{"false"}}, want: &journalArgs{Timeout: 30, CaseSensitive: false}}, - {query: url.Values{"case-sensitive": []string{"0"}}, want: &journalArgs{Timeout: 30, CaseSensitive: false}}, - {query: url.Values{"case-sensitive": []string{"a"}}, want: &journalArgs{Timeout: 30, CaseSensitive: false}}, - - {query: url.Values{"grep": []string{"string"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Pattern: "string"}}, - {name: "long grep", query: url.Values{"grep": []string{strings.Repeat("abc", 100)}}, wantErr: true}, - {name: "total grep", query: url.Values{"grep": repeatString(strings.Repeat("a", 100), 2)}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Pattern: strings.Repeat("a", 100)}}, - - {query: url.Values{"unit": []string{"a"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Units: []string{"a"}}}, - {query: url.Values{"unit": []string{""}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Units: []string{""}}}, - {query: url.Values{"unit": []string{"a", "b"}}, want: &journalArgs{Timeout: 30, CaseSensitive: true, Units: []string{"a", "b"}}}, - - {name: "long unit", query: url.Values{"unit": []string{strings.Repeat("abc", 100)}}, wantErr: true}, - {name: "total unit", query: url.Values{"unit": repeatString(strings.Repeat("a", 100), 11)}, wantErr: true}, - } - for _, tt := range tests { - name := tt.name - if len(name) == 0 { - name = tt.query.Encode() - } - t.Run(name, func(t *testing.T) { - got, err := newJournalArgsFromURL(tt.query) - if (err != nil) != tt.wantErr { - t.Errorf("newJournalArgsFromURL() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("different: %s", diff.ObjectReflectDiff(tt.want, got)) - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/logs/logs.go b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/logs/logs.go index f6d310e9d..e679cee84 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/logs/logs.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/kuberuntime/logs/logs.go @@ -56,9 +56,6 @@ const ( // the container log. Kubelet should not keep following the log when the // container is not running. stateCheckPeriod = 5 * time.Second - - // logForceCheckPeriod is the period to check for a new read - logForceCheckPeriod = 1 * time.Second ) var ( @@ -292,7 +289,6 @@ func ReadLogs(ctx context.Context, path, containerID string, opts *LogOptions, r var watcher *fsnotify.Watcher var parse parseFunc var stop bool - found := true writer := newLogWriter(stdout, stderr, opts) msg := &logMessage{} for { @@ -306,10 +302,6 @@ func ReadLogs(ctx context.Context, path, containerID string, opts *LogOptions, r return fmt.Errorf("failed to read log file %q: %v", path, err) } if opts.follow { - // The container is not running, we got to the end of the log. - if !found { - return nil - } // Reset seek so that if this is an incomplete line, // it will be read again. if _, err := f.Seek(-int64(len(l)), io.SeekCurrent); err != nil { @@ -324,35 +316,11 @@ func ReadLogs(ctx context.Context, path, containerID string, opts *LogOptions, r if err := watcher.Add(f.Name()); err != nil { return fmt.Errorf("failed to watch file %q: %v", f.Name(), err) } - // If we just created the watcher, try again to read as we might have missed - // the event. - continue } - var recreated bool // Wait until the next log change. - found, recreated, err = waitLogs(ctx, containerID, watcher, runtimeService) - if err != nil { + if found, err := waitLogs(ctx, containerID, watcher, runtimeService); !found { return err } - if recreated { - newF, err := os.Open(path) - if err != nil { - if os.IsNotExist(err) { - continue - } - return fmt.Errorf("failed to open log file %q: %v", path, err) - } - f.Close() - if err := watcher.Remove(f.Name()); err != nil && !os.IsNotExist(err) { - klog.Errorf("failed to remove file watch %q: %v", f.Name(), err) - } - f = newF - if err := watcher.Add(f.Name()); err != nil { - return fmt.Errorf("failed to watch file %q: %v", f.Name(), err) - } - r = bufio.NewReader(f) - } - // If the container exited consume data until the next EOF continue } // Should stop after writing the remaining content. @@ -402,45 +370,34 @@ func isContainerRunning(id string, r internalapi.RuntimeService) (bool, error) { return true, nil } -// waitLogs wait for the next log write. It returns two booleans and an error. The first boolean -// indicates whether a new log is found; the second boolean if the log file was recreated; -// the error is error happens during waiting new logs. -func waitLogs(ctx context.Context, id string, w *fsnotify.Watcher, runtimeService internalapi.RuntimeService) (bool, bool, error) { +// waitLogs wait for the next log write. It returns a boolean and an error. The boolean +// indicates whether a new log is found; the error is error happens during waiting new logs. +func waitLogs(ctx context.Context, id string, w *fsnotify.Watcher, runtimeService internalapi.RuntimeService) (bool, error) { // no need to wait if the pod is not running if running, err := isContainerRunning(id, runtimeService); !running { - return false, false, err + return false, err } errRetry := 5 for { select { case <-ctx.Done(): - return false, false, fmt.Errorf("context cancelled") + return false, fmt.Errorf("context cancelled") case e := <-w.Events: switch e.Op { case fsnotify.Write: - return true, false, nil - case fsnotify.Create: - fallthrough - case fsnotify.Rename: - fallthrough - case fsnotify.Remove: - fallthrough - case fsnotify.Chmod: - return true, true, nil + return true, nil default: klog.Errorf("Unexpected fsnotify event: %v, retrying...", e) } case err := <-w.Errors: klog.Errorf("Fsnotify watch error: %v, %d error retries remaining", err, errRetry) if errRetry == 0 { - return false, false, err + return false, err } errRetry-- - case <-time.After(logForceCheckPeriod): - return true, false, nil case <-time.After(stateCheckPeriod): if running, err := isContainerRunning(id, runtimeService); !running { - return false, false, err + return false, err } } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/setters_test.go b/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/setters_test.go index a1accc539..6a3e73cd9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/setters_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/nodestatus/setters_test.go @@ -487,18 +487,22 @@ func TestMachineInfo(t *testing.T) { NumCores: 2, MemoryCapacity: 1024, }, - capacity: v1.ResourceList{}, + capacity: v1.ResourceList{ + v1.ResourceEphemeralStorage: *resource.NewQuantity(5000, resource.BinarySI), + }, expectNode: &v1.Node{ Status: v1.NodeStatus{ Capacity: v1.ResourceList{ - v1.ResourceCPU: *resource.NewMilliQuantity(2000, resource.DecimalSI), - v1.ResourceMemory: *resource.NewQuantity(1024, resource.BinarySI), - v1.ResourcePods: *resource.NewQuantity(110, resource.DecimalSI), + v1.ResourceCPU: *resource.NewMilliQuantity(2000, resource.DecimalSI), + v1.ResourceMemory: *resource.NewQuantity(1024, resource.BinarySI), + v1.ResourcePods: *resource.NewQuantity(110, resource.DecimalSI), + v1.ResourceEphemeralStorage: *resource.NewQuantity(5000, resource.BinarySI), }, Allocatable: v1.ResourceList{ - v1.ResourceCPU: *resource.NewMilliQuantity(2000, resource.DecimalSI), - v1.ResourceMemory: *resource.NewQuantity(1024, resource.BinarySI), - v1.ResourcePods: *resource.NewQuantity(110, resource.DecimalSI), + v1.ResourceCPU: *resource.NewMilliQuantity(2000, resource.DecimalSI), + v1.ResourceMemory: *resource.NewQuantity(1024, resource.BinarySI), + v1.ResourcePods: *resource.NewQuantity(110, resource.DecimalSI), + v1.ResourceEphemeralStorage: *resource.NewQuantity(5000, resource.BinarySI), }, }, }, diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/pleg/generic_test.go b/vendor/k8s.io/kubernetes/pkg/kubelet/pleg/generic_test.go index 9e648e9c1..860ff2934 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/pleg/generic_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/pleg/generic_test.go @@ -211,17 +211,15 @@ func TestEventChannelFull(t *testing.T) { }}, } pleg.relist() - allEvents := []*PodLifecycleEvent{ + // event channel is full, discard events + expected = []*PodLifecycleEvent{ {ID: "1234", Type: ContainerRemoved, Data: "c1"}, {ID: "1234", Type: ContainerDied, Data: "c2"}, {ID: "1234", Type: ContainerStarted, Data: "c3"}, {ID: "4567", Type: ContainerRemoved, Data: "c1"}, - {ID: "4567", Type: ContainerStarted, Data: "c4"}, } - // event channel is full, discard events actual = getEventsFromChannel(ch) - assert.True(t, len(actual) == 4, "channel length should be 4") - assert.Subsetf(t, allEvents, actual, "actual events should in all events") + verifyEvents(t, expected, actual) } func TestDetectingContainerDeaths(t *testing.T) { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/mirror_client.go b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/mirror_client.go index 231b28c2b..b4b6abe61 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/mirror_client.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/mirror_client.go @@ -20,7 +20,6 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" clientset "k8s.io/client-go/kubernetes" "k8s.io/klog" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" @@ -36,7 +35,7 @@ type MirrorClient interface { CreateMirrorPod(pod *v1.Pod) error // DeleteMirrorPod deletes the mirror pod with the given full name from // the API server or returns an error. - DeleteMirrorPod(podFullName string, uid *types.UID) (bool, error) + DeleteMirrorPod(podFullName string) error } // basicMirrorClient is a functional MirrorClient. Mirror pods are stored in @@ -74,35 +73,21 @@ func (mc *basicMirrorClient) CreateMirrorPod(pod *v1.Pod) error { return err } -// DeleteMirrorPod deletes a mirror pod. -// It takes the full name of the pod and optionally a UID. If the UID -// is non-nil, the pod is deleted only if its UID matches the supplied UID. -// It returns whether the pod was actually deleted, and any error returned -// while parsing the name of the pod. -// Non-existence of the pod or UID mismatch is not treated as an error; the -// routine simply returns false in that case. -func (mc *basicMirrorClient) DeleteMirrorPod(podFullName string, uid *types.UID) (bool, error) { +func (mc *basicMirrorClient) DeleteMirrorPod(podFullName string) error { if mc.apiserverClient == nil { - return false, nil + return nil } name, namespace, err := kubecontainer.ParsePodFullName(podFullName) if err != nil { klog.Errorf("Failed to parse a pod full name %q", podFullName) - return false, err + return err } - klog.V(2).Infof("Deleting a mirror pod %q (uid %#v)", podFullName, uid) - var GracePeriodSeconds int64 - GracePeriodSeconds = 0 - if err := mc.apiserverClient.CoreV1().Pods(namespace).Delete(name, &metav1.DeleteOptions{GracePeriodSeconds: &GracePeriodSeconds, Preconditions: &metav1.Preconditions{UID: uid}}); err != nil { - // Unfortunately, there's no generic error for failing a precondition - if !(errors.IsNotFound(err) || errors.IsConflict(err)) { - // We should return the error here, but historically this routine does - // not return an error unless it can't parse the pod name - klog.Errorf("Failed deleting a mirror pod %q: %v", podFullName, err) - } - return false, nil + klog.V(2).Infof("Deleting a mirror pod %q", podFullName) + // TODO(random-liu): Delete the mirror pod with uid precondition in mirror pod manager + if err := mc.apiserverClient.CoreV1().Pods(namespace).Delete(name, metav1.NewDeleteOptions(0)); err != nil && !errors.IsNotFound(err) { + klog.Errorf("Failed deleting a mirror pod %q: %v", podFullName, err) } - return true, nil + return nil } func IsStaticPod(pod *v1.Pod) bool { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go index 9a67f0ff2..17f54184b 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/pod_manager.go @@ -338,7 +338,7 @@ func (pm *basicManager) getOrphanedMirrorPodNames() []string { func (pm *basicManager) DeleteOrphanedMirrorPods() { podFullNames := pm.getOrphanedMirrorPodNames() for _, podFullName := range podFullNames { - pm.MirrorClient.DeleteMirrorPod(podFullName, nil) + pm.MirrorClient.DeleteMirrorPod(podFullName) } } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/fake_mirror_client.go b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/fake_mirror_client.go index e9515e6aa..a36a80a2c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/fake_mirror_client.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/fake_mirror_client.go @@ -20,7 +20,6 @@ import ( "sync" "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" cp "k8s.io/kubernetes/pkg/kubelet/checkpoint" "k8s.io/kubernetes/pkg/kubelet/checkpointmanager" @@ -53,13 +52,12 @@ func (fmc *FakeMirrorClient) CreateMirrorPod(pod *v1.Pod) error { return nil } -// TODO (Robert Krawitz): Implement UID checking -func (fmc *FakeMirrorClient) DeleteMirrorPod(podFullName string, _ *types.UID) (bool, error) { +func (fmc *FakeMirrorClient) DeleteMirrorPod(podFullName string) error { fmc.mirrorPodLock.Lock() defer fmc.mirrorPodLock.Unlock() fmc.mirrorPods.Delete(podFullName) fmc.deleteCounts[podFullName]++ - return true, nil + return nil } func (fmc *FakeMirrorClient) HasPod(podFullName string) bool { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/mock_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/mock_manager.go index 320516594..f15845b79 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/mock_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/pod/testing/mock_manager.go @@ -48,17 +48,17 @@ func (_m *MockManager) CreateMirrorPod(_a0 *v1.Pod) error { } // DeleteMirrorPod provides a mock function with given fields: podFullName -func (_m *MockManager) DeleteMirrorPod(podFullName string, _ *types.UID) (bool, error) { +func (_m *MockManager) DeleteMirrorPod(podFullName string) error { ret := _m.Called(podFullName) var r0 error if rf, ok := ret.Get(0).(func(string) error); ok { - return true, rf(podFullName) + r0 = rf(podFullName) } else { r0 = ret.Error(0) } - return false, r0 + return r0 } // DeleteOrphanedMirrorPods provides a mock function with given fields: diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go index 8618cbf55..a4f751165 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/server.go @@ -143,8 +143,6 @@ func ListenAndServeKubeletServer( s := &http.Server{ Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)), Handler: &handler, - ReadTimeout: 60 * time.Minute, - WriteTimeout: 60 * time.Minute, MaxHeaderBytes: 1 << 20, } if tlsOptions != nil { @@ -166,8 +164,6 @@ func ListenAndServeKubeletReadOnlyServer(host HostInterface, resourceAnalyzer st server := &http.Server{ Addr: net.JoinHostPort(address.String(), strconv.FormatUint(uint64(port), 10)), Handler: &s, - ReadTimeout: 60 * time.Minute, - WriteTimeout: 60 * time.Minute, MaxHeaderBytes: 1 << 20, } klog.Fatal(server.ListenAndServe()) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/BUILD index 149e3b839..7d24ec8cd 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/BUILD @@ -89,7 +89,6 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", "//vendor/github.com/golang/mock/gomock:go_default_library", "//vendor/github.com/google/cadvisor/fs:go_default_library", "//vendor/github.com/google/cadvisor/info/v1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go index c25cb853a..f55c02b8d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider.go @@ -137,7 +137,6 @@ func (p *criStatsProvider) listPodStats(updateCPUNanoCoreUsage bool) ([]statsapi if err != nil { return nil, fmt.Errorf("failed to list all pod sandboxes: %v", err) } - podSandboxes = removeTerminatedPods(podSandboxes) for _, s := range podSandboxes { podSandboxMap[s.Id] = s } @@ -154,7 +153,7 @@ func (p *criStatsProvider) listPodStats(updateCPUNanoCoreUsage bool) ([]statsapi return nil, fmt.Errorf("failed to list all container stats: %v", err) } - containers = removeTerminatedContainers(containers) + containers = removeTerminatedContainer(containers) // Creates container map. containerMap := make(map[string]*runtimeapi.Container) for _, c := range containers { @@ -234,7 +233,6 @@ func (p *criStatsProvider) ListPodCPUAndMemoryStats() ([]statsapi.PodStats, erro if err != nil { return nil, fmt.Errorf("failed to list all pod sandboxes: %v", err) } - podSandboxes = removeTerminatedPods(podSandboxes) for _, s := range podSandboxes { podSandboxMap[s.Id] = s } @@ -247,7 +245,7 @@ func (p *criStatsProvider) ListPodCPUAndMemoryStats() ([]statsapi.PodStats, erro return nil, fmt.Errorf("failed to list all container stats: %v", err) } - containers = removeTerminatedContainers(containers) + containers = removeTerminatedContainer(containers) // Creates container map. containerMap := make(map[string]*runtimeapi.Container) for _, c := range containers { @@ -692,51 +690,9 @@ func (p *criStatsProvider) cleanupOutdatedCaches() { } } -// removeTerminatedPods returns pods with terminated ones removed. -// It only removes a terminated pod when there is a running instance -// of the pod with the same name and namespace. -// This is needed because: -// 1) PodSandbox may be recreated; -// 2) Pod may be recreated with the same name and namespace. -func removeTerminatedPods(pods []*runtimeapi.PodSandbox) []*runtimeapi.PodSandbox { - podMap := make(map[statsapi.PodReference][]*runtimeapi.PodSandbox) - // Sort order by create time - sort.Slice(pods, func(i, j int) bool { - return pods[i].CreatedAt < pods[j].CreatedAt - }) - for _, pod := range pods { - refID := statsapi.PodReference{ - Name: pod.GetMetadata().GetName(), - Namespace: pod.GetMetadata().GetNamespace(), - // UID is intentionally left empty. - } - podMap[refID] = append(podMap[refID], pod) - } - - result := make([]*runtimeapi.PodSandbox, 0) - for _, refs := range podMap { - if len(refs) == 1 { - result = append(result, refs[0]) - continue - } - found := false - for i := 0; i < len(refs); i++ { - if refs[i].State == runtimeapi.PodSandboxState_SANDBOX_READY { - found = true - result = append(result, refs[i]) - } - } - if !found { - result = append(result, refs[len(refs)-1]) - } - } - return result -} - -// removeTerminatedContainers returns containers with terminated ones. -// It only removes a terminated container when there is a running instance -// of the container. -func removeTerminatedContainers(containers []*runtimeapi.Container) []*runtimeapi.Container { +// removeTerminatedContainer returns the specified container but with +// the stats of the terminated containers removed. +func removeTerminatedContainer(containers []*runtimeapi.Container) []*runtimeapi.Container { containerMap := make(map[containerID][]*runtimeapi.Container) // Sort order by create time sort.Slice(containers, func(i, j int) bool { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider_test.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider_test.go index fa4e65100..10f5c3278 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/cri_stats_provider_test.go @@ -31,7 +31,6 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - "k8s.io/apimachinery/pkg/util/uuid" runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" critest "k8s.io/kubernetes/pkg/kubelet/apis/cri/testing" statsapi "k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1" @@ -78,8 +77,6 @@ const ( cName2 = "container2-name" cName3 = "container3-name" cName5 = "container5-name" - cName6 = "container6-name" - cName7 = "container7-name" ) func TestCRIListPodStats(t *testing.T) { @@ -89,7 +86,7 @@ func TestCRIListPodStats(t *testing.T) { imageFsInfo = getTestFsInfo(2000) rootFsInfo = getTestFsInfo(1000) - sandbox0 = makeFakePodSandbox("sandbox0-name", "sandbox0-uid", "sandbox0-ns", false) + sandbox0 = makeFakePodSandbox("sandbox0-name", "sandbox0-uid", "sandbox0-ns") sandbox0Cgroup = "/" + cm.GetPodCgroupNameSuffix(types.UID(sandbox0.PodSandboxStatus.Metadata.Uid)) container0 = makeFakeContainer(sandbox0, cName0, 0, false) containerStats0 = makeFakeContainerStats(container0, imageFsMountpoint) @@ -98,13 +95,13 @@ func TestCRIListPodStats(t *testing.T) { containerStats1 = makeFakeContainerStats(container1, unknownMountpoint) containerLogStats1 = makeFakeLogStats(2000) - sandbox1 = makeFakePodSandbox("sandbox1-name", "sandbox1-uid", "sandbox1-ns", false) + sandbox1 = makeFakePodSandbox("sandbox1-name", "sandbox1-uid", "sandbox1-ns") sandbox1Cgroup = "/" + cm.GetPodCgroupNameSuffix(types.UID(sandbox1.PodSandboxStatus.Metadata.Uid)) container2 = makeFakeContainer(sandbox1, cName2, 0, false) containerStats2 = makeFakeContainerStats(container2, imageFsMountpoint) containerLogStats2 = makeFakeLogStats(3000) - sandbox2 = makeFakePodSandbox("sandbox2-name", "sandbox2-uid", "sandbox2-ns", false) + sandbox2 = makeFakePodSandbox("sandbox2-name", "sandbox2-uid", "sandbox2-ns") sandbox2Cgroup = "/" + cm.GetPodCgroupNameSuffix(types.UID(sandbox2.PodSandboxStatus.Metadata.Uid)) container3 = makeFakeContainer(sandbox2, cName3, 0, true) containerStats3 = makeFakeContainerStats(container3, imageFsMountpoint) @@ -112,21 +109,11 @@ func TestCRIListPodStats(t *testing.T) { containerStats4 = makeFakeContainerStats(container4, imageFsMountpoint) containerLogStats4 = makeFakeLogStats(4000) - sandbox3 = makeFakePodSandbox("sandbox3-name", "sandbox3-uid", "sandbox3-ns", false) + sandbox3 = makeFakePodSandbox("sandbox3-name", "sandbox3-uid", "sandbox3-ns") container5 = makeFakeContainer(sandbox3, cName5, 0, true) containerStats5 = makeFakeContainerStats(container5, imageFsMountpoint) containerLogStats5 = makeFakeLogStats(5000) - // Terminated pod sandbox - sandbox4 = makeFakePodSandbox("sandbox1-name", "sandbox1-uid", "sandbox1-ns", true) - container6 = makeFakeContainer(sandbox4, cName6, 0, true) - containerStats6 = makeFakeContainerStats(container6, imageFsMountpoint) - - // Terminated pod - sandbox5 = makeFakePodSandbox("sandbox1-name", "sandbox5-uid", "sandbox1-ns", true) - container7 = makeFakeContainer(sandbox5, cName7, 0, true) - containerStats7 = makeFakeContainerStats(container7, imageFsMountpoint) - podLogName0 = "pod-log-0" podLogName1 = "pod-log-1" podLogStats0 = makeFakeLogStats(5000) @@ -170,13 +157,13 @@ func TestCRIListPodStats(t *testing.T) { On("GetDirFsInfo", imageFsMountpoint).Return(imageFsInfo, nil). On("GetDirFsInfo", unknownMountpoint).Return(cadvisorapiv2.FsInfo{}, cadvisorfs.ErrNoSuchDevice) fakeRuntimeService.SetFakeSandboxes([]*critest.FakePodSandbox{ - sandbox0, sandbox1, sandbox2, sandbox3, sandbox4, sandbox5, + sandbox0, sandbox1, sandbox2, sandbox3, }) fakeRuntimeService.SetFakeContainers([]*critest.FakeContainer{ - container0, container1, container2, container3, container4, container5, container6, container7, + container0, container1, container2, container3, container4, container5, }) fakeRuntimeService.SetFakeContainerStats([]*runtimeapi.ContainerStats{ - containerStats0, containerStats1, containerStats2, containerStats3, containerStats4, containerStats5, containerStats6, containerStats7, + containerStats0, containerStats1, containerStats2, containerStats3, containerStats4, containerStats5, }) ephemeralVolumes := makeFakeVolumeStats([]string{"ephVolume1, ephVolumes2"}) @@ -317,38 +304,28 @@ func TestCRIListPodCPUAndMemoryStats(t *testing.T) { imageFsMountpoint = "/test/mount/point" unknownMountpoint = "/unknown/mount/point" - sandbox0 = makeFakePodSandbox("sandbox0-name", "sandbox0-uid", "sandbox0-ns", false) + sandbox0 = makeFakePodSandbox("sandbox0-name", "sandbox0-uid", "sandbox0-ns") sandbox0Cgroup = "/" + cm.GetPodCgroupNameSuffix(types.UID(sandbox0.PodSandboxStatus.Metadata.Uid)) container0 = makeFakeContainer(sandbox0, cName0, 0, false) containerStats0 = makeFakeContainerStats(container0, imageFsMountpoint) container1 = makeFakeContainer(sandbox0, cName1, 0, false) containerStats1 = makeFakeContainerStats(container1, unknownMountpoint) - sandbox1 = makeFakePodSandbox("sandbox1-name", "sandbox1-uid", "sandbox1-ns", false) + sandbox1 = makeFakePodSandbox("sandbox1-name", "sandbox1-uid", "sandbox1-ns") sandbox1Cgroup = "/" + cm.GetPodCgroupNameSuffix(types.UID(sandbox1.PodSandboxStatus.Metadata.Uid)) container2 = makeFakeContainer(sandbox1, cName2, 0, false) containerStats2 = makeFakeContainerStats(container2, imageFsMountpoint) - sandbox2 = makeFakePodSandbox("sandbox2-name", "sandbox2-uid", "sandbox2-ns", false) + sandbox2 = makeFakePodSandbox("sandbox2-name", "sandbox2-uid", "sandbox2-ns") sandbox2Cgroup = "/" + cm.GetPodCgroupNameSuffix(types.UID(sandbox2.PodSandboxStatus.Metadata.Uid)) container3 = makeFakeContainer(sandbox2, cName3, 0, true) containerStats3 = makeFakeContainerStats(container3, imageFsMountpoint) container4 = makeFakeContainer(sandbox2, cName3, 1, false) containerStats4 = makeFakeContainerStats(container4, imageFsMountpoint) - sandbox3 = makeFakePodSandbox("sandbox3-name", "sandbox3-uid", "sandbox3-ns", false) + sandbox3 = makeFakePodSandbox("sandbox3-name", "sandbox3-uid", "sandbox3-ns") container5 = makeFakeContainer(sandbox3, cName5, 0, true) containerStats5 = makeFakeContainerStats(container5, imageFsMountpoint) - - // Terminated pod sandbox - sandbox4 = makeFakePodSandbox("sandbox1-name", "sandbox1-uid", "sandbox1-ns", true) - container6 = makeFakeContainer(sandbox4, cName6, 0, true) - containerStats6 = makeFakeContainerStats(container6, imageFsMountpoint) - - // Terminated pod - sandbox5 = makeFakePodSandbox("sandbox1-name", "sandbox5-uid", "sandbox1-ns", true) - container7 = makeFakeContainer(sandbox5, cName7, 0, true) - containerStats7 = makeFakeContainerStats(container7, imageFsMountpoint) ) var ( @@ -384,13 +361,13 @@ func TestCRIListPodCPUAndMemoryStats(t *testing.T) { mockCadvisor. On("ContainerInfoV2", "/", options).Return(infos, nil) fakeRuntimeService.SetFakeSandboxes([]*critest.FakePodSandbox{ - sandbox0, sandbox1, sandbox2, sandbox3, sandbox4, sandbox5, + sandbox0, sandbox1, sandbox2, sandbox3, }) fakeRuntimeService.SetFakeContainers([]*critest.FakeContainer{ - container0, container1, container2, container3, container4, container5, container6, container7, + container0, container1, container2, container3, container4, container5, }) fakeRuntimeService.SetFakeContainerStats([]*runtimeapi.ContainerStats{ - containerStats0, containerStats1, containerStats2, containerStats3, containerStats4, containerStats5, containerStats6, containerStats7, + containerStats0, containerStats1, containerStats2, containerStats3, containerStats4, containerStats5, }) ephemeralVolumes := makeFakeVolumeStats([]string{"ephVolume1, ephVolumes2"}) @@ -546,7 +523,7 @@ func TestCRIImagesFsStats(t *testing.T) { mockCadvisor.AssertExpectations(t) } -func makeFakePodSandbox(name, uid, namespace string, terminated bool) *critest.FakePodSandbox { +func makeFakePodSandbox(name, uid, namespace string) *critest.FakePodSandbox { p := &critest.FakePodSandbox{ PodSandboxStatus: runtimeapi.PodSandboxStatus{ Metadata: &runtimeapi.PodSandboxMetadata{ @@ -558,10 +535,7 @@ func makeFakePodSandbox(name, uid, namespace string, terminated bool) *critest.F CreatedAt: time.Now().UnixNano(), }, } - if terminated { - p.PodSandboxStatus.State = runtimeapi.PodSandboxState_SANDBOX_NOTREADY - } - p.PodSandboxStatus.Id = string(uuid.NewUUID()) + p.PodSandboxStatus.Id = critest.BuildSandboxName(p.PodSandboxStatus.Metadata) return p } @@ -587,7 +561,7 @@ func makeFakeContainer(sandbox *critest.FakePodSandbox, name string, attempt uin } else { c.ContainerStatus.State = runtimeapi.ContainerState_CONTAINER_RUNNING } - c.ContainerStatus.Id = string(uuid.NewUUID()) + c.ContainerStatus.Id = critest.BuildContainerName(c.ContainerStatus.Metadata, sandboxID) return c } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/log_metrics_provider_test.go b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/log_metrics_provider_test.go index 6103c0791..499d6130d 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/stats/log_metrics_provider_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/stats/log_metrics_provider_test.go @@ -17,8 +17,6 @@ limitations under the License. package stats import ( - "fmt" - "k8s.io/kubernetes/pkg/volume" ) @@ -43,8 +41,5 @@ func NewFakeMetricsDu(path string, stats *volume.Metrics) volume.MetricsProvider } func (f *fakeMetricsDu) GetMetrics() (*volume.Metrics, error) { - if f.fakeStats == nil { - return nil, fmt.Errorf("no stats provided") - } return f.fakeStats, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go index 9d80d04ba..9697c986f 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager.go @@ -24,7 +24,7 @@ import ( clientset "k8s.io/client-go/kubernetes" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" apiequality "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -268,39 +268,21 @@ func findContainerStatus(status *v1.PodStatus, containerID string) (containerSta func (m *manager) TerminatePod(pod *v1.Pod) { m.podStatusesLock.Lock() defer m.podStatusesLock.Unlock() - - // ensure that all containers have a terminated state - because we do not know whether the container - // was successful, always report an error oldStatus := &pod.Status if cachedStatus, ok := m.podStatuses[pod.UID]; ok { oldStatus = &cachedStatus.status } status := *oldStatus.DeepCopy() for i := range status.ContainerStatuses { - if status.ContainerStatuses[i].State.Terminated != nil { - continue - } status.ContainerStatuses[i].State = v1.ContainerState{ - Terminated: &v1.ContainerStateTerminated{ - Reason: "ContainerStatusUnknown", - Message: "The container could not be located when the pod was terminated", - ExitCode: 137, - }, + Terminated: &v1.ContainerStateTerminated{}, } } for i := range status.InitContainerStatuses { - if status.InitContainerStatuses[i].State.Terminated != nil { - continue - } status.InitContainerStatuses[i].State = v1.ContainerState{ - Terminated: &v1.ContainerStateTerminated{ - Reason: "ContainerStatusUnknown", - Message: "The container could not be located when the pod was terminated", - ExitCode: 137, - }, + Terminated: &v1.ContainerStateTerminated{}, } } - m.updateStatusInternal(pod, status, true) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager_test.go b/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager_test.go index 8b64f1164..03f79b2a1 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/status/status_manager_test.go @@ -27,12 +27,11 @@ import ( "github.com/stretchr/testify/assert" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/diff" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/fake" core "k8s.io/client-go/testing" @@ -569,16 +568,6 @@ func TestTerminatePod(t *testing.T) { t.Logf("update the pod's status to Failed. TerminatePod should preserve this status update.") firstStatus := getRandomPodStatus() firstStatus.Phase = v1.PodFailed - firstStatus.InitContainerStatuses = []v1.ContainerStatus{ - {Name: "init-test-1"}, - {Name: "init-test-2", State: v1.ContainerState{Terminated: &v1.ContainerStateTerminated{Reason: "InitTest", ExitCode: 0}}}, - {Name: "init-test-3", State: v1.ContainerState{Terminated: &v1.ContainerStateTerminated{Reason: "InitTest", ExitCode: 3}}}, - } - firstStatus.ContainerStatuses = []v1.ContainerStatus{ - {Name: "test-1"}, - {Name: "test-2", State: v1.ContainerState{Terminated: &v1.ContainerStateTerminated{Reason: "Test", ExitCode: 2}}}, - {Name: "test-3", State: v1.ContainerState{Terminated: &v1.ContainerStateTerminated{Reason: "Test", ExitCode: 0}}}, - } syncer.SetPodStatus(testPod, firstStatus) t.Logf("set the testPod to a pod with Phase running, to simulate a stale pod") @@ -596,26 +585,6 @@ func TestTerminatePod(t *testing.T) { assert.False(t, newStatus.InitContainerStatuses[i].State.Terminated == nil, "expected init containers to be terminated") } - expectUnknownState := v1.ContainerState{Terminated: &v1.ContainerStateTerminated{Reason: "ContainerStatusUnknown", Message: "The container could not be located when the pod was terminated", ExitCode: 137}} - if !reflect.DeepEqual(newStatus.InitContainerStatuses[0].State, expectUnknownState) { - t.Errorf("terminated container state not defaulted: %s", diff.ObjectReflectDiff(newStatus.InitContainerStatuses[0].State, expectUnknownState)) - } - if !reflect.DeepEqual(newStatus.InitContainerStatuses[1].State, firstStatus.InitContainerStatuses[1].State) { - t.Errorf("existing terminated container state not preserved: %#v", newStatus.ContainerStatuses) - } - if !reflect.DeepEqual(newStatus.InitContainerStatuses[2].State, firstStatus.InitContainerStatuses[2].State) { - t.Errorf("existing terminated container state not preserved: %#v", newStatus.ContainerStatuses) - } - if !reflect.DeepEqual(newStatus.ContainerStatuses[0].State, expectUnknownState) { - t.Errorf("terminated container state not defaulted: %s", diff.ObjectReflectDiff(newStatus.ContainerStatuses[0].State, expectUnknownState)) - } - if !reflect.DeepEqual(newStatus.ContainerStatuses[1].State, firstStatus.ContainerStatuses[1].State) { - t.Errorf("existing terminated container state not preserved: %#v", newStatus.ContainerStatuses) - } - if !reflect.DeepEqual(newStatus.ContainerStatuses[2].State, firstStatus.ContainerStatuses[2].State) { - t.Errorf("existing terminated container state not preserved: %#v", newStatus.ContainerStatuses) - } - t.Logf("we expect the previous status update to be preserved.") assert.Equal(t, newStatus.Phase, firstStatus.Phase) assert.Equal(t, newStatus.Message, firstStatus.Message) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go b/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go index b8017e6a4..bdc5ee794 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update.go @@ -18,7 +18,6 @@ package types import ( "fmt" - "strings" "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -182,11 +181,7 @@ func Preemptable(preemptor, preemptee *v1.Pod) bool { func IsCritical(ns string, annotations map[string]string) bool { // Critical pods are restricted to "kube-system" namespace as of now. if ns != kubeapi.NamespaceSystem { - // : critical pods may exist in openshift- namespaces - // pending priority and preemption support. - if !strings.HasPrefix(ns, "openshift-") { - return false - } + return false } val, ok := annotations[CriticalPodAnnotationKey] if ok && val == "" { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update_test.go b/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update_test.go index 335511733..73a93d7e1 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/types/pod_update_test.go @@ -171,19 +171,6 @@ func TestIsCriticalPod(t *testing.T) { }, expected: true, }, - { - // for openshift-system namespace resources pending priority/preemption - pod: v1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Name: "pod3", - Namespace: "openshift-system", - Annotations: map[string]string{ - "scheduler.alpha.kubernetes.io/critical-pod": "", - }, - }, - }, - expected: true, - }, } for i, data := range cases { actual := IsCriticalPod(&data.pod) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/BUILD index 2f37d2b4c..5f4e61e5e 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/BUILD @@ -29,7 +29,6 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/kubelet/apis/pluginregistration/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/github.com/stretchr/testify/require:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/plugin_watcher.go b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/plugin_watcher.go index b749a593c..a9f8422ed 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/plugin_watcher.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/plugin_watcher.go @@ -102,39 +102,31 @@ func (w *Watcher) Start() error { } w.fsWatcher = fsWatcher - // Traverse plugin dir and add filesystem watchers before starting the plugin processing goroutine. - if err := w.traversePluginDir(w.path); err != nil { - w.Stop() - return fmt.Errorf("failed to traverse plugin socket path %q, err: %v", w.path, err) - } - - // Traverse deprecated plugin dir, if specified. - if len(w.deprecatedPath) != 0 { - if err := w.traversePluginDir(w.deprecatedPath); err != nil { - w.Stop() - return fmt.Errorf("failed to traverse deprecated plugin socket path %q, err: %v", w.deprecatedPath, err) - } - } - w.wg.Add(1) go func(fsWatcher *fsnotify.Watcher) { defer w.wg.Done() - for { select { case event := <-fsWatcher.Events: //TODO: Handle errors by taking corrective measures - if event.Op&fsnotify.Create == fsnotify.Create { - err := w.handleCreateEvent(event) - if err != nil { - klog.Errorf("error %v when handling create event: %s", err, event) - } - } else if event.Op&fsnotify.Remove == fsnotify.Remove { - err := w.handleDeleteEvent(event) - if err != nil { - klog.Errorf("error %v when handling delete event: %s", err, event) + + w.wg.Add(1) + func() { + defer w.wg.Done() + + if event.Op&fsnotify.Create == fsnotify.Create { + err := w.handleCreateEvent(event) + if err != nil { + klog.Errorf("error %v when handling create event: %s", err, event) + } + } else if event.Op&fsnotify.Remove == fsnotify.Remove { + err := w.handleDeleteEvent(event) + if err != nil { + klog.Errorf("error %v when handling delete event: %s", err, event) + } } - } + return + }() continue case err := <-fsWatcher.Errors: if err != nil { @@ -147,6 +139,20 @@ func (w *Watcher) Start() error { } }(fsWatcher) + // Traverse plugin dir after starting the plugin processing goroutine + if err := w.traversePluginDir(w.path); err != nil { + w.Stop() + return fmt.Errorf("failed to traverse plugin socket path %q, err: %v", w.path, err) + } + + // Traverse deprecated plugin dir, if specified. + if len(w.deprecatedPath) != 0 { + if err := w.traversePluginDir(w.deprecatedPath); err != nil { + w.Stop() + return fmt.Errorf("failed to traverse deprecated plugin socket path %q, err: %v", w.deprecatedPath, err) + } + } + return nil } @@ -205,14 +211,14 @@ func (w *Watcher) traversePluginDir(dir string) error { return fmt.Errorf("failed to watch %s, err: %v", path, err) } case mode&os.ModeSocket != 0: - event := fsnotify.Event{ - Name: path, - Op: fsnotify.Create, - } - //TODO: Handle errors by taking corrective measures - if err := w.handleCreateEvent(event); err != nil { - klog.Errorf("error %v when handling create event: %s", err, event) - } + w.wg.Add(1) + go func() { + defer w.wg.Done() + w.fsWatcher.Events <- fsnotify.Event{ + Name: path, + Op: fsnotify.Create, + } + }() default: klog.V(5).Infof("Ignoring file %s with mode %v", path, mode) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/plugin_watcher_test.go b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/plugin_watcher_test.go index 88fed3082..a7f449c14 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/plugin_watcher_test.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher/plugin_watcher_test.go @@ -27,7 +27,6 @@ import ( "github.com/stretchr/testify/require" - "k8s.io/apimachinery/pkg/util/wait" "k8s.io/klog" registerapi "k8s.io/kubernetes/pkg/kubelet/apis/pluginregistration/v1" ) @@ -174,6 +173,9 @@ func TestPluginRegistrationAtKubeletStart(t *testing.T) { plugins[i] = p } + w := newWatcherWithHandler(t, hdlr, false /* testDeprecatedDir */) + defer func() { require.NoError(t, w.Stop()) }() + var wg sync.WaitGroup for i := 0; i < len(plugins); i++ { wg.Add(1) @@ -187,9 +189,6 @@ func TestPluginRegistrationAtKubeletStart(t *testing.T) { }(plugins[i]) } - w := newWatcherWithHandler(t, hdlr, false /* testDeprecatedDir */) - defer func() { require.NoError(t, w.Stop()) }() - c := make(chan struct{}) go func() { defer close(c) @@ -199,7 +198,7 @@ func TestPluginRegistrationAtKubeletStart(t *testing.T) { select { case <-c: return - case <-time.After(wait.ForeverTestTimeout): + case <-time.After(2 * time.Second): t.Fatalf("Timeout while waiting for the plugin registration status") } } @@ -239,22 +238,11 @@ func TestPlugiRegistrationFailureWithUnsupportedVersionAtKubeletStart(t *testing hdlr := NewExampleHandler(supportedVersions, false /* permitDeprecatedDir */) hdlr.AddPluginName(pluginName) - c := make(chan struct{}) - go func() { - defer close(c) - require.True(t, waitForEvent(t, exampleEventValidate, hdlr.EventChan(p.pluginName))) - require.False(t, waitForPluginRegistrationStatus(t, p.registrationStatus)) - }() - w := newWatcherWithHandler(t, hdlr, false /* testDeprecatedDir */) defer func() { require.NoError(t, w.Stop()) }() - select { - case <-c: - return - case <-time.After(wait.ForeverTestTimeout): - t.Fatalf("Timeout while waiting for the plugin registration status") - } + require.True(t, waitForEvent(t, exampleEventValidate, hdlr.EventChan(p.pluginName))) + require.False(t, waitForPluginRegistrationStatus(t, p.registrationStatus)) } func waitForPluginRegistrationStatus(t *testing.T, statusChan chan registerapi.RegistrationStatus) bool { @@ -271,7 +259,7 @@ func waitForEvent(t *testing.T, expected examplePluginEvent, eventChan chan exam select { case event := <-eventChan: return event == expected - case <-time.After(wait.ForeverTestTimeout): + case <-time.After(2 * time.Second): t.Fatalf("Timed out while waiting for registration status %v", expected) } diff --git a/vendor/k8s.io/kubernetes/pkg/master/controller/crdregistration/crdregistration_controller.go b/vendor/k8s.io/kubernetes/pkg/master/controller/crdregistration/crdregistration_controller.go index ad2f8214b..69ad61dbb 100644 --- a/vendor/k8s.io/kubernetes/pkg/master/controller/crdregistration/crdregistration_controller.go +++ b/vendor/k8s.io/kubernetes/pkg/master/controller/crdregistration/crdregistration_controller.go @@ -33,7 +33,6 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" "k8s.io/kube-aggregator/pkg/apis/apiregistration" - "k8s.io/kube-aggregator/pkg/apiserver" "k8s.io/kubernetes/pkg/controller" ) @@ -194,14 +193,6 @@ func (c *crdRegistrationController) enqueueCRD(crd *apiextensions.CustomResource func (c *crdRegistrationController) handleVersionUpdate(groupVersion schema.GroupVersion) error { apiServiceName := groupVersion.Version + "." + groupVersion.Group - - if apiserver.APIServiceAlreadyExists(groupVersion) { - // Removing APIService from sync means the CRD registration controller won't sync this APIService - // anymore. If the APIService is managed externally, this will mean the external component can - // update this APIService without CRD controller stomping the changes on it. - c.apiServiceRegistration.RemoveAPIServiceToSync(apiServiceName) - return nil - } // check all CRDs. There shouldn't that many, but if we have problems later we can index them crds, err := c.crdLister.List(labels.Everything()) @@ -222,8 +213,8 @@ func (c *crdRegistrationController) handleVersionUpdate(groupVersion schema.Grou Spec: apiregistration.APIServiceSpec{ Group: groupVersion.Group, Version: groupVersion.Version, - GroupPriorityMinimum: getGroupPriorityMin(groupVersion.Group), // CRDs should have relatively low priority - VersionPriority: 100, // CRDs will be sorted by kube-like versions like any other APIService with the same VersionPriority + GroupPriorityMinimum: 1000, // CRDs should have relatively low priority + VersionPriority: 100, // CRDs will be sorted by kube-like versions like any other APIService with the same VersionPriority }, }) return nil diff --git a/vendor/k8s.io/kubernetes/pkg/master/controller/crdregistration/patch.go b/vendor/k8s.io/kubernetes/pkg/master/controller/crdregistration/patch.go deleted file mode 100644 index ea989b6e1..000000000 --- a/vendor/k8s.io/kubernetes/pkg/master/controller/crdregistration/patch.go +++ /dev/null @@ -1,12 +0,0 @@ -package crdregistration - -func getGroupPriorityMin(group string) int32 { - switch group { - case "config.openshift.io": - return 1100 - case "operator.openshift.io": - return 1080 - default: - return 1000 - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/printers/internalversion/printers.go b/vendor/k8s.io/kubernetes/pkg/printers/internalversion/printers.go index 1f29a32f8..b3980bcd5 100644 --- a/vendor/k8s.io/kubernetes/pkg/printers/internalversion/printers.go +++ b/vendor/k8s.io/kubernetes/pkg/printers/internalversion/printers.go @@ -74,12 +74,9 @@ const ( nodeLabelRole = "kubernetes.io/role" ) -// Allow injecting additional print handlers -var AddHandlers = AddKubeHandlers - // AddHandlers adds print handlers for default Kubernetes types dealing with internal versions. // TODO: handle errors from Handler -func AddKubeHandlers(h printers.PrintHandler) { +func AddHandlers(h printers.PrintHandler) { podColumnDefinitions := []metav1beta1.TableColumnDefinition{ {Name: "Name", Type: "string", Format: "name", Description: metav1.ObjectMeta{}.SwaggerDoc()["name"]}, {Name: "Ready", Type: "string", Description: "The aggregate readiness state of this pod for accepting traffic."}, diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/BUILD b/vendor/k8s.io/kubernetes/pkg/proxy/BUILD index b08d05759..a7969c25c 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/proxy/BUILD @@ -17,7 +17,6 @@ go_library( importpath = "k8s.io/kubernetes/pkg/proxy", deps = [ "//pkg/api/v1/service:go_default_library", - "//pkg/proxy/metrics:go_default_library", "//pkg/proxy/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go b/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go index 954abdb0f..21f10cdcb 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/endpoints.go @@ -29,7 +29,6 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/tools/record" - "k8s.io/kubernetes/pkg/proxy/metrics" utilproxy "k8s.io/kubernetes/pkg/proxy/util" utilnet "k8s.io/utils/net" ) @@ -128,7 +127,6 @@ func (ect *EndpointChangeTracker) Update(previous, current *v1.Endpoints) bool { if endpoints == nil { return false } - metrics.EndpointChangesTotal.Inc() namespacedName := types.NamespacedName{Namespace: endpoints.Namespace, Name: endpoints.Name} ect.lock.Lock() @@ -156,8 +154,6 @@ func (ect *EndpointChangeTracker) Update(previous, current *v1.Endpoints) bool { // should be exported. delete(ect.lastChangeTriggerTimes, namespacedName) } - - metrics.EndpointChangesPending.Set(float64(len(ect.items))) return len(ect.items) > 0 } @@ -299,7 +295,6 @@ func (endpointsMap EndpointsMap) apply(changes *EndpointChangeTracker, staleEndp detectStaleConnections(change.previous, change.current, staleEndpoints, staleServiceNames) } changes.items = make(map[types.NamespacedName]*endpointsChange) - metrics.EndpointChangesPending.Set(0) for _, lastChangeTriggerTime := range changes.lastChangeTriggerTimes { *lastChangeTriggerTimes = append(*lastChangeTriggerTimes, lastChangeTriggerTime...) } diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go b/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go index 5d18aa9b3..1a19eab5a 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go @@ -1387,7 +1387,6 @@ func (proxier *Proxier) syncProxyRules() { if proxier.healthzServer != nil { proxier.healthzServer.UpdateTimestamp() } - metrics.SyncProxyRulesLastTimestamp.SetToCurrentTime() // Update healthchecks. The endpoints list might include services that are // not "OnlyLocal", but the services list will not, and the healthChecker diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go index 593c86fa7..aa42fa73b 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/ipvs/proxier.go @@ -1240,7 +1240,6 @@ func (proxier *Proxier) syncProxyRules() { if proxier.healthzServer != nil { proxier.healthzServer.UpdateTimestamp() } - metrics.SyncProxyRulesLastTimestamp.SetToCurrentTime() // Update healthchecks. The endpoints list might include services that are // not "OnlyLocal", but the services list will not, and the healthChecker diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/metrics/metrics.go b/vendor/k8s.io/kubernetes/pkg/proxy/metrics/metrics.go index 54d7f0a4c..38924387f 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/metrics/metrics.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/metrics/metrics.go @@ -46,16 +46,6 @@ var ( }, ) - // SyncProxyRulesLastTimestamp is the timestamp proxy rules were last - // successfully synced. - SyncProxyRulesLastTimestamp = prometheus.NewGauge( - prometheus.GaugeOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_last_timestamp_seconds", - Help: "The last time proxy rules were successfully synced", - }, - ) - // NetworkProgrammingLatency is defined as the time it took to program the network - from the time // the service or pod has changed to the time the change was propagated and the proper kube-proxy // rules were synced. Exported for each endpoints object that were part of the rules sync. @@ -73,46 +63,6 @@ var ( Buckets: prometheus.ExponentialBuckets(0.001, 2, 20), }, ) - - // EndpointChangesPending is the number of pending endpoint changes that - // have not yet been synced to the proxy. - EndpointChangesPending = prometheus.NewGauge( - prometheus.GaugeOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_endpoint_changes_pending", - Help: "Pending proxy rules Endpoint changes", - }, - ) - - // EndpointChangesTotal is the number of endpoint changes that the proxy - // has seen. - EndpointChangesTotal = prometheus.NewCounter( - prometheus.CounterOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_endpoint_changes_total", - Help: "Cumulative proxy rules Endpoint changes", - }, - ) - - // ServiceChangesPending is the number of pending service changes that - // have not yet been synced to the proxy. - ServiceChangesPending = prometheus.NewGauge( - prometheus.GaugeOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_service_changes_pending", - Help: "Pending proxy rules Service changes", - }, - ) - - // ServiceChangesTotal is the number of service changes that the proxy has - // seen. - ServiceChangesTotal = prometheus.NewCounter( - prometheus.CounterOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_service_changes_total", - Help: "Cumulative proxy rules Service changes", - }, - ) ) var registerMetricsOnce sync.Once @@ -122,12 +72,7 @@ func RegisterMetrics() { registerMetricsOnce.Do(func() { prometheus.MustRegister(SyncProxyRulesLatency) prometheus.MustRegister(DeprecatedSyncProxyRulesLatency) - prometheus.MustRegister(SyncProxyRulesLastTimestamp) prometheus.MustRegister(NetworkProgrammingLatency) - prometheus.MustRegister(EndpointChangesPending) - prometheus.MustRegister(EndpointChangesTotal) - prometheus.MustRegister(ServiceChangesPending) - prometheus.MustRegister(ServiceChangesTotal) }) } diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/service.go b/vendor/k8s.io/kubernetes/pkg/proxy/service.go index 02e500d0e..2d5bd352f 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/service.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/service.go @@ -30,7 +30,6 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/tools/record" apiservice "k8s.io/kubernetes/pkg/api/v1/service" - "k8s.io/kubernetes/pkg/proxy/metrics" utilproxy "k8s.io/kubernetes/pkg/proxy/util" utilnet "k8s.io/utils/net" ) @@ -199,7 +198,6 @@ func (sct *ServiceChangeTracker) Update(previous, current *v1.Service) bool { if svc == nil { return false } - metrics.ServiceChangesTotal.Inc() namespacedName := types.NamespacedName{Namespace: svc.Namespace, Name: svc.Name} sct.lock.Lock() @@ -216,7 +214,6 @@ func (sct *ServiceChangeTracker) Update(previous, current *v1.Service) bool { if reflect.DeepEqual(change.previous, change.current) { delete(sct.items, namespacedName) } - metrics.ServiceChangesPending.Set(float64(len(sct.items))) return len(sct.items) > 0 } @@ -299,7 +296,6 @@ func (serviceMap *ServiceMap) apply(changes *ServiceChangeTracker, UDPStaleClust } // clear changes after applying them to ServiceMap. changes.items = make(map[types.NamespacedName]*serviceChange) - metrics.ServiceChangesPending.Set(0) return } diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/metrics.go b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/metrics.go index 729cc5e62..61cf962ee 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/metrics.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/metrics.go @@ -43,16 +43,6 @@ var ( Buckets: prometheus.ExponentialBuckets(1000, 2, 15), }, ) - - // SyncProxyRulesLastTimestamp is the timestamp proxy rules were last - // successfully synced. - SyncProxyRulesLastTimestamp = prometheus.NewGauge( - prometheus.GaugeOpts{ - Subsystem: kubeProxySubsystem, - Name: "sync_proxy_rules_last_timestamp_seconds", - Help: "The last time proxy rules were successfully synced", - }, - ) ) var registerMetricsOnce sync.Once @@ -61,7 +51,6 @@ func RegisterMetrics() { registerMetricsOnce.Do(func() { prometheus.MustRegister(SyncProxyRulesLatency) prometheus.MustRegister(DeprecatedSyncProxyRulesLatency) - prometheus.MustRegister(SyncProxyRulesLastTimestamp) }) } diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/proxier.go b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/proxier.go index a6f10812c..7f6eec06c 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/proxier.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/winkernel/proxier.go @@ -1197,7 +1197,6 @@ func (proxier *Proxier) syncProxyRules() { if proxier.healthzServer != nil { proxier.healthzServer.UpdateTimestamp() } - SyncProxyRulesLastTimestamp.SetToCurrentTime() // Update healthchecks. The endpoints list might include services that are // not "OnlyLocal", but the services list will not, and the healthChecker diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/BUILD b/vendor/k8s.io/kubernetes/pkg/quota/v1/BUILD index fe9f7b579..7b3cb195b 100644 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/BUILD @@ -18,7 +18,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/BUILD b/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/BUILD index 7538c4051..c99ade4e3 100644 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/BUILD @@ -1,6 +1,9 @@ package(default_visibility = ["//visibility:public"]) -load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", +) go_library( name = "go_default_library", @@ -35,14 +38,3 @@ filegroup( srcs = [":package-srcs"], tags = ["automanaged"], ) - -go_test( - name = "go_default_test", - srcs = ["evaluator_test.go"], - embed = [":go_default_library"], - deps = [ - "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - ], -) diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/evaluator.go b/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/evaluator.go index 6e9fbb4d0..4e3771754 100644 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/evaluator.go +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/evaluator.go @@ -18,7 +18,6 @@ package generic import ( "fmt" - "sync/atomic" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" @@ -34,83 +33,17 @@ import ( // InformerForResourceFunc knows how to provision an informer type InformerForResourceFunc func(schema.GroupVersionResource) (informers.GenericInformer, error) -// ListerFuncForResourceFunc knows how to provision a lister from an informer func. -// The lister returns errors until the informer has synced. +// ListerFuncForResourceFunc knows how to provision a lister from an informer func func ListerFuncForResourceFunc(f InformerForResourceFunc) quota.ListerForResourceFunc { return func(gvr schema.GroupVersionResource) (cache.GenericLister, error) { informer, err := f(gvr) if err != nil { return nil, err } - return &protectedLister{ - hasSynced: cachedHasSynced(informer.Informer().HasSynced), - notReadyErr: fmt.Errorf("%v not yet synced", gvr), - delegate: informer.Lister(), - }, nil + return informer.Lister(), nil } } -// cachedHasSynced returns a function that calls hasSynced() until it returns true once, then returns true -func cachedHasSynced(hasSynced func() bool) func() bool { - cache := &atomic.Value{} - cache.Store(false) - return func() bool { - if cache.Load().(bool) { - // short-circuit if already synced - return true - } - if hasSynced() { - // remember we synced - cache.Store(true) - return true - } - return false - } -} - -// protectedLister returns notReadyError if hasSynced returns false, otherwise delegates to delegate -type protectedLister struct { - hasSynced func() bool - notReadyErr error - delegate cache.GenericLister -} - -func (p *protectedLister) List(selector labels.Selector) (ret []runtime.Object, err error) { - if !p.hasSynced() { - return nil, p.notReadyErr - } - return p.delegate.List(selector) -} -func (p *protectedLister) Get(name string) (runtime.Object, error) { - if !p.hasSynced() { - return nil, p.notReadyErr - } - return p.delegate.Get(name) -} -func (p *protectedLister) ByNamespace(namespace string) cache.GenericNamespaceLister { - return &protectedNamespaceLister{p.hasSynced, p.notReadyErr, p.delegate.ByNamespace(namespace)} -} - -// protectedNamespaceLister returns notReadyError if hasSynced returns false, otherwise delegates to delegate -type protectedNamespaceLister struct { - hasSynced func() bool - notReadyErr error - delegate cache.GenericNamespaceLister -} - -func (p *protectedNamespaceLister) List(selector labels.Selector) (ret []runtime.Object, err error) { - if !p.hasSynced() { - return nil, p.notReadyErr - } - return p.delegate.List(selector) -} -func (p *protectedNamespaceLister) Get(name string) (runtime.Object, error) { - if !p.hasSynced() { - return nil, p.notReadyErr - } - return p.delegate.Get(name) -} - // ListResourceUsingListerFunc returns a listing function based on the shared informer factory for the specified resource. func ListResourceUsingListerFunc(l quota.ListerForResourceFunc, resource schema.GroupVersionResource) ListFuncByNamespace { return func(namespace string) ([]runtime.Object, error) { diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/evaluator_test.go b/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/evaluator_test.go deleted file mode 100644 index ce97b1bdf..000000000 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/generic/evaluator_test.go +++ /dev/null @@ -1,131 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package generic - -import ( - "errors" - "testing" - - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/tools/cache" -) - -func TestCachedHasSynced(t *testing.T) { - - called := 0 - result := false - cachedFunc := cachedHasSynced(func() bool { - called++ - return result - }) - - if cachedFunc() { - t.Fatal("expected false") - } - if called != 1 { - t.Fatalf("expected called=1, got %d", called) - } - - if cachedFunc() { - t.Fatal("expected false") - } - if called != 2 { - t.Fatalf("expected called=2, got %d", called) - } - - result = true - if !cachedFunc() { - t.Fatal("expected true") - } - if called != 3 { - t.Fatalf("expected called=3, got %d", called) - } - - if !cachedFunc() { - t.Fatal("expected true") - } - if called != 3 { - // no more calls once we return true - t.Fatalf("expected called=3, got %d", called) - } -} - -func TestProtectedLister(t *testing.T) { - - hasSynced := false - notReadyErr := errors.New("not ready") - fake := &fakeLister{} - l := &protectedLister{ - hasSynced: func() bool { return hasSynced }, - notReadyErr: notReadyErr, - delegate: fake, - } - if _, err := l.List(nil); err != notReadyErr { - t.Fatalf("expected %v, got %v", notReadyErr, err) - } - if _, err := l.Get(""); err != notReadyErr { - t.Fatalf("expected %v, got %v", notReadyErr, err) - } - if fake.called != 0 { - t.Fatalf("expected called=0, got %d", fake.called) - } - fake.called = 0 - - hasSynced = true - - if _, err := l.List(nil); err != errFakeLister { - t.Fatalf("expected %v, got %v", errFakeLister, err) - } - if _, err := l.Get(""); err != errFakeLister { - t.Fatalf("expected %v, got %v", errFakeLister, err) - } - if fake.called != 2 { - t.Fatalf("expected called=2, got %d", fake.called) - } - fake.called = 0 - - hasSynced = false - - if _, err := l.List(nil); err != notReadyErr { - t.Fatalf("expected %v, got %v", notReadyErr, err) - } - if _, err := l.Get(""); err != notReadyErr { - t.Fatalf("expected %v, got %v", notReadyErr, err) - } - if fake.called != 0 { - t.Fatalf("expected called=2, got %d", fake.called) - } -} - -var errFakeLister = errors.New("errFakeLister") - -type fakeLister struct { - called int -} - -func (f *fakeLister) List(selector labels.Selector) (ret []runtime.Object, err error) { - f.called++ - return nil, errFakeLister -} -func (f *fakeLister) Get(name string) (runtime.Object, error) { - f.called++ - return nil, errFakeLister -} -func (f *fakeLister) ByNamespace(namespace string) cache.GenericNamespaceLister { - panic("not implemented") -} diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/install/patch_ignoredresources.go b/vendor/k8s.io/kubernetes/pkg/quota/v1/install/patch_ignoredresources.go deleted file mode 100644 index 5e3d7e11d..000000000 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/install/patch_ignoredresources.go +++ /dev/null @@ -1,34 +0,0 @@ -package install - -import "k8s.io/apimachinery/pkg/runtime/schema" - -func init() { - newIgnoredResources := map[schema.GroupResource]struct{}{ - {Group: "extensions", Resource: "replicationcontrollers"}: {}, - {Group: "extensions", Resource: "networkpolicies"}: {}, - {Group: "", Resource: "bindings"}: {}, - {Group: "", Resource: "componentstatuses"}: {}, - {Group: "", Resource: "events"}: {}, - {Group: "authentication.k8s.io", Resource: "tokenreviews"}: {}, - {Group: "authorization.k8s.io", Resource: "subjectaccessreviews"}: {}, - {Group: "authorization.k8s.io", Resource: "selfsubjectaccessreviews"}: {}, - {Group: "authorization.k8s.io", Resource: "localsubjectaccessreviews"}: {}, - {Group: "authorization.k8s.io", Resource: "selfsubjectrulesreviews"}: {}, - {Group: "authorization.openshift.io", Resource: "selfsubjectaccessreviews"}: {}, - {Group: "authorization.openshift.io", Resource: "subjectaccessreviews"}: {}, - {Group: "authorization.openshift.io", Resource: "localsubjectaccessreviews"}: {}, - {Group: "authorization.openshift.io", Resource: "resourceaccessreviews"}: {}, - {Group: "authorization.openshift.io", Resource: "localresourceaccessreviews"}: {}, - {Group: "authorization.openshift.io", Resource: "selfsubjectrulesreviews"}: {}, - {Group: "authorization.openshift.io", Resource: "subjectrulesreviews"}: {}, - {Group: "authorization.openshift.io", Resource: "roles"}: {}, - {Group: "authorization.openshift.io", Resource: "rolebindings"}: {}, - {Group: "authorization.openshift.io", Resource: "clusterroles"}: {}, - {Group: "authorization.openshift.io", Resource: "clusterrolebindings"}: {}, - {Group: "apiregistration.k8s.io", Resource: "apiservices"}: {}, - {Group: "apiextensions.k8s.io", Resource: "customresourcedefinitions"}: {}, - } - for k, v := range newIgnoredResources { - ignoredResources[k] = v - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/resources.go b/vendor/k8s.io/kubernetes/pkg/quota/v1/resources.go index 86984fc1c..b6aa3210d 100644 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/resources.go +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/resources.go @@ -17,12 +17,10 @@ limitations under the License. package quota import ( - "sort" "strings" corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" - utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" ) @@ -188,12 +186,7 @@ func ResourceNames(resources corev1.ResourceList) []corev1.ResourceName { // Contains returns true if the specified item is in the list of items func Contains(items []corev1.ResourceName, item corev1.ResourceName) bool { - for _, i := range items { - if i == item { - return true - } - } - return false + return ToSet(items).Has(string(item)) } // ContainsPrefix returns true if the specified item has a prefix that contained in given prefix Set @@ -206,32 +199,15 @@ func ContainsPrefix(prefixSet []string, item corev1.ResourceName) bool { return false } -// Intersection returns the intersection of both list of resources, deduped and sorted +// Intersection returns the intersection of both list of resources func Intersection(a []corev1.ResourceName, b []corev1.ResourceName) []corev1.ResourceName { - result := make([]corev1.ResourceName, 0, len(a)) - for _, item := range a { - if Contains(result, item) { - continue - } - if !Contains(b, item) { - continue - } - result = append(result, item) - } - sort.Slice(result, func(i, j int) bool { return result[i] < result[j] }) - return result -} - -// Difference returns the list of resources resulting from a-b, deduped and sorted -func Difference(a []corev1.ResourceName, b []corev1.ResourceName) []corev1.ResourceName { - result := make([]corev1.ResourceName, 0, len(a)) - for _, item := range a { - if Contains(b, item) || Contains(result, item) { - continue - } - result = append(result, item) + setA := ToSet(a) + setB := ToSet(b) + setC := setA.Intersection(setB) + result := []corev1.ResourceName{} + for _, resourceName := range setC.List() { + result = append(result, corev1.ResourceName(resourceName)) } - sort.Slice(result, func(i, j int) bool { return result[i] < result[j] }) return result } @@ -267,8 +243,7 @@ func ToSet(resourceNames []corev1.ResourceName) sets.String { return result } -// CalculateUsage calculates and returns the requested ResourceList usage. -// If an error is returned, usage only contains the resources which encountered no calculation errors. +// CalculateUsage calculates and returns the requested ResourceList usage func CalculateUsage(namespaceName string, scopes []corev1.ResourceQuotaScope, hardLimits corev1.ResourceList, registry Registry, scopeSelector *corev1.ScopeSelector) (corev1.ResourceList, error) { // find the intersection between the hard resources on the quota // and the resources this controller can track to know what we can @@ -282,8 +257,6 @@ func CalculateUsage(namespaceName string, scopes []corev1.ResourceQuotaScope, ha // NOTE: the intersection just removes duplicates since the evaluator match intersects with hard matchedResources := Intersection(hardResources, potentialResources) - errors := []error{} - // sum the observed usage from each evaluator newUsage := corev1.ResourceList{} for _, evaluator := range evaluators { @@ -296,11 +269,7 @@ func CalculateUsage(namespaceName string, scopes []corev1.ResourceQuotaScope, ha usageStatsOptions := UsageStatsOptions{Namespace: namespaceName, Scopes: scopes, Resources: intersection, ScopeSelector: scopeSelector} stats, err := evaluator.UsageStats(usageStatsOptions) if err != nil { - // remember the error - errors = append(errors, err) - // exclude resources which encountered calculation errors - matchedResources = Difference(matchedResources, intersection) - continue + return nil, err } newUsage = Add(newUsage, stats.Used) } @@ -309,5 +278,5 @@ func CalculateUsage(namespaceName string, scopes []corev1.ResourceQuotaScope, ha // merge our observed usage with the quota usage status // if the new usage is different than the last usage, we will need to do an update newUsage = Mask(newUsage, matchedResources) - return newUsage, utilerrors.NewAggregate(errors) + return newUsage, nil } diff --git a/vendor/k8s.io/kubernetes/pkg/quota/v1/resources_test.go b/vendor/k8s.io/kubernetes/pkg/quota/v1/resources_test.go index 910c2f511..61175c706 100644 --- a/vendor/k8s.io/kubernetes/pkg/quota/v1/resources_test.go +++ b/vendor/k8s.io/kubernetes/pkg/quota/v1/resources_test.go @@ -17,7 +17,6 @@ limitations under the License. package quota import ( - "reflect" "testing" corev1 "k8s.io/api/core/v1" @@ -320,93 +319,3 @@ func TestIsNegative(t *testing.T) { } } } - -func TestIntersection(t *testing.T) { - testCases := map[string]struct { - a []corev1.ResourceName - b []corev1.ResourceName - expected []corev1.ResourceName - }{ - "empty": { - a: []corev1.ResourceName{}, - b: []corev1.ResourceName{}, - expected: []corev1.ResourceName{}, - }, - "equal": { - a: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory}, - b: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory}, - expected: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory}, - }, - "a has extra": { - a: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory}, - b: []corev1.ResourceName{corev1.ResourceCPU}, - expected: []corev1.ResourceName{corev1.ResourceCPU}, - }, - "b has extra": { - a: []corev1.ResourceName{corev1.ResourceCPU}, - b: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory}, - expected: []corev1.ResourceName{corev1.ResourceCPU}, - }, - "dedupes": { - a: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceCPU, corev1.ResourceMemory, corev1.ResourceMemory}, - b: []corev1.ResourceName{corev1.ResourceCPU}, - expected: []corev1.ResourceName{corev1.ResourceCPU}, - }, - "sorts": { - a: []corev1.ResourceName{corev1.ResourceMemory, corev1.ResourceMemory, corev1.ResourceCPU, corev1.ResourceCPU}, - b: []corev1.ResourceName{corev1.ResourceMemory, corev1.ResourceMemory, corev1.ResourceCPU, corev1.ResourceCPU}, - expected: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory}, - }, - } - for testName, testCase := range testCases { - actual := Intersection(testCase.a, testCase.b) - if !reflect.DeepEqual(actual, testCase.expected) { - t.Errorf("%s expected: %#v, actual: %#v", testName, testCase.expected, actual) - } - } -} - -func TestDifference(t *testing.T) { - testCases := map[string]struct { - a []corev1.ResourceName - b []corev1.ResourceName - expected []corev1.ResourceName - }{ - "empty": { - a: []corev1.ResourceName{}, - b: []corev1.ResourceName{}, - expected: []corev1.ResourceName{}, - }, - "equal": { - a: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory}, - b: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory}, - expected: []corev1.ResourceName{}, - }, - "a has extra": { - a: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory}, - b: []corev1.ResourceName{corev1.ResourceCPU}, - expected: []corev1.ResourceName{corev1.ResourceMemory}, - }, - "b has extra": { - a: []corev1.ResourceName{corev1.ResourceCPU}, - b: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory}, - expected: []corev1.ResourceName{}, - }, - "dedupes": { - a: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceCPU, corev1.ResourceMemory, corev1.ResourceMemory}, - b: []corev1.ResourceName{corev1.ResourceCPU}, - expected: []corev1.ResourceName{corev1.ResourceMemory}, - }, - "sorts": { - a: []corev1.ResourceName{corev1.ResourceMemory, corev1.ResourceMemory, corev1.ResourceCPU, corev1.ResourceCPU}, - b: []corev1.ResourceName{}, - expected: []corev1.ResourceName{corev1.ResourceCPU, corev1.ResourceMemory}, - }, - } - for testName, testCase := range testCases { - actual := Difference(testCase.a, testCase.b) - if !reflect.DeepEqual(actual, testCase.expected) { - t.Errorf("%s expected: %#v, actual: %#v", testName, testCase.expected, actual) - } - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/BUILD index 85ab4b28e..3f498f121 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/BUILD @@ -11,9 +11,11 @@ go_test( srcs = ["storage_test.go"], embed = [":go_default_library"], deps = [ + "//pkg/api/testapi:go_default_library", "//pkg/apis/batch:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/registry/registrytest:go_default_library", + "//staging/src/k8s.io/api/batch/v2alpha1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/storage_test.go b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/storage_test.go index 318dfbbbe..2a78b522e 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/storage_test.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/cronjob/storage/storage_test.go @@ -19,6 +19,7 @@ package storage import ( "testing" + "k8s.io/api/batch/v2alpha1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" @@ -26,6 +27,7 @@ import ( "k8s.io/apiserver/pkg/registry/generic" genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing" etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing" + "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/apis/batch" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/registry/registrytest" @@ -33,13 +35,8 @@ import ( // TODO: allow for global factory override func newStorage(t *testing.T) (*REST, *StatusREST, *etcdtesting.EtcdTestServer) { - etcdStorage, server := registrytest.NewEtcdStorageForResource(t, batch.SchemeGroupVersion.WithResource("cronjobs").GroupResource()) - restOptions := generic.RESTOptions{ - StorageConfig: etcdStorage, - Decorator: generic.UndecoratedStorage, - DeleteCollectionWorkers: 1, - ResourcePrefix: "cronjobs", - } + etcdStorage, server := registrytest.NewEtcdStorage(t, batch.GroupName) + restOptions := generic.RESTOptions{StorageConfig: etcdStorage, Decorator: generic.UndecoratedStorage, DeleteCollectionWorkers: 1} storage, statusStorage := NewREST(restOptions) return storage, statusStorage, server } @@ -59,11 +56,7 @@ func validNewCronJob() *batch.CronJob { Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyOnFailure, DNSPolicy: api.DNSClusterFirst, - Containers: []api.Container{{ - Name: "abc", Image: "image", - ImagePullPolicy: api.PullIfNotPresent, - TerminationMessagePolicy: api.TerminationMessageReadFile, - }}, + Containers: []api.Container{{Name: "abc", Image: "image", ImagePullPolicy: api.PullIfNotPresent}}, }, }, }, @@ -73,6 +66,11 @@ func validNewCronJob() *batch.CronJob { } func TestCreate(t *testing.T) { + // scheduled jobs should be tested only when batch/v2alpha1 is enabled + if *testapi.Batch.GroupVersion() != v2alpha1.SchemeGroupVersion { + return + } + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -90,6 +88,11 @@ func TestCreate(t *testing.T) { } func TestUpdate(t *testing.T) { + // scheduled jobs should be tested only when batch/v2alpha1 is enabled + if *testapi.Batch.GroupVersion() != v2alpha1.SchemeGroupVersion { + return + } + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -114,6 +117,11 @@ func TestUpdate(t *testing.T) { } func TestDelete(t *testing.T) { + // scheduled jobs should be tested only when batch/v2alpha1 is enabled + if *testapi.Batch.GroupVersion() != v2alpha1.SchemeGroupVersion { + return + } + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -122,6 +130,11 @@ func TestDelete(t *testing.T) { } func TestGet(t *testing.T) { + // scheduled jobs should be tested only when batch/v2alpha1 is enabled + if *testapi.Batch.GroupVersion() != v2alpha1.SchemeGroupVersion { + return + } + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -130,6 +143,11 @@ func TestGet(t *testing.T) { } func TestList(t *testing.T) { + // scheduled jobs should be tested only when batch/v2alpha1 is enabled + if *testapi.Batch.GroupVersion() != v2alpha1.SchemeGroupVersion { + return + } + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -138,6 +156,11 @@ func TestList(t *testing.T) { } func TestWatch(t *testing.T) { + // scheduled jobs should be tested only when batch/v2alpha1 is enabled + if *testapi.Batch.GroupVersion() != v2alpha1.SchemeGroupVersion { + return + } + storage, _, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/job/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/batch/job/BUILD index e2a4aa746..b70fed923 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/job/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/job/BUILD @@ -41,9 +41,9 @@ go_test( srcs = ["strategy_test.go"], embed = [":go_default_library"], deps = [ + "//pkg/api/testapi:go_default_library", "//pkg/api/testing:go_default_library", "//pkg/apis/batch:go_default_library", - "//pkg/apis/batch/install:go_default_library", "//pkg/apis/core:go_default_library", "//pkg/features:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/batch/job/strategy_test.go b/vendor/k8s.io/kubernetes/pkg/registry/batch/job/strategy_test.go index 7428ca80c..ceac03fb6 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/batch/job/strategy_test.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/batch/job/strategy_test.go @@ -26,9 +26,9 @@ import ( "k8s.io/apiserver/pkg/registry/rest" utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeaturetesting "k8s.io/apiserver/pkg/util/feature/testing" + "k8s.io/kubernetes/pkg/api/testapi" apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/apis/batch" - _ "k8s.io/kubernetes/pkg/apis/batch/install" api "k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/features" ) @@ -281,7 +281,7 @@ func TestJobStatusStrategy(t *testing.T) { func TestSelectableFieldLabelConversions(t *testing.T) { apitesting.TestSelectableFieldLabelConversionsOfKind(t, - "batch/v1", + testapi.Batch.GroupVersion().String(), "Job", JobToSelectableFields(&batch.Job{}), nil, diff --git a/vendor/k8s.io/kubernetes/pkg/registry/rbac/validation/rule.go b/vendor/k8s.io/kubernetes/pkg/registry/rbac/validation/rule.go index ba5471df7..6c88791f8 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/rbac/validation/rule.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/rbac/validation/rule.go @@ -286,8 +286,7 @@ func appliesToUser(user user.Info, subject rbacv1.Subject, namespace string) boo if len(saNamespace) == 0 { return false } - // use a more efficient comparison for RBAC checking - return serviceaccount.MatchesUsername(saNamespace, subject.Name, user.GetName()) + return serviceaccount.MakeUsername(saNamespace, subject.Name) == user.GetName() default: return false } diff --git a/vendor/k8s.io/kubernetes/pkg/registry/registrytest/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/registrytest/BUILD index 67bb35120..162385eb4 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/registrytest/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/registrytest/BUILD @@ -21,18 +21,15 @@ go_library( deps = [ "//pkg/api/testapi:go_default_library", "//pkg/apis/core:go_default_library", - "//pkg/kubeapiserver:go_default_library", "//pkg/util/slice:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/internalversion:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/etcd/testing:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/registry/registrytest/etcd.go b/vendor/k8s.io/kubernetes/pkg/registry/registrytest/etcd.go index 851001058..061959d9d 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/registrytest/etcd.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/registrytest/etcd.go @@ -19,12 +19,9 @@ package registrytest import ( "testing" - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apiserver/pkg/server/options" etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing" "k8s.io/apiserver/pkg/storage/storagebackend" "k8s.io/kubernetes/pkg/api/testapi" - "k8s.io/kubernetes/pkg/kubeapiserver" ) func NewEtcdStorage(t *testing.T, group string) (*storagebackend.Config, *etcdtesting.EtcdTestServer) { @@ -32,24 +29,3 @@ func NewEtcdStorage(t *testing.T, group string) (*storagebackend.Config, *etcdte config.Codec = testapi.Groups[group].StorageCodec() return config, server } - -func NewEtcdStorageForResource(t *testing.T, resource schema.GroupResource) (*storagebackend.Config, *etcdtesting.EtcdTestServer) { - t.Helper() - - server, config := etcdtesting.NewUnsecuredEtcd3TestClientServer(t) - - options := options.NewEtcdOptions(config) - completedConfig, err := kubeapiserver.NewStorageFactoryConfig().Complete(options) - if err != nil { - t.Fatal(err) - } - factory, err := completedConfig.New() - if err != nil { - t.Fatal(err) - } - resourceConfig, err := factory.NewConfig(resource) - if err != nil { - t.Fatal(err) - } - return resourceConfig, server -} diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/BUILD index ab66d6d8b..bdbddb613 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/BUILD @@ -33,8 +33,10 @@ go_test( srcs = ["storage_test.go"], embed = [":go_default_library"], deps = [ + "//pkg/api/testapi:go_default_library", "//pkg/apis/storage:go_default_library", "//pkg/registry/registrytest:go_default_library", + "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/storage_test.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/storage_test.go index 9ebc53f43..2cc848f6d 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/storage_test.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csidriver/storage/storage_test.go @@ -19,6 +19,7 @@ package storage import ( "testing" + storageapiv1beta1 "k8s.io/api/storage/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" @@ -26,12 +27,13 @@ import ( "k8s.io/apiserver/pkg/registry/generic" genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing" etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing" + "k8s.io/kubernetes/pkg/api/testapi" storageapi "k8s.io/kubernetes/pkg/apis/storage" "k8s.io/kubernetes/pkg/registry/registrytest" ) func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { - etcdStorage, server := registrytest.NewEtcdStorageForResource(t, storageapi.SchemeGroupVersion.WithResource("csidrivers").GroupResource()) + etcdStorage, server := registrytest.NewEtcdStorage(t, storageapi.GroupName) restOptions := generic.RESTOptions{ StorageConfig: etcdStorage, Decorator: generic.UndecoratedStorage, @@ -57,6 +59,11 @@ func validNewCSIDriver(name string) *storageapi.CSIDriver { } func TestCreate(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -80,6 +87,11 @@ func TestCreate(t *testing.T) { } func TestUpdate(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -89,12 +101,6 @@ func TestUpdate(t *testing.T) { test.TestUpdate( // valid validNewCSIDriver("foo"), - // updateFunc - func(obj runtime.Object) runtime.Object { - object := obj.(*storageapi.CSIDriver) - object.Labels = map[string]string{"a": "b"} - return object - }, //invalid update func(obj runtime.Object) runtime.Object { object := obj.(*storageapi.CSIDriver) @@ -105,6 +111,11 @@ func TestUpdate(t *testing.T) { } func TestDelete(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -113,6 +124,11 @@ func TestDelete(t *testing.T) { } func TestGet(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -121,6 +137,11 @@ func TestGet(t *testing.T) { } func TestList(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -129,6 +150,11 @@ func TestList(t *testing.T) { } func TestWatch(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/BUILD b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/BUILD index b4e0663d1..a3daa50f0 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/BUILD @@ -33,8 +33,10 @@ go_test( srcs = ["storage_test.go"], embed = [":go_default_library"], deps = [ + "//pkg/api/testapi:go_default_library", "//pkg/apis/storage:go_default_library", "//pkg/registry/registrytest:go_default_library", + "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/storage_test.go b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/storage_test.go index 362a38ff0..5cfb5756d 100644 --- a/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/storage_test.go +++ b/vendor/k8s.io/kubernetes/pkg/registry/storage/csinode/storage/storage_test.go @@ -19,6 +19,7 @@ package storage import ( "testing" + storageapiv1beta1 "k8s.io/api/storage/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/labels" @@ -26,12 +27,13 @@ import ( "k8s.io/apiserver/pkg/registry/generic" genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing" etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing" + "k8s.io/kubernetes/pkg/api/testapi" storageapi "k8s.io/kubernetes/pkg/apis/storage" "k8s.io/kubernetes/pkg/registry/registrytest" ) func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { - etcdStorage, server := registrytest.NewEtcdStorageForResource(t, storageapi.SchemeGroupVersion.WithResource("csinodes").GroupResource()) + etcdStorage, server := registrytest.NewEtcdStorage(t, storageapi.GroupName) restOptions := generic.RESTOptions{ StorageConfig: etcdStorage, Decorator: generic.UndecoratedStorage, @@ -60,6 +62,11 @@ func validNewCSINode(name string) *storageapi.CSINode { } func TestCreate(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -86,6 +93,11 @@ func TestCreate(t *testing.T) { } func TestUpdate(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -110,6 +122,11 @@ func TestUpdate(t *testing.T) { } func TestDelete(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -118,6 +135,11 @@ func TestDelete(t *testing.T) { } func TestGet(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -126,6 +148,11 @@ func TestGet(t *testing.T) { } func TestList(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() @@ -134,6 +161,11 @@ func TestList(t *testing.T) { } func TestWatch(t *testing.T) { + if *testapi.Storage.GroupVersion() != storageapiv1beta1.SchemeGroupVersion { + // skip the test for all versions exception v1beta1 + return + } + storage, server := newStorage(t) defer server.Terminate(t) defer storage.Store.DestroyFunc() diff --git a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue_test.go b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue_test.go index b586260d7..db12c2707 100644 --- a/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue_test.go +++ b/vendor/k8s.io/kubernetes/pkg/scheduler/internal/queue/scheduling_queue_test.go @@ -976,10 +976,8 @@ func TestHighProirotyFlushUnschedulableQLeftover(t *testing.T) { addOrUpdateUnschedulablePod(q, &highPod) addOrUpdateUnschedulablePod(q, &midPod) - q.lock.Lock() q.unschedulableQ.podInfoMap[util.GetPodFullName(&highPod)].timestamp = time.Now().Add(-1 * unschedulableQTimeInterval) q.unschedulableQ.podInfoMap[util.GetPodFullName(&midPod)].timestamp = time.Now().Add(-1 * unschedulableQTimeInterval) - q.lock.Unlock() if p, err := q.Pop(); err != nil || p != &highPod { t.Errorf("Expected: %v after Pop, but got: %v", highPriorityPod.Name, p.Name) diff --git a/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go b/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go index 3becb3fa7..976f6d780 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go +++ b/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go @@ -326,15 +326,14 @@ func (runner *runner) SaveInto(table Table, buffer *bytes.Buffer) error { args := []string{"-t", string(table)} klog.V(4).Infof("running %s %v", iptablesSaveCmd, args) cmd := runner.exec.Command(iptablesSaveCmd, args...) + // Since CombinedOutput() doesn't support redirecting it to a buffer, + // we need to workaround it by redirecting stdout and stderr to buffer + // and explicitly calling Run() [CombinedOutput() underneath itself + // creates a new buffer, redirects stdout and stderr to it and also + // calls Run()]. cmd.SetStdout(buffer) - stderrBuffer := bytes.NewBuffer(nil) - cmd.SetStderr(stderrBuffer) - - err := cmd.Run() - if err != nil { - stderrBuffer.WriteTo(buffer) // ignore error, since we need to return the original error - } - return err + cmd.SetStderr(buffer) + return cmd.Run() } // Restore is part of Interface. @@ -699,39 +698,16 @@ func (runner *runner) reload() { } } -var iptablesNotFoundStrings = []string{ - // iptables-legacy [-A|-I] BAD-CHAIN [...] - // iptables-legacy [-C|-D] GOOD-CHAIN [...non-matching rule...] - // iptables-legacy [-X|-F|-Z] BAD-CHAIN - // iptables-nft -X BAD-CHAIN - // NB: iptables-nft [-F|-Z] BAD-CHAIN exits with no error - "No chain/target/match by that name", - - // iptables-legacy [...] -j BAD-CHAIN - // iptables-nft-1.8.0 [-A|-I] BAD-CHAIN [...] - // iptables-nft-1.8.0 [-A|-I] GOOD-CHAIN -j BAD-CHAIN - // NB: also matches some other things like "-m BAD-MODULE" - "No such file or directory", - - // iptables-legacy [-C|-D] BAD-CHAIN [...] - // iptables-nft [-C|-D] GOOD-CHAIN [...non-matching rule...] - "does a matching rule exist", - - // iptables-nft-1.8.2 [-A|-C|-D|-I] BAD-CHAIN [...] - // iptables-nft-1.8.2 [...] -j BAD-CHAIN - "does not exist", -} - // IsNotFoundError returns true if the error indicates "not found". It parses -// the error string looking for known values, which is imperfect; beware using -// this function for anything beyond deciding between logging or ignoring an -// error. +// the error string looking for known values, which is imperfect but works in +// practice. func IsNotFoundError(err error) bool { es := err.Error() - for _, str := range iptablesNotFoundStrings { - if strings.Contains(es, str) { - return true - } + if strings.Contains(es, "No such file or directory") { + return true + } + if strings.Contains(es, "No chain/target/match by that name") { + return true } return false } diff --git a/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables_test.go b/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables_test.go index dfc580953..e16946806 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables_test.go +++ b/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables_test.go @@ -932,8 +932,6 @@ func testSaveInto(t *testing.T, protocol Protocol) { COMMIT # Completed on Thu Jan 19 11:38:09 2017`, iptablesSaveCmd+version) - stderrOutput := "#STDERR OUTPUT" // SaveInto() should should NOT capture stderr into the buffer - fcmd := fakeexec.FakeCmd{ CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{ // iptables version check @@ -942,8 +940,8 @@ COMMIT func() ([]byte, error) { return []byte(iptablesRestoreCmd + version), nil }, }, RunScript: []fakeexec.FakeRunAction{ - func() ([]byte, []byte, error) { return []byte(output), []byte(stderrOutput), nil }, - func() ([]byte, []byte, error) { return nil, []byte(stderrOutput), &fakeexec.FakeExitError{Status: 1} }, + func() ([]byte, []byte, error) { return []byte(output), nil, nil }, + func() ([]byte, []byte, error) { return nil, nil, &fakeexec.FakeExitError{Status: 1} }, }, } fexec := fakeexec.FakeExec{ @@ -964,8 +962,8 @@ COMMIT t.Fatalf("%s: Expected success, got %v", protoStr, err) } - if string(buffer.Bytes()) != output { - t.Errorf("%s: Expected output '%s', got '%v'", protoStr, output, string(buffer.Bytes())) + if string(buffer.Bytes()[:len(output)]) != output { + t.Errorf("%s: Expected output '%s', got '%v'", protoStr, output, buffer.Bytes()) } if fcmd.CombinedOutputCalls != 2 { @@ -984,9 +982,6 @@ COMMIT if err == nil { t.Errorf("%s: Expected failure", protoStr) } - if string(buffer.Bytes()) != stderrOutput { - t.Errorf("%s: Expected output '%s', got '%v'", protoStr, stderrOutput, string(buffer.Bytes())) - } } func TestSaveIntoIPv4(t *testing.T) { diff --git a/vendor/k8s.io/kubernetes/pkg/util/iptables/save_restore.go b/vendor/k8s.io/kubernetes/pkg/util/iptables/save_restore.go index 7ec11e4f0..172f07e7f 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/iptables/save_restore.go +++ b/vendor/k8s.io/kubernetes/pkg/util/iptables/save_restore.go @@ -61,11 +61,7 @@ func GetChainLines(table Table, save []byte) map[Chain][]byte { } else if line[0] == ':' && len(line) > 1 { // We assume that the contains space - chain lines have 3 fields, // space delimited. If there is no space, this line will panic. - spaceIndex := bytes.Index(line, spaceBytes) - if spaceIndex == -1 { - panic(fmt.Sprintf("Unexpected chain line in iptables-save output: %v", string(line))) - } - chain := Chain(line[1:spaceIndex]) + chain := Chain(line[1:bytes.Index(line, spaceBytes)]) chainsMap[chain] = line } } diff --git a/vendor/k8s.io/kubernetes/pkg/util/node/BUILD b/vendor/k8s.io/kubernetes/pkg/util/node/BUILD index 106bfa982..08692c148 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/node/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/util/node/BUILD @@ -12,7 +12,6 @@ go_library( importpath = "k8s.io/kubernetes/pkg/util/node", deps = [ "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/util/node/node.go b/vendor/k8s.io/kubernetes/pkg/util/node/node.go index 5c43ca1f3..087a0bc82 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/node/node.go +++ b/vendor/k8s.io/kubernetes/pkg/util/node/node.go @@ -27,7 +27,6 @@ import ( "k8s.io/klog" "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/equality" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/strategicpatch" @@ -196,21 +195,12 @@ func preparePatchBytesforNodeStatus(nodeName types.NodeName, oldNode *v1.Node, n return nil, fmt.Errorf("failed to Marshal oldData for node %q: %v", nodeName, err) } - // NodeStatus.Addresses is incorrectly annotated as patchStrategy=merge, which - // will cause strategicpatch.CreateTwoWayMergePatch to create an incorrect patch - // if it changed. - manuallyPatchAddresses := (len(oldNode.Status.Addresses) > 0) && !equality.Semantic.DeepEqual(oldNode.Status.Addresses, newNode.Status.Addresses) - // Reset spec to make sure only patch for Status or ObjectMeta is generated. // Note that we don't reset ObjectMeta here, because: // 1. This aligns with Nodes().UpdateStatus(). // 2. Some component does use this to update node annotations. - diffNode := newNode.DeepCopy() - diffNode.Spec = oldNode.Spec - if manuallyPatchAddresses { - diffNode.Status.Addresses = oldNode.Status.Addresses - } - newData, err := json.Marshal(diffNode) + newNode.Spec = oldNode.Spec + newData, err := json.Marshal(newNode) if err != nil { return nil, fmt.Errorf("failed to Marshal newData for node %q: %v", nodeName, err) } @@ -219,63 +209,5 @@ func preparePatchBytesforNodeStatus(nodeName types.NodeName, oldNode *v1.Node, n if err != nil { return nil, fmt.Errorf("failed to CreateTwoWayMergePatch for node %q: %v", nodeName, err) } - if manuallyPatchAddresses { - patchBytes, err = fixupPatchForNodeStatusAddresses(patchBytes, newNode.Status.Addresses) - if err != nil { - return nil, fmt.Errorf("failed to fix up NodeAddresses in patch for node %q: %v", nodeName, err) - } - } - return patchBytes, nil } - -// fixupPatchForNodeStatusAddresses adds a replace-strategy patch for Status.Addresses to -// the existing patch -func fixupPatchForNodeStatusAddresses(patchBytes []byte, addresses []v1.NodeAddress) ([]byte, error) { - // Given patchBytes='{"status": {"conditions": [ ... ], "phase": ...}}' and - // addresses=[{"type": "InternalIP", "address": "10.0.0.1"}], we need to generate: - // - // { - // "status": { - // "conditions": [ ... ], - // "phase": ..., - // "addresses": [ - // { - // "type": "InternalIP", - // "address": "10.0.0.1" - // }, - // { - // "$patch": "replace" - // } - // ] - // } - // } - - var patchMap map[string]interface{} - if err := json.Unmarshal(patchBytes, &patchMap); err != nil { - return nil, err - } - - addrBytes, err := json.Marshal(addresses) - if err != nil { - return nil, err - } - var addrArray []interface{} - if err := json.Unmarshal(addrBytes, &addrArray); err != nil { - return nil, err - } - addrArray = append(addrArray, map[string]interface{}{"$patch": "replace"}) - - status := patchMap["status"] - if status == nil { - status = map[string]interface{}{} - patchMap["status"] = status - } - statusMap, ok := status.(map[string]interface{}) - if !ok { - return nil, fmt.Errorf("unexpected data in patch") - } - statusMap["addresses"] = addrArray - - return json.Marshal(patchMap) -} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/cinder/cinder_test.go b/vendor/k8s.io/kubernetes/pkg/volume/cinder/cinder_test.go index 467a903eb..d75d629d3 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/cinder/cinder_test.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/cinder/cinder_test.go @@ -304,20 +304,17 @@ func getOpenstackCloudProvider() (*openstack.OpenStack, error) { func getOpenstackConfig() openstack.Config { cfg := openstack.Config{ Global: struct { - AuthURL string `gcfg:"auth-url"` - Username string - UserID string `gcfg:"user-id"` - Password string - TenantID string `gcfg:"tenant-id"` - TenantName string `gcfg:"tenant-name"` - TrustID string `gcfg:"trust-id"` - DomainID string `gcfg:"domain-id"` - DomainName string `gcfg:"domain-name"` - Region string - CAFile string `gcfg:"ca-file"` - SecretName string `gcfg:"secret-name"` - SecretNamespace string `gcfg:"secret-namespace"` - KubeconfigPath string `gcfg:"kubeconfig-path"` + AuthURL string `gcfg:"auth-url"` + Username string + UserID string `gcfg:"user-id"` + Password string + TenantID string `gcfg:"tenant-id"` + TenantName string `gcfg:"tenant-name"` + TrustID string `gcfg:"trust-id"` + DomainID string `gcfg:"domain-id"` + DomainName string `gcfg:"domain-name"` + Region string + CAFile string `gcfg:"ca-file"` }{ Username: "user", Password: "pass", diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/csi/BUILD index a09d96d08..71e07796a 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/BUILD @@ -7,7 +7,6 @@ go_library( "csi_block.go", "csi_client.go", "csi_drivers_store.go", - "csi_metrics.go", "csi_mounter.go", "csi_plugin.go", "csi_util.go", @@ -51,7 +50,6 @@ go_test( "csi_block_test.go", "csi_client_test.go", "csi_drivers_store_test.go", - "csi_metrics_test.go", "csi_mounter_test.go", "csi_plugin_test.go", "expander_test.go", diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher_test.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher_test.go index 41c4f1613..1de09af06 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher_test.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_attacher_test.go @@ -21,7 +21,6 @@ import ( "io/ioutil" "os" "path/filepath" - "sync" "testing" "time" @@ -357,12 +356,9 @@ func TestAttacherWithCSIDriver(t *testing.T) { t.Log("plugin is not attachable") return } - var wg sync.WaitGroup - wg.Add(1) + go func(volSpec *volume.Spec, expectAttach bool) { attachID, err := csiAttacher.Attach(volSpec, types.NodeName("node")) - defer wg.Done() - if err != nil { t.Errorf("Attach() failed: %s", err) } @@ -381,7 +377,6 @@ func TestAttacherWithCSIDriver(t *testing.T) { } markVolumeAttached(t, csiAttacher.k8s, fakeWatcher, expectedAttachID, status) } - wg.Wait() }) } } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client.go index 5a00a395a..272c5eee7 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client.go @@ -33,7 +33,6 @@ import ( utilversion "k8s.io/apimachinery/pkg/util/version" "k8s.io/apimachinery/pkg/util/wait" utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/kubernetes/pkg/volume" "k8s.io/klog" "k8s.io/kubernetes/pkg/features" csipbv0 "k8s.io/kubernetes/pkg/volume/csi/csiv0" @@ -73,16 +72,9 @@ type csiClient interface { secrets map[string]string, volumeContext map[string]string, ) error - - NodeGetVolumeStats( - ctx context.Context, - volID string, - targetPath string, - ) (*volume.Metrics, error) NodeUnstageVolume(ctx context.Context, volID, stagingTargetPath string) error NodeSupportsStageUnstage(ctx context.Context) (bool, error) NodeSupportsNodeExpand(ctx context.Context) (bool, error) - NodeSupportsVolumeStats(ctx context.Context) (bool, error) } // Strongly typed address @@ -849,101 +841,3 @@ func (c *csiClientGetter) Get() (csiClient, error) { c.csiClient = csi return c.csiClient, nil } - -func (c *csiDriverClient) NodeSupportsVolumeStats(ctx context.Context) (bool, error) { - klog.V(5).Info(log("calling NodeGetCapabilities rpc to determine if NodeSupportsVolumeStats")) - if c.nodeV1ClientCreator != nil { - return c.nodeSupportsVolumeStatsV1(ctx) - } - return false, fmt.Errorf("failed to call NodeSupportsVolumeStats. nodeV1ClientCreator is nil") -} - -func (c *csiDriverClient) nodeSupportsVolumeStatsV1(ctx context.Context) (bool, error) { - nodeClient, closer, err := c.nodeV1ClientCreator(c.addr) - if err != nil { - return false, err - } - defer closer.Close() - req := &csipbv1.NodeGetCapabilitiesRequest{} - resp, err := nodeClient.NodeGetCapabilities(ctx, req) - if err != nil { - return false, err - } - capabilities := resp.GetCapabilities() - if capabilities == nil { - return false, nil - } - for _, capability := range capabilities { - if capability.GetRpc().GetType() == csipbv1.NodeServiceCapability_RPC_GET_VOLUME_STATS { - return true, nil - } - } - return false, nil -} - -func (c *csiDriverClient) NodeGetVolumeStats(ctx context.Context, volID string, targetPath string) (*volume.Metrics, error) { - klog.V(4).Info(log("calling NodeGetVolumeStats rpc: [volid=%s, target_path=%s", volID, targetPath)) - if volID == "" { - return nil, errors.New("missing volume id") - } - if targetPath == "" { - return nil, errors.New("missing target path") - } - - if c.nodeV1ClientCreator != nil { - return c.nodeGetVolumeStatsV1(ctx, volID, targetPath) - } - - return nil, fmt.Errorf("failed to call NodeGetVolumeStats. nodeV1ClientCreator is nil") -} - -func (c *csiDriverClient) nodeGetVolumeStatsV1( - ctx context.Context, - volID string, - targetPath string, -) (*volume.Metrics, error) { - nodeClient, closer, err := c.nodeV1ClientCreator(c.addr) - if err != nil { - return nil, err - } - defer closer.Close() - - req := &csipbv1.NodeGetVolumeStatsRequest{ - VolumeId: volID, - VolumePath: targetPath, - } - - resp, err := nodeClient.NodeGetVolumeStats(ctx, req) - if err != nil { - return nil, err - } - usages := resp.GetUsage() - if usages == nil { - return nil, fmt.Errorf("failed to get usage from response. usage is nil") - } - metrics := &volume.Metrics{ - Used: resource.NewQuantity(int64(0), resource.BinarySI), - Capacity: resource.NewQuantity(int64(0), resource.BinarySI), - Available: resource.NewQuantity(int64(0), resource.BinarySI), - InodesUsed: resource.NewQuantity(int64(0), resource.BinarySI), - Inodes: resource.NewQuantity(int64(0), resource.BinarySI), - InodesFree: resource.NewQuantity(int64(0), resource.BinarySI), - } - for _, usage := range usages { - unit := usage.GetUnit() - switch unit { - case csipbv1.VolumeUsage_BYTES: - metrics.Available = resource.NewQuantity(usage.GetAvailable(), resource.BinarySI) - metrics.Capacity = resource.NewQuantity(usage.GetTotal(), resource.BinarySI) - metrics.Used = resource.NewQuantity(usage.GetUsed(), resource.BinarySI) - case csipbv1.VolumeUsage_INODES: - metrics.InodesFree = resource.NewQuantity(usage.GetAvailable(), resource.BinarySI) - metrics.Inodes = resource.NewQuantity(usage.GetTotal(), resource.BinarySI) - metrics.InodesUsed = resource.NewQuantity(usage.GetUsed(), resource.BinarySI) - default: - klog.Errorf("unknown key %s in usage", unit.String()) - } - - } - return metrics, nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client_test.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client_test.go index 168b261cf..af8fe63f5 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client_test.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_client_test.go @@ -27,7 +27,6 @@ import ( api "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/kubernetes/pkg/volume/csi/fake" - "k8s.io/kubernetes/pkg/volume" ) type fakeCsiDriverClient struct { @@ -49,13 +48,6 @@ func newFakeCsiDriverClientWithExpansion(t *testing.T, stagingCapable bool, expa } } -func newFakeCsiDriverClientWithVolumeStats(t *testing.T, volumeStatsSet bool) *fakeCsiDriverClient { - return &fakeCsiDriverClient{ - t: t, - nodeClient: fake.NewNodeClientWithVolumeStats(volumeStatsSet), - } -} - func (c *fakeCsiDriverClient) NodeGetInfo(ctx context.Context) ( nodeID string, maxVolumePerNode int64, @@ -69,54 +61,6 @@ func (c *fakeCsiDriverClient) NodeGetInfo(ctx context.Context) ( return resp.GetNodeId(), resp.GetMaxVolumesPerNode(), accessibleTopology, err } -func (c *fakeCsiDriverClient) NodeGetVolumeStats(ctx context.Context, volID string, targetPath string) ( - usageCountMap *volume.Metrics, err error) { - c.t.Log("calling fake.NodeGetVolumeStats...") - req := &csipbv1.NodeGetVolumeStatsRequest{ - VolumeId: volID, - VolumePath: targetPath, - } - resp, err := c.nodeClient.NodeGetVolumeStats(ctx, req) - usages := resp.GetUsage() - metrics := &volume.Metrics{} - if usages == nil { - return nil, nil - } - for _, usage := range usages { - unit := usage.GetUnit() - switch unit { - case csipbv1.VolumeUsage_BYTES: - metrics.Available = resource.NewQuantity(usage.GetAvailable(), resource.BinarySI) - metrics.Capacity = resource.NewQuantity(usage.GetTotal(), resource.BinarySI) - metrics.Used = resource.NewQuantity(usage.GetUsed(), resource.BinarySI) - case csipbv1.VolumeUsage_INODES: - metrics.InodesFree = resource.NewQuantity(usage.GetAvailable(), resource.BinarySI) - metrics.Inodes = resource.NewQuantity(usage.GetTotal(), resource.BinarySI) - metrics.InodesUsed = resource.NewQuantity(usage.GetUsed(), resource.BinarySI) - } - } - return metrics, nil -} - -func (c *fakeCsiDriverClient) NodeSupportsVolumeStats(ctx context.Context) (bool, error) { - c.t.Log("calling fake.NodeSupportsVolumeStats...") - req := &csipbv1.NodeGetCapabilitiesRequest{} - resp, err := c.nodeClient.NodeGetCapabilities(ctx, req) - if err != nil { - return false, err - } - capabilities := resp.GetCapabilities() - if capabilities == nil { - return false, nil - } - for _, capability := range capabilities { - if capability.GetRpc().GetType() == csipbv1.NodeServiceCapability_RPC_GET_VOLUME_STATS { - return true, nil - } - } - return false, nil -} - func (c *fakeCsiDriverClient) NodePublishVolume( ctx context.Context, volID string, @@ -276,10 +220,6 @@ func setupClientWithExpansion(t *testing.T, stageUnstageSet bool, expansionSet b return newFakeCsiDriverClientWithExpansion(t, stageUnstageSet, expansionSet) } -func setupClientWithVolumeStats(t *testing.T, volumeStatsSet bool) csiClient { - return newFakeCsiDriverClientWithVolumeStats(t, volumeStatsSet) -} - func checkErr(t *testing.T, expectedAnError bool, actualError error) { t.Helper() @@ -581,90 +521,3 @@ func TestNodeExpandVolume(t *testing.T) { } } } - -type VolumeStatsOptions struct { - VolumeSpec *volume.Spec - - // this just could be volumeID - VolumeID string - - // DeviceMountPath location where device is mounted on the node. If volume type - // is attachable - this would be global mount path otherwise - // it would be location where volume was mounted for the pod - DeviceMountPath string -} - -func TestVolumeStats(t *testing.T) { - spec := volume.NewSpecFromPersistentVolume(makeTestPV("test-pv", 10, "metrics", "test-vol"), false) - tests := []struct { - name string - volumeStatsSet bool - volumeData VolumeStatsOptions - success bool - }{ - { - name: "when nodeVolumeStats=on, VolumeID=on, DeviceMountPath=on", - volumeStatsSet: true, - volumeData: VolumeStatsOptions{ - VolumeSpec: spec, - VolumeID: "volume1", - DeviceMountPath: "/foo/bar", - }, - success: true, - }, - - { - name: "when nodeVolumeStats=off, VolumeID=on, DeviceMountPath=on", - volumeStatsSet: false, - volumeData: VolumeStatsOptions{ - VolumeSpec: spec, - VolumeID: "volume1", - DeviceMountPath: "/foo/bar", - }, - success: false, - }, - - { - name: "when nodeVolumeStats=on, VolumeID=off, DeviceMountPath=on", - volumeStatsSet: true, - volumeData: VolumeStatsOptions{ - VolumeSpec: spec, - VolumeID: "", - DeviceMountPath: "/foo/bar", - }, - success: false, - }, - - { - name: "when nodeVolumeStats=on, VolumeID=on, DeviceMountPath=off", - volumeStatsSet: true, - volumeData: VolumeStatsOptions{ - VolumeSpec: spec, - VolumeID: "volume1", - DeviceMountPath: "", - }, - success: false, - }, - { - name: "when nodeVolumeStats=on, VolumeID=on, DeviceMountPath=off", - volumeStatsSet: true, - volumeData: VolumeStatsOptions{ - VolumeSpec: spec, - VolumeID: "", - DeviceMountPath: "", - }, - success: false, - }, - } - for _, tc := range tests { - ctx, cancel := context.WithTimeout(context.Background(), csiTimeout) - defer cancel() - csiSource, _ := getCSISourceFromSpec(tc.volumeData.VolumeSpec) - csClient := setupClientWithVolumeStats(t, tc.volumeStatsSet) - _, err := csClient.NodeGetVolumeStats(ctx, csiSource.VolumeHandle, tc.volumeData.DeviceMountPath) - if err != nil && tc.success { - t.Errorf("For %s : expected %v got %v", tc.name, tc.success, err) - } - } - -} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_metrics.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_metrics.go deleted file mode 100644 index bd7ed5530..000000000 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_metrics.go +++ /dev/null @@ -1,79 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package csi - -import ( - "context" - "fmt" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/volume" -) - -var _ volume.MetricsProvider = &metricsCsi{} - -// metricsCsi represents a MetricsProvider that calculates the used,free and -// capacity information for volume using volume path. - -type metricsCsi struct { - // the directory path the volume is mounted to. - targetPath string - - // Volume handle or id - volumeID string - - //csiClient with cache - csiClientGetter -} - -// NewMetricsCsi creates a new metricsCsi with the Volume ID and path. -func NewMetricsCsi(volumeID string, targetPath string, driverName csiDriverName) volume.MetricsProvider { - mc := &metricsCsi{volumeID: volumeID, targetPath: targetPath} - mc.csiClientGetter.driverName = driverName - return mc -} - -func (mc *metricsCsi) GetMetrics() (*volume.Metrics, error) { - currentTime := metav1.Now() - ctx, cancel := context.WithTimeout(context.Background(), csiTimeout) - defer cancel() - // Get CSI client - csiClient, err := mc.csiClientGetter.Get() - if err != nil { - return nil, err - } - // Check whether "GET_VOLUME_STATS" is set - volumeStatsSet, err := csiClient.NodeSupportsVolumeStats(ctx) - if err != nil { - return nil, err - } - // if plugin doesnot support volume status, return. - if !volumeStatsSet { - return nil, nil - } - // Get Volumestatus - metrics, err := csiClient.NodeGetVolumeStats(ctx, mc.volumeID, mc.targetPath) - if err != nil { - return nil, err - } - if metrics == nil { - return nil, fmt.Errorf("csi.NodeGetVolumeStats returned nil metrics for volume %s", mc.volumeID) - } - //set recorded time - metrics.Time = currentTime - return metrics, nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_metrics_test.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_metrics_test.go deleted file mode 100644 index bcdb352e9..000000000 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_metrics_test.go +++ /dev/null @@ -1,113 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package csi - -import ( - "io" - "testing" - - csipbv1 "github.com/container-storage-interface/spec/lib/go/csi" - "k8s.io/apimachinery/pkg/api/resource" - "k8s.io/kubernetes/pkg/volume/csi/fake" -) - -func TestGetMetrics(t *testing.T) { - tests := []struct { - name string - volumeID string - targetPath string - expectSuccess bool - }{ - { - name: "with valid name and volume id", - expectSuccess: true, - volumeID: "foobar", - targetPath: "/mnt/foo", - }, - } - - for _, tc := range tests { - metricsGetter := &metricsCsi{volumeID: tc.volumeID, targetPath: tc.targetPath} - metricsGetter.csiClient = &csiDriverClient{ - driverName: "com.google.gcepd", - nodeV1ClientCreator: func(addr csiAddr) (csipbv1.NodeClient, io.Closer, error) { - nodeClient := fake.NewNodeClientWithVolumeStats(true /* VolumeStatsCapable */) - fakeCloser := fake.NewCloser(t) - nodeClient.SetNodeVolumeStatsResp(getRawVolumeInfo()) - return nodeClient, fakeCloser, nil - }, - } - metrics, err := metricsGetter.GetMetrics() - if err != nil { - t.Fatalf("for %s: unexpected error : %v", tc.name, err) - } - if metrics == nil { - t.Fatalf("unexpected nil metrics") - } - expectedMetrics := getRawVolumeInfo() - for _, usage := range expectedMetrics.Usage { - if usage.Unit == csipbv1.VolumeUsage_BYTES { - availableBytes := resource.NewQuantity(usage.Available, resource.BinarySI) - totalBytes := resource.NewQuantity(usage.Total, resource.BinarySI) - usedBytes := resource.NewQuantity(usage.Used, resource.BinarySI) - if metrics.Available.Cmp(*availableBytes) != 0 { - t.Fatalf("for %s: error: expected :%v , got: %v", tc.name, *availableBytes, *(metrics.Available)) - } - if metrics.Capacity.Cmp(*totalBytes) != 0 { - t.Fatalf("for %s: error: expected :%v , got: %v", tc.name, *totalBytes, *(metrics.Capacity)) - } - if metrics.Used.Cmp(*usedBytes) != 0 { - t.Fatalf("for %s: error: expected :%v , got: %v", tc.name, *usedBytes, *(metrics.Used)) - } - } - - if usage.Unit == csipbv1.VolumeUsage_INODES { - freeInodes := resource.NewQuantity(usage.Available, resource.BinarySI) - inodes := resource.NewQuantity(usage.Total, resource.BinarySI) - usedInodes := resource.NewQuantity(usage.Used, resource.BinarySI) - if metrics.InodesFree.Cmp(*freeInodes) != 0 { - t.Fatalf("for %s: error: expected :%v , got: %v", tc.name, *freeInodes, *(metrics.InodesFree)) - } - if metrics.Inodes.Cmp(*inodes) != 0 { - t.Fatalf("for %s: error: expected :%v , got: %v", tc.name, *inodes, *(metrics.Inodes)) - } - if metrics.InodesUsed.Cmp(*usedInodes) != 0 { - t.Fatalf("for %s: error: expected :%v , got: %v", tc.name, *usedInodes, *(metrics.InodesUsed)) - } - } - } - } -} - -func getRawVolumeInfo() *csipbv1.NodeGetVolumeStatsResponse { - return &csipbv1.NodeGetVolumeStatsResponse{ - Usage: []*csipbv1.VolumeUsage{ - { - Available: int64(10), - Total: int64(10), - Used: int64(2), - Unit: csipbv1.VolumeUsage_BYTES, - }, - { - Available: int64(100), - Total: int64(100), - Used: int64(20), - Unit: csipbv1.VolumeUsage_INODES, - }, - }, - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go index 4344cb348..ccdce2ace 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_mounter.go @@ -69,7 +69,7 @@ type csiMountMgr struct { podUID types.UID options volume.VolumeOptions publishContext map[string]string - volume.MetricsProvider + volume.MetricsNil } // volume.Volume methods diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go index 972083b1b..3590b5726 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/csi_plugin.go @@ -408,8 +408,6 @@ func (p *csiPlugin) NewMounter( } klog.V(4).Info(log("created path successfully [%s]", dataDir)) - mounter.MetricsProvider = NewMetricsCsi(volumeHandle, dir, csiDriverName(driverName)) - // persist volume info data for teardown node := string(p.host.GetNodeName()) volData := map[string]string{ diff --git a/vendor/k8s.io/kubernetes/pkg/volume/csi/fake/fake_client.go b/vendor/k8s.io/kubernetes/pkg/volume/csi/fake/fake_client.go index 1f3d0b5cd..ac826aa1a 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/csi/fake/fake_client.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/csi/fake/fake_client.go @@ -71,9 +71,7 @@ type NodeClient struct { nodeStagedVolumes map[string]CSIVolume stageUnstageSet bool expansionSet bool - volumeStatsSet bool nodeGetInfoResp *csipb.NodeGetInfoResponse - nodeVolumeStatsResp *csipb.NodeGetVolumeStatsResponse nextErr error } @@ -83,7 +81,6 @@ func NewNodeClient(stageUnstageSet bool) *NodeClient { nodePublishedVolumes: make(map[string]CSIVolume), nodeStagedVolumes: make(map[string]CSIVolume), stageUnstageSet: stageUnstageSet, - volumeStatsSet: true, } } @@ -96,12 +93,6 @@ func NewNodeClientWithExpansion(stageUnstageSet bool, expansionSet bool) *NodeCl } } -func NewNodeClientWithVolumeStats(volumeStatsSet bool) *NodeClient { - return &NodeClient{ - volumeStatsSet: volumeStatsSet, - } -} - // SetNextError injects next expected error func (f *NodeClient) SetNextError(err error) { f.nextErr = err @@ -111,10 +102,6 @@ func (f *NodeClient) SetNodeGetInfoResp(resp *csipb.NodeGetInfoResponse) { f.nodeGetInfoResp = resp } -func (f *NodeClient) SetNodeVolumeStatsResp(resp *csipb.NodeGetVolumeStatsResponse) { - f.nodeVolumeStatsResp = resp -} - // GetNodePublishedVolumes returns node published volumes func (f *NodeClient) GetNodePublishedVolumes() map[string]CSIVolume { return f.nodePublishedVolumes @@ -277,42 +264,13 @@ func (f *NodeClient) NodeGetCapabilities(ctx context.Context, in *csipb.NodeGetC }, }) } - - if f.volumeStatsSet { - resp.Capabilities = append(resp.Capabilities, &csipb.NodeServiceCapability{ - Type: &csipb.NodeServiceCapability_Rpc{ - Rpc: &csipb.NodeServiceCapability_RPC{ - Type: csipb.NodeServiceCapability_RPC_GET_VOLUME_STATS, - }, - }, - }) - } return resp, nil } -/* // NodeGetVolumeStats implements csi method func (f *NodeClient) NodeGetVolumeStats(ctx context.Context, in *csipb.NodeGetVolumeStatsRequest, opts ...grpc.CallOption) (*csipb.NodeGetVolumeStatsResponse, error) { return nil, nil } -*/ - -// NodeGetVolumeStats implements csi method -func (f *NodeClient) NodeGetVolumeStats(ctx context.Context, req *csipb.NodeGetVolumeStatsRequest, opts ...grpc.CallOption) (*csipb.NodeGetVolumeStatsResponse, error) { - if f.nextErr != nil { - return nil, f.nextErr - } - if req.GetVolumeId() == "" { - return nil, errors.New("missing volume id") - } - if req.GetVolumePath() == "" { - return nil, errors.New("missing Volume path") - } - if f.nodeVolumeStatsResp != nil { - return f.nodeVolumeStatsResp, nil - } - return &csipb.NodeGetVolumeStatsResponse{}, nil -} // ControllerClient represents a CSI Controller client type ControllerClient struct { diff --git a/vendor/k8s.io/kubernetes/pkg/volume/emptydirquota/empty_dir_quota.go b/vendor/k8s.io/kubernetes/pkg/volume/emptydirquota/empty_dir_quota.go deleted file mode 100644 index e7fc24606..000000000 --- a/vendor/k8s.io/kubernetes/pkg/volume/emptydirquota/empty_dir_quota.go +++ /dev/null @@ -1,92 +0,0 @@ -package emptydirquota - -import ( - "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - "k8s.io/kubernetes/pkg/volume" -) - -var _ volume.VolumePlugin = &EmptyDirQuotaPlugin{} -var _ volume.Mounter = &emptyDirQuotaMounter{} - -// EmptyDirQuotaPlugin is a simple wrapper for the k8s empty dir plugin mounter. -type EmptyDirQuotaPlugin struct { - // the actual k8s emptyDir volume plugin we will pass method calls to. - // TODO: do we need to implement unmount - volume.VolumePlugin - - // The default quota to apply to each node: - Quota resource.Quantity - - // QuotaApplicator is passed to actual volume mounters so they can apply - // quota for the supported filesystem. - QuotaApplicator QuotaApplicator -} - -func (plugin *EmptyDirQuotaPlugin) NewMounter(spec *volume.Spec, pod *v1.Pod, opts volume.VolumeOptions) (volume.Mounter, error) { - volMounter, err := plugin.VolumePlugin.NewMounter(spec, pod, opts) - if err != nil { - return volMounter, err - } - - // Because we cannot access several fields on the k8s emptyDir struct, and - // we do not wish to modify k8s code for this, we have to grab a reference - // to them ourselves. - // This logic is the same as k8s.io/kubernetes/pkg/volume/empty_dir: - medium := v1.StorageMediumDefault - if spec.Volume.EmptyDir != nil { // Support a non-specified source as EmptyDir. - medium = spec.Volume.EmptyDir.Medium - } - - // Wrap the mounter object with our own to add quota functionality: - wrapperEmptyDir := &emptyDirQuotaMounter{ - wrapped: volMounter, - pod: pod, - medium: medium, - quota: plugin.Quota, - quotaApplicator: plugin.QuotaApplicator, - } - return wrapperEmptyDir, err -} - -// emptyDirQuotaMounter is a wrapper plugin mounter for the k8s empty dir mounter itself. -// This plugin just extends and adds the functionality to apply a -// quota for the pods FSGroup on an XFS filesystem. -type emptyDirQuotaMounter struct { - wrapped volume.Mounter - pod *v1.Pod - medium v1.StorageMedium - quota resource.Quantity - quotaApplicator QuotaApplicator -} - -func (edq *emptyDirQuotaMounter) CanMount() error { - return edq.wrapped.CanMount() -} - -// Must implement SetUp as well, otherwise the internal Mounter.SetUp calls its -// own SetUpAt method, not the one we need. - -func (edq *emptyDirQuotaMounter) SetUp(fsGroup *int64) error { - return edq.SetUpAt(edq.GetPath(), fsGroup) -} - -func (edq *emptyDirQuotaMounter) SetUpAt(dir string, fsGroup *int64) error { - err := edq.wrapped.SetUpAt(dir, fsGroup) - if err == nil { - err = edq.quotaApplicator.Apply(dir, edq.medium, edq.pod, fsGroup, edq.quota) - } - return err -} - -func (edq *emptyDirQuotaMounter) GetAttributes() volume.Attributes { - return edq.wrapped.GetAttributes() -} - -func (edq *emptyDirQuotaMounter) GetMetrics() (*volume.Metrics, error) { - return edq.wrapped.GetMetrics() -} - -func (edq *emptyDirQuotaMounter) GetPath() string { - return edq.wrapped.GetPath() -} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/emptydirquota/quota.go b/vendor/k8s.io/kubernetes/pkg/volume/emptydirquota/quota.go deleted file mode 100644 index a065c04f7..000000000 --- a/vendor/k8s.io/kubernetes/pkg/volume/emptydirquota/quota.go +++ /dev/null @@ -1,247 +0,0 @@ -package emptydirquota - -import ( - "bytes" - "fmt" - "os/exec" - "strings" - - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - "k8s.io/klog" -) - -// QuotaApplicator is used to apply quota to an emptyDir volume. -type QuotaApplicator interface { - // Apply the quota to the given EmptyDir path: - Apply(dir string, medium v1.StorageMedium, pod *v1.Pod, fsGroup *int64, quota resource.Quantity) error -} - -type xfsQuotaApplicator struct { - cmdRunner quotaCommandRunner -} - -// NewQuotaApplicator checks the filesystem type for the configured volume directory -// and returns an appropriate implementation of the quota applicator. If the filesystem -// does not appear to be a type we support quotas on, an error is returned. -func NewQuotaApplicator(volumeDirectory string) (QuotaApplicator, error) { - - cmdRunner := &realQuotaCommandRunner{} - isXFS, err := isXFS(cmdRunner, volumeDirectory) - if err != nil { - return nil, err - } - - if isXFS { - mountedWithGrpquota, mountErr := isMountedWithGrpquota(cmdRunner, volumeDirectory) - if mountErr != nil { - return nil, mountErr - } - if !mountedWithGrpquota { - return nil, fmt.Errorf("%s is not on a filesystem mounted with the grpquota option", volumeDirectory) - } - - // Make sure xfs_quota is on the PATH, otherwise we're not going to get very far: - _, pathErr := exec.LookPath("xfs_quota") - if pathErr != nil { - return nil, pathErr - } - - return &xfsQuotaApplicator{ - cmdRunner: cmdRunner, - }, nil - } - - // If we were unable to find a quota supported filesystem type, return an error: - return nil, fmt.Errorf("%s is not on a supported filesystem for local volume quota", volumeDirectory) -} - -// quotaCommandRunner interface is used to abstract the actual running of -// commands so we can unit test more behavior. -type quotaCommandRunner interface { - RunFSTypeCommand(dir string) (string, error) - RunFSDeviceCommand(dir string) (string, error) - RunApplyQuotaCommand(fsDevice string, quota resource.Quantity, fsGroup int64) (string, string, error) - RunMountOptionsCommand() (string, error) -} - -type realQuotaCommandRunner struct { -} - -func (cr *realQuotaCommandRunner) RunFSTypeCommand(dir string) (string, error) { - args := []string{"-f", "-c", "%T", dir} - outBytes, err := exec.Command("stat", args...).Output() - return string(outBytes), err -} - -func (cr *realQuotaCommandRunner) RunFSDeviceCommand(dir string) (string, error) { - outBytes, err := exec.Command("df", "--output=source", dir).Output() - return string(outBytes), err -} - -func (cr *realQuotaCommandRunner) RunApplyQuotaCommand(fsDevice string, quota resource.Quantity, fsGroup int64) (string, string, error) { - args := []string{"-x", "-c", - fmt.Sprintf("limit -g bsoft=%d bhard=%d %d", quota.Value(), quota.Value(), fsGroup), - fsDevice, - } - - cmd := exec.Command("xfs_quota", args...) - var stderr bytes.Buffer - cmd.Stderr = &stderr - - err := cmd.Run() - klog.V(5).Infof("Ran: xfs_quota %s", args) - return "", stderr.String(), err -} - -func (cr *realQuotaCommandRunner) RunMountOptionsCommand() (string, error) { - outBytes, err := exec.Command("mount").Output() - return string(outBytes), err -} - -// Apply sets the actual quota on a device for an emptyDir volume if possible. Will return an error -// if anything goes wrong during the process. (not an XFS filesystem, etc) If the volume medium is set -// to memory, or no FSGroup is provided (indicating the request matched an SCC set to RunAsAny), this -// method will effectively no-op. -func (xqa *xfsQuotaApplicator) Apply(dir string, medium v1.StorageMedium, pod *v1.Pod, fsGroup *int64, quota resource.Quantity) error { - - if medium == v1.StorageMediumMemory { - klog.V(5).Infof("Skipping quota application due to memory storage medium.") - return nil - } - isXFS, err := isXFS(xqa.cmdRunner, dir) - if err != nil { - return err - } - if !isXFS { - return fmt.Errorf("unable to apply quota: %s is not on an XFS filesystem", dir) - } - if fsGroup == nil { - // This indicates the operation matched an SCC with FSGroup strategy RunAsAny. - // Not an error condition. - klog.V(5).Infof("Unable to apply XFS quota, no FSGroup specified.") - return nil - } - - volDevice, err := xqa.getFSDevice(dir) - if err != nil { - return err - } - - err = xqa.applyQuota(volDevice, quota, *fsGroup) - if err != nil { - return err - } - - return nil -} - -func (xqa *xfsQuotaApplicator) applyQuota(volDevice string, quota resource.Quantity, fsGroupID int64) error { - _, stderr, err := xqa.cmdRunner.RunApplyQuotaCommand(volDevice, quota, fsGroupID) - - // xfs_quota is very happy to fail but return a success code, likely due to its - // interactive shell approach. Grab stderr, if we see anything written to it we'll - // consider this an error. - // - // If we exit non-zero *and* write to stderr, stderr is likely to have the details on what - // actually went wrong, so we'll use this as the error message instead. - if len(stderr) > 0 { - return fmt.Errorf("error applying quota: %s", stderr) - } - - if err != nil { - return fmt.Errorf("error applying quota: %v", err) - } - - klog.V(4).Infof("XFS quota applied: device=%s, quota=%d, fsGroup=%d", volDevice, quota.Value(), fsGroupID) - return nil -} - -func (xqa *xfsQuotaApplicator) getFSDevice(dir string) (string, error) { - return getFSDevice(dir, xqa.cmdRunner) -} - -// GetFSDevice returns the filesystem device for a given path. To do this we -// run df on the path, returning a header line and the line we're -// interested in. The first string token in that line will be the device name. -func GetFSDevice(dir string) (string, error) { - return getFSDevice(dir, &realQuotaCommandRunner{}) -} - -func getFSDevice(dir string, cmdRunner quotaCommandRunner) (string, error) { - out, err := cmdRunner.RunFSDeviceCommand(dir) - if err != nil { - return "", fmt.Errorf("unable to find filesystem device for dir %s: %s", dir, err) - } - fsDevice, parseErr := parseFSDevice(out) - return fsDevice, parseErr -} - -func parseFSDevice(dfOutput string) (string, error) { - // Need to skip the df header line starting with "Filesystem", and grab the first - // word of the following line which will be our device path. - lines := strings.Split(dfOutput, "\n") - if len(lines) < 2 { - return "", fmt.Errorf("%s: %s", unexpectedLineCountError, dfOutput) - } - - fsDevice := strings.Split(lines[1], " ")[0] - // Make sure it looks like a device: - if !strings.HasPrefix(fsDevice, "/") { - return "", fmt.Errorf("%s: %s", invalidFilesystemError, fsDevice) - } - - return fsDevice, nil -} - -// isMountedWithGrpquota checks if the device the given directory is on has been -// mounted with the grpquota option. -func isMountedWithGrpquota(cmdRunner quotaCommandRunner, dir string) (bool, error) { - fsDevice, fsDeviceErr := getFSDevice(dir, cmdRunner) - if fsDeviceErr != nil { - return false, fsDeviceErr - } - - out, err := cmdRunner.RunMountOptionsCommand() - if err != nil { - return false, fmt.Errorf("unable to check mount options for dir %s: %s", dir, err) - } - - // Keep this simple, locate a line in the mount output that matches the fs device - // the directory is on. Once found, make sure "grpquota" is present in the line. - // "gquota" is an alias for "grpquota", but if used "grpquota" will be what appears in - // mount output. (however check for both just in case) - // - // Use of "noquota" or "gqnoenforce" is mutually exclusive with the above, if some - // combination of these are specified, the last one wins, but there should be no way for - // them to all appear in the mount output, thus we just need to see one of the positive - // aliases. - lines := strings.Split(out, "\n") - for _, line := range lines { - tokens := strings.Split(line, " ") - if len(tokens) > 0 && tokens[0] == fsDevice { - if strings.Contains(line, "grpquota") || strings.Contains(line, "gquota") { - return true, nil - } - return false, nil - } - } - return false, fmt.Errorf("unable to find device %s in mount output", fsDevice) -} - -// isXFS checks if a dir is on an XFS filesystem. -func isXFS(cmdRunner quotaCommandRunner, dir string) (bool, error) { - out, err := cmdRunner.RunFSTypeCommand(dir) - if err != nil { - return false, fmt.Errorf("unable to check filesystem type for emptydir volume %s: %s", dir, err) - } - if strings.TrimSpace(out) == "xfs" { - return true, nil - } - return false, nil -} - -const ( - invalidFilesystemError = "found invalid filesystem device" - unexpectedLineCountError = "unexpected line count in df output" -) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/emptydirquota/quota_test.go b/vendor/k8s.io/kubernetes/pkg/volume/emptydirquota/quota_test.go deleted file mode 100644 index ed599b3e7..000000000 --- a/vendor/k8s.io/kubernetes/pkg/volume/emptydirquota/quota_test.go +++ /dev/null @@ -1,333 +0,0 @@ -package emptydirquota - -import ( - "errors" - "fmt" - "strings" - "testing" - - kapiv1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" -) - -const expectedDevice = "/dev/sdb2" - -func TestParseFSDevice(t *testing.T) { - tests := map[string]struct { - dfOutput string - expDevice string - expError string - }{ - "happy path": { - dfOutput: "Filesystem\n/dev/sdb2", - expDevice: expectedDevice, - }, - "happy path multi-token": { - dfOutput: "Filesystem\n/dev/sdb2 16444592 8 16444584 1% /var/openshift.local.volumes/", - expDevice: expectedDevice, - }, - "invalid tmpfs": { - dfOutput: "Filesystem\ntmpfs", - expError: invalidFilesystemError, - }, - "invalid empty": { - dfOutput: "", - expError: unexpectedLineCountError, - }, - "invalid one line": { - dfOutput: "Filesystem\n", - expError: invalidFilesystemError, - }, - "invalid blank second line": { - dfOutput: "Filesystem\n\n", - expError: invalidFilesystemError, - }, - "invalid too many lines": { - dfOutput: "Filesystem\n/dev/sdb2\ntmpfs\nwhatisgoingon", - expDevice: expectedDevice, - }, - } - for name, test := range tests { - t.Logf("running TestParseFSDevice: %s", name) - device, err := parseFSDevice(test.dfOutput) - if test.expDevice != "" && test.expDevice != device { - t.Errorf("Unexpected filesystem device, expected: %s, got: %s", test.expDevice, device) - } - if test.expError != "" && (err == nil || !strings.Contains(err.Error(), test.expError)) { - t.Errorf("Unexpected filesystem error, expected: %s, got: %s", test.expError, err) - } - } -} - -// Avoid running actual commands to manage XFS quota: -type mockQuotaCommandRunner struct { - RunFSDeviceCommandResponse *cmdResponse - RunFSTypeCommandResponse *cmdResponse - RunMountOptionsCommandResponse *cmdResponse - - RanApplyQuotaFSDevice string - RanApplyQuota *resource.Quantity - RanApplyQuotaFSGroup int64 -} - -func (m *mockQuotaCommandRunner) RunFSTypeCommand(dir string) (string, error) { - if m.RunFSTypeCommandResponse != nil { - return m.RunFSTypeCommandResponse.Stdout, m.RunFSTypeCommandResponse.Error - } - return "xfs", nil -} - -func (m *mockQuotaCommandRunner) RunFSDeviceCommand(dir string) (string, error) { - if m.RunFSDeviceCommandResponse != nil { - return m.RunFSDeviceCommandResponse.Stdout, m.RunFSDeviceCommandResponse.Error - } - return "Filesystem\n/dev/sdb2", nil -} - -func (m *mockQuotaCommandRunner) RunApplyQuotaCommand(fsDevice string, quota resource.Quantity, fsGroup int64) (string, string, error) { - // Store these for assertions in tests: - m.RanApplyQuotaFSDevice = fsDevice - m.RanApplyQuota = "a - m.RanApplyQuotaFSGroup = fsGroup - return "", "", nil -} - -func (m *mockQuotaCommandRunner) RunMountOptionsCommand() (string, error) { - return m.RunMountOptionsCommandResponse.Stdout, m.RunMountOptionsCommandResponse.Error -} - -// Small struct for specifying how we want the various quota command runners to -// respond in tests: -type cmdResponse struct { - Stdout string - Stderr string - Error error -} - -func TestApplyQuota(t *testing.T) { - - var defaultFSGroup int64 - defaultFSGroup = 1000050000 - - tests := map[string]struct { - FSGroupID *int64 - Quota string - - FSTypeCmdResponse *cmdResponse - FSDeviceCmdResponse *cmdResponse - ApplyQuotaCmdResponse *cmdResponse - - ExpFSDevice string - ExpError string // sub-string to be searched for in error message - ExpSkipped bool - }{ - "happy path": { - Quota: "512", - FSGroupID: &defaultFSGroup, - }, - "zero quota": { - Quota: "0", - FSGroupID: &defaultFSGroup, - }, - "invalid filesystem device": { - Quota: "512", - FSGroupID: &defaultFSGroup, - FSDeviceCmdResponse: &cmdResponse{ - Stdout: "Filesystem\ntmpfs", - Stderr: "", - Error: nil, - }, - ExpError: invalidFilesystemError, - ExpSkipped: true, - }, - "error checking filesystem device": { - Quota: "512", - FSGroupID: &defaultFSGroup, - FSDeviceCmdResponse: &cmdResponse{ - Stdout: "", - Stderr: "no such file or directory", - Error: errors.New("no such file or directory"), // Would be exit error in real life - }, - ExpError: "no such file or directory", - ExpSkipped: true, - }, - "non-xfs filesystem type": { - Quota: "512", - FSGroupID: &defaultFSGroup, - FSTypeCmdResponse: &cmdResponse{ - Stdout: "ext4", - Stderr: "", - Error: nil, - }, - ExpError: "not on an XFS filesystem", - ExpSkipped: true, - }, - "error checking filesystem type": { - Quota: "512", - FSGroupID: &defaultFSGroup, - FSTypeCmdResponse: &cmdResponse{ - Stdout: "", - Stderr: "no such file or directory", - Error: errors.New("no such file or directory"), // Would be exit error in real life - }, - ExpError: "unable to check filesystem type", - ExpSkipped: true, - }, - // Should result in success, but no quota actually gets applied: - "no FSGroup": { - Quota: "512", - ExpSkipped: true, - }, - } - - for name, test := range tests { - t.Logf("running TestApplyQuota: %s", name) - quotaApplicator := xfsQuotaApplicator{} - // Replace the real command runner with our mock: - mockCmdRunner := mockQuotaCommandRunner{} - quotaApplicator.cmdRunner = &mockCmdRunner - fakeDir := "/var/lib/origin/openshift.local.volumes/pods/d71f6949-cb3f-11e5-aedf-989096de63cb" - - // Configure the default happy path command responses if nothing was specified - // by the test: - if test.FSTypeCmdResponse == nil { - // Configure the default happy path response: - test.FSTypeCmdResponse = &cmdResponse{ - Stdout: "xfs", - Stderr: "", - Error: nil, - } - } - if test.FSDeviceCmdResponse == nil { - test.FSDeviceCmdResponse = &cmdResponse{ - Stdout: "Filesystem\n/dev/sdb2", - Stderr: "", - Error: nil, - } - } - - if test.ApplyQuotaCmdResponse == nil { - test.ApplyQuotaCmdResponse = &cmdResponse{ - Stdout: "", - Stderr: "", - Error: nil, - } - } - - mockCmdRunner.RunFSDeviceCommandResponse = test.FSDeviceCmdResponse - mockCmdRunner.RunFSTypeCommandResponse = test.FSTypeCmdResponse - - quota := resource.MustParse(test.Quota) - err := quotaApplicator.Apply(fakeDir, kapiv1.StorageMediumDefault, &kapiv1.Pod{}, test.FSGroupID, quota) - if test.ExpError == "" && !test.ExpSkipped { - // Expecting success case: - if mockCmdRunner.RanApplyQuotaFSDevice != "/dev/sdb2" { - t.Errorf("failed: '%s', expected quota applied to: %s, got: %s", name, "/dev/sdb2", mockCmdRunner.RanApplyQuotaFSDevice) - } - if mockCmdRunner.RanApplyQuota.Value() != quota.Value() { - t.Errorf("failed: '%s', expected quota: %d, got: %d", name, quota.Value(), - mockCmdRunner.RanApplyQuota.Value()) - } - if mockCmdRunner.RanApplyQuotaFSGroup != *test.FSGroupID { - t.Errorf("failed: '%s', expected FSGroup: %d, got: %d", name, test.FSGroupID, mockCmdRunner.RanApplyQuotaFSGroup) - } - } else if test.ExpError != "" { - // Expecting error case: - if err == nil { - t.Errorf("failed: '%s', expected error but got none", name) - } else if !strings.Contains(err.Error(), test.ExpError) { - t.Errorf("failed: '%s', expected error containing '%s', got: '%s'", name, test.ExpError, err) - } - } - - if test.ExpSkipped { - if mockCmdRunner.RanApplyQuota != nil { - t.Errorf("failed: '%s', expected error but quota was applied", name) - } - if mockCmdRunner.RanApplyQuotaFSGroup != 0 { - t.Errorf("failed: '%s', expected error but quota was applied", name) - } - if mockCmdRunner.RanApplyQuotaFSDevice != "" { - t.Errorf("failed: '%s', expected error but quota was applied", name) - } - } - } -} - -func TestIsMountedWithGrpquota(t *testing.T) { - // Substitute in the actual mount line we're after for each test: - mountOutput := `/dev/mapper/fedora_system-root on / type ext4 (rw,relatime,seclabel,data=ordered) -selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime) -systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=26,pgrp=1,timeout=0,minproto=5,maxproto=5,direct) -debugfs on /sys/kernel/debug type debugfs (rw,relatime,seclabel) -mqueue on /dev/mqueue type mqueue (rw,relatime,seclabel) -hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,seclabel) -tmpfs on /tmp type tmpfs (rw,seclabel) -%s -nfsd on /proc/fs/nfsd type nfsd (rw,relatime) -/dev/sda1 on /boot type ext4 (rw,relatime,seclabel,data=ordered) -/dev/mapper/fedora_system-home on /home type ext4 (rw,relatime,seclabel,data=ordered) -/dev/sdb1 on /storage type btrfs (rw,relatime,seclabel,space_cache,subvolid=5,subvol=/) -` - var fsDevice = "/dev/mapper/openshift--vol--dir" - var volumeDir = "/var/lib/origin/openshift.local.volumes" - - tests := map[string]struct { - MountLine string - ExpectedResult bool - ExpError string // sub-string to be searched for in error message - }{ - "grpquota": { - MountLine: fmt.Sprintf("%s on %s type xfs (rw,relatime,seclabel,attr2,inode64,grpquota)", fsDevice, volumeDir), - ExpectedResult: true, - }, - "gquota": { - // May not be possible in the real world (would show up as grpquota) but just in case: - MountLine: fmt.Sprintf("%s on %s type xfs (rw,relatime,seclabel,attr2,inode64,gquota)", fsDevice, volumeDir), - ExpectedResult: true, - }, - "gqnoenforce": { - MountLine: fmt.Sprintf("%s on %s type xfs (rw,relatime,seclabel,attr2,inode64,gqnoenforce)", fsDevice, volumeDir), - ExpectedResult: false, - }, - "noquota": { - MountLine: fmt.Sprintf("%s on %s type xfs (rw,relatime,seclabel,attr2,inode64,noquota)", fsDevice, volumeDir), - ExpectedResult: false, - }, - "device not in output": { - MountLine: fmt.Sprintf("/dev/sdb1 on %s type xfs (rw,relatime,seclabel,attr2,inode64,noquota)", volumeDir), - ExpectedResult: false, - ExpError: "unable to find device", - }, - } - - for name, test := range tests { - t.Logf("running TestIsMountedWithGrpquota: %s", name) - - mockCmdRunner := &mockQuotaCommandRunner{} - mockCmdRunner.RunMountOptionsCommandResponse = &cmdResponse{ - Stdout: fmt.Sprintf(mountOutput, test.MountLine), - Stderr: "", - Error: nil, - } - mockCmdRunner.RunFSDeviceCommandResponse = &cmdResponse{ - Stdout: fmt.Sprintf("Filesystem\n%s", fsDevice), - Stderr: "", - Error: nil, - } - - mountedWithQuota, err := isMountedWithGrpquota(mockCmdRunner, volumeDir) - if len(test.ExpError) > 0 { - if err == nil { - t.Errorf("%q, expected error but got none", name) - } else if !strings.Contains(err.Error(), test.ExpError) { - t.Errorf("%q, expected error containing %q, got: %q", name, test.ExpError, err) - } - } - - if test.ExpectedResult != mountedWithQuota { - t.Errorf("%q, expected %t, got: %t", name, test.ExpectedResult, mountedWithQuota) - } - - } -} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/testing/testing.go b/vendor/k8s.io/kubernetes/pkg/volume/testing/testing.go index ac6e15361..b7b5396d2 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/testing/testing.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/testing/testing.go @@ -891,11 +891,6 @@ func (fv *FakeVolume) Attach(spec *Spec, nodeName types.NodeName) (string, error if nodeName == UncertainAttachNode { return "/dev/vdb-test", nil } - // even if volume was previously attached to time out, we need to keep returning error - // so as reconciler can not confirm this volume as attached. - if nodeName == TimeoutAttachNode { - return "", fmt.Errorf("Timed out to attach volume %q to node %q", volumeName, nodeName) - } if volumeNode == nodeName || volumeNode == MultiAttachNode || nodeName == MultiAttachNode { return "/dev/vdb-test", nil } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/BUILD index 5e940356c..945d33dfd 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/BUILD @@ -24,7 +24,6 @@ go_test( srcs = ["nestedpendingoperations_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/util/goroutinemap/exponentialbackoff:go_default_library", "//pkg/volume/util/types:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations.go b/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations.go index ee9d11978..d9d277e0b 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations.go @@ -47,11 +47,8 @@ const ( type NestedPendingOperations interface { // Run adds the concatenation of volumeName and podName to the list of // running operations and spawns a new go routine to execute operationFunc. - // If an operation with the same volumeName, same or empty podName - // and same operationName exits, an AlreadyExists or ExponentialBackoff - // error is returned. If an operation with same volumeName and podName - // has ExponentialBackoff error but operationName is different, exponential - // backoff is reset and operation is allowed to proceed. + // If an operation with the same volumeName and same or empty podName + // exists, an AlreadyExists or ExponentialBackoff error is returned. // This enables multiple operations to execute in parallel for the same // volumeName as long as they have different podName. // Once the operation is complete, the go routine is terminated and the @@ -90,7 +87,6 @@ type nestedPendingOperations struct { type operation struct { volumeName v1.UniqueVolumeName podName types.UniquePodName - operationName string operationPending bool expBackoff exponentialbackoff.ExponentialBackoff } @@ -107,19 +103,13 @@ func (grm *nestedPendingOperations) Run( // Operation already exists if previousOp.operationPending { // Operation is pending - operationKey := getOperationKey(volumeName, podName) - return NewAlreadyExistsError(operationKey) + operationName := getOperationName(volumeName, podName) + return NewAlreadyExistsError(operationName) } - operationKey := getOperationKey(volumeName, podName) - backOffErr := previousOp.expBackoff.SafeToRetry(operationKey) - if backOffErr != nil { - if previousOp.operationName == generatedOperations.OperationName { - return backOffErr - } - // previous operation and new operation are different. reset op. name and exp. backoff - grm.operations[previousOpIndex].operationName = generatedOperations.OperationName - grm.operations[previousOpIndex].expBackoff = exponentialbackoff.ExponentialBackoff{} + operationName := getOperationName(volumeName, podName) + if err := previousOp.expBackoff.SafeToRetry(operationName); err != nil { + return err } // Update existing operation to mark as pending. @@ -133,7 +123,6 @@ func (grm *nestedPendingOperations) Run( operationPending: true, volumeName: volumeName, podName: podName, - operationName: generatedOperations.OperationName, expBackoff: exponentialbackoff.ExponentialBackoff{}, }) } @@ -212,8 +201,8 @@ func (grm *nestedPendingOperations) getOperation( } } - logOperationKey := getOperationKey(volumeName, podName) - return 0, fmt.Errorf("Operation %q not found", logOperationKey) + logOperationName := getOperationName(volumeName, podName) + return 0, fmt.Errorf("Operation %q not found", logOperationName) } func (grm *nestedPendingOperations) deleteOperation( @@ -250,9 +239,9 @@ func (grm *nestedPendingOperations) operationComplete( grm.deleteOperation(volumeName, podName) if *err != nil { // Log error - logOperationKey := getOperationKey(volumeName, podName) + logOperationName := getOperationName(volumeName, podName) klog.Errorf("operation %s failed with: %v", - logOperationKey, + logOperationName, *err) } return @@ -262,9 +251,9 @@ func (grm *nestedPendingOperations) operationComplete( existingOpIndex, getOpErr := grm.getOperation(volumeName, podName) if getOpErr != nil { // Failed to find existing operation - logOperationKey := getOperationKey(volumeName, podName) + logOperationName := getOperationName(volumeName, podName) klog.Errorf("Operation %s completed. error: %v. exponentialBackOffOnError is enabled, but failed to get operation to update.", - logOperationKey, + logOperationName, *err) return } @@ -273,10 +262,10 @@ func (grm *nestedPendingOperations) operationComplete( grm.operations[existingOpIndex].operationPending = false // Log error - operationKey := - getOperationKey(volumeName, podName) + operationName := + getOperationName(volumeName, podName) klog.Errorf("%v", grm.operations[existingOpIndex].expBackoff. - GenerateNoRetriesPermittedMsg(operationKey)) + GenerateNoRetriesPermittedMsg(operationName)) } func (grm *nestedPendingOperations) Wait() { @@ -288,7 +277,7 @@ func (grm *nestedPendingOperations) Wait() { } } -func getOperationKey( +func getOperationName( volumeName v1.UniqueVolumeName, podName types.UniquePodName) string { podNameStr := "" if podName != EmptyUniquePodName { @@ -301,8 +290,8 @@ func getOperationKey( } // NewAlreadyExistsError returns a new instance of AlreadyExists error. -func NewAlreadyExistsError(operationKey string) error { - return alreadyExistsError{operationKey} +func NewAlreadyExistsError(operationName string) error { + return alreadyExistsError{operationName} } // IsAlreadyExists returns true if an error returned from @@ -321,7 +310,7 @@ func IsAlreadyExists(err error) bool { // new operation can not be started because an operation with the same operation // name is already executing. type alreadyExistsError struct { - operationKey string + operationName string } var _ error = alreadyExistsError{} @@ -329,5 +318,5 @@ var _ error = alreadyExistsError{} func (err alreadyExistsError) Error() string { return fmt.Sprintf( "Failed to create operation with name %q. An operation with that name is already executing.", - err.operationKey) + err.operationName) } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations_test.go b/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations_test.go index fe52c8977..5865f96c2 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations_test.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/nestedpendingoperations/nestedpendingoperations_test.go @@ -23,7 +23,6 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff" "k8s.io/kubernetes/pkg/volume/util/types" ) @@ -265,47 +264,6 @@ func Test_NewGoRoutineMap_Negative_SecondOpBeforeFirstCompletes(t *testing.T) { } } -func Test_NewGoRoutineMap_Negative_SecondThirdOpWithDifferentNames(t *testing.T) { - // Arrange - grm := NewNestedPendingOperations(true /* exponentialBackOffOnError */) - volumeName := v1.UniqueVolumeName("volume-name") - op1Name := "mount_volume" - operation1 := generateErrorFunc() - err1 := grm.Run(volumeName, "" /* operationSubName */, types.GeneratedOperations{OperationFunc: operation1, OperationName: op1Name}) - if err1 != nil { - t.Fatalf("NewGoRoutine failed. Expected: Actual: <%v>", err1) - } - // Shorter than exponential backoff period, so as to trigger exponential backoff error on second - // operation. - operation2 := generateErrorFunc() - err2 := retryWithExponentialBackOff( - initialOperationWaitTimeShort, - func() (bool, error) { - err := grm.Run(volumeName, - "", /* operationSubName */ - types.GeneratedOperations{OperationFunc: operation2, OperationName: op1Name}) - - if exponentialbackoff.IsExponentialBackoff(err) { - return true, nil - } - return false, nil - }, - ) - - // Assert - if err2 != nil { - t.Fatalf("Expected NewGoRoutine to fail with exponential backoff for operationKey : %s and operationName : %s", volumeName, op1Name) - } - - operation3 := generateNoopFunc() - op3Name := "unmount_volume" - // Act - err3 := grm.Run(volumeName, "" /*pod name*/, types.GeneratedOperations{OperationFunc: operation3, OperationName: op3Name}) - if err3 != nil { - t.Fatalf("NewGoRoutine failed. Expected Actual: <%v>", err3) - } -} - func Test_NewGoRoutineMap_Negative_SecondSubOpBeforeFirstCompletes2(t *testing.T) { // Arrange grm := NewNestedPendingOperations(false /* exponentialBackOffOnError */) @@ -584,12 +542,6 @@ func generatePanicFunc() func() (error, error) { } } -func generateErrorFunc() func() (error, error) { - return func() (error, error) { - return fmt.Errorf("placholder1"), fmt.Errorf("placeholder2") - } -} - func generateNoopFunc() func() (error, error) { return func() (error, error) { return nil, nil } } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go index a28ee07ff..91e482532 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/operationexecutor/operation_generator.go @@ -348,10 +348,12 @@ func (og *operationGenerator) GenerateAttachVolumeFunc( if attachErr != nil { if derr, ok := attachErr.(*volerr.DanglingAttachError); ok { - addErr := actualStateOfWorld.MarkVolumeAsUncertain( + addErr := actualStateOfWorld.MarkVolumeAsAttached( v1.UniqueVolumeName(""), originalSpec, - derr.CurrentNode) + derr.CurrentNode, + derr.DevicePath) + if addErr != nil { klog.Errorf("AttachVolume.MarkVolumeAsAttached failed to fix dangling volume error for volume %q with %s", volumeToAttach.VolumeName, addErr) } @@ -705,7 +707,6 @@ func (og *operationGenerator) GenerateMountVolumeFunc( } return volumetypes.GeneratedOperations{ - OperationName: "volume_mount", OperationFunc: mountVolumeFunc, EventRecorderFunc: eventRecorderFunc, CompleteFunc: util.OperationCompleteHook(util.GetFullQualifiedPluginNameForVolume(volumePluginName, volumeToMount.VolumeSpec), "volume_mount"), @@ -833,7 +834,6 @@ func (og *operationGenerator) GenerateUnmountVolumeFunc( } return volumetypes.GeneratedOperations{ - OperationName: "volume_unmount", OperationFunc: unmountVolumeFunc, CompleteFunc: util.OperationCompleteHook(util.GetFullQualifiedPluginNameForVolume(volumePlugin.GetPluginName(), volumeToUnmount.VolumeSpec), "volume_unmount"), EventRecorderFunc: nil, // nil because we do not want to generate event on error @@ -925,7 +925,6 @@ func (og *operationGenerator) GenerateUnmountDeviceFunc( } return volumetypes.GeneratedOperations{ - OperationName: "unmount_device", OperationFunc: unmountDeviceFunc, CompleteFunc: util.OperationCompleteHook(util.GetFullQualifiedPluginNameForVolume(deviceMountableVolumePlugin.GetPluginName(), deviceToDetach.VolumeSpec), "unmount_device"), EventRecorderFunc: nil, // nil because we do not want to generate event on error diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/types/types.go b/vendor/k8s.io/kubernetes/pkg/volume/util/types/types.go index b5f1009be..9815545ff 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/types/types.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/types/types.go @@ -28,8 +28,6 @@ type UniquePVCName types.UID // GeneratedOperations contains the operation that is created as well as // supporting functions required for the operation executor type GeneratedOperations struct { - // Name of operation - could be used for resetting shared exponential backoff - OperationName string OperationFunc func() (eventErr error, detailedErr error) EventRecorderFunc func(*error) CompleteFunc func(*error) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/vsphere_volume/vsphere_volume_util.go b/vendor/k8s.io/kubernetes/pkg/volume/vsphere_volume/vsphere_volume_util.go index eb0f3ba14..35dacb5ce 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/vsphere_volume/vsphere_volume_util.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/vsphere_volume/vsphere_volume_util.go @@ -23,7 +23,7 @@ import ( "strings" "time" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" cloudprovider "k8s.io/cloud-provider" volumehelpers "k8s.io/cloud-provider/volume/helpers" "k8s.io/klog" @@ -94,12 +94,11 @@ func (util *VsphereDiskUtil) CreateVolume(v *vsphereVolumeProvisioner, selectedZ } capacity := v.options.PVC.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)] - // vSphere works with KiB, but its minimum allocation unit is 1 MiB - volSizeMiB, err := volumehelpers.RoundUpToMiBInt(capacity) + // vSphere works with kilobytes, convert to KiB with rounding up + volSizeKiB, err := volumehelpers.RoundUpToKiBInt(capacity) if err != nil { return nil, err } - volSizeKiB := volSizeMiB * 1024 name := volumeutil.GenerateVolumeName(v.options.ClusterName, v.options.PVName, 255) volumeOptions := &vclib.VolumeOptions{ CapacityKB: volSizeKiB, diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction/admission.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction/admission.go index 166431064..12d7beb5a 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction/admission.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction/admission.go @@ -132,9 +132,7 @@ func (p *podTolerationsPlugin) Admit(a admission.Attributes, o admission.ObjectI }, }) } - // Final merge of tolerations irrespective of pod type, if the user while creating pods gives - // conflicting tolerations(with same key+effect), the existing ones should be overwritten by latest one - pod.Spec.Tolerations = tolerations.MergeTolerations(finalTolerations, []api.Toleration{}) + pod.Spec.Tolerations = finalTolerations return p.Validate(a, o) } diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction/admission_test.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction/admission_test.go index 0b0849c94..7b7d9d880 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction/admission_test.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/podtolerationrestriction/admission_test.go @@ -201,18 +201,6 @@ func TestPodAdmission(t *testing.T) { admit: true, testName: "added memoryPressure/DiskPressure for Burstable pod", }, - { - pod: bestEffortPod, - defaultClusterTolerations: []api.Toleration{}, - namespaceTolerations: []api.Toleration{}, - whitelist: []api.Toleration{}, - podTolerations: []api.Toleration{{Key: "testKey", Operator: "Equal", Value: "testValue", Effect: "NoSchedule", TolerationSeconds: nil}, {Key: "testKey", Operator: "Equal", Value: "testValue1", Effect: "NoSchedule", TolerationSeconds: nil}}, - mergedTolerations: []api.Toleration{ - {Key: "testKey", Operator: "Equal", Value: "testValue1", Effect: "NoSchedule", TolerationSeconds: nil}, - }, - admit: true, - testName: "Besteffort pod should overwrite for conflicting tolerations", - }, { pod: guaranteedPod, defaultClusterTolerations: []api.Toleration{}, diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/admission.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/admission.go index ae039d1f2..16e7e85d1 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/admission.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/priority/admission.go @@ -19,7 +19,6 @@ package priority import ( "fmt" "io" - "strings" schedulingv1beta1 "k8s.io/api/scheduling/v1beta1" "k8s.io/apimachinery/pkg/api/errors" @@ -149,11 +148,7 @@ func priorityClassPermittedInNamespace(priorityClassName string, namespace strin // components. for _, spc := range scheduling.SystemPriorityClasses() { if spc.Name == priorityClassName && namespace != metav1.NamespaceSystem { - // : critical pods may exist in openshift- namespaces - // pending priority and preemption support. - if !strings.HasPrefix(namespace, "openshift-") { - return false - } + return false } } return true diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/admission_test.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/admission_test.go index 8e0600c75..5de5a0eab 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/admission_test.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/admission_test.go @@ -1098,12 +1098,10 @@ func TestAdmitBestEffortQuotaLimitIgnoresBurstable(t *testing.T) { func TestHasUsageStats(t *testing.T) { testCases := map[string]struct { a corev1.ResourceQuota - relevant []corev1.ResourceName expected bool }{ "empty": { a: corev1.ResourceQuota{Status: corev1.ResourceQuotaStatus{Hard: corev1.ResourceList{}}}, - relevant: []corev1.ResourceName{corev1.ResourceMemory}, expected: true, }, "hard-only": { @@ -1115,7 +1113,6 @@ func TestHasUsageStats(t *testing.T) { Used: corev1.ResourceList{}, }, }, - relevant: []corev1.ResourceName{corev1.ResourceMemory}, expected: false, }, "hard-used": { @@ -1129,27 +1126,11 @@ func TestHasUsageStats(t *testing.T) { }, }, }, - relevant: []corev1.ResourceName{corev1.ResourceMemory}, - expected: true, - }, - "hard-used-relevant": { - a: corev1.ResourceQuota{ - Status: corev1.ResourceQuotaStatus{ - Hard: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("1Gi"), - corev1.ResourcePods: resource.MustParse("1"), - }, - Used: corev1.ResourceList{ - corev1.ResourceMemory: resource.MustParse("500Mi"), - }, - }, - }, - relevant: []corev1.ResourceName{corev1.ResourceMemory}, expected: true, }, } for testName, testCase := range testCases { - if result := hasUsageStats(&testCase.a, testCase.relevant); result != testCase.expected { + if result := hasUsageStats(&testCase.a); result != testCase.expected { t.Errorf("%s expected: %v, actual: %v", testName, testCase.expected, result) } } diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/controller.go b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/controller.go index 688e2bace..1c109d271 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/controller.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/admission/resourcequota/controller.go @@ -460,8 +460,8 @@ func CheckRequest(quotas []corev1.ResourceQuota, a admission.Attributes, evaluat if err := evaluator.Constraints(restrictedResources, inputObject); err != nil { return nil, admission.NewForbidden(a, fmt.Errorf("failed quota: %s: %v", resourceQuota.Name, err)) } - if !hasUsageStats(&resourceQuota, restrictedResources) { - return nil, admission.NewForbidden(a, fmt.Errorf("status unknown for quota: %s, resources: %s", resourceQuota.Name, prettyPrintResourceNames(restrictedResources))) + if !hasUsageStats(&resourceQuota) { + return nil, admission.NewForbidden(a, fmt.Errorf("status unknown for quota: %s", resourceQuota.Name)) } interestingQuotaIndexes = append(interestingQuotaIndexes, i) localRestrictedResourcesSet := quota.ToSet(restrictedResources) @@ -702,13 +702,9 @@ func prettyPrintResourceNames(a []corev1.ResourceName) string { return strings.Join(values, ",") } -// hasUsageStats returns true if for each hard constraint in interestingResources there is a value for its current usage -func hasUsageStats(resourceQuota *corev1.ResourceQuota, interestingResources []corev1.ResourceName) bool { - interestingSet := quota.ToSet(interestingResources) +// hasUsageStats returns true if for each hard constraint there is a value for its current usage +func hasUsageStats(resourceQuota *corev1.ResourceQuota) bool { for resourceName := range resourceQuota.Status.Hard { - if !interestingSet.Has(string(resourceName)) { - continue - } if _, found := resourceQuota.Status.Used[resourceName]; !found { return false } diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/patch_policy.go b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/patch_policy.go deleted file mode 100644 index 8f91d44c9..000000000 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/patch_policy.go +++ /dev/null @@ -1,65 +0,0 @@ -package bootstrappolicy - -import ( - rbacv1 "k8s.io/api/rbac/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - rbacv1helpers "k8s.io/kubernetes/pkg/apis/rbac/v1" -) - -var ClusterRoles = clusterRoles - -func OpenshiftClusterRoles() []rbacv1.ClusterRole { - const ( - // These are valid under the "nodes" resource - NodeMetricsSubresource = "metrics" - NodeStatsSubresource = "stats" - NodeSpecSubresource = "spec" - NodeLogSubresource = "log" - ) - - roles := clusterRoles() - roles = append(roles, []rbacv1.ClusterRole{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "system:node-admin", - }, - Rules: []rbacv1.PolicyRule{ - // Allow read-only access to the API objects - rbacv1helpers.NewRule(Read...).Groups(legacyGroup).Resources("nodes").RuleOrDie(), - // Allow all API calls to the nodes - rbacv1helpers.NewRule("proxy").Groups(legacyGroup).Resources("nodes").RuleOrDie(), - rbacv1helpers.NewRule("*").Groups(legacyGroup).Resources("nodes/proxy", "nodes/"+NodeMetricsSubresource, "nodes/"+NodeSpecSubresource, "nodes/"+NodeStatsSubresource, "nodes/"+NodeLogSubresource).RuleOrDie(), - }, - }, - { - ObjectMeta: metav1.ObjectMeta{ - Name: "system:node-reader", - }, - Rules: []rbacv1.PolicyRule{ - // Allow read-only access to the API objects - rbacv1helpers.NewRule(Read...).Groups(legacyGroup).Resources("nodes").RuleOrDie(), - // Allow read access to node metrics - rbacv1helpers.NewRule("get").Groups(legacyGroup).Resources("nodes/"+NodeMetricsSubresource, "nodes/"+NodeSpecSubresource).RuleOrDie(), - // Allow read access to stats - // Node stats requests are submitted as POSTs. These creates are non-mutating - rbacv1helpers.NewRule("get", "create").Groups(legacyGroup).Resources("nodes/" + NodeStatsSubresource).RuleOrDie(), - // TODO: expose other things like /healthz on the node once we figure out non-resource URL policy across systems - }, - }, - }...) - - addClusterRoleLabel(roles) - return roles -} - -var ClusterRoleBindings = clusterRoleBindings - -func OpenshiftClusterRoleBindings() []rbacv1.ClusterRoleBinding { - bindings := clusterRoleBindings() - bindings = append(bindings, []rbacv1.ClusterRoleBinding{ - rbacv1helpers.NewClusterBinding("system:node-admin").Users("system:master", "system:kube-apiserver").Groups("system:node-admins").BindingOrDie(), - }...) - - addClusterRoleBindingLabel(bindings) - return bindings -} diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go index 302902a54..f03718127 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go @@ -182,8 +182,8 @@ func NodeRules() []rbacv1.PolicyRule { return nodePolicyRules } -// clusterRoles returns the cluster roles to bootstrap an API server with -func clusterRoles() []rbacv1.ClusterRole { +// ClusterRoles returns the cluster roles to bootstrap an API server with +func ClusterRoles() []rbacv1.ClusterRole { roles := []rbacv1.ClusterRole{ { // a "root" role which can do absolutely anything @@ -205,16 +205,6 @@ func clusterRoles() []rbacv1.ClusterRole { ).RuleOrDie(), }, }, - { - // a role which provides unauthenticated access to /readyz. - // TODO: integrate into system:public-info-viewer (new in 1.14) when upstreaming - ObjectMeta: metav1.ObjectMeta{Name: "system:openshift:public-info-viewer"}, - Rules: []rbacv1.PolicyRule{ - rbacv1helpers.NewRule("get").URLs( - "/readyz", - ).RuleOrDie(), - }, - }, { // a role which provides minimal resource access to allow a "normal" user to learn information about themselves ObjectMeta: metav1.ObjectMeta{Name: "system:basic-user"}, @@ -539,14 +529,12 @@ func clusterRoles() []rbacv1.ClusterRole { const systemNodeRoleName = "system:node" // ClusterRoleBindings return default rolebindings to the default roles -func clusterRoleBindings() []rbacv1.ClusterRoleBinding { +func ClusterRoleBindings() []rbacv1.ClusterRoleBinding { rolebindings := []rbacv1.ClusterRoleBinding{ rbacv1helpers.NewClusterBinding("cluster-admin").Groups(user.SystemPrivilegedGroup).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:discovery").Groups(user.AllAuthenticated).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:basic-user").Groups(user.AllAuthenticated).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:public-info-viewer").Groups(user.AllAuthenticated, user.AllUnauthenticated).BindingOrDie(), - // TODO: integrate into system:public-info-viewer (new in 1.14) when upstreaming - rbacv1helpers.NewClusterBinding("system:openshift:public-info-viewer").Groups(user.AllAuthenticated, user.AllUnauthenticated).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:basic-user").Groups(user.AllAuthenticated, user.AllUnauthenticated).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:node-proxier").Users(user.KubeProxy).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:kube-controller-manager").Users(user.KubeControllerManager).BindingOrDie(), rbacv1helpers.NewClusterBinding("system:kube-dns").SAs("kube-system", "kube-dns").BindingOrDie(), diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-role-bindings.yaml b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-role-bindings.yaml index 371036e04..a41fcf20c 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-role-bindings.yaml +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-role-bindings.yaml @@ -51,9 +51,6 @@ items: - apiGroup: rbac.authorization.k8s.io kind: Group name: system:authenticated - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:unauthenticated - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: @@ -152,26 +149,6 @@ items: - apiGroup: rbac.authorization.k8s.io kind: User name: system:kube-proxy -- apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRoleBinding - metadata: - annotations: - rbac.authorization.kubernetes.io/autoupdate: "true" - creationTimestamp: null - labels: - kubernetes.io/bootstrapping: rbac-defaults - name: system:openshift:public-info-viewer - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: system:openshift:public-info-viewer - subjects: - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:authenticated - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:unauthenticated - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: diff --git a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-roles.yaml b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-roles.yaml index 0f74c2b8a..3cb0d018d 100644 --- a/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-roles.yaml +++ b/vendor/k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/testdata/cluster-roles.yaml @@ -1112,20 +1112,6 @@ items: - create - patch - update -- apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRole - metadata: - annotations: - rbac.authorization.kubernetes.io/autoupdate: "true" - creationTimestamp: null - labels: - kubernetes.io/bootstrapping: rbac-defaults - name: system:openshift:public-info-viewer - rules: - - nonResourceURLs: - - /readyz - verbs: - - get - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/generated.proto b/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/generated.proto index 4ea31646c..b9d569f5f 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/generated.proto +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/generated.proto @@ -2126,9 +2126,6 @@ message NodeStatus { // List of addresses reachable to the node. // Queried from cloud provider, if available. // More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses - // Note: This field is declared as mergeable, but the merge key is not sufficiently - // unique, which can cause data corruption when it is merged. Callers should instead - // use a full-replacement patch. See http://pr.k8s.io/79391 for an example. // +optional // +patchMergeKey=type // +patchStrategy=merge diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/types.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/types.go index a390410b3..3af134400 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/types.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/types.go @@ -4041,9 +4041,6 @@ type NodeStatus struct { // List of addresses reachable to the node. // Queried from cloud provider, if available. // More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses - // Note: This field is declared as mergeable, but the merge key is not sufficiently - // unique, which can cause data corruption when it is merged. Callers should instead - // use a full-replacement patch. See http://pr.k8s.io/79391 for an example. // +optional // +patchMergeKey=type // +patchStrategy=merge diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go index abef2c7d0..2c5b04f29 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -1128,7 +1128,7 @@ var map_NodeStatus = map[string]string{ "allocatable": "Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.", "phase": "NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.", "conditions": "Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition", - "addresses": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses Note: This field is declared as mergeable, but the merge key is not sufficiently unique, which can cause data corruption when it is merged. Callers should instead use a full-replacement patch. See http://pr.k8s.io/79391 for an example.", + "addresses": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses", "daemonEndpoints": "Endpoints of daemons running on the Node.", "nodeInfo": "Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info", "images": "List of container images on this node", diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/extensions/v1beta1/types.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/extensions/v1beta1/types.go index 562d7742a..c34ea599d 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/extensions/v1beta1/types.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/api/extensions/v1beta1/types.go @@ -1186,7 +1186,6 @@ type PodSecurityPolicyList struct { Items []PodSecurityPolicy `json:"items" protobuf:"bytes,2,rep,name=items"` } -// +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // DEPRECATED 1.9 - This group version of NetworkPolicy is deprecated by networking/v1/NetworkPolicy. diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/hack/openapi-violation.list b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/hack/openapi-violation.list deleted file mode 100644 index c211037ba..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/hack/openapi-violation.list +++ /dev/null @@ -1,7 +0,0 @@ -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,APIResourceList,APIResources -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,Duration,Duration -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,InternalEvent,Object -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,InternalEvent,Type -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,MicroTime,Time -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,StatusCause,Type -API rule violation: names_match,k8s.io/apimachinery/pkg/apis/meta/v1,Time,Time diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD index 377bde148..c7378143b 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/BUILD @@ -52,9 +52,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/versioning:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/waitgroup:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/version:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", "//staging/src/k8s.io/apiserver/pkg/authorization/authorizer:go_default_library", @@ -69,7 +67,6 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library", "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/server/filters:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go index 28b5741df..a223d41ac 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/apiserver.go @@ -19,7 +19,6 @@ package apiserver import ( "fmt" "net/http" - "strings" "time" "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions" @@ -37,11 +36,9 @@ import ( apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features" "k8s.io/apiextensions-apiserver/pkg/registry/customresourcedefinition" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" - "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/version" "k8s.io/apiserver/pkg/endpoints/discovery" @@ -51,7 +48,6 @@ import ( serverstorage "k8s.io/apiserver/pkg/server/storage" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/apiserver/pkg/util/webhook" - "k8s.io/klog" ) var ( @@ -191,7 +187,6 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) c.ExtraConfig.AuthResolverWrapper, c.ExtraConfig.MasterCount, s.GenericAPIServer.Authorizer, - c.GenericConfig.RequestTimeout, ) if err != nil { return nil, err @@ -226,58 +221,6 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) go finalizingController.Run(5, context.StopCh) return nil }) - s.GenericAPIServer.AddPostStartHookOrDie("crd-discovery-available", func(context genericapiserver.PostStartHookContext) error { - if true { - return nil - } - return wait.PollImmediateUntil(100*time.Millisecond, func() (bool, error) { - // only check if we have a valid list for a given resourceversion - if !s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions().Informer().HasSynced() { - return false, nil - } - - // The returned group and resource lists might be non-nil with partial results even in the - // case of non-nil error. If API aggregation fails, we still want our other discovery information because the CRDs - // may all be present. - _, serverGroupsAndResources, discoveryErr := crdClient.Discovery().ServerGroupsAndResources() - if discoveryErr != nil { - klog.V(2).Info(discoveryErr) - } - - serverCRDs, err := s.Informers.Apiextensions().InternalVersion().CustomResourceDefinitions().Lister().List(labels.Everything()) - if err != nil { - return false, err - } - crdGroupsAndResources := sets.NewString() - for _, crd := range serverCRDs { - // Skip not active CRD - if !apiextensions.IsCRDConditionTrue(crd, apiextensions.Established) { - continue - } - for _, version := range crd.Spec.Versions { - // Skip versions that are not served - if !version.Served { - continue - } - crdGroupsAndResources.Insert(fmt.Sprintf("%s.%s.%s", crd.Spec.Names.Plural, version.Name, crd.Spec.Group)) - } - } - - discoveryGroupsAndResources := sets.NewString() - for _, resourceList := range serverGroupsAndResources { - for _, apiResource := range resourceList.APIResources { - group, version := splitGroupVersion(resourceList.GroupVersion) - discoveryGroupsAndResources.Insert(fmt.Sprintf("%s.%s.%s", apiResource.Name, version, group)) - } - } - if !discoveryGroupsAndResources.HasAll(crdGroupsAndResources.List()...) { - klog.Infof("waiting for CRD resources in discovery: %#v", crdGroupsAndResources.Difference(discoveryGroupsAndResources)) - return false, nil - } - return true, nil - }, context.StopCh) - }) - // we don't want to report healthy until we can handle all CRDs that have already been registered. Waiting for the informer // to sync makes sure that the lister will be valid before we begin. There may still be races for CRDs added after startup, // but we won't go healthy until we can handle the ones already present. @@ -290,16 +233,6 @@ func (c completedConfig) New(delegationTarget genericapiserver.DelegationTarget) return s, nil } -func splitGroupVersion(gv string) (group string, version string) { - ss := strings.SplitN(gv, "/", 2) - if len(ss) == 1 { - version = ss[0] - } else { - group, version = ss[0], ss[1] - } - return -} - func DefaultAPIResourceConfigSource() *serverstorage.ResourceConfig { ret := serverstorage.NewResourceConfig() // NOTE: GroupVersions listed here will be enabled by default. Don't put alpha versions in the list. diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go index df66dbf90..c5c9a7322 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/customresource_handler.go @@ -52,8 +52,6 @@ import ( "k8s.io/apimachinery/pkg/runtime/serializer/versioning" "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/sets" - utilwaitgroup "k8s.io/apimachinery/pkg/util/waitgroup" "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/authorization/authorizer" "k8s.io/apiserver/pkg/endpoints/handlers" @@ -64,7 +62,6 @@ import ( "k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/registry/generic" genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" - genericfilters "k8s.io/apiserver/pkg/server/filters" "k8s.io/apiserver/pkg/storage/storagebackend" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/apiserver/pkg/util/webhook" @@ -103,9 +100,6 @@ type crdHandler struct { // so that we can do create on update. authorizer authorizer.Authorizer - - // request timeout we should delay storage teardown for - requestTimeout time.Duration } // crdInfo stores enough information to serve the storage for the custom resource @@ -129,8 +123,6 @@ type crdInfo struct { // storageVersion is the CRD version used when storing the object in etcd. storageVersion string - - waitGroup *utilwaitgroup.SafeWaitGroup } // crdStorageMap goes from customresourcedefinition to its storage @@ -147,8 +139,7 @@ func NewCustomResourceDefinitionHandler( serviceResolver webhook.ServiceResolver, authResolverWrapper webhook.AuthenticationInfoResolverWrapper, masterCount int, - authorizer authorizer.Authorizer, - requestTimeout time.Duration) (*crdHandler, error) { + authorizer authorizer.Authorizer) (*crdHandler, error) { ret := &crdHandler{ versionDiscoveryHandler: versionDiscoveryHandler, groupDiscoveryHandler: groupDiscoveryHandler, @@ -160,7 +151,6 @@ func NewCustomResourceDefinitionHandler( establishingController: establishingController, masterCount: masterCount, authorizer: authorizer, - requestTimeout: requestTimeout, } crdInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ UpdateFunc: ret.updateCustomResourceDefinition, @@ -179,11 +169,6 @@ func NewCustomResourceDefinitionHandler( return ret, nil } -// watches are expected to handle storage disruption gracefully, -// both on the server-side (by terminating the watch connection) -// and on the client side (by restarting the watch) -var longRunningFilter = genericfilters.BasicLongRunningRequestCheck(sets.NewString("watch"), sets.NewString()) - func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { ctx := req.Context() requestInfo, ok := apirequest.RequestInfoFrom(ctx) @@ -253,7 +238,7 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { supportedTypes = append(supportedTypes, string(types.ApplyPatchType)) } - var handlerFunc http.HandlerFunc + var handler http.HandlerFunc subresources, err := apiextensions.GetSubresourcesForVersion(crd, requestInfo.APIVersion) if err != nil { utilruntime.HandleError(err) @@ -262,19 +247,18 @@ func (r *crdHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { } switch { case subresource == "status" && subresources != nil && subresources.Status != nil: - handlerFunc = r.serveStatus(w, req, requestInfo, crdInfo, terminating, supportedTypes) + handler = r.serveStatus(w, req, requestInfo, crdInfo, terminating, supportedTypes) case subresource == "scale" && subresources != nil && subresources.Scale != nil: - handlerFunc = r.serveScale(w, req, requestInfo, crdInfo, terminating, supportedTypes) + handler = r.serveScale(w, req, requestInfo, crdInfo, terminating, supportedTypes) case len(subresource) == 0: - handlerFunc = r.serveResource(w, req, requestInfo, crdInfo, terminating, supportedTypes) + handler = r.serveResource(w, req, requestInfo, crdInfo, terminating, supportedTypes) default: http.Error(w, "the server could not find the requested resource", http.StatusNotFound) } - if handlerFunc != nil { - handlerFunc = metrics.InstrumentHandlerFunc(verb, requestInfo.APIGroup, requestInfo.APIVersion, resource, subresource, scope, metrics.APIServerComponent, handlerFunc) - handler := genericfilters.WithWaitGroup(handlerFunc, longRunningFilter, crdInfo.waitGroup) - handler.ServeHTTP(w, req) + if handler != nil { + handler = metrics.InstrumentHandlerFunc(verb, requestInfo.APIGroup, requestInfo.APIVersion, resource, subresource, scope, metrics.APIServerComponent, handler) + handler(w, req) return } } @@ -381,18 +365,18 @@ func (r *crdHandler) updateCustomResourceDefinition(oldObj, newObj interface{}) klog.V(4).Infof("Updating customresourcedefinition %s", oldCRD.Name) - if oldInfo, ok := storageMap[types.UID(oldCRD.UID)]; ok { - // Copy because we cannot write to storageMap without a race - // as it is used without locking elsewhere. - storageMap2 := storageMap.clone() - - // Remove from the CRD info map and store the map + // Copy because we cannot write to storageMap without a race + // as it is used without locking elsewhere. + storageMap2 := storageMap.clone() + if oldInfo, ok := storageMap2[types.UID(oldCRD.UID)]; ok { + for _, storage := range oldInfo.storages { + // destroy only the main storage. Those for the subresources share cacher and etcd clients. + storage.CustomResource.DestroyFunc() + } delete(storageMap2, types.UID(oldCRD.UID)) - r.customStorage.Store(storageMap2) - - // Tear down the old storage - go r.tearDown(oldInfo) } + + r.customStorage.Store(storageMap2) } // removeDeadStorage removes REST storage that isn't being used @@ -406,7 +390,6 @@ func (r *crdHandler) removeDeadStorage() { r.customStorageLock.Lock() defer r.customStorageLock.Unlock() - oldInfos := []*crdInfo{} storageMap := r.customStorage.Load().(crdStorageMap) // Copy because we cannot write to storageMap without a race // as it is used without locking elsewhere @@ -421,38 +404,14 @@ func (r *crdHandler) removeDeadStorage() { } if !found { klog.V(4).Infof("Removing dead CRD storage for %s/%s", s.spec.Group, s.spec.Names.Kind) - oldInfos = append(oldInfos, s) + for _, storage := range s.storages { + // destroy only the main storage. Those for the subresources share cacher and etcd clients. + storage.CustomResource.DestroyFunc() + } delete(storageMap2, uid) } } r.customStorage.Store(storageMap2) - - for _, s := range oldInfos { - go r.tearDown(s) - } -} - -// Wait up to a minute for requests to drain, then tear down storage -func (r *crdHandler) tearDown(oldInfo *crdInfo) { - requestsDrained := make(chan struct{}) - go func() { - defer close(requestsDrained) - // Allow time for in-flight requests with a handle to the old info to register themselves - time.Sleep(time.Second) - // Wait for in-flight requests to drain - oldInfo.waitGroup.Wait() - }() - - select { - case <-time.After(r.requestTimeout * 2): - klog.Warningf("timeout waiting for requests to drain for %s/%s, tearing down storage", oldInfo.spec.Group, oldInfo.spec.Names.Kind) - case <-requestsDrained: - } - - for _, storage := range oldInfo.storages { - // destroy only the main storage. Those for the subresources share cacher and etcd clients. - storage.CustomResource.DestroyFunc() - } } // GetCustomResourceListerCollectionDeleter returns the ListerCollectionDeleter of @@ -663,7 +622,6 @@ func (r *crdHandler) getOrCreateServingInfoFor(crd *apiextensions.CustomResource scaleRequestScopes: scaleScopes, statusRequestScopes: statusScopes, storageVersion: storageVersion, - waitGroup: &utilwaitgroup.SafeWaitGroup{}, } // Copy because we cannot write to storageMap without a race diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD index 8f7505978..38b71df1d 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/BUILD @@ -21,7 +21,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1beta1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go index 4d5e9ed53..0e083f9c1 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/controller.go @@ -24,7 +24,6 @@ import ( "github.com/go-openapi/spec" "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/cache" @@ -90,29 +89,6 @@ func (c *Controller) Run(staticSpec *spec.Swagger, openAPIService *handler.OpenA return } - // create initial spec to avoid merging once per CRD on startup - crds, err := c.crdLister.List(labels.Everything()) - if err != nil { - utilruntime.HandleError(fmt.Errorf("failed to initially list all CRDs: %v", err)) - return - } - for _, crd := range crds { - if !apiextensions.IsCRDConditionTrue(crd, apiextensions.Established) { - continue - } - newSpecs, changed, err := buildVersionSpecs(crd, nil) - if err != nil { - utilruntime.HandleError(fmt.Errorf("failed to build OpenAPI spec of CRD %s: %v", crd.Name, err)) - } else if !changed { - continue - } - c.crdSpecs[crd.Name] = newSpecs - } - if err := c.updateSpecLocked(); err != nil { - utilruntime.HandleError(fmt.Errorf("failed to initially create OpenAPI spec for CRDs: %v", err)) - return - } - // only start one worker thread since its a slow moving API go wait.Until(c.runWorker, time.Second, stopCh) @@ -171,20 +147,6 @@ func (c *Controller) sync(name string) error { // compute CRD spec and see whether it changed oldSpecs := c.crdSpecs[crd.Name] - newSpecs, changed, err := buildVersionSpecs(crd, oldSpecs) - if err != nil { - return err - } - if !changed { - return nil - } - - // update specs of this CRD - c.crdSpecs[crd.Name] = newSpecs - return c.updateSpecLocked() -} - -func buildVersionSpecs(crd *apiextensions.CustomResourceDefinition, oldSpecs map[string]*spec.Swagger) (map[string]*spec.Swagger, bool, error) { newSpecs := map[string]*spec.Swagger{} anyChanged := false for _, v := range crd.Spec.Versions { @@ -193,7 +155,7 @@ func buildVersionSpecs(crd *apiextensions.CustomResourceDefinition, oldSpecs map } spec, err := BuildSwagger(crd, v.Name) if err != nil { - return nil, false, err + return err } newSpecs[v.Name] = spec if oldSpecs[v.Name] == nil || !reflect.DeepEqual(oldSpecs[v.Name], spec) { @@ -201,10 +163,12 @@ func buildVersionSpecs(crd *apiextensions.CustomResourceDefinition, oldSpecs map } } if !anyChanged && len(oldSpecs) == len(newSpecs) { - return newSpecs, false, nil + return nil } - return newSpecs, true, nil + // update specs of this CRD + c.crdSpecs[crd.Name] = newSpecs + return c.updateSpecLocked() } // updateSpecLocked aggregates all OpenAPI specs and updates openAPIService. diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion.go index 91342c881..743fa196a 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/openapi/conversion.go @@ -33,10 +33,9 @@ func ConvertJSONSchemaPropsToOpenAPIv2Schema(in *apiextensions.JSONSchemaProps) } // dirty hack to temporarily set the type at the root. See continuation at the func bottom. + // TODO: remove for Kubernetes 1.15 oldRootType := in.Type if len(in.Type) == 0 { - shallowClone := *in - in = &shallowClone in.Type = "object" } @@ -112,6 +111,9 @@ func ConvertJSONSchemaPropsToOpenAPIv2Schema(in *apiextensions.JSONSchemaProps) return nil }) + // restore root level type in input, and remove it in output if we had added it + // TODO: remove with Kubernetes 1.15 + in.Type = oldRootType if len(oldRootType) == 0 { out.Type = nil } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go index adf8c24c1..f2b745373 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go @@ -65,5 +65,5 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS CustomResourceValidation: {Default: true, PreRelease: utilfeature.Beta}, CustomResourceSubresources: {Default: true, PreRelease: utilfeature.Beta}, CustomResourceWebhookConversion: {Default: false, PreRelease: utilfeature.Alpha}, - CustomResourcePublishOpenAPI: {Default: true, PreRelease: utilfeature.Alpha}, + CustomResourcePublishOpenAPI: {Default: false, PreRelease: utilfeature.Alpha}, } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go index 42aa2a6cb..829640d3f 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/generated/openapi/zz_generated.openapi.go @@ -1,4 +1,4 @@ -// +build !ignore_autogenerated_openshift +// +build !ignore_autogenerated /* Copyright The Kubernetes Authors. diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/test/integration/BUILD b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/test/integration/BUILD index 99ba40cd7..de11a45c4 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/test/integration/BUILD +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/test/integration/BUILD @@ -11,7 +11,6 @@ go_test( srcs = [ "apply_test.go", "basic_test.go", - "change_test.go", "finalization_test.go", "objectmeta_test.go", "registration_test.go", diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/test/integration/change_test.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/test/integration/change_test.go deleted file mode 100644 index 831db12ba..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiextensions-apiserver/test/integration/change_test.go +++ /dev/null @@ -1,162 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package integration - -import ( - "fmt" - "sync" - "testing" - "time" - - apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" - "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" - "k8s.io/apiextensions-apiserver/test/integration/fixtures" - apierrors "k8s.io/apimachinery/pkg/api/errors" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/dynamic" -) - -func TestChangeCRD(t *testing.T) { - tearDown, config, _, err := fixtures.StartDefaultServer(t) - if err != nil { - t.Fatal(err) - } - defer tearDown() - config.QPS = 1000 - config.Burst = 1000 - apiExtensionsClient, err := clientset.NewForConfig(config) - if err != nil { - t.Fatal(err) - } - dynamicClient, err := dynamic.NewForConfig(config) - if err != nil { - t.Fatal(err) - } - - noxuDefinition := fixtures.NewNoxuCustomResourceDefinition(apiextensionsv1beta1.NamespaceScoped) - noxuDefinition, err = fixtures.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionsClient, dynamicClient) - if err != nil { - t.Fatal(err) - } - - ns := "default" - noxuNamespacedResourceClient := newNamespacedCustomResourceVersionedClient(ns, dynamicClient, noxuDefinition, "v1beta1") - - stopChan := make(chan struct{}) - - wg := &sync.WaitGroup{} - - // Set up loop to modify CRD in the background - wg.Add(1) - go func() { - defer wg.Done() - for { - select { - case <-stopChan: - return - default: - } - - noxuDefinitionToUpdate, err := apiExtensionsClient.ApiextensionsV1beta1().CustomResourceDefinitions().Get(noxuDefinition.Name, metav1.GetOptions{}) - if err != nil { - t.Fatal(err) - } - if len(noxuDefinitionToUpdate.Spec.Versions) == 1 { - v2 := noxuDefinitionToUpdate.Spec.Versions[0] - v2.Name = "v2" - v2.Served = true - v2.Storage = false - noxuDefinitionToUpdate.Spec.Versions = append(noxuDefinitionToUpdate.Spec.Versions, v2) - } else { - noxuDefinitionToUpdate.Spec.Versions = noxuDefinitionToUpdate.Spec.Versions[0:1] - } - if _, err := apiExtensionsClient.ApiextensionsV1beta1().CustomResourceDefinitions().Update(noxuDefinitionToUpdate); err != nil && !apierrors.IsConflict(err) { - t.Fatal(err) - } - time.Sleep(10 * time.Millisecond) - } - }() - - // Set up 100 loops creating and reading and watching custom resources - for i := 0; i < 100; i++ { - wg.Add(1) - go func(i int) { - defer wg.Done() - noxuInstanceToCreate := fixtures.NewNoxuInstance(ns, fmt.Sprintf("foo-%d", i)) - if _, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate, metav1.CreateOptions{}); err != nil { - t.Fatal(err) - } - for { - select { - case <-stopChan: - return - default: - if _, err := noxuNamespacedResourceClient.Get(noxuInstanceToCreate.GetName(), metav1.GetOptions{}); err != nil { - t.Fatal(err) - } - } - time.Sleep(10 * time.Millisecond) - } - }(i) - - wg.Add(1) - go func(i int) { - defer wg.Done() - for { - select { - case <-stopChan: - return - default: - w, err := noxuNamespacedResourceClient.Watch(metav1.ListOptions{}) - if err != nil { - t.Fatalf("unexpected error establishing watch: %v", err) - } - for event := range w.ResultChan() { - switch event.Type { - case watch.Added, watch.Modified, watch.Deleted: - // all expected - default: - t.Errorf("unexpected watch event: %#v", event) - } - } - } - time.Sleep(10 * time.Millisecond) - } - }(i) - } - - // Let all the established get request loops soak - time.Sleep(5 * time.Second) - - // Tear down - close(stopChan) - - // Let loops drain - drained := make(chan struct{}) - go func() { - defer close(drained) - wg.Wait() - }() - - select { - case <-drained: - case <-time.After(wait.ForeverTestTimeout): - t.Error("timed out waiting for clients to complete") - } -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/api/meta/restmapper.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/api/meta/restmapper.go index 914213925..41b60d731 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/api/meta/restmapper.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/api/meta/restmapper.go @@ -115,7 +115,6 @@ func (m *DefaultRESTMapper) AddSpecific(kind schema.GroupVersionKind, plural, si // callers to use the RESTMapper they mean. var unpluralizedSuffixes = []string{ "endpoints", - "securitycontextconstraints", } // UnsafeGuessKindToResource converts Kind to a resource name. diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/api/meta/testrestmapper/patch_restmapper.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/api/meta/testrestmapper/patch_restmapper.go deleted file mode 100644 index f21a14607..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/api/meta/testrestmapper/patch_restmapper.go +++ /dev/null @@ -1,53 +0,0 @@ -package testrestmapper - -import "k8s.io/apimachinery/pkg/runtime/schema" - -func init() { - rootScopedKinds[schema.GroupKind{Group: "", Kind: "SubjectAccessReview"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ResourceAccessReview"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ClusterRole"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ClusterRoleBinding"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "Image"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ImageSignature"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "OAuthAccessToken"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "OAuthAuthorizeToken"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "OAuthClient"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "OAuthClientAuthorization"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "OAuthRedirectReference"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "Project"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ProjectRequest"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ClusterNetwork"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "HostSubnet"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "NetNamespace"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "BrokerTemplateInstance"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "User"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "Identity"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "UserIdentityMapping"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "Group"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "SecurityContextConstraints"}] = true - rootScopedKinds[schema.GroupKind{Group: "", Kind: "ClusterResourceQuota"}] = true - - rootScopedKinds[schema.GroupKind{Group: "authorization.openshift.io", Kind: "SubjectAccessReview"}] = true - rootScopedKinds[schema.GroupKind{Group: "authorization.openshift.io", Kind: "ResourceAccessReview"}] = true - rootScopedKinds[schema.GroupKind{Group: "authorization.openshift.io", Kind: "ClusterRole"}] = true - rootScopedKinds[schema.GroupKind{Group: "authorization.openshift.io", Kind: "ClusterRoleBinding"}] = true - rootScopedKinds[schema.GroupKind{Group: "image.openshift.io", Kind: "Image"}] = true - rootScopedKinds[schema.GroupKind{Group: "image.openshift.io", Kind: "ImageSignature"}] = true - rootScopedKinds[schema.GroupKind{Group: "oauth.openshift.io", Kind: "OAuthAccessToken"}] = true - rootScopedKinds[schema.GroupKind{Group: "oauth.openshift.io", Kind: "OAuthAuthorizeToken"}] = true - rootScopedKinds[schema.GroupKind{Group: "oauth.openshift.io", Kind: "OAuthClient"}] = true - rootScopedKinds[schema.GroupKind{Group: "oauth.openshift.io", Kind: "OAuthClientAuthorization"}] = true - rootScopedKinds[schema.GroupKind{Group: "oauth.openshift.io", Kind: "OAuthRedirectReference"}] = true - rootScopedKinds[schema.GroupKind{Group: "project.openshift.io", Kind: "Project"}] = true - rootScopedKinds[schema.GroupKind{Group: "project.openshift.io", Kind: "ProjectRequest"}] = true - rootScopedKinds[schema.GroupKind{Group: "network.openshift.io", Kind: "ClusterNetwork"}] = true - rootScopedKinds[schema.GroupKind{Group: "network.openshift.io", Kind: "HostSubnet"}] = true - rootScopedKinds[schema.GroupKind{Group: "network.openshift.io", Kind: "NetNamespace"}] = true - rootScopedKinds[schema.GroupKind{Group: "template.openshift.io", Kind: "BrokerTemplateInstance"}] = true - rootScopedKinds[schema.GroupKind{Group: "user.openshift.io", Kind: "User"}] = true - rootScopedKinds[schema.GroupKind{Group: "user.openshift.io", Kind: "Identity"}] = true - rootScopedKinds[schema.GroupKind{Group: "user.openshift.io", Kind: "UserIdentityMapping"}] = true - rootScopedKinds[schema.GroupKind{Group: "user.openshift.io", Kind: "Group"}] = true - rootScopedKinds[schema.GroupKind{Group: "security.openshift.io", Kind: "SecurityContextConstraints"}] = true - rootScopedKinds[schema.GroupKind{Group: "quota.openshift.io", Kind: "ClusterResourceQuota"}] = true -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/runtime/types.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/runtime/types.go index 3d3ebe5f9..1f7f662e0 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/runtime/types.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apimachinery/pkg/runtime/types.go @@ -41,9 +41,8 @@ type TypeMeta struct { } const ( - ContentTypeJSON string = "application/json" - ContentTypeYAML string = "application/yaml" - ContentTypeProtobuf string = "application/vnd.kubernetes.protobuf" + ContentTypeJSON string = "application/json" + ContentTypeYAML string = "application/yaml" ) // RawExtension is used to hold extensions in external versions. diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go index 923cd0de5..c6517bee3 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission.go @@ -53,14 +53,7 @@ const ( // Register registers a plugin func Register(plugins *admission.Plugins) { plugins.Register(PluginName, func(config io.Reader) (admission.Interface, error) { - return NewLifecycle(sets.NewString(metav1.NamespaceDefault, metav1.NamespaceSystem, metav1.NamespacePublic, - // user specified configuration that cannot be rebuilt - "openshift-config", - // the CVO which is the root we use to rebuild all the rest - "openshift-cluster-version", - // contains a namespaced list of all nodes in the cluster (yeah, weird. they do it for multi-tenant management I think?) - "openshift-machine-api", - )) + return NewLifecycle(sets.NewString(metav1.NamespaceDefault, metav1.NamespaceSystem, metav1.NamespacePublic)) }) } @@ -223,19 +216,7 @@ func (l *Lifecycle) ValidateInitialization() error { // accessReviewResources are resources which give a view into permissions in a namespace. Users must be allowed to create these // resources because returning "not found" errors allows someone to search for the "people I'm going to fire in 2017" namespace. var accessReviewResources = map[schema.GroupResource]bool{ - {Group: "authorization.k8s.io", Resource: "localsubjectaccessreviews"}: true, - schema.GroupResource{Group: "", Resource: "subjectaccessreviews"}: true, - schema.GroupResource{Group: "", Resource: "localsubjectaccessreviews"}: true, - schema.GroupResource{Group: "", Resource: "resourceaccessreviews"}: true, - schema.GroupResource{Group: "", Resource: "localresourceaccessreviews"}: true, - schema.GroupResource{Group: "", Resource: "selfsubjectrulesreviews"}: true, - schema.GroupResource{Group: "", Resource: "subjectrulesreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "subjectaccessreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "localsubjectaccessreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "resourceaccessreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "localresourceaccessreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "selfsubjectrulesreviews"}: true, - schema.GroupResource{Group: "authorization.openshift.io", Resource: "subjectrulesreviews"}: true, + {Group: "authorization.k8s.io", Resource: "localsubjectaccessreviews"}: true, } func isAccessReview(a admission.Attributes) bool { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/patch.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/patch.go deleted file mode 100644 index 1c043777e..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/patch.go +++ /dev/null @@ -1,7 +0,0 @@ -package lifecycle - -import "k8s.io/apimachinery/pkg/runtime/schema" - -func AccessReviewResources() map[schema.GroupResource]bool { - return accessReviewResources -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/authenticatorfactory/delegating.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/authenticatorfactory/delegating.go index b70f29abb..67958c363 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/authenticatorfactory/delegating.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/authenticatorfactory/delegating.go @@ -32,9 +32,9 @@ import ( "k8s.io/apiserver/pkg/authentication/request/websocket" "k8s.io/apiserver/pkg/authentication/request/x509" "k8s.io/apiserver/pkg/authentication/token/cache" - "k8s.io/apiserver/pkg/server/certs" webhooktoken "k8s.io/apiserver/plugin/pkg/authenticator/token/webhook" authenticationclient "k8s.io/client-go/kubernetes/typed/authentication/v1beta1" + "k8s.io/client-go/util/cert" ) // DelegatingAuthenticatorConfig is the minimal configuration needed to create an authenticator @@ -56,18 +56,14 @@ type DelegatingAuthenticatorConfig struct { RequestHeaderConfig *RequestHeaderConfig } -type DynamicReloadFunc func(stopCh <-chan struct{}) - -// New returns the authentication, the openapi info, dynamic reloading poststarthooks, or an error -func (c DelegatingAuthenticatorConfig) New() (authenticator.Request, *spec.SecurityDefinitions, map[string]DynamicReloadFunc, error) { +func (c DelegatingAuthenticatorConfig) New() (authenticator.Request, *spec.SecurityDefinitions, error) { authenticators := []authenticator.Request{} securityDefinitions := spec.SecurityDefinitions{} - dynamicReloadHooks := map[string]DynamicReloadFunc{} // front-proxy first, then remote // Add the front proxy authenticator if requested if c.RequestHeaderConfig != nil { - requestHeaderAuthenticator, dynamicReloadFn, err := headerrequest.NewSecure( + requestHeaderAuthenticator, err := headerrequest.NewSecure( c.RequestHeaderConfig.ClientCA, c.RequestHeaderConfig.AllowedClientNames, c.RequestHeaderConfig.UsernameHeaders, @@ -75,27 +71,26 @@ func (c DelegatingAuthenticatorConfig) New() (authenticator.Request, *spec.Secur c.RequestHeaderConfig.ExtraHeaderPrefixes, ) if err != nil { - return nil, nil, nil, err + return nil, nil, err } - dynamicReloadHooks["requestheader-reload"] = DynamicReloadFunc(dynamicReloadFn) authenticators = append(authenticators, requestHeaderAuthenticator) } // x509 client cert auth if len(c.ClientCAFile) > 0 { - dynamicVerifier := certs.NewDynamicCA(c.ClientCAFile) - if err := dynamicVerifier.CheckCerts(); err != nil { - return nil, nil, nil, fmt.Errorf("unable to load client CA file %s: %v", c.ClientCAFile, err) + clientCAs, err := cert.NewPool(c.ClientCAFile) + if err != nil { + return nil, nil, fmt.Errorf("unable to load client CA file %s: %v", c.ClientCAFile, err) } - dynamicReloadHooks["clientCA-reload"] = dynamicVerifier.Run - - authenticators = append(authenticators, x509.NewDynamic(dynamicVerifier.GetVerifier, x509.CommonNameUserConversion)) + verifyOpts := x509.DefaultVerifyOptions() + verifyOpts.Roots = clientCAs + authenticators = append(authenticators, x509.New(verifyOpts, x509.CommonNameUserConversion)) } if c.TokenAccessReviewClient != nil { tokenAuth, err := webhooktoken.NewFromInterface(c.TokenAccessReviewClient, c.APIAudiences) if err != nil { - return nil, nil, nil, err + return nil, nil, err } cachingTokenAuth := cache.New(tokenAuth, false, c.CacheTTL, c.CacheTTL) authenticators = append(authenticators, bearertoken.New(cachingTokenAuth), websocket.NewProtocolAuthenticator(cachingTokenAuth)) @@ -112,14 +107,14 @@ func (c DelegatingAuthenticatorConfig) New() (authenticator.Request, *spec.Secur if len(authenticators) == 0 { if c.Anonymous { - return anonymous.NewAuthenticator(), &securityDefinitions, dynamicReloadHooks, nil + return anonymous.NewAuthenticator(), &securityDefinitions, nil } - return nil, nil, nil, errors.New("No authentication method configured") + return nil, nil, errors.New("No authentication method configured") } authenticator := group.NewAuthenticatedGroupAdder(unionauth.New(authenticators...)) if c.Anonymous { authenticator = unionauth.NewFailOnError(authenticator, anonymous.NewAuthenticator()) } - return authenticator, &securityDefinitions, dynamicReloadHooks, nil + return authenticator, &securityDefinitions, nil } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/request/headerrequest/requestheader.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/request/headerrequest/requestheader.go index eee54a087..70af861d8 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/request/headerrequest/requestheader.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/request/headerrequest/requestheader.go @@ -17,7 +17,9 @@ limitations under the License. package headerrequest import ( + "crypto/x509" "fmt" + "io/ioutil" "net/http" "net/url" "strings" @@ -26,7 +28,7 @@ import ( "k8s.io/apiserver/pkg/authentication/authenticator" x509request "k8s.io/apiserver/pkg/authentication/request/x509" "k8s.io/apiserver/pkg/authentication/user" - "k8s.io/apiserver/pkg/server/certs" + utilcert "k8s.io/client-go/util/cert" ) type requestHeaderAuthRequestHandler struct { @@ -75,25 +77,32 @@ func trimHeaders(headerNames ...string) ([]string, error) { return ret, nil } -type DynamicReloadFunc func(stopCh <-chan struct{}) - -func NewSecure(clientCA string, proxyClientNames []string, nameHeaders []string, groupHeaders []string, extraHeaderPrefixes []string) (authenticator.Request, DynamicReloadFunc, error) { +func NewSecure(clientCA string, proxyClientNames []string, nameHeaders []string, groupHeaders []string, extraHeaderPrefixes []string) (authenticator.Request, error) { headerAuthenticator, err := New(nameHeaders, groupHeaders, extraHeaderPrefixes) if err != nil { - return nil, nil, err + return nil, err } if len(clientCA) == 0 { - return nil, nil, fmt.Errorf("missing clientCA file") + return nil, fmt.Errorf("missing clientCA file") } // Wrap with an x509 verifier - dynamicVerifier := certs.NewDynamicCA(clientCA) - if err := dynamicVerifier.CheckCerts(); err != nil { - return nil, nil, fmt.Errorf("error reading %s: %v", clientCA, err) + caData, err := ioutil.ReadFile(clientCA) + if err != nil { + return nil, fmt.Errorf("error reading %s: %v", clientCA, err) + } + opts := x509request.DefaultVerifyOptions() + opts.Roots = x509.NewCertPool() + certs, err := utilcert.ParseCertsPEM(caData) + if err != nil { + return nil, fmt.Errorf("error loading certs from %s: %v", clientCA, err) + } + for _, cert := range certs { + opts.Roots.AddCert(cert) } - return x509request.NewDynamicVerifier(dynamicVerifier.GetVerifier, headerAuthenticator, sets.NewString(proxyClientNames...)), dynamicVerifier.Run, nil + return x509request.NewVerifier(opts, headerAuthenticator, sets.NewString(proxyClientNames...)), nil } func (a *requestHeaderAuthRequestHandler) AuthenticateRequest(req *http.Request) (*authenticator.Response, bool, error) { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go index d702c9063..5e91034aa 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/request/x509/x509.go @@ -73,30 +73,16 @@ func (f UserConversionFunc) User(chain []*x509.Certificate) (*authenticator.Resp return f(chain) } -type VerifyOptionFunc func() x509.VerifyOptions - -func StaticVerifierFn(opts x509.VerifyOptions) VerifyOptionFunc { - return func() x509.VerifyOptions { - return opts - } -} - // Authenticator implements request.Authenticator by extracting user info from verified client certificates type Authenticator struct { - verifyOptionsFn VerifyOptionFunc - user UserConversion + opts x509.VerifyOptions + user UserConversion } // New returns a request.Authenticator that verifies client certificates using the provided // VerifyOptions, and converts valid certificate chains into user.Info using the provided UserConversion func New(opts x509.VerifyOptions, user UserConversion) *Authenticator { - return NewDynamic(StaticVerifierFn(opts), user) -} - -// New returns a request.Authenticator that verifies client certificates using the provided -// VerifyOptions, and converts valid certificate chains into user.Info using the provided UserConversion -func NewDynamic(verifyOptionsFn VerifyOptionFunc, user UserConversion) *Authenticator { - return &Authenticator{verifyOptionsFn, user} + return &Authenticator{opts, user} } // AuthenticateRequest authenticates the request using presented client certificates @@ -106,7 +92,7 @@ func (a *Authenticator) AuthenticateRequest(req *http.Request) (*authenticator.R } // Use intermediates, if provided - optsCopy := a.verifyOptionsFn() + optsCopy := a.opts if optsCopy.Intermediates == nil && len(req.TLS.PeerCertificates) > 1 { optsCopy.Intermediates = x509.NewCertPool() for _, intermediate := range req.TLS.PeerCertificates[1:] { @@ -138,8 +124,8 @@ func (a *Authenticator) AuthenticateRequest(req *http.Request) (*authenticator.R // Verifier implements request.Authenticator by verifying a client cert on the request, then delegating to the wrapped auth type Verifier struct { - verifyOptionsFn VerifyOptionFunc - auth authenticator.Request + opts x509.VerifyOptions + auth authenticator.Request // allowedCommonNames contains the common names which a verified certificate is allowed to have. // If empty, all verified certificates are allowed. @@ -148,12 +134,7 @@ type Verifier struct { // NewVerifier create a request.Authenticator by verifying a client cert on the request, then delegating to the wrapped auth func NewVerifier(opts x509.VerifyOptions, auth authenticator.Request, allowedCommonNames sets.String) authenticator.Request { - return NewDynamicVerifier(StaticVerifierFn(opts), auth, allowedCommonNames) -} - -// NewVerifier create a request.Authenticator by verifying a client cert on the request, then delegating to the wrapped auth -func NewDynamicVerifier(verifyOptionsFn VerifyOptionFunc, auth authenticator.Request, allowedCommonNames sets.String) authenticator.Request { - return &Verifier{verifyOptionsFn, auth, allowedCommonNames} + return &Verifier{opts, auth, allowedCommonNames} } // AuthenticateRequest verifies the presented client certificate, then delegates to the wrapped auth @@ -163,7 +144,7 @@ func (a *Verifier) AuthenticateRequest(req *http.Request) (*authenticator.Respon } // Use intermediates, if provided - optsCopy := a.verifyOptionsFn() + optsCopy := a.opts if optsCopy.Intermediates == nil && len(req.TLS.PeerCertificates) > 1 { optsCopy.Intermediates = x509.NewCertPool() for _, intermediate := range req.TLS.PeerCertificates[1:] { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/serviceaccount/util.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/serviceaccount/util.go index f773b384a..1b7bbc139 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/serviceaccount/util.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/serviceaccount/util.go @@ -36,27 +36,6 @@ func MakeUsername(namespace, name string) string { return ServiceAccountUsernamePrefix + namespace + ServiceAccountUsernameSeparator + name } -// MatchesUsername checks whether the provided username matches the namespace and name without -// allocating. Use this when checking a service account namespace and name against a known string. -func MatchesUsername(namespace, name string, username string) bool { - if !strings.HasPrefix(username, ServiceAccountUsernamePrefix) { - return false - } - username = strings.TrimPrefix(username, ServiceAccountUsernamePrefix) - - if !strings.HasSuffix(username, name) { - return false - } - username = strings.TrimSuffix(username, name) - - if !strings.HasPrefix(username, namespace) { - return false - } - username = strings.TrimPrefix(username, namespace) - - return username == ServiceAccountUsernameSeparator -} - var invalidUsernameErr = fmt.Errorf("Username must be in the form %s", MakeUsername("namespace", "name")) // SplitUsername returns the namespace and ServiceAccount name embedded in the given username, diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/serviceaccount/util_test.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/serviceaccount/util_test.go index 91c8cb0dd..14784b16c 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/serviceaccount/util_test.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/authentication/serviceaccount/util_test.go @@ -62,9 +62,7 @@ func TestMakeUsername(t *testing.T) { for k, tc := range testCases { username := MakeUsername(tc.Namespace, tc.Name) - if !MatchesUsername(tc.Namespace, tc.Name, username) { - t.Errorf("%s: Expected to match username", k) - } + namespace, name, err := SplitUsername(username) if (err != nil) != tc.ExpectedErr { t.Errorf("%s: Expected error=%v, got %v", k, tc.ExpectedErr, err) @@ -82,39 +80,3 @@ func TestMakeUsername(t *testing.T) { } } } - -func TestMatchUsername(t *testing.T) { - - testCases := []struct { - TestName string - Namespace string - Name string - Username string - Expect bool - }{ - {Namespace: "foo", Name: "bar", Username: "foo", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount:", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount:foo", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount:foo:", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount:foo:bar", Expect: true}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount::bar", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "system:serviceaccount:bar", Expect: false}, - {Namespace: "foo", Name: "bar", Username: ":bar", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "foo:bar", Expect: false}, - {Namespace: "foo", Name: "bar", Username: "", Expect: false}, - - {Namespace: "foo2", Name: "bar", Username: "system:serviceaccount:foo:bar", Expect: false}, - {Namespace: "foo", Name: "bar2", Username: "system:serviceaccount:foo:bar", Expect: false}, - {Namespace: "foo:", Name: "bar", Username: "system:serviceaccount:foo:bar", Expect: false}, - {Namespace: "foo", Name: ":bar", Username: "system:serviceaccount:foo:bar", Expect: false}, - } - - for _, tc := range testCases { - t.Run(tc.TestName, func(t *testing.T) { - actual := MatchesUsername(tc.Namespace, tc.Name, tc.Username) - if actual != tc.Expect { - t.Fatalf("unexpected match") - } - }) - } -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go index a4495b44d..74bb39c6d 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go @@ -370,7 +370,7 @@ func parseTimeout(str string) time.Duration { } klog.Errorf("Failed to parse %q: %v", str, err) } - return 34 * time.Second + return 30 * time.Second } func isDryRun(url *url.URL) bool { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go index 13157406c..9ebd06786 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest_test.go @@ -822,10 +822,10 @@ func TestHasUID(t *testing.T) { } func TestParseTimeout(t *testing.T) { - if d := parseTimeout(""); d != 34*time.Second { + if d := parseTimeout(""); d != 30*time.Second { t.Errorf("blank timeout produces %v", d) } - if d := parseTimeout("not a timeout"); d != 34*time.Second { + if d := parseTimeout("not a timeout"); d != 30*time.Second { t.Errorf("bad timeout produces %v", d) } if d := parseTimeout("10s"); d != 10*time.Second { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/clientca.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/clientca.go deleted file mode 100644 index f518cc79d..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/clientca.go +++ /dev/null @@ -1,121 +0,0 @@ -package certs - -import ( - "crypto/x509" - "fmt" - "io/ioutil" - "reflect" - "sync/atomic" - "time" - - "k8s.io/client-go/util/cert" - - "k8s.io/klog" - - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/wait" - kubex509 "k8s.io/apiserver/pkg/authentication/request/x509" -) - -func NewDynamicCA(caBundleFilename string) *DynamicCA { - return &DynamicCA{ - caFile: caFileReference{Cert: caBundleFilename}, - } -} - -// DynamicCA dynamically loads ca bundle and provides a verifier compatible with kube x509 authentication -type DynamicCA struct { - caFile caFileReference - - currentContent caFileContent - currentValue atomic.Value -} - -type caFileReference struct { - Cert string -} - -type caFileContent struct { - Cert []byte -} - -type runtimeDynamicCA struct { - verifyOptions x509.VerifyOptions -} - -func (c *DynamicCA) GetVerifier() x509.VerifyOptions { - uncastObj := c.currentValue.Load() - if uncastObj == nil { - panic("tls: configuration not ready") - } - runtimeConfig, ok := uncastObj.(*runtimeDynamicCA) - if !ok { - panic("tls: unexpected config type") - } - return runtimeConfig.GetVerifier() -} - -func (c *DynamicCA) Run(stopCh <-chan struct{}) { - klog.Infof("Starting DynamicCA: %v", c.caFile.Cert) - defer klog.Infof("Shutting down DynamicCA: %v", c.caFile.Cert) - - go wait.Until(func() { - err := c.CheckCerts() - if err != nil { - utilruntime.HandleError(err) - } - }, 1*time.Minute, stopCh) - - <-stopCh -} - -func (c *DynamicCA) CheckCerts() error { - certBytes, err := ioutil.ReadFile(c.caFile.Cert) - if err != nil { - return err - } - if len(certBytes) == 0 { - return fmt.Errorf("ca-bundle %q must not be empty", c.caFile.Cert) - } - newContent := caFileContent{Cert: certBytes} - - if newContent.Equals(&c.currentContent) { - return nil - } - - certs, err := cert.ParseCertsPEM(newContent.Cert) - if err != nil { - return fmt.Errorf("unable to load client CA file %q: %v", c.caFile.Cert, err) - } - pool := x509.NewCertPool() - for i, crt := range certs { - pool.AddCert(crt) - klog.V(2).Infof("[%d] %q client-ca certificate: %s", i, c.caFile.Cert, getCertDetail(crt)) - } - - verifyOpts := kubex509.DefaultVerifyOptions() - verifyOpts.Roots = pool - newRuntimeConfig := &runtimeDynamicCA{verifyOptions: verifyOpts} - - c.currentValue.Store(newRuntimeConfig) - c.currentContent = newContent // this is single threaded, so we have no locking issue - - return nil -} - -func (c *caFileContent) Equals(rhs *caFileContent) bool { - if c == nil && rhs == nil { - return true - } - if c == nil && rhs != nil { - return false - } - if c != nil && rhs == nil { - return false - } - return reflect.DeepEqual(c.Cert, rhs.Cert) -} - -func (c *runtimeDynamicCA) GetVerifier() x509.VerifyOptions { - return c.verifyOptions -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/serving.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/serving.go deleted file mode 100644 index 26964cb73..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/serving.go +++ /dev/null @@ -1,273 +0,0 @@ -package certs - -import ( - "crypto/tls" - "crypto/x509" - "errors" - "fmt" - "io/ioutil" - "net" - "reflect" - "sync/atomic" - "time" - - "k8s.io/klog" - - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/util/cert" -) - -// LoopbackClientServerNameOverride is passed to the apiserver from the loopback client in order to -// select the loopback certificate via SNI if TLS is used. -const LoopbackClientServerNameOverride = "apiserver-loopback-client" - -type CertKeyFileReference struct { - Cert string - Key string -} - -type CABundleFileReferences struct { - CABundles []string -} - -// DynamicLoader dynamically loads certificates and provides a golang tls compatible dynamic GetCertificate func. -type DynamicServingLoader struct { - // BaseTLSConfig is the static portion of the tlsConfig for serving to clients. It is copied and the copy is mutated - // based on the dynamic cert state. - BaseTLSConfig tls.Config - - ClientCA CABundleFileReferences - DefaultCertificate CertKeyFileReference - NameToCertificate map[string]*CertKeyFileReference - LoopbackCert *tls.Certificate - - currentContent dynamicCertificateContent - currentValue atomic.Value -} - -type dynamicCertificateContent struct { - ClientCA certKeyFileContent - DefaultCertificate certKeyFileContent - NameToCertificate map[string]*certKeyFileContent -} - -type certKeyFileContent struct { - Cert []byte - Key []byte -} - -type runtimeDynamicLoader struct { - tlsConfig tls.Config -} - -func (c *DynamicServingLoader) GetConfigForClient(clientHello *tls.ClientHelloInfo) (*tls.Config, error) { - uncastObj := c.currentValue.Load() - if uncastObj == nil { - return nil, errors.New("tls: configuration not ready") - } - runtimeConfig, ok := uncastObj.(*runtimeDynamicLoader) - if !ok { - return nil, errors.New("tls: unexpected config type") - } - return runtimeConfig.GetConfigForClient(clientHello) -} - -func (c *DynamicServingLoader) Run(stopCh <-chan struct{}) { - klog.Infof("Starting DynamicLoader") - defer klog.Infof("Shutting down DynamicLoader") - - go wait.Until(func() { - err := c.CheckCerts() - if err != nil { - utilruntime.HandleError(err) - } - }, 1*time.Minute, stopCh) - - <-stopCh -} - -func (c *DynamicServingLoader) CheckCerts() error { - newContent := dynamicCertificateContent{ - NameToCertificate: map[string]*certKeyFileContent{}, - } - - servingCertBytes, err := ioutil.ReadFile(c.DefaultCertificate.Cert) - if err != nil { - return err - } - servingKeyBytes, err := ioutil.ReadFile(c.DefaultCertificate.Key) - if err != nil { - return err - } - newContent.DefaultCertificate = certKeyFileContent{Cert: servingCertBytes, Key: servingKeyBytes} - if len(c.DefaultCertificate.Cert) > 0 && len(newContent.DefaultCertificate.Cert) == 0 { - return fmt.Errorf("not loading an empty default cert from %q", c.DefaultCertificate.Cert) - } - if len(c.DefaultCertificate.Key) > 0 && len(newContent.DefaultCertificate.Key) == 0 { - return fmt.Errorf("not loading an empty default key from %q", c.DefaultCertificate.Key) - } - - caBundle := []byte{} - for _, caFile := range c.ClientCA.CABundles { - clientCABytes, err := ioutil.ReadFile(caFile) - if err != nil { - return err - } - if len(clientCABytes) == 0 { - return fmt.Errorf("not loading an empty client ca bundle from %q", caFile) - } - caBundle = append(caBundle, clientCABytes...) - } - newContent.ClientCA = certKeyFileContent{Cert: caBundle} - clientCAPool := x509.NewCertPool() - if len(newContent.ClientCA.Cert) > 0 { - clientCAs, err := cert.ParseCertsPEM(newContent.ClientCA.Cert) - if err != nil { - return fmt.Errorf("unable to load client CA file: %v", err) - } - for _, cert := range clientCAs { - clientCAPool.AddCert(cert) - } - } - - for key, currRef := range c.NameToCertificate { - certBytes, err := ioutil.ReadFile(currRef.Cert) - if err != nil { - return err - } - keyBytes, err := ioutil.ReadFile(currRef.Key) - if err != nil { - return err - } - if len(currRef.Cert) > 0 && len(certBytes) == 0 { - return fmt.Errorf("not loading an empty cert from %q for %v", currRef.Cert, key) - } - if len(currRef.Key) > 0 && len(keyBytes) == 0 { - return fmt.Errorf("not loading an empty key from %q for %v", currRef.Key, key) - } - newContent.NameToCertificate[key] = &certKeyFileContent{Cert: certBytes, Key: keyBytes} - } - - if newContent.Equals(&c.currentContent) { - return nil - } - - tlsConfigCopy := c.BaseTLSConfig - tlsConfigCopy.ClientCAs = clientCAPool - tlsConfigCopy.NameToCertificate = map[string]*tls.Certificate{} - - // load main cert - if len(newContent.DefaultCertificate.Cert) != 0 || len(newContent.DefaultCertificate.Key) != 0 { - tlsCert, err := tls.X509KeyPair(newContent.DefaultCertificate.Cert, newContent.DefaultCertificate.Key) - if err != nil { - return fmt.Errorf("unable to load server certificate: %v", err) - } - tlsConfigCopy.Certificates = []tls.Certificate{tlsCert} - tlsConfigCopy.Certificates = append(tlsConfigCopy.Certificates, tlsCert) - } - - // append all named certs. Otherwise, the go tls stack will think no SNI processing - // is necessary because there is only one cert anyway. - // Moreover, if ServerCert.CertFile/ServerCert.KeyFile are not set, the first SNI - // cert will become the default cert. That's what we expect anyway. - // load SNI certs - for name, nck := range newContent.NameToCertificate { - tlsCert, err := tls.X509KeyPair(nck.Cert, nck.Key) - if err != nil { - return fmt.Errorf("failed to load SNI cert and key: %v", err) - } - tlsConfigCopy.NameToCertificate[name] = &tlsCert - } - if c.LoopbackCert != nil { - tlsConfigCopy.NameToCertificate[LoopbackClientServerNameOverride] = c.LoopbackCert - tlsConfigCopy.Certificates = append(tlsConfigCopy.Certificates, *c.LoopbackCert) - } - newRuntimeConfig := &runtimeDynamicLoader{ - tlsConfig: tlsConfigCopy, - } - - certs, err := cert.ParseCertsPEM(servingCertBytes) - if err != nil { - return err - } - for i, crt := range certs { - klog.V(2).Infof("[%d] %q serving certificate: %s", i, c.DefaultCertificate.Cert, getCertDetail(crt)) - } - - c.currentValue.Store(newRuntimeConfig) - c.currentContent = newContent // this is single threaded, so we have no locking issue - - return nil -} - -func (c *dynamicCertificateContent) Equals(rhs *dynamicCertificateContent) bool { - if c == nil && rhs == nil { - return true - } - if c == nil && rhs != nil { - return false - } - if c != nil && rhs == nil { - return false - } - cKeys := sets.StringKeySet(c.NameToCertificate) - rhsKeys := sets.StringKeySet(rhs.NameToCertificate) - if !cKeys.Equal(rhsKeys) { - return false - } - - if !c.DefaultCertificate.Equals(&rhs.DefaultCertificate) { - return false - } - if !c.ClientCA.Equals(&rhs.ClientCA) { - return false - } - for _, key := range cKeys.UnsortedList() { - if !c.NameToCertificate[key].Equals(rhs.NameToCertificate[key]) { - return false - } - } - - return true -} - -func (c *certKeyFileContent) Equals(rhs *certKeyFileContent) bool { - if c == nil && rhs == nil { - return true - } - if c == nil && rhs != nil { - return false - } - if c != nil && rhs == nil { - return false - } - return reflect.DeepEqual(c.Key, rhs.Key) && reflect.DeepEqual(c.Cert, rhs.Cert) -} - -// GetConfigForClient copied from tls.getCertificate -func (c *runtimeDynamicLoader) GetConfigForClient(hello *tls.ClientHelloInfo) (*tls.Config, error) { - tlsConfigCopy := c.tlsConfig - - // if the client set SNI information, just use our "normal" SNI flow - if len(hello.ServerName) > 0 { - return &tlsConfigCopy, nil - } - - // if the client didn't set SNI, then we need to inspect the requested IP so that we can choose - // a certificate from our list if we specifically handle that IP - host, _, err := net.SplitHostPort(hello.Conn.LocalAddr().String()) - if err != nil { - return &tlsConfigCopy, nil - } - - ipCert, ok := tlsConfigCopy.NameToCertificate[host] - if !ok { - return &tlsConfigCopy, nil - } - tlsConfigCopy.Certificates = []tls.Certificate{*ipCert} - tlsConfigCopy.NameToCertificate = nil - - return &tlsConfigCopy, nil -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/single_certkey_pair.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/single_certkey_pair.go deleted file mode 100644 index 8e2607b91..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/single_certkey_pair.go +++ /dev/null @@ -1,128 +0,0 @@ -package certs - -import ( - "fmt" - "io/ioutil" - "sync/atomic" - "time" - - "k8s.io/klog" - - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/util/cert" -) - -// ReactionFunc is a func that can be called on a cert change -type ReactionFunc func() - -func NewDynamicCertKeyPairLoader(certFile, keyFile string, certChangeCallback ReactionFunc) *DynamicCertKeyPairLoader { - return &DynamicCertKeyPairLoader{ - fileReference: CertKeyFileReference{ - Cert: certFile, - Key: keyFile, - }, - certChangeCallback: certChangeCallback, - } -} - -// DynamicLoader dynamically loads a single cert/key pair -type DynamicCertKeyPairLoader struct { - fileReference CertKeyFileReference - - certChangeCallback ReactionFunc - currentContent certKeyFileContent - currentValue atomic.Value -} - -type runtimeCertKeyPair struct { - rawContent certKeyFileContent -} - -func (c *DynamicCertKeyPairLoader) GetRawCert() []byte { - uncastObj := c.currentValue.Load() - if uncastObj == nil { - panic("not ready") - } - runtimeConfig, ok := uncastObj.(*runtimeCertKeyPair) - if !ok { - panic("unexpected config type") - } - return runtimeConfig.GetRawCert() -} - -func (c *DynamicCertKeyPairLoader) GetRawKey() []byte { - uncastObj := c.currentValue.Load() - if uncastObj == nil { - panic("not ready") - } - runtimeConfig, ok := uncastObj.(*runtimeCertKeyPair) - if !ok { - panic("unexpected config type") - } - return runtimeConfig.GetRawKey() -} - -func (c *DynamicCertKeyPairLoader) Run(stopCh <-chan struct{}) { - klog.Infof("Starting DynamicCertKeyPairLoader") - defer klog.Infof("Shutting down DynamicCertKeyPairLoader") - - go wait.Until(func() { - err := c.CheckCerts() - if err != nil { - utilruntime.HandleError(err) - } - }, 1*time.Minute, stopCh) - - <-stopCh -} - -func (c *DynamicCertKeyPairLoader) CheckCerts() error { - servingCertBytes, err := ioutil.ReadFile(c.fileReference.Cert) - if err != nil { - return err - } - if len(servingCertBytes) == 0 { - return fmt.Errorf("cert %q must not be empty", c.fileReference.Cert) - } - servingKeyBytes, err := ioutil.ReadFile(c.fileReference.Key) - if err != nil { - return err - } - if len(servingKeyBytes) == 0 { - return fmt.Errorf("key %q must not be empty", c.fileReference.Key) - } - newContent := certKeyFileContent{Cert: servingCertBytes, Key: servingKeyBytes} - - if newContent.Equals(&c.currentContent) { - return nil - } - - newRuntimeConfig := &runtimeCertKeyPair{ - rawContent: newContent, - } - c.currentValue.Store(newRuntimeConfig) - c.currentContent = newContent // this is single threaded, so we have no locking issue - - certs, err := cert.ParseCertsPEM(newContent.Cert) - if err != nil { - return err - } - for i, crt := range certs { - klog.V(2).Infof("[%d] %q certificate: %s", i, c.fileReference.Cert, getCertDetail(crt)) - } - - if c.certChangeCallback != nil { - c.certChangeCallback() - } - - return nil -} - -func (c *runtimeCertKeyPair) GetRawCert() []byte { - return c.rawContent.Cert -} - -func (c *runtimeCertKeyPair) GetRawKey() []byte { - return c.rawContent.Key -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/util.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/util.go deleted file mode 100644 index 5339f4ac7..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/certs/util.go +++ /dev/null @@ -1,50 +0,0 @@ -package certs - -import ( - "crypto/x509" - "fmt" - "strings" - "time" -) - -func getCertDetail(certificate *x509.Certificate) string { - humanName := certificate.Subject.CommonName - signerHumanName := certificate.Issuer.CommonName - if certificate.Subject.CommonName == certificate.Issuer.CommonName { - signerHumanName = "" - } - - usages := []string{} - for _, curr := range certificate.ExtKeyUsage { - if curr == x509.ExtKeyUsageClientAuth { - usages = append(usages, "client") - continue - } - if curr == x509.ExtKeyUsageServerAuth { - usages = append(usages, "serving") - continue - } - - usages = append(usages, fmt.Sprintf("%d", curr)) - } - - validServingNames := []string{} - for _, ip := range certificate.IPAddresses { - validServingNames = append(validServingNames, ip.String()) - } - for _, dnsName := range certificate.DNSNames { - validServingNames = append(validServingNames, dnsName) - } - servingString := "" - if len(validServingNames) > 0 { - servingString = fmt.Sprintf(" validServingFor=[%s]", strings.Join(validServingNames, ",")) - } - - groupString := "" - if len(certificate.Subject.Organization) > 0 { - groupString = fmt.Sprintf(" groups=[%s]", strings.Join(certificate.Subject.Organization, ",")) - } - - return fmt.Sprintf("%q [%s]%s%s issuer=%q (%v to %v (now=%v))", humanName, strings.Join(usages, ","), groupString, servingString, signerHumanName, certificate.NotBefore.UTC(), certificate.NotAfter.UTC(), - time.Now().UTC()) -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/config.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/config.go index a0a91a32c..75d1276c4 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/config.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/config.go @@ -18,11 +18,10 @@ package server import ( "crypto/tls" + "crypto/x509" "fmt" - "io/ioutil" "net" "net/http" - "os" goruntime "runtime" "sort" "strconv" @@ -33,8 +32,8 @@ import ( jsonpatch "github.com/evanphx/json-patch" "github.com/go-openapi/spec" "github.com/pborman/uuid" + "k8s.io/klog" - corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/apimachinery/pkg/util/sets" @@ -56,18 +55,15 @@ import ( apirequest "k8s.io/apiserver/pkg/endpoints/request" "k8s.io/apiserver/pkg/features" genericregistry "k8s.io/apiserver/pkg/registry/generic" - "k8s.io/apiserver/pkg/server/certs" genericfilters "k8s.io/apiserver/pkg/server/filters" "k8s.io/apiserver/pkg/server/healthz" "k8s.io/apiserver/pkg/server/routes" serverstore "k8s.io/apiserver/pkg/server/storage" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/informers" - "k8s.io/client-go/kubernetes" - v1 "k8s.io/client-go/kubernetes/typed/core/v1" restclient "k8s.io/client-go/rest" + certutil "k8s.io/client-go/util/cert" "k8s.io/component-base/logs" - "k8s.io/klog" openapicommon "k8s.io/kube-openapi/pkg/common" // install apis @@ -159,9 +155,6 @@ type Config struct { // If specified, long running requests such as watch will be allocated a random timeout between this value, and // twice this value. Note that it is up to the request handlers to ignore or honor this timeout. In seconds. MinRequestTimeout int - // MinimalShutdownDuration allows to block shutdown for some time, e.g. until endpoints pointing to this API server - // have converged on all node. During this time, the API server keeps serving. - MinimalShutdownDuration time.Duration // The limit on the total size increase all "copy" operations in a json // patch may cause. // This affects all places that applies json patch in the binary. @@ -187,9 +180,6 @@ type Config struct { // If not specify any in flags, then genericapiserver will only enable defaultAPIResourceConfig. MergedResourceConfig *serverstore.ResourceConfig - // EventSink receives events about the life cycle of the API server, e.g. readiness, serving, signals and termination. - EventSink EventSink - //=========================================================================== // values below here are targets for removal //=========================================================================== @@ -200,11 +190,6 @@ type Config struct { PublicAddress net.IP } -// EventSink allows to create events. -type EventSink interface { - Create(event *corev1.Event) (*corev1.Event, error) -} - type RecommendedConfig struct { Config @@ -223,14 +208,15 @@ type SecureServingInfo struct { // Listener is the secure server network listener. Listener net.Listener - // ClientCA is the certificate bundle for all the signers that you'll recognize for incoming client certificates - ClientCA certs.CABundleFileReferences + // Cert is the main server cert which is used if SNI does not match. Cert must be non-nil and is + // allowed to be in SNICerts. + Cert *tls.Certificate - DefaultCertificate certs.CertKeyFileReference - NameToCertificate map[string]*certs.CertKeyFileReference + // SNICerts are the TLS certificates by name used for SNI. + SNICerts map[string]*tls.Certificate - // LoopbackCert holds the special certificate that we create for loopback connections - LoopbackCert *tls.Certificate + // ClientCA is the certificate bundle for all the signers that you'll recognize for incoming client certificates + ClientCA *x509.CertPool // MinTLSVersion optionally overrides the minimum TLS version supported. // Values are from tls package constants (https://golang.org/pkg/crypto/tls/#pkg-constants). @@ -243,9 +229,6 @@ type SecureServingInfo struct { // HTTP2MaxStreamsPerConnection is the limit that the api server imposes on each client. // A value of zero means to use the default provided by golang's HTTP/2 support. HTTP2MaxStreamsPerConnection int - - // HTTP1Only indicates that http2 should not be enabled. - HTTP1Only bool } type AuthenticationInfo struct { @@ -258,10 +241,6 @@ type AuthenticationInfo struct { // If this is true, a basic auth challenge is returned on authentication failure // TODO(roberthbailey): Remove once the server no longer supports http basic auth. SupportsBasicAuth bool - - // DynamicReloadFns are post-start hooks used to dynamically refresh authentication information. - // Only the authencation builder knows how to wire them and only this level of code knows how apply them. - DynamicReloadFns map[string]PostStartHookFunc } type AuthorizationInfo struct { @@ -287,7 +266,6 @@ func NewConfig(codecs serializer.CodecFactory) *Config { MaxMutatingRequestsInFlight: 200, RequestTimeout: time.Duration(60) * time.Second, MinRequestTimeout: 1800, - MinimalShutdownDuration: 0, // 10MB is the recommended maximum client request size in bytes // the etcd server should accept. See // https://github.com/etcd-io/etcd/blob/release-3.3/etcdserver/server.go#L90. @@ -342,7 +320,16 @@ func DefaultOpenAPIConfig(getDefinitions openapicommon.GetOpenAPIDefinitions, de func (c *AuthenticationInfo) ApplyClientCert(clientCAFile string, servingInfo *SecureServingInfo) error { if servingInfo != nil { if len(clientCAFile) > 0 { - servingInfo.ClientCA.CABundles = append(servingInfo.ClientCA.CABundles, clientCAFile) + clientCAs, err := certutil.CertsFromFile(clientCAFile) + if err != nil { + return fmt.Errorf("unable to load client CA file: %v", err) + } + if servingInfo.ClientCA == nil { + servingInfo.ClientCA = x509.NewCertPool() + } + for _, cert := range clientCAs { + servingInfo.ClientCA.AddCert(cert) + } } } @@ -424,10 +411,6 @@ func (c *Config) Complete(informers informers.SharedInformerFactory) CompletedCo c.DiscoveryAddresses = discovery.DefaultAddresses{DefaultAddress: c.ExternalAddress} } - if c.EventSink == nil { - c.EventSink = nullEventSink{} - } - AuthorizeClientBearerToken(c.LoopbackClientConfig, &c.Authentication, &c.Authorization) if c.RequestInfoResolver == nil { @@ -440,58 +423,9 @@ func (c *Config) Complete(informers informers.SharedInformerFactory) CompletedCo // Complete fills in any fields not set that are required to have valid data and can be derived // from other fields. If you're going to `ApplyOptions`, do that first. It's mutating the receiver. func (c *RecommendedConfig) Complete() CompletedConfig { - if c.ClientConfig != nil { - ref, err := eventReference() - if err != nil { - klog.Warningf("Failed to derive event reference, won't create events: %v", err) - c.EventSink = nullEventSink{} - } else { - ns := ref.Namespace - if len(ns) == 0 { - ns = "default" - } - c.EventSink = &v1.EventSinkImpl{ - Interface: kubernetes.NewForConfigOrDie(c.ClientConfig).CoreV1().Events(ns), - } - } - } - return c.Config.Complete(c.SharedInformerFactory) } -func eventReference() (*corev1.ObjectReference, error) { - ns := os.Getenv("POD_NAMESPACE") - pod := os.Getenv("POD_NAME") - if len(ns) == 0 && len(pod) > 0 { - serviceAccountNamespaceFile := "/var/run/secrets/kubernetes.io/serviceaccount/namespace" - if _, err := os.Stat(serviceAccountNamespaceFile); err == nil { - bs, err := ioutil.ReadFile(serviceAccountNamespaceFile) - if err != nil { - return nil, err - } - ns = string(bs) - } - } - if len(ns) == 0 { - pod = "" - ns = "kube-system" - } - if len(pod) == 0 { - return &corev1.ObjectReference{ - Kind: "Namespace", - Name: ns, - APIVersion: "v1", - }, nil - } - - return &corev1.ObjectReference{ - Kind: "Pod", - Namespace: ns, - Name: pod, - APIVersion: "v1", - }, nil -} - // New creates a new server which logically combines the handling chain with the passed server. // name is used to differentiate for logging. The handler chain in particular can be difficult as it starts delgating. // delegationTarget may not be nil. @@ -519,9 +453,8 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G delegationTarget: delegationTarget, HandlerChainWaitGroup: c.HandlerChainWaitGroup, - minRequestTimeout: time.Duration(c.MinRequestTimeout) * time.Second, - MinimalShutdownDuration: c.MinimalShutdownDuration, - ShutdownTimeout: c.RequestTimeout, + minRequestTimeout: time.Duration(c.MinRequestTimeout) * time.Second, + ShutdownTimeout: c.RequestTimeout, SecureServingInfo: c.SecureServing, ExternalAddress: c.ExternalAddress, @@ -542,17 +475,8 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G enableAPIResponseCompression: c.EnableAPIResponseCompression, maxRequestBodyBytes: c.MaxRequestBodyBytes, - - eventSink: c.EventSink, } - ref, err := eventReference() - if err != nil { - klog.Warningf("Failed to derive event reference, won't create events: %v", err) - c.EventSink = nullEventSink{} - } - s.eventRef = ref - for { if c.JSONPatchMaxCopyBytes <= 0 { break @@ -585,16 +509,6 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G } } - // often, authentication config is passed through multiple delegated apiservers. If the authentication - // dynamic reloads themselves conflict, we only need to register the first one because there is only one authentication - // chain. In any case where you may need more than one, you should always deconflict the names as we have - // in kube-apiserver's authentication chain versus the generic delegated one - for name, dynamicReloadFn := range c.Authentication.DynamicReloadFns { - if !s.isPostStartHookRegistered(name) { - s.AddPostStartHookOrDie(name, dynamicReloadFn) - } - } - for _, delegateCheck := range delegationTarget.HealthzChecks() { skip := false for _, existingCheck := range c.HealthzChecks { @@ -721,9 +635,3 @@ func AuthorizeClientBearerToken(loopback *restclient.Config, authn *Authenticati tokenAuthorizer := authorizerfactory.NewPrivilegedGroups(user.SystemPrivilegedGroup) authz.Authorizer = authorizerunion.New(tokenAuthorizer, authz.Authorizer) } - -type nullEventSink struct{} - -func (nullEventSink) Create(event *corev1.Event) (*corev1.Event, error) { - return nil, nil -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/config_selfclient.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/config_selfclient.go index da1b1e733..53f179527 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/config_selfclient.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/config_selfclient.go @@ -20,13 +20,15 @@ import ( "fmt" "net" - "k8s.io/apiserver/pkg/server/certs" - restclient "k8s.io/client-go/rest" ) +// LoopbackClientServerNameOverride is passed to the apiserver from the loopback client in order to +// select the loopback certificate via SNI if TLS is used. +const LoopbackClientServerNameOverride = "apiserver-loopback-client" + func (s *SecureServingInfo) NewClientConfig(caCert []byte) (*restclient.Config, error) { - if s == nil { + if s == nil || (s.Cert == nil && len(s.SNICerts) == 0) { return nil, nil } @@ -57,7 +59,7 @@ func (s *SecureServingInfo) NewLoopbackClientConfig(token string, loopbackCert [ } c.BearerToken = token - c.TLSClientConfig.ServerName = certs.LoopbackClientServerNameOverride + c.TLSClientConfig.ServerName = LoopbackClientServerNameOverride return c, nil } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/filters/BUILD b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/filters/BUILD index ff10a83a6..44b669deb 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/filters/BUILD +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/filters/BUILD @@ -45,9 +45,7 @@ go_library( importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/server/filters", importpath = "k8s.io/apiserver/pkg/server/filters", deps = [ - "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", @@ -57,7 +55,6 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/endpoints/metrics:go_default_library", "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/httplog:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//vendor/github.com/emicklei/go-restful:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/filters/waitgroup.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/filters/waitgroup.go index f40be0d13..b40a42272 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/filters/waitgroup.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/filters/waitgroup.go @@ -18,16 +18,11 @@ package filters import ( "errors" - "fmt" "net/http" - "k8s.io/api/core/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/runtime" utilwaitgroup "k8s.io/apimachinery/pkg/util/waitgroup" "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" apirequest "k8s.io/apiserver/pkg/endpoints/request" - "k8s.io/client-go/kubernetes/scheme" ) // WithWaitGroup adds all non long-running requests to wait group, which is used for graceful shutdown. @@ -43,13 +38,7 @@ func WithWaitGroup(handler http.Handler, longRunning apirequest.LongRunningReque if !longRunning(req, requestInfo) { if err := wg.Add(1); err != nil { - // When apiserver is shutting down, signal clients to retry - w.Header().Add("Retry-After", "1") - w.Header().Set("Content-Type", runtime.ContentTypeJSON) - w.Header().Set("X-Content-Type-Options", "nosniff") - statusErr := apierrors.NewServiceUnavailable("apiserver is shutting down").Status() - w.WriteHeader(int(statusErr.Code)) - fmt.Fprintln(w, runtime.EncodeOrDie(scheme.Codecs.LegacyCodec(v1.SchemeGroupVersion), &statusErr)) + http.Error(w, "apiserver is shutting down.", http.StatusInternalServerError) return } defer wg.Done() diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go index a47a9f566..450488e13 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/genericapiserver.go @@ -19,7 +19,6 @@ package server import ( "fmt" "net/http" - "os" gpath "path" "strings" "sync" @@ -27,8 +26,8 @@ import ( systemd "github.com/coreos/go-systemd/daemon" "github.com/go-openapi/spec" + "k8s.io/klog" - corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -46,7 +45,6 @@ import ( "k8s.io/apiserver/pkg/server/routes" utilopenapi "k8s.io/apiserver/pkg/util/openapi" restclient "k8s.io/client-go/rest" - "k8s.io/klog" openapibuilder "k8s.io/kube-openapi/pkg/builder" openapicommon "k8s.io/kube-openapi/pkg/common" "k8s.io/kube-openapi/pkg/handler" @@ -147,9 +145,9 @@ type GenericAPIServer struct { preShutdownHooksCalled bool // healthz checks - healthzLock sync.Mutex - healthzChecks []healthz.HealthzChecker - healthChecksLocked bool + healthzLock sync.Mutex + healthzChecks []healthz.HealthzChecker + healthzCreated bool // auditing. The backend is started after the server starts listening. AuditBackend audit.Backend @@ -169,17 +167,9 @@ type GenericAPIServer struct { // HandlerChainWaitGroup allows you to wait for all chain handlers finish after the server shutdown. HandlerChainWaitGroup *utilwaitgroup.SafeWaitGroup - // MinimalShutdownDuration allows to block shutdown for some time, e.g. until endpoints pointing to this API server - // have converged on all node. During this time, the API server keeps serving. - MinimalShutdownDuration time.Duration - // The limit on the request body size that would be accepted and decoded in a write request. // 0 means no limit. maxRequestBodyBytes int64 - - // EventSink creates events. - eventSink EventSink - eventRef *corev1.ObjectReference } // DelegationTarget is an interface which allows for composition of API servers with top level handling that works @@ -280,58 +270,27 @@ func (s *GenericAPIServer) PrepareRun() preparedGenericAPIServer { // Run spawns the secure http server. It only returns if stopCh is closed // or the secure port cannot be listened on initially. func (s preparedGenericAPIServer) Run(stopCh <-chan struct{}) error { - delayedStopCh := make(chan struct{}) - - go func() { - defer close(delayedStopCh) - <-stopCh - - s.Eventf(corev1.EventTypeNormal, "TerminationStart", "Received signal to terminate, becoming unready, but keeping serving") - - time.Sleep(s.MinimalShutdownDuration) - - s.Eventf(corev1.EventTypeNormal, "TerminationMinimalShutdownDurationFinished", "The minimal shutdown duration of %v finished", s.MinimalShutdownDuration) - }() - - s.installReadyz(stopCh) - - // close socket after delayed stopCh - serverDoneCh, err := s.NonBlockingRun(delayedStopCh) + err := s.NonBlockingRun(stopCh) if err != nil { return err } - go func() { - <-serverDoneCh - s.Eventf(corev1.EventTypeNormal, "TerminationStoppedServing", "Server has stopped listening") - }() - <-stopCh - // run shutdown hooks directly. This includes deregistering from the kubernetes endpoint in case of kube-apiserver. err = s.RunPreShutdownHooks() if err != nil { return err } - s.Eventf(corev1.EventTypeNormal, "TerminationPreShutdownHooksFinished", "All pre-shutdown hooks have been finished") - - // wait for the delayed stopCh before closing the handler chain (it rejects everything after Wait has been called). - <-delayedStopCh // Wait for all requests to finish, which are bounded by the RequestTimeout variable. s.HandlerChainWaitGroup.Wait() - s.Eventf(corev1.EventTypeNormal, "TerminationGracefulTerminationFinished", "All pending requests processed") - - // wait for server listener to be closed - <-serverDoneCh - s.Eventf(corev1.EventTypeNormal, "TerminatingFinished", "Termination sequence finished") return nil } // NonBlockingRun spawns the secure http server. An error is // returned if the secure port cannot be listened on. -func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) (<-chan struct{}, error) { +func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) error { // Use an stop channel to allow graceful shutdown without dropping audit events // after http server shutdown. auditStopCh := make(chan struct{}) @@ -340,7 +299,7 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) (<-chan // before http server start serving. Otherwise the Backend.ProcessEvents call might block. if s.AuditBackend != nil { if err := s.AuditBackend.Run(auditStopCh); err != nil { - return nil, fmt.Errorf("failed to run the audit backend: %v", err) + return fmt.Errorf("failed to run the audit backend: %v", err) } } @@ -352,12 +311,8 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) (<-chan stoppedCh, err = s.SecureServingInfo.Serve(s.Handler, s.ShutdownTimeout, internalStopCh) if err != nil { close(internalStopCh) - return nil, err + return err } - } else { - ch := make(chan struct{}) - close(ch) - stoppedCh = ch } // Now that listener have bound successfully, it is the @@ -365,7 +320,6 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) (<-chan // ensure cleanup. go func() { <-stopCh - close(internalStopCh) if stoppedCh != nil { <-stoppedCh @@ -380,7 +334,7 @@ func (s preparedGenericAPIServer) NonBlockingRun(stopCh <-chan struct{}) (<-chan klog.Errorf("Unable to send systemd daemon successful start message: %v\n", err) } - return stoppedCh, nil + return nil } // installAPIResources is a private method for installing the REST storage backing each api groupversionresource @@ -517,39 +471,6 @@ func (s *GenericAPIServer) newAPIGroupVersion(apiGroupInfo *APIGroupInfo, groupV } } -// Eventf creates an event with the API server as source, either in default namespace against default namespace, or -// if POD_NAME/NAMESPACE are set against that pod. -func (s *GenericAPIServer) Eventf(eventType, reason, messageFmt string, args ...interface{}) { - t := metav1.Time{Time: time.Now()} - host, _ := os.Hostname() // expicitly ignore error. Empty host is fine - - ref := *s.eventRef - if len(ref.Namespace) == 0 { - ref.Namespace = "default" // TODO: event broadcaster sets event ns to default. We have to match. Odd. - } - - e := &corev1.Event{ - ObjectMeta: metav1.ObjectMeta{ - Name: fmt.Sprintf("%v.%x", ref.Name, t.UnixNano()), - Namespace: ref.Namespace, - }, - InvolvedObject: ref, - Reason: reason, - Message: fmt.Sprintf(messageFmt, args...), - FirstTimestamp: t, - LastTimestamp: t, - Count: 1, - Type: eventType, - Source: corev1.EventSource{Component: "apiserver", Host: host}, - } - - klog.V(2).Infof("Event(%#v): type: '%v' reason: '%v' %v", e.InvolvedObject, e.Type, e.Reason, e.Message) - - if _, err := s.eventSink.Create(e); err != nil { - klog.Warningf("failed to create event %s/%s: %v", e.Namespace, e.Name, err) - } -} - // NewDefaultAPIGroupInfo returns an APIGroupInfo stubbed with "normal" values // exposed for easier composition from other packages func NewDefaultAPIGroupInfo(group string, scheme *runtime.Scheme, parameterCodec runtime.ParameterCodec, codecs serializer.CodecFactory) APIGroupInfo { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/healthz.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/healthz.go index a60adfa10..43e102b5c 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/healthz.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/healthz.go @@ -18,7 +18,6 @@ package server import ( "fmt" - "net/http" "k8s.io/apiserver/pkg/server/healthz" ) @@ -28,7 +27,7 @@ func (s *GenericAPIServer) AddHealthzChecks(checks ...healthz.HealthzChecker) er s.healthzLock.Lock() defer s.healthzLock.Unlock() - if s.healthChecksLocked { + if s.healthzCreated { return fmt.Errorf("unable to add because the healthz endpoint has already been created") } @@ -40,35 +39,7 @@ func (s *GenericAPIServer) AddHealthzChecks(checks ...healthz.HealthzChecker) er func (s *GenericAPIServer) installHealthz() { s.healthzLock.Lock() defer s.healthzLock.Unlock() - s.healthChecksLocked = true + s.healthzCreated = true healthz.InstallHandler(s.Handler.NonGoRestfulMux, s.healthzChecks...) } - -// installReadyz creates the readyz endpoint for this server, using the defined healthz check plus a termination check -// that fails when the process is terminating. -func (s *GenericAPIServer) installReadyz(stopCh <-chan struct{}) { - s.healthzLock.Lock() - defer s.healthzLock.Unlock() - s.healthChecksLocked = true - - healthz.InstallPathHandler(s.Handler.NonGoRestfulMux, "/readyz", append([]healthz.HealthzChecker{terminationCheck{stopCh}}, s.healthzChecks...)...) -} - -// terminationCheck fails if the embedded channel is closed during termination of the process. -type terminationCheck struct { - StopCh <-chan struct{} -} - -func (terminationCheck) Name() string { - return "terminating" -} - -func (c terminationCheck) Check(req *http.Request) error { - select { - case <-c.StopCh: - return fmt.Errorf("process is terminating") - default: - } - return nil -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go index 3dfe9831c..ebb3dadfb 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/healthz/healthz.go @@ -181,7 +181,6 @@ func handleRootHealthz(checks ...HealthzChecker) http.HandlerFunc { } // always be verbose on failure if failed { - klog.V(2).Infof("%vhealthz check failed", verboseOut.String()) http.Error(w, fmt.Sprintf("%vhealthz check failed", verboseOut.String()), http.StatusInternalServerError) return } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/authentication.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/authentication.go index b203fecd7..02fed5f45 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/authentication.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/authentication.go @@ -217,7 +217,7 @@ func (s *DelegatingAuthenticationOptions) ApplyTo(c *server.AuthenticationInfo, } // create authenticator - authenticator, securityDefinitions, dynamicReloadFuncs, err := cfg.New() + authenticator, securityDefinitions, err := cfg.New() if err != nil { return err } @@ -226,16 +226,6 @@ func (s *DelegatingAuthenticationOptions) ApplyTo(c *server.AuthenticationInfo, openAPIConfig.SecurityDefinitions = securityDefinitions } c.SupportsBasicAuth = false - if c.DynamicReloadFns == nil { - c.DynamicReloadFns = map[string]server.PostStartHookFunc{} - } - for k, dynamicReloadFn := range dynamicReloadFuncs { - fnCopy := dynamicReloadFn - c.DynamicReloadFns[k] = func(context server.PostStartHookContext) error { - go fnCopy(context.StopCh) - return nil - } - } return nil } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/authorization.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/authorization.go index b18a50160..5d81d9e86 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/authorization.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/authorization.go @@ -187,10 +187,5 @@ func (s *DelegatingAuthorizationOptions) getClient() (kubernetes.Interface, erro clientConfig.QPS = 200 clientConfig.Burst = 400 - // make the client use protobuf - protoConfig := rest.CopyConfig(clientConfig) - protoConfig.AcceptContentTypes = "application/vnd.kubernetes.protobuf,application/json" - protoConfig.ContentType = "application/vnd.kubernetes.protobuf" - - return kubernetes.NewForConfig(protoConfig) + return kubernetes.NewForConfig(clientConfig) } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options.go index 12daad98c..02639bf93 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options.go @@ -42,7 +42,6 @@ type ServerRunOptions struct { MaxMutatingRequestsInFlight int RequestTimeout time.Duration MinRequestTimeout int - MinimalShutdownDuration time.Duration // We intentionally did not add a flag for this option. Users of the // apiserver library can wire it to a flag. JSONPatchMaxCopyBytes int64 @@ -61,7 +60,6 @@ func NewServerRunOptions() *ServerRunOptions { MaxMutatingRequestsInFlight: defaults.MaxMutatingRequestsInFlight, RequestTimeout: defaults.RequestTimeout, MinRequestTimeout: defaults.MinRequestTimeout, - MinimalShutdownDuration: defaults.MinimalShutdownDuration, JSONPatchMaxCopyBytes: defaults.JSONPatchMaxCopyBytes, MaxRequestBodyBytes: defaults.MaxRequestBodyBytes, } @@ -75,7 +73,6 @@ func (s *ServerRunOptions) ApplyTo(c *server.Config) error { c.MaxMutatingRequestsInFlight = s.MaxMutatingRequestsInFlight c.RequestTimeout = s.RequestTimeout c.MinRequestTimeout = s.MinRequestTimeout - c.MinimalShutdownDuration = s.MinimalShutdownDuration c.JSONPatchMaxCopyBytes = s.JSONPatchMaxCopyBytes c.MaxRequestBodyBytes = s.MaxRequestBodyBytes c.PublicAddress = s.AdvertiseAddress @@ -122,10 +119,6 @@ func (s *ServerRunOptions) Validate() []error { errors = append(errors, fmt.Errorf("--min-request-timeout can not be negative value")) } - if s.MinimalShutdownDuration < 0 { - errors = append(errors, fmt.Errorf("--minimum-shutdown-duration can not be negative value")) - } - if s.JSONPatchMaxCopyBytes < 0 { errors = append(errors, fmt.Errorf("--json-patch-max-copy-bytes can not be negative value")) } @@ -181,9 +174,5 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) { "handler, which picks a randomized value above this number as the connection timeout, "+ "to spread out load.") - fs.DurationVar(&s.MinimalShutdownDuration, "minimal-shutdown-duration", s.MinimalShutdownDuration, ""+ - "Minimal duration of a graceful shutdown, e.g. to guarantee that all endpoints pointing to this API server "+ - "have converged") - utilfeature.DefaultMutableFeatureGate.AddFlag(fs) } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options_test.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options_test.go index 4fd8b3008..bb7e61823 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options_test.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/server_run_options_test.go @@ -136,22 +136,6 @@ func TestServerRunOptionsValidate(t *testing.T) { }, expectErr: "--max-resource-write-bytes can not be negative value", }, - { - name: "Test when MinimalShutdownDuration is negative value", - testOptions: &ServerRunOptions{ - AdvertiseAddress: net.ParseIP("192.168.10.10"), - CorsAllowedOriginList: []string{"10.10.10.100", "10.10.10.200"}, - MaxRequestsInFlight: 400, - MaxMutatingRequestsInFlight: 200, - RequestTimeout: time.Duration(2) * time.Minute, - MinRequestTimeout: 1800, - JSONPatchMaxCopyBytes: 10 * 1024 * 1024, - MaxRequestBodyBytes: 10 * 1024 * 1024, - TargetRAMMB: 65536, - MinimalShutdownDuration: -time.Second, - }, - expectErr: "--minimum-shutdown-duration can not be negative value", - }, { name: "Test when ServerRunOptions is valid", testOptions: &ServerRunOptions{ diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving.go index 1b4484b09..9a3841012 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving.go @@ -25,14 +25,13 @@ import ( "strings" "github.com/spf13/pflag" + "k8s.io/klog" utilnet "k8s.io/apimachinery/pkg/util/net" "k8s.io/apiserver/pkg/server" - "k8s.io/apiserver/pkg/server/certs" certutil "k8s.io/client-go/util/cert" "k8s.io/client-go/util/keyutil" cliflag "k8s.io/component-base/cli/flag" - "k8s.io/klog" ) type SecureServingOptions struct { @@ -223,10 +222,16 @@ func (s *SecureServingOptions) ApplyTo(config **server.SecureServingInfo) error } c := *config - c.NameToCertificate = map[string]*certs.CertKeyFileReference{} - c.DefaultCertificate = certs.CertKeyFileReference{ - Cert: s.ServerCert.CertKey.CertFile, - Key: s.ServerCert.CertKey.KeyFile, + serverCertFile, serverKeyFile := s.ServerCert.CertKey.CertFile, s.ServerCert.CertKey.KeyFile + // load main cert + if len(serverCertFile) != 0 || len(serverKeyFile) != 0 { + tlsCert, err := tls.LoadX509KeyPair(serverCertFile, serverKeyFile) + if err != nil { + return fmt.Errorf("unable to load server certificate: %v", err) + } + c.Cert = &tlsCert + } else if s.ServerCert.GeneratedCert != nil { + c.Cert = s.ServerCert.GeneratedCert } if len(s.CipherSuites) != 0 { @@ -244,16 +249,10 @@ func (s *SecureServingOptions) ApplyTo(config **server.SecureServingInfo) error } // load SNI certs - // holds the original filenames of the certificates. Because allow implicit specification of names, we have to read - // everything to get this to be able to drive the dynamicCertificateConfig namedTLSCerts := make([]server.NamedTLSCert, 0, len(s.SNICertKeys)) for _, nck := range s.SNICertKeys { tlsCert, err := tls.LoadX509KeyPair(nck.CertFile, nck.KeyFile) namedTLSCerts = append(namedTLSCerts, server.NamedTLSCert{ - OriginalFileName: &certs.CertKeyFileReference{ - Cert: nck.CertFile, - Key: nck.KeyFile, - }, TLSCert: tlsCert, Names: nck.Names, }) @@ -261,7 +260,7 @@ func (s *SecureServingOptions) ApplyTo(config **server.SecureServingInfo) error return fmt.Errorf("failed to load SNI cert and key: %v", err) } } - _, c.NameToCertificate, err = server.GetNamedCertificateMap(namedTLSCerts) + c.SNICerts, err = server.GetNamedCertificateMap(namedTLSCerts) if err != nil { return err } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving_test.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving_test.go index 3fc31038c..3b5d7f11f 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving_test.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving_test.go @@ -17,15 +17,25 @@ limitations under the License. package options import ( + "bytes" + cryptorand "crypto/rand" + "crypto/rsa" "crypto/tls" "crypto/x509" + "crypto/x509/pkix" + "encoding/base64" + "encoding/pem" "fmt" + "io/ioutil" + "math/big" "net" + "os" "path/filepath" "reflect" "strconv" "strings" "testing" + "time" "github.com/stretchr/testify/assert" @@ -34,8 +44,6 @@ import ( "k8s.io/apimachinery/pkg/version" "k8s.io/apiserver/pkg/server" . "k8s.io/apiserver/pkg/server" - "k8s.io/apiserver/pkg/server/certs" - servingcerttesting "k8s.io/apiserver/pkg/server/options/testing" "k8s.io/client-go/discovery" restclient "k8s.io/client-go/rest" cliflag "k8s.io/component-base/cli/flag" @@ -50,8 +58,13 @@ func setUp(t *testing.T) Config { return *config } +type TestCertSpec struct { + host string + names, ips []string // in certificate +} + type NamedTestCertSpec struct { - servingcerttesting.TestCertSpec + TestCertSpec explicitNames []string // as --tls-sni-cert-key explicit names } @@ -70,8 +83,8 @@ func TestGetNamedCertificateMap(t *testing.T) { // only one cert certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, }, }, @@ -83,9 +96,9 @@ func TestGetNamedCertificateMap(t *testing.T) { // ips are ignored certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", - IPs: []string{"1.2.3.4"}, + TestCertSpec: TestCertSpec{ + host: "test.com", + ips: []string{"1.2.3.4"}, }, }, }, @@ -97,13 +110,13 @@ func TestGetNamedCertificateMap(t *testing.T) { // two certs with the same name certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, }, { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, }, }, @@ -115,13 +128,13 @@ func TestGetNamedCertificateMap(t *testing.T) { // two certs with different names certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test2.com", + TestCertSpec: TestCertSpec{ + host: "test2.com", }, }, { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test1.com", + TestCertSpec: TestCertSpec{ + host: "test1.com", }, }, }, @@ -134,13 +147,13 @@ func TestGetNamedCertificateMap(t *testing.T) { // two certs with the same name, explicit trumps certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, }, { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, explicitNames: []string{"test.com"}, }, @@ -153,15 +166,15 @@ func TestGetNamedCertificateMap(t *testing.T) { // certs with partial overlap; ips are ignored certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "a", - Names: []string{"a.test.com", "test.com"}, + TestCertSpec: TestCertSpec{ + host: "a", + names: []string{"a.test.com", "test.com"}, }, }, { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "b", - Names: []string{"b.test.com", "test.com"}, + TestCertSpec: TestCertSpec{ + host: "b", + names: []string{"b.test.com", "test.com"}, }, }, }, @@ -175,16 +188,16 @@ func TestGetNamedCertificateMap(t *testing.T) { // wildcards certs: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "a", - Names: []string{"a.test.com", "test.com"}, + TestCertSpec: TestCertSpec{ + host: "a", + names: []string{"a.test.com", "test.com"}, }, explicitNames: []string{"*.test.com", "test.com"}, }, { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "b", - Names: []string{"b.test.com", "test.com"}, + TestCertSpec: TestCertSpec{ + host: "b", + names: []string{"b.test.com", "test.com"}, }, explicitNames: []string{"dev.test.com", "test.com"}, }}, @@ -201,7 +214,7 @@ NextTest: var namedTLSCerts []NamedTLSCert bySignature := map[string]int{} // index in test.certs by cert signature for j, c := range test.certs { - cert, err := servingcerttesting.CreateTestTLSCerts(c.TestCertSpec) + cert, err := createTestTLSCerts(c.TestCertSpec) if err != nil { t.Errorf("%d - failed to create cert %d: %v", i, j, err) continue NextTest @@ -212,7 +225,7 @@ NextTest: Names: c.explicitNames, }) - sig, err := servingcerttesting.CertSignature(cert) + sig, err := certSignature(cert) if err != nil { t.Errorf("%d - failed to get signature for %d: %v", i, j, err) continue NextTest @@ -220,7 +233,7 @@ NextTest: bySignature[sig] = j } - certMap, _, err := GetNamedCertificateMap(namedTLSCerts) + certMap, err := GetNamedCertificateMap(namedTLSCerts) if err == nil && len(test.errorString) != 0 { t.Errorf("%d - expected no error, got: %v", i, err) } else if err != nil && err.Error() != test.errorString { @@ -231,7 +244,7 @@ NextTest: x509Certs, err := x509.ParseCertificates(cert.Certificate[0]) assert.NoError(t, err, "%d - invalid certificate for %q", i, name) assert.True(t, len(x509Certs) > 0, "%d - expected at least one x509 cert in tls cert for %q", i, name) - got[name] = bySignature[servingcerttesting.X509CertSignature(x509Certs[0])] + got[name] = bySignature[x509CertSignature(x509Certs[0])] } assert.EqualValues(t, test.expected, got, "%d - wrong certificate map", i) @@ -241,7 +254,7 @@ NextTest: func TestServerRunWithSNI(t *testing.T) { tests := map[string]struct { - Cert servingcerttesting.TestCertSpec + Cert TestCertSpec SNICerts []NamedTestCertSpec ExpectedCertIndex int @@ -253,44 +266,44 @@ func TestServerRunWithSNI(t *testing.T) { ExpectLoopbackClientError bool }{ "only one cert": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - IPs: []string{"127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + ips: []string{"127.0.0.1"}, }, ExpectedCertIndex: -1, }, "cert with multiple alternate names": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - Names: []string{"test.com"}, - IPs: []string{"127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + names: []string{"test.com"}, + ips: []string{"127.0.0.1"}, }, ExpectedCertIndex: -1, ServerName: "test.com", }, "one SNI and the default cert with the same name": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - IPs: []string{"127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + ips: []string{"127.0.0.1"}, }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "localhost", + TestCertSpec: TestCertSpec{ + host: "localhost", }, }, }, ExpectedCertIndex: 0, }, "matching SNI cert": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - IPs: []string{"127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + ips: []string{"127.0.0.1"}, }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", + TestCertSpec: TestCertSpec{ + host: "test.com", }, }, }, @@ -300,15 +313,15 @@ func TestServerRunWithSNI(t *testing.T) { "matching IP in SNI cert and the server cert": { // IPs must not be passed via SNI. Hence, the ServerName in the // HELLO packet is empty and the server should select the non-SNI cert. - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - IPs: []string{"10.0.0.1", "127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + ips: []string{"10.0.0.1", "127.0.0.1"}, }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", - IPs: []string{"10.0.0.1"}, + TestCertSpec: TestCertSpec{ + host: "test.com", + ips: []string{"10.0.0.1"}, }, }, }, @@ -316,15 +329,15 @@ func TestServerRunWithSNI(t *testing.T) { ServerName: "10.0.0.1", }, "wildcards": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", - IPs: []string{"127.0.0.1"}, + Cert: TestCertSpec{ + host: "localhost", + ips: []string{"127.0.0.1"}, }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "test.com", - Names: []string{"*.test.com"}, + TestCertSpec: TestCertSpec{ + host: "test.com", + names: []string{"*.test.com"}, }, }, }, @@ -333,55 +346,55 @@ func TestServerRunWithSNI(t *testing.T) { }, "loopback: LoopbackClientServerNameOverride not on any cert": { - Cert: servingcerttesting.TestCertSpec{ - Host: "test.com", + Cert: TestCertSpec{ + host: "test.com", }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "localhost", + TestCertSpec: TestCertSpec{ + host: "localhost", }, }, }, ExpectedCertIndex: 0, }, "loopback: LoopbackClientServerNameOverride on server cert": { - Cert: servingcerttesting.TestCertSpec{ - Host: certs.LoopbackClientServerNameOverride, + Cert: TestCertSpec{ + host: server.LoopbackClientServerNameOverride, }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: "localhost", + TestCertSpec: TestCertSpec{ + host: "localhost", }, }, }, ExpectedCertIndex: 0, }, "loopback: LoopbackClientServerNameOverride on SNI cert": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", + Cert: TestCertSpec{ + host: "localhost", }, SNICerts: []NamedTestCertSpec{ { - TestCertSpec: servingcerttesting.TestCertSpec{ - Host: certs.LoopbackClientServerNameOverride, + TestCertSpec: TestCertSpec{ + host: server.LoopbackClientServerNameOverride, }, }, }, ExpectedCertIndex: -1, }, "loopback: bind to 0.0.0.0 => loopback uses localhost": { - Cert: servingcerttesting.TestCertSpec{ - Host: "localhost", + Cert: TestCertSpec{ + host: "localhost", }, ExpectedCertIndex: -1, LoopbackClientBindAddressOverride: "0.0.0.0", }, } - specToName := func(spec servingcerttesting.TestCertSpec) string { - name := spec.Host + "_" + strings.Join(spec.Names, ",") + "_" + strings.Join(spec.IPs, ",") + specToName := func(spec TestCertSpec) string { + name := spec.host + "_" + strings.Join(spec.names, ",") + "_" + strings.Join(spec.ips, ",") return strings.Replace(name, "*", "star", -1) } @@ -393,11 +406,11 @@ func TestServerRunWithSNI(t *testing.T) { certDir := "testdata/" + specToName(test.Cert) serverCertBundleFile := filepath.Join(certDir, "cert") serverKeyFile := filepath.Join(certDir, "key") - err := servingcerttesting.GetOrCreateTestCertFiles(serverCertBundleFile, serverKeyFile, test.Cert) + err := getOrCreateTestCertFiles(serverCertBundleFile, serverKeyFile, test.Cert) if err != nil { t.Fatalf("failed to create server cert: %v", err) } - ca, err := servingcerttesting.CACertFromBundle(serverCertBundleFile) + ca, err := caCertFromBundle(serverCertBundleFile) if err != nil { t.Fatalf("failed to extract ca cert from server cert bundle: %v", err) } @@ -405,7 +418,7 @@ func TestServerRunWithSNI(t *testing.T) { // create SNI certs var namedCertKeys []cliflag.NamedCertKey - serverSig, err := servingcerttesting.CertFileSignature(serverCertBundleFile, serverKeyFile) + serverSig, err := certFileSignature(serverCertBundleFile, serverKeyFile) if err != nil { t.Fatalf("failed to get server cert signature: %v", err) } @@ -416,7 +429,7 @@ func TestServerRunWithSNI(t *testing.T) { sniDir := filepath.Join(certDir, specToName(c.TestCertSpec)) certBundleFile := filepath.Join(sniDir, "cert") keyFile := filepath.Join(sniDir, "key") - err := servingcerttesting.GetOrCreateTestCertFiles(certBundleFile, keyFile, c.TestCertSpec) + err := getOrCreateTestCertFiles(certBundleFile, keyFile, c.TestCertSpec) if err != nil { t.Fatalf("failed to create SNI cert %d: %v", j, err) } @@ -427,14 +440,14 @@ func TestServerRunWithSNI(t *testing.T) { Names: c.explicitNames, }) - ca, err := servingcerttesting.CACertFromBundle(certBundleFile) + ca, err := caCertFromBundle(certBundleFile) if err != nil { t.Fatalf("failed to extract ca cert from SNI cert %d: %v", j, err) } caCerts = append(caCerts, ca) // store index in namedCertKeys with the signature as the key - sig, err := servingcerttesting.CertFileSignature(certBundleFile, keyFile) + sig, err := certFileSignature(certBundleFile, keyFile) if err != nil { t.Fatalf("failed get SNI cert %d signature: %v", j, err) } @@ -515,7 +528,7 @@ func TestServerRunWithSNI(t *testing.T) { defer conn.Close() // check returned server certificate - sig := servingcerttesting.X509CertSignature(conn.ConnectionState().PeerCertificates[0]) + sig := x509CertSignature(conn.ConnectionState().PeerCertificates[0]) gotCertIndex, found := signatures[sig] if !found { t.Errorf("unknown signature returned from server: %s", sig) @@ -550,11 +563,97 @@ func TestServerRunWithSNI(t *testing.T) { if expected := &v; !reflect.DeepEqual(got, expected) { t.Errorf("loopback client didn't get correct version info: expected=%v got=%v", expected, got) } - }) } } +func parseIPList(ips []string) []net.IP { + var netIPs []net.IP + for _, ip := range ips { + netIPs = append(netIPs, net.ParseIP(ip)) + } + return netIPs +} + +func createTestTLSCerts(spec TestCertSpec) (tlsCert tls.Certificate, err error) { + certPem, keyPem, err := generateSelfSignedCertKey(spec.host, parseIPList(spec.ips), spec.names) + if err != nil { + return tlsCert, err + } + + tlsCert, err = tls.X509KeyPair(certPem, keyPem) + return tlsCert, err +} + +func getOrCreateTestCertFiles(certFileName, keyFileName string, spec TestCertSpec) (err error) { + if _, err := os.Stat(certFileName); err == nil { + if _, err := os.Stat(keyFileName); err == nil { + return nil + } + } + + certPem, keyPem, err := generateSelfSignedCertKey(spec.host, parseIPList(spec.ips), spec.names) + if err != nil { + return err + } + + os.MkdirAll(filepath.Dir(certFileName), os.FileMode(0755)) + err = ioutil.WriteFile(certFileName, certPem, os.FileMode(0755)) + if err != nil { + return err + } + + os.MkdirAll(filepath.Dir(keyFileName), os.FileMode(0755)) + err = ioutil.WriteFile(keyFileName, keyPem, os.FileMode(0755)) + if err != nil { + return err + } + + return nil +} + +func caCertFromBundle(bundlePath string) (*x509.Certificate, error) { + pemData, err := ioutil.ReadFile(bundlePath) + if err != nil { + return nil, err + } + + // fetch last block + var block *pem.Block + for { + var nextBlock *pem.Block + nextBlock, pemData = pem.Decode(pemData) + if nextBlock == nil { + if block == nil { + return nil, fmt.Errorf("no certificate found in %q", bundlePath) + + } + return x509.ParseCertificate(block.Bytes) + } + block = nextBlock + } +} + +func x509CertSignature(cert *x509.Certificate) string { + return base64.StdEncoding.EncodeToString(cert.Signature) +} + +func certFileSignature(certFile, keyFile string) (string, error) { + cert, err := tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return "", err + } + return certSignature(cert) +} + +func certSignature(cert tls.Certificate) (string, error) { + x509Certs, err := x509.ParseCertificates(cert.Certificate[0]) + if err != nil { + return "", err + } + return x509CertSignature(x509Certs[0]), nil +} + func fakeVersion() version.Info { return version.Info{ Major: "42", @@ -564,3 +663,55 @@ func fakeVersion() version.Info { GitTreeState: "Dirty", } } + +// generateSelfSignedCertKey creates a self-signed certificate and key for the given host. +// Host may be an IP or a DNS name +// You may also specify additional subject alt names (either ip or dns names) for the certificate +func generateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS []string) ([]byte, []byte, error) { + priv, err := rsa.GenerateKey(cryptorand.Reader, 2048) + if err != nil { + return nil, nil, err + } + + template := x509.Certificate{ + SerialNumber: big.NewInt(1), + Subject: pkix.Name{ + CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()), + }, + NotBefore: time.Unix(0, 0), + NotAfter: time.Now().Add(time.Hour * 24 * 365 * 100), + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + BasicConstraintsValid: true, + IsCA: true, + } + + if ip := net.ParseIP(host); ip != nil { + template.IPAddresses = append(template.IPAddresses, ip) + } else { + template.DNSNames = append(template.DNSNames, host) + } + + template.IPAddresses = append(template.IPAddresses, alternateIPs...) + template.DNSNames = append(template.DNSNames, alternateDNS...) + + derBytes, err := x509.CreateCertificate(cryptorand.Reader, &template, &template, &priv.PublicKey, priv) + if err != nil { + return nil, nil, err + } + + // Generate cert + certBuffer := bytes.Buffer{} + if err := pem.Encode(&certBuffer, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}); err != nil { + return nil, nil, err + } + + // Generate key + keyBuffer := bytes.Buffer{} + if err := pem.Encode(&keyBuffer, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { + return nil, nil, err + } + + return certBuffer.Bytes(), keyBuffer.Bytes(), nil +} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving_with_loopback.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving_with_loopback.go index ae47ce548..7f1920642 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving_with_loopback.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/serving_with_loopback.go @@ -21,7 +21,6 @@ import ( "fmt" "github.com/pborman/uuid" - "k8s.io/apiserver/pkg/server/certs" "k8s.io/apiserver/pkg/server" "k8s.io/client-go/rest" @@ -52,7 +51,7 @@ func (s *SecureServingOptionsWithLoopback) ApplyTo(secureServingInfo **server.Se // create self-signed cert+key with the fake server.LoopbackClientServerNameOverride and // let the server return it when the loopback client connects. - certPem, keyPem, err := certutil.GenerateSelfSignedCertKey(certs.LoopbackClientServerNameOverride, nil, nil) + certPem, keyPem, err := certutil.GenerateSelfSignedCertKey(server.LoopbackClientServerNameOverride, nil, nil) if err != nil { return fmt.Errorf("failed to generate self-signed certificate for loopback connection: %v", err) } @@ -72,7 +71,7 @@ func (s *SecureServingOptionsWithLoopback) ApplyTo(secureServingInfo **server.Se default: *loopbackClientConfig = secureLoopbackClientConfig - (*secureServingInfo).LoopbackCert = &tlsCert + (*secureServingInfo).SNICerts[server.LoopbackClientServerNameOverride] = &tlsCert } return nil diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/cert index f03753fd7..fade595fc 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/cert @@ -1,20 +1,20 @@ -----BEGIN CERTIFICATE----- MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAvMS0wKwYDVQQDDCRhcGlz -ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE1NTE0NjE2MTEwIBcNNzAwMTAxMDAwMDAw -WhgPMjExOTAyMDUxNzMzMzFaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj -ay1jbGllbnRAMTU1MTQ2MTYxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBANLDA8hPGaFWjGXhwQr0nGmAEeEJtyEvRGz+OBzljbvVoprxXtkVFZZ/kTvp -XST5e2HXffZyYFi8krnCzWOnOmFSnI2QlfhQoEEXnuT0qkbeydbIJykknwjgHjXA -gWSqgklaH2eSJ92ADwmxEajwka/GzSL4xY5vOa3mz7mI4WwASbWU1YGDXJQxkZ76 -QLamokI5w7FdBPoupyMlMjy7hVL9sueiRpnTcASQ4X75MeAog/YBTS71+FjzguTL -Hil6rhFn8euesiOqXw6Vv1JGZFxuD5/qlsFf8YM+MGHkMbgwE80P7Pleem11cTRw -GIMdH5YoJE6zZzuDjwrD+sPDvxECAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG +ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE0OTYzMzA2NTYwIBcNNzAwMTAxMDAwMDAw +WhgPMjExNzA1MDgxNTI0MTZaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj +ay1jbGllbnRAMTQ5NjMzMDY1NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAMScrdc+XlUPHsDvnN2fFxSSQrhrKBlrHBcelaiFwR1vWt2EXxErVUoRGA+1 +jvQ5Y4NePS46Zpq2N+yibiWjaC0fsS4W2UvPAfdD4nxOp5SaTBy5A0XI+JU8QmbI +Rls+C/fSeYaXSKp5Jq41uTKGc+QwT9pqCeV7N74DSc6kvNh7mIBc4YCOzMnhQq5H +KQVCeDPURxfh7Ew+v13dLYDq7V6O1jBjfg3Rm/RRFnM78kcc51QTOo9ZSs5HgahU +eM4YirHz8ujswhgxzH43TeOGds3McGKv1HMHKJKinX02IHJBqV6U5y/AH92wi0Sp +IKgJ4GJaj/Vda/kPUtf5cL2sOt0CAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG A1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wJAYDVR0RBB0wG4IZ -YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEAifij -rr7l+SIRHu7V6epRGuqKqSHSzOPW5jAIP+zg7eWyAXECzNS+8OfSS+8ZnX+VyT0P -2yKtAxiKYQX+OIWc+CvpjhrPpwUTuyGu4zx5YuUDetidsWQFgvCURU7E9430HX/O -4lVH7yPepjJYxocQ8up4Do6PhRYPah7EnhptOOgqDbkNH+NfJf1Clk+U54Wt88BZ -xH2J5a+kyoSOilcrDasF4T3AzMJ/EujShd1l8ZeZj/Ue7iaeJMYjmCSzFR5+dxFS -jYNXZTsqx4pD5wPzRuMTpBgwxC8gsZ/e+0Sv1NvTJaD9vUI99RlTHO/8Xzmz/okl -GTuj1HyeySAydsof1Q== +YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEALlZe +LJ3i6WQhpgV3jPWuIBTXJ0bb3cbYnk4JLWYW9sIjMakfAlZK9VrfRZKOhI8DsGsG +PVcYOyc5TQM0JkcsCKajyA6HktpMFEtxBfSJOlRAdvvj1GtRnifcA5xBqn1SzL2H +tFx5etii70spZD3jDht2bKLZmL2NbGGVOWiKdtz6qR+V9U4F+uYCq+phKgnLeDz3 +RiMIGvDpliWU/R1jgdi3RENtP8QGhjiwVDGYJBB26ZQGDkd4HYPZj9bROMknnRFk +fbP/P+cmvXrwScvrXLFkNQe/4LfJAJnod4ropQ84z/Cu2JaFbJau4TSlbp57y9ON +7fpK9SV4bTCyO34Uew== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/key index 48e3ea9ed..6eae7eb18 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA0sMDyE8ZoVaMZeHBCvScaYAR4Qm3IS9EbP44HOWNu9WimvFe -2RUVln+RO+ldJPl7Ydd99nJgWLySucLNY6c6YVKcjZCV+FCgQRee5PSqRt7J1sgn -KSSfCOAeNcCBZKqCSVofZ5In3YAPCbERqPCRr8bNIvjFjm85rebPuYjhbABJtZTV -gYNclDGRnvpAtqaiQjnDsV0E+i6nIyUyPLuFUv2y56JGmdNwBJDhfvkx4CiD9gFN -LvX4WPOC5MseKXquEWfx656yI6pfDpW/UkZkXG4Pn+qWwV/xgz4wYeQxuDATzQ/s -+V56bXVxNHAYgx0fligkTrNnO4OPCsP6w8O/EQIDAQABAoIBAGt9KiCuttOh4FjV -mi6MMnlb58JtwggaozszLEsQiAiUHCoJj+YG6sumo9t6WRbSZiqwTH20N48KHYq/ -3yBD2XJpP46zfsj11cVc1pzOa0lZtnbj/ZTuKG3OX5nqZBODIo9mdz3LPKmq9gBr -XiZbCvIq4dREK/1InJIkdSyastzxG7DQSDgNeNLLkkPuxm5vStWRceQjkgNCjNda -6lYwI3JekArB+VXt9MiiOvtrUbJJt6/ZcsLvlOvNGdHvJS2EqFhr5Jq65ePGvuzT -TKrtQ+dq1j4ch/+9ogdext+LOpEZ/rKO3xQ9SNmWmbbKQpZB6wJirX7ph/nqrri9 -+rDIhUECgYEA69qlAS/SoU60E50PzYKDNw1zsx8PImBGDOx6bHLtRT5PbzDzvC8d -olJCoKPaGhNnOjzXZXexrxICtHs2GXB9zDYJDoqBP/cCgL0JheSuA9rTKIbRS801 -ICkamYrrLa6SM4cQHh71DHGWTspAPvBzfZPP21OcD1bu0x47b9A4j1MCgYEA5MOv -DjhHlGwPCfWnNw37hSYYugLCoAGMUvAksY9FSrkfeqppZJynQsz3lcx9edsBbRDl -/omJ9IKa+wbdBXvC/szgsBqnjSUVZ4sgrZ2uE6I2T1EU1ZUmg91B/obvAxXWIGRJ -ci8ek242PWUhzsjqkqhpz2cAQHXHR5nW8kSFv4sCgYEAtrFVsTanFHZPfQXjcNBQ -7bsIzU4YvgsPGAGxzwGzEzjx9PJZSoLAlLTdkWt6jUpMYsswGhP+Wds8pyrtvATs -HNwaZd4Zwj+G+8vybXm25ZuCh1jvFKVvKmtMhHUcOPWJoEpVzM80CCCQSpXV8Cr3 -euWdU4pPT36KXpSDe9gxh6sCgYAt+K0LHIA18WksRTNvOt4aqcc6Sie2Y9lBKYUW -MYZpN759thUr5Ncv82Sls8xbWol003qEpjsU6dIfNAfifDZ5Yc6dVR3qnVMp1amh -ehhrVaO4WMDpEuoEgcgrUA5j/lVjeQPRcGqikflQaSxcE8Af7Lwms7o3OfPsDZxG -X0LJdQKBgATT+JS2XRcPp0Gsdb/jhxzEh7D9dETm0XtiNFOG91Vout9S4BPWHuYv -KT0+zVMCyg4YKUJB8MTVuKsdmXXrBv/iVW+I12Wtb4Y8AUc/FPl+Qg+QLr+z8x6t -JSIFw0YuGcJNxX9+meZywcVWe7RTJuMsHp7A/3FnNoWr6c5WQdhP +MIIEpgIBAAKCAQEAxJyt1z5eVQ8ewO+c3Z8XFJJCuGsoGWscFx6VqIXBHW9a3YRf +EStVShEYD7WO9Dljg149LjpmmrY37KJuJaNoLR+xLhbZS88B90PifE6nlJpMHLkD +Rcj4lTxCZshGWz4L99J5hpdIqnkmrjW5MoZz5DBP2moJ5Xs3vgNJzqS82HuYgFzh +gI7MyeFCrkcpBUJ4M9RHF+HsTD6/Xd0tgOrtXo7WMGN+DdGb9FEWczvyRxznVBM6 +j1lKzkeBqFR4zhiKsfPy6OzCGDHMfjdN44Z2zcxwYq/UcwcokqKdfTYgckGpXpTn +L8Af3bCLRKkgqAngYlqP9V1r+Q9S1/lwvaw63QIDAQABAoIBAQCCiJ9mM3M/t80s +PSmBflk9gCmp9QLndVRuCRFFlJ/1IfRK89KGPKXgid7WtyzU+rEWC+BEq+NpPid9 +BQ5qEMZehxcESYk1KpfciYZ6D2J1Z8e2niMNFvPraNmREdCcTWJ2w5eJgzFsdQj4 +SpTNdbTFwEmT8ijl4dvNXLOI7ZivhJ1vVGW2qUJQyR5xo+GuXZZVVJW6vndkzHoA +SJDSii4PMAisibu+Uw8JQM1rYFD2olvSWSnjz+kCk2IbrqhVPOW9PoYETn2DxXfY +0miUGq4KwtNjFnqJO+CDTJL6Y7LrZbKdSVTKfiY5ReLckWhx4RKn01T9RhsrS979 +bee+iynlAoGBAOVDKy9t3kN7FTQJyMGa3QAVUV8B5OPUIyuUOhzMrbIFECtYFXxY +jsnRNf1i2PbVsl9WDrPikNCVyn5Tf4xU7YUH7/Jo+Ha978Fu9tNf95RK+A2GKtiO +8jQa6nkII8Fmql9o3xjCEQD0VBirrm1h3sbC3ylKL4u+yC0a6W7vFRRfAoGBANuK +tIvCRGoEyn8nzSXUez7+/9sIwU7jV6lXL7qgdukr7o/ZBqer48CDlehXU48yiVpB +TuMZnloj/Ndf9X07t/yYwfCP7lpdq6lR7EhG5yS0WjgHjv5+QKLVA7ocrEufgBKA +Wdb+96eyOb1bgBMprtYA8wbhblhut8rk+i8SkdpDAoGBAJPxY0XI/VvIamdZRP6C +Y8iw+QB5JW5Lr6JolZOOFSxCjiuaPMswDnx3kAKCLgYi4mcZDoXQV6jycGhSk4VI +LLni5FkmmeduK/BEHe1LCWXddvKrOKzkmbE8CUCvGvurt5e4AfdlDDn0cOw2pWma +dXsHt6BaahIgu+Y3bpmSmKS7AoGBAJGlhX2qleSX5RdSemD8g/8ZAPh46HXDkSaA +9uMjDYBHau73ldiqyl+vbEZFmOPJLSI5bXJwToOSmGzx9lTsx3TGivNjKUe+GOIt +vUl98F6DX88IBK+FZrAgDWbtGsjYugiMKg3d/MK+FFwxVdhgsOK8on4QFDqKyVfL +bMbJ1QUtAoGBAK4nM5GZyefXylAnq+pzGTStu0Q1AVzN0iWO0G0Q6gaItvk82Scf +wVoEGE9a2pDCR1I1mbJn1jRxd6/GtXvR4TJSxPILS+B8aZFkxl9WIWjv/mnKJkVL +PmSNPbieuban9TRBu6nQfWOfLMHmBnG/QXbx2X1WCRoXjICT41gJ5et3 -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/cert index fb9d661c6..3fb375592 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxMjAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -MlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCrKOdmF5x2F20IQTM9VDNX2uYy46ESLm4aWCNB -84ULr735NtJVRwHJaYVJd4Os6xbf1lLq4yBmXEyOH2h62XHimlNh4rvsF9OtlCQU -+7kJU7ZtOcjHqplJjlD7t9sIE2H6tctuQp0lxiMTWKS5dcU1DNW55hCEWGujw4Tn -ZB8OIA+ce/+b0wyIWNuRHmUKWExwS276eBc9gmPxppHFQqg9sxivYh9BVD0WNVj4 -qSUvUmomEMUlw0lLdVmQ8IxOVDzelnlEssPWlnqz4XZG+nhb6qYR79HBvO4A+J6F -dpLWuLfLZz/Eqp2QnZrVq28txKoyz7TQs9t7kd2/yskVnodlAgMBAAGjTjBMMA4G +bGhvc3RAMTQ5NjMzMDY1NzAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +N1owHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTcwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDhpeY6j6ujZc2W0paC9pmVHlEhbnsH/L0N3JjA +WooyZWgsARSlv95Vh2M1gVymu7mah3HHzQkVe6vN5bfngOO4A2d3fxYP0304+3YE +TCariZzcEk9Ot90VHNasTVMOqZ2qdGRUvEXbpRWlIhA+T9FgNxpBDQV5yb5w67Dl +kBM22wn5l/YM/4HqSOTVQON1SmmLUPlnWtzxVRDKPzI2zxpKkzW4U1bYgdwM/Xeo +B2GjU+1UsBlJWGrRQhCkiFuZ92agls1bsu3+PE2leoQf6vZE+pc0m89v0lqlcgOQ +TcI19BFvLjUneDbu4kFZWDO+f23hhEcHut26IXtOoAIvk9uhAgMBAAGjTjBMMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAW+ao -mOU69+Mc5aq9G7n8Ugr7fM7tnTMS+2FUXGvSjzxckjb96KBtpjUPFpRdFSExYpaV -uLNK84JpFpypmurTCXRj3687JSm7linPr5K3n0DTaaF87G+MXErwXDcOUz89BLAm -xnZRCdJKAytZloNFR3mFb2p65O/Xo/wlhF6yx1MwHNF/uinLJdINhvPk4qae6od8 -WPrqKDrSPKaZw/rSgBzBPAK6bQRmtXqwdQjjnPI3bbeSRonqaVqX7VFdhNJgPf1P -c3GfrlynsxD90eLMAWOmVGMRZkhDKviDXsYVh4HUx5O4+U5HG3p1CwWHlHKiywY/ -ELhtjVoRehPFuOIFEQ== +AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAHlVy +2H1FxDXAJKeZkFCNAHOiThcm79s7P8+BXnYbQMgdHAiQIQFQDDwbntA607m0FRoZ +1H1n/rzkRXRrNJRPEd3aSnurq6oMMZa1Pai4e2f+kyThpIw6FtI2y/Jb7lKB428g +9AHtKSd71MEArOvWHi1IcX6rmH/vU5ezBgPpjtEC/5bI8PJMqr2osesjppKwwwjf +BTq+AjvxltPDb+fykto41IMzpM7KRO/vat/dZ5OZZOhDpbJlAAWUfCdlWcL0kqTt +ok+biBB4xShOwpSyKCmJg4otlvN7qJ34fCjYkQY+PXzGS6YV34Wj64F8mReTt4LO +glampIa1cLUWPMlYPQ== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/key index bfaab72fd..f9f40c6df 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/apiserver-loopback-client__/localhost__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAqyjnZhecdhdtCEEzPVQzV9rmMuOhEi5uGlgjQfOFC6+9+TbS -VUcByWmFSXeDrOsW39ZS6uMgZlxMjh9oetlx4ppTYeK77BfTrZQkFPu5CVO2bTnI -x6qZSY5Q+7fbCBNh+rXLbkKdJcYjE1ikuXXFNQzVueYQhFhro8OE52QfDiAPnHv/ -m9MMiFjbkR5lClhMcEtu+ngXPYJj8aaRxUKoPbMYr2IfQVQ9FjVY+KklL1JqJhDF -JcNJS3VZkPCMTlQ83pZ5RLLD1pZ6s+F2Rvp4W+qmEe/RwbzuAPiehXaS1ri3y2c/ -xKqdkJ2a1atvLcSqMs+00LPbe5Hdv8rJFZ6HZQIDAQABAoIBAQCEsq/EjSW2wK69 -qZ8KO0+bG5FBfw2PxQOD1TVwmlZaGySUJJapmuWdu/ukW85wr8sKO2YJyZGDCqgn -v94G8LLE1pUy3NCJWGe6uZHH2uk4e/iBcj1h37f8OSQ8I+zis/RQpcVUdLzVXmov -Q5hiWRZN7Od+uwmvMcYyLxHJO+x/y8ILEhYnlub1lgwK2xJQTXapKmn6Jza+b38T -lN1QMRry31sE7JCLNGeuTUBmStr6/cop90O7fg7zcAFtNVNwCfMze5Dyw/Uib2X2 -E0IXQKFbQMVELMzHv4NZRTSViKXRF/6q1mGBRycqZ6vI1RLVCB6VrvH7YVzyMe0L -dCcNuWF5AoGBAOHU/RZLsS5fYVkJqxLaOesn3un/sKWLJypTMzI5CxRCropskliW -wZkehMRc0limbQX1CX2Iw8z0e9xA+6kfqCjW4Udq5EJRtDt2UjTV03V0rslgktW1 -qPWtRULXCTtJEtcWAPRHUfj+JvlmMBy1lUtIdZfZfhTsaLCzVz0xvmpjAoGBAMIG -O6SSLhu5/xwQaHuOY0pDsUcI8OU36ZeJ+ZnoL4A1xhm7YdI3Jhv/kKn0IBIa/r0Z -l8BwmdGurYbMa7/lju4VepYNak2cmg4eck3k8NXr1AS7q+F41cAnuQ1fBB0cA2lT -N2qEhxWa9saYlJs+R3nupaZzh8IrAOm/xXKg2k2XAoGBAMvbkHtH6LGLuDy/1YY3 -KIF2hGuHPNazPq+eW2DCzZWEfDrIt3Lw4+JtAjyf7eHImjH+eIqxos6pBAZXQtXw -lcQH9WSawWJ8js3+iUbYnwIwSnfOjb4NNnBP8W3c36B83lz6p/HbT8wM4PHRpSzF -XfePeVeSJZaNshOQUPgUp2cxAoGAGZyPBPNS6NANj9vOnvi1vJjg7tqMSgWubRWG -gD14/7iZdM4aZJBpFGsQ4o5aKWms1LNrJ7j1ZQtk1pVnZ8ZarqzhKKuOq74PS+vS -9NtSuzpNG27WioXT2XCk6dHwDhOjk6SrfQEPf9eb2a1MeI2pC7xn22gGtKfOkAyD -eNUo2/MCgYA/piWrauh8Rgr8zSZT5LGfGJhqvgRTHxo5/TNf2R57LKg5PLIbDm/2 -JnZ0T7WfDGjl9dpJ21rVOVtGTzz5+YMm9w3Fn5Ob0KWbt2cbWH0j05ZyNKJVD4iJ -y2WwXBYwQCkoOVddIbt0Jctfz8bt2kJYiZypLlcmOzegX+MM9l9+Gg== +MIIEpAIBAAKCAQEA4aXmOo+ro2XNltKWgvaZlR5RIW57B/y9DdyYwFqKMmVoLAEU +pb/eVYdjNYFcpru5modxx80JFXurzeW354DjuANnd38WD9N9OPt2BEwmq4mc3BJP +TrfdFRzWrE1TDqmdqnRkVLxF26UVpSIQPk/RYDcaQQ0Fecm+cOuw5ZATNtsJ+Zf2 +DP+B6kjk1UDjdUppi1D5Z1rc8VUQyj8yNs8aSpM1uFNW2IHcDP13qAdho1PtVLAZ +SVhq0UIQpIhbmfdmoJbNW7Lt/jxNpXqEH+r2RPqXNJvPb9JapXIDkE3CNfQRby41 +J3g27uJBWVgzvn9t4YRHB7rduiF7TqACL5PboQIDAQABAoIBABg+G6MVBmqyqEjY +7SS627tCm5LM7Njp1WHk3mBkGc7aSDvaDd7U400rE4SPFmYvavxoKtg9dglh1Q50 +7LIpjc2aSAZ1l+gxX5W8pmxFxi3NxhV6vhyF8nGvPH0cfZzoqjDC+niEFblIXi/0 +newj5SnCIcb1YC46d4RoPgQb24ScBiQi3DeuqiDPQO3cyePyr5TEpeL4djB8YgK3 +yAgKFotsox1sMz1r0AX4JdoC2cYBh6qmGs+qdkMYW3O5XKjkkWS7dglqHIchhsrr +P38kuyp30fMrE40+5G9hKi3WO/nl3FP/eDM8BD60QF1edXobszfd8BsVnrBfbfjP +wDP51rECgYEA5/hLWVPXvTkSJeWzkEYx2PvubClr4fZE8j4oYTikD3q86R6UkEhe +c/yZd9WNBgwUrLG4SV3TaqEWvyUEnsaNbI1YK7e4PrhMSLLZ0G040jW8TA1SE2kT +fnJ5g4ZRWTNvksBTcs3QtMC8FzFazQ7gKIYz+SXopxeww5D8T/ok/WUCgYEA+QXz +/mYUnUMt4kWfcMDDbiYCgVSJK71E5M5qH2yxjB7NFLcl0+udQ5FrrW2YEgr3DnSV +Okbg4ZcmdnjCOU7Xu5BlU0GWe5lXiOBf0sUxrNU3OY5voVPYgSXJgTPRzguTpetA +2Liv/7x5dZ0krIKRTCKWu0iwcdOOaPrEouln740CgYBcrrckXLyBLTFUFP/2sCUw +hhBQBQjGwsfvZehqV+AtEyQxnHdNYqzieNW0rI1pEiCck3GHVsam/vAAtUCwU7Kj +4aGN7hzeanKIRXWDsnAWhUPTuyrE+KHCTujAJUWRd1yn7NIqt5Mg9TTxq1WVQtFL +P7u6W2wmfu+wY9h79/0ZhQKBgQCQoRt/wmvwlmbcxxD+HIakv6Cu2pk8dRXBSf0q +uSc5OV5kzKZEudBBwQDn3gH3YLTyiVVuXmIXw4DMSACN5jO3tPqUa0BqErpbPe2J +bYwXVFJZtFczPI4/G+I3jxAoemLLd6HW/RUDE8T7QUReiQq4TFJ8/Y+03GkWoaZ4 +89SwtQKBgQCmWHxz0eXQk3YRk0kupSrK88pZoc9wvcWYhzkiQpP6+hYPxH+n+U6s +NjHnQAVlRUIP0VisQRkBC4iy2ca/gVVhKgygVBuHC97fKAHlpUlO6Y7Ow031stAy +K3zrTjuVwsz8C6bFCxHl5ojP+0cSoK7qej09vj/te1DNvkYuE/0j4Q== -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/cert index aa567b371..8fb51107f 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/cert @@ -1,20 +1,20 @@ -----BEGIN CERTIFICATE----- MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAvMS0wKwYDVQQDDCRhcGlz -ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE1NTE0NjE2MTQwIBcNNzAwMTAxMDAwMDAw -WhgPMjExOTAyMDUxNzMzMzRaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj -ay1jbGllbnRAMTU1MTQ2MTYxNDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMrQ1GVa2g73UTCLjPPtp2rHk4awf8MEnKktncYMXbwYVdPV96/d5UumhOEX -rOjylMR2WZvkxhr4pn1Tl6emC/yFMbI4J32tRgFtIR0yNq8wFmVKsjFbF0+tnYzP -iux4rm0mo3gxsGL2ku7MoAWE4o2td2jXdJqvQ74ZD+zdQDshVLdCKWNinROwaHm1 -0ItX+d0q33gITtxE97g4065jIhhlj3bSA9EhvTWIPn/N/yV5Wg2GnVoElF90zMsq -O51JWvCJc7ctuVuqe2KmASDHIEW9VRuNJHlNQQ2mls2if5aPxPqijm6pQ6D7JN+j -NUK7ujyqztcEQlAAr2pWwfiU7TECAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG +ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE0OTYzMzA2NTgwIBcNNzAwMTAxMDAwMDAw +WhgPMjExNzA1MDgxNTI0MThaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj +ay1jbGllbnRAMTQ5NjMzMDY1ODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAPGTpeR8wkr9yxMV8LLI7UaImRF6T0ZT2HL7cmjZDbV3Ow9L8UXvlQ0SdKbT +ph2IU5Ww4h3xSiXXXGh0FSXALs1Ieg8DmMYKHNcnOXpShwuXBJ0NCpPSLnAO+2hg +Jq+ULvBTGjQhvCX+cjI5IquYp0sSbERS/+46cGrwWoye67Z9Xo6enNjHG8YZf35B +Wspvm0awUw1KcXkp+lJ9zoblBeXm+uXdMhzEyRpghRslwvtPKyU8YhTN63p0Ru1E +Kig3pctotL2n1/7+tR8yhjEstLiydHYWhLkX6wsUv+rNirUGVUBjF5VFtERzMPRK +0dh/hs3v2JSby56IxRcqqTSzvfECAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG A1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wJAYDVR0RBB0wG4IZ -YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEAcuDD -1KgI9gzAa62/NNV4eUsF1Sp4VLQ4J7PsecW9NxHkHHuZQrTcQPc7WCiEnUQVNq0t -YRT3WN1zQkf9e4UV1DB+RpezzwkVXNAjHgHQP+xY6LtEbgHK0qTEuecqWEjAzpKs -6wIrE7/4HQSE7i2BGSPBZqlZGSY3rHUi/mwVslWpITbZvcVXLKfHyOwcUK8D6vL4 -8V6KIQjG6n4Mt3D6fZvA96tNdoJfdYeVhAzGcFbQEIU0S5vk5rOv/ExkFx6XTyej -4M4eXgNnBAczHdn9LPhmdwE1ihw8gbSotBeg6wgECsdMY0VXwEXYABtsh7j3Z9Hs -jSjHEb9uzP6jdJt06Q== +YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEAEEd0 +MOqC0POVtxGCy/BHR6sVcf1r1BVTt28p7u1yJIdrOKuknlILt9iSNfFcNPRWIP+u +7SNPT8td6yViBgn7UMjvFxZgQn6kTsgTfdRV7eMxoX/jYzt0g44k0oVGv+xiJ+8q +m5Ng+tMOMuY1+JganxNad3mwdff4uKxXuVQsV+mjXBwaJHIdxBmCFqg/dGB60lyb +fxFjuTAT8xyL+UE3VUoCLFdNDgIsm0v3uj8nBsASW1LeZSbMQKUJXGlvEpj5U89d +B9ZouygfISPKQ02WYYDfSmtGCqX5sFZRh2uSPp0/UPUB+hUk7C0KN6TgsB9kOAD1 +Sa0X3+KhMRVOk7riaQ== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/key index 7d11d65ae..8b9712cf0 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/apiserver-loopback-client__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAytDUZVraDvdRMIuM8+2naseThrB/wwScqS2dxgxdvBhV09X3 -r93lS6aE4Res6PKUxHZZm+TGGvimfVOXp6YL/IUxsjgnfa1GAW0hHTI2rzAWZUqy -MVsXT62djM+K7HiubSajeDGwYvaS7sygBYTija13aNd0mq9DvhkP7N1AOyFUt0Ip -Y2KdE7BoebXQi1f53SrfeAhO3ET3uDjTrmMiGGWPdtID0SG9NYg+f83/JXlaDYad -WgSUX3TMyyo7nUla8Ilzty25W6p7YqYBIMcgRb1VG40keU1BDaaWzaJ/lo/E+qKO -bqlDoPsk36M1Qru6PKrO1wRCUACvalbB+JTtMQIDAQABAoIBAQCllKKi8O5wI4gc -awIzr8XsDm4qG3TjQaOpFz3lD/mC9Bc2MEzcPvvRrGx13L9lG49Lahg0hy0ZngFG -9nUtAQpuKkvtZZ0QJOOvjGnpjTJKCqduIPKkCutYOLUU3ehcsRYutMnm+iI4WXiS -D2thtiDEbGe9p5FiLE7RJ2LyDZw/6L0q/jobRnRM9CPio0jzjLSp/l8XAAcrLRjD -JyJ+I3BDhhdUCmpkdK/eH11WHtYK+J43c61Dc0YxewD00rbUPoKYq0D9/VFbEjrB -ckiDAokmpftGoHZiJUigNfQOk8IYCrxd6WWUJtTb6aLsPm8/B33xy8BXLp096gpZ -UqKgWUYBAoGBAOqBrv4Ee8yJfXceQ1NbTnz0SLq7vlE6tFCjbMhij4g7BITgfd5U -QcZKOYJtSfnNsHVOf0vS+pVT/mDlpOZLCRlDsspGZrgT0eRBkEP4KOsqIPu03mGv -D1xuyjcXZt1Mjl9oucFQo/2s3So+g0zYRxc0vUt3XJgEwr3DlYdqnfJRAoGBAN1n -knJLku2iDsRoLtnhZ2AGyXWX7O3yO2zFJzFD9gT/NZLwJ+9GLBJUv9wKa1nHFLgO -xiYXoIfynEU1iQdWWYs+ByVWKffPYGle8d+tmxAt72Qe19ig+K4crb3sQIBfPExK -MbOrjoFNkBU7epj9QM9oIN7TqZ2EOaahxPJUwrThAoGACLhbznxSMi/mp3hLnpzl -lUXsMm1qzVB2hg0drXHkzncLWvmSFKNjcsEt1EjGGHDqn+IUX7hvsv/VlLrVX+7o -XrUiv9zQUwYBpxA9Ehn3Q49kfJekMVO2KYTBJj1LiO0g2jFlvueFwZgc/UYn0cK1 -GgrPAzBkFA8RQsc0Fz4Cs5ECgYAucRJL/URFqm+0jTH+rARWJTZO/15Ijz4d08Ej -2WCarbncJ5oI28xU0AgqrNjVzSewcBDqXpxix+Y1skQbEObZiVpQX6GQBKTxlWPh -CnZzT19evgWCwElJpGRhaVQiWVe5nPqN+Jd80fs+KOrPepgEqY/zjayPiPPa2yYH -uvXYoQKBgQCyIrkA8sKYDbqC/uipgFiJWNK5C8g7424Ue0zLa12Y/P8ToVDrtSJT -3Fera5vKuCeQo9COcIxaC66pKTeRxx0fcEmrjKxluK/oqM1wxMNomTqiEIP1IgFQ -l2ZGPZ8lXMaN07TlHaKYxcJuUrQNBFe2PWuJ1IO8Zu1EJMrkHyAlZA== +MIIEpQIBAAKCAQEA8ZOl5HzCSv3LExXwssjtRoiZEXpPRlPYcvtyaNkNtXc7D0vx +Re+VDRJ0ptOmHYhTlbDiHfFKJddcaHQVJcAuzUh6DwOYxgoc1yc5elKHC5cEnQ0K +k9IucA77aGAmr5Qu8FMaNCG8Jf5yMjkiq5inSxJsRFL/7jpwavBajJ7rtn1ejp6c +2Mcbxhl/fkFaym+bRrBTDUpxeSn6Un3OhuUF5eb65d0yHMTJGmCFGyXC+08rJTxi +FM3renRG7UQqKDely2i0vafX/v61HzKGMSy0uLJ0dhaEuRfrCxS/6s2KtQZVQGMX +lUW0RHMw9ErR2H+Gze/YlJvLnojFFyqpNLO98QIDAQABAoIBAQCu+8LrSU83ILSr +I3ZRGmd8cs9lMJIhn/Ql/Wq29ZoPesjl4J1oig0OBfNHMAGgXLImuJRhGfkahe+i +nYr/6EA+ZCQ9od5UfNi9I+VnbEXzqDUoSV0DC/ilJMUIqrT68zw4ygkt/82YO8Ge +DXLGlvF+2F5h8zj854msfGMqfqbAbJDynA0ZDuq8SORUb/1RIiAZRrABZ1n6HsXv +cZb12wcycbxKTPfISkJDJ+PUVmCcm/eO3jLDgy2hAY5bCG6+HIO/N407Ze83TA81 +nBRM2WEA9BJbRmmB2yAEy2aJamT5lo5qORElmW0gEpAEceRgYi/VjPyvwjOw7IW3 +SlEDaYbNAoGBAPzt80mwWzgLH0SIqUadXbJILqZ1j/0sCr4r9CfIPppbZckaXbaC +iokh3dRaVBndI8z/aPz5+wmvNjqxQ4Jz+411ILK7G0ogYRJcTaQB7Vc2QTPtdu3t +HE1xCktyTAcyVJtrVYfpqaAKZ/eEnDmatxrMW1nmnFlZxBZErnSAjMl7AoGBAPSC +anORXVXqbM6d7XKXiXYLkagmB92LP36DQ3OXiVIH3CD2weItRvqup9+nIdMJMDyN +PR9CXSQXclFjVqpgPFKEAUNcGbTea45Kykw07CUYEdYRXRYtij0hhsRon+T6vsE7 +eEQQySG0ub6cTsFi/AuxWlPCkQLIhfCkVW4kvqyDAoGBAKBXEGXkgM9Ubav6nqT/ +WciNbdVkrbUnWGAaaRtXHCiqTCpiponu03f/mirmYG5M/EcWmy3UI0qOYmhuu4dV +k2CnoeTsLG6ffCoxjZ6tAhLJeCg9H6nRKKIHSSlu+beONoiYUI5qmHe2YRZOYOM7 +q1w3tKmXQgJ6n44mWBnO7HFFAoGBAJF5Rnyb8Dw9zZ7gt3WGU3K4T2ELv4JAZvaO +goMzlbAInR+/sHsxFRnw8FBQz/8PaHOeVM9UXLYsfQePYvDbcQhnIZlCIslJzBRM +yy+sDRPEzlfe3NNlJOpaGCSjWv6RcQzmpRdaJVC4hgqyVOkaS3tpeaR8Dmrpg0c5 +ftqZYhihAoGAMRbt+21F1BD3AGDseGIg4MQIEPfk7nh/cVFBcnXAqV49dmm1/g7G +L2itzJlTb1oOnlY9qBksocvnj3w8hsrWFvt/s0wv1e3uUJ1elCb18Rm4UQtr9td6 +XFqEgDaDYyj1iEmn+PrjQc+DqHn6JySLW4LTM82KWwDnMttvwLFhaOM= -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/cert index a1626dbbc..a402b3e80 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxMjAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -MlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDpFbJZhjnd/Q2UXW0AhBLJSz30mpVaVgpttoJw -KO4Ae4lkc0OFFHElzgltbPRBLBqFnIum6vP3BwTyxGo7ISGqADdUFHYgnkkFtq3X -tsToDm2j5n3BMsDPMsZgf9rKcKm8fHpqrS7ljit+Xp1oHfIuW8QLTJqTRMNcjMzp -u2xHKPG84J9A+W11FDDJ8NtIrH4qEnJH9ux0Kosy+VFzTasNapNTb1X0JBTDgteK -ck+oKv0T53NQnFF0A/Y6w6NEtV2SN36Om2bTtNOUrtmEAcx7+ldXHFn841Nr7Ev4 -P3Dfoj3KRv9oFj5Z3yvNz/G++MZHtUoYcNSQ7rv8jcm/r7pZAgMBAAGjTjBMMA4G +bGhvc3RAMTQ5NjMzMDY1NjAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +NlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTYwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDozgb3GKC3n9wREqYUm92/T0+NnEYkaWOitXAH +BW/Gj9PAF4sggnAey62H7mkBaUpw3s3RXyrqnRqrXVWvWgbSpf0Elp3zfos4raEf +hgWhqMh/SEf5ETHNRyfebxTSeQYRuZsvAPEsRWKf3AKFEykfW9y/GnKYM1elL0nx +Fgh0tq943epjHuzKfVWp8LxnFd7fyL+BQsvBNnYz0SH0F9oTUU3nDCS6Os/+EtNQ +SjP54HQ78XczI9AMvsFUS7yFEQdM8VW9uYhdv/Oyi9SLywhOCHSnV9buJ6F8URzO +B5Cawdteew7U+EAXbEwY2D84NARF/J8iA3Eh7+UKd27WA+pJAgMBAAGjTjBMMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAslMa -ioN0mqxCpMeSIoHQfEt25w2nVFMi1chWMuwGFP2V2tl7dJgs4DYyzSB7/2IBYmxL -WqgQH3rXk1TZUfdoOyjjks60EAtrtuby1QlQKAWckhclgB3s9s2G1P+c/JeXHM2b -8TaTjfb7ukKB3M1oZVq3/yKvyMVa+4XTTN2GyU+smifH65BE3uF5KJSGMW4eqkxT -G5lmOxTo8/onNB2XNSVFispW8z3x/cJW5vXw37aaEuBJeaJnZARk87UfAGvWbowC -AOyf0KQxI4q2j9LnK3Co6pOIc1XHMT04Nf9FOsCOWYwTvJJtGrzC2ulKRE2AVJ/E -IFko8n2DmztSrQsYrg== +AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEA5vjR +Q4Rjx8ko8+Zt9gRceKCVWEmdZLGkjwdW04YaIcrh41svm+tgxwUMdQ2beNjUbLZX +DAVvK99HiANBc9Ee4DyQFkLI2z0EiAJpuxMjZlyzMmKLeijOkIkxYIshhfc2Y2Fr +NIf6OXmFBEjqsudxkQiGfSqc443GseJmmiuhW3JR1a6ARgut4AtPsPv2TijX7tcR +Z9tjzAMiubNDQq0g/Eh9vLZkv8tNTqoJ5N5XV8jcovNWRcIIzl+lXBfy0o68LwO4 +Hn/MzcMxOdbNfFw5nMaDuQK4oO0vT3D9nedQkdV3keLZtagN9/PO1XtkCSQ5q7Le +LS6fs5zA/9sR2kEuGw== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/key index dd55d3817..91de1492f 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA6RWyWYY53f0NlF1tAIQSyUs99JqVWlYKbbaCcCjuAHuJZHND -hRRxJc4JbWz0QSwahZyLpurz9wcE8sRqOyEhqgA3VBR2IJ5JBbat17bE6A5to+Z9 -wTLAzzLGYH/aynCpvHx6aq0u5Y4rfl6daB3yLlvEC0yak0TDXIzM6btsRyjxvOCf -QPltdRQwyfDbSKx+KhJyR/bsdCqLMvlRc02rDWqTU29V9CQUw4LXinJPqCr9E+dz -UJxRdAP2OsOjRLVdkjd+jptm07TTlK7ZhAHMe/pXVxxZ/ONTa+xL+D9w36I9ykb/ -aBY+Wd8rzc/xvvjGR7VKGHDUkO67/I3Jv6+6WQIDAQABAoIBAFovyPiW1SEt3uk/ -VQPUFqjIckqI3a08iYB2E/Zt/9kz869oYgHGLRmhpUgv1jq5Y/G65tZJJui4UJPW -p/wFD8+FkeL4n9RzKnIJgy5qS7o2ivnWH2Z3yt7hGJ0SG4glG6gQyhUouXKdFfsp -hOJaY/DIFQ0CMPU2sBjJaiguGvFVC1tFdZKxTur+n4gT6Npydzul4jKXEwRBooCS -+wdpthtpaEvVMbUdIpT1NBApZXp+0W/ZMPxWxldeKFn2QmnICZ46898J5Jx779A/ -Yvrmi3tRpL/IvkQBqsMkCy3KAUd7bs0bRqWjwS95scdu69KdElBZP8DfnLSLFlPn -U0tUvwECgYEA9BaUfUEZXijfzcX2LXwF+H4fg2gYbi1Xnkt9ThF86QLw+QGzDpjE -ibsDp1jIoVLByLEMZW6qN+2qjiq73OUCIIp1JdNm+Jsv6l7OVvQg+h2kQ7zdsAKG -9Vrv8R65jcAnxnsqbLWhQTb4KKk/rc6nNiweP5ZXMErdhbAvofWvQskCgYEA9HWm -PHKxGYgI6RiUXMUV9XJ5d2Z9LWDslJEsdxeLxUfCWnvB/1U/M02NQECMh21LM6Hi -ngzVYaUnzOUEhTetY5zDEoxDb5cG7+l2b1uMXAf9HWvKbLYYnow+LINqzOsOQqVT -afZ/A+2hR9Id/hptf2pwk5AEoJPDh292iK2scxECgYEAgR1soLEN5TQD5wp/hWHk -mqTEsLMgsS9E+NP/zYsMowlORLm0aNVAqYaGkUAyqLtpDGszHniijAEpRhiu1VNC -g8oZ289u2bTlbLmHtpFe3E9PtBE0x0Ue9KyM3eQdzTDHGYPPVj/hs+iK7p9QsvTs -mIhP29z/8+i2M2CWYbrfYZkCgYEA5uOz5gYBpXapy9cuUczIJ7I+bXq8oj6YVN4l -HDp+Bg/3zlRzb8FJVyBZWCVfVY3x6Etvag3/ACHoTIrGUTi8KIhoar1V+DCyGajs -9tKF6GqXM9GaOEFpUV5uXsak+fTM3D+gYEWzw7cOjHI1Z8n4P879kzIEXNITbHjn -gMJgTbECgYEAjhvyw6eyk0Gnxn4iIALPRnxk8O8FxkbT+gLybsHjxMgowe/3vg7E -y+u6vECmClzXxynk+6sKcDWN/8eAZ9mzn64rmm94WVkuCpXlKNhSlm1yW9iQc7BL -uuGiQ3hzIcqzFSLj7gIf7AeJ6lrxJvIzAnEr00fKTP1E+DV6aAdgr+8= +MIIEpQIBAAKCAQEA6M4G9xigt5/cERKmFJvdv09PjZxGJGljorVwBwVvxo/TwBeL +IIJwHsuth+5pAWlKcN7N0V8q6p0aq11Vr1oG0qX9BJad836LOK2hH4YFoajIf0hH ++RExzUcn3m8U0nkGEbmbLwDxLEVin9wChRMpH1vcvxpymDNXpS9J8RYIdLaveN3q +Yx7syn1VqfC8ZxXe38i/gULLwTZ2M9Eh9BfaE1FN5wwkujrP/hLTUEoz+eB0O/F3 +MyPQDL7BVEu8hREHTPFVvbmIXb/zsovUi8sITgh0p1fW7iehfFEczgeQmsHbXnsO +1PhAF2xMGNg/ODQERfyfIgNxIe/lCndu1gPqSQIDAQABAoIBAQDBke1Ar32SsJzu +pS7qm975HxzqhjHcPLTXqT0I2YBi/Vv3sJvB4DMRqBEVoSo2PjHjP56qpBKvGQn/ +yo9gSd66b8G9eu7Cc0mXSudZqror/IcZLiSJ974NDUkdLgeGKZLeUhGyN3pQcTDb +8rc1pwTeSid1zqvR2X7ankNA7i0BvP6UXlvWM8kUvfFDwPXhHPZtkFELc4TeGIzB +e/l9Uk0DAgplkhM32s+0rTZ7wmcSUK9eh7/kiQCUKvdCVwegsK9iCVMaYIMggut1 +3KEHuVIbuLdjFu/tF4SN85funMIPxD7rKf38aDrR1vhQc5tq88dKwVrD8EANcA/f +34mAWSIBAoGBAPZLAGJ2McxIoK7ymyvGdNta0glzzbww20xLB3MHYpo+cgff4DN0 +3nA/es49So1m/r0MKjnC0qxVMceTrU4u43nROwbLNlFBZ8hzoEVobCCoykWKkhQO +hS6PkxBZ2s8nsSQCr3X+CpHd+JqT7Y98ydWVnE+kDOFIPr16j1SbBJS5AoGBAPH6 +73BDmHk4fBb9J2edNtx+7/1/+Lbb96qyy7LnA9zxdXgqjeZwFW/tNjtD2l+TPWlR +O1L0NkfnhzWPd7rDlQA7Tzr0TLF/H34+ycbaorc22M6GEg9zJwRY42EGbYJE5uRZ +Sq4jXOTOAta/lb+UjqWI7eYyH89SKlYcDut1VVoRAoGBANucUvJ427yBAi4dC3nE +EszJNcHR7aAhnFlyCWlrK2PHzJvy5xJa4kEKiXE+u6xMK1bccwZgDsQ1jxabOowd +SR6FD3HmXz+i52yYlU9uZgPVHc9WWRzjOaQjx4lr5ayTguNONbArXrdkStlikBBC +wCHfrqpg6E80wSTpFMbnFvWZAoGAPNSDOqqTeu27LCBJtp9r+jQi6owwHu/fK9c0 +o+21J+a/TA0OjP5iNTfhqTZegCZIiuAz1J+1wY+visRdKeMe4ucF/OELIpe9eAQa +v1WZEAvGpuxHQAEHru0Vg/+UqeneTUsxHeOf55juV8Pjxjx3O5/XhkXVf029fNYi +3ggqA7ECgYEAgowePEGL7l27raa6F9h4wuosfuFFdrrcOJeGxNV9jAe2s2KKoQFO +lCv/AcCsRepf9G235TqQ+if8a4p7OsHL9kxOspKBJKnwq3u+jgcJTl+HLWgnDjIc +Yk2xlnRC4N4OiGQrxjOmFXQdXiBK3T4CJnw5g0MynrdwiJCCCnEIG+A= -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/cert index f12dd8af1..e477a0f1b 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDFTCCAf2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxNzAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -N1owHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTcwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDEEQd6arkM654iC4aXORLAKz4hMOXbwXB9kauR -T3xeMyULHsIkC9jH248y+pfELMfk2ELHcvAeaS3qFoZ1LFJYfWnyJJo97JpDPDg9 -nUhk5YiYEXWpUoJ+n+baRcxm7oyg5eG0Oyy2qd+kXoyzX7JC2IDGmvT3oC29t5ce -KlXVclDW+lzbHYy0qJAg+al5v2Dcz835WUPDe91XAlDYq88sV4xESFuiafDcgg4r -uGvgm/Tvhc+Ve66RXKGAcTh6LHYkcuaWcjc5deimkdv7pfyJFtRS6/Co/QbSlQRf -e5yWxgqCGBpnxaE3O4lTnYEKFyKk5hchwoY/MZSLrWUJ0P9JAgMBAAGjWjBYMA4G +bGhvc3RAMTQ5NjMzMDY1OTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +OVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTkwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQD2NQ2T3x1nBhqWOCjiED71R+j80XsFxSMZXNJB +wUCCGZysf6OGO6M+NYZ2qov58gfGrcZYBJWwuSRF+0NeoVzkCu3AJkTKXSdtv2vi +M248yBUhvwPwbTcoMyG7p6LhLlmlPpP/7n9yVfVtRzFgy4UPYAlJmTnakk9jDKXM +gi717BjntQ01+2I/HIZls5B5vLwWuHtWrdng39Evn1RwtJrLUVJE5b6/+otvokXB +DpKMb/aI230uw9D3Csi+6iAKK9JuhCEe/S3ezJWg5SugG6UrwGBLZYavXP7iiB9p +u32XIe8lMqQfsiur7iCQehwxTdMJ7uR5STS5eqfoV2SdnlN/AgMBAAGjWjBYMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD AQH/MCAGA1UdEQQZMBeCCWxvY2FsaG9zdIcECgAAAYcEfwAAATANBgkqhkiG9w0B -AQsFAAOCAQEAomgRUKZGiw+cUvn/HbqL14PNWKpbY/KjLQib675Qv8BrfDDKGPTF -sfoN4f0RSxikwxzwn0hm2oc/vOiMR+d8AdDrJvBjnKUdAAWMSlpnVLgi7I1weydw -Cua5DX0EENzgJtoXBaSnVSDKAfFwarIChEVYqqUe3e4UU50kSaH29DPDpxctgDie -r1mNE77P0BnDRflGF+5J1PoA6nFJUJc9uEwd2fw3qhjBNGaKGD11KjzqxC+ihAW0 -fgBqjP+YUDZH7+jtSMW8wLPW6tfxGFYK0yFclFxKREOv5tY7Hd0UMpy/hsooEl/+ -b3+9Q/j+16l2t9TzyYl3no6cVj8VwOjP1g== +AQsFAAOCAQEAuVVTMV237szi8c9Oy5ulsmgYkp6MqfkKryy6Zi6r5UtJAWToAFu3 +dvHKnSQNgiWDewVKn+pMGNZuo3o6PGxdq/E2ZQ6/oCxNRThb7hC5IK4Yot40EUQ4 +ZavrmON0velXZJ3MwbzSzstLnJCR3maO+Ko0KPC/u4LADCQyeVrEZ4IP/RPQ2KZt +mdmeHTm53tLPrcNSnaoW+tMs6JxAT30xOLnjwYfEtbMCVhGB+aHQIGFS620qZ+dn +oTqrjempIIos0Vu68ZhCaDwgB9FiNtFMplxrBvOIfWO1Dz9AwPxP1fCMlZwtFJt8 +vuRu05WPJelfnEKXIuGhuGf369xyfw5cIA== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/key index efcd27b09..27ddac795 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAxBEHemq5DOueIguGlzkSwCs+ITDl28FwfZGrkU98XjMlCx7C -JAvYx9uPMvqXxCzH5NhCx3LwHmkt6haGdSxSWH1p8iSaPeyaQzw4PZ1IZOWImBF1 -qVKCfp/m2kXMZu6MoOXhtDsstqnfpF6Ms1+yQtiAxpr096AtvbeXHipV1XJQ1vpc -2x2MtKiQIPmpeb9g3M/N+VlDw3vdVwJQ2KvPLFeMREhbomnw3IIOK7hr4Jv074XP -lXuukVyhgHE4eix2JHLmlnI3OXXoppHb+6X8iRbUUuvwqP0G0pUEX3uclsYKghga -Z8WhNzuJU52BChcipOYXIcKGPzGUi61lCdD/SQIDAQABAoIBACi8IQGeCrRUf5Yz -LtNcWDj0wwPCVP9DQUvVZ//Ys84eciPNUCiNDYz4YNgGmGF5rE4vYDBwANNQpulr -pKPTgYhBBjH4yNL0xVgSutySQOg1iBuQBRIYwmPsdNoEhmMcTLthB3Oal7+bq4tK -2ZCq4S5iLN8Wcq6/6MDx08PAp/SgXm6dyyaj8zoTMU4CMd+4/oxVOhLk8MJXHXXD -QDi/uDHSpZ3AY0T9ZJl9MDURn3ZLljdoAHft6FJIdbK/BfZCtgc+tlKaADIRDkJB -HiBjgRxsOdiGIUwwkx1FsEMCojkszmywIxx/Y/whAZ0GStsC9zSxEoQwgLOL+xTw -uX8SRwECgYEA5IA+ElZcNEqZW6xyyrGPxezMCYZbJsBsGTVJpKMnN2h+0eBMw2W6 -+WxFFpYXeh4p0QE7z9BrGhsXcjLXvV/om6ihU4P8HOLH6cbBSlk/AqdEJ07Z+0g4 -JqTZhNJoVuCgo4DopvuGahvSM+YppcsXbBs4lLvZfWeMp1Oq2IkrK+UCgYEA26mI -XbAXMfI2GQ7Ic6cxJFA0+1jW8A1xPIT6vbtilQdT7OvXeg2+INKS0fBxVEfNp++G -ngD1gE2k/0L7YqL5676DGwTrEf1P1P9pri8oE3QSohjTze03zZFwo8l8djkFrFDu -LRf4Nknx8xh40n9qdp6UZ9OnXP8dSAzFNd6Vd5UCgYEAiLIHcCTlyAqQr/z8NzH+ -FqPQdCpCQW5/vJzaT3mjLkx/AcMzaPlk323b7uUfali9H2GjjHDcgaOPZSvxUEMd -/nDlAfdFTWqFud7DJ104irfR18oeMWtE3ClmT0UoUkDTGL03cR2rjbLTD2UzqRFU -E8I9GQ0/0PuvczJkVGHKx9kCgYAZWIR9mvXyM2p+lbAXeDE5aW/TmLqkVEi+nPF5 -twd2/rN2YPgqAy/vBZ0fUEkjWm2mdQLpdF7fgRYKxiXPidKgmwjxsy2Uk9AEWbxN -9u7+36POxGKcHkUUGTYQEA2mbonzChuRZHSlfv7F+Aro7v7P1Rh2qntjRaSRTbfr -sVU5yQKBgQC6VbCAlThNxdf9f26hR7mudkPVtr34V36H1PV+k45Gc5l2zGwJHb0l -wIF5H/APsSnSB1Lcjlmr1pr8YwO5acXEb4AzJX9W1f/827yC0rzFiUxAXGq8IvJ4 -Uc07SaaQdjIALH3qDAJbIO6yebV68w1qEyEALc1nRLJsaDcle+tuow== +MIIEpgIBAAKCAQEA9jUNk98dZwYaljgo4hA+9Ufo/NF7BcUjGVzSQcFAghmcrH+j +hjujPjWGdqqL+fIHxq3GWASVsLkkRftDXqFc5ArtwCZEyl0nbb9r4jNuPMgVIb8D +8G03KDMhu6ei4S5ZpT6T/+5/clX1bUcxYMuFD2AJSZk52pJPYwylzIIu9ewY57UN +NftiPxyGZbOQeby8Frh7Vq3Z4N/RL59UcLSay1FSROW+v/qLb6JFwQ6SjG/2iNt9 +LsPQ9wrIvuogCivSboQhHv0t3syVoOUroBulK8BgS2WGr1z+4ogfabt9lyHvJTKk +H7Irq+4gkHocMU3TCe7keUk0uXqn6FdknZ5TfwIDAQABAoIBAQDKBSg58HZAxcpk +/nnVXL08KCAt6nlGd8bgFcDUgYy78+YRyL3V8/NzpRnLHw+yLH1i8c3xBPoKwy/X +WF+kM0V0PN9urjf90Ef9DneoaMkIiKiGQyUpT4RVsPb58oh8urqGE33/H6RlndC/ +NQ54PSbWQdf9EwRcq3cGcCdPUnbUA6Ur/m03kIWYMnPKZeXqTCA8AMfsLuoXyf3G +H9Q/ReGWok2fOkw8I/2D2HOXh+vnPoOOWbxf75DAt7tk2tRrgvQ7cI6TOJo6AImD +E1rHU7lrVhyo2AK+8BfjihGgtgt1qCwEeviuJn20wRQwTpi3r+aflaVCgsZADoc5 +6bEkjP/pAoGBAPZVyIIg4W44lHz7xu0DMAbdK2CwaYPPhEewVNTCmtq6wvP/CKz/ +gZRv7HLFrEAPuMuSPi0+0lzbUf4IfHeP79jzPEsoHlzaSyKVho91uttsTYGRS0yD +M2Kd7uavXH/lRR16h6TlGRgNTAfWh8I+WimzBi1IHP8LQPv9hS5CUseLAoGBAP/d +/FLXTQJ4bsb3Yune/xoerrMo05cUY8BM6WZ3s2wdPSMnTkh921CyzGzfWLpDHrww +rFBrbs0O7YijRU5gjwddxVMT/qcwNEETEWw38X3kfPx8TCYKT5OsD3HoiTKMUVJG +ehdADEm8mh918pgSvW/hvFaW98rIWjVwTt9djkJdAoGBAOkQJJMp9N/J3IOb24wn +desomn/yqQIy9p61MK3UKZtFFGqyI006uSjt9DJq4BwEQ/0nMniwdWuxfhPxh4G/ +x1fmWmdpX8DOMERaYGOfKdms0HAEPc/4Wke10XCk/clr7EaFxYy3zVQ6UHMiAHRB +diD55qA1GGoeBa/lH3qy+YsdAoGBAKP4j65LGaf+pAdQHIyCAvurNAvOmyKTx4VC +BMVM6qfbaQWxN8LPHRBvNQCEdWkQgI7bpmH3J0+0RFcvQsgCq0ZuOnmOM8DS7HnT +jXPLujASkGKCCY7LRsn9FvzJp7rEH41Zav6hZf6PJjoJLUl1oP8lK7xWDUBf+yeJ +7JHKc9NlAoGBAMhca2WXdxX1R61zdjqa7Da9fC1a8cdkPHsN9CA6ZMxGgfrbZHsY +YbqPhjuupOJe5B5MZ12oRqye3u6SuzoJMcSBOjKMLX/ME5fOxNRiAGgm1WEbDeFJ +3+ZyymShyUbpRLOg4fUC1vptzSJ1i93rXOZI6Vs0rWMj+PKDEbmFLiT8 -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert index 04f1c4679..bdeb4090c 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDDDCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNTUxNDYxNjE4MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTkwMjA1MTczMzM4 -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNTUxNDYxNjE4MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAnxZMbMyZyqo8bHLl0jIec0a1BLX5eATduBdGk3Kx -MSZRCqi3JSSb5Z0Ec8rrc0DaMPwEO6RrXyOJAK54rpIRVcPB/z5kSVphZV1/IEdW -sFzs+Uq51e01vdg4epjcETXdVeNOwyAXHnK4LzYSOBsp16CRgzzomKh/KGHOu7qx -d5XtQB0O0Non+rY1lwt1pKDEEKZL+5yrnViTMSImotho3HJdr185wF1bps/OBvqw -ZtPfk/RECkOviGrqocPI7wkZWBnimygniadd/3t7fKv9b0UVEOo0l22jtrhrY4Lt -lRv3oCvxostJ5LYuCVKfkg/nmD+//Min1DSw558p0fMaRwIDAQABo1MwUTAOBgNV +LmNvbUAxNDk2MzMwNjU5MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE5 +WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU5MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAwRrWvzL0zR9OFg1ipRU+Pvd9v+WN4ILKxU2jxlut +vZOevsyxflzRNOQImejpdXEtA/yZTKNYOdU+dMdPDdSsMPFzRgzQfiJDKqJw4jB+ +SF2XROuZEYMjxoJtueAGnw1DO9tgzn40NtHrPJNKadrYljEF+zycNLcPf78GK/ug ++5rK5MkpNVmxO4yjqxk5ZB3KD4Gol3RaheVKYmTfjNIAO0wk8O2NbvG/JxOPTpDS +aElgpfdy3Bxv4JJpjgNKrHEUYUqkwlqmrinTw8MSfKJq0MJ8nIx8HRojrYrf6Jh8 +zDpPYuqlUygcwSz0sQEY6UceaupQmlvDT9QLLVBm6aOibQIDAQABo1MwUTAOBgNV HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB /zAZBgNVHREEEjAQggh0ZXN0LmNvbYcECgAAATANBgkqhkiG9w0BAQsFAAOCAQEA -gmzYUGlxNpWGGWbgMyYB0eVAPBopTgno2BDCQ7+gfhn/fw+LPhp4Upan110U9J0O -klBpI3r9pXq1RXzEB03otwyEy1PKMIh5FzxKg21AAAZAQm0CyDDSCgYf6S4Beow2 -tpgH5u49ZhNVZtDYJtI87KXqW13i6xMA2vz7c4dnMln/SugHxVPb0a8jkpB2GrS+ -GYm48g2QJDQ3Fx/iTwm2b0+LVW+/YbdVMN8aNxuFmi3n3GZ9HT1v7NNyieE6VQ3/ -T+hOJXwFThG3EbxrGuQWqFpFGvrmQNllUp7sUVBS64YsOlHSLCejpWnkmPyhUMRm -nMz6pU2/DHLE6+fA5lpzJA== +jdyL+g1UlZ9UsnYA60iu3n9O8nzUU13z6d3TR3vFBiaTAiVYgcEoL5BmhZgn5jcW +AlQqmVicma4rypK50GZL7/fJBwiaUjkGNBh4ybfO2TRyXbmTCtMg+1FUe/LptxD4 +IWvJvf/Y7Vv/Lb1Gh0MXUcNeyLThletz6tJI3NAQX3meZm2J6/PBoERP7KXo7C4F +K21/V3aD8Zj7gs7LQLePz14ARAuovd/LDFmAHBcL3EIXiegDGe2c34IKupTPiysE +KIWAgOWSBQ9iZw4Ak7eFSDPIO9Xj1X+D1Bcb2EMcYw/9xJt8JFAqFFjMHPcKxCkQ +oY+IHfc38TMOEeAr8N+W2g== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key index 20ef7db2d..146d1f7b1 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAnxZMbMyZyqo8bHLl0jIec0a1BLX5eATduBdGk3KxMSZRCqi3 -JSSb5Z0Ec8rrc0DaMPwEO6RrXyOJAK54rpIRVcPB/z5kSVphZV1/IEdWsFzs+Uq5 -1e01vdg4epjcETXdVeNOwyAXHnK4LzYSOBsp16CRgzzomKh/KGHOu7qxd5XtQB0O -0Non+rY1lwt1pKDEEKZL+5yrnViTMSImotho3HJdr185wF1bps/OBvqwZtPfk/RE -CkOviGrqocPI7wkZWBnimygniadd/3t7fKv9b0UVEOo0l22jtrhrY4LtlRv3oCvx -ostJ5LYuCVKfkg/nmD+//Min1DSw558p0fMaRwIDAQABAoIBACdw59GxiA9u1Twt -4DyUoGgEB6z7ULYovq99VcoIjVWaIk16Nq3Gvb/XhdsPXABe+7lZQdNnmBcmQDkj -CFh/bjzNI7OcTFDDT5JJ89KU3TEsWLQViq02+jPu/1GlxCmgKRe6GzTVJ+Ysmu1Z -gnrWgTEsZecbmq7+V0gzt4Vja8wxw1O42agBt9f3LNkvsbVb5aNBOd91q2Q5zRqY -TVCExtawJmIkpKHxfF/09A+G0GVsqaRQ7AM7FC2H3QwOri7XpJLpKM0r7hZrAgfn -09n0TqnR8PNB+p9igGY1DP2alk1T3w297jFBLGIvEwCZ85/TbhNlXXNksGP0MZSA -/r6H4cECgYEA0dksmvEt3+mnNvCPiiR2C5xTEamYYt2wfi+VrLcV5uDJDA5l7y+4 -DxAXUSFtcG7t1m6SIvty+TmtKzPA6JUB45DuHI3C3KN5XDTD6m1eCT/5G4DBejmX -KXnyb6dlPoJOdak3XFirDfhwsGVDQoV7VTVKE9Atai4sorCGjfiiq2sCgYEAwhMt -wJ9WEXZKCNq4wTIOUBn3w3KrgK7vyAxt+XeDHdkDvX0Av05gAA5RUZecH+LE5nfG -9gK6qdHEAmyxKb/oZqTLyz8cAiIpFYkEhY++QFihY/2FZ8jlevuFhfc9AgNkEF8d -/Yrsd10niT4CsThVVGPp79lh1IQNg63qzYTCP5UCgYAabQvl8ytAwE7TZ1XcIp1O -9v+rAL107c/1BA8IMgIrEfGfeAy0I0E9fFxDVj9O4llHIKN8jke7RN0ezKSlZWZY -fv7NT7jTSi7VQrvNQLqP1aOMKBm1R51WlsnF78GbLpOs04NqOKxJ1Rhzzjy7Gs4e -O9i5SAUAExKB5lL7e+0YQwKBgQCoLaaAPZOAHlmZwrBH+vCcSWSDYmNsaCwx11OV -0xM0UlMDace0AF8ArWeapR8OIp0ueq1XkpXfg3+v+jCsVTk3eaeAwXesAZ5Ioyvf -8eiUKjnxREjO3zC9mijjJpUfoYCdD1AV3sV7yqXwMGR03rRTJSIcTuyQFL8BVT0c -S+do4QKBgQCEXYWrV2BU3wt/fmuyb82f0LZVP6ODNNxCWR/3PD9fclUJT1G6H/Pf -rXBR1bsJB7MHUpfaop/DJT+FcaJiVf0gmQlsSEaV0zq8nfanP4BtgAsnR0r86PHr -RyjDgD+q3xawqeEdYXwftpElBkJeaxrJrrypL1SGI50h7ymS6xAFeg== +MIIEpAIBAAKCAQEAwRrWvzL0zR9OFg1ipRU+Pvd9v+WN4ILKxU2jxlutvZOevsyx +flzRNOQImejpdXEtA/yZTKNYOdU+dMdPDdSsMPFzRgzQfiJDKqJw4jB+SF2XROuZ +EYMjxoJtueAGnw1DO9tgzn40NtHrPJNKadrYljEF+zycNLcPf78GK/ug+5rK5Mkp +NVmxO4yjqxk5ZB3KD4Gol3RaheVKYmTfjNIAO0wk8O2NbvG/JxOPTpDSaElgpfdy +3Bxv4JJpjgNKrHEUYUqkwlqmrinTw8MSfKJq0MJ8nIx8HRojrYrf6Jh8zDpPYuql +UygcwSz0sQEY6UceaupQmlvDT9QLLVBm6aOibQIDAQABAoIBACeo73oNaSHH0C3P +SfdFyab9BaKn7t+xfRvQulY+9gv9iZj+SWX+gikuvGV/5JLuT6SF+KY41iHqng01 +8hKRH1xd+qLkdt2xA8J54l1SQF10e2D4UlO6b1qR5x9J15JLEwf0IonGecrYikvC +pIHhJKKUJvpWlG5vOouuHAJkh8ekwz17cEle6IOPY+p9hiivk80npUzbdybnHK26 +pNGPICich8sUWNaiSUia/TCwIDzU4NkNhsOxoV/QZOTOFnHl4lR81dSeptdVusPg +JdC0+VCMc8wGgXdDqWxPzDdT7CIGNZcqpltBEe/27QPVYxckK3kDkOFRXshD5lPv +56USHrECgYEA9pB5ChHu9JqkedN8QgUfipl/doAOz80vghG0gi+wvkeD/XrzXaES +rXlkGJFKbPkTGhemSzBPQNEbpQa8Y+h+GfKLHux+Kd7pWRym4vXojxeJyaCCG73i +d2qtoHi5QeZOY36AJT7bq3T1ZKHG157vEXRghth+ozpzb1w+KeO1ZNcCgYEAyH6j +FpowWYdsPljqx+7SfoPdes/LGtfIWnGRM12C6H2Lb9FX6l1yIMNJQgYhyRPSbifL +uArj/Jf9LskaaRYHvjXbtBANHHU92kBZszMj3x437otADwL9iWsV/cyIDkei5QTl +fP//M5RSZj2WyRQJ8hXTA7Ya5e3rGJYlHQ1aRlsCgYBJMK2dXaFvHpCAUVTrTBYG +0HXTuUOsT54woAzTMFDoytXVYq/nNS8UK5qY6FgNbQpMjoSggSClfu0T2aIGjjcQ +gLznWxBAYZknCKhJavGzuCsAnRLCJWWaSSJtJijn9POD+UMUy0nt5XQKgTNDQjx5 +E/CrVoyQ64LkpZ8WVC++VQKBgQCLUMu8cem03FAPxrNluAKWHMTyiJ8mCNjUV+PA +YHMNX+dbDIlddg9OysQF18L0OQzYtFhvi0m+hFJOhzkN2lwJBN2kch7aLnGLTXnG +9nsvl4zf+ezKQZaxPTLrx4qm+YosP0nDoRLQ4XicSKGVGZKLoDSfeJOaP8dDr1kc +peGbzwKBgQC3Tz57NVbIDa3SdMlpgV5iUj+AQ4Q4OLxAWzePttic1+nalQyFLMBI +dq4HytJEen/CK/XwelHpMfMv/t2bZcqags+Epm9Qhd7jLMaFsmrscmdjXdp41kRR +KOjZHBUuhK7HfeBLJ7oLGDlXHvtfwC59DRLipYrtJLG4Etkcjfav8Q== -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/cert index d824148da..ab75f495b 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDDzCCAfegAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxNjAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -NlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTYwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCqbwwWgCpr0Wh23sDkjV/V4VdRXbxFESuJreMg -yz4xThDjh3TedhdxNd1i04RD/N8AASwZnDCtfpV2MAwU7eYRWN2IQS9ggy2xw5bB -8glbRnT07QLEYPG/yHeTFyh4B47ZJOkWl2qK5OyvWnBAT6a/Xl+aCypdW1soURHx -dqLoYIjFNziWlE4EHx5ApvFRyg/tZR86eEuaaF4FiIMT0XcyMpINLs5ihdRXymDr -bw5pThT+JdsJwoFBhynbksLYZijBkznq6uRxr1wc+AEFkZXRqgPB/CSXPFfPILgp -scQfpXoikTZKu/orYyYtlMPvajZx7dULWeh0jAKNTFhQD+MZAgMBAAGjVDBSMA4G +bGhvc3RAMTQ5NjMzMDY1NDAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +NFowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTQwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQD8AqsPL2/NyBR9LSPSkLedA2pI5DeQ+z7Zfp9K +8EmbCcawXZabrkPCr0LwNyylynssZXqGLYWvwpl8zGk0E2Gr++diIg17uZ4lZUKN +jYhGdV8Y1Bx2Wl1At4LLe+bmxv01hslT4EDRzHfZU/wy/gTtYMJLuQOKqddW3lkV +FXNgJOVGmIm1tehwDCJhL9NIyQcy6w4i86e5B8q+pk3V95mOlKR7lHhk1ZFsMCKh +TCYG/qyu+ZUkKvZCoyV9SwuaN8Df3TT6MYSX2ulvmze2okfePwTeKMpwudrfn440 +0TWrWKJuMdNe9bHXsvhvPZlqBCouIqPC1KiuMg+Pcx0laz9BAgMBAAGjVDBSMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD AQH/MBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsFAAOC -AQEANrA8IDEH7oof4pK7fxbU55sLXSRFsFH2WM4F50azSVzYGivNQeD7AgP9mfWK -pJXcaGq1z6s55BBgYWNI/dK9P6jmLsh7r9buUXb+Jnf+vVLolhqPglBLZYNPlsKU -uC5SBuTJCp0leoeYKda1vU/uBkOQ5aZkiqWKXyNI0oBDqRjtAeeDuiKn2AStRJ3g -1nyAhyjcNSfptryzR4vNJHbqKKHbB0xX79LOHgzgOxPxoPHbs6+dylbZrnNw8H83 -kqHYuweAc3NJBvMfWXSEpMCqOnpQXbddh6Vi86CGqrf3UrliQs7tksFTxmYpPKfJ -htGEHLMhzlzUESg0uiBo2QDCnQ== +AQEAXHWVJ8fuPrF7Bgj3i7fyH0wE6mHeUMSy/bxXdbrkY/H1wGMxHZa8uAodXeNa +Nb3pBzroqZcVWjkh56knGgeZE4vmkWWZZ3G0Bj5jr3kzhZ9Tpd1LyFOhIdUttHPs +DOVfD7AIl3v4xlMDwlYYQKrt1LzHZX1n7sJHJK1s5pL/lB9PdUGka6XLXo7meKPL +KluKBF729MfwBx/GNrQEh4Hw9/KVnBisKKdWqowrKzVzGj3hv2q+wCxDuUZyl7Cs +nw07CGIn+t7+5/jRyEoIwUiOydvaOFkXgOpWxHQVEj+7Hw+rstDbMDQ2+p4LpJjC +bLBrGtpaitmhTPyT+SSR7AZisg== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/key index 09e769e18..fbb247fd7 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAqm8MFoAqa9Fodt7A5I1f1eFXUV28RREria3jIMs+MU4Q44d0 -3nYXcTXdYtOEQ/zfAAEsGZwwrX6VdjAMFO3mEVjdiEEvYIMtscOWwfIJW0Z09O0C -xGDxv8h3kxcoeAeO2STpFpdqiuTsr1pwQE+mv15fmgsqXVtbKFER8Xai6GCIxTc4 -lpROBB8eQKbxUcoP7WUfOnhLmmheBYiDE9F3MjKSDS7OYoXUV8pg628OaU4U/iXb -CcKBQYcp25LC2GYowZM56urkca9cHPgBBZGV0aoDwfwklzxXzyC4KbHEH6V6IpE2 -Srv6K2MmLZTD72o2ce3VC1nodIwCjUxYUA/jGQIDAQABAoIBAHfqQAgIz1Ai+6w/ -WFq2ucpDjWs7V38E8KwjQ55MQgrw0WM1aF4pmp7V9llVV0d6wPBA4uV2Bq3bVY/d -iHKlW+2yp9P5gTsXsOvVINp+0GR/M0UtCXhgeVel1bQRZDDnqHNRzApQKO9m2L0c -FcS6Bim5XeyFlJ4w6/d26vgIr+Bs/UkJnWZ6HTNU8HmAu7RwY+2ozOk6GT8D2hgk -/V2dECvodIvv+prSS13VMkk7IDx3WBSuKccCyeqYyxH1JOWpwzfzOi0Vh7HovdIf -HeBiR2Ci6eBjDQqSdllbUOfspJ7cXUkDhVtysBtcuyF+Jo2n5qbRUWk1dZjQoeHt -v61Om00CgYEA2OsZs9DUaXtAlqXhMxDCcrpR0Ui7MazNKmzdQ9IuBQ1qjOLJ7SO2 -SXk2pe1bQ1KSPSJIysch5A9zbu6Huk7sDJp+60dMkx75Qgqu5YwOkzgD20ozU4QG -+fDNajAtmIi35Dcga3OGgrA+NL7rHtoHq3JSxc1LutqjqWl84NPY0IcCgYEAySPx -qCXtLNbOEGePsIMmwfrkeiztNIa7AHP4jxUqfr8YpCU2F3ctzNuQmqaYUXejN8Qz -R98zxsx/PMunPBCFeDsvf9IsDSOEuEskYc1mHquw2/CgMnvbhDXYnnawrRrtoRUR -uI2aQccqkeUysmRvTg1YvHkSa7l8Lwr5PxKmt18CgYEAjPQoXXpDrM9UZxAfSCmJ -0TdVVyNl0J+zKfBXz2xSTyIqrKXqBNiB6TiE1ElqVlLfiC4xEuNXGHUZ02nYdK44 -IPB7rLNGBQvJeKqsf6kFB5EMoICU3Z4bUmqxcGEiH84ngHp57JjDPUT9BxVQf1m6 -RiQhuTrwDNlqI/nSFd5TMx0CgYAe4aPimyAU+E3e+ud2xEwZEDov/+HTZLQlV6jb -3vYNS62u1f++DpA7maJT/Cv6phGrKDZvXHeImDEY1nOwpyC22u9qAoy8360q1m6Z -jX2WS+n1erY9ygJkBBhkC/kIOtAtIRz9ZtA+NSP2DmiANydXpnjvRu9rFqlYV6j4 -5BYwpQKBgQCNXYTXCbRE5C2wvNnRggCpJgbZ49gPiDGI7860VEZka1jp6fGovGQ0 -GCrgm2Cwy90hqPAANX4RL+eMSS7DvYhJjmb7wZe7luzA2kbpj0fqkR+5zMtaNZg4 -hnBGlNipJ9BHjyfBUttb1R8LPTOZm0dd2yKYESvIqsbO7QicB3etAg== +MIIEpQIBAAKCAQEA/AKrDy9vzcgUfS0j0pC3nQNqSOQ3kPs+2X6fSvBJmwnGsF2W +m65Dwq9C8Dcspcp7LGV6hi2Fr8KZfMxpNBNhq/vnYiINe7meJWVCjY2IRnVfGNQc +dlpdQLeCy3vm5sb9NYbJU+BA0cx32VP8Mv4E7WDCS7kDiqnXVt5ZFRVzYCTlRpiJ +tbXocAwiYS/TSMkHMusOIvOnuQfKvqZN1feZjpSke5R4ZNWRbDAioUwmBv6srvmV +JCr2QqMlfUsLmjfA3900+jGEl9rpb5s3tqJH3j8E3ijKcLna35+ONNE1q1iibjHT +XvWx17L4bz2ZagQqLiKjwtSorjIPj3MdJWs/QQIDAQABAoIBACnOZ4JFZE7G+l8p +td+gklVB08fz1CQBChQapWJRKmTF4mgvnmSFLEiHupsPDCEUzgo3a3QG6T6XEc9a +Obmh3Xoid+gXrhTwXgPmIHxLFmhZ4ETGK1KW+xFZYCFRlKSELk1K5us7MIWdXeR3 +wkbTTQ30F0dokeXW9xo6GJ0eyd0Q7ZHzePI+Gh9ORLNeRdyk7Px6cFuDtox78r7b +teQMGNeEWtdJArWIbjxPprp84uo4qb876W2TBCt/rrFp1CRfUXtjSYQXTEsvon76 +is64X3lQhZR3HCbtjbRVhq76aNJQweVIO9CHkeLwyzGc/PyblNJNM1blIWbgQHvy +Zr8kYAECgYEA/0e4gCGohQILo4E1EnhWuHwKPACsBHkQ/D3JT2H/yo8IZUvnsPZJ +0iNhDnnPi892Xe9n7q8LG+9FVO8OYghfiF4n66dAEO8J0UFsA5CLNGr69noQEUvq +GJdOvX+NGFOzCaoX8ld3xTt9V+pvMFVPFKIoy6bns4PJlllG88vgweECgYEA/LiW +UKYomY3T8e7KgCIilkNrKWYv2qCKgoXMHerI+gz9BvcSdDRz7GHpkV9ZP9GJuJ3n +uLHdUNkFam5jtpwfqjiBvrINgqu8/jesPeocxQwJf3x5iGazxUCEK5YonePyuxih +e3pR+ez1b3wjBfVshs8tg58F0OdO3qVu+IZM6WECgYEAz+Ie7DD8o7vjsHWSu4TF +0hwo1W4Spt3UKCVEn2GFxPUveBYVCjW2Lerjqb8mdYsvsBU6hNOE722s/xphkxGQ +gmNyjOO5N1EBpKdrB4gY5EnOLxN9rCgu7XGiDI0nYE0gulkKgS4becEVNJfTjf+a +k4nuQNGdU8GZUtdHAVfgouECgYEA5ksrJxkTPEKjFf89ZyA0FmwfVh15lCfhsGlO +hSCzvjFhzhwOI/i8fncHCeMyiFZgwuyaAZOLkyYAqmkn0ntY25wcl3LXnvDzC1Ie +UllpmCKM8TCz6xlzzlcpWjK+lornYZljZgskcrR9P/eGTuLD3+Ehn6Sk/yYZmAh3 +JF/17GECgYEA2x7fCZN+wr+CmG74GFdNnghqOkQQ9JleGOseHM+JIRD3J3WkuZ9x +Dfhe68OEaUBsmB3ttDiHQ5mS+YyXIZ2st6/0KQ7v6jEM3CwUoq+SZUqV8FEIBf0+ +r3yQI5sB/ZxWvsshLtlLUgdAby+ava8mG9M5RwUjp8kdmzlkCa54cc8= -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/cert index 9a3886e04..38a95960f 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxNDAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -NFowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTQwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDQTNsxcAF6xI6xIfd7fSKqi3YfurIODqBvF46g -5WzpSfJDAgmrla2PvPmDpL39AVcmawzWp0p++cOug8GJzJ2B6clVD9ahTRLGaDHU -R6BQo8A+cxGL7v9xCF9KXumXl6VHMaym5JzRV6Q9hpBzeYho0mLXdTRjDeuCJDIg -MeqHp8azm12zDmtNcgROqrYN3CU5Lr9UWXhXrAzujZVz6i5pzX2T/Y9JnztrgvRd -HA3dHwxPAl6pijNPlcB70quSJeREuEkfhsVJeNgVeft0aW0siT9ufAxgE3r77mvb -CPalDI0csFR+mbh5HGixRriBliwYCIYKkntWa2PgMA7X3PafAgMBAAGjTjBMMA4G +bGhvc3RAMTQ5NjMzMDY1NTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +NVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDfzQINLvjB3E/ea9+PW5SLys8Q4JqE9HUwLTJY +obQ6jqf4BTxtQWRpyu+uO3ALT+oCYifZGSlyYbBnnrCNClbwZYAHT6OkDD7f9w/q +xCYMosgvZhCCILHfolCYdFLMlYQg+pz4O+ct89J1pqyhEQBZRkUTLrXwqNUOfT1a +uBPbIkXBlBn9yG3c9zj7uRiSEiDA6ZcfxDLh2RCEjZezUfL0EExU/ZHCVghew9cg +OQ8T9dpMzCSQf8rG/higV4BZA66KCC+ETm2VXkqgWxJre+bnELHGXbiQxP5t21Jt +ZXjjYcUs1YluS0nLBJiZdn1lYGM2Nok8JAKzg19XYnlsPJXfAgMBAAGjTjBMMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEATPkS -yrltyn3xyXjyoLJaL12gCf+dnB9hH95vPSZHrCHrLa9WvBRMkXEnKMb+p0hPnJK0 -xlB40aRJI6GCEEOs2bltI6KoGCyQtSmNe4dq2WqEXlOd4Koi4c/+1bZLRcC5nnpp -1CkgCeiuzh7BgOh7wi+XGtnmINNKnMJ3Tp9I28SpU3NV8lJO22BsdFwIDAgrAsJH -r4/68mIlur0xEvpKv3axzFO82DihcKZBXyW9rMP3VfRxZhHGcI9CXmmWB7WOxCrN -FDl9d/yYpYvjdvRPNGmRYyvXb3gfwEqmy+znONRjVinuPaandtI5zslq6CrJ1A62 -Ont8W/Eb0vfs4cJrkw== +AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAIAyV +xfmc5DMKgPUt2y6GLICybnI07SaNdzZf/5L3nM9b20Q26VLdZK4TbFsBhR4lfFPU +F4oVwvYbw1bPT9u9RSy0wLRz8a/mJJX/cmh+OBhYJf7nrGuvYADHfi8zhfvnmgIG +6PFezabzKgz5jkr0rbj32mP6sPpN1dzeDWESl7rcCfS1UHX4dlCKxnRqAYUXS4Kz +f4VMQV8y9Q00/D9fH5xLxg2jyHVc+LfD9tA1r0EJKCB7p612k96YGFFqYqxQOYmr +/Ut+EN0w/YMHuzMjhaEi+9T6r/VMYr3l8B8U1z0PYPFbbvMCGZUf53cBEjjxjg4n +sQgzzTc/yfYXGcVVcA== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/key index 30d7a1092..f243fbc9f 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/localhost__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA0EzbMXABesSOsSH3e30iqot2H7qyDg6gbxeOoOVs6UnyQwIJ -q5Wtj7z5g6S9/QFXJmsM1qdKfvnDroPBicydgenJVQ/WoU0Sxmgx1EegUKPAPnMR -i+7/cQhfSl7pl5elRzGspuSc0VekPYaQc3mIaNJi13U0Yw3rgiQyIDHqh6fGs5td -sw5rTXIETqq2DdwlOS6/VFl4V6wM7o2Vc+ouac19k/2PSZ87a4L0XRwN3R8MTwJe -qYozT5XAe9KrkiXkRLhJH4bFSXjYFXn7dGltLIk/bnwMYBN6++5r2wj2pQyNHLBU -fpm4eRxosUa4gZYsGAiGCpJ7Vmtj4DAO19z2nwIDAQABAoIBAAef+JobroIu9cY4 -JxYHI6C4kC9jJydqk6bdZuQu4ci8Yzjetznntb3APiX6ftXnGaiXXJXy88AoJmiZ -/BiuO8nIpA0QElw/NQO8Rq6tnIm3JM9kaO0FZ6Zclxhi1wwsielMQTSuw6rKGYID -DgCcH0kvAl0+thc2KDvQVWFmUl56zcWpkRLc4kZbu+97cv3G1EFfGGchYgvEcv2g -YpC+7rZ1n+ZHbQKscWHgsFUcp7oGt3kZRZI4iNffmvqwztOvENNwvJE5dMA0hJQm -tdhjPtCcO5GUWsPKDispeEVMEycRJti/lBhXM0oMW2XuXlcbWp3bm1sGqhuXRulQ -eRFntokCgYEA0H62dptBOQCJQ4jouS8fLy60wJ0rkC5txYFiGY3sT+NZtsn0AKnC -Spjc6mGQcCg+ezaAeM7doGZfiZ2BmVWnZvDJ+T8Er2nUj6dwzv2ZFDDMh3olHPT5 -/jhckyAGWgo5Dq01KAHwSYk0y7Xrn9N9vtQG0kqnbjtXncbECMf3zbsCgYEA/8LI -pwU9A9rw1Or1eo064HbAPCg1kj4bFxQGpe26fE8jz8Ni8z4ROSOHLVNDY8vhJ11d -AtO6Azv4w7IN5QuGcEFNmq+GdpcMq2LoM0h91pkGOTOgosjPpdMU13mPNYG3cCWX -eAwM0ibmElVWleh/wLDvUzccw6lIONt9DoFaOm0CgYAYb5FxCzc0uBReXvBvq88q -132FyaXuaxKggE6AEjstDcdY/ghj/4Fu/sV9jtu/2WehRzz9a7lb8EOoPFaRIxHQ -pc32MWWaLXwlLgmxqNVFIYcHJdCtuSSHoBFxiOJVsTcIulItkzSXWcZfTb4E6GOn -dvApu2guKjRVoJMfOFiZuwKBgQDOrbk4PyNvWh4D8VsuDbLmcRAnjNa9tzJtE+HL -dLCeg9WMr3fm2OFSK0OxfPeYTclE5k2jWzWWJ4B/pANWdFnPnPX5ap5edvHmDadW -yd3m7QH6d5337g7fEhRli/YOZyS1m6srd5FkwcpqRkwSGDAkpta/iGnWM5YJXFVS -w3UGgQKBgF/GITiMEWAnSU6EehS+C8MIhi98543dEZP6fOltGfrfdagjZaL8A9Ae -VepZHBZw8u0wgrhE/moz9ncdgdSNWVxmdgK5MhTLjQrcPE/APG09XMS75TjwoU27 -QXqRUViicNgI4V3Gjwe9quspyozrMzqbTxLcKvsNidkiy0etGCz3 +MIIEpAIBAAKCAQEA380CDS74wdxP3mvfj1uUi8rPEOCahPR1MC0yWKG0Oo6n+AU8 +bUFkacrvrjtwC0/qAmIn2RkpcmGwZ56wjQpW8GWAB0+jpAw+3/cP6sQmDKLIL2YQ +giCx36JQmHRSzJWEIPqc+DvnLfPSdaasoREAWUZFEy618KjVDn09WrgT2yJFwZQZ +/cht3Pc4+7kYkhIgwOmXH8Qy4dkQhI2Xs1Hy9BBMVP2RwlYIXsPXIDkPE/XaTMwk +kH/Kxv4YoFeAWQOuiggvhE5tlV5KoFsSa3vm5xCxxl24kMT+bdtSbWV442HFLNWJ +bktJywSYmXZ9ZWBjNjaJPCQCs4NfV2J5bDyV3wIDAQABAoIBADoAbsyt5MiRaZ2y +hXEpAfms6Tdtjn5wwMJopEi2N/iJKl0sNjn2naiRcMbOHr6/yl0txTgNvmEnkkl4 +pjcXe+q305ORf06v4ce3x0dH6LiTo6AtKpAfGxpjfdHVK/Rbt6+4Y+At3j9Zlqzp +MopX1qhMfvB2xa6GgxlLOhB97p926VtKYOEoDke8uP48HJTabeiFKpn76k+0HwS0 +J58Kb647DM1rqGpZW17dPb2ovi2eznATMeAgveNvVaXipUCsqnrJI+ywrLP4TBll +Mly+DZ42e1YnM+rd0tzgC/YNO8h7lF3YnthdQ77h3Yw09cvtmHPEuURgGiHIH5IY +HlYKBEkCgYEA7KXOLnufN1J7QG9CqsWhKI+ZBGGTd3LmXMHTM1tLpFcQaRNd/kxg +NVo8y4VEpCdatKj+yRe3wPZ8rO/Q074Rzys4VyTP8BNn9YjtttbP8zBDmLqkXAAc +xVKNDiuFQ40HSIdexZVP/YVCp210q6YG3OPoT4W9QvjfPHMfzW+2euUCgYEA8hpB +PMyl/RL2WHQHdKRRss0k8AWjtoKzepRkzrwptzgFOQZSmuvfdiPStp126iCinzag +EPsCo3T/1E1Fj4LgOIPhRd/ibXYSAParxmmx3rMTrBwo3TRf2c9nZPKAygsMNF59 +T5ySJzU6tWE0PEtCIITW+WnQeORPzW3vE0nSzXMCgYEAwHyBP8foEryxahDVvkgw +NOjQgwLHS0KXY914Z+6bkVoMDBvnuV/wZZU3nCeTVJ56JjbLv0/edENJ1/Tc/E4+ ++C7kjeVwiYuPZOVyzeTekqWwZftyky64ODxUZbE6nV6KDRGnIbm4rbMGK19ZpgDO +1j8/B+f1sRLzqZzOwnBako0CgYAVSR2nPM7zOzGRgVIOfUv5jnPK7pQAPemNw3JB +guWgCDrdUqL8n/RbrLaf+6Qy3X+uw9y64XbP7D956PlOrtEL5vxtaku8F/9pOkbM +AQr0a4Y1QZyOJkavHb8XbwLHwMTn7c7Sqw9mhxWMUOmIy40a0tMbxqPfnSMvCpVU +es8f5QKBgQCeFljjAnEQpuUduug/DAScAjTEbJD/18wAu1PuIM/+/zFEVaOs5w0z +uHiiPq3fiaaoBQHZofd8mxsugfLYftAP25Qw8X/WgWPg4CLGz3Br3HgnV6RyWXr6 +R600l5lWe/ZU5epjEsToc20H9z9TbXaSKWMZiMIaMnAeboSfTtQY3g== -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/cert index de567f374..d87b91f55 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNTUxNDYxNjIwMCAXDTcwMDEwMTAwMDAwMFoYDzIxMTkwMjA1MTczMzQw -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNTUxNDYxNjIwMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAz1uHVK6M57XEhMEChJOAM5yxWPU/Y/CavfDpbc/S -OJQm35eUoydbvvmLLJ0gqBBZro6P3pb+OaxTm+4QjG7He+NayZtUVHMz9zrys8Pi -Z1g1aZr2PE5+bm/ZKoO0bvPD/7xzbV4DaOwAtIUT74pELbW75rQB+8uPidMcO4yB -7vwJ9k/KyeUglR7+yPr8JQUWlf1IWnxcAaE+7qJpOThCWoId+6R66pDhEkLsr7Pb -T4lexW1jpkX+LRlAWNmjGebwzYCs1QQwsi4+liDuwnJSfRPG17/dvL+8BqOIqGI3 -RiMJKY9eqSut4xwg3FYKRS09kAV+EudTvfbD1JXMy0pcPQIDAQABo00wSzAOBgNV +LmNvbUAxNDk2MzMwNjU4MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE4 +WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU4MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAtNQ9DkyC1Dza3OYBLcCPeJNKC8BvYVVTL+FFzpS5 +AEPNdNA/Ezk42SBWNvaY+HYBrZniOSVMkTPFT9i5sT8bBBrUUvwGk1r6tpXDlHw3 +/S7QThqZLkGcAscmahp0mWnIIGcJxZBVMR1cfFbYNumNR9UyjUDQumCb8hlT3q0n +pEH3CL3jRpdcFolczotUzGk9u07v81gIWgQVCyYYu3WuuRjviLq8SVoHlAWvVsdW +rGcG1LS/OKAgECYVUxs1Qauw5VjlXPGkY7gOOnjNcl3IHZU2+7dGFw1gBf+gEC5E +/qr2fI7Lwx7R71sY0PANuuDLGfrCAaCjG3HZ01MC5Ktx8wIDAQABo00wSzAOBgNV HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAh6r0t5Dd -7NL5sReOTErM3CmioLEId/9Kbqz+7fsBkMn6tC82e21tMcoZ5p+UgK7mCISa9e6C -TBa6/zEm6T1eZYHhb6Rd7uHzFIJoRSnr9uyRfLWJBJw3Q/8vSPQgITX/t53V4Y5e -QUePaOHOzRxkeUIOAGfrRCoPyvJ8EjKOeWUzg8E/raJBM5zupcTIIInYjpQAnYxS -vByNvGDaFAOqsp+1omeLz4zaoUT6S0lHxvfDB8iQAZh0iOjkCNKSaZFn7BAjbWQ9 -OtNZKmigyHgUhi318pLdUdoDbtoCRua6icdHLTCQW0ClxqY5VgXY1v5FOvaA+N9E -P0Jlr2ItsNGgqQ== +/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEApTrZW/xo +EMiNgBnRyqR0wHXpuQS/V5h75CtDKE4/Yl57cQlh30SX10anRgNpeBmaZjyFQp0P +3MAQoxUh8rOeQBcqZp7TiIXAk8w4rYWpFx59GGgiO5yD1vOj+9cIvAFDR0Fe1kbb +kLo8s93l4yNFTdxIIIDMgNpPcp2620wkecR3PwRV1jlM/7nMfgfRJagN2+Xq7mKC +ELzGatuXBpiy+jwCirmgmE8/MxbFbsR9L4EdW1kdYhRT+rnSNIEN3zI8GXWIH9Hu +91cGTgKiz1znXtlmLAaIoGTahv23YUV7tbQlrtZDZjpqvTN6yM3vS0HIoSxQnT2l +yizQSNuYSUD4HA== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/key index ab6acf966..00d37caad 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAz1uHVK6M57XEhMEChJOAM5yxWPU/Y/CavfDpbc/SOJQm35eU -oydbvvmLLJ0gqBBZro6P3pb+OaxTm+4QjG7He+NayZtUVHMz9zrys8PiZ1g1aZr2 -PE5+bm/ZKoO0bvPD/7xzbV4DaOwAtIUT74pELbW75rQB+8uPidMcO4yB7vwJ9k/K -yeUglR7+yPr8JQUWlf1IWnxcAaE+7qJpOThCWoId+6R66pDhEkLsr7PbT4lexW1j -pkX+LRlAWNmjGebwzYCs1QQwsi4+liDuwnJSfRPG17/dvL+8BqOIqGI3RiMJKY9e -qSut4xwg3FYKRS09kAV+EudTvfbD1JXMy0pcPQIDAQABAoIBAE5lopLns6pfVL+E -YblSMyRQV9T0VFUqwLaTgQ3dhvORP+lFXBMbbFqV6oKhnZktJVsT110m5VNUzf+k -UGln8M/sM4UJzyZmr/0HMn+4zb6Y4QjeZ76BRtfmPcsPJIbWbwIfc9yjsNJYeCPI -NLNaKVDG5xXgdOeIHOrVAFWbV/zMa1x8JGO4UDufwwA8fn092TGkBIwh0m6FVFqc -Qvd9fM0YRusa4At7FUIKGvW1UXCs38DOzsHWSNEUBSySHr9Mm1xskku0D3Tg5lqT -oDXoTgaQgSEeZYyQQozreEHmTleL7AOwdUWB+LsPGeKW+5anBkdUArhkhwxiZJPQ -sqYlmdkCgYEA2tShhtaY9kK+n26Z+IfPyL83MZNNw5/gTQtABIbvqYtwayMBINrC -Xz0gpRLbrd6TKowpGhFGnFsSSVfUdwaYscEoJoteXO6bu9ydRq7oKoHcoa38z1l5 -iAzlzVLGGBwj+VDqyl7lrnlIJa9Sg41m2FgYha5HKQDaZr9qKfn9cv8CgYEA8pQE -Vys58MuWq2+gUc625qaYPBhDAUQlNzxLAbNABL+5xnuiQ/K4sxUtOJedHABXq1TT -eCFVUJf5jTix58SVnHUMZI/hGUlyiA+uZrOtKSu6UfcpdSMtlNAqfgL9y6oWKxBo -pSwsrrY5BBB38UiEM1qTSkyKL9AAxJV/i6+4PMMCgYEAonv7q/kv/rq0fAFNxmJh -gHeq7d6ogTb2/334/OOMlOF6ibKmJdUJOlpTIP8Nqt53e8Iyyq5FNdfRji/vDKoT -OvlnbKdTW8G4VReMmG1K6jUes9ZSv0t6l/CruXdaq5BJjdftXnJ0LMbVMVYq+I9H -7CANpUUwhVuiz2QV2jFLZdUCgYB6R3rYpgWTCE1vJdne4yD3q8rZoDFGlh9cdJwq -wzzmJ+9xyijFr7jDLU2aVXLxBosq5pui1sq20aUONyIW/tWcBLS2jICfypJdW+pC -AxiqxEwrvTe8wHrdpQGGe+OLorWCB8d4W4g6mcir79FGY5Ogf2v37BVMfMGmVuXw -eCebGQKBgFNC28uo0PsgJHWwhnJT/5myP3A+/5it3bPJpHn1b9JsIQTAcBYvf51a -UGmHxNu96x8uZETq9t2Ydqkq4qwhBI9jDZIyMHGBgYTOFmCD32BQ99LkH6sQ7t0g -iZc3xriB/kSaKsPDIaN1Q3WoG09E+sn+3ldvPdVeCYQIHamY0HaM +MIIEpQIBAAKCAQEAtNQ9DkyC1Dza3OYBLcCPeJNKC8BvYVVTL+FFzpS5AEPNdNA/ +Ezk42SBWNvaY+HYBrZniOSVMkTPFT9i5sT8bBBrUUvwGk1r6tpXDlHw3/S7QThqZ +LkGcAscmahp0mWnIIGcJxZBVMR1cfFbYNumNR9UyjUDQumCb8hlT3q0npEH3CL3j +RpdcFolczotUzGk9u07v81gIWgQVCyYYu3WuuRjviLq8SVoHlAWvVsdWrGcG1LS/ +OKAgECYVUxs1Qauw5VjlXPGkY7gOOnjNcl3IHZU2+7dGFw1gBf+gEC5E/qr2fI7L +wx7R71sY0PANuuDLGfrCAaCjG3HZ01MC5Ktx8wIDAQABAoIBAQCE4IjVHwfsKaOy +OxmWoy9KLQF2TTwLTAXK40DGoqanOSuasQQIfj313zs7PE4AFcb56GBCGdR/xokx +OVKKmpKhm412RVgXo/0jej2zuOvzkhjjq8vwH6oiqHDj+vi/WuoCVXTqxjqz0p2J +iM9s2oZEyLdS8NPwgNlXN6FXuemtWsao5ramsG8c0XM08zWazkrLGXf63dsNlEoL +9zzpP2nNx1DVVDTUhN3mpJE60IG0niBE1X3CuIrq4A/hIOut6qa9VgdOtnnwsAyG +hB3ZITeoaRowedmREUSSuzXnWkfHSa5yJoRlhje4mV+RRdhZ+1DSa1jzn1ZtZhjV +1/6KQWOxAoGBAMdTlTm+9c3rtqZVgva1WfwRpfd2B+HAy/LuBQMSNEmMXn5ooJSK +05eXMoCQC/+3fArCjYl+I7u9GHFKa4JeLjzWbqPbski5cTEHXIINGsnE9OI5pug9 +EbiZvSeimlL9Lw2BUQVW777cfz0esI+Tg514mn43gV633BWZH/AP3LHtAoGBAOg+ +R2EnDs60m0d0apR4kuZkoJDfF+uYgqyD+SMDDzgBSr4IDvWRzKAhYn+R1HsWeOxi +U+8kx5zmDVw+GHg397FcTIVfnuQKwmBZU/XC7oKVu6wshMXFbXUSQMmIuDbu5xmZ +1uZvMHtdszDwBWn5zGRSM3oXSQcwburJ6f1KSbdfAoGBAJE/8jUzV5GoG+BX3eiD +vL/36FZMt2+l+7jaA+L6CAo0dMNu4N190LTdpBqVXXkJryV0Iom31rg/EqmzzmYg +1VbV96gGN4PRRo+wypOmkwfHM6AK3PrNTbWUqodQcV7aSshvnKfkcy5FJZ9XVtg5 +aaZ9tS8WqXppRsKiY+ie1nb9AoGBALtl1Y8NRyOAFHP5+i5HhLGnrPB5NAIFFBxE +eXnI9DTKxhbExd1dgnILvkEV2RBhN732MagcU33FHC68ZF5NOu7AfXZ5i+qSy/mW +2urKGk8Ap2jsm05CWmpHCkQUsCCTcaL0wbU7LzG8j+UDKDs1N7oTojn4JBNK/5Uw +zEB3+zedAoGAYAI8WQm20ElzbBB8MqL31zM3LZ5Dp/GIjPWhjwEOsGt2oCSrLxC0 +xcYRq73St5RS78uGSJxAQaMQna52idifxRE6D3IyAvsMAbn1q+LCqST9zy5jzmO8 +tUNvhnkJs1jdDjIzWVtbtMWb7/5wWANx5989B1+QWU14Qmb7uziMVR8= -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert index a26c3cf99..4870aab78 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDEjCCAfqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNTUxNDYxNjE1MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTkwMjA1MTczMzM1 -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNTUxNDYxNjE1MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA7TZNU7qZLXGwPO5t7zzlOnpy8KX0f3ry/kF230sS -A3mtP/KOxcFNbZVYYpgkgZMVy2001Jg3jDkw1lJfIuojRNToyl34Hij+XKE1MBg1 -lH28V4mwSZrJj3fElci6zFro3r2cnLq/mQTUx08XxhlWQFcocIfccEvusp7eDBk4 -wUSJGO+gffwudWKbTZ6Uz8wnvNsX7Q8H3jpVYjPaPzfzAB6pDWftFX4xag+IxQS5 -gvLpnGm8ik5ch40B/34lE4LLqHYMpBxr7Wb7cv8jCi09EbaSd/DoxqEX7y4NjoeV -DF7qaratQthv3hnCrSfhH8dSEjsxH/YNifIw5PuSZOYbKwIDAQABo1kwVzAOBgNV +LmNvbUAxNDk2MzMwNjYwMCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDIw +WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjYwMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAwLNxhHFPJFGnDoOnt/ELutNthoJNYLwus52+GLD1 +VYDDBA7766rzAxK8wGF9vGbXZX7L1uW3VJyJJLzZR1bBTdeOWXpyscz+33+jETbn +Eg2Dp7KbdFAFw66B90vxLbHKbQtH63VtNg9lh+d0K4QI6SGFlI/Mv9VWawpKk1P5 +X1cgl1EgR5e4kIgQsrkO+MRc0SLZG/s9MvThrHVlZLWPjRaiqk1GDxvBjfcBoPzZ +0jOHhWLJGWZcwXZ5brqPcqn+YMceXQlxrjxJvyq02DEWjtfimu7qoZ3+fgQy4rJ0 +GzPaDvwnkwvJQ2iN59mcybfg6AoblCOt1ypIqouMrI/J3QIDAQABo1kwVzAOBgNV HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB /zAfBgNVHREEGDAWggh0ZXN0LmNvbYIKKi50ZXN0LmNvbTANBgkqhkiG9w0BAQsF -AAOCAQEAA9roGtBBFU/gc9uCF9L66s9HyPCfu11URDAduhIN+7Us8qbTW7epknYN -/rKJh8vhW0oty2CMRifDhbt1n//hOPiZ++n72EPbb0ikU3dXD7AIcGQvJXPYFaCH -47uBGYUOb1an9MBv1QQqdZwEbIDN8mdN1EQMHLHV7XOQIbEtyyzKmSKDFzNow4OL -rB/eIGhA6rEyyAv0hhf2Rd5KcJh70RRkhL58nwRP/9Btot1VAKLCID75SvdCbggV -ZpYlaG3Lx78EdpORPkidj8qYNy+8Uu+wX/RMqluv6tSjSmgXYuJvq06pe8lbfCxm -PGosie8zEYVnH4nt7ekhoA6wb6qx7g== +AAOCAQEAGQ+K0dnTaX5Ry9PLA6M8yrMhq5gnX2RfyIMXCuFfMqjdju4BkTR+6zm2 +El8Z6glQ6QsKYHR4XhlhHFOP+gGyaTrsDSV2qCgphJmtn6QWOSfEmBRNNCTpMXfS +5Ek/2dXItMjmnMdDOqcLofQyIIQFE9VpLyaFN0n1w9k6EscwSxsMiBVFwOhHpBex +BPJnrKBDWNVHjgocUI3YzN2TzzRxVxB/xc5+Sl/jnpguad+q/wjFgpr9p2a4yAS7 +W5bXcA1S4iSp8uKVv0JM/cfFlF094ft88A/SIt8Sn8BmeOGQtSk/sf5mFbr7TRqE +oDuKNM5AIM/fClQdlbKo7xpcJCiRkQ== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/key index 58931d1a4..e0653fc3a 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost__127.0.0.1/test.com_star.test.com_/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA7TZNU7qZLXGwPO5t7zzlOnpy8KX0f3ry/kF230sSA3mtP/KO -xcFNbZVYYpgkgZMVy2001Jg3jDkw1lJfIuojRNToyl34Hij+XKE1MBg1lH28V4mw -SZrJj3fElci6zFro3r2cnLq/mQTUx08XxhlWQFcocIfccEvusp7eDBk4wUSJGO+g -ffwudWKbTZ6Uz8wnvNsX7Q8H3jpVYjPaPzfzAB6pDWftFX4xag+IxQS5gvLpnGm8 -ik5ch40B/34lE4LLqHYMpBxr7Wb7cv8jCi09EbaSd/DoxqEX7y4NjoeVDF7qarat -Qthv3hnCrSfhH8dSEjsxH/YNifIw5PuSZOYbKwIDAQABAoIBADBqJN4x95GO4qmN -AGMTyrVkyJDVTlG2hmHeeqSYbdTHwNSMbRdvnJ4BHUkCRHEt1ATxBRde+fdktNMJ -fOFjaE9kJR8ojruZIlFFldV7G3RzNT2onJJpRTpC95yam4WaCG1txck3VGOm2MbV -HcUQ5sm7AEX3dMZ2uQE765YMj8jiD33vX+zYQy8XB4R/04j7+C4QDL76btUxUUy6 -Vhdvz6oQerRSGtgnJss1sNQ1RVokGjaLK5dZ4EedWMD/kQS3845ZLqZy4QLaA3ai -gjRTM++dN9v0kNldvqz9B0mM65dMz981gOJYlHMaim+aJH0dhpN4t+hNEA4/Jr5G -mXijSAECgYEA8kbYoTCgscYra3OzBRfrsXyk135JM0Nn+AYfHIPzWWR4svMAeRBO -sjsgdVk4kUca+TMBFBy3zrftOt2bKLcq47SvHWOq39f+y9fhdxrDlTd7jFMhsvLi -+dls2pbnPcp+nmZ3KzaoDvq67hWsAldUWP/79N+ryS0ibcmiAwG6xNECgYEA+qYE -DXXtjbEp5JtPiqZuhpg+7NpswyhK5CJJ+C+ExTVeNu4QMkr3LCcKGVslFZDKsDU/ -lWTox/bdoJSPWV6fGNOvuCOhLL1PkUcY6L4B/sPaulT0UvUlxbAr/PJXDkvSEtRf -9y3/jzXDUVXdeeXOxLBFJFixTaOQR3Fy0/7KjzsCgYBdN+UiIBO0UwthzKKU0x9c -qxjB0VVY5Bac174guqRnQMEwGU+VRTECYr2aaTnarAE04OsJUgNnBl3AyINqpw9Z -javTIwYcGn9u7yFRMnsObsqas2HD+LBcccvwTx+qJr+RMtunROBk4xQJh00nmXJa -zCOllGoEfdlBZNNxVLkIAQKBgQC0CETG6lqLuKHvmwLCAxNGR9qCw8z1TF6miF57 -Dp6eC9w1Nj+Z8DCjnRLq7YWwfMSpVkXqZ4WwA4hjC/H+7jD2Yy5G5AijmwKoxdmF -at0CAel8hwLLB1xvJ0AhOmv/T8R/U93uLDLwyVwWcsdXBBLFQhsXpUENFBvQxRMG -ZG9X+wKBgQCJRb25V7KNlkslNQdqvgli4lOHsa/PrEbCRA6ssqm9tNSLSvsmt+7I -TMC8QrvKjH4K2/OxXpcpgYOOpuDuZPgMuD8IdzSNWQPHYMQQAISLNTKFVbGekqE4 -A+cpV5+IdH6Lgp4zEdQpaDL0u/lFGr3D5CQV9r+doVvcNUmd3p5ICA== +MIIEowIBAAKCAQEAwLNxhHFPJFGnDoOnt/ELutNthoJNYLwus52+GLD1VYDDBA77 +66rzAxK8wGF9vGbXZX7L1uW3VJyJJLzZR1bBTdeOWXpyscz+33+jETbnEg2Dp7Kb +dFAFw66B90vxLbHKbQtH63VtNg9lh+d0K4QI6SGFlI/Mv9VWawpKk1P5X1cgl1Eg +R5e4kIgQsrkO+MRc0SLZG/s9MvThrHVlZLWPjRaiqk1GDxvBjfcBoPzZ0jOHhWLJ +GWZcwXZ5brqPcqn+YMceXQlxrjxJvyq02DEWjtfimu7qoZ3+fgQy4rJ0GzPaDvwn +kwvJQ2iN59mcybfg6AoblCOt1ypIqouMrI/J3QIDAQABAoIBADlQ5lHTdgvCcaMC +i89NVgTSwEAC38sHDgkEwTcM41v0OY0qe8nkBfYDC7tZBBIWsLiSl0Sq/PWgvbX8 +qc/rQQHLPJ7mqdiytZh6mWEUaHRZKrClklFtP9mtPSD2KJ1DxYbblR+2xK4QtE1R +DZ+n3RKikt3WS7s/VD3wSLA7iO/PMJ+ER3kPxZWsVYJw6KpmR8U/v881eM7NGoK3 +SwYSqXfcRidNOl68Je3vm3MpK7SiPEOX9AGJUXlkpjJcyOqEE+X23wNSZUpKT+i7 +NIrXaEml1nKlTRMlDWi5ZPqzhpguc5Nmn0Tu+01ZClwcu+/7b4C5tkIjXQnyjXsO +0o1EqcECgYEAyEJwGl6KvvYaRsBiFRWIN1950S87O0grOnwb3/FedW4CEf9Lm/Xj +653HTe3zYAJDlsRFCOQ/KXi6nUjAAv8DAydKWmr5EonNj+VXT0Sw32N681lDMPzK +4csJek2bWt2alKbachKAq/gr00837HELl1ALr1X3a3HXr6hZHNjUHpECgYEA9lZq +tXDDV+emyIf/O9LwDUkctHc06qD+uBfiuW0DqVeYPE7E3QPsPzyjnwSfqmgYlpKm +Ku60MfmAVXT8kUSBUuY9ph5AOE/5LwkM3ONc34UBtkruzHUccGXuXelUzmnAQLhi +ZJiWJJrHYICcOZNzd9UmqYye66lyzp9NWe7ttI0CgYB8qYcZkzLxz0fqNUaZc275 +cXDmvG016SYn4SyFCr9PgKy/QVpy+u3oNa7lHzR61s32Y7XJ5DRBf8tDsA7/jnn0 +k5fgk2j7llcltZHVYaBtX4MhS7bdHvC5AGik/vyv4vWghgHEMypwYyv8/fqFMJYT +mpu7iVtdQmAPFFBs+bmKUQKBgQC4Hm8znkzjbymhyMRkmo0B4RurZ04N8LdyMags +n+aUs/v9V4KdD0mNGm3RdUtBuvxlzsaUYEYe9DWPqhj9Gw7uP1jkyMeHT38YQNN0 +ZhwMlQVqkydZek7/U7COUNAqV7Byr14bglD2mxlab8ZU4njzoEV9hLVjvwsolLjj +90mEIQKBgF/IE4+wL9sdeQ7MGanYHFzQtyKxWnRzCGWDkHV9InGZ2I7O3AeqDC76 +fXhiRoRbBMSgddyOYTUoaPhwgqPGoC9H/3ZHnyx5fokl0FTNfzk1mnY1n1HD2roR +p76hbMs+TjIGG+lNDso3WuV21Gn+vynDVO9FQumgeaEc+CLXpwEq -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/cert index 4c0b67a14..e9de284e5 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDGTCCAgGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxMjAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -MlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDMgyIUbD5nj2q5GcqzvmCmwvjN+v60av6wQwgN -aAaMdJMtCjDWan1GPoYj+uLDQO9ytCxu6BNT8iC89MH7+Dv4CApK1r4OyxL1N9yx -1C9rwxYDlXEUegd5Z9yONvfqjZplQYbAhOJAOqFgaMS1yncatMgCwoCbagn396N3 -wnpoK1i0zbL+K+bdR64xCQmlMZk8atF03rUNp+hRzp/B1GxfwzVzb6POy9hOVk7h -mSs3A9u0ON/lQ+Nbo4e+HFUMmEdWyVpWZXf4guTddSfjyB5VWXsQJ0XXPFqllxPP -ETZGoi0+JMPmDlTfZd27Gno+BPfyQNke5Wh6T5VOfBOs4IXLAgMBAAGjXjBcMA4G +bGhvc3RAMTQ5NjMzMDY1ODAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +OFowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTgwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDO4DuzjpGF3Em7sIrAv6/19KyTVLxV4jM0XX8G +S8Uo04oyovHnHqfCDd+yaGs1glxD95eqZ5kZDgQNXhn+oZkNvcPJJ8O2tPhHwvjC +PR3KzNL3dFMo6+7BCmBRIVvSNHkkZ5lyoOSE7deGvoKl3KuEWUGwUiGnPx95snCD +HPfgHYto1zSI2NbdnF4hRuOiSFhettMZiwpXEYGhcMh1RYDYxPf+5/XcFz3VCdpF +1COXSYIS2r60H08dH1u6rO1iliJaRh+jqk998exdi0TwJvVTiaubMRZxtGkPNxjE +tSukjDA9UaqAFBnireXj2qc+a6B7AMsoTymn8Ka6QJyt+3ZdAgMBAAGjXjBcMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD AQH/MCQGA1UdEQQdMBuCCWxvY2FsaG9zdIIIdGVzdC5jb22HBH8AAAEwDQYJKoZI -hvcNAQELBQADggEBAGaRiH2ETOtCbS6hV8lpzNXVk2rzZIf2uOxigv9dCr1f7CR2 -u3QlqN9gUAR5doXhKH3NSn5DDOZKdhbtanude+Hu+WeV03wizv24rJ2CcHWLN+vy -CnK7dP0CAB8/bpgKz2509l3lSpYJ23tVKCRL5VsmAcNqQPEqd7YXIobfEdsG7j+s -t0GEPXOiMdkLFa/fkuy5TG5ufoh7ahXOuDrdpB4zwAPT+FEzAxFo+lgAXFtboMOw -KM3Y9bkuFZbom9BWHp1D6F4JulQ7fHqSDgjl9or6OLRnOEmfrTnTjYIapgH0LbKB -pcxdtMeQ7+ytiPIRxPv6+tBNXFSDDx1APrFnMHs= +hvcNAQELBQADggEBAAOc/JL/2xfnPAcwzxvF/ssYK6EpjD6plG+OhlIj5UiXo/z4 +5IcLCg+N1P7dGaiSMfI/hIM+M/z24QMk6gXFMrVUFh6sm49dNmTry4Qsyp8Up5HD +ettKLaWG3YA08VeqJ0C2xsFh7nJnrlzQad1dwtnj6ActWx/2g8SFkfpQYLba/YI/ +YC3biwKGY9P7lmCP5p4234blenJHJW5hbwNyLManvEA9O39Rr4oph2Z1YtmpsNM/ +p+xioLTx7oFMtRkBBpmzSKJgLAqCxVg7P+MzjS1s3W49QLI8F1sZ+mXBrZxbALhQ +TtOjvUx+vb6Gihkzn8XkGdbgsiOTMBoT0EmIBJE= -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/key index d5d26d84c..5016e338c 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/localhost_test.com_127.0.0.1/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAzIMiFGw+Z49quRnKs75gpsL4zfr+tGr+sEMIDWgGjHSTLQow -1mp9Rj6GI/riw0DvcrQsbugTU/IgvPTB+/g7+AgKSta+DssS9TfcsdQva8MWA5Vx -FHoHeWfcjjb36o2aZUGGwITiQDqhYGjEtcp3GrTIAsKAm2oJ9/ejd8J6aCtYtM2y -/ivm3UeuMQkJpTGZPGrRdN61DafoUc6fwdRsX8M1c2+jzsvYTlZO4ZkrNwPbtDjf -5UPjW6OHvhxVDJhHVslaVmV3+ILk3XUn48geVVl7ECdF1zxapZcTzxE2RqItPiTD -5g5U32Xduxp6PgT38kDZHuVoek+VTnwTrOCFywIDAQABAoIBAH1j8WNAMsrgHfk7 -nRKzqSLV7CKuv7fy2hFMKAXAQDOhzhMRanwscn69GxW4X4yDpcxYN94QILmZfQUd -tEo/GtWqaFUWcRU04XzEMWY+yIxz4m10FQ8O+sIvMgVoIn0HMSDgGjSzxNzIleU8 -l082wev356H5i0y+qToF9Y4aCV8QC2ovtx8D0yOik9LyHzPnrXg+zQio553/BXjn -s6w/Bb3CGRAIuNnfjarJjU2yib4jrapMZmWcdWoyf6UV7evksEvil/kDtR/QaZZc -bB/fAeF3bvTbQxgFrs68Aqr7qEO1gxFQ6fkUxp98nlL2wnsj60D/f9hIfXS4b7YZ -feGv7sECgYEA1cczs+oWnmy1re5qG4HiFEjzpjKH0n4nwHag2Qc+LGjRTDIeJ8K9 -HSHKp+WvoDlui86frH/OniOzvs95+YBmrfZU7aKT838R67DdP3TTulkU+K8SvAWM -1e1F6C2tP5MSdQReJV2Ph9YqhdZJTFDQ7AUublrZq9IBl8KTxgloH1sCgYEA9Odw -oKFCPGBgg7J/ArDOIMlWsbQjiGrwjnSV1jKwVTaeLZb7+t1a/r4nUi2LIMtR1OKx -XjJbbEtK1yRlQNDlFQJMXVaJPmv51ted5MMINLwndGzDZcA/5J0iFGh7h0oIjBuG -wsJACRzvkVZnxKcRk6+9Ylg/BnbagbdTGCPY7lECgYEAv4PuNcgI63TIbkGgnXQG -bdXNMZ8jPtf2FN4xyzxJ3s8ocfKUQVqcwXR8cV27sPbCqk05jvgQymuBo/eLdpIp -ar+75gg4M3QrQdL44thutgsIVqHBTuBKA3zFm/MPulyvtFVtYlwnMbIT9kK697uO -72LU7dhGGT/SXXrbmBblSPECgYAnGVga3QP1HbHq9LFgXZfbFinYHxlZKzGSnLxb -QSZzxE+GmcdK6tIfP36JmSnQJ4W+Bh8pGcMMzAx7wpzDt1YLf51vfWRV6ekuSqgz -oIuL18o4xTCA6yuINSn+thuaotAwhiiCqX6NteftfSz98WpV+MW0kMAnKQyDjyAe -B4MXsQKBgQDGi/tiTAhnCx7orgrUaFQSiJp7wkPxygBmhU2et9ZIGmzXVX3B67uU -UrQCIm+BHyJOsxHXUOO7wqOr1r12pB5JxHRxtdzdysGqPKK1RK5uIQ0Yb2y5uozc -xY4VY6s+lXBFk+SKg62QaBWcQ4gCSMqbOJ2cKdN3SuNqQmPHInhIGg== +MIIEowIBAAKCAQEAzuA7s46RhdxJu7CKwL+v9fSsk1S8VeIzNF1/BkvFKNOKMqLx +5x6nwg3fsmhrNYJcQ/eXqmeZGQ4EDV4Z/qGZDb3DySfDtrT4R8L4wj0dyszS93RT +KOvuwQpgUSFb0jR5JGeZcqDkhO3Xhr6CpdyrhFlBsFIhpz8febJwgxz34B2LaNc0 +iNjW3ZxeIUbjokhYXrbTGYsKVxGBoXDIdUWA2MT3/uf13Bc91QnaRdQjl0mCEtq+ +tB9PHR9buqztYpYiWkYfo6pPffHsXYtE8Cb1U4mrmzEWcbRpDzcYxLUrpIwwPVGq +gBQZ4q3l49qnPmugewDLKE8pp/CmukCcrft2XQIDAQABAoIBAQC4LgSZAKXook32 +zt9JaZ+T/yih5r/iSofB6DeN+GloxqT0HgP1+2Hpr4ZoBPTl59CTJlyd9qvkFYlg +CVZlT6O/CyLC9ScWhBnDcf8cl2LtydtNOgBLn3mp3b4QnP1tsQ/lbGK+HiY1frby +nKweVM9S/lAwVX7mspkoNMhcwq6glLL1QnJmLfmHtsOik4e+eD051aYI4OcfkFFo +T5f6Jg5oNC0L9x+ona1avfD2eBmXmUv8kV4+NSeu+pM+hWnc6r5XnHdXgo0Fu+nf +CQ6wUkyXQAmANI/qo+73G3lEZ7KA9mqrCTbM8sulC4c7+Qpb1vHjuz7pSMj57k67 +tI2lPGW1AoGBAPDdooMFZIq6n7wt160MlYDhLujcPaMzgiXWPg9TOLzuWrSZleGH +k818LTXKlQP2ffVADlwHvyi0E7yZVzmG2Xt6Gi8lkGIP5LZK81BlsBspX00bvJCM +VeyE6flSwLA86bQt8spYNAOMMc12F2i3y+YkoKfQmgMiG3H7RjM4Yeq3AoGBANvf +3bh7iHs74oZz40em/W+LdAFBE29FeCloqIXnueHVTLdpHFepmp5OBxogkaYJlVOF +0B/cl8sYn/6CtqKHzhCcCc8V/54O15n/yNRMru4GU0Z5mhaxWvypJM3WXTVvC612 +ODM7shXtFQAF5kgeGSDFOepUG1XRPqPjBmSOFiOLAoGAL/kkzg276bmj6PoEc+4G +tOWkzzJWgHPY3ypdr/W2XkLnBAN3C7VSJeIuqwEPTvvAOKGqen/8feHn8G9mJQoL +tQErx+omaLGbrwcckQ2/1pkV5yi4FN4umu4aH9Nwl2l6bq2cJtsMeQxqOu7jWLMK +xGrVKLduhWM8riYK5Fa9gd8CgYByWA+UOxoVDGWXinjt8FfoRFuFs3QJ79S3pCfP +y1yNp0GIOG9230r7fJSQ79MOx/kSQIqlpzCBfELoNs4H5Bwz4xHu0f/nEMzq12x3 +i5GFU2DHS8Hofz9UGhp7uTkr6p3mDY7YhfjtEihTpL3HT2+97RNbW3YDwReUXyIZ +9RJqVQKBgEQzEKMFpA5NTzs4BanS8372XXKBRhP0CCTcxS23k/kkYFd0Swnsmv+s +ZCJhV5B1Uz0aSK9jfvCaEfwHjdhxfyYBzoXYVxaxphwNY1Vq7QaEzzyXWKDK3beS +9pwnZf6bEQEvvXyJ3ssqLaHWCoViHe0h/Atsj6UOYhQt5mXzZDEK -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/cert index 2b823d28f..f678ca992 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNTUxNDYxNjExMCAXDTcwMDEwMTAwMDAwMFoYDzIxMTkwMjA1MTczMzMx -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNTUxNDYxNjExMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAsFbTfGciwihsEvt2/U/+qWtkU118Hj6GKtIta307 -SDABJ27fXrhPCM6zPmRP4S7VYv2n91pCuGwXSDQqcBbkgQPtIGRbqoqDZYEy6yf3 -ohNrnykiZ8R62wXngXSKVE7KSII40HxUtXSQ1cRAJFFmcXz67iYt+7FLdX0HYU3r -1NQ4kPMk9MlH2VGf6n+ALxVKCLtg2RGdySjo/91vxyks/+ACPK8dXDTMjjuuVUNi -9nlzZQ7Rz/6w9uoyfNQdxQD1UZLlzNOjFfRDCDMeioxbJqzOFA8kal0ZJXB80Enb -WjblAMWF5s1mLjl3HQtwQL9yfUZ7S366EKw55gIF/2oT/QIDAQABo00wSzAOBgNV +LmNvbUAxNDk2MzMwNjU1MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE1 +WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU1MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEApFk4QTS28tu20CSV1s0aCC7kV7p/V8XziC5g98OI +GO9s8uVrzc51xsnJ3Y3+Xnx43x9G9VjgSNhPAuE7+/UnP6iAkZZV0mOD3xwwILwy +JK6gZOcZzd9BX9JldSnjv64r5peg5mzdhNqpRs0i3oPcfriW0sGkzl6IQlsowGoS +eDkO6+Z0IpQDo4CqcWond78LDyvqwbfFReyHEtz8D17sciGni6QPK3kGBFDiO0Ay +keV4GqEXw13ryKzVun/haLmekRf8svAU8+pjpHY0uc1cv0l0nTIZdwnp2EIF0msa +EKYyUUpcuFkMQTToYzj9LaIQmvAGIVIouNAydbheBifySwIDAQABo00wSzAOBgNV HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAORi61mQ0 -dve+w1i3Z+OMSwguc6crBLFRLV0CXit3N47ZCPjrkMFo+2Vhrnj5RXeKzKGMxunP -KCfwDeFg1bYf5C0a96eWuN8AIl7tR9maDUNQGqTK+0nWkR/YV+hyI5aZ4uuSjA9t -ErY/QZM12yVQGLOliQotXP6qLFuUIvH3oaiOrH7YbAnISy7y7LM88Ig4yOnDNYIY -Xc2dMtyXDO4IQNr460FzxAHb92sT/kSVzRaXVPCGzm3COdR4HDVq50Rq7F3ydaXM -3aQaDzeYlqSJiCSx0X+KmWVBzuhbphilTbVxpFjphiwwd7RGHvyH4fiAAeTO1syP -LwmyPNJqpcTJYA== +/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAWlrvejAW +DpKWBfgQpJLpL56v6dFkCjhThtvDrfvpx/gL0p2QQOIrgD7o+/+fmockmpphf8zc +lAFS/M2IuuvJUN7qvq/4pnUa527LsQFIQSG4GhNfHHdKfISLdjgy7LRlmjLnnSu3 +9qa5KvJg9SIWpe41LbeQPB8fLYNuF+tPzrI7QLp/VbMSSyNz4wzpdk8/+r+3KmU8 +D1SEQcaEIg7/YlyJ7TZiWiFlZRFcObE11lRYo6tnh8t2e7s0IqC1JwiAmCk0j0iZ +kHE8yND+CuO8QVDxnmu86STL+q0ldZL6C/1lLlnKFKLp+bZfW+s+kds7lDSmUMDi +CbImL3sIf6clIg== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/key index 8d82e5ea8..4e996b7c7 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAsFbTfGciwihsEvt2/U/+qWtkU118Hj6GKtIta307SDABJ27f -XrhPCM6zPmRP4S7VYv2n91pCuGwXSDQqcBbkgQPtIGRbqoqDZYEy6yf3ohNrnyki -Z8R62wXngXSKVE7KSII40HxUtXSQ1cRAJFFmcXz67iYt+7FLdX0HYU3r1NQ4kPMk -9MlH2VGf6n+ALxVKCLtg2RGdySjo/91vxyks/+ACPK8dXDTMjjuuVUNi9nlzZQ7R -z/6w9uoyfNQdxQD1UZLlzNOjFfRDCDMeioxbJqzOFA8kal0ZJXB80EnbWjblAMWF -5s1mLjl3HQtwQL9yfUZ7S366EKw55gIF/2oT/QIDAQABAoIBAGuo1v3AygvYOgNs -27zUNhqhomLzVG/ypF9IasqRbrwn8sxseJuP01EBQZX6EHre6RDC5OWzicCm3aAL -mU1N7LyH9SIto3l/j7FNLBU+FYYybSaDKqpH3uoRtMHosPvADugt+RnwjpcqT7Lz -WmXR/MWVFG6JiNF98SAN8Y+Kz0zkMQE4WcjKcQclkniA2oLYDdDGUGTOVrCBjuDY -vWu8Yv9HDwdTPUVT+O9ymt2+KJQxdw47YWhjOX1KbF5Q6Bdh3gxD4tYj1NpLWyCw -13M71U0qQDd9U0vhewZWb1Xqy5FkXf2b+09aXPOK2goDJy2CIvvBdpN4P/WQ7D3g -jzO3IoECgYEA24VZSjPUoAQSp4ScZfkkrqPRUG/K/JhovcLOaPu1P6NkwpyWYvEq -biE/Z5plUNxIH2tW12iptINWNYeo02KXDSLZljfCbBux1UlmZ0TJO1kjQ0tdXQUL -fCOUfAdJPI8ZSHCXC7yi5+pQ9x64HUIB3aiowSYXzkHKTOll6EBAkaUCgYEAzaR7 -GVHVFrBTQTHjSa+3omAnP3SfFHc0acVQjdEY4LiGHErvubk3k3TsCTQrI9KfnDLt -cVu1giR5B155LZ3nP77smod8eocXu0os9700xrw20aNR3dutpnpDDXoJVnfjzW6Q -81k+wqlOZgMAUhhZnVc1/I1dlWWXDn6qNe4BuXkCgYEAtN7EWR0nfcidTiU3b9W9 -4Z7cYbgaudEhy+hshZePGSYZaTf3uQIYAbGnOke+XseBLVIVtVppKXBlYamq8rBy -4MHsIZdDvCt9dM0LcN7+JsYlBddcz73OXrQ6LY8bSqhlHoiWC3ebihZIK7TF4mV2 -gBntIWeviaQvePt9mcUG7nkCgYA7f8WmM8klwWq1SEvs/AxzzMJOV93XPA5MNCz0 -e3VpP7p94SivYem0nnXUy+VXfg90UD/nNpOzzf2+phUFn9RS21j19RGNGh1BsVqF -a5cjkT2DNm/vcyoxKtrPwWmGPTYKMF18K2w/QmFOnruvBSCYp60VH4neOgCUzw1M -gUq6cQKBgQCEARl1ylzIWBTbrFdusspXQL4dN9vSQqHeuKTU5HApYoN3ee0q8d3v -dyunGU7zWwii/hzZQ/3VmokRsAcqS/W7qbqau6/EX7FHp82bJ4CimKNe3U8R/LAS -qzMrNASbPtfrRU6ePRmNIIKa7/KwxpukfsZw3wiJPM6KyVHN/+f6ng== +MIIEpAIBAAKCAQEApFk4QTS28tu20CSV1s0aCC7kV7p/V8XziC5g98OIGO9s8uVr +zc51xsnJ3Y3+Xnx43x9G9VjgSNhPAuE7+/UnP6iAkZZV0mOD3xwwILwyJK6gZOcZ +zd9BX9JldSnjv64r5peg5mzdhNqpRs0i3oPcfriW0sGkzl6IQlsowGoSeDkO6+Z0 +IpQDo4CqcWond78LDyvqwbfFReyHEtz8D17sciGni6QPK3kGBFDiO0AykeV4GqEX +w13ryKzVun/haLmekRf8svAU8+pjpHY0uc1cv0l0nTIZdwnp2EIF0msaEKYyUUpc +uFkMQTToYzj9LaIQmvAGIVIouNAydbheBifySwIDAQABAoIBAC07+UXJMomJe7my +OCOU9BNIhMS4qhAIhcz3puzKvozOaVg5WQCeUMBUDeGTEW4EKGiQ/UDOI30pPCX4 +xD/G6/STdj+b9ycfCM7BvWVlJw/9mFvtV6bYSfALwq0KyIqbb63aEgkZ8aZ9YJYC +JBTGiku+lpSPg8LhNfO9j2vWRhsceFEtdkv18T9sCSOQTYIrDKFdbxsl49A/D9WZ +YERYVWmWsSHl4CkKAzrQRMIrREgYJk5R3Qt0Qk+3a4BYlmDG6/5Ayfi0sx+bpcK+ +255GbRPhe9rTUI6uIc57q7TxGOIG+ekTVqkL87bVR8+oLY/5ARW3jXedB+Th2ku4 +/JziseECgYEAx77MOmRPx5ggNQqmSfcaxozmX8Cil6pEZRQxdtdgum9QnyXhG5q9 +J8Onw2o5+u+KsTmXIx4CdcA+fL4Z9D/g6GHsi87lJT6KhdHGAmPsEVFQYc0kme3X +hEfGppP4G4haHBzhNh5V9CxlZ7aHsB9J/LGZ2Utz+kvGHE/8GKiERNMCgYEA0qJj +8pdnnObFW4x+/TrOzf9jxAyB7xp3ZTp1gayzmrG4cQr5OMhAZEXG5t1JOg5SvQXh +LRWDr21BtbizJoFcAe0FzMdWIR8fz8RfqiFlfZSnMBnkhQrngu8CghAkg3g0h0m1 +tSSpaqQGVRdOFG1A/HSjiNdsBpqLGxejdUfZkakCgYEAuIAFdr4nbu6WeUf/93w3 +EEUfmjx+MudES7VORz6EC1E8v/QmLPBOXkd8U6VwLthKXI8cioRysz9CuMiDgrfq +T9v7udv+jtto6listJKFgC2CuQPbFg+6LWZ7GGy/FPdqfGM0p19395V2iUjxpn4Q +QkfuGud2FjEdqhM7ga9OlZ8CgYEAvwXM1NYgfnf/Jh6NkEREBygFJ2gccmazPxe8 +N4UTQUjJt6M3EBrz4rwxPXAUF9WjjY+GfieTzIWuYQqHVnVcptZ5OxTQdKtQY1F5 +XMZ6z2AAG6xvxYR1HxZ5VNEk/CIIqWTcqNH93xuwLn07L2VB2XJCWTjc3ERNwZ03 +fYZStzkCgYBtXFo7OC80f6xRDa1NfQfP4vP6dMczZBZBx2A/rCybwtQsJ40duEB2 +hGmgqIrRfh7H7KC8W792xzE1PKUXztTzxxpIr7Ho/nDUWzambMi39EYyBJ6Fp7z2 +RkPJFDkAYDpx/v357886y7HFz8pUUNd+z9V9CLemVqhjBWmIaLEX/w== -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/cert index d25eb475e..28870c9ae 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/cert +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/cert @@ -1,19 +1,19 @@ -----BEGIN CERTIFICATE----- MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTU1MTQ2MTYxMjAgFw03MDAxMDEwMDAwMDBaGA8yMTE5MDIwNTE3MzMz -MlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE1NTE0NjE2MTIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCo9eRiaPZns2qWDZJER/mSvSICEfDCphbL0oDj -sKfAfG35UAHDDBInLpMVoKmCgCQluJtGJZiTH+Cg3BM475LX+EC/sO8fcZH3BgxX -vQZsRisxtThzOTfKeJnMqR6Fp2a1fdwY43zdPeAaUIHpV+RzkU/T9mneYelhQDUr -4WoS7Ts/77guZkdx79hEmIO7xY0icWInfBfzwdGi+7m4X7crpGl2VUb2YGaSGbcA -OaCkEO3P8v4Mi0fFq/OEIYKbYCZ0mzsAnESqJ/taa8VfdBB0DKSOmIpcxeCKmDLw -13LFFi5mTdWuoC6XpF7ZpJ06CjXNw7wk0KAez/irpzIp7xtNAgMBAAGjTjBMMA4G +bGhvc3RAMTQ5NjMzMDY1NTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx +NVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTUwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCmZQErnj8vlA5uvizHXnGmvDCpeOkc5Ldbj0Hz +zqTCiwOSTBeestdN6oLKvxJVlvyO3UQJxhJWr00QRwdCYIvLIDmiBQjb7ciOPcl8 +WdLjBtZ36288E9P1nVwFi2RwLo/XzZlCYX0aRe/SM7/h5zzNxBR6FdRvtI1d5as4 +qiGdj7TqCFIJ/8jaBfxlusjEJd+xc0Cn8IAmSpPJYCCDmxjAzw0D12Ui3toTFHUI +J9BA7iXTVvMbfau8KQJTPeu/HQ4zgU//4GW1Qo52gNzfY37iliZaG3HTWD1pxTFO +qdDuprFIffsQrQ7mHAkGnAExxZYc2cE4UF+ME8dV0/6nTQA1AgMBAAGjTjBMMA4G A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAjTnf -lVCyRwAyAC/RQPwUNsg4RCBsuPr0ekXfmZ8mQv4ZJKpbLMuYcocifE/xMi3afsyp -5vVUdLP/3qETZUVA0X/a+K/s01G9dLxONi/zH8uqFscArWw7izlrVuCWpSpvCMBI -HNcQ3fE2hU4aOOL3JVxziyerzUmlA4a0sHo8vgusDL1BYq1BJt/YkiNeOo5iLdZT -syPLhv/EOymvS36PizVSBwhp7jQjEtxAhk1l4XPNcgAv5FH188gR/uzud0np3zPq -DUCLExB764mWeum+z56GZXK2LHaMihk897bpaT069a+ldh6oYwZBrJMHlHOI7KHt -ADqlVrG92Bq33E209w== +AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAdUUo +i0A3ttsTca5n9OY4EbDPQz7uAhXkihwoG2YeqnucrNXg+SaS+7hFA9sa1gY5NmDF +96OvmQLBEXVz3uLEiv2KGtY5yiAo6iTtk2gtoGAloULEJ018XGQ0yNuDWUfRLyc9 +5nA8CBPEnBR7MjO6XhvvFMbAjtXoDKFqVeq3okXbL7ygUjlpwv+Sbps+DjQdmnIQ +A90S7gcFqaCmy2KnzADartasIImy/78R9r68UdJrsmyy/aPNnJ/9AbbU8Z20JFcu +clKOENaKJe/o1nOVzZA2E2oVElT++2wNfomDN5ae77cLoCjZPOBArFlhwyk16YIa +wX3ITLz6Ibr9Iy7DvA== -----END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/key index 72fc75793..1f4e63735 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/key +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testdata/test.com__/localhost__/key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAqPXkYmj2Z7Nqlg2SREf5kr0iAhHwwqYWy9KA47CnwHxt+VAB -wwwSJy6TFaCpgoAkJbibRiWYkx/goNwTOO+S1/hAv7DvH3GR9wYMV70GbEYrMbU4 -czk3yniZzKkehadmtX3cGON83T3gGlCB6Vfkc5FP0/Zp3mHpYUA1K+FqEu07P++4 -LmZHce/YRJiDu8WNInFiJ3wX88HRovu5uF+3K6RpdlVG9mBmkhm3ADmgpBDtz/L+ -DItHxavzhCGCm2AmdJs7AJxEqif7WmvFX3QQdAykjpiKXMXgipgy8NdyxRYuZk3V -rqAul6Re2aSdOgo1zcO8JNCgHs/4q6cyKe8bTQIDAQABAoIBADjFrsDWbf04Txcu -ZjhlStngjT3O02xELKK+D6ryH9vQs48zL/Re6PabcrawrmR4NC0sk5gFZ/f/nRXP -/PGDpn7FHtSKWj7hhV9Qe/M7Q548EaV5NAebcUCqN1uKdAQK1LslGECQp9MbSGLv -LEfAzbV7XSxmvvoHQkj4LyWYb3D+E3QDGL2mroRcpj6t8Qd6m7EXKAvpbnF/YF2l -9Ky6qsALaqCrg950/WjfvNQE3VOfzmYtjXGqlh7JhLhAzLFu6L2z0GxhZthNgYJy -J/OfTJzKNkUIBjGNSqG5xv+HUXw+e069y+IEp3+5Kre8v/xzapI0I4z+mZhwMtnR -JH2BAOECgYEA3q/0hZQr/stOiFlz71yR/s9818CfH6SNU/12y9OVLepVtw57Q5Ex -oAKEFMplLJhMXrLFqfM13Ov2cwpUm91oSweZfJHgfcDYi31XqIYBKIJkHqu46gvw -DVnpH3+AHfkZC/WjNWpPuJwORK6XCTI5zURGb+Aamq7lV/reHYZoDzkCgYEAwjxp -lRs0gQtoWlqsbJjSB5Q+l4yX3YCaV2M0eooz/rhcHcOVvlF3yKqodVnoG4x7MRPO -wuiQuGjswzIi3u1bfsnf5rk0/bRmTlk3kKytUf0WhURq8NlSZjEEKhvDjPmnOqEz -ZtQc07l6MkquEXn4M42zf239l1V1tYLgm0lnGLUCgYEAwUgx0VtJUG7ALCKQORq8 -8VDASDe9JWba8CKYYNO1sNOrMCbWoE++peZpI+6EIE/UQYGjhR4/CxCXqUQ3Kc3j -vvPKqc+n7R5cFb5mPjSJftKl+eUMq8BOzBfU+uzck6dosPO0hCFRLqfsznpHR8kb -WGnBRUtbbBUPpOxuq2vEmCkCgYAea4e9qn0WmMrHG9xVRbnfJgCHi6VdM374oLjf -WDW8dvM2ViNloyy3aMLpXiNT7TR+AzQmonXH6+boyzla4KGrwcInSGpcMZy0OJTT -O7gJVzHnvUdiYSbeil60mZSOx6rBK+349M9u+WWB6uBILGoK6O5rzrYgtWmx+8Vh -jKVw4QKBgQCkaIpzr09sNPWyKD4qxp4c5Cm6mqhGVdvFiFNbrGqGm/4HMXTc7nrd -6wLti1EWq6+Q6neSy91+JSBHkd6l3xLXSEtc28wWvIX4T8daEZyccb0hJps+Bk+d -pHRnkgqNgoxkvZlB4MxrSSJg6x8YKrIV8dUHxpXyG7wPDwm/LDs7wA== +MIIEowIBAAKCAQEApmUBK54/L5QObr4sx15xprwwqXjpHOS3W49B886kwosDkkwX +nrLXTeqCyr8SVZb8jt1ECcYSVq9NEEcHQmCLyyA5ogUI2+3Ijj3JfFnS4wbWd+tv +PBPT9Z1cBYtkcC6P182ZQmF9GkXv0jO/4ec8zcQUehXUb7SNXeWrOKohnY+06ghS +Cf/I2gX8ZbrIxCXfsXNAp/CAJkqTyWAgg5sYwM8NA9dlIt7aExR1CCfQQO4l01bz +G32rvCkCUz3rvx0OM4FP/+BltUKOdoDc32N+4pYmWhtx01g9acUxTqnQ7qaxSH37 +EK0O5hwJBpwBMcWWHNnBOFBfjBPHVdP+p00ANQIDAQABAoIBAEqbVTgCf2BM6V+8 +Q4WtEhZpoQQL47IB1zjldfPkfrl/7T0Ggzy0AZe9A6H2pDjeNyWzjlM3jXdyqIIY +5udbNLMCIvVDfqJl7pvgllv8RnNm2HjyhnCQj2Q8h0sxIfqu1e40EHjUD2zdWNeO +PoYC0Z+NQIUxDox7jzs/xFLm7aWgVTYk86iFa0/uYwnCQpGHR5OkBOhVdkqBMUrH +7hPIoKgLNHT8/jhugv+GamtAmys1KoqIvZsc/XQCMPVmE55n0OBtooQ3fhBXJC0x +UZgJGKNLSjxt7uxHb/BQk5DtFJmPck0derMNkM8WQ6o/XSjlSiKtsct8c7us/c7r +9OFkcy0CgYEAwB6uKr3Al1IM16t6yEEdfrNc/koJ9AQ3sVHSE5CjFBLMs6gL+Feo +r3oFUglY1QB6v+5YUVsLovJLMHuH1x7fKHmd0Fmx75uVzurG2JdKwCiV39PPKYjr +238Yw3Nk6IllPCn+SOIvPDhiuvPwX8FylKGPjsi7AHphKN0f9EEnL6cCgYEA3biT +l8yvpgPpZrpTaMlotKvZkTKtb212a5EdHn0bk5fSM9xaRcumRsWd9eWGutHpMbZx +wj1jAFaGDleBl08zHAr5jsY7i1C3CFKFEUbYR5Qu5+Ot/gdEyO2+j0ehluPOBFad +P514bnWpdct8Khv2dW3OJMzVdFM7M06MXkQFLMMCgYAugT63qecMuhfRvPijsN9q +5BAGnfV60+qHSb8IbWKMYWCbvHnpS47Rqz/Oc+TE6rDL9O38A4X1k6EPw1dGg3qR +WZ8R6CRiU88Xn00y8Kxvh2OAIs1qyHIPV9yusygiAeA3iBK9ocK9WQjNKG9vPmx1 +/gW6Emzx2K3cLmqlvX+20QKBgA82yCHlcLQSlqRu6qRJFb83/5DgCliYCUUuSvI5 +oXfKNilK2ILri3hVvRYPbuRI3RiFLV8nuTBfv4kiZgkM7TPiaOdsIM/ZdQXEK89Y +riSTPXi5/cltlEG5VpccUjE5ZnyTuOyRkJ77weoMUXPOQWYjZ77Ms2TtBSXrIOSj +BDvjAoGBALAag/LXYvi7l4xIuUMuo1HC4YXZVSqDM7kftLdSUGOl/zGV/0QkSh76 +KCVOwXOCmzFeImrZYYDf4uu1wW7paprNaCV6EiChhRgCrjkZIpyw6RHAGshp3a3e +BjXCIHOW5TsWRdR+IvjzIMp9tbHCEvjSw0jDm3JiaSYGRD1AldhV -----END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testing/certs.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testing/certs.go deleted file mode 100644 index 5be50a442..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/options/testing/certs.go +++ /dev/null @@ -1,179 +0,0 @@ -/* -Copyright 2016 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package testing - -import ( - "bytes" - cryptorand "crypto/rand" - "crypto/rsa" - "crypto/tls" - "crypto/x509" - "crypto/x509/pkix" - "encoding/base64" - "encoding/pem" - "fmt" - "io/ioutil" - "math/big" - "net" - "os" - "path/filepath" - "time" -) - -type TestCertSpec struct { - Host string - Names, IPs []string // in certificate -} - -func parseIPList(ips []string) []net.IP { - var netIPs []net.IP - for _, ip := range ips { - netIPs = append(netIPs, net.ParseIP(ip)) - } - return netIPs -} - -func CreateTestTLSCerts(spec TestCertSpec) (tlsCert tls.Certificate, err error) { - certPem, keyPem, err := generateSelfSignedCertKey(spec.Host, parseIPList(spec.IPs), spec.Names) - if err != nil { - return tlsCert, err - } - - tlsCert, err = tls.X509KeyPair(certPem, keyPem) - return tlsCert, err -} - -func GetOrCreateTestCertFiles(certFileName, keyFileName string, spec TestCertSpec) (err error) { - if _, err := os.Stat(certFileName); err == nil { - if _, err := os.Stat(keyFileName); err == nil { - return nil - } - } - - certPem, keyPem, err := generateSelfSignedCertKey(spec.Host, parseIPList(spec.IPs), spec.Names) - if err != nil { - return err - } - - os.MkdirAll(filepath.Dir(certFileName), os.FileMode(0755)) - err = ioutil.WriteFile(certFileName, certPem, os.FileMode(0755)) - if err != nil { - return err - } - - os.MkdirAll(filepath.Dir(keyFileName), os.FileMode(0755)) - err = ioutil.WriteFile(keyFileName, keyPem, os.FileMode(0755)) - if err != nil { - return err - } - - return nil -} - -func CACertFromBundle(bundlePath string) (*x509.Certificate, error) { - pemData, err := ioutil.ReadFile(bundlePath) - if err != nil { - return nil, err - } - - // fetch last block - var block *pem.Block - for { - var nextBlock *pem.Block - nextBlock, pemData = pem.Decode(pemData) - if nextBlock == nil { - if block == nil { - return nil, fmt.Errorf("no certificate found in %q", bundlePath) - - } - return x509.ParseCertificate(block.Bytes) - } - block = nextBlock - } -} - -func X509CertSignature(cert *x509.Certificate) string { - return base64.StdEncoding.EncodeToString(cert.Signature) -} - -func CertFileSignature(certFile, keyFile string) (string, error) { - cert, err := tls.LoadX509KeyPair(certFile, keyFile) - if err != nil { - return "", err - } - return CertSignature(cert) -} - -func CertSignature(cert tls.Certificate) (string, error) { - x509Certs, err := x509.ParseCertificates(cert.Certificate[0]) - if err != nil { - return "", err - } - return X509CertSignature(x509Certs[0]), nil -} - -// generateSelfSignedCertKey creates a self-signed certificate and key for the given host. -// Host may be an IP or a DNS name -// You may also specify additional subject alt names (either ip or dns names) for the certificate -func generateSelfSignedCertKey(host string, alternateIPs []net.IP, alternateDNS []string) ([]byte, []byte, error) { - priv, err := rsa.GenerateKey(cryptorand.Reader, 2048) - if err != nil { - return nil, nil, err - } - - template := x509.Certificate{ - SerialNumber: big.NewInt(1), - Subject: pkix.Name{ - CommonName: fmt.Sprintf("%s@%d", host, time.Now().Unix()), - }, - NotBefore: time.Unix(0, 0), - NotAfter: time.Now().Add(time.Hour * 24 * 365 * 100), - - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, - ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, - BasicConstraintsValid: true, - IsCA: true, - } - - if ip := net.ParseIP(host); ip != nil { - template.IPAddresses = append(template.IPAddresses, ip) - } else { - template.DNSNames = append(template.DNSNames, host) - } - - template.IPAddresses = append(template.IPAddresses, alternateIPs...) - template.DNSNames = append(template.DNSNames, alternateDNS...) - - derBytes, err := x509.CreateCertificate(cryptorand.Reader, &template, &template, &priv.PublicKey, priv) - if err != nil { - return nil, nil, err - } - - // Generate cert - certBuffer := bytes.Buffer{} - if err := pem.Encode(&certBuffer, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}); err != nil { - return nil, nil, err - } - - // Generate key - keyBuffer := bytes.Buffer{} - if err := pem.Encode(&keyBuffer, &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { - return nil, nil, err - } - - return certBuffer.Bytes(), keyBuffer.Bytes(), nil -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/patch.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/patch.go deleted file mode 100644 index a4f8db7cc..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/patch.go +++ /dev/null @@ -1,5 +0,0 @@ -package server - -func (s *GenericAPIServer) RemoveOpenAPIData() { - s.openAPIConfig = nil -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go index 2abd0f387..23bbee99f 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/routes/openapi.go @@ -17,8 +17,6 @@ limitations under the License. package routes import ( - "strings" - restful "github.com/emicklei/go-restful" "github.com/go-openapi/spec" "k8s.io/klog" @@ -40,19 +38,6 @@ func (oa OpenAPI) Install(c *restful.Container, mux *mux.PathRecorderMux) (*hand if err != nil { klog.Fatalf("Failed to build open api spec for root: %v", err) } - - // we shadow ClustResourceQuotas, RoleBindingRestrictions, and SecurityContextContstraints - // with a CRD. This loop removes all CRQ,RBR, SCC paths - // from the OpenAPI spec such that they don't conflict with the CRD - // apiextensions-apiserver spec during merging. - for pth := range spec.Paths.Paths { - if strings.HasPrefix(pth, "/apis/quota.openshift.io/v1/clusterresourcequotas") || - strings.Contains(pth, "rolebindingrestrictions") || - strings.HasPrefix(pth, "/apis/security.openshift.io/v1/securitycontextconstraints") { - delete(spec.Paths.Paths, pth) - } - } - openAPIVersionedService, err := handler.RegisterOpenAPIVersionedService(spec, "/openapi/v2", mux) if err != nil { klog.Fatalf("Failed to register versioned open api spec for root: %v", err) diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/secure_serving.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/secure_serving.go index 3e9da7816..b3dce77fd 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/secure_serving.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/secure_serving.go @@ -23,16 +23,14 @@ import ( "fmt" "net" "net/http" - "os" "strings" "time" "golang.org/x/net/http2" + "k8s.io/klog" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/validation" - servercerts "k8s.io/apiserver/pkg/server/certs" - "k8s.io/klog" ) const ( @@ -51,58 +49,42 @@ func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Dur Addr: s.Listener.Addr().String(), Handler: handler, MaxHeaderBytes: 1 << 20, - } - - baseTLSConfig := tls.Config{ - // Can't use SSLv3 because of POODLE and BEAST - // Can't use TLSv1.0 because of POODLE and BEAST using CBC cipher - // Can't use TLSv1.1 because of RC4 cipher usage - MinVersion: tls.VersionTLS12, - // enable HTTP2 for go's 1.7 HTTP Server - NextProtos: []string{"h2", "http/1.1"}, - } - - if s.HTTP1Only { - klog.Info("Forcing use of http/1.1 only") - if err := os.Setenv("GODEBUG", "http2server=0"); err != nil { - return nil, err - } - baseTLSConfig.NextProtos = []string{"http/1.1"} + TLSConfig: &tls.Config{ + NameToCertificate: s.SNICerts, + // Can't use SSLv3 because of POODLE and BEAST + // Can't use TLSv1.0 because of POODLE and BEAST using CBC cipher + // Can't use TLSv1.1 because of RC4 cipher usage + MinVersion: tls.VersionTLS12, + // enable HTTP2 for go's 1.7 HTTP Server + NextProtos: []string{"h2", "http/1.1"}, + }, } if s.MinTLSVersion > 0 { - baseTLSConfig.MinVersion = s.MinTLSVersion + secureServer.TLSConfig.MinVersion = s.MinTLSVersion } if len(s.CipherSuites) > 0 { - baseTLSConfig.CipherSuites = s.CipherSuites - } - if len(s.ClientCA.CABundles) > 0 { - // Populate PeerCertificates in requests, but don't reject connections without certificates - // This allows certificates to be validated by authenticators, while still allowing other auth types - baseTLSConfig.ClientAuth = tls.RequestClientCert + secureServer.TLSConfig.CipherSuites = s.CipherSuites } - // this option overrides the provided certs - // TODO this should be mutually exclusive, but I'm not sure what that will do today - if len(s.ClientCA.CABundles) > 0 || s.LoopbackCert != nil || s.NameToCertificate != nil || len(s.DefaultCertificate.Key) != 0 || len(s.DefaultCertificate.Cert) != 0 { - loader := servercerts.DynamicServingLoader{ - ClientCA: s.ClientCA, - DefaultCertificate: s.DefaultCertificate, - NameToCertificate: s.NameToCertificate, - LoopbackCert: s.LoopbackCert, - } - loader.BaseTLSConfig = baseTLSConfig // set a copy so that further changes don't get reflected + if s.Cert != nil { + secureServer.TLSConfig.Certificates = []tls.Certificate{*s.Cert} + } - // need to load the certs at least once - if err := loader.CheckCerts(); err != nil { - return nil, err - } - go loader.Run(stopCh) + // append all named certs. Otherwise, the go tls stack will think no SNI processing + // is necessary because there is only one cert anyway. + // Moreover, if ServerCert.CertFile/ServerCert.KeyFile are not set, the first SNI + // cert will become the default cert. That's what we expect anyway. + for _, c := range s.SNICerts { + secureServer.TLSConfig.Certificates = append(secureServer.TLSConfig.Certificates, *c) + } - // now wire the server for certificates - secureServer.TLSConfig = &tls.Config{ - GetConfigForClient: loader.GetConfigForClient, - } + if s.ClientCA != nil { + // Populate PeerCertificates in requests, but don't reject connections without certificates + // This allows certificates to be validated by authenticators, while still allowing other auth types + secureServer.TLSConfig.ClientAuth = tls.RequestClientCert + // Specify allowed CAs for client certificates + secureServer.TLSConfig.ClientCAs = s.ClientCA } // At least 99% of serialized resources in surveyed clusters were smaller than 256kb. @@ -126,11 +108,9 @@ func (s *SecureServingInfo) Serve(handler http.Handler, shutdownTimeout time.Dur // increase the connection buffer size from the 1MB default to handle the specified number of concurrent streams http2Options.MaxUploadBufferPerConnection = http2Options.MaxUploadBufferPerStream * int32(http2Options.MaxConcurrentStreams) - if !s.HTTP1Only { - // apply settings to the server - if err := http2.ConfigureServer(secureServer, http2Options); err != nil { - return nil, fmt.Errorf("error configuring http2: %v", err) - } + // apply settings to the server + if err := http2.ConfigureServer(secureServer, http2Options); err != nil { + return nil, fmt.Errorf("error configuring http2: %v", err) } klog.Infof("Serving securely on %s", secureServer.Addr) @@ -187,10 +167,6 @@ func RunServer( } type NamedTLSCert struct { - // OriginalFileName is an optional string that can be used to provide the original backing files in the GetNamedCertificateMap - // return value - OriginalFileName *servercerts.CertKeyFileReference - TLSCert tls.Certificate // Names is a list of domain patterns: fully qualified domain names, possibly prefixed with @@ -201,10 +177,9 @@ type NamedTLSCert struct { // GetNamedCertificateMap returns a map of *tls.Certificate by name. It's // suitable for use in tls.Config#NamedCertificates. Returns an error if any of the certs // cannot be loaded. Returns nil if len(certs) == 0 -func GetNamedCertificateMap(certs []NamedTLSCert) (map[string]*tls.Certificate, map[string]*servercerts.CertKeyFileReference, error) { +func GetNamedCertificateMap(certs []NamedTLSCert) (map[string]*tls.Certificate, error) { // register certs with implicit names first, reverse order such that earlier trump over the later byName := map[string]*tls.Certificate{} - fileByName := map[string]*servercerts.CertKeyFileReference{} for i := len(certs) - 1; i >= 0; i-- { if len(certs[i].Names) > 0 { continue @@ -213,20 +188,18 @@ func GetNamedCertificateMap(certs []NamedTLSCert) (map[string]*tls.Certificate, // read names from certificate common names and DNS names if len(cert.Certificate) == 0 { - return nil, nil, fmt.Errorf("empty SNI certificate, skipping") + return nil, fmt.Errorf("empty SNI certificate, skipping") } x509Cert, err := x509.ParseCertificate(cert.Certificate[0]) if err != nil { - return nil, nil, fmt.Errorf("parse error for SNI certificate: %v", err) + return nil, fmt.Errorf("parse error for SNI certificate: %v", err) } cn := x509Cert.Subject.CommonName if cn == "*" || len(validation.IsDNS1123Subdomain(strings.TrimPrefix(cn, "*."))) == 0 { byName[cn] = cert - fileByName[cn] = certs[i].OriginalFileName } for _, san := range x509Cert.DNSNames { byName[san] = cert - fileByName[san] = certs[i].OriginalFileName } // intentionally all IPs in the cert are ignored as SNI forbids passing IPs // to select a cert. Before go 1.6 the tls happily passed IPs as SNI values. @@ -238,11 +211,10 @@ func GetNamedCertificateMap(certs []NamedTLSCert) (map[string]*tls.Certificate, namedCert := &certs[i] for _, name := range namedCert.Names { byName[name] = &certs[i].TLSCert - fileByName[name] = certs[i].OriginalFileName } } - return byName, fileByName, nil + return byName, nil } // tcpKeepAliveListener sets TCP keep-alive timeouts on accepted diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/cert deleted file mode 100755 index fade595fc..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/cert +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAvMS0wKwYDVQQDDCRhcGlz -ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE0OTYzMzA2NTYwIBcNNzAwMTAxMDAwMDAw -WhgPMjExNzA1MDgxNTI0MTZaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj -ay1jbGllbnRAMTQ5NjMzMDY1NjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMScrdc+XlUPHsDvnN2fFxSSQrhrKBlrHBcelaiFwR1vWt2EXxErVUoRGA+1 -jvQ5Y4NePS46Zpq2N+yibiWjaC0fsS4W2UvPAfdD4nxOp5SaTBy5A0XI+JU8QmbI -Rls+C/fSeYaXSKp5Jq41uTKGc+QwT9pqCeV7N74DSc6kvNh7mIBc4YCOzMnhQq5H -KQVCeDPURxfh7Ew+v13dLYDq7V6O1jBjfg3Rm/RRFnM78kcc51QTOo9ZSs5HgahU -eM4YirHz8ujswhgxzH43TeOGds3McGKv1HMHKJKinX02IHJBqV6U5y/AH92wi0Sp -IKgJ4GJaj/Vda/kPUtf5cL2sOt0CAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG -A1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wJAYDVR0RBB0wG4IZ -YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEALlZe -LJ3i6WQhpgV3jPWuIBTXJ0bb3cbYnk4JLWYW9sIjMakfAlZK9VrfRZKOhI8DsGsG -PVcYOyc5TQM0JkcsCKajyA6HktpMFEtxBfSJOlRAdvvj1GtRnifcA5xBqn1SzL2H -tFx5etii70spZD3jDht2bKLZmL2NbGGVOWiKdtz6qR+V9U4F+uYCq+phKgnLeDz3 -RiMIGvDpliWU/R1jgdi3RENtP8QGhjiwVDGYJBB26ZQGDkd4HYPZj9bROMknnRFk -fbP/P+cmvXrwScvrXLFkNQe/4LfJAJnod4ropQ84z/Cu2JaFbJau4TSlbp57y9ON -7fpK9SV4bTCyO34Uew== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/key deleted file mode 100755 index 6eae7eb18..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpgIBAAKCAQEAxJyt1z5eVQ8ewO+c3Z8XFJJCuGsoGWscFx6VqIXBHW9a3YRf -EStVShEYD7WO9Dljg149LjpmmrY37KJuJaNoLR+xLhbZS88B90PifE6nlJpMHLkD -Rcj4lTxCZshGWz4L99J5hpdIqnkmrjW5MoZz5DBP2moJ5Xs3vgNJzqS82HuYgFzh -gI7MyeFCrkcpBUJ4M9RHF+HsTD6/Xd0tgOrtXo7WMGN+DdGb9FEWczvyRxznVBM6 -j1lKzkeBqFR4zhiKsfPy6OzCGDHMfjdN44Z2zcxwYq/UcwcokqKdfTYgckGpXpTn -L8Af3bCLRKkgqAngYlqP9V1r+Q9S1/lwvaw63QIDAQABAoIBAQCCiJ9mM3M/t80s -PSmBflk9gCmp9QLndVRuCRFFlJ/1IfRK89KGPKXgid7WtyzU+rEWC+BEq+NpPid9 -BQ5qEMZehxcESYk1KpfciYZ6D2J1Z8e2niMNFvPraNmREdCcTWJ2w5eJgzFsdQj4 -SpTNdbTFwEmT8ijl4dvNXLOI7ZivhJ1vVGW2qUJQyR5xo+GuXZZVVJW6vndkzHoA -SJDSii4PMAisibu+Uw8JQM1rYFD2olvSWSnjz+kCk2IbrqhVPOW9PoYETn2DxXfY -0miUGq4KwtNjFnqJO+CDTJL6Y7LrZbKdSVTKfiY5ReLckWhx4RKn01T9RhsrS979 -bee+iynlAoGBAOVDKy9t3kN7FTQJyMGa3QAVUV8B5OPUIyuUOhzMrbIFECtYFXxY -jsnRNf1i2PbVsl9WDrPikNCVyn5Tf4xU7YUH7/Jo+Ha978Fu9tNf95RK+A2GKtiO -8jQa6nkII8Fmql9o3xjCEQD0VBirrm1h3sbC3ylKL4u+yC0a6W7vFRRfAoGBANuK -tIvCRGoEyn8nzSXUez7+/9sIwU7jV6lXL7qgdukr7o/ZBqer48CDlehXU48yiVpB -TuMZnloj/Ndf9X07t/yYwfCP7lpdq6lR7EhG5yS0WjgHjv5+QKLVA7ocrEufgBKA -Wdb+96eyOb1bgBMprtYA8wbhblhut8rk+i8SkdpDAoGBAJPxY0XI/VvIamdZRP6C -Y8iw+QB5JW5Lr6JolZOOFSxCjiuaPMswDnx3kAKCLgYi4mcZDoXQV6jycGhSk4VI -LLni5FkmmeduK/BEHe1LCWXddvKrOKzkmbE8CUCvGvurt5e4AfdlDDn0cOw2pWma -dXsHt6BaahIgu+Y3bpmSmKS7AoGBAJGlhX2qleSX5RdSemD8g/8ZAPh46HXDkSaA -9uMjDYBHau73ldiqyl+vbEZFmOPJLSI5bXJwToOSmGzx9lTsx3TGivNjKUe+GOIt -vUl98F6DX88IBK+FZrAgDWbtGsjYugiMKg3d/MK+FFwxVdhgsOK8on4QFDqKyVfL -bMbJ1QUtAoGBAK4nM5GZyefXylAnq+pzGTStu0Q1AVzN0iWO0G0Q6gaItvk82Scf -wVoEGE9a2pDCR1I1mbJn1jRxd6/GtXvR4TJSxPILS+B8aZFkxl9WIWjv/mnKJkVL -PmSNPbieuban9TRBu6nQfWOfLMHmBnG/QXbx2X1WCRoXjICT41gJ5et3 ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/cert deleted file mode 100755 index 3fb375592..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1NzAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -N1owHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTcwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDhpeY6j6ujZc2W0paC9pmVHlEhbnsH/L0N3JjA -WooyZWgsARSlv95Vh2M1gVymu7mah3HHzQkVe6vN5bfngOO4A2d3fxYP0304+3YE -TCariZzcEk9Ot90VHNasTVMOqZ2qdGRUvEXbpRWlIhA+T9FgNxpBDQV5yb5w67Dl -kBM22wn5l/YM/4HqSOTVQON1SmmLUPlnWtzxVRDKPzI2zxpKkzW4U1bYgdwM/Xeo -B2GjU+1UsBlJWGrRQhCkiFuZ92agls1bsu3+PE2leoQf6vZE+pc0m89v0lqlcgOQ -TcI19BFvLjUneDbu4kFZWDO+f23hhEcHut26IXtOoAIvk9uhAgMBAAGjTjBMMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAHlVy -2H1FxDXAJKeZkFCNAHOiThcm79s7P8+BXnYbQMgdHAiQIQFQDDwbntA607m0FRoZ -1H1n/rzkRXRrNJRPEd3aSnurq6oMMZa1Pai4e2f+kyThpIw6FtI2y/Jb7lKB428g -9AHtKSd71MEArOvWHi1IcX6rmH/vU5ezBgPpjtEC/5bI8PJMqr2osesjppKwwwjf -BTq+AjvxltPDb+fykto41IMzpM7KRO/vat/dZ5OZZOhDpbJlAAWUfCdlWcL0kqTt -ok+biBB4xShOwpSyKCmJg4otlvN7qJ34fCjYkQY+PXzGS6YV34Wj64F8mReTt4LO -glampIa1cLUWPMlYPQ== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/key deleted file mode 100755 index f9f40c6df..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/apiserver-loopback-client__/localhost__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA4aXmOo+ro2XNltKWgvaZlR5RIW57B/y9DdyYwFqKMmVoLAEU -pb/eVYdjNYFcpru5modxx80JFXurzeW354DjuANnd38WD9N9OPt2BEwmq4mc3BJP -TrfdFRzWrE1TDqmdqnRkVLxF26UVpSIQPk/RYDcaQQ0Fecm+cOuw5ZATNtsJ+Zf2 -DP+B6kjk1UDjdUppi1D5Z1rc8VUQyj8yNs8aSpM1uFNW2IHcDP13qAdho1PtVLAZ -SVhq0UIQpIhbmfdmoJbNW7Lt/jxNpXqEH+r2RPqXNJvPb9JapXIDkE3CNfQRby41 -J3g27uJBWVgzvn9t4YRHB7rduiF7TqACL5PboQIDAQABAoIBABg+G6MVBmqyqEjY -7SS627tCm5LM7Njp1WHk3mBkGc7aSDvaDd7U400rE4SPFmYvavxoKtg9dglh1Q50 -7LIpjc2aSAZ1l+gxX5W8pmxFxi3NxhV6vhyF8nGvPH0cfZzoqjDC+niEFblIXi/0 -newj5SnCIcb1YC46d4RoPgQb24ScBiQi3DeuqiDPQO3cyePyr5TEpeL4djB8YgK3 -yAgKFotsox1sMz1r0AX4JdoC2cYBh6qmGs+qdkMYW3O5XKjkkWS7dglqHIchhsrr -P38kuyp30fMrE40+5G9hKi3WO/nl3FP/eDM8BD60QF1edXobszfd8BsVnrBfbfjP -wDP51rECgYEA5/hLWVPXvTkSJeWzkEYx2PvubClr4fZE8j4oYTikD3q86R6UkEhe -c/yZd9WNBgwUrLG4SV3TaqEWvyUEnsaNbI1YK7e4PrhMSLLZ0G040jW8TA1SE2kT -fnJ5g4ZRWTNvksBTcs3QtMC8FzFazQ7gKIYz+SXopxeww5D8T/ok/WUCgYEA+QXz -/mYUnUMt4kWfcMDDbiYCgVSJK71E5M5qH2yxjB7NFLcl0+udQ5FrrW2YEgr3DnSV -Okbg4ZcmdnjCOU7Xu5BlU0GWe5lXiOBf0sUxrNU3OY5voVPYgSXJgTPRzguTpetA -2Liv/7x5dZ0krIKRTCKWu0iwcdOOaPrEouln740CgYBcrrckXLyBLTFUFP/2sCUw -hhBQBQjGwsfvZehqV+AtEyQxnHdNYqzieNW0rI1pEiCck3GHVsam/vAAtUCwU7Kj -4aGN7hzeanKIRXWDsnAWhUPTuyrE+KHCTujAJUWRd1yn7NIqt5Mg9TTxq1WVQtFL -P7u6W2wmfu+wY9h79/0ZhQKBgQCQoRt/wmvwlmbcxxD+HIakv6Cu2pk8dRXBSf0q -uSc5OV5kzKZEudBBwQDn3gH3YLTyiVVuXmIXw4DMSACN5jO3tPqUa0BqErpbPe2J -bYwXVFJZtFczPI4/G+I3jxAoemLLd6HW/RUDE8T7QUReiQq4TFJ8/Y+03GkWoaZ4 -89SwtQKBgQCmWHxz0eXQk3YRk0kupSrK88pZoc9wvcWYhzkiQpP6+hYPxH+n+U6s -NjHnQAVlRUIP0VisQRkBC4iy2ca/gVVhKgygVBuHC97fKAHlpUlO6Y7Ow031stAy -K3zrTjuVwsz8C6bFCxHl5ojP+0cSoK7qej09vj/te1DNvkYuE/0j4Q== ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/cert deleted file mode 100755 index 8fb51107f..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/cert +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDOTCCAiGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAvMS0wKwYDVQQDDCRhcGlz -ZXJ2ZXItbG9vcGJhY2stY2xpZW50QDE0OTYzMzA2NTgwIBcNNzAwMTAxMDAwMDAw -WhgPMjExNzA1MDgxNTI0MThaMC8xLTArBgNVBAMMJGFwaXNlcnZlci1sb29wYmFj -ay1jbGllbnRAMTQ5NjMzMDY1ODCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAPGTpeR8wkr9yxMV8LLI7UaImRF6T0ZT2HL7cmjZDbV3Ow9L8UXvlQ0SdKbT -ph2IU5Ww4h3xSiXXXGh0FSXALs1Ieg8DmMYKHNcnOXpShwuXBJ0NCpPSLnAO+2hg -Jq+ULvBTGjQhvCX+cjI5IquYp0sSbERS/+46cGrwWoye67Z9Xo6enNjHG8YZf35B -Wspvm0awUw1KcXkp+lJ9zoblBeXm+uXdMhzEyRpghRslwvtPKyU8YhTN63p0Ru1E -Kig3pctotL2n1/7+tR8yhjEstLiydHYWhLkX6wsUv+rNirUGVUBjF5VFtERzMPRK -0dh/hs3v2JSby56IxRcqqTSzvfECAwEAAaNeMFwwDgYDVR0PAQH/BAQDAgKkMBMG -A1UdJQQMMAoGCCsGAQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wJAYDVR0RBB0wG4IZ -YXBpc2VydmVyLWxvb3BiYWNrLWNsaWVudDANBgkqhkiG9w0BAQsFAAOCAQEAEEd0 -MOqC0POVtxGCy/BHR6sVcf1r1BVTt28p7u1yJIdrOKuknlILt9iSNfFcNPRWIP+u -7SNPT8td6yViBgn7UMjvFxZgQn6kTsgTfdRV7eMxoX/jYzt0g44k0oVGv+xiJ+8q -m5Ng+tMOMuY1+JganxNad3mwdff4uKxXuVQsV+mjXBwaJHIdxBmCFqg/dGB60lyb -fxFjuTAT8xyL+UE3VUoCLFdNDgIsm0v3uj8nBsASW1LeZSbMQKUJXGlvEpj5U89d -B9ZouygfISPKQ02WYYDfSmtGCqX5sFZRh2uSPp0/UPUB+hUk7C0KN6TgsB9kOAD1 -Sa0X3+KhMRVOk7riaQ== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/key deleted file mode 100755 index 8b9712cf0..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/apiserver-loopback-client__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA8ZOl5HzCSv3LExXwssjtRoiZEXpPRlPYcvtyaNkNtXc7D0vx -Re+VDRJ0ptOmHYhTlbDiHfFKJddcaHQVJcAuzUh6DwOYxgoc1yc5elKHC5cEnQ0K -k9IucA77aGAmr5Qu8FMaNCG8Jf5yMjkiq5inSxJsRFL/7jpwavBajJ7rtn1ejp6c -2Mcbxhl/fkFaym+bRrBTDUpxeSn6Un3OhuUF5eb65d0yHMTJGmCFGyXC+08rJTxi -FM3renRG7UQqKDely2i0vafX/v61HzKGMSy0uLJ0dhaEuRfrCxS/6s2KtQZVQGMX -lUW0RHMw9ErR2H+Gze/YlJvLnojFFyqpNLO98QIDAQABAoIBAQCu+8LrSU83ILSr -I3ZRGmd8cs9lMJIhn/Ql/Wq29ZoPesjl4J1oig0OBfNHMAGgXLImuJRhGfkahe+i -nYr/6EA+ZCQ9od5UfNi9I+VnbEXzqDUoSV0DC/ilJMUIqrT68zw4ygkt/82YO8Ge -DXLGlvF+2F5h8zj854msfGMqfqbAbJDynA0ZDuq8SORUb/1RIiAZRrABZ1n6HsXv -cZb12wcycbxKTPfISkJDJ+PUVmCcm/eO3jLDgy2hAY5bCG6+HIO/N407Ze83TA81 -nBRM2WEA9BJbRmmB2yAEy2aJamT5lo5qORElmW0gEpAEceRgYi/VjPyvwjOw7IW3 -SlEDaYbNAoGBAPzt80mwWzgLH0SIqUadXbJILqZ1j/0sCr4r9CfIPppbZckaXbaC -iokh3dRaVBndI8z/aPz5+wmvNjqxQ4Jz+411ILK7G0ogYRJcTaQB7Vc2QTPtdu3t -HE1xCktyTAcyVJtrVYfpqaAKZ/eEnDmatxrMW1nmnFlZxBZErnSAjMl7AoGBAPSC -anORXVXqbM6d7XKXiXYLkagmB92LP36DQ3OXiVIH3CD2weItRvqup9+nIdMJMDyN -PR9CXSQXclFjVqpgPFKEAUNcGbTea45Kykw07CUYEdYRXRYtij0hhsRon+T6vsE7 -eEQQySG0ub6cTsFi/AuxWlPCkQLIhfCkVW4kvqyDAoGBAKBXEGXkgM9Ubav6nqT/ -WciNbdVkrbUnWGAaaRtXHCiqTCpiponu03f/mirmYG5M/EcWmy3UI0qOYmhuu4dV -k2CnoeTsLG6ffCoxjZ6tAhLJeCg9H6nRKKIHSSlu+beONoiYUI5qmHe2YRZOYOM7 -q1w3tKmXQgJ6n44mWBnO7HFFAoGBAJF5Rnyb8Dw9zZ7gt3WGU3K4T2ELv4JAZvaO -goMzlbAInR+/sHsxFRnw8FBQz/8PaHOeVM9UXLYsfQePYvDbcQhnIZlCIslJzBRM -yy+sDRPEzlfe3NNlJOpaGCSjWv6RcQzmpRdaJVC4hgqyVOkaS3tpeaR8Dmrpg0c5 -ftqZYhihAoGAMRbt+21F1BD3AGDseGIg4MQIEPfk7nh/cVFBcnXAqV49dmm1/g7G -L2itzJlTb1oOnlY9qBksocvnj3w8hsrWFvt/s0wv1e3uUJ1elCb18Rm4UQtr9td6 -XFqEgDaDYyj1iEmn+PrjQc+DqHn6JySLW4LTM82KWwDnMttvwLFhaOM= ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/cert deleted file mode 100755 index a402b3e80..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1NjAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -NlowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTYwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDozgb3GKC3n9wREqYUm92/T0+NnEYkaWOitXAH -BW/Gj9PAF4sggnAey62H7mkBaUpw3s3RXyrqnRqrXVWvWgbSpf0Elp3zfos4raEf -hgWhqMh/SEf5ETHNRyfebxTSeQYRuZsvAPEsRWKf3AKFEykfW9y/GnKYM1elL0nx -Fgh0tq943epjHuzKfVWp8LxnFd7fyL+BQsvBNnYz0SH0F9oTUU3nDCS6Os/+EtNQ -SjP54HQ78XczI9AMvsFUS7yFEQdM8VW9uYhdv/Oyi9SLywhOCHSnV9buJ6F8URzO -B5Cawdteew7U+EAXbEwY2D84NARF/J8iA3Eh7+UKd27WA+pJAgMBAAGjTjBMMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEA5vjR -Q4Rjx8ko8+Zt9gRceKCVWEmdZLGkjwdW04YaIcrh41svm+tgxwUMdQ2beNjUbLZX -DAVvK99HiANBc9Ee4DyQFkLI2z0EiAJpuxMjZlyzMmKLeijOkIkxYIshhfc2Y2Fr -NIf6OXmFBEjqsudxkQiGfSqc443GseJmmiuhW3JR1a6ARgut4AtPsPv2TijX7tcR -Z9tjzAMiubNDQq0g/Eh9vLZkv8tNTqoJ5N5XV8jcovNWRcIIzl+lXBfy0o68LwO4 -Hn/MzcMxOdbNfFw5nMaDuQK4oO0vT3D9nedQkdV3keLZtagN9/PO1XtkCSQ5q7Le -LS6fs5zA/9sR2kEuGw== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/key deleted file mode 100755 index 91de1492f..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA6M4G9xigt5/cERKmFJvdv09PjZxGJGljorVwBwVvxo/TwBeL -IIJwHsuth+5pAWlKcN7N0V8q6p0aq11Vr1oG0qX9BJad836LOK2hH4YFoajIf0hH -+RExzUcn3m8U0nkGEbmbLwDxLEVin9wChRMpH1vcvxpymDNXpS9J8RYIdLaveN3q -Yx7syn1VqfC8ZxXe38i/gULLwTZ2M9Eh9BfaE1FN5wwkujrP/hLTUEoz+eB0O/F3 -MyPQDL7BVEu8hREHTPFVvbmIXb/zsovUi8sITgh0p1fW7iehfFEczgeQmsHbXnsO -1PhAF2xMGNg/ODQERfyfIgNxIe/lCndu1gPqSQIDAQABAoIBAQDBke1Ar32SsJzu -pS7qm975HxzqhjHcPLTXqT0I2YBi/Vv3sJvB4DMRqBEVoSo2PjHjP56qpBKvGQn/ -yo9gSd66b8G9eu7Cc0mXSudZqror/IcZLiSJ974NDUkdLgeGKZLeUhGyN3pQcTDb -8rc1pwTeSid1zqvR2X7ankNA7i0BvP6UXlvWM8kUvfFDwPXhHPZtkFELc4TeGIzB -e/l9Uk0DAgplkhM32s+0rTZ7wmcSUK9eh7/kiQCUKvdCVwegsK9iCVMaYIMggut1 -3KEHuVIbuLdjFu/tF4SN85funMIPxD7rKf38aDrR1vhQc5tq88dKwVrD8EANcA/f -34mAWSIBAoGBAPZLAGJ2McxIoK7ymyvGdNta0glzzbww20xLB3MHYpo+cgff4DN0 -3nA/es49So1m/r0MKjnC0qxVMceTrU4u43nROwbLNlFBZ8hzoEVobCCoykWKkhQO -hS6PkxBZ2s8nsSQCr3X+CpHd+JqT7Y98ydWVnE+kDOFIPr16j1SbBJS5AoGBAPH6 -73BDmHk4fBb9J2edNtx+7/1/+Lbb96qyy7LnA9zxdXgqjeZwFW/tNjtD2l+TPWlR -O1L0NkfnhzWPd7rDlQA7Tzr0TLF/H34+ycbaorc22M6GEg9zJwRY42EGbYJE5uRZ -Sq4jXOTOAta/lb+UjqWI7eYyH89SKlYcDut1VVoRAoGBANucUvJ427yBAi4dC3nE -EszJNcHR7aAhnFlyCWlrK2PHzJvy5xJa4kEKiXE+u6xMK1bccwZgDsQ1jxabOowd -SR6FD3HmXz+i52yYlU9uZgPVHc9WWRzjOaQjx4lr5ayTguNONbArXrdkStlikBBC -wCHfrqpg6E80wSTpFMbnFvWZAoGAPNSDOqqTeu27LCBJtp9r+jQi6owwHu/fK9c0 -o+21J+a/TA0OjP5iNTfhqTZegCZIiuAz1J+1wY+visRdKeMe4ucF/OELIpe9eAQa -v1WZEAvGpuxHQAEHru0Vg/+UqeneTUsxHeOf55juV8Pjxjx3O5/XhkXVf029fNYi -3ggqA7ECgYEAgowePEGL7l27raa6F9h4wuosfuFFdrrcOJeGxNV9jAe2s2KKoQFO -lCv/AcCsRepf9G235TqQ+if8a4p7OsHL9kxOspKBJKnwq3u+jgcJTl+HLWgnDjIc -Yk2xlnRC4N4OiGQrxjOmFXQdXiBK3T4CJnw5g0MynrdwiJCCCnEIG+A= ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/cert deleted file mode 100755 index e477a0f1b..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDFTCCAf2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1OTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -OVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTkwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQD2NQ2T3x1nBhqWOCjiED71R+j80XsFxSMZXNJB -wUCCGZysf6OGO6M+NYZ2qov58gfGrcZYBJWwuSRF+0NeoVzkCu3AJkTKXSdtv2vi -M248yBUhvwPwbTcoMyG7p6LhLlmlPpP/7n9yVfVtRzFgy4UPYAlJmTnakk9jDKXM -gi717BjntQ01+2I/HIZls5B5vLwWuHtWrdng39Evn1RwtJrLUVJE5b6/+otvokXB -DpKMb/aI230uw9D3Csi+6iAKK9JuhCEe/S3ezJWg5SugG6UrwGBLZYavXP7iiB9p -u32XIe8lMqQfsiur7iCQehwxTdMJ7uR5STS5eqfoV2SdnlN/AgMBAAGjWjBYMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MCAGA1UdEQQZMBeCCWxvY2FsaG9zdIcECgAAAYcEfwAAATANBgkqhkiG9w0B -AQsFAAOCAQEAuVVTMV237szi8c9Oy5ulsmgYkp6MqfkKryy6Zi6r5UtJAWToAFu3 -dvHKnSQNgiWDewVKn+pMGNZuo3o6PGxdq/E2ZQ6/oCxNRThb7hC5IK4Yot40EUQ4 -ZavrmON0velXZJ3MwbzSzstLnJCR3maO+Ko0KPC/u4LADCQyeVrEZ4IP/RPQ2KZt -mdmeHTm53tLPrcNSnaoW+tMs6JxAT30xOLnjwYfEtbMCVhGB+aHQIGFS620qZ+dn -oTqrjempIIos0Vu68ZhCaDwgB9FiNtFMplxrBvOIfWO1Dz9AwPxP1fCMlZwtFJt8 -vuRu05WPJelfnEKXIuGhuGf369xyfw5cIA== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/key deleted file mode 100755 index 27ddac795..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpgIBAAKCAQEA9jUNk98dZwYaljgo4hA+9Ufo/NF7BcUjGVzSQcFAghmcrH+j -hjujPjWGdqqL+fIHxq3GWASVsLkkRftDXqFc5ArtwCZEyl0nbb9r4jNuPMgVIb8D -8G03KDMhu6ei4S5ZpT6T/+5/clX1bUcxYMuFD2AJSZk52pJPYwylzIIu9ewY57UN -NftiPxyGZbOQeby8Frh7Vq3Z4N/RL59UcLSay1FSROW+v/qLb6JFwQ6SjG/2iNt9 -LsPQ9wrIvuogCivSboQhHv0t3syVoOUroBulK8BgS2WGr1z+4ogfabt9lyHvJTKk -H7Irq+4gkHocMU3TCe7keUk0uXqn6FdknZ5TfwIDAQABAoIBAQDKBSg58HZAxcpk -/nnVXL08KCAt6nlGd8bgFcDUgYy78+YRyL3V8/NzpRnLHw+yLH1i8c3xBPoKwy/X -WF+kM0V0PN9urjf90Ef9DneoaMkIiKiGQyUpT4RVsPb58oh8urqGE33/H6RlndC/ -NQ54PSbWQdf9EwRcq3cGcCdPUnbUA6Ur/m03kIWYMnPKZeXqTCA8AMfsLuoXyf3G -H9Q/ReGWok2fOkw8I/2D2HOXh+vnPoOOWbxf75DAt7tk2tRrgvQ7cI6TOJo6AImD -E1rHU7lrVhyo2AK+8BfjihGgtgt1qCwEeviuJn20wRQwTpi3r+aflaVCgsZADoc5 -6bEkjP/pAoGBAPZVyIIg4W44lHz7xu0DMAbdK2CwaYPPhEewVNTCmtq6wvP/CKz/ -gZRv7HLFrEAPuMuSPi0+0lzbUf4IfHeP79jzPEsoHlzaSyKVho91uttsTYGRS0yD -M2Kd7uavXH/lRR16h6TlGRgNTAfWh8I+WimzBi1IHP8LQPv9hS5CUseLAoGBAP/d -/FLXTQJ4bsb3Yune/xoerrMo05cUY8BM6WZ3s2wdPSMnTkh921CyzGzfWLpDHrww -rFBrbs0O7YijRU5gjwddxVMT/qcwNEETEWw38X3kfPx8TCYKT5OsD3HoiTKMUVJG -ehdADEm8mh918pgSvW/hvFaW98rIWjVwTt9djkJdAoGBAOkQJJMp9N/J3IOb24wn -desomn/yqQIy9p61MK3UKZtFFGqyI006uSjt9DJq4BwEQ/0nMniwdWuxfhPxh4G/ -x1fmWmdpX8DOMERaYGOfKdms0HAEPc/4Wke10XCk/clr7EaFxYy3zVQ6UHMiAHRB -diD55qA1GGoeBa/lH3qy+YsdAoGBAKP4j65LGaf+pAdQHIyCAvurNAvOmyKTx4VC -BMVM6qfbaQWxN8LPHRBvNQCEdWkQgI7bpmH3J0+0RFcvQsgCq0ZuOnmOM8DS7HnT -jXPLujASkGKCCY7LRsn9FvzJp7rEH41Zav6hZf6PJjoJLUl1oP8lK7xWDUBf+yeJ -7JHKc9NlAoGBAMhca2WXdxX1R61zdjqa7Da9fC1a8cdkPHsN9CA6ZMxGgfrbZHsY -YbqPhjuupOJe5B5MZ12oRqye3u6SuzoJMcSBOjKMLX/ME5fOxNRiAGgm1WEbDeFJ -3+ZyymShyUbpRLOg4fUC1vptzSJ1i93rXOZI6Vs0rWMj+PKDEbmFLiT8 ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert deleted file mode 100755 index bdeb4090c..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNDk2MzMwNjU5MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE5 -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU5MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAwRrWvzL0zR9OFg1ipRU+Pvd9v+WN4ILKxU2jxlut -vZOevsyxflzRNOQImejpdXEtA/yZTKNYOdU+dMdPDdSsMPFzRgzQfiJDKqJw4jB+ -SF2XROuZEYMjxoJtueAGnw1DO9tgzn40NtHrPJNKadrYljEF+zycNLcPf78GK/ug -+5rK5MkpNVmxO4yjqxk5ZB3KD4Gol3RaheVKYmTfjNIAO0wk8O2NbvG/JxOPTpDS -aElgpfdy3Bxv4JJpjgNKrHEUYUqkwlqmrinTw8MSfKJq0MJ8nIx8HRojrYrf6Jh8 -zDpPYuqlUygcwSz0sQEY6UceaupQmlvDT9QLLVBm6aOibQIDAQABo1MwUTAOBgNV -HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zAZBgNVHREEEjAQggh0ZXN0LmNvbYcECgAAATANBgkqhkiG9w0BAQsFAAOCAQEA -jdyL+g1UlZ9UsnYA60iu3n9O8nzUU13z6d3TR3vFBiaTAiVYgcEoL5BmhZgn5jcW -AlQqmVicma4rypK50GZL7/fJBwiaUjkGNBh4ybfO2TRyXbmTCtMg+1FUe/LptxD4 -IWvJvf/Y7Vv/Lb1Gh0MXUcNeyLThletz6tJI3NAQX3meZm2J6/PBoERP7KXo7C4F -K21/V3aD8Zj7gs7LQLePz14ARAuovd/LDFmAHBcL3EIXiegDGe2c34IKupTPiysE -KIWAgOWSBQ9iZw4Ak7eFSDPIO9Xj1X+D1Bcb2EMcYw/9xJt8JFAqFFjMHPcKxCkQ -oY+IHfc38TMOEeAr8N+W2g== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key deleted file mode 100755 index 146d1f7b1..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__10.0.0.1,127.0.0.1/test.com__10.0.0.1/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAwRrWvzL0zR9OFg1ipRU+Pvd9v+WN4ILKxU2jxlutvZOevsyx -flzRNOQImejpdXEtA/yZTKNYOdU+dMdPDdSsMPFzRgzQfiJDKqJw4jB+SF2XROuZ -EYMjxoJtueAGnw1DO9tgzn40NtHrPJNKadrYljEF+zycNLcPf78GK/ug+5rK5Mkp -NVmxO4yjqxk5ZB3KD4Gol3RaheVKYmTfjNIAO0wk8O2NbvG/JxOPTpDSaElgpfdy -3Bxv4JJpjgNKrHEUYUqkwlqmrinTw8MSfKJq0MJ8nIx8HRojrYrf6Jh8zDpPYuql -UygcwSz0sQEY6UceaupQmlvDT9QLLVBm6aOibQIDAQABAoIBACeo73oNaSHH0C3P -SfdFyab9BaKn7t+xfRvQulY+9gv9iZj+SWX+gikuvGV/5JLuT6SF+KY41iHqng01 -8hKRH1xd+qLkdt2xA8J54l1SQF10e2D4UlO6b1qR5x9J15JLEwf0IonGecrYikvC -pIHhJKKUJvpWlG5vOouuHAJkh8ekwz17cEle6IOPY+p9hiivk80npUzbdybnHK26 -pNGPICich8sUWNaiSUia/TCwIDzU4NkNhsOxoV/QZOTOFnHl4lR81dSeptdVusPg -JdC0+VCMc8wGgXdDqWxPzDdT7CIGNZcqpltBEe/27QPVYxckK3kDkOFRXshD5lPv -56USHrECgYEA9pB5ChHu9JqkedN8QgUfipl/doAOz80vghG0gi+wvkeD/XrzXaES -rXlkGJFKbPkTGhemSzBPQNEbpQa8Y+h+GfKLHux+Kd7pWRym4vXojxeJyaCCG73i -d2qtoHi5QeZOY36AJT7bq3T1ZKHG157vEXRghth+ozpzb1w+KeO1ZNcCgYEAyH6j -FpowWYdsPljqx+7SfoPdes/LGtfIWnGRM12C6H2Lb9FX6l1yIMNJQgYhyRPSbifL -uArj/Jf9LskaaRYHvjXbtBANHHU92kBZszMj3x437otADwL9iWsV/cyIDkei5QTl -fP//M5RSZj2WyRQJ8hXTA7Ya5e3rGJYlHQ1aRlsCgYBJMK2dXaFvHpCAUVTrTBYG -0HXTuUOsT54woAzTMFDoytXVYq/nNS8UK5qY6FgNbQpMjoSggSClfu0T2aIGjjcQ -gLznWxBAYZknCKhJavGzuCsAnRLCJWWaSSJtJijn9POD+UMUy0nt5XQKgTNDQjx5 -E/CrVoyQ64LkpZ8WVC++VQKBgQCLUMu8cem03FAPxrNluAKWHMTyiJ8mCNjUV+PA -YHMNX+dbDIlddg9OysQF18L0OQzYtFhvi0m+hFJOhzkN2lwJBN2kch7aLnGLTXnG -9nsvl4zf+ezKQZaxPTLrx4qm+YosP0nDoRLQ4XicSKGVGZKLoDSfeJOaP8dDr1kc -peGbzwKBgQC3Tz57NVbIDa3SdMlpgV5iUj+AQ4Q4OLxAWzePttic1+nalQyFLMBI -dq4HytJEen/CK/XwelHpMfMv/t2bZcqags+Epm9Qhd7jLMaFsmrscmdjXdp41kRR -KOjZHBUuhK7HfeBLJ7oLGDlXHvtfwC59DRLipYrtJLG4Etkcjfav8Q== ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/cert deleted file mode 100755 index ab75f495b..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDDzCCAfegAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1NDAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -NFowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTQwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQD8AqsPL2/NyBR9LSPSkLedA2pI5DeQ+z7Zfp9K -8EmbCcawXZabrkPCr0LwNyylynssZXqGLYWvwpl8zGk0E2Gr++diIg17uZ4lZUKN -jYhGdV8Y1Bx2Wl1At4LLe+bmxv01hslT4EDRzHfZU/wy/gTtYMJLuQOKqddW3lkV -FXNgJOVGmIm1tehwDCJhL9NIyQcy6w4i86e5B8q+pk3V95mOlKR7lHhk1ZFsMCKh -TCYG/qyu+ZUkKvZCoyV9SwuaN8Df3TT6MYSX2ulvmze2okfePwTeKMpwudrfn440 -0TWrWKJuMdNe9bHXsvhvPZlqBCouIqPC1KiuMg+Pcx0laz9BAgMBAAGjVDBSMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsFAAOC -AQEAXHWVJ8fuPrF7Bgj3i7fyH0wE6mHeUMSy/bxXdbrkY/H1wGMxHZa8uAodXeNa -Nb3pBzroqZcVWjkh56knGgeZE4vmkWWZZ3G0Bj5jr3kzhZ9Tpd1LyFOhIdUttHPs -DOVfD7AIl3v4xlMDwlYYQKrt1LzHZX1n7sJHJK1s5pL/lB9PdUGka6XLXo7meKPL -KluKBF729MfwBx/GNrQEh4Hw9/KVnBisKKdWqowrKzVzGj3hv2q+wCxDuUZyl7Cs -nw07CGIn+t7+5/jRyEoIwUiOydvaOFkXgOpWxHQVEj+7Hw+rstDbMDQ2+p4LpJjC -bLBrGtpaitmhTPyT+SSR7AZisg== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/key deleted file mode 100755 index fbb247fd7..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEA/AKrDy9vzcgUfS0j0pC3nQNqSOQ3kPs+2X6fSvBJmwnGsF2W -m65Dwq9C8Dcspcp7LGV6hi2Fr8KZfMxpNBNhq/vnYiINe7meJWVCjY2IRnVfGNQc -dlpdQLeCy3vm5sb9NYbJU+BA0cx32VP8Mv4E7WDCS7kDiqnXVt5ZFRVzYCTlRpiJ -tbXocAwiYS/TSMkHMusOIvOnuQfKvqZN1feZjpSke5R4ZNWRbDAioUwmBv6srvmV -JCr2QqMlfUsLmjfA3900+jGEl9rpb5s3tqJH3j8E3ijKcLna35+ONNE1q1iibjHT -XvWx17L4bz2ZagQqLiKjwtSorjIPj3MdJWs/QQIDAQABAoIBACnOZ4JFZE7G+l8p -td+gklVB08fz1CQBChQapWJRKmTF4mgvnmSFLEiHupsPDCEUzgo3a3QG6T6XEc9a -Obmh3Xoid+gXrhTwXgPmIHxLFmhZ4ETGK1KW+xFZYCFRlKSELk1K5us7MIWdXeR3 -wkbTTQ30F0dokeXW9xo6GJ0eyd0Q7ZHzePI+Gh9ORLNeRdyk7Px6cFuDtox78r7b -teQMGNeEWtdJArWIbjxPprp84uo4qb876W2TBCt/rrFp1CRfUXtjSYQXTEsvon76 -is64X3lQhZR3HCbtjbRVhq76aNJQweVIO9CHkeLwyzGc/PyblNJNM1blIWbgQHvy -Zr8kYAECgYEA/0e4gCGohQILo4E1EnhWuHwKPACsBHkQ/D3JT2H/yo8IZUvnsPZJ -0iNhDnnPi892Xe9n7q8LG+9FVO8OYghfiF4n66dAEO8J0UFsA5CLNGr69noQEUvq -GJdOvX+NGFOzCaoX8ld3xTt9V+pvMFVPFKIoy6bns4PJlllG88vgweECgYEA/LiW -UKYomY3T8e7KgCIilkNrKWYv2qCKgoXMHerI+gz9BvcSdDRz7GHpkV9ZP9GJuJ3n -uLHdUNkFam5jtpwfqjiBvrINgqu8/jesPeocxQwJf3x5iGazxUCEK5YonePyuxih -e3pR+ez1b3wjBfVshs8tg58F0OdO3qVu+IZM6WECgYEAz+Ie7DD8o7vjsHWSu4TF -0hwo1W4Spt3UKCVEn2GFxPUveBYVCjW2Lerjqb8mdYsvsBU6hNOE722s/xphkxGQ -gmNyjOO5N1EBpKdrB4gY5EnOLxN9rCgu7XGiDI0nYE0gulkKgS4becEVNJfTjf+a -k4nuQNGdU8GZUtdHAVfgouECgYEA5ksrJxkTPEKjFf89ZyA0FmwfVh15lCfhsGlO -hSCzvjFhzhwOI/i8fncHCeMyiFZgwuyaAZOLkyYAqmkn0ntY25wcl3LXnvDzC1Ie -UllpmCKM8TCz6xlzzlcpWjK+lornYZljZgskcrR9P/eGTuLD3+Ehn6Sk/yYZmAh3 -JF/17GECgYEA2x7fCZN+wr+CmG74GFdNnghqOkQQ9JleGOseHM+JIRD3J3WkuZ9x -Dfhe68OEaUBsmB3ttDiHQ5mS+YyXIZ2st6/0KQ7v6jEM3CwUoq+SZUqV8FEIBf0+ -r3yQI5sB/ZxWvsshLtlLUgdAby+ava8mG9M5RwUjp8kdmzlkCa54cc8= ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/cert deleted file mode 100755 index 38a95960f..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1NTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -NVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTUwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDfzQINLvjB3E/ea9+PW5SLys8Q4JqE9HUwLTJY -obQ6jqf4BTxtQWRpyu+uO3ALT+oCYifZGSlyYbBnnrCNClbwZYAHT6OkDD7f9w/q -xCYMosgvZhCCILHfolCYdFLMlYQg+pz4O+ct89J1pqyhEQBZRkUTLrXwqNUOfT1a -uBPbIkXBlBn9yG3c9zj7uRiSEiDA6ZcfxDLh2RCEjZezUfL0EExU/ZHCVghew9cg -OQ8T9dpMzCSQf8rG/higV4BZA66KCC+ETm2VXkqgWxJre+bnELHGXbiQxP5t21Jt -ZXjjYcUs1YluS0nLBJiZdn1lYGM2Nok8JAKzg19XYnlsPJXfAgMBAAGjTjBMMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAIAyV -xfmc5DMKgPUt2y6GLICybnI07SaNdzZf/5L3nM9b20Q26VLdZK4TbFsBhR4lfFPU -F4oVwvYbw1bPT9u9RSy0wLRz8a/mJJX/cmh+OBhYJf7nrGuvYADHfi8zhfvnmgIG -6PFezabzKgz5jkr0rbj32mP6sPpN1dzeDWESl7rcCfS1UHX4dlCKxnRqAYUXS4Kz -f4VMQV8y9Q00/D9fH5xLxg2jyHVc+LfD9tA1r0EJKCB7p612k96YGFFqYqxQOYmr -/Ut+EN0w/YMHuzMjhaEi+9T6r/VMYr3l8B8U1z0PYPFbbvMCGZUf53cBEjjxjg4n -sQgzzTc/yfYXGcVVcA== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/key deleted file mode 100755 index f243fbc9f..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/localhost__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA380CDS74wdxP3mvfj1uUi8rPEOCahPR1MC0yWKG0Oo6n+AU8 -bUFkacrvrjtwC0/qAmIn2RkpcmGwZ56wjQpW8GWAB0+jpAw+3/cP6sQmDKLIL2YQ -giCx36JQmHRSzJWEIPqc+DvnLfPSdaasoREAWUZFEy618KjVDn09WrgT2yJFwZQZ -/cht3Pc4+7kYkhIgwOmXH8Qy4dkQhI2Xs1Hy9BBMVP2RwlYIXsPXIDkPE/XaTMwk -kH/Kxv4YoFeAWQOuiggvhE5tlV5KoFsSa3vm5xCxxl24kMT+bdtSbWV442HFLNWJ -bktJywSYmXZ9ZWBjNjaJPCQCs4NfV2J5bDyV3wIDAQABAoIBADoAbsyt5MiRaZ2y -hXEpAfms6Tdtjn5wwMJopEi2N/iJKl0sNjn2naiRcMbOHr6/yl0txTgNvmEnkkl4 -pjcXe+q305ORf06v4ce3x0dH6LiTo6AtKpAfGxpjfdHVK/Rbt6+4Y+At3j9Zlqzp -MopX1qhMfvB2xa6GgxlLOhB97p926VtKYOEoDke8uP48HJTabeiFKpn76k+0HwS0 -J58Kb647DM1rqGpZW17dPb2ovi2eznATMeAgveNvVaXipUCsqnrJI+ywrLP4TBll -Mly+DZ42e1YnM+rd0tzgC/YNO8h7lF3YnthdQ77h3Yw09cvtmHPEuURgGiHIH5IY -HlYKBEkCgYEA7KXOLnufN1J7QG9CqsWhKI+ZBGGTd3LmXMHTM1tLpFcQaRNd/kxg -NVo8y4VEpCdatKj+yRe3wPZ8rO/Q074Rzys4VyTP8BNn9YjtttbP8zBDmLqkXAAc -xVKNDiuFQ40HSIdexZVP/YVCp210q6YG3OPoT4W9QvjfPHMfzW+2euUCgYEA8hpB -PMyl/RL2WHQHdKRRss0k8AWjtoKzepRkzrwptzgFOQZSmuvfdiPStp126iCinzag -EPsCo3T/1E1Fj4LgOIPhRd/ibXYSAParxmmx3rMTrBwo3TRf2c9nZPKAygsMNF59 -T5ySJzU6tWE0PEtCIITW+WnQeORPzW3vE0nSzXMCgYEAwHyBP8foEryxahDVvkgw -NOjQgwLHS0KXY914Z+6bkVoMDBvnuV/wZZU3nCeTVJ56JjbLv0/edENJ1/Tc/E4+ -+C7kjeVwiYuPZOVyzeTekqWwZftyky64ODxUZbE6nV6KDRGnIbm4rbMGK19ZpgDO -1j8/B+f1sRLzqZzOwnBako0CgYAVSR2nPM7zOzGRgVIOfUv5jnPK7pQAPemNw3JB -guWgCDrdUqL8n/RbrLaf+6Qy3X+uw9y64XbP7D956PlOrtEL5vxtaku8F/9pOkbM -AQr0a4Y1QZyOJkavHb8XbwLHwMTn7c7Sqw9mhxWMUOmIy40a0tMbxqPfnSMvCpVU -es8f5QKBgQCeFljjAnEQpuUduug/DAScAjTEbJD/18wAu1PuIM/+/zFEVaOs5w0z -uHiiPq3fiaaoBQHZofd8mxsugfLYftAP25Qw8X/WgWPg4CLGz3Br3HgnV6RyWXr6 -R600l5lWe/ZU5epjEsToc20H9z9TbXaSKWMZiMIaMnAeboSfTtQY3g== ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/cert deleted file mode 100755 index d87b91f55..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNDk2MzMwNjU4MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE4 -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU4MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAtNQ9DkyC1Dza3OYBLcCPeJNKC8BvYVVTL+FFzpS5 -AEPNdNA/Ezk42SBWNvaY+HYBrZniOSVMkTPFT9i5sT8bBBrUUvwGk1r6tpXDlHw3 -/S7QThqZLkGcAscmahp0mWnIIGcJxZBVMR1cfFbYNumNR9UyjUDQumCb8hlT3q0n -pEH3CL3jRpdcFolczotUzGk9u07v81gIWgQVCyYYu3WuuRjviLq8SVoHlAWvVsdW -rGcG1LS/OKAgECYVUxs1Qauw5VjlXPGkY7gOOnjNcl3IHZU2+7dGFw1gBf+gEC5E -/qr2fI7Lwx7R71sY0PANuuDLGfrCAaCjG3HZ01MC5Ktx8wIDAQABo00wSzAOBgNV -HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEApTrZW/xo -EMiNgBnRyqR0wHXpuQS/V5h75CtDKE4/Yl57cQlh30SX10anRgNpeBmaZjyFQp0P -3MAQoxUh8rOeQBcqZp7TiIXAk8w4rYWpFx59GGgiO5yD1vOj+9cIvAFDR0Fe1kbb -kLo8s93l4yNFTdxIIIDMgNpPcp2620wkecR3PwRV1jlM/7nMfgfRJagN2+Xq7mKC -ELzGatuXBpiy+jwCirmgmE8/MxbFbsR9L4EdW1kdYhRT+rnSNIEN3zI8GXWIH9Hu -91cGTgKiz1znXtlmLAaIoGTahv23YUV7tbQlrtZDZjpqvTN6yM3vS0HIoSxQnT2l -yizQSNuYSUD4HA== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/key deleted file mode 100755 index 00d37caad..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpQIBAAKCAQEAtNQ9DkyC1Dza3OYBLcCPeJNKC8BvYVVTL+FFzpS5AEPNdNA/ -Ezk42SBWNvaY+HYBrZniOSVMkTPFT9i5sT8bBBrUUvwGk1r6tpXDlHw3/S7QThqZ -LkGcAscmahp0mWnIIGcJxZBVMR1cfFbYNumNR9UyjUDQumCb8hlT3q0npEH3CL3j -RpdcFolczotUzGk9u07v81gIWgQVCyYYu3WuuRjviLq8SVoHlAWvVsdWrGcG1LS/ -OKAgECYVUxs1Qauw5VjlXPGkY7gOOnjNcl3IHZU2+7dGFw1gBf+gEC5E/qr2fI7L -wx7R71sY0PANuuDLGfrCAaCjG3HZ01MC5Ktx8wIDAQABAoIBAQCE4IjVHwfsKaOy -OxmWoy9KLQF2TTwLTAXK40DGoqanOSuasQQIfj313zs7PE4AFcb56GBCGdR/xokx -OVKKmpKhm412RVgXo/0jej2zuOvzkhjjq8vwH6oiqHDj+vi/WuoCVXTqxjqz0p2J -iM9s2oZEyLdS8NPwgNlXN6FXuemtWsao5ramsG8c0XM08zWazkrLGXf63dsNlEoL -9zzpP2nNx1DVVDTUhN3mpJE60IG0niBE1X3CuIrq4A/hIOut6qa9VgdOtnnwsAyG -hB3ZITeoaRowedmREUSSuzXnWkfHSa5yJoRlhje4mV+RRdhZ+1DSa1jzn1ZtZhjV -1/6KQWOxAoGBAMdTlTm+9c3rtqZVgva1WfwRpfd2B+HAy/LuBQMSNEmMXn5ooJSK -05eXMoCQC/+3fArCjYl+I7u9GHFKa4JeLjzWbqPbski5cTEHXIINGsnE9OI5pug9 -EbiZvSeimlL9Lw2BUQVW777cfz0esI+Tg514mn43gV633BWZH/AP3LHtAoGBAOg+ -R2EnDs60m0d0apR4kuZkoJDfF+uYgqyD+SMDDzgBSr4IDvWRzKAhYn+R1HsWeOxi -U+8kx5zmDVw+GHg397FcTIVfnuQKwmBZU/XC7oKVu6wshMXFbXUSQMmIuDbu5xmZ -1uZvMHtdszDwBWn5zGRSM3oXSQcwburJ6f1KSbdfAoGBAJE/8jUzV5GoG+BX3eiD -vL/36FZMt2+l+7jaA+L6CAo0dMNu4N190LTdpBqVXXkJryV0Iom31rg/EqmzzmYg -1VbV96gGN4PRRo+wypOmkwfHM6AK3PrNTbWUqodQcV7aSshvnKfkcy5FJZ9XVtg5 -aaZ9tS8WqXppRsKiY+ie1nb9AoGBALtl1Y8NRyOAFHP5+i5HhLGnrPB5NAIFFBxE -eXnI9DTKxhbExd1dgnILvkEV2RBhN732MagcU33FHC68ZF5NOu7AfXZ5i+qSy/mW -2urKGk8Ap2jsm05CWmpHCkQUsCCTcaL0wbU7LzG8j+UDKDs1N7oTojn4JBNK/5Uw -zEB3+zedAoGAYAI8WQm20ElzbBB8MqL31zM3LZ5Dp/GIjPWhjwEOsGt2oCSrLxC0 -xcYRq73St5RS78uGSJxAQaMQna52idifxRE6D3IyAvsMAbn1q+LCqST9zy5jzmO8 -tUNvhnkJs1jdDjIzWVtbtMWb7/5wWANx5989B1+QWU14Qmb7uziMVR8= ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert deleted file mode 100755 index 4870aab78..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDEjCCAfqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNDk2MzMwNjYwMCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDIw -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjYwMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAwLNxhHFPJFGnDoOnt/ELutNthoJNYLwus52+GLD1 -VYDDBA7766rzAxK8wGF9vGbXZX7L1uW3VJyJJLzZR1bBTdeOWXpyscz+33+jETbn -Eg2Dp7KbdFAFw66B90vxLbHKbQtH63VtNg9lh+d0K4QI6SGFlI/Mv9VWawpKk1P5 -X1cgl1EgR5e4kIgQsrkO+MRc0SLZG/s9MvThrHVlZLWPjRaiqk1GDxvBjfcBoPzZ -0jOHhWLJGWZcwXZ5brqPcqn+YMceXQlxrjxJvyq02DEWjtfimu7qoZ3+fgQy4rJ0 -GzPaDvwnkwvJQ2iN59mcybfg6AoblCOt1ypIqouMrI/J3QIDAQABo1kwVzAOBgNV -HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zAfBgNVHREEGDAWggh0ZXN0LmNvbYIKKi50ZXN0LmNvbTANBgkqhkiG9w0BAQsF -AAOCAQEAGQ+K0dnTaX5Ry9PLA6M8yrMhq5gnX2RfyIMXCuFfMqjdju4BkTR+6zm2 -El8Z6glQ6QsKYHR4XhlhHFOP+gGyaTrsDSV2qCgphJmtn6QWOSfEmBRNNCTpMXfS -5Ek/2dXItMjmnMdDOqcLofQyIIQFE9VpLyaFN0n1w9k6EscwSxsMiBVFwOhHpBex -BPJnrKBDWNVHjgocUI3YzN2TzzRxVxB/xc5+Sl/jnpguad+q/wjFgpr9p2a4yAS7 -W5bXcA1S4iSp8uKVv0JM/cfFlF094ft88A/SIt8Sn8BmeOGQtSk/sf5mFbr7TRqE -oDuKNM5AIM/fClQdlbKo7xpcJCiRkQ== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/key deleted file mode 100755 index e0653fc3a..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost__127.0.0.1/test.com_star.test.com_/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAwLNxhHFPJFGnDoOnt/ELutNthoJNYLwus52+GLD1VYDDBA77 -66rzAxK8wGF9vGbXZX7L1uW3VJyJJLzZR1bBTdeOWXpyscz+33+jETbnEg2Dp7Kb -dFAFw66B90vxLbHKbQtH63VtNg9lh+d0K4QI6SGFlI/Mv9VWawpKk1P5X1cgl1Eg -R5e4kIgQsrkO+MRc0SLZG/s9MvThrHVlZLWPjRaiqk1GDxvBjfcBoPzZ0jOHhWLJ -GWZcwXZ5brqPcqn+YMceXQlxrjxJvyq02DEWjtfimu7qoZ3+fgQy4rJ0GzPaDvwn -kwvJQ2iN59mcybfg6AoblCOt1ypIqouMrI/J3QIDAQABAoIBADlQ5lHTdgvCcaMC -i89NVgTSwEAC38sHDgkEwTcM41v0OY0qe8nkBfYDC7tZBBIWsLiSl0Sq/PWgvbX8 -qc/rQQHLPJ7mqdiytZh6mWEUaHRZKrClklFtP9mtPSD2KJ1DxYbblR+2xK4QtE1R -DZ+n3RKikt3WS7s/VD3wSLA7iO/PMJ+ER3kPxZWsVYJw6KpmR8U/v881eM7NGoK3 -SwYSqXfcRidNOl68Je3vm3MpK7SiPEOX9AGJUXlkpjJcyOqEE+X23wNSZUpKT+i7 -NIrXaEml1nKlTRMlDWi5ZPqzhpguc5Nmn0Tu+01ZClwcu+/7b4C5tkIjXQnyjXsO -0o1EqcECgYEAyEJwGl6KvvYaRsBiFRWIN1950S87O0grOnwb3/FedW4CEf9Lm/Xj -653HTe3zYAJDlsRFCOQ/KXi6nUjAAv8DAydKWmr5EonNj+VXT0Sw32N681lDMPzK -4csJek2bWt2alKbachKAq/gr00837HELl1ALr1X3a3HXr6hZHNjUHpECgYEA9lZq -tXDDV+emyIf/O9LwDUkctHc06qD+uBfiuW0DqVeYPE7E3QPsPzyjnwSfqmgYlpKm -Ku60MfmAVXT8kUSBUuY9ph5AOE/5LwkM3ONc34UBtkruzHUccGXuXelUzmnAQLhi -ZJiWJJrHYICcOZNzd9UmqYye66lyzp9NWe7ttI0CgYB8qYcZkzLxz0fqNUaZc275 -cXDmvG016SYn4SyFCr9PgKy/QVpy+u3oNa7lHzR61s32Y7XJ5DRBf8tDsA7/jnn0 -k5fgk2j7llcltZHVYaBtX4MhS7bdHvC5AGik/vyv4vWghgHEMypwYyv8/fqFMJYT -mpu7iVtdQmAPFFBs+bmKUQKBgQC4Hm8znkzjbymhyMRkmo0B4RurZ04N8LdyMags -n+aUs/v9V4KdD0mNGm3RdUtBuvxlzsaUYEYe9DWPqhj9Gw7uP1jkyMeHT38YQNN0 -ZhwMlQVqkydZek7/U7COUNAqV7Byr14bglD2mxlab8ZU4njzoEV9hLVjvwsolLjj -90mEIQKBgF/IE4+wL9sdeQ7MGanYHFzQtyKxWnRzCGWDkHV9InGZ2I7O3AeqDC76 -fXhiRoRbBMSgddyOYTUoaPhwgqPGoC9H/3ZHnyx5fokl0FTNfzk1mnY1n1HD2roR -p76hbMs+TjIGG+lNDso3WuV21Gn+vynDVO9FQumgeaEc+CLXpwEq ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/cert deleted file mode 100755 index e9de284e5..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDGTCCAgGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1ODAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -OFowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTgwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDO4DuzjpGF3Em7sIrAv6/19KyTVLxV4jM0XX8G -S8Uo04oyovHnHqfCDd+yaGs1glxD95eqZ5kZDgQNXhn+oZkNvcPJJ8O2tPhHwvjC -PR3KzNL3dFMo6+7BCmBRIVvSNHkkZ5lyoOSE7deGvoKl3KuEWUGwUiGnPx95snCD -HPfgHYto1zSI2NbdnF4hRuOiSFhettMZiwpXEYGhcMh1RYDYxPf+5/XcFz3VCdpF -1COXSYIS2r60H08dH1u6rO1iliJaRh+jqk998exdi0TwJvVTiaubMRZxtGkPNxjE -tSukjDA9UaqAFBnireXj2qc+a6B7AMsoTymn8Ka6QJyt+3ZdAgMBAAGjXjBcMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MCQGA1UdEQQdMBuCCWxvY2FsaG9zdIIIdGVzdC5jb22HBH8AAAEwDQYJKoZI -hvcNAQELBQADggEBAAOc/JL/2xfnPAcwzxvF/ssYK6EpjD6plG+OhlIj5UiXo/z4 -5IcLCg+N1P7dGaiSMfI/hIM+M/z24QMk6gXFMrVUFh6sm49dNmTry4Qsyp8Up5HD -ettKLaWG3YA08VeqJ0C2xsFh7nJnrlzQad1dwtnj6ActWx/2g8SFkfpQYLba/YI/ -YC3biwKGY9P7lmCP5p4234blenJHJW5hbwNyLManvEA9O39Rr4oph2Z1YtmpsNM/ -p+xioLTx7oFMtRkBBpmzSKJgLAqCxVg7P+MzjS1s3W49QLI8F1sZ+mXBrZxbALhQ -TtOjvUx+vb6Gihkzn8XkGdbgsiOTMBoT0EmIBJE= ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/key deleted file mode 100755 index 5016e338c..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/localhost_test.com_127.0.0.1/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAzuA7s46RhdxJu7CKwL+v9fSsk1S8VeIzNF1/BkvFKNOKMqLx -5x6nwg3fsmhrNYJcQ/eXqmeZGQ4EDV4Z/qGZDb3DySfDtrT4R8L4wj0dyszS93RT -KOvuwQpgUSFb0jR5JGeZcqDkhO3Xhr6CpdyrhFlBsFIhpz8febJwgxz34B2LaNc0 -iNjW3ZxeIUbjokhYXrbTGYsKVxGBoXDIdUWA2MT3/uf13Bc91QnaRdQjl0mCEtq+ -tB9PHR9buqztYpYiWkYfo6pPffHsXYtE8Cb1U4mrmzEWcbRpDzcYxLUrpIwwPVGq -gBQZ4q3l49qnPmugewDLKE8pp/CmukCcrft2XQIDAQABAoIBAQC4LgSZAKXook32 -zt9JaZ+T/yih5r/iSofB6DeN+GloxqT0HgP1+2Hpr4ZoBPTl59CTJlyd9qvkFYlg -CVZlT6O/CyLC9ScWhBnDcf8cl2LtydtNOgBLn3mp3b4QnP1tsQ/lbGK+HiY1frby -nKweVM9S/lAwVX7mspkoNMhcwq6glLL1QnJmLfmHtsOik4e+eD051aYI4OcfkFFo -T5f6Jg5oNC0L9x+ona1avfD2eBmXmUv8kV4+NSeu+pM+hWnc6r5XnHdXgo0Fu+nf -CQ6wUkyXQAmANI/qo+73G3lEZ7KA9mqrCTbM8sulC4c7+Qpb1vHjuz7pSMj57k67 -tI2lPGW1AoGBAPDdooMFZIq6n7wt160MlYDhLujcPaMzgiXWPg9TOLzuWrSZleGH -k818LTXKlQP2ffVADlwHvyi0E7yZVzmG2Xt6Gi8lkGIP5LZK81BlsBspX00bvJCM -VeyE6flSwLA86bQt8spYNAOMMc12F2i3y+YkoKfQmgMiG3H7RjM4Yeq3AoGBANvf -3bh7iHs74oZz40em/W+LdAFBE29FeCloqIXnueHVTLdpHFepmp5OBxogkaYJlVOF -0B/cl8sYn/6CtqKHzhCcCc8V/54O15n/yNRMru4GU0Z5mhaxWvypJM3WXTVvC612 -ODM7shXtFQAF5kgeGSDFOepUG1XRPqPjBmSOFiOLAoGAL/kkzg276bmj6PoEc+4G -tOWkzzJWgHPY3ypdr/W2XkLnBAN3C7VSJeIuqwEPTvvAOKGqen/8feHn8G9mJQoL -tQErx+omaLGbrwcckQ2/1pkV5yi4FN4umu4aH9Nwl2l6bq2cJtsMeQxqOu7jWLMK -xGrVKLduhWM8riYK5Fa9gd8CgYByWA+UOxoVDGWXinjt8FfoRFuFs3QJ79S3pCfP -y1yNp0GIOG9230r7fJSQ79MOx/kSQIqlpzCBfELoNs4H5Bwz4xHu0f/nEMzq12x3 -i5GFU2DHS8Hofz9UGhp7uTkr6p3mDY7YhfjtEihTpL3HT2+97RNbW3YDwReUXyIZ -9RJqVQKBgEQzEKMFpA5NTzs4BanS8372XXKBRhP0CCTcxS23k/kkYFd0Swnsmv+s -ZCJhV5B1Uz0aSK9jfvCaEfwHjdhxfyYBzoXYVxaxphwNY1Vq7QaEzzyXWKDK3beS -9pwnZf6bEQEvvXyJ3ssqLaHWCoViHe0h/Atsj6UOYhQt5mXzZDEK ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/cert deleted file mode 100755 index f678ca992..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDBjCCAe6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDDBN0ZXN0 -LmNvbUAxNDk2MzMwNjU1MCAXDTcwMDEwMTAwMDAwMFoYDzIxMTcwNTA4MTUyNDE1 -WjAeMRwwGgYDVQQDDBN0ZXN0LmNvbUAxNDk2MzMwNjU1MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEApFk4QTS28tu20CSV1s0aCC7kV7p/V8XziC5g98OI -GO9s8uVrzc51xsnJ3Y3+Xnx43x9G9VjgSNhPAuE7+/UnP6iAkZZV0mOD3xwwILwy -JK6gZOcZzd9BX9JldSnjv64r5peg5mzdhNqpRs0i3oPcfriW0sGkzl6IQlsowGoS -eDkO6+Z0IpQDo4CqcWond78LDyvqwbfFReyHEtz8D17sciGni6QPK3kGBFDiO0Ay -keV4GqEXw13ryKzVun/haLmekRf8svAU8+pjpHY0uc1cv0l0nTIZdwnp2EIF0msa -EKYyUUpcuFkMQTToYzj9LaIQmvAGIVIouNAydbheBifySwIDAQABo00wSzAOBgNV -HQ8BAf8EBAMCAqQwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB -/zATBgNVHREEDDAKggh0ZXN0LmNvbTANBgkqhkiG9w0BAQsFAAOCAQEAWlrvejAW -DpKWBfgQpJLpL56v6dFkCjhThtvDrfvpx/gL0p2QQOIrgD7o+/+fmockmpphf8zc -lAFS/M2IuuvJUN7qvq/4pnUa527LsQFIQSG4GhNfHHdKfISLdjgy7LRlmjLnnSu3 -9qa5KvJg9SIWpe41LbeQPB8fLYNuF+tPzrI7QLp/VbMSSyNz4wzpdk8/+r+3KmU8 -D1SEQcaEIg7/YlyJ7TZiWiFlZRFcObE11lRYo6tnh8t2e7s0IqC1JwiAmCk0j0iZ -kHE8yND+CuO8QVDxnmu86STL+q0ldZL6C/1lLlnKFKLp+bZfW+s+kds7lDSmUMDi -CbImL3sIf6clIg== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/key deleted file mode 100755 index 4e996b7c7..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEApFk4QTS28tu20CSV1s0aCC7kV7p/V8XziC5g98OIGO9s8uVr -zc51xsnJ3Y3+Xnx43x9G9VjgSNhPAuE7+/UnP6iAkZZV0mOD3xwwILwyJK6gZOcZ -zd9BX9JldSnjv64r5peg5mzdhNqpRs0i3oPcfriW0sGkzl6IQlsowGoSeDkO6+Z0 -IpQDo4CqcWond78LDyvqwbfFReyHEtz8D17sciGni6QPK3kGBFDiO0AykeV4GqEX -w13ryKzVun/haLmekRf8svAU8+pjpHY0uc1cv0l0nTIZdwnp2EIF0msaEKYyUUpc -uFkMQTToYzj9LaIQmvAGIVIouNAydbheBifySwIDAQABAoIBAC07+UXJMomJe7my -OCOU9BNIhMS4qhAIhcz3puzKvozOaVg5WQCeUMBUDeGTEW4EKGiQ/UDOI30pPCX4 -xD/G6/STdj+b9ycfCM7BvWVlJw/9mFvtV6bYSfALwq0KyIqbb63aEgkZ8aZ9YJYC -JBTGiku+lpSPg8LhNfO9j2vWRhsceFEtdkv18T9sCSOQTYIrDKFdbxsl49A/D9WZ -YERYVWmWsSHl4CkKAzrQRMIrREgYJk5R3Qt0Qk+3a4BYlmDG6/5Ayfi0sx+bpcK+ -255GbRPhe9rTUI6uIc57q7TxGOIG+ekTVqkL87bVR8+oLY/5ARW3jXedB+Th2ku4 -/JziseECgYEAx77MOmRPx5ggNQqmSfcaxozmX8Cil6pEZRQxdtdgum9QnyXhG5q9 -J8Onw2o5+u+KsTmXIx4CdcA+fL4Z9D/g6GHsi87lJT6KhdHGAmPsEVFQYc0kme3X -hEfGppP4G4haHBzhNh5V9CxlZ7aHsB9J/LGZ2Utz+kvGHE/8GKiERNMCgYEA0qJj -8pdnnObFW4x+/TrOzf9jxAyB7xp3ZTp1gayzmrG4cQr5OMhAZEXG5t1JOg5SvQXh -LRWDr21BtbizJoFcAe0FzMdWIR8fz8RfqiFlfZSnMBnkhQrngu8CghAkg3g0h0m1 -tSSpaqQGVRdOFG1A/HSjiNdsBpqLGxejdUfZkakCgYEAuIAFdr4nbu6WeUf/93w3 -EEUfmjx+MudES7VORz6EC1E8v/QmLPBOXkd8U6VwLthKXI8cioRysz9CuMiDgrfq -T9v7udv+jtto6listJKFgC2CuQPbFg+6LWZ7GGy/FPdqfGM0p19395V2iUjxpn4Q -QkfuGud2FjEdqhM7ga9OlZ8CgYEAvwXM1NYgfnf/Jh6NkEREBygFJ2gccmazPxe8 -N4UTQUjJt6M3EBrz4rwxPXAUF9WjjY+GfieTzIWuYQqHVnVcptZ5OxTQdKtQY1F5 -XMZ6z2AAG6xvxYR1HxZ5VNEk/CIIqWTcqNH93xuwLn07L2VB2XJCWTjc3ERNwZ03 -fYZStzkCgYBtXFo7OC80f6xRDa1NfQfP4vP6dMczZBZBx2A/rCybwtQsJ40duEB2 -hGmgqIrRfh7H7KC8W792xzE1PKUXztTzxxpIr7Ho/nDUWzambMi39EYyBJ6Fp7z2 -RkPJFDkAYDpx/v357886y7HFz8pUUNd+z9V9CLemVqhjBWmIaLEX/w== ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/cert b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/cert deleted file mode 100755 index 28870c9ae..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/cert +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDCTCCAfGgAwIBAgIBATANBgkqhkiG9w0BAQsFADAfMR0wGwYDVQQDDBRsb2Nh -bGhvc3RAMTQ5NjMzMDY1NTAgFw03MDAxMDEwMDAwMDBaGA8yMTE3MDUwODE1MjQx -NVowHzEdMBsGA1UEAwwUbG9jYWxob3N0QDE0OTYzMzA2NTUwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCmZQErnj8vlA5uvizHXnGmvDCpeOkc5Ldbj0Hz -zqTCiwOSTBeestdN6oLKvxJVlvyO3UQJxhJWr00QRwdCYIvLIDmiBQjb7ciOPcl8 -WdLjBtZ36288E9P1nVwFi2RwLo/XzZlCYX0aRe/SM7/h5zzNxBR6FdRvtI1d5as4 -qiGdj7TqCFIJ/8jaBfxlusjEJd+xc0Cn8IAmSpPJYCCDmxjAzw0D12Ui3toTFHUI -J9BA7iXTVvMbfau8KQJTPeu/HQ4zgU//4GW1Qo52gNzfY37iliZaG3HTWD1pxTFO -qdDuprFIffsQrQ7mHAkGnAExxZYc2cE4UF+ME8dV0/6nTQA1AgMBAAGjTjBMMA4G -A1UdDwEB/wQEAwICpDATBgNVHSUEDDAKBggrBgEFBQcDATAPBgNVHRMBAf8EBTAD -AQH/MBQGA1UdEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAdUUo -i0A3ttsTca5n9OY4EbDPQz7uAhXkihwoG2YeqnucrNXg+SaS+7hFA9sa1gY5NmDF -96OvmQLBEXVz3uLEiv2KGtY5yiAo6iTtk2gtoGAloULEJ018XGQ0yNuDWUfRLyc9 -5nA8CBPEnBR7MjO6XhvvFMbAjtXoDKFqVeq3okXbL7ygUjlpwv+Sbps+DjQdmnIQ -A90S7gcFqaCmy2KnzADartasIImy/78R9r68UdJrsmyy/aPNnJ/9AbbU8Z20JFcu -clKOENaKJe/o1nOVzZA2E2oVElT++2wNfomDN5ae77cLoCjZPOBArFlhwyk16YIa -wX3ITLz6Ibr9Iy7DvA== ------END CERTIFICATE----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/key b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/key deleted file mode 100755 index 1f4e63735..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/server/servingcerttesting/testdata/test.com__/localhost__/key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEApmUBK54/L5QObr4sx15xprwwqXjpHOS3W49B886kwosDkkwX -nrLXTeqCyr8SVZb8jt1ECcYSVq9NEEcHQmCLyyA5ogUI2+3Ijj3JfFnS4wbWd+tv -PBPT9Z1cBYtkcC6P182ZQmF9GkXv0jO/4ec8zcQUehXUb7SNXeWrOKohnY+06ghS -Cf/I2gX8ZbrIxCXfsXNAp/CAJkqTyWAgg5sYwM8NA9dlIt7aExR1CCfQQO4l01bz -G32rvCkCUz3rvx0OM4FP/+BltUKOdoDc32N+4pYmWhtx01g9acUxTqnQ7qaxSH37 -EK0O5hwJBpwBMcWWHNnBOFBfjBPHVdP+p00ANQIDAQABAoIBAEqbVTgCf2BM6V+8 -Q4WtEhZpoQQL47IB1zjldfPkfrl/7T0Ggzy0AZe9A6H2pDjeNyWzjlM3jXdyqIIY -5udbNLMCIvVDfqJl7pvgllv8RnNm2HjyhnCQj2Q8h0sxIfqu1e40EHjUD2zdWNeO -PoYC0Z+NQIUxDox7jzs/xFLm7aWgVTYk86iFa0/uYwnCQpGHR5OkBOhVdkqBMUrH -7hPIoKgLNHT8/jhugv+GamtAmys1KoqIvZsc/XQCMPVmE55n0OBtooQ3fhBXJC0x -UZgJGKNLSjxt7uxHb/BQk5DtFJmPck0derMNkM8WQ6o/XSjlSiKtsct8c7us/c7r -9OFkcy0CgYEAwB6uKr3Al1IM16t6yEEdfrNc/koJ9AQ3sVHSE5CjFBLMs6gL+Feo -r3oFUglY1QB6v+5YUVsLovJLMHuH1x7fKHmd0Fmx75uVzurG2JdKwCiV39PPKYjr -238Yw3Nk6IllPCn+SOIvPDhiuvPwX8FylKGPjsi7AHphKN0f9EEnL6cCgYEA3biT -l8yvpgPpZrpTaMlotKvZkTKtb212a5EdHn0bk5fSM9xaRcumRsWd9eWGutHpMbZx -wj1jAFaGDleBl08zHAr5jsY7i1C3CFKFEUbYR5Qu5+Ot/gdEyO2+j0ehluPOBFad -P514bnWpdct8Khv2dW3OJMzVdFM7M06MXkQFLMMCgYAugT63qecMuhfRvPijsN9q -5BAGnfV60+qHSb8IbWKMYWCbvHnpS47Rqz/Oc+TE6rDL9O38A4X1k6EPw1dGg3qR -WZ8R6CRiU88Xn00y8Kxvh2OAIs1qyHIPV9yusygiAeA3iBK9ocK9WQjNKG9vPmx1 -/gW6Emzx2K3cLmqlvX+20QKBgA82yCHlcLQSlqRu6qRJFb83/5DgCliYCUUuSvI5 -oXfKNilK2ILri3hVvRYPbuRI3RiFLV8nuTBfv4kiZgkM7TPiaOdsIM/ZdQXEK89Y -riSTPXi5/cltlEG5VpccUjE5ZnyTuOyRkJ77weoMUXPOQWYjZ77Ms2TtBSXrIOSj -BDvjAoGBALAag/LXYvi7l4xIuUMuo1HC4YXZVSqDM7kftLdSUGOl/zGV/0QkSh76 -KCVOwXOCmzFeImrZYYDf4uu1wW7paprNaCV6EiChhRgCrjkZIpyw6RHAGshp3a3e -BjXCIHOW5TsWRdR+IvjzIMp9tbHCEvjSw0jDm3JiaSYGRD1AldhV ------END RSA PRIVATE KEY----- diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher.go index 0e63405be..0f5c0848d 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher.go @@ -268,7 +268,6 @@ func NewCacherFromConfig(config Config) *Cacher { cacher.stopWg.Add(1) go func() { defer cacher.stopWg.Done() - defer cacher.terminateAllWatchers() wait.Until( func() { if !cacher.isStopped() { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher_whitebox_test.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher_whitebox_test.go index a2a2dc598..2de915eb5 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher_whitebox_test.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/cacher/cacher_whitebox_test.go @@ -443,39 +443,3 @@ func TestWatcherNotGoingBackInTime(t *testing.T) { } } } - -func TestCacheWatcherStoppedOnDestroy(t *testing.T) { - backingStorage := &dummyStorage{} - cacher, _ := newTestCacher(backingStorage, 1000) - defer cacher.Stop() - - // Wait until cacher is initialized. - cacher.ready.wait() - - w, err := cacher.Watch(context.Background(), "pods/ns", "0", storage.Everything) - if err != nil { - t.Fatalf("Failed to create watch: %v", err) - } - - watchClosed := make(chan struct{}) - go func() { - defer close(watchClosed) - for event := range w.ResultChan() { - switch event.Type { - case watch.Added, watch.Modified, watch.Deleted: - // ok - default: - t.Errorf("unexpected event %#v", event) - } - } - }() - - cacher.Stop() - - select { - case <-watchClosed: - case <-time.After(wait.ForeverTestTimeout): - t.Errorf("timed out waiting for watch to close") - } - -} \ No newline at end of file diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/grpc_service_unix_test.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/grpc_service_unix_test.go index 60ea6369b..430ef2a1a 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/grpc_service_unix_test.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/apiserver/pkg/storage/value/encrypt/envelope/grpc_service_unix_test.go @@ -24,7 +24,6 @@ import ( "encoding/base64" "fmt" "net" - "os" "reflect" "sync" "testing" @@ -32,6 +31,7 @@ import ( "google.golang.org/grpc" + "k8s.io/apimachinery/pkg/util/uuid" kmsapi "k8s.io/apiserver/pkg/storage/value/encrypt/envelope/v1beta1" ) @@ -39,8 +39,6 @@ import ( // Since the Dial to kms-plugin is non-blocking we expect the construction of gRPC service to succeed even when // kms-plugin is not yet up - dialing happens in the background. func TestKMSPluginLateStart(t *testing.T) { - t.Skip("Test is unsuitable for running in a CPU contended environment") - t.Parallel() callTimeout := 3 * time.Second endpoint := getSocketName() @@ -67,8 +65,6 @@ func TestKMSPluginLateStart(t *testing.T) { // TestTimeout tests behaviour of the kube-apiserver based on the supplied timeout and delayed start of kms-plugin. func TestTimeouts(t *testing.T) { - t.Skip("Test is unsuitable for running in a CPU contended environment") - t.Parallel() var testCases = []struct { desc string @@ -169,8 +165,6 @@ func TestTimeouts(t *testing.T) { // TestIntermittentConnectionLoss tests the scenario where the connection with kms-plugin is intermittently lost. func TestIntermittentConnectionLoss(t *testing.T) { - t.Skip("Test is unsuitable for running in a CPU contended environment") - t.Parallel() var ( wg1 sync.WaitGroup @@ -243,7 +237,7 @@ func TestUnsupportedVersion(t *testing.T) { } defer f.server.Stop() - s, err := NewGRPCService(endpoint, 20*time.Second) + s, err := NewGRPCService(endpoint, 1*time.Second) if err != nil { t.Fatal(err) } @@ -257,7 +251,7 @@ func TestUnsupportedVersion(t *testing.T) { destroyService(s) - s, err = NewGRPCService(endpoint, 20*time.Second) + s, err = NewGRPCService(endpoint, 1*time.Second) if err != nil { t.Fatal(err) } @@ -282,7 +276,7 @@ func TestGRPCService(t *testing.T) { defer f.server.Stop() // Create the gRPC client service. - service, err := NewGRPCService(endpoint, 15*time.Second) + service, err := NewGRPCService(endpoint, 1*time.Second) if err != nil { t.Fatalf("failed to create envelope service, error: %v", err) } @@ -359,21 +353,8 @@ func destroyService(service Service) { } } -var ( - uniqueSocketLock sync.Mutex - uniqueSocket int -) - -// getSocketName returns a unique UNIX socket filename each time func getSocketName() string { - uniqueSocketLock.Lock() - defer uniqueSocketLock.Unlock() - uniqueSocket++ - // ensure the socket is removed before running - if err := os.Remove(fmt.Sprintf("@%d.sock", uniqueSocket)); err != nil && !os.IsNotExist(err) { - panic(fmt.Sprintf("unable to remove socket from previous test run: %v", err)) - } - return fmt.Sprintf("unix:///@%d.sock", uniqueSocket) + return fmt.Sprintf("unix:///@%s.sock", uuid.NewUUID()) } // Test all those invalid configuration for KMS provider. @@ -398,7 +379,7 @@ func TestInvalidConfiguration(t *testing.T) { for _, testCase := range invalidConfigs { t.Run(testCase.name, func(t *testing.T) { f.apiVersion = testCase.apiVersion - _, err := NewGRPCService(testCase.endpoint, 20*time.Second) + _, err := NewGRPCService(testCase.endpoint, 1*time.Second) if err == nil { t.Fatalf("should fail to create envelope service for %s.", testCase.name) } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go index 80db87afb..34b1f8e3a 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/config_flags.go @@ -27,7 +27,6 @@ import ( "github.com/spf13/pflag" "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" "k8s.io/client-go/discovery" diskcached "k8s.io/client-go/discovery/cached/disk" "k8s.io/client-go/rest" @@ -251,12 +250,7 @@ func (f *ConfigFlags) ToRESTMapper() (meta.RESTMapper, error) { // AddFlags binds client configuration flags to a given flagset func (f *ConfigFlags) AddFlags(flags *pflag.FlagSet) { if f.KubeConfig != nil { - if !openshiftpatch.IsOC { - flags.StringVar(f.KubeConfig, "kubeconfig", *f.KubeConfig, "Path to the kubeconfig file to use for CLI requests.") - } else { - flags.StringVar(f.KubeConfig, "kubeconfig", *f.KubeConfig, "Path to the kubeconfig file to use for CLI requests.") - flags.StringVar(f.KubeConfig, OpenShiftKubeConfigFlagName, *f.KubeConfig, "Path to the kubeconfig file to use for CLI requests.") - } + flags.StringVar(f.KubeConfig, "kubeconfig", *f.KubeConfig, "Path to the kubeconfig file to use for CLI requests.") } if f.CacheDir != nil { flags.StringVar(f.CacheDir, flagHTTPCacheDir, *f.CacheDir, "Default HTTP cache directory") diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch/patch_openshift.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch/patch_openshift.go deleted file mode 100644 index 6dba9c78b..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch/patch_openshift.go +++ /dev/null @@ -1,34 +0,0 @@ -package openshiftpatch - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -var IsOC = false - -var OAPIToGroupifiedGVK func(gvk *schema.GroupVersionKind) - -func FixOAPIGroupifiedGVK(gvk *schema.GroupVersionKind) { - if OAPIToGroupifiedGVK != nil { - OAPIToGroupifiedGVK(gvk) - } -} - -var OAPIToGroupified func(uncast runtime.Object, gvk *schema.GroupVersionKind) - -func FixOAPIGroupKind(uncast runtime.Object, gvk *schema.GroupVersionKind) { - if OAPIToGroupified != nil { - OAPIToGroupified(uncast, gvk) - } -} - -var IsOAPIFn func(gvk schema.GroupVersionKind) bool - -func IsOAPI(gvk schema.GroupVersionKind) bool { - if IsOAPIFn == nil { - return false - } - - return IsOAPIFn(gvk) -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/patch_config_flags.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/patch_config_flags.go deleted file mode 100644 index c607a9214..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/genericclioptions/patch_config_flags.go +++ /dev/null @@ -1,16 +0,0 @@ -package genericclioptions - -import "fmt" - -// OpenShiftKubeConfigFlagName exists only so that we can track down all non-standard offenders -const OpenShiftKubeConfigFlagName = "config" - -func NewErrConfigurationMissing() error { - return fmt.Errorf(`Missing or incomplete configuration info. Please login or point to an existing, complete config file: - - 1. Via the command-line flag --config - 2. Via the KUBECONFIG environment variable - 3. In your home directory as ~/.kube/config - -To view or setup config directly use the 'config' command.`) -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/json.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/json.go index 09a77a31b..bb5bec748 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/json.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/json.go @@ -24,7 +24,7 @@ import ( "reflect" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" + "sigs.k8s.io/yaml" ) @@ -55,9 +55,6 @@ func (p *JSONPrinter) PrintObj(obj runtime.Object, w io.Writer) error { if obj.GetObjectKind().GroupVersionKind().Empty() { return fmt.Errorf("missing apiVersion or kind; try GetObjectKind().SetGroupVersionKind() if you know the type") } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - return fmt.Errorf("attempt to print an ungroupified object: %v", obj.GetObjectKind().GroupVersionKind()) - } data, err := json.MarshalIndent(obj, "", " ") if err != nil { @@ -95,9 +92,6 @@ func (p *YAMLPrinter) PrintObj(obj runtime.Object, w io.Writer) error { if obj.GetObjectKind().GroupVersionKind().Empty() { return fmt.Errorf("missing apiVersion or kind; try GetObjectKind().SetGroupVersionKind() if you know the type") } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - return fmt.Errorf("attempt to print an ungroupified object: %v", obj.GetObjectKind().GroupVersionKind()) - } output, err := yaml.Marshal(obj) if err != nil { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/jsonpath.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/jsonpath.go index c2633c6a4..333b9c334 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/jsonpath.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/jsonpath.go @@ -24,7 +24,6 @@ import ( "reflect" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" "k8s.io/client-go/util/jsonpath" ) @@ -122,9 +121,6 @@ func (j *JSONPathPrinter) PrintObj(obj runtime.Object, w io.Writer) error { if InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj)).Type().PkgPath()) { return fmt.Errorf(InternalObjectPrinterErr) } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - return fmt.Errorf("attempt to print an ungroupified object: %v", obj.GetObjectKind().GroupVersionKind()) - } var queryObj interface{} = obj if unstructured, ok := obj.(runtime.Unstructured); ok { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/name.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/name.go index e9fa17637..d04c5c6bb 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/name.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/name.go @@ -26,7 +26,6 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" ) // NamePrinter is an implementation of ResourcePrinter which outputs "resource/name" pair of an object. @@ -73,9 +72,6 @@ func (p *NamePrinter) PrintObj(obj runtime.Object, w io.Writer) error { if obj.GetObjectKind().GroupVersionKind().Empty() { return fmt.Errorf("missing apiVersion or kind; try GetObjectKind().SetGroupVersionKind() if you know the type") } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - return fmt.Errorf("attempt to print an ungroupified object: %v", obj.GetObjectKind().GroupVersionKind()) - } name := "" if acc, err := meta.Accessor(obj); err == nil { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/patch_sourcechecker.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/patch_sourcechecker.go deleted file mode 100644 index 138082040..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/patch_sourcechecker.go +++ /dev/null @@ -1,18 +0,0 @@ -package printers - -func init() { - disallowedPackagePrefixes = append(disallowedPackagePrefixes, - "github.com/openshift/origin/pkg/apps/apis/", - "github.com/openshift/origin/pkg/authorization/apis/", - "github.com/openshift/origin/pkg/build/apis/", - "github.com/openshift/origin/pkg/image/apis/", - "github.com/openshift/origin/pkg/network/apis/", - "github.com/openshift/origin/pkg/oauth/apis/", - "github.com/openshift/origin/pkg/project/apis/", - "github.com/openshift/origin/pkg/quota/apis/", - "github.com/openshift/origin/pkg/route/apis/", - "github.com/openshift/origin/pkg/security/apis/", - "github.com/openshift/origin/pkg/template/apis/", - "github.com/openshift/origin/pkg/user/apis/", - ) -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/template.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/template.go index f43a1d43d..ccff54226 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/template.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/template.go @@ -25,7 +25,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/json" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" ) // GoTemplatePrinter is an implementation of ResourcePrinter which formats data with a Go Template. @@ -65,10 +64,6 @@ func (p *GoTemplatePrinter) PrintObj(obj runtime.Object, w io.Writer) error { return fmt.Errorf(InternalObjectPrinterErr) } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - return fmt.Errorf("attempt to print an ungroupified object: %v", obj.GetObjectKind().GroupVersionKind()) - } - var data []byte var err error data, err = json.Marshal(obj) diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/typesetter.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/typesetter.go index a71490314..8d2d9b56e 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/typesetter.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/printers/typesetter.go @@ -21,7 +21,7 @@ import ( "io" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" + "k8s.io/apimachinery/pkg/runtime/schema" ) // TypeSetterPrinter is an implementation of ResourcePrinter wraps another printer with types set on the objects @@ -42,14 +42,13 @@ func (p *TypeSetterPrinter) PrintObj(obj runtime.Object, w io.Writer) error { if obj == nil { return p.Delegate.PrintObj(obj, w) } - if !obj.GetObjectKind().GroupVersionKind().Empty() && !openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { + if !obj.GetObjectKind().GroupVersionKind().Empty() { return p.Delegate.PrintObj(obj, w) } // we were empty coming in, make sure we're empty going out. This makes the call thread-unsafe - existingGVK := obj.GetObjectKind().GroupVersionKind() defer func() { - obj.GetObjectKind().SetGroupVersionKind(existingGVK) + obj.GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{}) }() gvks, _, err := p.Typer.ObjectKinds(obj) @@ -69,13 +68,6 @@ func (p *TypeSetterPrinter) PrintObj(obj runtime.Object, w io.Writer) error { break } - if openshiftpatch.IsOAPI(obj.GetObjectKind().GroupVersionKind()) { - gvk := obj.GetObjectKind().GroupVersionKind() - openshiftpatch.FixOAPIGroupifiedGVK(&gvk) - obj.GetObjectKind().SetGroupVersionKind(gvk) - return p.Delegate.PrintObj(obj, w) - } - return p.Delegate.PrintObj(obj, w) } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/resource/mapper.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/resource/mapper.go index 2cb9b194b..962f37711 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/resource/mapper.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/cli-runtime/pkg/resource/mapper.go @@ -22,7 +22,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/cli-runtime/pkg/genericclioptions/openshiftpatch" ) // Mapper is a convenience struct for holding references to the interfaces @@ -44,7 +43,6 @@ func (m *mapper) infoForData(data []byte, source string) (*Info, error) { if err != nil { return nil, fmt.Errorf("unable to decode %q: %v", source, err) } - openshiftpatch.FixOAPIGroupKind(obj, gvk) name, _ := metadataAccessor.Name(obj) namespace, _ := metadataAccessor.Namespace(obj) @@ -93,7 +91,6 @@ func (m *mapper) infoForObject(obj runtime.Object, typer runtime.ObjectTyper, pr if len(groupVersionKinds) > 1 && len(preferredGVKs) > 0 { gvk = preferredObjectKind(groupVersionKinds, preferredGVKs) } - openshiftpatch.FixOAPIGroupKind(obj, &gvk) name, _ := metadataAccessor.Name(obj) namespace, _ := metadataAccessor.Namespace(obj) diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/extensions/v1beta1/BUILD b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/extensions/v1beta1/BUILD index ca0d7db4c..ac71d0558 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/extensions/v1beta1/BUILD +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/extensions/v1beta1/BUILD @@ -12,7 +12,6 @@ go_library( "deployment.go", "ingress.go", "interface.go", - "networkpolicy.go", "podsecuritypolicy.go", "replicaset.go", ], diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/extensions/v1beta1/interface.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/extensions/v1beta1/interface.go index 6f0bea7e8..a259d27ae 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/extensions/v1beta1/interface.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/extensions/v1beta1/interface.go @@ -30,8 +30,6 @@ type Interface interface { Deployments() DeploymentInformer // Ingresses returns a IngressInformer. Ingresses() IngressInformer - // NetworkPolicies returns a NetworkPolicyInformer. - NetworkPolicies() NetworkPolicyInformer // PodSecurityPolicies returns a PodSecurityPolicyInformer. PodSecurityPolicies() PodSecurityPolicyInformer // ReplicaSets returns a ReplicaSetInformer. @@ -64,11 +62,6 @@ func (v *version) Ingresses() IngressInformer { return &ingressInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} } -// NetworkPolicies returns a NetworkPolicyInformer. -func (v *version) NetworkPolicies() NetworkPolicyInformer { - return &networkPolicyInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions} -} - // PodSecurityPolicies returns a PodSecurityPolicyInformer. func (v *version) PodSecurityPolicies() PodSecurityPolicyInformer { return &podSecurityPolicyInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go deleted file mode 100644 index 92f4f0400..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/extensions/v1beta1/networkpolicy.go +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by informer-gen. DO NOT EDIT. - -package v1beta1 - -import ( - time "time" - - extensionsv1beta1 "k8s.io/api/extensions/v1beta1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - watch "k8s.io/apimachinery/pkg/watch" - internalinterfaces "k8s.io/client-go/informers/internalinterfaces" - kubernetes "k8s.io/client-go/kubernetes" - v1beta1 "k8s.io/client-go/listers/extensions/v1beta1" - cache "k8s.io/client-go/tools/cache" -) - -// NetworkPolicyInformer provides access to a shared informer and lister for -// NetworkPolicies. -type NetworkPolicyInformer interface { - Informer() cache.SharedIndexInformer - Lister() v1beta1.NetworkPolicyLister -} - -type networkPolicyInformer struct { - factory internalinterfaces.SharedInformerFactory - tweakListOptions internalinterfaces.TweakListOptionsFunc - namespace string -} - -// NewNetworkPolicyInformer constructs a new informer for NetworkPolicy type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewNetworkPolicyInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { - return NewFilteredNetworkPolicyInformer(client, namespace, resyncPeriod, indexers, nil) -} - -// NewFilteredNetworkPolicyInformer constructs a new informer for NetworkPolicy type. -// Always prefer using an informer factory to get a shared informer instead of getting an independent -// one. This reduces memory footprint and number of connections to the server. -func NewFilteredNetworkPolicyInformer(client kubernetes.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { - return cache.NewSharedIndexInformer( - &cache.ListWatch{ - ListFunc: func(options v1.ListOptions) (runtime.Object, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.ExtensionsV1beta1().NetworkPolicies(namespace).List(options) - }, - WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { - if tweakListOptions != nil { - tweakListOptions(&options) - } - return client.ExtensionsV1beta1().NetworkPolicies(namespace).Watch(options) - }, - }, - &extensionsv1beta1.NetworkPolicy{}, - resyncPeriod, - indexers, - ) -} - -func (f *networkPolicyInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { - return NewFilteredNetworkPolicyInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions) -} - -func (f *networkPolicyInformer) Informer() cache.SharedIndexInformer { - return f.factory.InformerFor(&extensionsv1beta1.NetworkPolicy{}, f.defaultInformer) -} - -func (f *networkPolicyInformer) Lister() v1beta1.NetworkPolicyLister { - return v1beta1.NewNetworkPolicyLister(f.Informer().GetIndexer()) -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/generic.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/generic.go index 8b986a963..fd5811cd6 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/generic.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/informers/generic.go @@ -206,8 +206,6 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().Deployments().Informer()}, nil case extensionsv1beta1.SchemeGroupVersion.WithResource("ingresses"): return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().Ingresses().Informer()}, nil - case extensionsv1beta1.SchemeGroupVersion.WithResource("networkpolicies"): - return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().NetworkPolicies().Informer()}, nil case extensionsv1beta1.SchemeGroupVersion.WithResource("podsecuritypolicies"): return &genericInformer{resource: resource.GroupResource(), informer: f.Extensions().V1beta1().PodSecurityPolicies().Informer()}, nil case extensionsv1beta1.SchemeGroupVersion.WithResource("replicasets"): diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/BUILD b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/BUILD index fcd824526..6690d96b0 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/BUILD +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/BUILD @@ -15,7 +15,6 @@ go_library( "extensions_client.go", "generated_expansion.go", "ingress.go", - "networkpolicy.go", "podsecuritypolicy.go", "replicaset.go", ], diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go index 4fca2e525..0e9edf5cc 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/extensions_client.go @@ -30,7 +30,6 @@ type ExtensionsV1beta1Interface interface { DaemonSetsGetter DeploymentsGetter IngressesGetter - NetworkPoliciesGetter PodSecurityPoliciesGetter ReplicaSetsGetter } @@ -52,10 +51,6 @@ func (c *ExtensionsV1beta1Client) Ingresses(namespace string) IngressInterface { return newIngresses(c, namespace) } -func (c *ExtensionsV1beta1Client) NetworkPolicies(namespace string) NetworkPolicyInterface { - return newNetworkPolicies(c, namespace) -} - func (c *ExtensionsV1beta1Client) PodSecurityPolicies() PodSecurityPolicyInterface { return newPodSecurityPolicies(c) } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/BUILD b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/BUILD index d9f3f1506..5de2b7dfe 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/BUILD +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/BUILD @@ -14,7 +14,6 @@ go_library( "fake_deployment_expansion.go", "fake_extensions_client.go", "fake_ingress.go", - "fake_networkpolicy.go", "fake_podsecuritypolicy.go", "fake_replicaset.go", ], diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go index 36c0d51bc..0282c0b49 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_extensions_client.go @@ -40,10 +40,6 @@ func (c *FakeExtensionsV1beta1) Ingresses(namespace string) v1beta1.IngressInter return &FakeIngresses{c, namespace} } -func (c *FakeExtensionsV1beta1) NetworkPolicies(namespace string) v1beta1.NetworkPolicyInterface { - return &FakeNetworkPolicies{c, namespace} -} - func (c *FakeExtensionsV1beta1) PodSecurityPolicies() v1beta1.PodSecurityPolicyInterface { return &FakePodSecurityPolicies{c} } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_networkpolicy.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_networkpolicy.go deleted file mode 100644 index 7f4d4a555..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake/fake_networkpolicy.go +++ /dev/null @@ -1,128 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package fake - -import ( - v1beta1 "k8s.io/api/extensions/v1beta1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - labels "k8s.io/apimachinery/pkg/labels" - schema "k8s.io/apimachinery/pkg/runtime/schema" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - testing "k8s.io/client-go/testing" -) - -// FakeNetworkPolicies implements NetworkPolicyInterface -type FakeNetworkPolicies struct { - Fake *FakeExtensionsV1beta1 - ns string -} - -var networkpoliciesResource = schema.GroupVersionResource{Group: "extensions", Version: "v1beta1", Resource: "networkpolicies"} - -var networkpoliciesKind = schema.GroupVersionKind{Group: "extensions", Version: "v1beta1", Kind: "NetworkPolicy"} - -// Get takes name of the networkPolicy, and returns the corresponding networkPolicy object, and an error if there is any. -func (c *FakeNetworkPolicies) Get(name string, options v1.GetOptions) (result *v1beta1.NetworkPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewGetAction(networkpoliciesResource, c.ns, name), &v1beta1.NetworkPolicy{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.NetworkPolicy), err -} - -// List takes label and field selectors, and returns the list of NetworkPolicies that match those selectors. -func (c *FakeNetworkPolicies) List(opts v1.ListOptions) (result *v1beta1.NetworkPolicyList, err error) { - obj, err := c.Fake. - Invokes(testing.NewListAction(networkpoliciesResource, networkpoliciesKind, c.ns, opts), &v1beta1.NetworkPolicyList{}) - - if obj == nil { - return nil, err - } - - label, _, _ := testing.ExtractFromListOptions(opts) - if label == nil { - label = labels.Everything() - } - list := &v1beta1.NetworkPolicyList{ListMeta: obj.(*v1beta1.NetworkPolicyList).ListMeta} - for _, item := range obj.(*v1beta1.NetworkPolicyList).Items { - if label.Matches(labels.Set(item.Labels)) { - list.Items = append(list.Items, item) - } - } - return list, err -} - -// Watch returns a watch.Interface that watches the requested networkPolicies. -func (c *FakeNetworkPolicies) Watch(opts v1.ListOptions) (watch.Interface, error) { - return c.Fake. - InvokesWatch(testing.NewWatchAction(networkpoliciesResource, c.ns, opts)) - -} - -// Create takes the representation of a networkPolicy and creates it. Returns the server's representation of the networkPolicy, and an error, if there is any. -func (c *FakeNetworkPolicies) Create(networkPolicy *v1beta1.NetworkPolicy) (result *v1beta1.NetworkPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewCreateAction(networkpoliciesResource, c.ns, networkPolicy), &v1beta1.NetworkPolicy{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.NetworkPolicy), err -} - -// Update takes the representation of a networkPolicy and updates it. Returns the server's representation of the networkPolicy, and an error, if there is any. -func (c *FakeNetworkPolicies) Update(networkPolicy *v1beta1.NetworkPolicy) (result *v1beta1.NetworkPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewUpdateAction(networkpoliciesResource, c.ns, networkPolicy), &v1beta1.NetworkPolicy{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.NetworkPolicy), err -} - -// Delete takes name of the networkPolicy and deletes it. Returns an error if one occurs. -func (c *FakeNetworkPolicies) Delete(name string, options *v1.DeleteOptions) error { - _, err := c.Fake. - Invokes(testing.NewDeleteAction(networkpoliciesResource, c.ns, name), &v1beta1.NetworkPolicy{}) - - return err -} - -// DeleteCollection deletes a collection of objects. -func (c *FakeNetworkPolicies) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - action := testing.NewDeleteCollectionAction(networkpoliciesResource, c.ns, listOptions) - - _, err := c.Fake.Invokes(action, &v1beta1.NetworkPolicyList{}) - return err -} - -// Patch applies the patch and returns the patched networkPolicy. -func (c *FakeNetworkPolicies) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.NetworkPolicy, err error) { - obj, err := c.Fake. - Invokes(testing.NewPatchSubresourceAction(networkpoliciesResource, c.ns, name, pt, data, subresources...), &v1beta1.NetworkPolicy{}) - - if obj == nil { - return nil, err - } - return obj.(*v1beta1.NetworkPolicy), err -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go index 41d28f041..cfaeebd05 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/generated_expansion.go @@ -22,8 +22,6 @@ type DaemonSetExpansion interface{} type IngressExpansion interface{} -type NetworkPolicyExpansion interface{} - type PodSecurityPolicyExpansion interface{} type ReplicaSetExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go deleted file mode 100644 index 0607e2dd4..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/networkpolicy.go +++ /dev/null @@ -1,174 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by client-gen. DO NOT EDIT. - -package v1beta1 - -import ( - "time" - - v1beta1 "k8s.io/api/extensions/v1beta1" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - types "k8s.io/apimachinery/pkg/types" - watch "k8s.io/apimachinery/pkg/watch" - scheme "k8s.io/client-go/kubernetes/scheme" - rest "k8s.io/client-go/rest" -) - -// NetworkPoliciesGetter has a method to return a NetworkPolicyInterface. -// A group's client should implement this interface. -type NetworkPoliciesGetter interface { - NetworkPolicies(namespace string) NetworkPolicyInterface -} - -// NetworkPolicyInterface has methods to work with NetworkPolicy resources. -type NetworkPolicyInterface interface { - Create(*v1beta1.NetworkPolicy) (*v1beta1.NetworkPolicy, error) - Update(*v1beta1.NetworkPolicy) (*v1beta1.NetworkPolicy, error) - Delete(name string, options *v1.DeleteOptions) error - DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error - Get(name string, options v1.GetOptions) (*v1beta1.NetworkPolicy, error) - List(opts v1.ListOptions) (*v1beta1.NetworkPolicyList, error) - Watch(opts v1.ListOptions) (watch.Interface, error) - Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.NetworkPolicy, err error) - NetworkPolicyExpansion -} - -// networkPolicies implements NetworkPolicyInterface -type networkPolicies struct { - client rest.Interface - ns string -} - -// newNetworkPolicies returns a NetworkPolicies -func newNetworkPolicies(c *ExtensionsV1beta1Client, namespace string) *networkPolicies { - return &networkPolicies{ - client: c.RESTClient(), - ns: namespace, - } -} - -// Get takes name of the networkPolicy, and returns the corresponding networkPolicy object, and an error if there is any. -func (c *networkPolicies) Get(name string, options v1.GetOptions) (result *v1beta1.NetworkPolicy, err error) { - result = &v1beta1.NetworkPolicy{} - err = c.client.Get(). - Namespace(c.ns). - Resource("networkpolicies"). - Name(name). - VersionedParams(&options, scheme.ParameterCodec). - Do(). - Into(result) - return -} - -// List takes label and field selectors, and returns the list of NetworkPolicies that match those selectors. -func (c *networkPolicies) List(opts v1.ListOptions) (result *v1beta1.NetworkPolicyList, err error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - result = &v1beta1.NetworkPolicyList{} - err = c.client.Get(). - Namespace(c.ns). - Resource("networkpolicies"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Do(). - Into(result) - return -} - -// Watch returns a watch.Interface that watches the requested networkPolicies. -func (c *networkPolicies) Watch(opts v1.ListOptions) (watch.Interface, error) { - var timeout time.Duration - if opts.TimeoutSeconds != nil { - timeout = time.Duration(*opts.TimeoutSeconds) * time.Second - } - opts.Watch = true - return c.client.Get(). - Namespace(c.ns). - Resource("networkpolicies"). - VersionedParams(&opts, scheme.ParameterCodec). - Timeout(timeout). - Watch() -} - -// Create takes the representation of a networkPolicy and creates it. Returns the server's representation of the networkPolicy, and an error, if there is any. -func (c *networkPolicies) Create(networkPolicy *v1beta1.NetworkPolicy) (result *v1beta1.NetworkPolicy, err error) { - result = &v1beta1.NetworkPolicy{} - err = c.client.Post(). - Namespace(c.ns). - Resource("networkpolicies"). - Body(networkPolicy). - Do(). - Into(result) - return -} - -// Update takes the representation of a networkPolicy and updates it. Returns the server's representation of the networkPolicy, and an error, if there is any. -func (c *networkPolicies) Update(networkPolicy *v1beta1.NetworkPolicy) (result *v1beta1.NetworkPolicy, err error) { - result = &v1beta1.NetworkPolicy{} - err = c.client.Put(). - Namespace(c.ns). - Resource("networkpolicies"). - Name(networkPolicy.Name). - Body(networkPolicy). - Do(). - Into(result) - return -} - -// Delete takes name of the networkPolicy and deletes it. Returns an error if one occurs. -func (c *networkPolicies) Delete(name string, options *v1.DeleteOptions) error { - return c.client.Delete(). - Namespace(c.ns). - Resource("networkpolicies"). - Name(name). - Body(options). - Do(). - Error() -} - -// DeleteCollection deletes a collection of objects. -func (c *networkPolicies) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { - var timeout time.Duration - if listOptions.TimeoutSeconds != nil { - timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second - } - return c.client.Delete(). - Namespace(c.ns). - Resource("networkpolicies"). - VersionedParams(&listOptions, scheme.ParameterCodec). - Timeout(timeout). - Body(options). - Do(). - Error() -} - -// Patch applies the patch and returns the patched networkPolicy. -func (c *networkPolicies) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1beta1.NetworkPolicy, err error) { - result = &v1beta1.NetworkPolicy{} - err = c.client.Patch(pt). - Namespace(c.ns). - Resource("networkpolicies"). - SubResource(subresources...). - Name(name). - Body(data). - Do(). - Into(result) - return -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/listers/extensions/v1beta1/BUILD b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/listers/extensions/v1beta1/BUILD index 98f2e2547..62d18fefa 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/listers/extensions/v1beta1/BUILD +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/listers/extensions/v1beta1/BUILD @@ -15,7 +15,6 @@ go_library( "deployment_expansion.go", "expansion_generated.go", "ingress.go", - "networkpolicy.go", "podsecuritypolicy.go", "replicaset.go", "replicaset_expansion.go", diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go index 6d55ae9b8..d5c2a7a7d 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/listers/extensions/v1beta1/expansion_generated.go @@ -26,14 +26,6 @@ type IngressListerExpansion interface{} // IngressNamespaceLister. type IngressNamespaceListerExpansion interface{} -// NetworkPolicyListerExpansion allows custom methods to be added to -// NetworkPolicyLister. -type NetworkPolicyListerExpansion interface{} - -// NetworkPolicyNamespaceListerExpansion allows custom methods to be added to -// NetworkPolicyNamespaceLister. -type NetworkPolicyNamespaceListerExpansion interface{} - // PodSecurityPolicyListerExpansion allows custom methods to be added to // PodSecurityPolicyLister. type PodSecurityPolicyListerExpansion interface{} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go deleted file mode 100644 index 782f521ad..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/listers/extensions/v1beta1/networkpolicy.go +++ /dev/null @@ -1,94 +0,0 @@ -/* -Copyright The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Code generated by lister-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1beta1 "k8s.io/api/extensions/v1beta1" - "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/client-go/tools/cache" -) - -// NetworkPolicyLister helps list NetworkPolicies. -type NetworkPolicyLister interface { - // List lists all NetworkPolicies in the indexer. - List(selector labels.Selector) (ret []*v1beta1.NetworkPolicy, err error) - // NetworkPolicies returns an object that can list and get NetworkPolicies. - NetworkPolicies(namespace string) NetworkPolicyNamespaceLister - NetworkPolicyListerExpansion -} - -// networkPolicyLister implements the NetworkPolicyLister interface. -type networkPolicyLister struct { - indexer cache.Indexer -} - -// NewNetworkPolicyLister returns a new NetworkPolicyLister. -func NewNetworkPolicyLister(indexer cache.Indexer) NetworkPolicyLister { - return &networkPolicyLister{indexer: indexer} -} - -// List lists all NetworkPolicies in the indexer. -func (s *networkPolicyLister) List(selector labels.Selector) (ret []*v1beta1.NetworkPolicy, err error) { - err = cache.ListAll(s.indexer, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.NetworkPolicy)) - }) - return ret, err -} - -// NetworkPolicies returns an object that can list and get NetworkPolicies. -func (s *networkPolicyLister) NetworkPolicies(namespace string) NetworkPolicyNamespaceLister { - return networkPolicyNamespaceLister{indexer: s.indexer, namespace: namespace} -} - -// NetworkPolicyNamespaceLister helps list and get NetworkPolicies. -type NetworkPolicyNamespaceLister interface { - // List lists all NetworkPolicies in the indexer for a given namespace. - List(selector labels.Selector) (ret []*v1beta1.NetworkPolicy, err error) - // Get retrieves the NetworkPolicy from the indexer for a given namespace and name. - Get(name string) (*v1beta1.NetworkPolicy, error) - NetworkPolicyNamespaceListerExpansion -} - -// networkPolicyNamespaceLister implements the NetworkPolicyNamespaceLister -// interface. -type networkPolicyNamespaceLister struct { - indexer cache.Indexer - namespace string -} - -// List lists all NetworkPolicies in the indexer for a given namespace. -func (s networkPolicyNamespaceLister) List(selector labels.Selector) (ret []*v1beta1.NetworkPolicy, err error) { - err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) { - ret = append(ret, m.(*v1beta1.NetworkPolicy)) - }) - return ret, err -} - -// Get retrieves the NetworkPolicy from the indexer for a given namespace and name. -func (s networkPolicyNamespaceLister) Get(name string) (*v1beta1.NetworkPolicy, error) { - obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name) - if err != nil { - return nil, err - } - if !exists { - return nil, errors.NewNotFound(v1beta1.Resource("networkpolicy"), name) - } - return obj.(*v1beta1.NetworkPolicy), nil -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/rest/config.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/rest/config.go index 6a543ae49..3f6b9bc23 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/rest/config.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/rest/config.go @@ -366,9 +366,6 @@ func adjustVersion(v string) string { return seg[0] } -// CommandNameOverride allows to override the command reported in user-agent. -var CommandNameOverride = "" - // adjustCommand returns the last component of the // OS-specific command path for use in User-Agent. func adjustCommand(p string) string { @@ -376,9 +373,6 @@ func adjustCommand(p string) string { if len(p) == 0 { return "unknown" } - if len(CommandNameOverride) > 0 { - return CommandNameOverride - } return filepath.Base(p) } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/scale/client.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/scale/client.go index b410cb52e..3a3e8fc9e 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/scale/client.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/scale/client.go @@ -89,8 +89,6 @@ func (c *scaleClient) pathAndVersionFor(resource schema.GroupResource) (string, return "", gvr, fmt.Errorf("unable to get full preferred group-version-resource for %s: %v", resource.String(), err) } - gvr = correctOapiDeploymentConfig(gvr) // TODO(directxman12): remove when /oapi is removed - groupVer := gvr.GroupVersion() // we need to set the API path based on GroupVersion (defaulting to the legacy path if none is set) diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/scale/patch_dc.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/scale/patch_dc.go deleted file mode 100644 index da2330c8e..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/scale/patch_dc.go +++ /dev/null @@ -1,28 +0,0 @@ -package scale - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" -) - -var dcGVR = schema.GroupVersionResource{ - Group: "", - Version: "v1", - Resource: "deploymentconfigs", -} - -var groupedDCGVR = schema.GroupVersionResource{ - Group: "apps.openshift.io", - Version: "v1", - Resource: "deploymentconfigs", -} - -func correctOapiDeploymentConfig(gvr schema.GroupVersionResource) schema.GroupVersionResource { - // TODO(directxman12): this is a dirty, dirty hack because oapi just appears in discovery as "/v1", like - // the kube core API. We can remove it if/when we get rid of the legacy oapi group entirely. It makes me - // cry a bit inside, but such is life. - if gvr == dcGVR { - return groupedDCGVR - } - - return gvr -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/mutation_detector.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/mutation_detector.go index f03738a10..adb5b8be8 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/mutation_detector.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/mutation_detector.go @@ -114,7 +114,7 @@ func (d *defaultCacheMutationDetector) CompareObjects() { altered := false for i, obj := range d.cachedObjs { if !reflect.DeepEqual(obj.cached, obj.copied) { - fmt.Printf("CACHE %s[%d] ALTERED!\n%v\n", d.name, i, diff.ObjectGoPrintSideBySide(obj.cached, obj.copied)) + fmt.Printf("CACHE %s[%d] ALTERED!\n%v\n", d.name, i, diff.ObjectDiff(obj.cached, obj.copied)) altered = true } } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/reflector.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/reflector.go index 54d0a2a94..c43b7fc52 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/reflector.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/cache/reflector.go @@ -286,12 +286,7 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error { if err := r.watchHandler(w, &resourceVersion, resyncerrc, stopCh); err != nil { if err != errorStopRequested { - switch { - case apierrs.IsResourceExpired(err): - klog.V(4).Infof("%s: watch of %v ended with: %v", r.name, r.expectedType, err) - default: - klog.Warningf("%s: watch of %v ended with: %v", r.name, r.expectedType, err) - } + klog.Warningf("%s: watch of %v ended with: %v", r.name, r.expectedType, err) } return nil } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/client_config.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/client_config.go index 885113596..a7b8c1c6e 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/client_config.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/client_config.go @@ -35,7 +35,7 @@ import ( var ( // ClusterDefaults has the same behavior as the old EnvVar and DefaultCluster fields // DEPRECATED will be replaced - ClusterDefaults = clientcmdapi.Cluster{Server: os.Getenv("KUBERNETES_MASTER")} + ClusterDefaults = clientcmdapi.Cluster{Server: getDefaultServer()} // DefaultClientConfig represents the legacy behavior of this package for defaulting // DEPRECATED will be replace DefaultClientConfig = DirectClientConfig{*clientcmdapi.NewConfig(), "", &ConfigOverrides{ @@ -43,6 +43,15 @@ var ( }, nil, NewDefaultClientConfigLoadingRules(), promptedCredentials{}} ) +// getDefaultServer returns a default setting for DefaultClientConfig +// DEPRECATED +func getDefaultServer() string { + if server := os.Getenv("KUBERNETES_MASTER"); len(server) > 0 { + return server + } + return "http://localhost:8080" +} + // ClientConfig is used to make it easy to get an api server client type ClientConfig interface { // RawConfig returns the merged result of all overrides diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/config.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/config.go index 914160158..b8cc39688 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/config.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/config.go @@ -22,6 +22,7 @@ import ( "path" "path/filepath" "reflect" + "sort" "k8s.io/klog" @@ -155,6 +156,17 @@ func NewDefaultPathOptions() *PathOptions { // that means that this code will only write into a single file. If you want to relativizePaths, you must provide a fully qualified path in any // modified element. func ModifyConfig(configAccess ConfigAccess, newConfig clientcmdapi.Config, relativizePaths bool) error { + possibleSources := configAccess.GetLoadingPrecedence() + // sort the possible kubeconfig files so we always "lock" in the same order + // to avoid deadlock (note: this can fail w/ symlinks, but... come on). + sort.Strings(possibleSources) + for _, filename := range possibleSources { + if err := lockFile(filename); err != nil { + return err + } + defer unlockFile(filename) + } + startingConfig, err := configAccess.GetStartingConfig() if err != nil { return err diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/loader.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/loader.go index d78bcc865..7e928a918 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/loader.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/loader.go @@ -420,6 +420,33 @@ func WriteToFile(config clientcmdapi.Config, filename string) error { return nil } +func lockFile(filename string) error { + // TODO: find a way to do this with actual file locks. Will + // probably need separate solution for windows and Linux. + + // Make sure the dir exists before we try to create a lock file. + dir := filepath.Dir(filename) + if _, err := os.Stat(dir); os.IsNotExist(err) { + if err = os.MkdirAll(dir, 0755); err != nil { + return err + } + } + f, err := os.OpenFile(lockName(filename), os.O_CREATE|os.O_EXCL, 0) + if err != nil { + return err + } + f.Close() + return nil +} + +func unlockFile(filename string) error { + return os.Remove(lockName(filename)) +} + +func lockName(filename string) string { + return filename + ".lock" +} + // Write serializes the config to yaml. // Encapsulates serialization without assuming the destination is a file. func Write(config clientcmdapi.Config) ([]byte, error) { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go index 79ddbb9bd..461d970bf 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/client-go/tools/clientcmd/loader_test.go @@ -560,6 +560,22 @@ func TestMigratingFileSourceMissingSkip(t *testing.T) { } } +func TestFileLocking(t *testing.T) { + f, _ := ioutil.TempFile("", "") + defer os.Remove(f.Name()) + + err := lockFile(f.Name()) + if err != nil { + t.Errorf("unexpected error while locking file: %v", err) + } + defer unlockFile(f.Name()) + + err = lockFile(f.Name()) + if err == nil { + t.Error("expected error while locking file.") + } +} + func Example_noMergingOnExplicitPaths() { commandLineFile, _ := ioutil.TempFile("", "") defer os.Remove(commandLineFile.Name()) diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go index 07660a75b..18980744f 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/client-gen/generators/client_generator.go @@ -38,14 +38,8 @@ import ( // NameSystems returns the name system used by the generators in this package. func NameSystems() namer.NameSystems { - // If you change this, make sure you get the other instances in listers and informers pluralExceptions := map[string]string{ - "DNS": "DNSes", - "DNSList": "DNSList", - "Endpoints": "Endpoints", - "Features": "Features", - "FeaturesList": "FeaturesList", - "SecurityContextConstraints": "SecurityContextConstraints", + "Endpoints": "Endpoints", } lowercaseNamer := namer.NewAllLowercasePluralNamer(pluralExceptions) @@ -55,18 +49,6 @@ func NameSystems() namer.NameSystems { // you can put your fully qualified package like // to generate a name that doesn't conflict with your group. // "k8s.io/apis/events/v1beta1.Event": "EventResource" - "github.com/openshift/origin/pkg/build/apis/build/v1.Build": "BuildResource", - "github.com/openshift/origin/pkg/build/apis/build.Build": "BuildResource", - "github.com/openshift/origin/pkg/image/apis/image/v1.Image": "ImageResource", - "github.com/openshift/origin/pkg/image/apis/image.Image": "ImageResource", - "github.com/openshift/origin/pkg/project/apis/project/v1.Project": "ProjectResource", - "github.com/openshift/origin/pkg/project/apis/project.Project": "ProjectResource", - "github.com/openshift/origin/pkg/route/apis/route/v1.Route": "RouteResource", - "github.com/openshift/origin/pkg/route/apis/route.Route": "RouteResource", - "github.com/openshift/origin/pkg/template/apis/template/v1.Template": "TemplateResource", - "github.com/openshift/origin/pkg/template/apis/template.Template": "TemplateResource", - "github.com/openshift/origin/pkg/user/apis/user/v1.User": "UserResource", - "github.com/openshift/origin/pkg/user/apis/user.User": "UserResource", }, KeyFunc: func(t *types.Type) string { return t.Name.Package + "." + t.Name.Name @@ -79,18 +61,6 @@ func NameSystems() namer.NameSystems { // you can put your fully qualified package like // to generate a name that doesn't conflict with your group. // "k8s.io/apis/events/v1beta1.Event": "eventResource" - "github.com/openshift/origin/pkg/build/apis/build/v1.Build": "buildResource", - "github.com/openshift/origin/pkg/build/apis/build.Build": "buildResource", - "github.com/openshift/origin/pkg/image/apis/image/v1.Image": "imageResource", - "github.com/openshift/origin/pkg/image/apis/image.Image": "imageResource", - "github.com/openshift/origin/pkg/project/apis/project/v1.Project": "projectResource", - "github.com/openshift/origin/pkg/project/apis/project.Project": "projectResource", - "github.com/openshift/origin/pkg/route/apis/route/v1.Route": "routeResource", - "github.com/openshift/origin/pkg/route/apis/route.Route": "routeResource", - "github.com/openshift/origin/pkg/template/apis/template/v1.Template": "templateResource", - "github.com/openshift/origin/pkg/template/apis/template.Template": "templateResource", - "github.com/openshift/origin/pkg/user/apis/user/v1.User": "userResource", - "github.com/openshift/origin/pkg/user/apis/user.User": "userResource", }, KeyFunc: func(t *types.Type) string { return t.Name.Package + "." + t.Name.Name diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/informer-gen/generators/generic.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/informer-gen/generators/generic.go index efc0c18fa..cad907990 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/informer-gen/generators/generic.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/informer-gen/generators/generic.go @@ -51,12 +51,7 @@ func (g *genericGenerator) Filter(c *generator.Context, t *types.Type) bool { func (g *genericGenerator) Namers(c *generator.Context) namer.NameSystems { pluralExceptions := map[string]string{ - "DNS": "DNSes", - "DNSList": "DNSList", - "Endpoints": "Endpoints", - "Features": "Features", - "FeaturesList": "FeaturesList", - "SecurityContextConstraints": "SecurityContextConstraints", + "Endpoints": "Endpoints", } return namer.NameSystems{ "raw": namer.NewRawNamer(g.outputPackage, g.imports), diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/informer-gen/generators/packages.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/informer-gen/generators/packages.go index 72b32dbe6..cfb91ceba 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/informer-gen/generators/packages.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/informer-gen/generators/packages.go @@ -36,12 +36,7 @@ import ( // NameSystems returns the name system used by the generators in this package. func NameSystems() namer.NameSystems { pluralExceptions := map[string]string{ - "DNS": "DNSes", - "DNSList": "DNSList", - "Endpoints": "Endpoints", - "Features": "Features", - "FeaturesList": "FeaturesList", - "SecurityContextConstraints": "SecurityContextConstraints", + "Endpoints": "Endpoints", } return namer.NameSystems{ "public": namer.NewPublicNamer(0), diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/lister-gen/generators/lister.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/lister-gen/generators/lister.go index 5ddd7314b..c8ed5ad4d 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/lister-gen/generators/lister.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/code-generator/cmd/lister-gen/generators/lister.go @@ -36,12 +36,7 @@ import ( // NameSystems returns the name system used by the generators in this package. func NameSystems() namer.NameSystems { pluralExceptions := map[string]string{ - "DNS": "DNSes", - "DNSList": "DNSList", - "Endpoints": "Endpoints", - "Features": "Features", - "FeaturesList": "FeaturesList", - "SecurityContextConstraints": "SecurityContextConstraints", + "Endpoints": "Endpoints", } return namer.NameSystems{ "public": namer.NewPublicNamer(0), diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go index 889b5f73f..a135cd93e 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiserver.go @@ -18,25 +18,17 @@ package apiserver import ( "net/http" - "strings" "time" - "k8s.io/klog" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime/schema" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apimachinery/pkg/util/wait" genericapiserver "k8s.io/apiserver/pkg/server" - "k8s.io/apiserver/pkg/server/certs" serverstorage "k8s.io/apiserver/pkg/server/storage" "k8s.io/client-go/pkg/version" "k8s.io/kube-aggregator/pkg/apis/apiregistration" - apiregistrationapi "k8s.io/kube-aggregator/pkg/apis/apiregistration" - v1 "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" + "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1" "k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1" aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" "k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset" @@ -69,8 +61,8 @@ const legacyAPIServiceName = "v1." type ExtraConfig struct { // ProxyClientCert/Key are the client cert used to identify this proxy. Backing APIServices use // this to confirm the proxy's identity - ProxyClientCert string - ProxyClientKey string + ProxyClientCert []byte + ProxyClientKey []byte // If present, the Dial method will be used for dialing out to delegate // apiservers. @@ -105,8 +97,8 @@ type APIAggregator struct { // proxyClientCert/Key are the client cert used to identify this proxy. Backing APIServices use // this to confirm the proxy's identity - proxyClientCert certFunc - proxyClientKey certFunc + proxyClientCert []byte + proxyClientKey []byte proxyTransport *http.Transport // proxyHandlers are the proxy handlers that are currently registered, keyed by apiservice.name @@ -114,9 +106,6 @@ type APIAggregator struct { // handledGroups are the groups that already have routes handledGroups sets.String - // handledAlwaysLocalDelegatePaths are the URL paths that already have routes registered - handledAlwaysLocalDelegatePaths sets.String - // lister is used to add group handling for /apis/ aggregator lookups based on // controller state lister listers.APIServiceLister @@ -168,15 +157,16 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg ) s := &APIAggregator{ - GenericAPIServer: genericServer, - delegateHandler: delegationTarget.UnprotectedHandler(), - proxyTransport: c.ExtraConfig.ProxyTransport, - proxyHandlers: map[string]*proxyHandler{}, - handledGroups: sets.String{}, - handledAlwaysLocalDelegatePaths: sets.String{}, - lister: informerFactory.Apiregistration().InternalVersion().APIServices().Lister(), - APIRegistrationInformers: informerFactory, - serviceResolver: c.ExtraConfig.ServiceResolver, + GenericAPIServer: genericServer, + delegateHandler: delegationTarget.UnprotectedHandler(), + proxyClientCert: c.ExtraConfig.ProxyClientCert, + proxyClientKey: c.ExtraConfig.ProxyClientKey, + proxyTransport: c.ExtraConfig.ProxyTransport, + proxyHandlers: map[string]*proxyHandler{}, + handledGroups: sets.String{}, + lister: informerFactory.Apiregistration().InternalVersion().APIServices().Lister(), + APIRegistrationInformers: informerFactory, + serviceResolver: c.ExtraConfig.ServiceResolver, } apiGroupInfo := apiservicerest.NewRESTStorage(c.GenericConfig.MergedResourceConfig, c.GenericConfig.RESTOptionsGetter) @@ -192,31 +182,15 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandle("/apis/", apisHandler) apiserviceRegistrationController := NewAPIServiceRegistrationController(informerFactory.Apiregistration().InternalVersion().APIServices(), s) - aggregatorProxyCerts := certs.NewDynamicCertKeyPairLoader(c.ExtraConfig.ProxyClientCert, c.ExtraConfig.ProxyClientKey, apiserviceRegistrationController.resyncAll) - if err := aggregatorProxyCerts.CheckCerts(); err != nil { - return nil, err - } - s.proxyClientCert = aggregatorProxyCerts.GetRawCert - s.proxyClientKey = aggregatorProxyCerts.GetRawKey - - availableController, err := statuscontrollers.NewAvailableConditionController( + availableController := statuscontrollers.NewAvailableConditionController( informerFactory.Apiregistration().InternalVersion().APIServices(), c.GenericConfig.SharedInformerFactory.Core().V1().Services(), c.GenericConfig.SharedInformerFactory.Core().V1().Endpoints(), apiregistrationClient.Apiregistration(), c.ExtraConfig.ProxyTransport, - aggregatorProxyCerts.GetRawCert, - aggregatorProxyCerts.GetRawKey, s.serviceResolver, ) - if err != nil { - return nil, err - } - s.GenericAPIServer.AddPostStartHookOrDie("aggregator-reload-proxy-client-cert", func(context genericapiserver.PostStartHookContext) error { - go aggregatorProxyCerts.Run(context.StopCh) - return nil - }) s.GenericAPIServer.AddPostStartHookOrDie("start-kube-aggregator-informers", func(context genericapiserver.PostStartHookContext) error { informerFactory.Start(context.StopCh) c.GenericConfig.SharedInformerFactory.Start(context.StopCh) @@ -231,33 +205,6 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg go availableController.Run(5, context.StopCh) return nil }) - s.GenericAPIServer.AddPostStartHook("apiservice-wait-for-first-sync", func(context genericapiserver.PostStartHookContext) error { - // when the aggregator first starts, it should make sure that it has proxy handlers for all the known good API services at this time - // we only need to do this once. - err := wait.PollImmediateUntil(100*time.Millisecond, func() (bool, error) { - // fix race - handledAPIServices := sets.StringKeySet(s.proxyHandlers) - apiservices, err := s.lister.List(labels.Everything()) - if err != nil { - return false, err - } - expectedAPIServices := sets.NewString() - for _, apiservice := range apiservices { - if apiregistrationapi.IsAPIServiceConditionTrue(apiservice, apiregistrationapi.Available) { - expectedAPIServices.Insert(apiservice.Name) - } - } - - notYetHandledAPIServices := expectedAPIServices.Difference(handledAPIServices) - if len(notYetHandledAPIServices) == 0 { - return true, nil - } - klog.Infof("still waiting on handling APIServices: %v", strings.Join(notYetHandledAPIServices.List(), ",")) - - return false, nil - }, context.StopCh) - return err - }) if openAPIConfig != nil { specDownloader := openapiaggregator.NewDownloader() @@ -310,16 +257,9 @@ func (s *APIAggregator) AddAPIService(apiService *apiregistration.APIService) er } proxyHandler.updateAPIService(apiService) if s.openAPIAggregationController != nil { - // this is calling a controller. It should already handle being async. - go func() { - defer utilruntime.HandleCrash() - s.openAPIAggregationController.AddAPIService(proxyHandler, apiService) - }() + s.openAPIAggregationController.AddAPIService(proxyHandler, apiService) } - // we want to update the registration bit last after all the pieces are wired together - defer func() { - s.proxyHandlers[apiService.Name] = proxyHandler - }() + s.proxyHandlers[apiService.Name] = proxyHandler s.GenericAPIServer.Handler.NonGoRestfulMux.Handle(proxyPath, proxyHandler) s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandlePrefix(proxyPath+"/", proxyHandler) @@ -333,18 +273,6 @@ func (s *APIAggregator) AddAPIService(apiService *apiregistration.APIService) er return nil } - // For some resources we always want to delegate to local API server. - // These resources have to exists as CRD to be served locally. - for _, alwaysLocalDelegatePath := range alwaysLocalDelegatePathPrefixes.List() { - if s.handledAlwaysLocalDelegatePaths.Has(alwaysLocalDelegatePath) { - continue - } - s.GenericAPIServer.Handler.NonGoRestfulMux.Handle(alwaysLocalDelegatePath, proxyHandler.localDelegate) - // Always use local delegate for this prefix - s.GenericAPIServer.Handler.NonGoRestfulMux.UnlistedHandlePrefix(alwaysLocalDelegatePath+"/", proxyHandler.localDelegate) - s.handledAlwaysLocalDelegatePaths.Insert(alwaysLocalDelegatePath) - } - // it's time to register the group aggregation endpoint groupPath := "/apis/" + apiService.Spec.Group groupDiscoveryHandler := &apiGroupHandler{ diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go index 26d83af3b..b74143fea 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/apiservice_controller.go @@ -20,13 +20,13 @@ import ( "fmt" "time" + "k8s.io/klog" + apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/labels" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/cache" "k8s.io/client-go/util/workqueue" - "k8s.io/klog" "k8s.io/kube-aggregator/pkg/apis/apiregistration" informers "k8s.io/kube-aggregator/pkg/client/informers/internalversion/apiregistration/internalversion" @@ -169,15 +169,3 @@ func (c *APIServiceRegistrationController) deleteAPIService(obj interface{}) { klog.V(4).Infof("Deleting %q", castObj.Name) c.enqueue(castObj) } - -// resyncAll queues all apiservices to be rehandled. -func (c *APIServiceRegistrationController) resyncAll() { - apiServices, err := c.apiServiceLister.List(labels.Everything()) - if err != nil { - utilruntime.HandleError(err) - return - } - for _, apiService := range apiServices { - c.addAPIService(apiService) - } -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go index f736f2d68..ee3433212 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy.go @@ -22,8 +22,9 @@ import ( "net/url" "sync/atomic" + "k8s.io/klog" + "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/httpstream" "k8s.io/apimachinery/pkg/util/httpstream/spdy" utilnet "k8s.io/apimachinery/pkg/util/net" @@ -35,14 +36,11 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" restclient "k8s.io/client-go/rest" "k8s.io/client-go/transport" - "k8s.io/klog" apiregistrationapi "k8s.io/kube-aggregator/pkg/apis/apiregistration" ) const aggregatorComponent string = "aggregator" -type certFunc func() []byte - // proxyHandler provides a http.Handler which will proxy traffic to locations // specified by items implementing Redirector. type proxyHandler struct { @@ -51,8 +49,8 @@ type proxyHandler struct { // proxyClientCert/Key are the client cert used to identify this proxy. Backing APIServices use // this to confirm the proxy's identity - proxyClientCert certFunc - proxyClientKey certFunc + proxyClientCert []byte + proxyClientKey []byte proxyTransport *http.Transport // Endpoints based routing to map from cluster IP to routable IP @@ -111,14 +109,6 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) { return } - // some groupResources should always be delegated - if requestInfo, ok := genericapirequest.RequestInfoFrom(req.Context()); ok { - if alwaysLocalDelegateGroupResource[schema.GroupResource{Group: requestInfo.APIGroup, Resource: requestInfo.Resource}] { - r.localDelegate.ServeHTTP(w, req) - return - } - } - if !handlingInfo.serviceAvailable { proxyError(w, req, "service unavailable", http.StatusServiceUnavailable) return @@ -229,8 +219,8 @@ func (r *proxyHandler) updateAPIService(apiService *apiregistrationapi.APIServic TLSClientConfig: restclient.TLSClientConfig{ Insecure: apiService.Spec.InsecureSkipTLSVerify, ServerName: apiService.Spec.Service.Name + "." + apiService.Spec.Service.Namespace + ".svc", - CertData: r.proxyClientCert(), - KeyData: r.proxyClientKey(), + CertData: r.proxyClientCert, + KeyData: r.proxyClientKey, CAData: apiService.Spec.CABundle, }, }, diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go index 757da04c9..aa54adfff 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/handler_proxy_test.go @@ -88,10 +88,6 @@ func (r *mockedRouter) ResolveEndpoint(namespace, name string) (*url.URL, error) return &url.URL{Scheme: "https", Host: r.destinationHost}, r.err } -func emptyCert() []byte { - return []byte{} -} - func TestProxyHandler(t *testing.T) { target := &targetHTTPHandler{} targetServer := httptest.NewUnstartedServer(target) @@ -279,8 +275,6 @@ func TestProxyHandler(t *testing.T) { localDelegate: http.NewServeMux(), serviceResolver: serviceResolver, proxyTransport: &http.Transport{}, - proxyClientCert: emptyCert, - proxyClientKey: emptyCert, } server := httptest.NewServer(contextHandler(handler, tc.user)) defer server.Close() @@ -424,8 +418,6 @@ func TestProxyUpgrade(t *testing.T) { proxyHandler := &proxyHandler{ serviceResolver: &mockedRouter{destinationHost: serverURL.Host}, proxyTransport: &http.Transport{}, - proxyClientCert: emptyCert, - proxyClientKey: emptyCert, } proxyHandler.updateAPIService(tc.APIService) aggregator := httptest.NewServer(contextHandler(proxyHandler, &user.DefaultInfo{Name: "username"})) diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/patch_always_local_delegate.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/patch_always_local_delegate.go deleted file mode 100644 index f7169c0d1..000000000 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/apiserver/patch_always_local_delegate.go +++ /dev/null @@ -1,49 +0,0 @@ -package apiserver - -import ( - "fmt" - "strings" - - "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/util/sets" -) - -// alwaysLocalDelegatePrefixes specify a list of API paths that we want to delegate to Kubernetes API server -// instead of handling with OpenShift API server. -var alwaysLocalDelegatePathPrefixes = sets.NewString() - -// AddAlwaysLocalDelegateForPrefix will cause the given URL prefix always be served by local API server (kube apiserver). -// This allows to move some resources from aggregated API server into CRD. -func AddAlwaysLocalDelegateForPrefix(prefix string) { - if alwaysLocalDelegatePathPrefixes.Has(prefix) { - return - } - alwaysLocalDelegatePathPrefixes.Insert(prefix) -} - -var overlappingGroupVersion = map[schema.GroupVersion]bool{} - -// AddOverlappingGroupVersion will stop the CRD registration controller from trying to manage an APIService. -func AddOverlappingGroupVersion(groupVersion schema.GroupVersion) { - overlappingGroupVersion[groupVersion] = true -} - -var alwaysLocalDelegateGroupResource = map[schema.GroupResource]bool{} - -func AddAlwaysLocalDelegateGroupResource(groupResource schema.GroupResource) { - alwaysLocalDelegateGroupResource[groupResource] = true -} - -func APIServiceAlreadyExists(groupVersion schema.GroupVersion) bool { - if overlappingGroupVersion[groupVersion] { - return true - } - - testPrefix := fmt.Sprintf("/apis/%s/%s/", groupVersion.Group, groupVersion.Version) - for _, prefix := range alwaysLocalDelegatePathPrefixes.List() { - if strings.HasPrefix(prefix, testPrefix) { - return true - } - } - return false -} diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go index f67470a84..9dd8d7021 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/cmd/server/start.go @@ -19,6 +19,7 @@ package server import ( "fmt" "io" + "io/ioutil" "github.com/spf13/cobra" "github.com/spf13/pflag" @@ -141,8 +142,15 @@ func (o AggregatorOptions) RunAggregator(stopCh <-chan struct{}) error { }, } - config.ExtraConfig.ProxyClientCert = o.ProxyClientCertFile - config.ExtraConfig.ProxyClientKey = o.ProxyClientKeyFile + var err error + config.ExtraConfig.ProxyClientCert, err = ioutil.ReadFile(o.ProxyClientCertFile) + if err != nil { + return err + } + config.ExtraConfig.ProxyClientKey, err = ioutil.ReadFile(o.ProxyClientKeyFile) + if err != nil { + return err + } server, err := config.Complete().NewWithDelegate(genericapiserver.NewEmptyDelegate()) if err != nil { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go index 7fb0dcb97..c360e4b0f 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/aggregator/aggregator.go @@ -202,16 +202,15 @@ func (s *specAggregator) tryUpdatingServiceSpecs(specInfo *openAPISpecInfo) erro if specInfo == nil { return fmt.Errorf("invalid input: specInfo must be non-nil") } - origSpecInfo, existedBefore := s.openAPISpecs[specInfo.apiService.Name] - s.openAPISpecs[specInfo.apiService.Name] = specInfo - + orgSpecInfo, exists := s.openAPISpecs[specInfo.apiService.Name] // Skip aggregation if OpenAPI spec didn't change - if existedBefore && origSpecInfo != nil && origSpecInfo.etag == specInfo.etag { + if exists && orgSpecInfo != nil && orgSpecInfo.etag == specInfo.etag { return nil } + s.openAPISpecs[specInfo.apiService.Name] = specInfo if err := s.updateOpenAPISpec(); err != nil { - if existedBefore { - s.openAPISpecs[specInfo.apiService.Name] = origSpecInfo + if exists { + s.openAPISpecs[specInfo.apiService.Name] = orgSpecInfo } else { delete(s.openAPISpecs, specInfo.apiService.Name) } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/controller.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/controller.go index 6e1dac7b9..ea8de1215 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/controller.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/openapi/controller.go @@ -99,13 +99,7 @@ func (c *AggregationController) processNextWorkItem() bool { return false } - if aggregator.IsLocalAPIService(key.(string)) { - // for local delegation targets that are aggregated once per second, log at - // higher level to avoid flooding the log - klog.V(5).Infof("OpenAPI AggregationController: Processing item %s", key) - } else { - klog.Infof("OpenAPI AggregationController: Processing item %s", key) - } + klog.Infof("OpenAPI AggregationController: Processing item %s", key) action, err := c.syncHandler(key.(string)) if err == nil { diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/BUILD b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/BUILD index cfa96422e..1026e9bd8 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/BUILD +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/BUILD @@ -26,9 +26,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", - "//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/tools/cache:go_default_library", - "//staging/src/k8s.io/client-go/transport:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration:go_default_library", "//staging/src/k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset/typed/apiregistration/internalversion:go_default_library", diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go index 004032f65..acbd5c089 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/available_controller.go @@ -17,12 +17,15 @@ limitations under the License. package apiserver import ( + "crypto/tls" "fmt" "net/http" "net/url" "time" - v1 "k8s.io/api/core/v1" + "k8s.io/klog" + + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/equality" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" @@ -33,11 +36,9 @@ import ( "k8s.io/apimachinery/pkg/util/wait" v1informers "k8s.io/client-go/informers/core/v1" v1listers "k8s.io/client-go/listers/core/v1" - "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" - "k8s.io/client-go/transport" "k8s.io/client-go/util/workqueue" - "k8s.io/klog" + "k8s.io/kube-aggregator/pkg/apis/apiregistration" apiregistrationclient "k8s.io/kube-aggregator/pkg/client/clientset_generated/internalclientset/typed/apiregistration/internalversion" informers "k8s.io/kube-aggregator/pkg/client/informers/internalversion/apiregistration/internalversion" @@ -45,8 +46,6 @@ import ( "k8s.io/kube-aggregator/pkg/controllers" ) -type certFunc func() []byte - // ServiceResolver knows how to convert a service reference into an actual location. type ServiceResolver interface { ResolveEndpoint(namespace, name string) (*url.URL, error) @@ -66,9 +65,7 @@ type AvailableConditionController struct { endpointsLister v1listers.EndpointsLister endpointsSynced cache.InformerSynced - proxyTransport *http.Transport - proxyClientCert certFunc - proxyClientKey certFunc + discoveryClient *http.Client serviceResolver ServiceResolver // To allow injection for testing. @@ -84,10 +81,8 @@ func NewAvailableConditionController( endpointsInformer v1informers.EndpointsInformer, apiServiceClient apiregistrationclient.APIServicesGetter, proxyTransport *http.Transport, - proxyClientCert certFunc, - proxyClientKey certFunc, serviceResolver ServiceResolver, -) (*AvailableConditionController, error) { +) *AvailableConditionController { c := &AvailableConditionController{ apiServiceClient: apiServiceClient, apiServiceLister: apiServiceInformer.Lister(), @@ -103,11 +98,22 @@ func NewAvailableConditionController( // the maximum disruption time to a minimum, but it does prevent hot loops. workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 30*time.Second), "AvailableConditionController"), - proxyTransport: proxyTransport, - proxyClientCert: proxyClientCert, - proxyClientKey: proxyClientKey, } + // construct an http client that will ignore TLS verification (if someone owns the network and messes with your status + // that's not so bad) and sets a very short timeout. + discoveryClient := &http.Client{ + Transport: &http.Transport{ + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + }, + // the request should happen quickly. + Timeout: 5 * time.Second, + } + if proxyTransport != nil { + discoveryClient.Transport = proxyTransport + } + c.discoveryClient = discoveryClient + // resync on this one because it is low cardinality and rechecking the actual discovery // allows us to detect health in a more timely fashion when network connectivity to // nodes is snipped, but the network still attempts to route there. See @@ -134,7 +140,7 @@ func NewAvailableConditionController( c.syncFn = c.sync - return c, nil + return c } func (c *AvailableConditionController) sync(key string) error { @@ -146,29 +152,6 @@ func (c *AvailableConditionController) sync(key string) error { return err } - // if a particular transport was specified, use that otherwise build one - // construct an http client that will ignore TLS verification (if someone owns the network and messes with your status - // that's not so bad) and sets a very short timeout. This is a best effort GET that provides no additional information - restConfig := &rest.Config{ - TLSClientConfig: rest.TLSClientConfig{ - Insecure: true, - CertData: c.proxyClientCert(), - KeyData: c.proxyClientKey(), - }, - } - if c.proxyTransport != nil && c.proxyTransport.DialContext != nil { - restConfig.Dial = c.proxyTransport.DialContext - } - restTransport, err := rest.TransportFor(restConfig) - if err != nil { - panic(err) - } - discoveryClient := &http.Client{ - Transport: restTransport, - // the request should happen quickly. - Timeout: 5 * time.Second, - } - apiService := originalAPIService.DeepCopy() availableCondition := apiregistration.APIServiceCondition{ @@ -252,70 +235,33 @@ func (c *AvailableConditionController) sync(key string) error { } // actually try to hit the discovery endpoint when it isn't local and when we're routing as a service. if apiService.Spec.Service != nil && c.serviceResolver != nil { - attempts := 5 - results := make(chan error, attempts) - for i := 0; i < attempts; i++ { - go func() { - discoveryURL, err := c.serviceResolver.ResolveEndpoint(apiService.Spec.Service.Namespace, apiService.Spec.Service.Name) - if err != nil { - results <- err - return - } - - errCh := make(chan error) - go func() { - newReq, err := http.NewRequest("GET", discoveryURL.String(), nil) - if err != nil { - errCh <- err - return - } - - // setting the system-masters identity ensures that we will always have access rights - transport.SetAuthProxyHeaders(newReq, "system:kube-aggregator", []string{"system:masters"}, nil) - resp, err := discoveryClient.Do(newReq) - if resp != nil { - resp.Body.Close() - // we should always been in the 200s or 300s - if resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusMultipleChoices { - errCh <- fmt.Errorf("bad status from %v: %v", discoveryURL, resp.StatusCode) - return - } - } - - errCh <- err - }() - - select { - case err = <-errCh: - if err != nil { - results <- fmt.Errorf("failing or missing response from %v: %v", discoveryURL, err) - return - } - - // we had trouble with slow dial and DNS responses causing us to wait too long. - // we added this as insurance - case <-time.After(6 * time.Second): - results <- fmt.Errorf("timed out waiting for %v", discoveryURL) - return - } - - results <- nil - }() + discoveryURL, err := c.serviceResolver.ResolveEndpoint(apiService.Spec.Service.Namespace, apiService.Spec.Service.Name) + if err != nil { + return err } - var lastError error - for i := 0; i < attempts; i++ { - lastError = <-results - // if we had at least one success, we are successful overall and we can return now - if lastError == nil { - break + errCh := make(chan error) + go func() { + resp, err := c.discoveryClient.Get(discoveryURL.String()) + if resp != nil { + resp.Body.Close() } + errCh <- err + }() + + select { + case err = <-errCh: + + // we had trouble with slow dial and DNS responses causing us to wait too long. + // we added this as insurance + case <-time.After(6 * time.Second): + err = fmt.Errorf("timed out waiting for %v", discoveryURL) } - if lastError != nil { + if err != nil { availableCondition.Status = apiregistration.ConditionFalse availableCondition.Reason = "FailedDiscoveryCheck" - availableCondition.Message = lastError.Error() + availableCondition.Message = fmt.Sprintf("no response from %v: %v", discoveryURL, err) apiregistration.SetAPIServiceCondition(apiService, availableCondition) _, updateErr := updateAPIServiceStatus(c.apiServiceClient, originalAPIService, apiService) if updateErr != nil { @@ -323,7 +269,7 @@ func (c *AvailableConditionController) sync(key string) error { } // force a requeue to make it very obvious that this will be retried at some point in the future // along with other requeues done via service change, endpoint change, and resync - return lastError + return err } } diff --git a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/available_controller_test.go b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/available_controller_test.go index 9bf624e9c..5feec0e18 100644 --- a/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/available_controller_test.go +++ b/vendor/k8s.io/kubernetes/staging/src/k8s.io/kube-aggregator/pkg/controllers/status/available_controller_test.go @@ -17,15 +17,11 @@ limitations under the License. package apiserver import ( - "net/http" - "net/http/httptest" - "net/url" - "strings" "testing" "github.com/davecgh/go-spew/spew" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1listers "k8s.io/client-go/listers/core/v1" clienttesting "k8s.io/client-go/testing" @@ -90,12 +86,10 @@ func TestSync(t *testing.T) { tests := []struct { name string - apiServiceName string - apiServices []*apiregistration.APIService - services []*v1.Service - endpoints []*v1.Endpoints - forceDiscoveryFail bool - + apiServiceName string + apiServices []*apiregistration.APIService + services []*v1.Service + endpoints []*v1.Endpoints expectedAvailability apiregistration.APIServiceCondition }{ { @@ -180,98 +174,66 @@ func TestSync(t *testing.T) { Message: `all checks passed`, }, }, - { - name: "remote-bad-return", - apiServiceName: "remote.group", - apiServices: []*apiregistration.APIService{newRemoteAPIService("remote.group")}, - services: []*v1.Service{newService("foo", "bar")}, - endpoints: []*v1.Endpoints{newEndpointsWithAddress("foo", "bar")}, - forceDiscoveryFail: true, - expectedAvailability: apiregistration.APIServiceCondition{ - Type: apiregistration.Available, - Status: apiregistration.ConditionFalse, - Reason: "FailedDiscoveryCheck", - Message: `failing or missing response from`, - }, - }, } for _, tc := range tests { - t.Run(tc.name, func(t *testing.T) { - fakeClient := fake.NewSimpleClientset() - apiServiceIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) - serviceIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) - endpointsIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) - for _, obj := range tc.apiServices { - apiServiceIndexer.Add(obj) - } - for _, obj := range tc.services { - serviceIndexer.Add(obj) - } - for _, obj := range tc.endpoints { - endpointsIndexer.Add(obj) - } - - testServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if !tc.forceDiscoveryFail { - w.WriteHeader(http.StatusOK) - } - w.WriteHeader(http.StatusForbidden) - })) - defer testServer.Close() - - c := AvailableConditionController{ - apiServiceClient: fakeClient.Apiregistration(), - apiServiceLister: listers.NewAPIServiceLister(apiServiceIndexer), - serviceLister: v1listers.NewServiceLister(serviceIndexer), - endpointsLister: v1listers.NewEndpointsLister(endpointsIndexer), - proxyClientCert: emptyCert, - proxyClientKey: emptyCert, - serviceResolver: &fakeServiceResolver{url: testServer.URL}, - } - c.sync(tc.apiServiceName) - - // ought to have one action writing status - if e, a := 1, len(fakeClient.Actions()); e != a { - t.Fatalf("%v expected %v, got %v", tc.name, e, fakeClient.Actions()) - } - - action, ok := fakeClient.Actions()[0].(clienttesting.UpdateAction) - if !ok { - t.Fatalf("%v got %v", tc.name, ok) - } - - if e, a := 1, len(action.GetObject().(*apiregistration.APIService).Status.Conditions); e != a { - t.Fatalf("%v expected %v, got %v", tc.name, e, action.GetObject()) - } - condition := action.GetObject().(*apiregistration.APIService).Status.Conditions[0] - if e, a := tc.expectedAvailability.Type, condition.Type; e != a { - t.Errorf("%v expected %v, got %#v", tc.name, e, condition) - } - if e, a := tc.expectedAvailability.Status, condition.Status; e != a { - t.Errorf("%v expected %v, got %#v", tc.name, e, condition) - } - if e, a := tc.expectedAvailability.Reason, condition.Reason; e != a { - t.Errorf("%v expected %v, got %#v", tc.name, e, condition) - } - if e, a := tc.expectedAvailability.Message, condition.Message; !strings.HasPrefix(a, e) { - t.Errorf("%v expected %v, got %#v", tc.name, e, condition) - } - if condition.LastTransitionTime.IsZero() { - t.Error("expected lastTransitionTime to be non-zero") - } - }) + fakeClient := fake.NewSimpleClientset() + apiServiceIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) + serviceIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) + endpointsIndexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) + for _, obj := range tc.apiServices { + apiServiceIndexer.Add(obj) + } + for _, obj := range tc.services { + serviceIndexer.Add(obj) + } + for _, obj := range tc.endpoints { + endpointsIndexer.Add(obj) + } + + c := AvailableConditionController{ + apiServiceClient: fakeClient.Apiregistration(), + apiServiceLister: listers.NewAPIServiceLister(apiServiceIndexer), + serviceLister: v1listers.NewServiceLister(serviceIndexer), + endpointsLister: v1listers.NewEndpointsLister(endpointsIndexer), + } + c.sync(tc.apiServiceName) + + // ought to have one action writing status + if e, a := 1, len(fakeClient.Actions()); e != a { + t.Errorf("%v expected %v, got %v", tc.name, e, fakeClient.Actions()) + continue + } + + action, ok := fakeClient.Actions()[0].(clienttesting.UpdateAction) + if !ok { + t.Errorf("%v got %v", tc.name, ok) + continue + } + + if e, a := 1, len(action.GetObject().(*apiregistration.APIService).Status.Conditions); e != a { + t.Errorf("%v expected %v, got %v", tc.name, e, action.GetObject()) + continue + } + condition := action.GetObject().(*apiregistration.APIService).Status.Conditions[0] + if e, a := tc.expectedAvailability.Type, condition.Type; e != a { + t.Errorf("%v expected %v, got %#v", tc.name, e, condition) + } + if e, a := tc.expectedAvailability.Status, condition.Status; e != a { + t.Errorf("%v expected %v, got %#v", tc.name, e, condition) + } + if e, a := tc.expectedAvailability.Reason, condition.Reason; e != a { + t.Errorf("%v expected %v, got %#v", tc.name, e, condition) + } + if e, a := tc.expectedAvailability.Message, condition.Message; e != a { + t.Errorf("%v expected %v, got %#v", tc.name, e, condition) + } + if condition.LastTransitionTime.IsZero() { + t.Error("expected lastTransitionTime to be non-zero") + } } } -type fakeServiceResolver struct { - url string -} - -func (f *fakeServiceResolver) ResolveEndpoint(namespace, name string) (*url.URL, error) { - return url.Parse(f.url) -} - func TestUpdateAPIServiceStatus(t *testing.T) { foo := &apiregistration.APIService{Status: apiregistration.APIServiceStatus{Conditions: []apiregistration.APIServiceCondition{{Type: "foo"}}}} bar := &apiregistration.APIService{Status: apiregistration.APIServiceStatus{Conditions: []apiregistration.APIServiceCondition{{Type: "bar"}}}} @@ -287,8 +249,5 @@ func TestUpdateAPIServiceStatus(t *testing.T) { if e, a := 1, len(fakeClient.Actions()); e != a { t.Error(spew.Sdump(fakeClient.Actions())) } -} -func emptyCert() []byte { - return []byte{} } diff --git a/vendor/k8s.io/kubernetes/test/e2e/apimachinery/crd_publish_openapi.go b/vendor/k8s.io/kubernetes/test/e2e/apimachinery/crd_publish_openapi.go index 36aed720d..068481efd 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/apimachinery/crd_publish_openapi.go +++ b/vendor/k8s.io/kubernetes/test/e2e/apimachinery/crd_publish_openapi.go @@ -19,8 +19,6 @@ package apimachinery import ( "encoding/json" "fmt" - "io/ioutil" - "net/http" "regexp" "strings" "time" @@ -37,7 +35,6 @@ import ( "k8s.io/apimachinery/pkg/util/wait" utilyaml "k8s.io/apimachinery/pkg/util/yaml" k8sclientset "k8s.io/client-go/kubernetes" - "k8s.io/client-go/rest" openapiutil "k8s.io/kube-openapi/pkg/util" "k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/utils/crd" @@ -392,23 +389,6 @@ func patchSchema(schema []byte, crd *crd.TestCrd) error { return err } -const waitSuccessThreshold = 10 - -// mustSucceedMultipleTimes calls f multiple times on success and only returns true if all calls are successful. -// This is necessary to avoid flaking tests where one call might hit a good apiserver while in HA other apiservers -// might be lagging behind. Calling f multiple times reduces the chance exponentially. -func mustSucceedMultipleTimes(n int, f func() (bool, error)) func() (bool, error) { - return func() (bool, error) { - for i := 0; i < n; i++ { - ok, err := f() - if err != nil || !ok { - return ok, err - } - } - return true, nil - } -} - // waitForDefinition waits for given definition showing up in swagger with given schema func waitForDefinition(c k8sclientset.Interface, name string, schema []byte) error { expect := spec.Schema{} @@ -416,78 +396,54 @@ func waitForDefinition(c k8sclientset.Interface, name string, schema []byte) err return err } - err := waitForOpenAPISchema(c, func(spec *spec.Swagger) (bool, string) { + lastMsg := "" + if err := wait.Poll(500*time.Millisecond, 10*time.Second, func() (bool, error) { + bs, err := c.CoreV1().RESTClient().Get().AbsPath("openapi", "v2").DoRaw() + if err != nil { + return false, err + } + spec := spec.Swagger{} + if err := json.Unmarshal(bs, &spec); err != nil { + return false, err + } d, ok := spec.SwaggerProps.Definitions[name] if !ok { - return false, fmt.Sprintf("spec.SwaggerProps.Definitions[\"%s\"] not found", name) + lastMsg = fmt.Sprintf("spec.SwaggerProps.Definitions[\"%s\"] not found", name) + return false, nil } // drop properties and extension that we added dropDefaults(&d) if !apiequality.Semantic.DeepEqual(expect, d) { - return false, fmt.Sprintf("spec.SwaggerProps.Definitions[\"%s\"] not match; expect: %v, actual: %v", name, expect, d) + lastMsg = fmt.Sprintf("spec.SwaggerProps.Definitions[\"%s\"] not match; expect: %v, actual: %v", name, expect, d) + return false, nil } - return true, "" - }) - if err != nil { - return fmt.Errorf("failed to wait for definition %q to be served with the right OpenAPI schema: %v", name, err) + return true, nil + }); err != nil { + return fmt.Errorf("failed to wait for definition %s to be served: %v; lastMsg: %s", name, err, lastMsg) } return nil } // waitForDefinitionCleanup waits for given definition to be removed from swagger func waitForDefinitionCleanup(c k8sclientset.Interface, name string) error { - err := waitForOpenAPISchema(c, func(spec *spec.Swagger) (bool, string) { - if _, ok := spec.SwaggerProps.Definitions[name]; ok { - return false, fmt.Sprintf("spec.SwaggerProps.Definitions[\"%s\"] still exists", name) - } - return true, "" - }) - if err != nil { - return fmt.Errorf("failed to wait for definition %q not to be served anymore: %v", name, err) - } - return nil -} - -func waitForOpenAPISchema(c k8sclientset.Interface, pred func(*spec.Swagger) (bool, string)) error { - client := c.CoreV1().RESTClient().(*rest.RESTClient).Client - url := c.CoreV1().RESTClient().Get().AbsPath("openapi", "v2").URL() lastMsg := "" - etag := "" - var etagSpec *spec.Swagger - if err := wait.Poll(500*time.Millisecond, wait.ForeverTestTimeout, mustSucceedMultipleTimes(waitSuccessThreshold, func() (bool, error) { - // download spec with etag support - spec := &spec.Swagger{} - req, err := http.NewRequest("GET", url.String(), nil) + if err := wait.Poll(500*time.Millisecond, 10*time.Second, func() (bool, error) { + bs, err := c.CoreV1().RESTClient().Get().AbsPath("openapi", "v2").DoRaw() if err != nil { return false, err } - req.Close = true // enforce a new connection to hit different HA API servers - if len(etag) > 0 { - req.Header.Set("If-None-Match", fmt.Sprintf(`"%s"`, etag)) - } - resp, err := client.Do(req) - if err != nil { + spec := spec.Swagger{} + if err := json.Unmarshal(bs, &spec); err != nil { return false, err } - defer resp.Body.Close() - if resp.StatusCode == http.StatusNotModified { - spec = etagSpec - } else if resp.StatusCode != http.StatusOK { - return false, fmt.Errorf("unexpected response: %d", resp.StatusCode) - } else if bs, err := ioutil.ReadAll(resp.Body); err != nil { - return false, err - } else if err := json.Unmarshal(bs, spec); err != nil { - return false, err - } else { - etag = strings.Trim(resp.Header.Get("ETag"), `"`) - etagSpec = spec + _, ok := spec.SwaggerProps.Definitions[name] + if ok { + lastMsg = fmt.Sprintf("spec.SwaggerProps.Definitions[\"%s\"] still exists", name) + return false, nil } - - var ok bool - ok, lastMsg = pred(spec) - return ok, nil - })); err != nil { - return fmt.Errorf("failed to wait for OpenAPI spec validating condition: %v; lastMsg: %s", err, lastMsg) + return true, nil + }); err != nil { + return fmt.Errorf("failed to wait for definition %s to be removed: %v; lastMsg: %s", name, err, lastMsg) } return nil } diff --git a/vendor/k8s.io/kubernetes/test/e2e/apimachinery/resource_quota.go b/vendor/k8s.io/kubernetes/test/e2e/apimachinery/resource_quota.go index e52e81d0a..0bb69bbd0 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/apimachinery/resource_quota.go +++ b/vendor/k8s.io/kubernetes/test/e2e/apimachinery/resource_quota.go @@ -22,7 +22,7 @@ import ( "time" appsv1 "k8s.io/api/apps/v1" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" schedulingv1 "k8s.io/api/scheduling/v1" "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/resource" @@ -189,7 +189,7 @@ var _ = SIGDescribe("ResourceQuota", func() { limits := v1.ResourceList{} requests[v1.ResourceCPU] = resource.MustParse("500m") requests[v1.ResourceMemory] = resource.MustParse("252Mi") - //requests[v1.ResourceEphemeralStorage] = resource.MustParse("30Gi") + requests[v1.ResourceEphemeralStorage] = resource.MustParse("30Gi") requests[v1.ResourceName(extendedResourceName)] = resource.MustParse("2") limits[v1.ResourceName(extendedResourceName)] = resource.MustParse("2") pod := newTestPodForQuota(f, podName, requests, limits) @@ -202,7 +202,7 @@ var _ = SIGDescribe("ResourceQuota", func() { usedResources[v1.ResourcePods] = resource.MustParse("1") usedResources[v1.ResourceCPU] = requests[v1.ResourceCPU] usedResources[v1.ResourceMemory] = requests[v1.ResourceMemory] - //usedResources[v1.ResourceEphemeralStorage] = requests[v1.ResourceEphemeralStorage] + usedResources[v1.ResourceEphemeralStorage] = requests[v1.ResourceEphemeralStorage] usedResources[v1.ResourceName(v1.DefaultResourceRequestsPrefix+extendedResourceName)] = requests[v1.ResourceName(extendedResourceName)] err = waitForResourceQuota(f.ClientSet, f.Namespace.Name, quotaName, usedResources) Expect(err).NotTo(HaveOccurred()) @@ -220,7 +220,7 @@ var _ = SIGDescribe("ResourceQuota", func() { limits = v1.ResourceList{} requests[v1.ResourceCPU] = resource.MustParse("500m") requests[v1.ResourceMemory] = resource.MustParse("100Mi") - //requests[v1.ResourceEphemeralStorage] = resource.MustParse("30Gi") + requests[v1.ResourceEphemeralStorage] = resource.MustParse("30Gi") requests[v1.ResourceName(extendedResourceName)] = resource.MustParse("2") limits[v1.ResourceName(extendedResourceName)] = resource.MustParse("2") pod = newTestPodForQuota(f, "fail-pod-for-extended-resource", requests, limits) @@ -232,7 +232,7 @@ var _ = SIGDescribe("ResourceQuota", func() { requests = v1.ResourceList{} requests[v1.ResourceCPU] = resource.MustParse("100m") requests[v1.ResourceMemory] = resource.MustParse("100Mi") - //requests[v1.ResourceEphemeralStorage] = resource.MustParse("10Gi") + requests[v1.ResourceEphemeralStorage] = resource.MustParse("10Gi") podToUpdate.Spec.Containers[0].Resources.Requests = requests _, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Update(podToUpdate) Expect(err).To(HaveOccurred()) @@ -250,7 +250,7 @@ var _ = SIGDescribe("ResourceQuota", func() { usedResources[v1.ResourcePods] = resource.MustParse("0") usedResources[v1.ResourceCPU] = resource.MustParse("0") usedResources[v1.ResourceMemory] = resource.MustParse("0") - //usedResources[v1.ResourceEphemeralStorage] = resource.MustParse("0") + usedResources[v1.ResourceEphemeralStorage] = resource.MustParse("0") usedResources[v1.ResourceName(v1.DefaultResourceRequestsPrefix+extendedResourceName)] = resource.MustParse("0") err = waitForResourceQuota(f.ClientSet, f.Namespace.Name, quotaName, usedResources) Expect(err).NotTo(HaveOccurred()) @@ -1280,7 +1280,7 @@ func newTestResourceQuotaWithScopeForPriorityClass(name string, hard v1.Resource // newTestResourceQuotaForEphemeralStorage returns a quota that enforces default constraints for testing feature LocalStorageCapacityIsolation func newTestResourceQuotaForEphemeralStorage(name string) *v1.ResourceQuota { hard := v1.ResourceList{} - //hard[v1.ResourceEphemeralStorage] = resource.MustParse("500Mi") + hard[v1.ResourceEphemeralStorage] = resource.MustParse("500Mi") hard[v1.ResourceQuotas] = resource.MustParse("1") return &v1.ResourceQuota{ ObjectMeta: metav1.ObjectMeta{Name: name}, @@ -1303,7 +1303,7 @@ func newTestResourceQuota(name string) *v1.ResourceQuota { hard[v1.ResourceSecrets] = resource.MustParse("10") hard[v1.ResourcePersistentVolumeClaims] = resource.MustParse("10") hard[v1.ResourceRequestsStorage] = resource.MustParse("10Gi") - //hard[v1.ResourceEphemeralStorage] = resource.MustParse("50Gi") + hard[v1.ResourceEphemeralStorage] = resource.MustParse("50Gi") hard[core.V1ResourceByStorageClass(classGold, v1.ResourcePersistentVolumeClaims)] = resource.MustParse("10") hard[core.V1ResourceByStorageClass(classGold, v1.ResourceRequestsStorage)] = resource.MustParse("10Gi") // test quota on discovered resource type diff --git a/vendor/k8s.io/kubernetes/test/e2e/apps/statefulset.go b/vendor/k8s.io/kubernetes/test/e2e/apps/statefulset.go index d5a5b1aa5..2985d2df2 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/apps/statefulset.go +++ b/vendor/k8s.io/kubernetes/test/e2e/apps/statefulset.go @@ -94,7 +94,6 @@ var _ = SIGDescribe("StatefulSet", func() { // StorageClass and a dynamic provisioner. It("should provide basic identity", func() { By("Creating statefulset " + ssName + " in namespace " + ns) - framework.SkipIfNoDefaultStorageClass(c) *(ss.Spec.Replicas) = 3 sst := framework.NewStatefulSetTester(c) sst.PauseNewPods(ss) @@ -134,7 +133,6 @@ var _ = SIGDescribe("StatefulSet", func() { // StorageClass and a dynamic provisioner. It("should adopt matching orphans and release non-matching pods", func() { By("Creating statefulset " + ssName + " in namespace " + ns) - framework.SkipIfNoDefaultStorageClass(c) *(ss.Spec.Replicas) = 1 sst := framework.NewStatefulSetTester(c) sst.PauseNewPods(ss) @@ -220,7 +218,6 @@ var _ = SIGDescribe("StatefulSet", func() { // StorageClass and a dynamic provisioner. It("should not deadlock when a pod's predecessor fails", func() { By("Creating statefulset " + ssName + " in namespace " + ns) - framework.SkipIfNoDefaultStorageClass(c) *(ss.Spec.Replicas) = 2 sst := framework.NewStatefulSetTester(c) sst.PauseNewPods(ss) @@ -257,7 +254,6 @@ var _ = SIGDescribe("StatefulSet", func() { // StorageClass and a dynamic provisioner. It("should perform rolling updates and roll backs of template modifications with PVCs", func() { By("Creating a new StatefulSet with PVCs") - framework.SkipIfNoDefaultStorageClass(c) *(ss.Spec.Replicas) = 3 rollbackTest(c, ns, ss) }) diff --git a/vendor/k8s.io/kubernetes/test/e2e/common/pods.go b/vendor/k8s.io/kubernetes/test/e2e/common/pods.go index a9a1c3927..f9f4b7fac 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/common/pods.go +++ b/vendor/k8s.io/kubernetes/test/e2e/common/pods.go @@ -53,7 +53,7 @@ var ( // maxReadyStatusUpdateTolerance specifies the latency that allows kubelet to update pod status. // When kubelet is under heavy load (tests may be parallelized), the delay may be longer, hence // causing tests to be flaky. - maxReadyStatusUpdateTolerance = time.Minute + maxReadyStatusUpdateTolerance = 10 * time.Second ) // testHostIP tests that a pod gets a host IP diff --git a/vendor/k8s.io/kubernetes/test/e2e/framework/BUILD b/vendor/k8s.io/kubernetes/test/e2e/framework/BUILD index 6f47792b7..523b3c7ff 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/framework/BUILD +++ b/vendor/k8s.io/kubernetes/test/e2e/framework/BUILD @@ -48,7 +48,6 @@ go_library( "//pkg/apis/core:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/client/clientset_generated/internalclientset:go_default_library", - "//pkg/apis/storage/v1/util:go_default_library", "//pkg/client/conditions:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/deployment/util:go_default_library", diff --git a/vendor/k8s.io/kubernetes/test/e2e/framework/kubelet_stats.go b/vendor/k8s.io/kubernetes/test/e2e/framework/kubelet_stats.go index df6f86c2d..684d8cc50 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/framework/kubelet_stats.go +++ b/vendor/k8s.io/kubernetes/test/e2e/framework/kubelet_stats.go @@ -590,9 +590,6 @@ func (r *resourceCollector) collectStats(oldStatsMap map[string]*stats.Container } if oldStats, ok := oldStatsMap[name]; ok { - if oldStats.CPU == nil || cStats.CPU == nil || oldStats.Memory == nil || cStats.Memory == nil { - continue - } if oldStats.CPU.Time.Equal(&cStats.CPU.Time) { // No change -> skip this stat. continue diff --git a/vendor/k8s.io/kubernetes/test/e2e/framework/networking_utils.go b/vendor/k8s.io/kubernetes/test/e2e/framework/networking_utils.go index 07a438599..acaf74553 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/framework/networking_utils.go +++ b/vendor/k8s.io/kubernetes/test/e2e/framework/networking_utils.go @@ -27,7 +27,7 @@ import ( "time" . "github.com/onsi/ginkgo" - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/util/intstr" @@ -773,6 +773,8 @@ func PokeHTTP(host string, port int, path string, params *HTTPPokeParams) HTTPPo params.ExpectCode = http.StatusOK } + Logf("Poking %q", url) + resp, err := httpGetNoConnectionPoolTimeout(url, params.Timeout) if err != nil { ret.Error = err @@ -824,8 +826,7 @@ func PokeHTTP(host string, port int, path string, params *HTTPPokeParams) HTTPPo } ret.Status = HTTPSuccess - // causes excessive logging that provides no value - // Logf("Poke(%q): success", url) + Logf("Poke(%q): success", url) return ret } diff --git a/vendor/k8s.io/kubernetes/test/e2e/framework/pv_util.go b/vendor/k8s.io/kubernetes/test/e2e/framework/pv_util.go index 9f9de0e6c..bc6e5c97b 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/framework/pv_util.go +++ b/vendor/k8s.io/kubernetes/test/e2e/framework/pv_util.go @@ -29,7 +29,6 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/uuid" clientset "k8s.io/client-go/kubernetes" - storageutil "k8s.io/kubernetes/pkg/apis/storage/v1/util" "k8s.io/kubernetes/pkg/volume/util" imageutils "k8s.io/kubernetes/test/utils/image" ) @@ -961,33 +960,3 @@ func CreatePVSource(zone string) (*v1.PersistentVolumeSource, error) { func DeletePVSource(pvSource *v1.PersistentVolumeSource) error { return TestContext.CloudConfig.Provider.DeletePVSource(pvSource) } - -// GetDefaultStorageClassName returns default storageClass or return error -func GetDefaultStorageClassName(c clientset.Interface) (string, error) { - list, err := c.StorageV1().StorageClasses().List(metav1.ListOptions{}) - if err != nil { - return "", fmt.Errorf("Error listing storage classes: %v", err) - } - var scName string - for _, sc := range list.Items { - if storageutil.IsDefaultAnnotation(sc.ObjectMeta) { - if len(scName) != 0 { - return "", fmt.Errorf("Multiple default storage classes found: %q and %q", scName, sc.Name) - } - scName = sc.Name - } - } - if len(scName) == 0 { - return "", fmt.Errorf("No default storage class found") - } - Logf("Default storage class: %q", scName) - return scName, nil -} - -// SkipIfNoDefaultStorageClass skips tests if no default SC can be found. -func SkipIfNoDefaultStorageClass(c clientset.Interface) { - _, err := GetDefaultStorageClassName(c) - if err != nil { - Skipf("error finding default storageClass : %v", err) - } -} diff --git a/vendor/k8s.io/kubernetes/test/e2e/framework/util.go b/vendor/k8s.io/kubernetes/test/e2e/framework/util.go index b8f4aebc2..9dde19129 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/framework/util.go +++ b/vendor/k8s.io/kubernetes/test/e2e/framework/util.go @@ -558,23 +558,6 @@ func logPodStates(pods []v1.Pod) { Logf("") // Final empty line helps for readability. } -// logPodTerminationMessages logs termination messages for failing pods. It's a short snippet (much smaller than full logs), but it often shows -// why pods crashed and since it is in the API, it's fast to retrieve. -func logPodTerminationMessages(pods []v1.Pod) { - for _, pod := range pods { - for _, status := range pod.Status.InitContainerStatuses { - if status.LastTerminationState.Terminated != nil && len(status.LastTerminationState.Terminated.Message) > 0 { - Logf("%s[%s].initContainer[%s]=%s", pod.Name, pod.Namespace, status.Name, status.LastTerminationState.Terminated.Message) - } - } - for _, status := range pod.Status.ContainerStatuses { - if status.LastTerminationState.Terminated != nil && len(status.LastTerminationState.Terminated.Message) > 0 { - Logf("%s[%s].container[%s]=%s", pod.Name, pod.Namespace, status.Name, status.LastTerminationState.Terminated.Message) - } - } - } -} - // errorBadPodsStates create error message of basic info of bad pods for debugging. func errorBadPodsStates(badPods []v1.Pod, desiredPods int, ns, desiredState string, timeout time.Duration) string { errStr := fmt.Sprintf("%d / %d pods in namespace %q are NOT in %s state in %v\n", len(badPods), desiredPods, ns, desiredState, timeout) @@ -2541,8 +2524,6 @@ func DumpAllNamespaceInfo(c clientset.Interface, namespace string) { return c.CoreV1().Events(ns).List(opts) }, namespace) - dumpAllPodInfoForNamespace(c, namespace) - // If cluster is large, then the following logs are basically useless, because: // 1. it takes tens of minutes or hours to grab all of them // 2. there are so many of them that working with them are mostly impossible @@ -2550,6 +2531,7 @@ func DumpAllNamespaceInfo(c clientset.Interface, namespace string) { maxNodesForDump := TestContext.MaxNodesToGather if nodes, err := c.CoreV1().Nodes().List(metav1.ListOptions{}); err == nil { if len(nodes.Items) <= maxNodesForDump { + dumpAllPodInfo(c) dumpAllNodeInfo(c) } else { Logf("skipping dumping cluster info - cluster too large") @@ -2572,13 +2554,12 @@ func (o byFirstTimestamp) Less(i, j int) bool { return o[i].FirstTimestamp.Before(&o[j].FirstTimestamp) } -func dumpAllPodInfoForNamespace(c clientset.Interface, namespace string) { - pods, err := c.CoreV1().Pods(namespace).List(metav1.ListOptions{}) +func dumpAllPodInfo(c clientset.Interface) { + pods, err := c.CoreV1().Pods("").List(metav1.ListOptions{}) if err != nil { Logf("unable to fetch pod debug info: %v", err) } logPodStates(pods.Items) - logPodTerminationMessages(pods.Items) } func dumpAllNodeInfo(c clientset.Interface) { diff --git a/vendor/k8s.io/kubernetes/test/e2e/generated/bindata.go b/vendor/k8s.io/kubernetes/test/e2e/generated/bindata.go deleted file mode 100644 index 21efdd694..000000000 --- a/vendor/k8s.io/kubernetes/test/e2e/generated/bindata.go +++ /dev/null @@ -1,9572 +0,0 @@ -// Code generated by go-bindata. -// sources: -// test/e2e/testing-manifests/flexvolume/attachable-with-long-mount -// test/e2e/testing-manifests/flexvolume/dummy -// test/e2e/testing-manifests/flexvolume/dummy-attachable -// test/e2e/testing-manifests/guestbook/frontend-deployment.yaml.in -// test/e2e/testing-manifests/guestbook/frontend-service.yaml -// test/e2e/testing-manifests/guestbook/legacy/frontend-controller.yaml -// test/e2e/testing-manifests/guestbook/legacy/redis-master-controller.yaml -// test/e2e/testing-manifests/guestbook/legacy/redis-slave-controller.yaml -// test/e2e/testing-manifests/guestbook/redis-master-deployment.yaml.in -// test/e2e/testing-manifests/guestbook/redis-master-service.yaml -// test/e2e/testing-manifests/guestbook/redis-slave-deployment.yaml.in -// test/e2e/testing-manifests/guestbook/redis-slave-service.yaml -// test/e2e/testing-manifests/ingress/gce/static-ip-2/ing.yaml -// test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml -// test/e2e/testing-manifests/ingress/gce/static-ip-2/svc.yaml -// test/e2e/testing-manifests/ingress/http/ing.yaml -// test/e2e/testing-manifests/ingress/http/rc.yaml -// test/e2e/testing-manifests/ingress/http/svc.yaml -// test/e2e/testing-manifests/ingress/http2/ing.yaml -// test/e2e/testing-manifests/ingress/http2/rc.yaml -// test/e2e/testing-manifests/ingress/http2/svc.yaml -// test/e2e/testing-manifests/ingress/multiple-certs/ing.yaml -// test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml -// test/e2e/testing-manifests/ingress/multiple-certs/svc.yaml -// test/e2e/testing-manifests/ingress/neg/ing.yaml -// test/e2e/testing-manifests/ingress/neg/rc.yaml -// test/e2e/testing-manifests/ingress/neg/svc.yaml -// test/e2e/testing-manifests/ingress/neg-clusterip/ing.yaml -// test/e2e/testing-manifests/ingress/neg-clusterip/rc.yaml -// test/e2e/testing-manifests/ingress/neg-clusterip/svc.yaml -// test/e2e/testing-manifests/ingress/neg-exposed/ing.yaml -// test/e2e/testing-manifests/ingress/neg-exposed/rc.yaml -// test/e2e/testing-manifests/ingress/neg-exposed/svc.yaml -// test/e2e/testing-manifests/ingress/nginx/rc.yaml -// test/e2e/testing-manifests/ingress/pre-shared-cert/ing.yaml -// test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml -// test/e2e/testing-manifests/ingress/pre-shared-cert/svc.yaml -// test/e2e/testing-manifests/ingress/static-ip/ing.yaml -// test/e2e/testing-manifests/ingress/static-ip/rc.yaml -// test/e2e/testing-manifests/ingress/static-ip/secret.yaml -// test/e2e/testing-manifests/ingress/static-ip/svc.yaml -// test/e2e/testing-manifests/kubectl/busybox-pod.yaml -// test/e2e/testing-manifests/kubectl/nginx-deployment1.yaml.in -// test/e2e/testing-manifests/kubectl/nginx-deployment2.yaml.in -// test/e2e/testing-manifests/kubectl/nginx-deployment3.yaml.in -// test/e2e/testing-manifests/kubectl/pause-pod.yaml.in -// test/e2e/testing-manifests/kubectl/pod-with-readiness-probe.yaml.in -// test/e2e/testing-manifests/kubectl/redis-master-controller.json.in -// test/e2e/testing-manifests/kubectl/redis-master-pod.yaml -// test/e2e/testing-manifests/kubectl/redis-master-service.json -// test/e2e/testing-manifests/pod -// test/e2e/testing-manifests/rbd-storage-class.yaml -// test/e2e/testing-manifests/serviceloadbalancer/haproxyrc.yaml -// test/e2e/testing-manifests/serviceloadbalancer/netexecrc.yaml -// test/e2e/testing-manifests/serviceloadbalancer/netexecsvc.yaml -// test/e2e/testing-manifests/serviceloadbalancer/nginxrc.yaml -// test/e2e/testing-manifests/serviceloadbalancer/nginxsvc.yaml -// test/e2e/testing-manifests/statefulset/cassandra/controller.yaml -// test/e2e/testing-manifests/statefulset/cassandra/pdb.yaml -// test/e2e/testing-manifests/statefulset/cassandra/service.yaml -// test/e2e/testing-manifests/statefulset/cassandra/statefulset.yaml -// test/e2e/testing-manifests/statefulset/cassandra/tester.yaml -// test/e2e/testing-manifests/statefulset/cockroachdb/service.yaml -// test/e2e/testing-manifests/statefulset/cockroachdb/statefulset.yaml -// test/e2e/testing-manifests/statefulset/etcd/pdb.yaml -// test/e2e/testing-manifests/statefulset/etcd/service.yaml -// test/e2e/testing-manifests/statefulset/etcd/statefulset.yaml -// test/e2e/testing-manifests/statefulset/etcd/tester.yaml -// test/e2e/testing-manifests/statefulset/mysql-galera/service.yaml -// test/e2e/testing-manifests/statefulset/mysql-galera/statefulset.yaml -// test/e2e/testing-manifests/statefulset/mysql-upgrade/configmap.yaml -// test/e2e/testing-manifests/statefulset/mysql-upgrade/service.yaml -// test/e2e/testing-manifests/statefulset/mysql-upgrade/statefulset.yaml -// test/e2e/testing-manifests/statefulset/mysql-upgrade/tester.yaml -// test/e2e/testing-manifests/statefulset/nginx/service.yaml -// test/e2e/testing-manifests/statefulset/nginx/statefulset.yaml -// test/e2e/testing-manifests/statefulset/redis/service.yaml -// test/e2e/testing-manifests/statefulset/redis/statefulset.yaml -// test/e2e/testing-manifests/statefulset/zookeeper/service.yaml -// test/e2e/testing-manifests/statefulset/zookeeper/statefulset.yaml -// test/e2e/testing-manifests/storage-csi/OWNERS -// test/e2e/testing-manifests/storage-csi/cluster-driver-registrar/rbac.yaml -// test/e2e/testing-manifests/storage-csi/controller-role.yaml -// test/e2e/testing-manifests/storage-csi/driver-registrar/rbac.yaml -// test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml -// test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml -// test/e2e/testing-manifests/storage-csi/external-resizer/rbac.yaml -// test/e2e/testing-manifests/storage-csi/external-snapshotter/rbac.yaml -// test/e2e/testing-manifests/storage-csi/gce-pd/controller_ss.yaml -// test/e2e/testing-manifests/storage-csi/gce-pd/csi-controller-rbac.yaml -// test/e2e/testing-manifests/storage-csi/gce-pd/node_ds.yaml -// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-attacher.yaml -// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-provisioner.yaml -// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-snapshotter.yaml -// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpathplugin.yaml -// test/e2e/testing-manifests/storage-csi/hostpath/hostpath/e2e-test-rbac.yaml -// test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpath-attacher.yaml -// test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpath-provisioner.yaml -// test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpathplugin.yaml -// test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/e2e-test-rbac.yaml -// test/e2e/testing-manifests/storage-csi/hostpath/usage/csi-storageclass.yaml -// test/e2e/testing-manifests/storage-csi/mock/csi-mock-cluster-driver-registrar.yaml -// test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml -// test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml -// test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver.yaml -// test/e2e/testing-manifests/storage-csi/mock/csi-mock-rbac.yaml -// test/e2e/testing-manifests/storage-csi/mock/csi-storageclass.yaml -// test/e2e/testing-manifests/storage-csi/mock/e2e-test-rbac.yaml -// test/images/Makefile -// test/images/OWNERS -// test/images/apparmor-loader/BASEIMAGE -// test/images/apparmor-loader/Dockerfile -// test/images/apparmor-loader/Makefile -// test/images/apparmor-loader/VERSION -// test/images/apparmor-loader/example-configmap.yaml -// test/images/apparmor-loader/example-daemon.yaml -// test/images/apparmor-loader/example-namespace.yaml -// test/images/apparmor-loader/example-pod.yaml -// test/images/apparmor-loader/loader.go -// test/images/audit-proxy/Dockerfile -// test/images/audit-proxy/Makefile -// test/images/audit-proxy/VERSION -// test/images/audit-proxy/main.go -// test/images/crd-conversion-webhook/BASEIMAGE -// test/images/crd-conversion-webhook/Dockerfile -// test/images/crd-conversion-webhook/Makefile -// test/images/crd-conversion-webhook/VERSION -// test/images/crd-conversion-webhook/config.go -// test/images/crd-conversion-webhook/converter/converter_test.go -// test/images/crd-conversion-webhook/converter/example_converter.go -// test/images/crd-conversion-webhook/converter/framework.go -// test/images/crd-conversion-webhook/main.go -// test/images/cuda-vector-add/BASEIMAGE -// test/images/cuda-vector-add/Dockerfile -// test/images/cuda-vector-add/VERSION -// test/images/dnsutils/BASEIMAGE -// test/images/dnsutils/Dockerfile -// test/images/dnsutils/VERSION -// test/images/echoserver/BASEIMAGE -// test/images/echoserver/Dockerfile -// test/images/echoserver/VERSION -// test/images/echoserver/nginx.conf -// test/images/echoserver/run.sh -// test/images/echoserver/template.lua -// test/images/entrypoint-tester/Dockerfile -// test/images/entrypoint-tester/Makefile -// test/images/entrypoint-tester/VERSION -// test/images/entrypoint-tester/ep.go -// test/images/fakegitserver/Dockerfile -// test/images/fakegitserver/Makefile -// test/images/fakegitserver/VERSION -// test/images/fakegitserver/gitserver.go -// test/images/hostexec/BASEIMAGE -// test/images/hostexec/Dockerfile -// test/images/hostexec/VERSION -// test/images/hostexec/pod.yaml -// test/images/image-util.sh -// test/images/ipc-utils/BASEIMAGE -// test/images/ipc-utils/Dockerfile -// test/images/ipc-utils/VERSION -// test/images/iperf/BASEIMAGE -// test/images/iperf/Dockerfile -// test/images/iperf/VERSION -// test/images/jessie-dnsutils/BASEIMAGE -// test/images/jessie-dnsutils/Dockerfile -// test/images/jessie-dnsutils/VERSION -// test/images/jessie-dnsutils/fixup-apt-list.sh -// test/images/kitten/BASEIMAGE -// test/images/kitten/Dockerfile -// test/images/kitten/VERSION -// test/images/kitten/html/data.json -// test/images/liveness/Dockerfile -// test/images/liveness/Makefile -// test/images/liveness/VERSION -// test/images/liveness/server.go -// test/images/logs-generator/BASEIMAGE -// test/images/logs-generator/Dockerfile -// test/images/logs-generator/Makefile -// test/images/logs-generator/VERSION -// test/images/logs-generator/logs_generator.go -// test/images/metadata-concealment/Dockerfile -// test/images/metadata-concealment/Makefile -// test/images/metadata-concealment/VERSION -// test/images/metadata-concealment/check_metadata_concealment.go -// test/images/mounttest/Dockerfile -// test/images/mounttest/Makefile -// test/images/mounttest/VERSION -// test/images/mounttest/mt.go -// test/images/mounttest-user/BASEIMAGE -// test/images/mounttest-user/Dockerfile -// test/images/mounttest-user/VERSION -// test/images/nautilus/BASEIMAGE -// test/images/nautilus/Dockerfile -// test/images/nautilus/VERSION -// test/images/nautilus/html/data.json -// test/images/net/.gitignore -// test/images/net/BASEIMAGE -// test/images/net/Dockerfile -// test/images/net/Makefile -// test/images/net/VERSION -// test/images/net/common/common.go -// test/images/net/main.go -// test/images/net/nat/closewait.go -// test/images/netexec/.gitignore -// test/images/netexec/BASEIMAGE -// test/images/netexec/Dockerfile -// test/images/netexec/Makefile -// test/images/netexec/VERSION -// test/images/netexec/netexec.go -// test/images/netexec/pod.yaml -// test/images/nettest/Dockerfile -// test/images/nettest/Makefile -// test/images/nettest/VERSION -// test/images/nettest/nettest.go -// test/images/nettest/rc.json -// test/images/nettest/service.json -// test/images/nettest/slow-pod.json -// test/images/nettest/slow-rc.json -// test/images/no-snat-test/BASEIMAGE -// test/images/no-snat-test/Dockerfile -// test/images/no-snat-test/Makefile -// test/images/no-snat-test/VERSION -// test/images/no-snat-test/main.go -// test/images/no-snat-test-proxy/BASEIMAGE -// test/images/no-snat-test-proxy/Dockerfile -// test/images/no-snat-test-proxy/Makefile -// test/images/no-snat-test-proxy/VERSION -// test/images/no-snat-test-proxy/main.go -// test/images/node-perf/npb-ep/BASEIMAGE -// test/images/node-perf/npb-ep/Dockerfile -// test/images/node-perf/npb-ep/VERSION -// test/images/node-perf/npb-is/BASEIMAGE -// test/images/node-perf/npb-is/Dockerfile -// test/images/node-perf/npb-is/VERSION -// test/images/node-perf/tf-wide-deep/BASEIMAGE -// test/images/node-perf/tf-wide-deep/Dockerfile -// test/images/node-perf/tf-wide-deep/VERSION -// test/images/nonewprivs/.gitignore -// test/images/nonewprivs/BASEIMAGE -// test/images/nonewprivs/Dockerfile -// test/images/nonewprivs/Makefile -// test/images/nonewprivs/VERSION -// test/images/nonewprivs/nnp.go -// test/images/pets/peer-finder/BASEIMAGE -// test/images/pets/peer-finder/Dockerfile -// test/images/pets/peer-finder/Makefile -// test/images/pets/peer-finder/VERSION -// test/images/pets/peer-finder/peer-finder.go -// test/images/pets/redis-installer/BASEIMAGE -// test/images/pets/redis-installer/Dockerfile -// test/images/pets/redis-installer/Makefile -// test/images/pets/redis-installer/VERSION -// test/images/pets/redis-installer/install.sh -// test/images/pets/redis-installer/on-start.sh -// test/images/pets/zookeeper-installer/BASEIMAGE -// test/images/pets/zookeeper-installer/Dockerfile -// test/images/pets/zookeeper-installer/Makefile -// test/images/pets/zookeeper-installer/VERSION -// test/images/pets/zookeeper-installer/install.sh -// test/images/pets/zookeeper-installer/on-start.sh -// test/images/port-forward-tester/.gitignore -// test/images/port-forward-tester/Dockerfile -// test/images/port-forward-tester/Makefile -// test/images/port-forward-tester/VERSION -// test/images/port-forward-tester/portforwardtester.go -// test/images/porter/.gitignore -// test/images/porter/Dockerfile -// test/images/porter/Makefile -// test/images/porter/VERSION -// test/images/porter/localhost.crt -// test/images/porter/localhost.key -// test/images/porter/pod.json -// test/images/porter/porter.go -// test/images/redis/BASEIMAGE -// test/images/redis/Dockerfile -// test/images/redis/VERSION -// test/images/redis/redis.conf -// test/images/resource-consumer/.gitignore -// test/images/resource-consumer/BASEIMAGE -// test/images/resource-consumer/Dockerfile -// test/images/resource-consumer/Makefile -// test/images/resource-consumer/VERSION -// test/images/resource-consumer/common/common.go -// test/images/resource-consumer/consume-cpu/consume_cpu.go -// test/images/resource-consumer/controller/BASEIMAGE -// test/images/resource-consumer/controller/Dockerfile -// test/images/resource-consumer/controller/Makefile -// test/images/resource-consumer/controller/VERSION -// test/images/resource-consumer/controller/controller.go -// test/images/resource-consumer/resource_consumer.go -// test/images/resource-consumer/resource_consumer_handler.go -// test/images/resource-consumer/utils.go -// test/images/sample-apiserver/BASEIMAGE -// test/images/sample-apiserver/Dockerfile -// test/images/sample-apiserver/VERSION -// test/images/sample-device-plugin/BASEIMAGE -// test/images/sample-device-plugin/Dockerfile -// test/images/sample-device-plugin/Makefile -// test/images/sample-device-plugin/VERSION -// test/images/sample-device-plugin/sampledeviceplugin.go -// test/images/serve-hostname/BASEIMAGE -// test/images/serve-hostname/Dockerfile -// test/images/serve-hostname/Makefile -// test/images/serve-hostname/VERSION -// test/images/serve-hostname/serve_hostname.go -// test/images/test-webserver/Dockerfile -// test/images/test-webserver/Makefile -// test/images/test-webserver/VERSION -// test/images/test-webserver/test-webserver.go -// test/images/volume/gluster/BASEIMAGE -// test/images/volume/gluster/Dockerfile -// test/images/volume/gluster/VERSION -// test/images/volume/gluster/glusterd.vol -// test/images/volume/gluster/index.html -// test/images/volume/gluster/run_gluster.sh -// test/images/volume/iscsi/BASEIMAGE -// test/images/volume/iscsi/Dockerfile -// test/images/volume/iscsi/VERSION -// test/images/volume/iscsi/block.tar.gz -// test/images/volume/iscsi/create_block.sh -// test/images/volume/iscsi/initiatorname.iscsi -// test/images/volume/iscsi/run_iscsid.sh -// test/images/volume/iscsi/saveconfig.json -// test/images/volume/nfs/BASEIMAGE -// test/images/volume/nfs/Dockerfile -// test/images/volume/nfs/VERSION -// test/images/volume/nfs/index.html -// test/images/volume/nfs/run_nfs.sh -// test/images/volume/rbd/BASEIMAGE -// test/images/volume/rbd/Dockerfile -// test/images/volume/rbd/VERSION -// test/images/volume/rbd/block.tar.gz -// test/images/volume/rbd/bootstrap.sh -// test/images/volume/rbd/ceph.conf.sh -// test/images/volume/rbd/create_block.sh -// test/images/volume/rbd/keyring -// test/images/volume/rbd/mon.sh -// test/images/volume/rbd/osd.sh -// test/images/webhook/BASEIMAGE -// test/images/webhook/Dockerfile -// test/images/webhook/Makefile -// test/images/webhook/VERSION -// test/images/webhook/addlabel.go -// test/images/webhook/alwaysallow.go -// test/images/webhook/alwaysdeny.go -// test/images/webhook/config.go -// test/images/webhook/configmap.go -// test/images/webhook/crd.go -// test/images/webhook/customresource.go -// test/images/webhook/main.go -// test/images/webhook/patch_test.go -// test/images/webhook/pods.go -// test/images/webhook/scheme.go -// test/fixtures/doc-yaml/admin/daemon.yaml -// test/fixtures/doc-yaml/admin/high-availability/etcd.yaml -// test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml -// test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml -// test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml -// test/fixtures/doc-yaml/admin/limitrange/invalid-pod.yaml -// test/fixtures/doc-yaml/admin/limitrange/limits.yaml -// test/fixtures/doc-yaml/admin/limitrange/namespace.yaml -// test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml -// test/fixtures/doc-yaml/admin/namespaces/namespace-dev.json -// test/fixtures/doc-yaml/admin/namespaces/namespace-prod.json -// test/fixtures/doc-yaml/admin/resourcequota/limits.yaml -// test/fixtures/doc-yaml/admin/resourcequota/namespace.yaml -// test/fixtures/doc-yaml/admin/resourcequota/quota.yaml -// test/fixtures/doc-yaml/user-guide/configmap/configmap.yaml -// test/fixtures/doc-yaml/user-guide/deployment.yaml -// test/fixtures/doc-yaml/user-guide/downward-api/dapi-pod.yaml.in -// test/fixtures/doc-yaml/user-guide/job.yaml -// test/fixtures/doc-yaml/user-guide/liveness/exec-liveness.yaml.in -// test/fixtures/doc-yaml/user-guide/liveness/http-liveness.yaml.in -// test/fixtures/doc-yaml/user-guide/multi-pod.yaml -// test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-01.yaml -// test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-02.yaml -// test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-03.json -// test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/gce.yaml -// test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-01.yaml -// test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-02.yaml -// test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/nfs.yaml -// test/fixtures/doc-yaml/user-guide/pod.yaml -// test/fixtures/doc-yaml/user-guide/replicaset/redis-slave.yaml -// test/fixtures/doc-yaml/user-guide/replication.yaml -// test/fixtures/doc-yaml/user-guide/secrets/secret-env-pod.yaml -// test/fixtures/doc-yaml/user-guide/secrets/secret-pod.yaml.in -// test/fixtures/doc-yaml/user-guide/secrets/secret.yaml -// test/fixtures/doc-yaml/user-guide/update-demo/images/kitten/html/data.json -// test/fixtures/doc-yaml/user-guide/update-demo/images/nautilus/html/data.json -// test/fixtures/doc-yaml/user-guide/update-demo/kitten-rc.yaml.in -// test/fixtures/doc-yaml/user-guide/update-demo/nautilus-rc.yaml.in -// test/fixtures/doc-yaml/user-guide/walkthrough/podtemplate.json -// test/fixtures/pkg/kubectl/OWNERS -// test/fixtures/pkg/kubectl/plugins/foo/kubectl-foo -// test/fixtures/pkg/kubectl/plugins/kubectl-foo -// test/fixtures/pkg/kubectl/plugins/version/kubectl-version -// DO NOT EDIT! - -package generated - -import ( - "bytes" - "compress/gzip" - "fmt" - "io" - "io/ioutil" - "os" - "path/filepath" - "strings" - "time" -) - -func bindataRead(data []byte, name string) ([]byte, error) { - gz, err := gzip.NewReader(bytes.NewBuffer(data)) - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - - var buf bytes.Buffer - _, err = io.Copy(&buf, gz) - clErr := gz.Close() - - if err != nil { - return nil, fmt.Errorf("Read %q: %v", name, err) - } - if clErr != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -type asset struct { - bytes []byte - info os.FileInfo -} - -type bindataFileInfo struct { - name string - size int64 - mode os.FileMode - modTime time.Time -} - -func (fi bindataFileInfo) Name() string { - return fi.name -} -func (fi bindataFileInfo) Size() int64 { - return fi.size -} -func (fi bindataFileInfo) Mode() os.FileMode { - return fi.mode -} -func (fi bindataFileInfo) ModTime() time.Time { - return fi.modTime -} -func (fi bindataFileInfo) IsDir() bool { - return false -} -func (fi bindataFileInfo) Sys() interface{} { - return nil -} - -var _testE2eTestingManifestsFlexvolumeAttachableWithLongMount = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x56\x6f\x6f\xda\xc8\x13\x7e\xef\x4f\x31\x5d\xd0\x4f\x4d\x45\x20\xe1\x57\xa9\x52\xa2\x54\xc7\x85\xe4\x8a\x4a\xa0\x0a\x34\xbd\xea\x38\x45\x8b\x3d\xb6\x47\xb7\xde\x75\x77\xd7\x21\x5c\xc4\x77\x3f\xad\x6d\x08\xe6\x5f\x93\x3b\xbf\x63\x77\xe6\x99\x67\x9e\xf9\xb3\xd4\xde\xb4\xa6\x24\x5b\x26\xf6\xbc\x1a\x5c\xaa\x74\xae\x29\x8a\x2d\xb4\x4f\x4e\x3f\xc0\x38\x46\xf8\x9c\x4d\x51\x4b\xb4\x68\xa0\x93\xd9\x58\x69\xd3\xf4\x6a\x5e\x0d\xfa\xe4\xa3\x34\x18\x40\x26\x03\xd4\x60\x63\x84\x4e\xca\xfd\x18\x97\x37\x0d\xb8\x43\x6d\x48\x49\x68\x37\x4f\xe0\xad\x33\x60\xe5\x15\x3b\x3a\xf7\x6a\x30\x57\x19\x24\x7c\x0e\x52\x59\xc8\x0c\x82\x8d\xc9\x40\x48\x02\x01\x1f\x7d\x4c\x2d\x90\x04\x5f\x25\xa9\x20\x2e\x7d\x84\x19\xd9\x38\x0f\x53\x82\x34\xbd\x1a\x7c\x2f\x21\xd4\xd4\x72\x92\xc0\xc1\x57\xe9\x1c\x54\xb8\x6e\x07\xdc\xe6\x84\xdd\x17\x5b\x9b\x9e\xb5\x5a\xb3\xd9\xac\xc9\x73\xb2\x4d\xa5\xa3\x96\x28\x0c\x4d\xab\xdf\xbb\xbc\x1a\x8c\xae\x8e\xdb\xcd\x93\xdc\xe5\xab\x14\x68\x0c\x68\xfc\x91\x91\xc6\x00\xa6\x73\xe0\x69\x2a\xc8\xe7\x53\x81\x20\xf8\x0c\x94\x06\x1e\x69\xc4\x00\xac\x72\x7c\x67\x9a\x2c\xc9\xa8\x01\x46\x85\x76\xc6\x35\x7a\x35\x08\xc8\x58\x4d\xd3\xcc\x56\xc4\x5a\xb2\x23\x53\x31\x50\x12\xb8\x04\xd6\x19\x41\x6f\xc4\xe0\xd7\xce\xa8\x37\x6a\x78\x35\xf8\xd6\x1b\x7f\x1a\x7e\x1d\xc3\xb7\xce\xed\x6d\x67\x30\xee\x5d\x8d\x60\x78\x0b\x97\xc3\x41\xb7\x37\xee\x0d\x07\x23\x18\x5e\x43\x67\xf0\x1d\x3e\xf7\x06\xdd\x06\x20\xd9\x18\x35\xe0\x63\xaa\x1d\x7f\xa5\x81\x9c\x8c\x18\x38\xcd\x46\x88\x15\x02\xa1\x2a\x08\x99\x14\x7d\x0a\xc9\x07\xc1\x65\x94\xf1\x08\x21\x52\x0f\xa8\x25\xc9\x08\x52\xd4\x09\x19\x57\x4c\x03\x5c\x06\x5e\x0d\x04\x25\x64\xb9\xcd\x4f\xb6\x92\x6a\xba\x5e\x1a\xbb\x72\x06\x9a\x1e\x50\xbb\x24\x31\xc7\xe7\x42\xcc\x21\x40\x43\x91\x2c\x34\xb3\x68\x2c\x70\x10\x4a\x46\x90\xa8\x4c\x3a\xf5\xc0\xf8\x28\xb9\x26\xe5\xd5\x60\x16\x93\x1f\x83\xcf\x25\xf8\xdc\x35\x09\x87\x07\x25\xb2\x04\x9d\xef\x14\x21\x40\xeb\xca\x18\x38\x3b\x81\x05\x82\x8b\x46\x12\x52\xad\x22\x97\x7e\xd3\xf3\xbc\xeb\xfe\xd5\xef\xf7\xdd\xaf\x37\x37\xdf\xef\xfb\xc3\xdf\x2e\xea\x4f\xd5\x83\xb3\x63\xd6\xb2\x49\xda\x0a\x05\x3e\x1e\x07\x59\x92\xcc\x9b\x42\x45\x6c\xe1\x79\x77\x9d\x7e\xaf\x7b\x7f\x33\x18\x77\xaf\xee\x7a\x97\x57\x17\xa1\x52\x2e\x37\x6e\x5d\x58\xe0\x62\xc6\xe7\xae\x3f\x6c\xa6\xa5\x01\x25\x11\x1e\xb8\xa0\xa0\xe4\x11\xe0\x03\xf9\x08\x46\x01\x87\x80\xc2\x10\x35\xae\x4e\xbd\x1a\x98\x58\xcd\x5c\xb6\x59\x0a\x79\xef\x9a\x6c\x6a\xf0\x47\x96\xdb\x14\xb2\xf9\x5c\x88\xb2\x74\x06\x38\x4c\xb3\xc8\xcb\xf1\xb9\xc5\x1b\x17\xa1\x9b\x43\x0d\x75\x97\xf0\xed\x11\x3c\x79\x50\x7e\xcf\x7c\xeb\xa7\xab\xc3\xcb\x4e\xbf\x7f\x51\x6f\xaf\x7e\x53\x08\x7f\x00\xab\xaf\x6c\x19\xbc\xb9\x00\x56\xdf\xc8\x98\xc1\x9f\xe7\xae\xb4\x72\xe5\xb7\xfc\x84\x8a\x80\x3d\x4d\x98\xb1\xdc\x66\x66\xc2\xce\x26\xec\x9a\x93\xc8\x34\x4e\x58\x63\xc2\x12\x34\x86\x47\x98\x9f\xe7\x79\xb0\xfa\x93\xa3\xb0\x60\xae\x2f\xd1\x77\xcd\x5e\x0a\xc4\xea\x4f\x1b\x51\x17\xac\x01\x91\xb2\x6b\x06\x6b\x57\x13\xb6\x60\x5b\x6c\xf0\x91\x2c\x9c\xac\x8e\x43\xf2\x16\x9e\x27\x54\x54\xd1\x25\xd5\x24\x6d\x08\xac\xfe\x8e\xc1\xc7\xff\x9d\x3a\x93\x00\xa7\x59\xd5\x08\xfd\x58\x01\xab\xbf\x75\x2a\x1f\x41\x6e\xfa\xd1\x31\xa8\xb6\xcc\x82\x39\xef\xa2\x0f\x2a\xee\x39\x20\xb0\xb2\x43\xea\xbf\x3c\x53\xdd\x21\xd8\x28\xf3\x7d\x34\x26\x17\xac\xc8\x35\x3f\xde\x25\x48\x25\xeb\x32\xdb\x9c\xff\x3e\x06\xc5\x4d\x85\x41\x0d\xc6\xc3\xee\x10\xc8\x98\x0c\xe1\xfd\xfb\x0f\xff\xff\x50\x0e\x90\x1b\x99\x94\x1b\xb7\xce\xbf\xdc\x81\xe4\x09\x36\xf2\xb5\xbc\xde\xc7\x2f\xca\x63\x27\xc7\x19\x27\x1b\x2a\xbd\x5f\xac\x8a\x41\x85\xf1\xce\x4e\xde\x37\x03\xd5\x6e\xae\xa2\xfe\xcb\x32\xfc\xbc\x00\x64\x8a\x00\x18\xec\xca\xec\xf9\xf6\x35\xad\xb0\xf4\x99\xb0\x33\xab\x33\xdc\x5d\x78\x95\x17\xa7\xa0\xbb\xb3\xfe\xeb\x06\xfb\x44\x6d\xbf\x56\xd4\x0a\x6a\x05\xf2\x4b\x67\xfc\x69\xbd\x4a\xc9\x5f\x01\x69\x38\x4e\x21\x57\xd1\xdd\x2e\xe0\x63\x2b\xc0\x87\x96\xcc\x84\x80\xb6\x1b\xc0\x95\x6d\xde\x67\xc7\x16\x6c\x92\x86\x06\xa4\xdb\xa4\x2f\x70\x33\x02\x31\x85\xd3\xf6\xc9\xc6\xf0\x7e\x42\x21\x14\x84\x5a\x25\xe0\x56\x7a\xf1\x62\xbc\x59\x0e\xf2\x12\xb6\x45\x32\xc0\xc7\x66\x6c\x13\xf1\xb2\xca\xec\xac\x43\x26\x7f\x52\x87\x8a\xc1\x66\x1d\x36\x45\xd3\xc9\x3e\x86\x7b\x45\xc8\x0a\xf1\x5e\x20\xd7\xab\x73\xc3\xc7\x94\xcb\xa0\x90\x6f\x57\x6a\xeb\xf7\x2f\xee\xef\x03\x91\x42\xb3\x3f\x4a\x68\xfe\x5b\x04\x95\x3a\x9d\xbd\xf2\xd5\x53\x29\x83\x0b\x60\x24\xc9\x6e\xbf\x70\xcb\xd9\x95\x64\x5f\x33\xb5\x3e\x4f\xf9\x94\x04\x59\x42\x77\xf9\xb4\x9c\xe3\x72\x8a\x1b\x30\x61\xe5\x3f\x49\x73\x3d\xba\x45\x43\x7f\xe3\x72\xc0\xb7\x19\x87\xe4\x79\x26\xa6\xd0\x7a\x9e\xcf\x0d\x96\x94\xe9\x99\x64\x81\x7d\xb4\xf5\x10\x2e\x97\xe8\xbb\xad\x9b\xf3\xf3\xb5\x0c\x77\x3b\x2f\xdf\x8c\x83\xce\x95\xbd\xba\x8d\xb1\xb1\xcc\x0f\x42\x3d\xaf\xc7\x6d\x9c\xf5\xd5\x79\x10\x64\x6d\xbc\x76\x64\x54\xdd\x82\x07\x81\x2a\x93\xba\x0d\xb5\x31\xc8\x07\xa1\xd6\x27\x63\x1b\xa9\x3a\x37\x2f\x00\x0a\xcd\x3e\x10\x37\x16\x07\x01\xde\x6d\x7b\xee\xe8\xe3\x81\xb2\x60\xb2\x34\x55\xda\xba\x67\x67\xff\x1f\x2c\x34\xdc\x77\xe3\x4a\x16\x4e\xbd\x7f\x02\x00\x00\xff\xff\x9b\x84\xf0\xd3\x3c\x0e\x00\x00") - -func testE2eTestingManifestsFlexvolumeAttachableWithLongMountBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsFlexvolumeAttachableWithLongMount, - "test/e2e/testing-manifests/flexvolume/attachable-with-long-mount", - ) -} - -func testE2eTestingManifestsFlexvolumeAttachableWithLongMount() (*asset, error) { - bytes, err := testE2eTestingManifestsFlexvolumeAttachableWithLongMountBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/flexvolume/attachable-with-long-mount", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsFlexvolumeDummy = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x92\x5f\x4f\xe3\x46\x14\xc5\x9f\x3d\x9f\xe2\xec\x24\xaa\x16\x44\x6c\xe0\xa5\x12\x08\xd4\x14\xd8\x12\x2d\x24\x15\x09\xdd\xa2\xa6\x5a\x4d\xec\x6b\x7b\xd4\xf1\xcc\x74\x66\x4c\x12\x45\xf9\xee\x95\x1d\x87\x2e\x65\x85\xea\x37\xdf\xbf\xbf\x73\xee\xf4\x3e\x24\x0b\xa9\x13\x5f\x32\xd6\xc3\x95\xb1\x6b\x27\x8b\x32\xe0\xf4\xf8\xe4\x47\xcc\x4a\xc2\xe7\x7a\x41\x4e\x53\x20\x8f\x61\x1d\x4a\xe3\x7c\xcc\x7a\xac\x87\x3b\x99\x92\xf6\x94\xa1\xd6\x19\x39\x84\x92\x30\xb4\x22\x2d\x69\x9f\x39\xc2\x6f\xe4\xbc\x34\x1a\xa7\xf1\x31\x3e\x36\x05\xbc\x4b\xf1\x83\x73\xd6\xc3\xda\xd4\xa8\xc4\x1a\xda\x04\xd4\x9e\x10\x4a\xe9\x91\x4b\x45\xa0\x55\x4a\x36\x40\x6a\xa4\xa6\xb2\x4a\x0a\x9d\x12\x96\x32\x94\xed\x9a\x6e\x48\xcc\x7a\x78\xea\x46\x98\x45\x10\x52\x43\x20\x35\x76\x0d\x93\x7f\x5b\x07\x11\x5a\xe0\xe6\x2b\x43\xb0\x67\x49\xb2\x5c\x2e\x63\xd1\xc2\xc6\xc6\x15\x89\xda\x15\xfa\xe4\x6e\x74\x75\x33\x9e\xde\x0c\x4e\xe3\xe3\xb6\xe5\x51\x2b\xf2\x1e\x8e\xfe\xae\xa5\xa3\x0c\x8b\x35\x84\xb5\x4a\xa6\x62\xa1\x08\x4a\x2c\x61\x1c\x44\xe1\x88\x32\x04\xd3\xf0\x2e\x9d\x0c\x52\x17\x47\xf0\x26\x0f\x4b\xe1\x88\xf5\x90\x49\x1f\x9c\x5c\xd4\xe1\x95\x59\x7b\x3a\xe9\x5f\x15\x18\x0d\xa1\xc1\x87\x53\x8c\xa6\x1c\x3f\x0f\xa7\xa3\xe9\x11\xeb\xe1\xcb\x68\x76\x3b\x79\x9c\xe1\xcb\xf0\xe1\x61\x38\x9e\x8d\x6e\xa6\x98\x3c\xe0\x6a\x32\xbe\x1e\xcd\x46\x93\xf1\x14\x93\x4f\x18\x8e\x9f\xf0\x79\x34\xbe\x3e\x02\xc9\x50\x92\x03\xad\xac\x6b\xf8\x8d\x83\x6c\x6c\xa4\xac\xf1\x6c\x4a\xf4\x0a\x20\x37\x3b\x20\x6f\x29\x95\xb9\x4c\xa1\x84\x2e\x6a\x51\x10\x0a\xf3\x4c\x4e\x4b\x5d\xc0\x92\xab\xa4\x6f\x8e\xe9\x21\x74\xc6\x7a\x50\xb2\x92\x41\x84\x36\xf2\x46\x54\xdc\xbc\xa5\x59\x73\xce\xcc\xc9\x67\xda\xad\xa7\x8a\x74\xf0\x10\x08\x95\xcd\xfd\xee\x9c\x02\xd6\xd1\xc0\x1a\x5b\x2b\xd1\xa8\x6f\xaf\x2f\x75\x46\xab\xb8\x0c\x95\x8a\x19\xfb\x74\x77\xf3\xfb\xd7\xeb\xc7\xfb\xfb\xa7\xaf\x77\x93\x5f\x2e\xfa\x9b\xd7\x81\xb3\x01\x4f\x42\x65\x93\x5c\xd1\x6a\x90\xd5\x55\xb5\x8e\x95\x29\xf8\x96\x31\x65\x8a\x8f\x07\xd8\xb0\xc8\x3a\xa9\x43\x0e\xde\x3f\xe4\xb8\xfc\xe1\x84\x6d\x19\xcb\x68\x51\x77\x59\x4a\x4b\x03\xde\xff\x98\x89\x40\x07\x68\x6b\x2e\xc1\xff\xbb\x66\xcb\xdb\x36\x53\x99\x5a\x87\x5d\x63\x3b\x03\xbc\x8b\xa1\xff\x13\x67\xd1\xfd\x78\xf6\xeb\x70\x76\x7b\xd1\x3f\x61\x51\xf5\x57\x26\x1d\x06\x16\xfd\x4d\x17\xde\xe2\x32\xc9\xe8\x39\xd1\xb5\x52\x38\x6d\x50\xa2\x5d\xef\x20\x74\x9e\x68\xa3\xe9\xdd\xfa\x1d\xed\x2d\x29\x65\x90\x3b\x53\xa1\xd1\xfd\x6c\x54\x5d\xd1\x87\x3d\xf9\xbe\x3b\xf9\xd7\x47\xce\x22\x65\x0a\xf0\xcd\x9c\xfb\x20\x42\xed\xe7\xfc\x6c\xce\xa7\x75\x9a\x92\xf7\x73\xbe\xe5\x2c\xa2\x95\x0c\x38\x6e\x54\xd6\xfa\xad\xca\x2e\xf6\x56\xa5\xab\xf0\xdd\x8d\x6f\xd1\xeb\x6e\xc2\x3b\xea\xfe\x3f\xa3\xb1\xcd\x76\x26\x73\xfc\x01\xde\x37\x96\xe3\x02\x5c\x6a\x19\x38\xfe\x3c\x6f\x5e\xa2\x7e\x41\x6f\xa2\x3b\xee\xf7\xc6\x1f\xcd\x79\x2a\xac\x58\x48\x25\x83\xa4\x26\xb9\x99\x73\x11\x82\x48\xcb\x39\x3f\xcb\x85\xf2\xb4\xfd\x06\x21\x97\x8c\xf9\x52\xe6\x81\xb1\x54\x78\xea\x18\xa4\xee\x2e\x7a\xc0\xa2\xe8\xe5\x61\x1c\xb2\x28\x3a\x3f\x67\x51\xe7\x61\x93\x7b\xb1\x73\x9f\x3b\x6c\xa2\xdf\xe1\x1b\x9b\x00\x5f\x5b\x6b\x5c\xa0\x6c\x67\xc2\x1e\x81\xbc\x48\x19\x6b\x7f\x4e\xd8\x3f\x01\x00\x00\xff\xff\x5b\x74\xc1\x62\xc5\x05\x00\x00") - -func testE2eTestingManifestsFlexvolumeDummyBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsFlexvolumeDummy, - "test/e2e/testing-manifests/flexvolume/dummy", - ) -} - -func testE2eTestingManifestsFlexvolumeDummy() (*asset, error) { - bytes, err := testE2eTestingManifestsFlexvolumeDummyBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/flexvolume/dummy", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsFlexvolumeDummyAttachable = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x55\x7d\x4f\xdb\xc8\x13\xfe\xdb\xfb\x29\xa6\x9b\xe8\xa7\x52\xe5\x05\xf8\x55\xaa\x04\xa2\xba\x1c\x81\x6b\xd4\x90\x54\x24\xa5\x57\x5d\x4e\xd5\xc6\x1e\xdb\xab\xb3\x77\xb7\xfb\x42\xc8\xa1\x7c\xf7\xd3\xfa\x05\x6c\xa0\x94\xfa\xcf\x99\xc7\x33\xcf\x3c\xf3\xb2\x9d\x57\xc3\x35\x17\x43\x93\x12\xd2\x81\x53\xa9\xb6\x9a\x27\xa9\x85\xc3\xfd\x83\x77\xb0\x4c\x11\x3e\xba\x35\x6a\x81\x16\x0d\x8c\x9c\x4d\xa5\x36\x03\xd2\x21\x1d\x98\xf2\x10\x85\xc1\x08\x9c\x88\x50\x83\x4d\x11\x46\x8a\x85\x29\xd6\x9e\x1e\x5c\xa1\x36\x5c\x0a\x38\x1c\xec\xc3\x6b\x0f\xa0\x95\x8b\xee\x1d\x93\x0e\x6c\xa5\x83\x9c\x6d\x41\x48\x0b\xce\x20\xd8\x94\x1b\x88\x79\x86\x80\x37\x21\x2a\x0b\x5c\x40\x28\x73\x95\x71\x26\x42\x84\x0d\xb7\x69\x91\xa6\x0a\x32\x20\x1d\xf8\x5a\x85\x90\x6b\xcb\xb8\x00\x06\xa1\x54\x5b\x90\x71\x13\x07\xcc\x16\x84\xfd\x97\x5a\xab\x8e\x86\xc3\xcd\x66\x33\x60\x05\xd9\x81\xd4\xc9\x30\x2b\x81\x66\x38\x9d\x9c\x9e\xcd\x16\x67\xfd\xc3\xc1\x7e\xf1\xcb\x67\x91\xa1\x31\xa0\xf1\xbb\xe3\x1a\x23\x58\x6f\x81\x29\x95\xf1\x90\xad\x33\x84\x8c\x6d\x40\x6a\x60\x89\x46\x8c\xc0\x4a\xcf\x77\xa3\xb9\xe5\x22\xe9\x81\x91\xb1\xdd\x30\x8d\xa4\x03\x11\x37\x56\xf3\xb5\xb3\x2d\xb1\x6a\x76\xdc\xb4\x00\x52\x00\x13\x40\x47\x0b\x98\x2c\x28\xfc\x3e\x5a\x4c\x16\x3d\xd2\x81\x2f\x93\xe5\x87\xf9\xe7\x25\x7c\x19\x5d\x5e\x8e\x66\xcb\xc9\xd9\x02\xe6\x97\x70\x3a\x9f\x8d\x27\xcb\xc9\x7c\xb6\x80\xf9\x39\x8c\x66\x5f\xe1\xe3\x64\x36\xee\x01\x72\x9b\xa2\x06\xbc\x51\xda\xf3\x97\x1a\xb8\x97\x11\x23\xaf\xd9\x02\xb1\x45\x20\x96\x25\x21\xa3\x30\xe4\x31\x0f\x21\x63\x22\x71\x2c\x41\x48\xe4\x35\x6a\xc1\x45\x02\x0a\x75\xce\x8d\x6f\xa6\x01\x26\x22\xd2\x81\x8c\xe7\xdc\x32\x5b\x58\x1e\x15\x35\xf0\xb3\xb4\xf4\xed\x8c\x34\xbf\xc6\x32\x3d\xe6\x28\xac\x01\x06\x36\x57\xb1\x29\xdb\xc9\x40\x69\xec\x2b\xa9\x5c\xc6\x7c\xf5\x45\xf7\xb9\x88\xf0\x66\x90\xda\x3c\xf3\x74\x47\xd6\xb2\x30\xf5\x32\xd5\x6d\xe8\xc1\xda\x59\xe0\xd6\xdb\x18\x08\xd9\x97\x0a\x6c\xca\x2c\xb0\x6c\xc3\xb6\x1e\x67\x9d\x16\x06\x8c\x0b\x43\x34\x66\x40\xc8\xf9\xf4\xec\xcf\x6f\xe3\xcf\x17\x17\x5f\xbf\x4d\xe7\x7f\x9c\x74\x6f\xdb\x86\xa3\x3e\x1d\xda\x5c\x0d\xe3\x0c\x6f\xfa\x91\xcb\xf3\xed\x20\x93\x09\xdd\x11\x72\x35\x9a\x4e\xc6\xdf\x2e\x66\xcb\xf1\xd9\xd5\xe4\xf4\xec\x24\x96\xd2\x97\xc6\x4a\x4e\x0f\xf2\x49\x81\x70\xcd\x32\x1e\x41\x2e\x9d\xb0\x10\xe1\x35\x0f\x11\x8c\x04\x06\x11\x8f\x63\xd4\x78\x67\x25\x1d\x30\xa9\xdc\x78\x6d\x9d\x82\x62\x74\x8d\x5b\x1b\xfc\xee\x0a\x4c\xa9\x5a\xc8\xb2\xac\xea\x9c\xaf\x74\xed\x12\x52\xc4\x67\x16\x2f\x7c\x86\x71\x11\x6a\xae\xc7\x1c\x5f\xef\xc1\x2d\x09\xee\x89\x76\x0f\x48\x70\x3a\x9a\x4e\x4f\xba\x87\x24\xe0\x31\xfc\x05\xb4\x7b\xe7\xa5\xf0\xea\x04\x68\xf7\x41\x71\x14\xfe\x3e\xf6\x4d\x14\x24\x08\x32\x99\x00\xbd\x5d\x51\x63\x99\x75\x66\x45\x8f\x56\xf4\x9c\xf1\xcc\x69\x5c\xd1\xde\x8a\xe6\x68\x0c\x4b\xb0\xb0\x17\x24\x69\xf7\xd6\x67\xdb\x51\x3f\x73\x18\xfa\x56\x56\xd5\xd3\xee\xed\x83\x3c\x3b\xda\x83\x44\xda\x06\xa0\xe1\x5a\xd1\x1d\x25\x41\x80\x37\xdc\xc2\x3e\x09\x62\x4e\x76\x84\x64\x32\x29\xeb\x53\x9a\x0b\x1b\x03\xed\xbe\xa1\xf0\xfe\x7f\x07\xde\x17\xe1\xda\x55\x5e\x0c\x53\x09\xb4\xfb\xda\xeb\xb3\x07\x05\xe6\xbd\x0f\xdf\x6e\xf6\x8e\xfa\xdf\xca\x0e\x96\xff\x15\x21\x80\x56\x4d\xed\xfe\x46\xc9\x53\xf5\x2f\xca\x69\x2a\xea\x2f\xa9\x17\xe6\xa7\xea\x2b\x8b\xa8\x6a\x28\x38\x3e\x4a\x56\x9a\xca\x64\x1d\x58\xce\xc7\x73\xe0\xc6\x38\x84\xb7\x6f\xdf\xfd\xff\x1d\x54\x6e\x6e\x40\x31\xe3\x8f\xec\xa7\x2b\x10\x2c\xc7\x5e\x71\x2c\x9b\xe3\xf5\x3c\xd7\x36\x8f\x0d\xe3\x36\x96\xfa\x89\xda\x5b\x9e\x92\x55\x7b\x96\x7e\x34\x77\xed\xb1\x6a\xc7\xf9\x55\x1d\x9f\x51\x90\x9b\x32\x24\x46\x2d\xda\xf7\xe6\x17\xb5\xad\x06\xaf\xe8\x91\xd5\x0e\x1f\x34\x49\x16\xb2\x96\x94\xda\xbd\x6a\x7a\x1e\x89\x73\xf8\x62\x71\x5a\x71\xca\x20\x9f\x46\xcb\x0f\x85\xbe\xf9\x3f\x11\xd7\xd0\x57\x50\xc8\xe0\xcd\x3b\x78\x3f\x8c\xf0\x7a\x28\x5c\x96\xc1\xa1\x9f\xf6\xa0\xec\x7b\xdf\x56\x17\x54\xf8\x83\xf3\x1c\xbe\x5c\x88\x0f\x98\x65\x12\x62\x2d\x73\xf0\x07\xee\x5a\x66\x2e\xc7\x57\xf5\x72\xd4\x7f\x0f\xef\xaf\xee\x4f\x84\x6c\xcb\xe6\xc4\x8f\x64\x6b\x79\xee\x64\xbb\xab\x58\xe7\x3f\x4a\xff\xb8\x10\x57\x56\xfe\x5c\xad\x2f\x67\x8c\x37\x8a\x89\xa8\x94\xa1\x45\xb8\xe9\xf8\xf9\x3c\x3d\x15\x34\x36\x4f\x04\x8c\xcd\xaf\x06\x93\xca\x2b\x44\xaa\xb3\x2d\x15\x85\x13\xa0\x5c\x70\xdb\x38\xd1\xf5\x06\x08\x6e\x5f\x34\xfb\x21\x53\x6c\xcd\x33\x6e\x39\x7a\xe7\x6d\xbd\x0d\xd5\x2e\xf4\x60\x45\xab\xf7\xd5\x9c\x2f\x2e\xd1\xf0\x7f\xb1\x5e\x93\x06\xb9\x98\x13\x62\x52\x1e\x5b\x42\x42\x66\xb0\x62\xc7\x05\x09\xca\x68\x7b\x24\x08\xea\x23\xf2\x86\x04\xc1\xf1\xb1\x67\x5a\x7b\xea\xa3\x57\x7b\x5a\xd7\xc2\x03\x1e\x9c\xa1\x1a\x77\xbf\xe6\x1e\xd4\x5c\xfa\x1a\xd1\x98\xb4\x22\x51\x7b\x63\x6b\x54\x6b\x22\x3d\xee\xc1\x88\xd6\xb8\xe6\x20\xec\x15\xaf\x51\x73\x30\xda\xa8\xd8\xdc\x23\x7c\xa7\x6b\xef\x9b\xbd\xa7\x9f\xd1\x99\xb4\x60\x9c\x52\x52\x5b\x7f\x88\x9a\xaf\x1d\x1a\x16\xfa\x49\xe2\x16\x0e\xc8\x7f\x01\x00\x00\xff\xff\xae\x82\x6a\x82\x97\x0b\x00\x00") - -func testE2eTestingManifestsFlexvolumeDummyAttachableBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsFlexvolumeDummyAttachable, - "test/e2e/testing-manifests/flexvolume/dummy-attachable", - ) -} - -func testE2eTestingManifestsFlexvolumeDummyAttachable() (*asset, error) { - bytes, err := testE2eTestingManifestsFlexvolumeDummyAttachableBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/flexvolume/dummy-attachable", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsGuestbookFrontendDeploymentYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x92\x4d\x6f\x13\x31\x10\x86\xef\xfb\x2b\x5e\x89\x43\x2f\x0d\xa4\xe2\x82\x7c\x44\xd0\x52\x89\xaa\x88\x56\x5c\xab\x89\x77\x92\x58\xb5\x67\x8c\x3d\xbb\x28\xaa\xfa\xdf\x91\x43\x3e\x76\x11\xf8\xf8\xcc\xcc\xe3\xd7\xf2\x50\x0e\x3f\xb8\xd4\xa0\xe2\x40\x39\xd7\x77\xe3\x55\xf7\x1c\xa4\x77\xf8\xc4\x39\xea\x2e\xb1\x58\x97\xd8\xa8\x27\x23\xd7\x01\x42\x89\x1d\xd6\x45\xc5\x58\xfa\xae\x66\xf6\x0d\x17\xce\x31\x78\xaa\x0e\xef\x3b\xa0\x72\x64\x6f\x5a\x5a\x05\x48\x64\x7e\xfb\x95\x56\x1c\xeb\x1f\x80\x76\x95\xc3\x66\xe0\x6a\x2b\xd5\xe7\x03\xb4\xc0\x65\xa2\x06\x8c\x53\x8e\x64\x7c\xd0\x4c\x52\xb4\x13\x67\xc6\xff\x38\xff\x61\x05\x8e\xa1\xdb\xf1\x2a\x46\x41\xb8\x9c\x4c\x8b\xc3\x1b\xf3\x36\x2f\x0a\xf7\xa1\x9e\x54\x21\xd1\x86\x1d\x5e\x5e\xde\xde\x7c\xbc\x3e\x08\x6f\x1b\x7b\x7d\x3d\xf5\x14\xae\x3a\x14\xcf\x93\x60\x0d\xfe\x6c\xb9\x66\x0c\xf0\x79\x70\xb8\x5a\x2e\xd3\x8c\x26\x4e\x5a\x76\xfb\xc2\x5d\x38\x55\x58\xc6\xf3\xf0\x31\xe1\xcd\xe7\xc7\xa7\x2f\xf7\x0f\x8f\x0f\x4f\xd7\xdf\xef\xef\x26\x96\x91\xe2\xc0\x0e\xbd\xd4\x09\x7c\x83\xdb\x35\x76\x3a\x14\xf8\x38\x54\xe3\xd2\xde\xbe\x0e\x1b\xf4\xca\x15\xa2\x86\x20\x3e\x0e\x3d\x83\xda\x24\x2a\x97\x31\x78\xbe\x84\x6d\x59\x60\x3a\x53\x05\xa9\xc6\xd4\x83\xbc\xe7\x5a\x5b\xbc\x50\x54\xda\xb6\x60\xa4\x12\x68\x15\xb9\xc2\x14\xeb\x20\xfd\xd1\x84\xad\x56\xfb\xcb\xb2\xd6\x4b\x78\x4d\xfb\x41\x1d\xac\xdd\x85\x8b\x73\xfc\x0b\xc4\x20\x0c\x5a\xe9\xc8\x97\x20\xe9\x31\xc8\xb1\xdd\xb6\x3c\x93\xed\x3b\x57\x1c\xf5\x97\x9b\xf1\x83\x8d\x65\x3c\xe1\xac\x65\xfa\x19\x8b\xf3\x16\x7c\xd3\x62\x0e\x1f\x96\xdd\xef\x00\x00\x00\xff\xff\x15\xa6\x03\x54\x19\x03\x00\x00") - -func testE2eTestingManifestsGuestbookFrontendDeploymentYamlInBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsGuestbookFrontendDeploymentYamlIn, - "test/e2e/testing-manifests/guestbook/frontend-deployment.yaml.in", - ) -} - -func testE2eTestingManifestsGuestbookFrontendDeploymentYamlIn() (*asset, error) { - bytes, err := testE2eTestingManifestsGuestbookFrontendDeploymentYamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/frontend-deployment.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsGuestbookFrontendServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x8f\x3f\x4b\x04\x31\x10\xc5\xfb\x7c\x8a\x07\xb6\x9e\x68\x27\x29\xed\x04\x0b\x41\xb0\x9f\x4d\x66\xcf\x70\xd9\x99\x30\x99\x9c\xee\xb7\x97\xdd\xb5\xb0\xbc\x6e\x98\xf7\x87\xdf\xa3\x56\x3e\xd9\x7a\x51\x89\xb8\x3e\x85\x4b\x91\x1c\xf1\xc1\x76\x2d\x89\xc3\xc2\x4e\x99\x9c\x62\x00\x84\x16\x8e\x98\x4d\xc5\x59\x72\x00\x2a\x4d\x5c\xfb\x26\x01\xd4\x5a\xc4\x79\x70\xf7\x49\xf5\xb2\xbf\xbc\xb0\xfd\xf3\xf7\xc6\x69\xf3\xde\xa1\xcc\x58\x75\x18\x52\x1d\xdd\xd9\xd0\x47\x6b\x6a\xde\x51\xfc\x1e\x43\x92\x2e\x0b\x8b\xc3\xbf\x18\xb3\xd6\xaa\xdf\x45\xce\x70\x05\x0d\xd7\x85\xbc\x24\xaa\x75\x45\x32\x26\xe7\xbd\x90\x04\xfc\xe3\x6c\x42\x15\x55\x29\x9f\x26\xaa\x24\x89\x33\x5e\xdf\x31\xab\x1d\x55\x7f\x20\xe8\xc7\xb6\x87\x3d\xea\x6b\xe3\x88\x37\xa5\xfc\x72\x64\x2c\x00\x3b\xcd\xc6\x7a\xda\xcf\x88\xe7\xc7\x00\x74\xae\x9c\x5c\xed\xd6\xc1\xbf\x01\x00\x00\xff\xff\xc5\xce\xd2\xc0\x59\x01\x00\x00") - -func testE2eTestingManifestsGuestbookFrontendServiceYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsGuestbookFrontendServiceYaml, - "test/e2e/testing-manifests/guestbook/frontend-service.yaml", - ) -} - -func testE2eTestingManifestsGuestbookFrontendServiceYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsGuestbookFrontendServiceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/frontend-service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsGuestbookLegacyFrontendControllerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x92\x3f\x6f\xdb\x30\x10\xc5\x77\x7d\x8a\x07\x74\xc8\x62\x37\x0e\xda\xa1\xe0\x5a\xf4\xdf\x10\xa4\x48\x82\xae\xc6\x89\x3a\xcb\x44\xa8\x3b\x96\x3c\xa9\xc8\xb7\x2f\xe8\x46\xb2\x54\x6e\xfa\x1d\xdf\xef\x1e\x24\x51\x0a\xbf\x38\x97\xa0\xe2\x30\xdd\x35\x2f\x41\x3a\x87\x47\x4e\x31\x78\xb2\xa0\xf2\x59\xc5\xb2\xc6\xc8\xb9\x19\xd8\xa8\x23\x23\xd7\x00\x42\x03\x3b\x9c\xb2\x8a\xb1\x74\x4d\x49\xec\x2b\xce\xff\x82\xc5\xe1\x43\x03\x18\x0f\x29\x92\x71\x9d\x00\xeb\x78\x3d\x91\x5a\x8e\x65\x7e\x02\x28\x25\x87\x7e\xe4\x62\xad\xea\xcb\x82\x2d\x70\x5e\x6d\xaa\x68\xde\x56\x8f\x57\x31\x0a\xc2\x79\x31\xed\xdf\xca\xa5\x73\xda\x67\xee\x42\x59\x54\x61\xa0\x9e\x1d\x7a\x9f\xdf\x07\xbd\xed\x55\xfb\xc8\xc7\x42\x43\x8a\x5c\x6e\xfb\x76\x3f\x2f\x71\xd3\xc7\x25\x93\xb9\xe8\x98\x3d\xaf\x8a\x56\xf8\xbb\xf6\xdc\x30\xc0\xa7\xd1\xe1\xee\x70\x18\x36\x74\xe0\x41\xf3\xeb\x65\x70\x1f\x96\x09\xcb\x74\x0d\xcf\x8d\xbf\x7d\x79\x3e\x7e\x7f\x78\x7a\x7e\x3a\x7e\x7d\x7c\xb8\x5f\x59\x26\x8a\x23\x3b\x74\x52\x56\xf0\x1d\x7e\x9c\xf0\xaa\x63\x86\x8f\x63\x31\xce\xf5\x5d\x9c\x42\x8f\x4e\xb9\x40\xd4\x10\xc4\xc7\xb1\x63\x50\x4d\xa2\x70\x9e\x82\xe7\x1d\xec\xcc\x02\xd3\x8d\x2a\x48\x31\xa6\x0e\xe4\x3d\x97\x52\xeb\x85\xac\x32\xb0\x18\x26\xca\x81\xda\xc8\x05\xa6\x38\x05\xe9\x66\x13\xce\x5a\xec\x3f\xcb\x49\x77\xf0\x3a\x5c\x82\x3a\x5a\xdd\x85\x9b\x6b\xfd\x1b\xc4\x20\x0c\x6a\x75\xe2\x1d\x48\x3a\x8c\x32\x5f\xb7\x33\x6f\x64\x97\x9b\x2d\x47\xfd\xe3\x36\xfc\xcd\xc6\x32\x2d\x38\x69\x5e\x7f\x8c\xfd\xf5\xaf\xf8\xa9\xd9\x1c\x3e\x1d\x9a\xbf\x01\x00\x00\xff\xff\x1c\xa9\xd8\xd7\xe8\x02\x00\x00") - -func testE2eTestingManifestsGuestbookLegacyFrontendControllerYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsGuestbookLegacyFrontendControllerYaml, - "test/e2e/testing-manifests/guestbook/legacy/frontend-controller.yaml", - ) -} - -func testE2eTestingManifestsGuestbookLegacyFrontendControllerYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsGuestbookLegacyFrontendControllerYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/legacy/frontend-controller.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\xcd\x4e\x03\x31\x0c\x84\xef\x79\x8a\x91\x38\xb7\xb4\x20\xf1\x93\x2b\x67\x24\xc4\x81\xbb\x9b\xb5\xaa\xd0\x24\x0e\x8e\x17\x89\xb7\x47\xe9\xcf\xb2\x2d\xf5\xcd\x33\xf6\x7c\x36\xd5\xf8\xc1\xda\xa2\x14\x8f\xef\xb5\xdb\xc5\x32\x78\xbc\x73\x4d\x31\x90\x45\x29\x2f\x52\x4c\x25\x25\x56\x97\xd9\x68\x20\x23\xef\x80\x42\x99\x3d\x94\x87\xd8\x16\x99\x9a\xb1\x3a\x20\xd1\x86\x53\xeb\x36\x40\xb5\x1e\xfd\x7d\xab\x92\xd8\x63\x9a\x04\x2c\xb2\x7a\x6c\x28\xec\xb8\x0c\xae\x55\x0e\x7d\x4f\x0f\xe0\xe6\xb1\x76\x80\x71\xae\x89\x8c\x0f\x89\x73\x7c\xaf\x39\xed\x0a\xf1\x2a\xf5\x3f\xb9\x2b\x27\x7a\xaf\x20\xc5\x28\x16\xd6\x29\x79\x71\x7c\xf6\x22\x26\x66\xda\xb2\xc7\xee\xa9\x2d\xb7\x41\x97\x51\x6e\xf7\x6c\xcf\x77\x0c\xdc\x40\x14\x9f\x63\xb3\xd3\xd8\xc5\x5d\xdc\x64\xd4\xc0\xb3\xeb\xbb\xf8\x35\x72\xb3\x33\x0d\x08\x75\xf4\x58\xaf\x56\xf9\x4c\xcd\x9c\x45\x7f\xf6\xc6\x6b\x9c\x9c\x2a\x3a\x5f\x5f\xfc\x3d\xf3\x26\x6a\x1e\x0f\xf7\x8f\xcf\xee\x37\x00\x00\xff\xff\x6e\x00\xde\x3d\xf1\x01\x00\x00") - -func testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYaml, - "test/e2e/testing-manifests/guestbook/legacy/redis-master-controller.yaml", - ) -} - -func testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/legacy/redis-master-controller.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x92\xcd\x6e\xdb\x30\x10\x84\xef\x7a\x8a\x01\x7a\xf0\xc5\x6e\xe2\x16\x68\x51\x5e\x8b\xfe\x1d\x82\x14\x49\xd0\xab\xb1\xa2\xd6\x0a\x11\x72\x57\x25\x29\x16\x79\xfb\x82\x8a\x65\x4b\x48\x78\xf3\xec\xce\x7c\x43\x53\x34\xb8\x3f\x1c\x93\x53\x31\x28\xfb\xe6\xc9\x49\x67\x70\xc7\x83\x77\x96\xb2\x53\xf9\xaa\x92\xa3\x7a\xcf\xb1\x09\x9c\xa9\xa3\x4c\xa6\x01\x84\x02\x1b\x44\xee\x5c\xda\x25\x4f\x85\x1b\xc0\x53\xcb\x3e\xd5\x29\x40\xc3\x70\x1a\x4f\x3f\xa3\x7a\x36\x98\x17\x81\xec\x38\x1a\xb4\x64\x9f\x58\xba\x26\x0d\x6c\xab\x2d\xbe\x60\x93\xc1\x87\x06\xc8\x1c\x06\x4f\x99\x5f\x02\x97\xf0\x7a\x96\xb0\x37\x80\x6f\x41\x5f\x83\xab\x32\xc3\xeb\xb1\x2a\x99\x9c\x70\x3c\x07\xef\x4e\x37\x5d\xa7\xb8\x40\x3d\x1b\xf4\x36\xbe\x77\x7a\xd5\xab\xf6\x9e\x0f\x89\xc2\xe0\x39\x5d\xf5\xed\x6e\xea\x31\x59\x4c\xd9\x5f\xfa\x70\xd2\x31\x5a\x5e\xb4\xae\xe2\xdf\x91\x53\x5e\x69\x80\x1d\x46\x83\xfd\xf5\x75\x58\xa9\x81\x83\xc6\xe7\x69\x70\xe3\xce\x13\x96\x72\x31\xcf\x7d\x7f\x7c\x7b\x38\xfc\xbc\xbd\x7f\xb8\x3f\x7c\xbf\xbb\xbd\x59\xa4\x14\xf2\x23\x1b\x74\x92\x16\xe2\x3b\xfc\x3a\xe2\x59\xc7\x08\xeb\xc7\x94\x39\xd6\x7f\xe2\xe8\x7a\x74\xca\x09\xa2\x19\x4e\xac\x1f\x3b\x06\x55\x27\x12\xc7\xe2\x2c\x6f\x91\x1f\x59\x90\x75\x15\xe5\x24\x65\xa6\x0e\x64\x2d\xa7\x04\x92\xda\xd0\x45\x95\xc0\x92\x51\x28\x3a\x6a\x3d\x23\x2b\x8e\x4e\xba\x1a\x81\x40\x15\xba\x4a\x39\x21\x36\x09\x8f\x9a\xf2\x16\x56\xc3\xe4\xd7\x31\x4f\x96\xcd\xe5\x22\x1b\x78\x27\x0c\x6a\xb5\xf0\x16\x74\x7a\xd7\x39\x68\x94\xd9\x5a\x6d\xd3\x66\xcb\x5e\xff\x99\xd5\xd6\x29\x8d\xa5\x9c\xe5\x41\xe3\xf2\x59\x76\x97\xaf\xe3\xb7\xc6\x6c\xf0\xe9\xe3\xe7\x2f\xcd\xff\x00\x00\x00\xff\xff\x37\xc9\x2e\xe9\x3f\x03\x00\x00") - -func testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYaml, - "test/e2e/testing-manifests/guestbook/legacy/redis-slave-controller.yaml", - ) -} - -func testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/legacy/redis-slave-controller.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xcd\x4a\x43\x31\x10\x85\xf7\x79\x8a\x79\x81\x6a\x2f\x82\x62\xd6\x6e\x04\x05\x71\xe1\x7e\x9a\x7b\xd0\xd0\xfc\x39\x99\x2b\x94\xd2\x77\x97\xd8\xd8\xde\xab\x9d\x5d\xce\x21\xdf\x37\x09\x17\xff\x06\xa9\x3e\x27\x4b\x5c\x4a\xbd\xfe\x1a\xcc\xd6\xa7\xd1\xd2\x03\x4a\xc8\xbb\x88\xa4\x26\x42\x79\x64\x65\x6b\x88\x12\x47\x58\x12\x8c\xbe\xae\x22\x57\x85\x98\x5a\xe0\x5a\x25\x28\xc1\x3b\xae\x96\x06\x43\x54\x11\xe0\x34\x4b\x6b\x88\x22\xab\xfb\x78\xe2\x0d\x42\x3d\x06\xd4\x74\x1d\xd4\x03\xc9\x01\x96\x3a\xf4\x18\xa9\x87\x58\xda\xb0\xdb\x22\x8d\x86\x48\x11\x4b\x60\x45\x87\xce\xf6\x6a\x13\x16\xfc\x0b\x86\x8b\x8e\xff\x16\xa2\xdf\x27\xb5\x71\x39\x29\xfb\x04\x39\x91\x57\xfd\x17\xfe\x60\x7c\xe4\x77\x58\xda\xef\xaf\x5e\x9b\xf3\xb1\x1d\x0f\x87\xb3\x1a\x35\x4f\xe2\x30\x5b\xb0\x85\x9f\x13\xaa\x2e\x32\x22\x57\x26\x4b\xc3\x7a\x1d\x17\x69\x44\xcc\xb2\xfb\x29\x9e\xfd\xa9\x29\x59\xe6\xd7\x57\xe7\x7d\x5f\xb2\xa8\xa5\xdb\x9b\xbb\x7b\xf3\x1d\x00\x00\xff\xff\x2d\xdf\x6e\xe2\xe7\x01\x00\x00") - -func testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlInBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlIn, - "test/e2e/testing-manifests/guestbook/redis-master-deployment.yaml.in", - ) -} - -func testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlIn() (*asset, error) { - bytes, err := testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/redis-master-deployment.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsGuestbookRedisMasterServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x8d\x41\xaa\xc3\x30\x0c\x44\xf7\x3e\xc5\x5c\x20\x8b\xcf\x87\x96\xea\x14\x85\x42\xf7\x8a\x3d\x14\x13\xc7\x36\xb2\xc8\xf9\x4b\xd2\x52\xba\xee\x4e\xd2\x7b\x9a\xd1\x9e\xef\xb4\x91\x5b\x15\x6c\x7f\x61\xc9\x35\x09\x6e\xb4\x2d\x47\x86\x95\xae\x49\x5d\x25\x00\x55\x57\x0a\x8c\x29\x8f\x69\xd5\xe1\xb4\x00\x14\x9d\x59\xc6\x8e\x01\xed\xfd\xcd\x8f\xd5\x5a\xa1\xe0\x63\x02\x9e\x69\x82\x59\xe3\xc2\x9a\xc2\xe8\x8c\xfb\x5f\x6f\xe6\x47\xc0\x74\x8c\x82\xd3\xff\xf9\xf2\xf2\xd5\x1e\xf4\xeb\xf7\x71\xb0\x30\x7a\xb3\x5f\x0a\x9f\x01\x00\x00\xff\xff\x35\x30\xd5\x6a\xe9\x00\x00\x00") - -func testE2eTestingManifestsGuestbookRedisMasterServiceYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsGuestbookRedisMasterServiceYaml, - "test/e2e/testing-manifests/guestbook/redis-master-service.yaml", - ) -} - -func testE2eTestingManifestsGuestbookRedisMasterServiceYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsGuestbookRedisMasterServiceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/redis-master-service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x92\x4f\x6f\x13\x31\x14\xc4\xef\xfb\x29\x46\xe2\x90\x4b\x02\x2d\x48\x20\x7c\x44\x40\xa9\x44\x55\xd4\x54\x5c\xab\x17\xef\xa4\xb1\x6a\xfb\x2d\xb6\x77\x51\x54\xf5\xbb\x23\x27\x9b\x3f\x2b\xba\xc7\x19\xcf\x6f\xde\x5b\x5b\x3a\xf7\x9b\x29\x3b\x8d\x06\xd2\x75\xf9\xdd\x70\xd9\x3c\xb9\xd8\x1a\x7c\x65\xe7\x75\x1b\x18\x4b\x13\x58\xa4\x95\x22\xa6\x01\xa2\x04\x1a\x24\xb6\x2e\x2f\xb2\x97\x81\x4d\xee\x68\xab\x93\xd8\x79\x67\x25\x1b\xbc\x6f\x80\x4c\x4f\x5b\x34\x55\x07\x08\x52\xec\xe6\xa7\xac\xe8\xf3\x5e\x40\x6d\x1b\x39\xa3\x90\xd4\xd3\x60\xcf\xdc\x2b\xc5\x31\x19\xac\xc4\x3e\x31\xb6\x0d\x50\x18\x3a\x2f\x85\x23\xf3\x6c\xaa\xfa\xf9\x09\xfe\x95\x82\xd7\x2a\xfe\x2f\x01\x0e\x0b\xd5\xcf\x6a\x2c\xe2\x22\xd3\x11\xbc\x18\x7f\xc1\x94\xe2\x82\x3c\xd2\xe0\xf9\xf9\xed\xd5\x97\xbb\xda\xb9\xac\xf6\x75\x55\x5f\x5e\x4e\xfd\xcc\xda\x27\xcb\xb3\x29\xab\xf8\xa7\x67\x2e\x13\x0d\xb0\x5d\x6f\x70\x79\x71\x11\x26\x6a\x60\xd0\xb4\xdd\x19\x37\xee\xe8\x30\x0e\xa7\xf0\x61\xbe\xab\x6f\xf7\x0f\x3f\x6e\x97\xf7\xcb\x87\xef\x77\xb7\x37\x67\x94\x41\x7c\x4f\x83\x36\xe6\x33\xf1\x0d\xae\xd7\xd8\x6a\x9f\x60\x7d\x9f\x0b\x53\xdd\x7c\xed\x1e\xd1\x2a\x33\xa2\x16\xb8\x68\x7d\xdf\x12\x52\x93\xc8\x4c\x83\xb3\x9c\xa3\x6c\x18\x51\x74\x82\x72\x31\x17\x4a\x0b\xb1\x96\x39\x43\x62\x9d\xd0\x25\x8d\xf5\x35\x61\x90\xe4\x64\xe5\x89\xa2\x58\xbb\xd8\x56\x04\x82\xd4\xd2\x09\x65\xac\x98\x65\x6c\x34\x97\x39\xac\x86\x5d\x5e\xfb\xb2\x8b\xcc\x4e\x8b\xcc\xe0\x5d\x24\x64\xa5\x03\xe7\x90\xf1\x1e\x0f\xa0\x3e\x1e\xa2\x35\xb6\x3b\xb9\xa2\xd7\xbf\x66\x72\x6a\xa4\x31\x0e\x47\xb9\xd3\x74\x7e\x2d\x8b\xd3\x6b\xf8\xa5\xa9\x18\x7c\xfc\xf0\xe9\x73\xf3\x2f\x00\x00\xff\xff\x68\x71\x64\x7e\x42\x03\x00\x00") - -func testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlInBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlIn, - "test/e2e/testing-manifests/guestbook/redis-slave-deployment.yaml.in", - ) -} - -func testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlIn() (*asset, error) { - bytes, err := testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/redis-slave-deployment.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsGuestbookRedisSlaveServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x8c\x41\xaa\xc3\x30\x10\x43\xf7\x3e\x85\x2e\x90\xc5\xe7\x43\x4b\xe7\x1a\x85\xee\x27\xb6\x16\x43\x1c\xdb\xcc\x98\x9c\xbf\x24\xb4\x17\xe8\x4e\xe2\xe9\x49\x87\xbd\xe8\x61\xbd\x09\x8e\xbf\xb4\x59\x2b\x82\x27\xfd\xb0\xcc\xb4\x73\x6a\xd1\xa9\x92\x80\xa6\x3b\x05\xce\x62\xb1\x44\xd5\x83\x09\xa8\xba\xb2\xc6\x49\x01\x1d\xe3\x83\xaf\xea\xbd\x52\xf0\x1d\x02\xd3\xe8\x82\x55\xf3\xc6\x56\x52\x0c\xe6\x53\x1b\xdd\xe7\xe5\x2f\x57\x14\xdc\xfe\xef\x8f\x04\x04\x2b\xf3\xec\xfe\xc3\xf5\x3b\x00\x00\xff\xff\x51\x66\x08\x5a\xd1\x00\x00\x00") - -func testE2eTestingManifestsGuestbookRedisSlaveServiceYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsGuestbookRedisSlaveServiceYaml, - "test/e2e/testing-manifests/guestbook/redis-slave-service.yaml", - ) -} - -func testE2eTestingManifestsGuestbookRedisSlaveServiceYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsGuestbookRedisSlaveServiceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/guestbook/redis-slave-service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressGceStaticIp2IngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8e\x31\x4e\x03\x31\x10\x45\x7b\x9f\xe2\x2b\xd4\xbb\x21\x1d\xf2\x0d\x68\x10\x05\xa2\x9f\xb5\x87\xd8\xca\x66\xc6\xf2\x4c\x22\xb8\x3d\xda\x4d\x36\x14\x74\xf3\x9f\xec\xa7\x47\xad\x7e\x72\xb7\xaa\x12\xc1\xdf\xce\xb2\x9c\xb6\xbf\x1e\x26\x76\x3a\x84\x53\x95\x1c\xf1\x2a\xc7\xce\x66\xe1\xcc\x4e\x99\x9c\x62\x00\x84\xce\x1c\x61\x4e\x5e\xd3\x50\x5b\x00\x9e\xf0\x51\xaa\x81\x44\x74\xa1\x2a\x58\x56\xce\x9c\x31\xfd\xc0\x0b\xc3\xd9\x1c\x97\xa6\x02\x9a\x67\x4d\xe4\x55\x8e\xa0\xbb\xa4\xb6\x71\x95\xfc\xfd\xb7\xb8\x02\x9c\x2e\x13\x77\x61\x67\x1b\xab\xee\xeb\x2d\x66\x3c\xce\x3a\xd1\x3c\x3c\x0a\x86\x5b\xd1\x6e\xb3\xed\x82\x35\x4e\x8b\xa2\x5f\x66\x5e\x5d\x03\x8a\x9a\x47\x6c\x8a\xa5\x67\x4c\x7a\x0e\x00\x50\xdc\x5b\x5c\x2f\xa0\x91\x17\xdb\xc6\xb0\xce\x88\xfd\x97\xea\x1d\x01\x13\xa5\x13\x4b\x8e\x0f\x00\x18\xf7\x6b\x4d\xfc\xb6\x66\x70\x2a\x5a\x98\x32\x77\x1b\x16\xb3\xfd\x7f\xf8\xae\xdd\x23\x5e\x9e\xc3\x6f\x00\x00\x00\xff\xff\x8b\x88\x7e\x57\x84\x01\x00\x00") - -func testE2eTestingManifestsIngressGceStaticIp2IngYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressGceStaticIp2IngYaml, - "test/e2e/testing-manifests/ingress/gce/static-ip-2/ing.yaml", - ) -} - -func testE2eTestingManifestsIngressGceStaticIp2IngYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressGceStaticIp2IngYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/gce/static-ip-2/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressGceStaticIp2RcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8e\x31\x6e\x03\x31\x0c\x04\x7b\xbd\x82\x1f\x90\xed\x5c\x65\xa8\xcd\x07\x82\x14\xe9\x69\xdd\xc2\x27\x58\x12\x05\x92\xf1\xfb\x03\x25\x38\xc7\x45\xb2\x1d\xb1\xdc\xc1\xf0\x28\x1f\x50\x2b\xd2\x13\xdd\x5f\xc2\xad\xf4\x35\xd1\x3b\x46\x2d\x99\xbd\x48\x7f\x95\xee\x2a\xb5\x42\x43\x83\xf3\xca\xce\x29\x10\x75\x6e\x48\x84\xbc\xc9\x06\x5e\xa1\x16\x37\xf7\x61\xc1\x06\xf2\xec\xf5\x87\x60\x89\x96\x40\xe4\x68\xa3\xb2\x63\x36\x44\xcf\x9c\x99\xca\x17\x54\xdb\x2f\x22\x1e\xe3\x2f\xf4\xac\x76\xfc\x4c\x96\xee\x5c\x3a\xf4\x31\x8d\xff\x6a\xed\xe8\xd2\xf8\x8a\x44\xd7\xac\x87\x22\xc7\xdb\xe7\x05\xda\xe1\xb0\x88\x05\xd1\x61\x1e\xbf\x3f\xec\x38\x11\x06\xbd\x43\xd3\x72\x58\x1e\xfb\x21\xea\x4f\xa6\xf1\x57\xe2\x4d\xd4\x13\x9d\x4f\xe7\x53\xf8\x0a\x00\x00\xff\xff\xa9\x29\xab\x0c\x53\x01\x00\x00") - -func testE2eTestingManifestsIngressGceStaticIp2RcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressGceStaticIp2RcYaml, - "test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml", - ) -} - -func testE2eTestingManifestsIngressGceStaticIp2RcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressGceStaticIp2RcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressGceStaticIp2SvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8e\xc1\x0a\xc2\x30\x0c\x86\xef\x7d\x8a\xff\x05\x06\x7a\x93\x5e\xbd\xcb\x40\xf1\x1e\xdb\xe0\x8a\xdd\x12\xd2\x30\xf0\xed\x65\x75\x47\xf1\x16\x3e\xbe\x24\x1f\x69\xb9\xb3\xb5\x22\x4b\xc4\x7a\x0c\xaf\xb2\xe4\x88\x2b\xdb\x5a\x12\x87\x99\x9d\x32\x39\xc5\x00\x2c\x34\x73\x04\xa7\x49\x26\xa6\xcc\xd6\x86\xc9\x5d\x5b\x00\x2a\x3d\xb8\xb6\xcd\x01\x48\xf5\x97\xd4\x94\xd3\x26\xf8\x5b\x39\xe2\x22\x99\x47\x31\x0f\x80\x8a\x79\x5f\x1d\xfa\x18\x71\x3a\xf4\x3b\x4e\xf6\x64\x1f\x77\xb4\x43\x35\x71\x49\x52\x23\x6e\xe7\xb1\x93\x6f\xd4\xf6\x23\x00\x8d\x2b\x27\x17\xfb\x5b\xf2\x09\x00\x00\xff\xff\x0d\x93\xec\x7c\xf0\x00\x00\x00") - -func testE2eTestingManifestsIngressGceStaticIp2SvcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressGceStaticIp2SvcYaml, - "test/e2e/testing-manifests/ingress/gce/static-ip-2/svc.yaml", - ) -} - -func testE2eTestingManifestsIngressGceStaticIp2SvcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressGceStaticIp2SvcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/gce/static-ip-2/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressHttpIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\xcf\xb1\x4e\x03\x31\x0c\x06\xe0\x3d\x4f\xf1\x4b\xcc\xbd\xd2\x0d\xe5\x0d\x58\x10\x13\xbb\x93\xf3\x71\xd1\xf5\x92\x60\xfb\xaa\xc2\xd3\xa3\xb4\x1c\x2a\x0c\x95\x40\x6a\x26\xdb\xc9\x6f\x7d\xa1\x9a\x5e\x58\x34\x95\xec\xc1\x47\xe3\xdc\x4a\xdd\x1e\x76\x81\x8d\x76\x6e\x4a\xb9\xf7\x78\xcc\xaf\xc2\xaa\x6e\x66\xa3\x9e\x8c\xbc\x03\x32\xcd\xec\xc1\x71\x2c\x33\x55\xa7\x95\x63\x9b\xde\x61\x5a\x02\xcf\x31\x41\xf8\x6d\x49\xc2\x0a\x42\xcf\x03\x2d\x7b\x43\xa0\x38\x71\xee\x3b\x87\xb5\x6c\x11\x40\x59\x0e\x29\xf2\xd3\xf7\xc6\x91\xa9\x67\xd1\xe3\xe5\xed\x73\x11\xf3\x78\xb8\x77\x80\x2c\x7b\xd6\x16\xdd\x60\x2c\x6a\x1e\x43\x29\x5d\x20\xe9\x62\x99\x4f\x91\xd1\xac\x9e\x57\x03\x95\x6c\xd4\xb5\xd9\x9c\x5a\x8f\xed\x50\xca\xd7\xe8\x97\xe5\x7c\xae\x8b\x7e\xbc\xb9\x70\xad\x9c\x46\x09\xf4\xf1\x07\x4e\x20\xf9\x0f\xe7\xfd\x2a\xe7\xd6\x1f\xfe\x0c\x00\x00\xff\xff\xf3\xe2\x96\x80\x3b\x02\x00\x00") - -func testE2eTestingManifestsIngressHttpIngYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressHttpIngYaml, - "test/e2e/testing-manifests/ingress/http/ing.yaml", - ) -} - -func testE2eTestingManifestsIngressHttpIngYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressHttpIngYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressHttpRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\x3d\x8e\xe3\x30\x0c\x85\x7b\x9f\x82\x17\x70\xfe\xaa\x40\xed\x16\xdb\x06\xbb\x8b\xed\x19\xf9\x4d\x24\x44\x16\x05\x92\x4e\x31\xa7\x1f\x78\x66\x9c\x38\x98\xbc\x4e\xfc\xf4\x3e\x11\xe2\x96\xff\x43\x2d\x4b\x0d\x74\xdb\x77\xd7\x5c\x87\x40\x7f\xd0\x4a\x8e\xec\x59\xea\x2f\xa9\xae\x52\x0a\xb4\x1b\xe1\x3c\xb0\x73\xe8\x88\x2a\x8f\x08\x84\x98\x24\x81\x07\xa8\x75\xd6\x10\x67\xa2\x5f\x5d\x0b\xb4\xef\x88\x1c\x63\x2b\xec\x98\x09\xd1\xda\x30\xa7\xf0\x19\xc5\x96\x13\x11\xb7\xf6\x2c\x9d\x87\x8b\x78\x4e\x94\xea\x9c\x2b\xf4\x5e\xea\x5f\xac\xb2\xe8\xf2\xc8\x17\x04\xba\x44\xdd\x64\xd9\x5e\xa7\x33\xb4\xc2\x61\x3d\x0e\xe8\x1d\xe6\xfd\xe7\x0d\xdb\xce\x65\x83\xde\xa0\xe1\xb0\x39\xdc\xfb\x4d\xd4\x57\xdb\xf5\x8f\xe7\x4f\xa2\x1e\xe8\xb8\x3b\xee\xee\x54\xc1\x43\xae\x30\x3b\xa9\x9c\xf1\x68\x11\x25\xf7\xf6\x1b\xbe\x1e\x11\x35\xf6\x14\x68\x9b\xc0\xc5\xd3\xfb\x33\xfa\x29\x27\x6a\xd0\x2c\xc3\x5f\x44\xa9\xc3\xf7\xdf\x2e\xf1\x3c\x42\x26\x7f\xc9\x6c\x8a\x11\x66\xff\x92\xc2\x92\x94\xe1\x99\xbe\x71\x2e\x93\x62\x4d\x77\xdd\x47\x00\x00\x00\xff\xff\xb8\x09\xcb\x33\x12\x02\x00\x00") - -func testE2eTestingManifestsIngressHttpRcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressHttpRcYaml, - "test/e2e/testing-manifests/ingress/http/rc.yaml", - ) -} - -func testE2eTestingManifestsIngressHttpRcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressHttpRcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressHttpSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x8f\xb1\x4a\x06\x41\x0c\x84\xfb\x3c\xc5\xbc\xc0\x82\x76\xb2\xad\xbd\x1c\x28\xf6\x71\x37\x78\x8b\xfb\x5f\x42\x36\x1c\xde\xdb\xcb\xad\xd7\x58\xd8\xd8\xd9\x85\xef\x23\xc3\x0c\x5b\x7b\x15\x1f\x4d\xb7\x8c\xfd\x9e\x3e\xda\x56\x33\x9e\xc5\xf7\x56\x84\x6e\x12\x5c\x39\x38\x13\xb0\xf1\x4d\x32\xa4\xac\xba\x0a\x57\xf1\xf1\x49\x40\xe7\x37\xe9\xe3\xd4\x00\x9b\xfd\xf0\x34\x4c\xca\xa9\xe2\x30\xc9\x78\xd2\x2a\x8b\x7a\x10\x60\xea\x31\x9f\xd2\x3c\x33\x1e\xee\x66\x42\xb0\xbf\x4b\x2c\x17\xba\xa0\xb9\x86\x16\xed\x19\x2f\x8f\xcb\x24\xdf\x4d\xd6\x08\x23\x60\x48\x97\x12\xea\xbf\x74\x48\x29\xd1\xdf\x27\x1e\xff\x61\x22\x7d\x05\x00\x00\xff\xff\xb7\x97\x1c\xfe\xc3\x01\x00\x00") - -func testE2eTestingManifestsIngressHttpSvcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressHttpSvcYaml, - "test/e2e/testing-manifests/ingress/http/svc.yaml", - ) -} - -func testE2eTestingManifestsIngressHttpSvcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressHttpSvcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressHttp2IngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\xcc\xb1\xce\xc2\x30\x10\x03\xe0\x3d\x4f\x61\xe9\xdf\x7f\x54\xd1\x29\x6f\xc0\x82\x98\xd8\xaf\x89\xa1\x51\x49\x5a\xee\xae\x15\x8f\x8f\x3a\x80\xd8\x3e\xd9\xb2\x65\x29\x57\xaa\x95\xb9\x45\xf0\xe5\x6c\x3b\xed\xb0\x75\x03\x5d\xba\x30\x95\x96\x23\x4e\xed\xae\x34\x0b\x95\x2e\x59\x5c\x62\x00\x9a\x54\x46\x30\x8d\x73\x95\x25\xd8\xc2\xb4\xa7\x7f\x98\xd6\x81\x35\x15\x28\x9f\x6b\x51\x1a\x04\x99\x37\x59\x1f\x8e\x41\xd2\xc4\x96\xff\x03\x3e\xdc\x27\x80\x51\xb7\x92\x78\xfe\x3e\x8e\x94\x4c\xb5\xdf\xf2\x32\xab\x47\xf4\xfd\x31\xbc\x03\x00\x00\xff\xff\xd2\xb6\x90\xcc\xb2\x00\x00\x00") - -func testE2eTestingManifestsIngressHttp2IngYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressHttp2IngYaml, - "test/e2e/testing-manifests/ingress/http2/ing.yaml", - ) -} - -func testE2eTestingManifestsIngressHttp2IngYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressHttp2IngYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http2/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressHttp2RcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8e\xbd\x6e\x03\x31\x0c\x83\x77\x3f\x85\x5e\xc0\x39\xe4\x9a\xa1\xf0\xdc\xb1\x43\xa7\xee\x8a\x8f\xc8\x19\xf1\x1f\x24\x35\x40\xdf\xbe\x70\xdb\xfc\x01\xc7\x51\xd4\x47\x92\x7b\xfa\x84\x68\x6a\x35\x10\xf7\xae\xd3\x65\xef\xce\xa9\x2e\x81\xde\xd0\x73\xfb\x2e\xa8\xe6\x0a\x8c\x17\x36\x0e\x8e\xa8\x72\x41\x20\xc4\xb5\xad\xe0\x05\xa2\x4e\x3b\xe2\x70\x04\x3d\xa7\xc8\x1a\x68\xef\x88\x14\x19\xd1\x9a\x0c\x87\xa8\xb0\xc5\xf5\x9d\x8f\xc8\xfa\x77\xa0\xd1\xf6\x9c\x43\x64\x28\x3d\xb3\xe1\x9f\x79\x68\x1d\xca\x4f\xf8\x66\x00\xd1\x75\xcc\x50\x6c\xd5\x38\x55\xc8\x0d\xf2\x1b\xf3\xaf\x71\xa9\xf0\x09\x81\x4e\x51\x76\xa9\x4d\xe7\xaf\x23\xa4\xc2\xa0\x1e\x33\xbc\x41\xcd\xff\x7e\xe8\x34\x60\x85\x5c\x20\x61\xde\xcd\x37\xbe\x37\xb1\x87\x75\xfe\x5e\xff\xd1\xc4\x02\xbd\x1e\x0e\x2f\xee\x27\x00\x00\xff\xff\x5a\xc7\xda\xaa\x6f\x01\x00\x00") - -func testE2eTestingManifestsIngressHttp2RcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressHttp2RcYaml, - "test/e2e/testing-manifests/ingress/http2/rc.yaml", - ) -} - -func testE2eTestingManifestsIngressHttp2RcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressHttp2RcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http2/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressHttp2SvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8f\xbf\x4e\x03\x31\x0c\xc6\xf7\x3c\x85\x75\x4b\xa7\x1e\xa2\x74\x40\x5e\x59\x98\xd0\x49\x9c\xd8\xdd\x9c\xc5\x45\x4d\x63\xcb\x31\x95\x10\xe2\xdd\x51\x52\x6e\x60\xc0\x93\xfd\x7d\xfe\xf3\x33\x69\x7a\x63\xab\x49\x0a\xc2\xf5\x3e\x9c\x53\x59\x10\x5e\xd9\xae\x29\x72\xb8\xb0\xd3\x42\x4e\x18\x00\xa8\x14\x71\xf2\x24\xa5\xb6\xb2\x45\xbd\xb5\x8d\x94\x75\xa5\xf1\xfc\x71\x62\x2b\xec\x5c\xc7\x24\x77\xa4\xba\x57\x13\x97\x28\xb9\x22\xec\xbe\x86\xd5\x5d\x0f\x03\x0e\xcf\xf3\x3c\x1d\x86\xef\x5d\x00\x28\x74\x61\x04\x8e\xab\xac\x4c\x0b\x5b\x0d\x00\x99\x4e\x9c\x7f\x4f\x90\xea\x5f\xbb\x2a\xc7\x66\xf9\xa7\x32\xc2\x8b\x2c\x3c\x89\x79\x00\x50\x31\xef\x43\xfb\x9e\x22\x1c\x8f\x0f\x7d\x85\x93\xbd\xb3\x4f\x5d\x7b\xdc\xc4\x0d\x0c\x61\x7e\x9a\xba\x72\x23\xe9\x88\xa1\x3d\x96\x39\xba\xd8\x3f\x14\x3f\x01\x00\x00\xff\xff\x9d\xf4\x34\x9b\x34\x01\x00\x00") - -func testE2eTestingManifestsIngressHttp2SvcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressHttp2SvcYaml, - "test/e2e/testing-manifests/ingress/http2/svc.yaml", - ) -} - -func testE2eTestingManifestsIngressHttp2SvcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressHttp2SvcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/http2/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressMultipleCertsIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x8e\x3b\x4e\x04\x31\x10\x44\x73\x9f\xa2\x2e\x30\xbb\x2c\x10\xa0\xbe\x01\x09\x22\x22\xef\xf5\x94\xb0\xb5\x33\xb6\xe5\xee\x5d\x71\x7c\xe4\xe1\x13\xc0\x05\x26\x7b\x55\x76\x97\x9e\xb6\xfc\xc6\x6e\xb9\x16\x01\x3f\x9c\x65\xa0\x1d\x6f\xa7\x33\x5d\x4f\xe1\x92\xcb\x2c\x78\x2e\xef\x9d\x66\x61\xa5\xeb\xac\xae\x12\x80\xa2\x2b\x05\xeb\x75\xf1\xdc\x16\x4e\x91\xdd\x2d\x58\x63\x1c\x8f\xfd\xba\xd0\x06\x4c\x48\xd5\x5c\xe0\x34\x3f\x1d\xf2\xd7\xce\x21\xd6\x35\x00\x40\x72\x6f\xb2\x11\xd0\xd4\x93\xfd\x84\x69\x8b\x82\xe3\xb8\xfb\xee\x80\xb3\xc6\x0b\xcb\x2c\xbf\x05\x60\xec\xb7\x1c\xf9\xb2\xc9\x30\xa6\x9a\xa8\x33\xbb\x4d\x63\xda\xfe\x7f\x7c\xad\xdd\x05\x4f\x77\x7f\xd4\xee\xf7\xab\xf6\xb0\x5f\xb5\xc7\x3d\xa9\x7d\x06\x00\x00\xff\xff\x44\x1a\x7f\x5f\xc9\x02\x00\x00") - -func testE2eTestingManifestsIngressMultipleCertsIngYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressMultipleCertsIngYaml, - "test/e2e/testing-manifests/ingress/multiple-certs/ing.yaml", - ) -} - -func testE2eTestingManifestsIngressMultipleCertsIngYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressMultipleCertsIngYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/multiple-certs/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressMultipleCertsRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8e\x31\x6e\x03\x31\x0c\x04\x7b\xbd\x82\x1f\x90\xed\x5c\x65\xa8\xcd\x07\x82\x14\xe9\x69\xdd\xc2\x27\x58\x12\x05\x92\xf1\xfb\x03\x25\x38\xc7\x45\xb2\x1d\xb1\xdc\xc1\xf0\x28\x1f\x50\x2b\xd2\x13\xdd\x5f\xc2\xad\xf4\x35\xd1\x3b\x46\x2d\x99\xbd\x48\x7f\x95\xee\x2a\xb5\x42\x43\x83\xf3\xca\xce\x29\x10\x75\x6e\x48\x84\xbc\xc9\x06\x5e\xa1\x16\x37\xf7\x61\xc1\x06\xf2\xec\xf5\x87\x60\x89\x96\x40\xe4\x68\xa3\xb2\x63\x36\x44\xcf\x9c\x99\xca\x17\x54\xdb\x2f\x22\x1e\xe3\x2f\xf4\xac\x76\xfc\x4c\x96\xee\x5c\x3a\xf4\x31\x8d\xff\x6a\xed\xe8\xd2\xf8\x8a\x44\xd7\xac\x87\x22\xc7\xdb\xe7\x05\xda\xe1\xb0\x88\x05\xd1\x61\x1e\xbf\x3f\xec\x38\x11\x06\xbd\x43\xd3\x72\x58\x1e\xfb\x21\xea\x4f\xa6\xf1\x57\xe2\x4d\xd4\x13\x9d\x4f\xe7\x53\xf8\x0a\x00\x00\xff\xff\xa9\x29\xab\x0c\x53\x01\x00\x00") - -func testE2eTestingManifestsIngressMultipleCertsRcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressMultipleCertsRcYaml, - "test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml", - ) -} - -func testE2eTestingManifestsIngressMultipleCertsRcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressMultipleCertsRcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressMultipleCertsSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8e\xc1\x0a\xc2\x30\x0c\x86\xef\x7d\x8a\xff\x05\x06\x7a\x93\x5e\xbd\xcb\x40\xf1\x1e\xdb\xe0\x8a\xdd\x12\xd2\x30\xf0\xed\x65\x75\x47\xf1\x16\x3e\xbe\x24\x1f\x69\xb9\xb3\xb5\x22\x4b\xc4\x7a\x0c\xaf\xb2\xe4\x88\x2b\xdb\x5a\x12\x87\x99\x9d\x32\x39\xc5\x00\x2c\x34\x73\x04\xa7\x49\x26\xa6\xcc\xd6\x86\xc9\x5d\x5b\x00\x2a\x3d\xb8\xb6\xcd\x01\x48\xf5\x97\xd4\x94\xd3\x26\xf8\x5b\x39\xe2\x22\x99\x47\x31\x0f\x80\x8a\x79\x5f\x1d\xfa\x18\x71\x3a\xf4\x3b\x4e\xf6\x64\x1f\x77\xb4\x43\x35\x71\x49\x52\x23\x6e\xe7\xb1\x93\x6f\xd4\xf6\x23\x00\x8d\x2b\x27\x17\xfb\x5b\xf2\x09\x00\x00\xff\xff\x0d\x93\xec\x7c\xf0\x00\x00\x00") - -func testE2eTestingManifestsIngressMultipleCertsSvcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressMultipleCertsSvcYaml, - "test/e2e/testing-manifests/ingress/multiple-certs/svc.yaml", - ) -} - -func testE2eTestingManifestsIngressMultipleCertsSvcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressMultipleCertsSvcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/multiple-certs/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressNegIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xca\x31\x0e\xc2\x30\x10\x44\xd1\xde\xa7\x98\x1b\x40\x3a\xb4\x37\xa0\x41\x54\xf4\x1b\x7b\x04\x56\x94\x75\xe4\x5d\x59\x1c\x1f\xb9\x23\xdd\xd3\xcc\xd7\xa3\xbe\xd8\xbd\x36\x13\xf0\x1b\xb4\x49\xbf\x8c\x65\x65\xe8\x92\xb6\x6a\x45\x70\xb7\x77\xa7\x7b\xda\x19\x5a\x34\x54\x12\x60\xba\x53\xf0\x69\x1e\x53\xc9\x0f\xe6\x39\xaf\x9a\x37\x5a\x99\x04\x9c\x7d\xd4\xcc\xc7\x39\xfd\x7b\x9e\xad\x87\xe0\x76\xfd\x05\x00\x00\xff\xff\xb9\xd4\x18\x7e\x86\x00\x00\x00") - -func testE2eTestingManifestsIngressNegIngYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressNegIngYaml, - "test/e2e/testing-manifests/ingress/neg/ing.yaml", - ) -} - -func testE2eTestingManifestsIngressNegIngYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressNegIngYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressNegRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x90\x41\x6b\x42\x31\x10\x84\xef\xf9\x15\xfb\x07\x9e\xfa\x3c\xf4\x90\x73\xa1\x14\x4a\x79\xb4\xd0\xfb\x9a\x37\xd5\x60\xb2\x09\xd9\x55\xf0\xdf\x97\x68\x15\x5b\xf7\x92\xb0\xcc\x7c\x3b\x0c\xd7\xf8\x85\xa6\xb1\x88\x27\xae\x55\x97\xc7\xd1\xed\xa3\xcc\x9e\x9e\x51\x53\x39\x65\x88\xb9\x0c\xe3\x99\x8d\xbd\x23\x4a\xbc\x41\xd2\xfe\x23\x6a\x07\xf1\xb4\x2b\x6a\xc2\x19\x8e\xa8\x3f\x77\x0b\xad\x08\x5d\x98\xa3\x7c\x80\xe7\xd3\x27\x42\x91\x59\x3d\x3d\xad\x1c\x91\x22\x21\x58\x69\x17\x54\x66\x0b\xbb\xb7\x3b\xf6\x23\xdd\x90\x6b\x62\xc3\xaf\xe1\x2e\x53\x9f\xf4\xc7\xfb\xe8\x26\xba\xc6\xe9\x13\x8a\x18\x47\x41\xbb\x39\x06\x8a\x99\xb7\xf0\xb4\x0d\x6d\x11\xcb\x72\x7f\xd8\xa0\x09\x0c\x3a\x60\x8d\xc1\xa0\x36\x9c\x15\xba\x54\xb4\x23\x86\x2b\xdb\x8f\x8b\xf1\x76\xf5\xac\x98\x0e\x29\x4d\x25\xc5\x70\xf2\xf4\xfa\xfd\x5e\x6c\x6a\xd0\xde\xe3\x55\xf5\xaf\xa7\xcb\xd2\xd0\x72\x14\xb6\x58\xe4\xa5\x71\xc0\x84\x16\xcb\x7c\xeb\x6c\x5c\xaf\xdc\x4f\x00\x00\x00\xff\xff\xed\xb6\x7e\xf0\xad\x01\x00\x00") - -func testE2eTestingManifestsIngressNegRcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressNegRcYaml, - "test/e2e/testing-manifests/ingress/neg/rc.yaml", - ) -} - -func testE2eTestingManifestsIngressNegRcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressNegRcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressNegSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8f\xbd\x4a\x44\x41\x0c\x85\xfb\x79\x8a\xb0\xcd\x56\xae\x8a\xe0\x4f\x3a\xb1\x97\x05\xc5\x7e\x98\x9b\x1d\x83\x73\x93\x21\xc9\x5d\x58\xc4\x77\x97\x19\x2b\xbb\x93\x93\x9c\x2f\x49\xee\xfc\x41\xe6\xac\x82\x70\xbe\x4d\x5f\x2c\x0b\xc2\x1b\xd9\x99\x0b\xa5\x95\x22\x2f\x39\x32\x26\x00\xc9\x2b\x21\x7c\xaa\xc7\x50\x09\x20\x8b\x68\xe4\x60\x15\x1f\x7d\x80\xd2\x74\x5b\x0e\x55\xb5\x36\x3a\x14\x5d\xaf\x85\x2a\xc2\xfe\x7b\xc7\x52\x8d\xdc\x77\x18\xb6\xd1\xcf\x3e\x79\xa7\x32\x22\x5d\x2d\x66\xf6\x6a\x4a\x84\xc7\x9b\x09\xea\xa6\xa1\x45\x1b\xc2\xfb\xcb\x71\x3a\x91\xad\x52\x1c\xe7\xd0\xd3\xdd\xc3\x7d\x02\x70\x6a\x54\x42\xed\x6f\xb7\x6d\xf2\xef\x38\x27\x1f\x3f\x3d\x9f\x4e\x2c\x1c\x17\x84\x57\x95\xe1\xc7\xa5\xd3\x28\x16\x1a\xb0\xf4\x1b\x00\x00\xff\xff\xf5\x31\x62\x40\xfe\x00\x00\x00") - -func testE2eTestingManifestsIngressNegSvcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressNegSvcYaml, - "test/e2e/testing-manifests/ingress/neg/svc.yaml", - ) -} - -func testE2eTestingManifestsIngressNegSvcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressNegSvcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressNegClusteripIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xca\x31\x0e\xc2\x30\x10\x44\xd1\xde\xa7\x98\x1b\x40\x3a\xb4\x37\xa0\x41\x54\xf4\x1b\x7b\x04\x56\x94\x75\xe4\x5d\x59\x1c\x1f\xb9\x23\xdd\xd3\xcc\xd7\xa3\xbe\xd8\xbd\x36\x13\xf0\x1b\xb4\x49\xbf\x8c\x65\x65\xe8\x92\xb6\x6a\x45\x70\xb7\x77\xa7\x7b\xda\x19\x5a\x34\x54\x12\x60\xba\x53\xf0\x69\x1e\x53\xc9\x0f\xe6\x39\xaf\x9a\x37\x5a\x99\x04\x9c\x7d\xd4\xcc\xc7\x39\xfd\x7b\x9e\xad\x87\xe0\x76\xfd\x05\x00\x00\xff\xff\xb9\xd4\x18\x7e\x86\x00\x00\x00") - -func testE2eTestingManifestsIngressNegClusteripIngYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressNegClusteripIngYaml, - "test/e2e/testing-manifests/ingress/neg-clusterip/ing.yaml", - ) -} - -func testE2eTestingManifestsIngressNegClusteripIngYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressNegClusteripIngYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-clusterip/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressNegClusteripRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x90\x41\x6b\x42\x31\x10\x84\xef\xf9\x15\xfb\x07\x9e\xfa\x3c\xf4\x90\x73\xa1\x14\x4a\x79\xb4\xd0\xfb\x9a\x37\xd5\x60\xb2\x09\xd9\x55\xf0\xdf\x97\x68\x15\x5b\xf7\x92\xb0\xcc\x7c\x3b\x0c\xd7\xf8\x85\xa6\xb1\x88\x27\xae\x55\x97\xc7\xd1\xed\xa3\xcc\x9e\x9e\x51\x53\x39\x65\x88\xb9\x0c\xe3\x99\x8d\xbd\x23\x4a\xbc\x41\xd2\xfe\x23\x6a\x07\xf1\xb4\x2b\x6a\xc2\x19\x8e\xa8\x3f\x77\x0b\xad\x08\x5d\x98\xa3\x7c\x80\xe7\xd3\x27\x42\x91\x59\x3d\x3d\xad\x1c\x91\x22\x21\x58\x69\x17\x54\x66\x0b\xbb\xb7\x3b\xf6\x23\xdd\x90\x6b\x62\xc3\xaf\xe1\x2e\x53\x9f\xf4\xc7\xfb\xe8\x26\xba\xc6\xe9\x13\x8a\x18\x47\x41\xbb\x39\x06\x8a\x99\xb7\xf0\xb4\x0d\x6d\x11\xcb\x72\x7f\xd8\xa0\x09\x0c\x3a\x60\x8d\xc1\xa0\x36\x9c\x15\xba\x54\xb4\x23\x86\x2b\xdb\x8f\x8b\xf1\x76\xf5\xac\x98\x0e\x29\x4d\x25\xc5\x70\xf2\xf4\xfa\xfd\x5e\x6c\x6a\xd0\xde\xe3\x55\xf5\xaf\xa7\xcb\xd2\xd0\x72\x14\xb6\x58\xe4\xa5\x71\xc0\x84\x16\xcb\x7c\xeb\x6c\x5c\xaf\xdc\x4f\x00\x00\x00\xff\xff\xed\xb6\x7e\xf0\xad\x01\x00\x00") - -func testE2eTestingManifestsIngressNegClusteripRcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressNegClusteripRcYaml, - "test/e2e/testing-manifests/ingress/neg-clusterip/rc.yaml", - ) -} - -func testE2eTestingManifestsIngressNegClusteripRcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressNegClusteripRcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-clusterip/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressNegClusteripSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8f\xcb\x4a\x44\x31\x0c\x86\xf7\x7d\x8a\x30\x9b\x59\x39\x2a\x82\x97\xec\x64\x56\x6e\xe4\x80\xe2\xbe\xf4\x64\x6a\xb1\x27\x29\x49\x3a\x30\x88\xef\x2e\xad\x2b\x77\x3f\x5f\xf2\xe5\x12\x5b\xf9\x20\xb5\x22\x8c\x70\xbe\x0d\x5f\x85\x57\x84\x37\xd2\x73\x49\x14\x36\xf2\xb8\x46\x8f\x18\x00\x38\x6e\x84\xf0\x29\xe6\x23\x05\x80\xc8\x2c\x1e\xbd\x08\xdb\xa8\x03\xa4\x2a\x7d\x3d\x64\x91\x5c\xe9\x90\x64\xbb\x66\xca\x08\xfb\xef\x5d\xe1\xac\x64\xb6\x43\xd7\x4e\x3f\xfb\x60\x8d\xd2\x50\x9a\xa8\x4f\xf7\x6a\x46\x84\xc7\x9b\x39\xa8\xa9\xb8\x24\xa9\x08\xef\xc7\x65\x12\x8f\x9a\xc9\x97\xd9\xf4\x74\xf7\x70\x1f\x00\x8c\x2a\x25\x17\xfd\xdb\xad\x9d\xff\x1d\x67\x64\xe3\xa7\xe7\xd3\xa9\x70\xf1\x0b\xc2\xab\xf0\xe0\x7e\x69\x84\x70\xac\xdd\x9c\xf4\x65\x09\xbf\x01\x00\x00\xff\xff\x99\xd1\x46\x3d\xff\x00\x00\x00") - -func testE2eTestingManifestsIngressNegClusteripSvcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressNegClusteripSvcYaml, - "test/e2e/testing-manifests/ingress/neg-clusterip/svc.yaml", - ) -} - -func testE2eTestingManifestsIngressNegClusteripSvcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressNegClusteripSvcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-clusterip/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressNegExposedIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xca\x31\x0e\xc2\x30\x10\x44\xd1\xde\xa7\x98\x1b\x40\x3a\xb4\x37\xa0\x41\x54\xf4\x1b\x7b\x04\x56\x94\x75\xe4\x5d\x59\x1c\x1f\xb9\x23\xdd\xd3\xcc\xd7\xa3\xbe\xd8\xbd\x36\x13\xf0\x1b\xb4\x49\xbf\x8c\x65\x65\xe8\x92\xb6\x6a\x45\x70\xb7\x77\xa7\x7b\xda\x19\x5a\x34\x54\x12\x60\xba\x53\xf0\x69\x1e\x53\xc9\x0f\xe6\x39\xaf\x9a\x37\x5a\x99\x04\x9c\x7d\xd4\xcc\xc7\x39\xfd\x7b\x9e\xad\x87\xe0\x76\xfd\x05\x00\x00\xff\xff\xb9\xd4\x18\x7e\x86\x00\x00\x00") - -func testE2eTestingManifestsIngressNegExposedIngYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressNegExposedIngYaml, - "test/e2e/testing-manifests/ingress/neg-exposed/ing.yaml", - ) -} - -func testE2eTestingManifestsIngressNegExposedIngYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressNegExposedIngYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-exposed/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressNegExposedRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x90\x31\x6e\xf3\x30\x0c\x85\x77\x9f\x82\x17\x50\xec\x64\x0a\x04\x64\xfa\xff\xb1\x43\x86\xa2\x6b\xc1\xc8\x6c\x2c\x44\x12\x05\x91\x0e\xd0\xdb\x17\x4a\x1b\x5b\x45\xd6\xa0\x5c\x24\x3c\xf1\xbd\x4f\x24\x66\xff\x46\x45\x3c\x27\x0b\x98\xb3\xf4\xd7\x6d\x77\xf1\x69\xb4\xf0\x9f\x72\xe0\xcf\x48\x49\xbb\x48\x8a\x23\x2a\xda\x0e\x20\xe0\x89\x82\xd4\x1b\x40\x99\x93\x85\x89\x45\x13\x46\xea\x00\xea\xd1\x08\x92\xc9\xd5\x46\xa1\x40\x4e\xb9\x7c\x9b\x22\xaa\x9b\x5e\x9a\x94\xc7\x1c\xa5\x98\x03\x2a\xfd\x18\x1a\x7a\xad\xf0\xcb\xfb\xe8\x06\xb8\x83\x6b\x39\x4e\x8a\x3e\x51\x59\x1c\x06\x7c\xc4\x33\x59\x38\xbb\xb2\xf1\xdc\x5f\xe6\x13\x95\x44\x4a\x62\x68\x47\x46\x49\xd4\xdc\x3a\xa4\x17\x2a\x57\x32\xf7\x6c\xbb\xdd\x6c\x17\xea\x3a\xeb\xaa\x39\x8e\x11\xd3\xb8\x7e\xcd\x40\x7f\xf2\xa9\x97\xa9\x51\x8c\x6b\x9f\x6f\x84\xf7\x3b\x01\xcc\xa4\x9a\x0f\x5a\x66\x02\x33\x8f\xf9\xf0\x81\x41\x08\x4c\xe6\xa2\x87\xfd\x30\x0c\x8b\xb5\x2a\xd2\x82\x72\x61\x65\xc7\xc1\xc2\xeb\xbf\xe3\xa2\x37\xf3\x1f\xb9\xa8\x85\x26\xe4\xd9\x7b\xd8\xfd\xd9\x1e\xf6\xcf\xd8\xc3\x7e\xe8\xbe\x02\x00\x00\xff\xff\x7c\x23\xde\xdf\xfd\x02\x00\x00") - -func testE2eTestingManifestsIngressNegExposedRcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressNegExposedRcYaml, - "test/e2e/testing-manifests/ingress/neg-exposed/rc.yaml", - ) -} - -func testE2eTestingManifestsIngressNegExposedRcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressNegExposedRcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-exposed/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressNegExposedSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x90\x3f\x6b\xf3\x30\x10\xc6\x77\x7d\x8a\x43\x4b\x96\xbc\x79\x9d\xc6\x43\xb8\xad\x64\xea\x52\x0c\x2d\x5d\x8b\x90\x2f\xae\xa8\xad\x13\xba\x73\x68\x30\xfe\xee\x45\x6a\xa1\x7f\xa6\x6e\x3f\x9d\xa4\xdf\x23\x3d\x2e\x85\x27\xca\x12\x38\x22\x5c\xf6\xe6\x35\xc4\x1e\xe1\x81\xf2\x25\x78\x32\x13\xa9\xeb\x9d\x3a\x34\x00\xd1\x4d\x84\xf0\xc2\xa2\x85\x0c\x80\x8b\x91\xd5\x69\xe0\x28\x65\x1f\xc0\x8f\x3c\xf7\xbb\x81\x79\x18\x69\xe7\x79\xfa\x1f\x69\x40\xd8\x2c\x36\xc4\x21\x93\x88\x45\xcd\x33\x6d\x2d\xbd\x25\x16\xea\x9f\x13\x67\x15\x8b\x8b\x3d\x36\x16\x97\x75\x6b\xdb\xf6\x50\x60\x5d\x37\x46\x12\xf9\x62\xad\x67\x0a\xfc\xab\x88\x70\x6c\x6a\xd6\xd7\x6b\xf6\x75\x9d\x32\x2b\x7b\x1e\x11\x1e\x4f\x5d\x9d\xa8\xcb\x03\x69\xf7\x79\xa9\x69\xbe\x39\xda\xf6\xf0\x4b\x72\xf3\x27\x49\xcd\x16\x1a\xc9\x2b\xe7\x8f\x3f\xe7\x39\xfe\x28\x45\x48\x4a\x97\xb7\xe7\x73\x88\x41\xaf\x08\xf7\x1c\xcb\x5c\xaf\x89\x10\x4e\xe3\x2c\x4a\xf9\xae\x33\xef\x01\x00\x00\xff\xff\xab\x60\x86\x5b\x77\x01\x00\x00") - -func testE2eTestingManifestsIngressNegExposedSvcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressNegExposedSvcYaml, - "test/e2e/testing-manifests/ingress/neg-exposed/svc.yaml", - ) -} - -func testE2eTestingManifestsIngressNegExposedSvcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressNegExposedSvcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/neg-exposed/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressNginxRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x54\x41\x6f\xdb\x3c\x0c\xbd\xfb\x57\x10\xe8\x59\xae\xf3\xb5\x05\xf2\x19\xd8\xa1\x68\xb7\x6e\x87\x6d\x46\x5a\xec\x3a\xd0\x32\x13\x0b\x91\x25\x43\xa4\x93\x76\xbf\x7e\x50\xe2\x38\x76\x9b\xac\xbb\x8c\x47\xbe\x27\xf2\xf1\x89\xd2\x05\xb8\x95\x71\xcf\x60\xdc\x2a\x10\x33\x68\xef\x24\x78\x6b\x29\xc0\xe2\x2e\xc1\xd6\xfc\xa0\xc0\xc6\xbb\x1c\x36\xb3\x64\x6d\x5c\x95\xc3\x82\x5a\x6b\x34\x8a\xf1\xee\x6e\x60\x27\x0d\x09\x56\x28\x98\x27\x00\x0e\x1b\xca\xf7\x85\x55\x5f\x58\x1d\x0b\x27\x00\x16\x4b\xb2\x1c\xa9\x00\xeb\x39\x2b\x6c\xdb\xd7\x7c\x5b\x26\xdc\x92\x8e\x9c\xb0\x6f\xc8\x39\xcc\x12\x00\x26\x4b\x5a\x7c\x78\xef\x34\x80\x50\xd3\x5a\x14\xda\x33\xc7\x02\x63\x8c\x35\xbc\x57\x69\x1f\xa7\xc6\xea\xe1\x83\xd4\x18\x42\xa1\x31\x6e\xe7\xcf\x43\x40\x4d\x05\x05\xe3\xab\x47\xd2\xde\x55\x9c\x43\xd6\xd3\xa2\x21\x68\x1c\x85\x41\x83\x02\xd3\xe0\x8a\xf2\x28\x25\x5d\xe9\x90\x1a\x7f\x79\xce\xc4\x3c\x4b\xff\x4f\x33\x55\x92\x60\x3a\x1b\x14\x5a\xb3\x21\x47\xcc\x45\xf0\x25\x1d\x47\x03\xa8\x45\xda\x07\x92\x71\x0a\xa0\x45\xa9\x73\xb8\xac\x09\xad\xd4\xbf\xa6\x90\x0f\x92\xc3\x2c\xfb\xef\xe6\x7a\x92\x67\x5d\x53\x34\xe1\xf3\xd3\x53\x31\x02\x8c\x33\x62\xd0\xde\x93\xc5\x97\x61\xd0\xab\x6c\xc4\x10\xd3\x90\xef\x64\x00\x6f\xfe\xc6\xd5\x18\x17\xd0\x31\x41\xe5\xb7\x6e\x8b\xa1\x82\xdb\xe2\xcb\x00\x91\xdb\x8c\x07\x52\x7d\xa9\xe2\xfb\xfd\xcf\x6f\xb7\x5f\x3f\x4e\x84\x6f\xd0\x76\xf4\x29\xf8\x66\x6a\x01\xc0\xd2\x90\xad\x16\xb4\x7c\x9d\xef\x91\x62\xe7\xd1\x61\x77\xd2\xd8\xe1\x0f\x2d\x1f\x8b\xdb\xbb\x7f\xd6\x97\x5b\xd4\xc7\xe6\xf1\x86\x46\xdb\xab\x8e\xfb\x54\xec\xee\x6e\x3e\x76\xbf\xf6\x2c\x6f\xd2\x6f\x8e\x5c\x5f\x5f\x9d\x3c\x33\xce\x5f\xc0\x96\x80\x9e\x5b\xcf\x04\xb3\x79\x36\xcf\x40\x3c\xa0\xd6\xf1\xef\xd8\xff\x24\x2c\x28\x0c\xc6\x41\x17\x2c\xf4\xfb\x1b\x73\x1d\x8f\x8a\x48\x6d\x18\x0c\x83\x6f\xe3\x33\x41\x7b\x5e\xd4\xae\xc9\x49\x59\x53\x04\xc3\x6a\x62\xc7\xd9\x97\x33\xe2\x28\x55\xd1\x12\x3b\x2b\xaa\x44\xbd\x26\x57\x29\xa6\xb0\x31\x9a\x3e\xac\xbb\x92\x14\xbf\xb0\x50\x73\x79\xe0\xc4\x37\x74\x20\x26\xbf\x03\x00\x00\xff\xff\xb7\x0a\xf3\x4a\x38\x05\x00\x00") - -func testE2eTestingManifestsIngressNginxRcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressNginxRcYaml, - "test/e2e/testing-manifests/ingress/nginx/rc.yaml", - ) -} - -func testE2eTestingManifestsIngressNginxRcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressNginxRcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/nginx/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressPreSharedCertIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x4f\xbb\x52\xc3\x30\x10\xec\xfd\x15\x3b\xa1\xb6\x43\x3a\x46\x25\x1d\x0d\x43\x45\x7f\x96\x96\x58\x13\x5b\x32\xba\x73\xc2\xe7\x33\xb2\x09\x8f\x54\xa8\xd2\xed\xec\x53\xe6\xf8\xca\xa2\x31\x27\x07\x7e\x18\x53\xfd\xea\xfe\x7c\xe8\x69\x72\x68\x4e\x31\x05\x87\xa7\x74\x2c\x54\x6d\x26\x9a\x04\x31\x71\x0d\x90\x64\xa2\xc3\x5c\xd8\xea\x20\x85\xa1\xf5\x2c\xd6\x00\x77\x78\xe4\x98\x2f\x90\x94\xb2\x89\xc5\x9c\x70\x89\xe3\x88\x9e\x90\x10\x18\xb0\xcc\x39\xc1\xa8\xe6\x56\xf6\x0f\x4f\x37\x00\x71\x4b\xeb\x8e\x7e\xee\x4e\x4b\xcf\x92\x68\xd4\x2e\xe6\xfd\x4d\x9a\xc3\xae\xfa\xb4\x37\xf0\xae\xd1\x99\x7e\x33\xab\xfa\xc9\x47\x14\xbe\x2f\xb1\x50\x21\x08\x7c\x93\x65\x34\xf4\xe2\x4f\x4c\xa1\x6b\x70\xfd\x56\x09\xa0\x2c\xe7\xe8\xf9\xbc\xee\xa3\x1f\xf2\x40\x09\x2c\xda\x0e\x66\xb3\xfe\xa6\xbc\xe4\xda\xe1\xe1\xbe\x01\xca\x32\x72\xed\xdf\x62\xc8\x6a\x6e\x1d\xd8\x5d\x97\xf8\x3c\xad\xba\xea\xb0\x85\x00\xb3\xd8\xa0\xd7\xa3\x5d\x4f\x87\x7d\x95\x7d\x61\x37\xb5\xb6\xf7\x8f\x72\x7f\x88\xdf\x15\x3f\x03\x00\x00\xff\xff\x06\x27\x40\x9b\xe8\x01\x00\x00") - -func testE2eTestingManifestsIngressPreSharedCertIngYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressPreSharedCertIngYaml, - "test/e2e/testing-manifests/ingress/pre-shared-cert/ing.yaml", - ) -} - -func testE2eTestingManifestsIngressPreSharedCertIngYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressPreSharedCertIngYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/pre-shared-cert/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressPreSharedCertRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8e\x31\x6e\x03\x31\x0c\x04\x7b\xbd\x82\x1f\x90\xed\x5c\x65\xa8\xcd\x07\x82\x14\xe9\x69\xdd\xc2\x27\x58\x12\x05\x92\xf1\xfb\x03\x25\x38\xc7\x45\xb2\x1d\xb1\xdc\xc1\xf0\x28\x1f\x50\x2b\xd2\x13\xdd\x5f\xc2\xad\xf4\x35\xd1\x3b\x46\x2d\x99\xbd\x48\x7f\x95\xee\x2a\xb5\x42\x43\x83\xf3\xca\xce\x29\x10\x75\x6e\x48\x84\xbc\xc9\x06\x5e\xa1\x16\x37\xf7\x61\xc1\x06\xf2\xec\xf5\x87\x60\x89\x96\x40\xe4\x68\xa3\xb2\x63\x36\x44\xcf\x9c\x99\xca\x17\x54\xdb\x2f\x22\x1e\xe3\x2f\xf4\xac\x76\xfc\x4c\x96\xee\x5c\x3a\xf4\x31\x8d\xff\x6a\xed\xe8\xd2\xf8\x8a\x44\xd7\xac\x87\x22\xc7\xdb\xe7\x05\xda\xe1\xb0\x88\x05\xd1\x61\x1e\xbf\x3f\xec\x38\x11\x06\xbd\x43\xd3\x72\x58\x1e\xfb\x21\xea\x4f\xa6\xf1\x57\xe2\x4d\xd4\x13\x9d\x4f\xe7\x53\xf8\x0a\x00\x00\xff\xff\xa9\x29\xab\x0c\x53\x01\x00\x00") - -func testE2eTestingManifestsIngressPreSharedCertRcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressPreSharedCertRcYaml, - "test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml", - ) -} - -func testE2eTestingManifestsIngressPreSharedCertRcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressPreSharedCertRcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressPreSharedCertSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8e\xc1\x0a\xc2\x30\x0c\x86\xef\x7d\x8a\xff\x05\x06\x7a\x93\x5e\xbd\xcb\x40\xf1\x1e\xdb\xe0\x8a\xdd\x12\xd2\x30\xf0\xed\x65\x75\x47\xf1\x16\x3e\xbe\x24\x1f\x69\xb9\xb3\xb5\x22\x4b\xc4\x7a\x0c\xaf\xb2\xe4\x88\x2b\xdb\x5a\x12\x87\x99\x9d\x32\x39\xc5\x00\x2c\x34\x73\x04\xa7\x49\x26\xa6\xcc\xd6\x86\xc9\x5d\x5b\x00\x2a\x3d\xb8\xb6\xcd\x01\x48\xf5\x97\xd4\x94\xd3\x26\xf8\x5b\x39\xe2\x22\x99\x47\x31\x0f\x80\x8a\x79\x5f\x1d\xfa\x18\x71\x3a\xf4\x3b\x4e\xf6\x64\x1f\x77\xb4\x43\x35\x71\x49\x52\x23\x6e\xe7\xb1\x93\x6f\xd4\xf6\x23\x00\x8d\x2b\x27\x17\xfb\x5b\xf2\x09\x00\x00\xff\xff\x0d\x93\xec\x7c\xf0\x00\x00\x00") - -func testE2eTestingManifestsIngressPreSharedCertSvcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressPreSharedCertSvcYaml, - "test/e2e/testing-manifests/ingress/pre-shared-cert/svc.yaml", - ) -} - -func testE2eTestingManifestsIngressPreSharedCertSvcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressPreSharedCertSvcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/pre-shared-cert/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressStaticIpIngYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8e\xc1\x8e\xa3\x40\x0c\x44\xef\x7c\x45\x29\x7b\x26\xd9\xdc\x56\xfc\xc1\x5e\x56\x7b\x88\xe6\x6e\xba\x4b\x60\x01\xdd\xa8\x6d\xa2\xe4\xef\x47\x0d\x99\xc9\xdc\xec\x92\xfd\xea\xc9\xaa\x1f\x2c\xa6\x39\x75\xe0\xc3\x99\xea\x68\x97\xfb\xb5\xa7\xcb\xb5\x99\x34\xc5\x0e\x7f\xd3\x50\x68\xd6\x2c\x74\x89\xe2\xd2\x35\x40\x92\x85\x1d\xcc\xc5\x35\xb4\xba\x36\xc0\x2f\xdc\x46\x35\x48\x4a\xb9\xa6\x39\xa1\x6e\x31\x32\xa2\x7f\xc2\x47\xc2\x69\x8e\x6d\xcd\x09\x32\xcf\x39\x88\x6b\x1a\x20\x2f\x88\xae\xe7\x1d\xf2\xfe\xb7\x6e\x0f\x30\x6d\x3d\x4b\xa2\xd3\xce\x9a\x2f\x7a\xc8\x9c\x87\x39\xf7\x32\xb7\xdf\x06\xed\x61\x74\xfa\xa2\x9d\x1a\x5b\x19\x2a\xc2\xe7\x17\xe9\xf0\x33\xdb\x16\x5a\x4d\x5b\x63\x28\x74\xf0\xa1\xe6\x76\xd4\xdf\x32\x06\x26\x16\x71\x42\x1d\x65\x4b\xbb\xfa\x22\x13\xa1\x75\x56\x43\xd4\xc2\xe0\xb9\x3c\xeb\x4b\x8b\x83\xf2\x6f\xaf\x7f\x53\x1b\xa0\x97\x30\x31\xc5\x5a\x0e\x18\xcb\x5d\x03\x8f\x33\x86\x31\x8f\x94\xc8\x62\xed\xe8\xbe\xda\xcf\x93\xff\xb9\x78\x87\x3f\xbf\x9b\xcf\x00\x00\x00\xff\xff\x9a\x0a\x65\x96\x9d\x01\x00\x00") - -func testE2eTestingManifestsIngressStaticIpIngYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressStaticIpIngYaml, - "test/e2e/testing-manifests/ingress/static-ip/ing.yaml", - ) -} - -func testE2eTestingManifestsIngressStaticIpIngYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressStaticIpIngYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/static-ip/ing.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressStaticIpRcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8e\x31\x6e\x03\x31\x0c\x04\x7b\xbd\x82\x1f\x90\xed\x5c\x65\xa8\xcd\x07\x82\x14\xe9\x69\xdd\xc2\x27\x58\x12\x05\x92\xf1\xfb\x03\x25\x38\xc7\x45\xb2\x1d\xb1\xdc\xc1\xf0\x28\x1f\x50\x2b\xd2\x13\xdd\x5f\xc2\xad\xf4\x35\xd1\x3b\x46\x2d\x99\xbd\x48\x7f\x95\xee\x2a\xb5\x42\x43\x83\xf3\xca\xce\x29\x10\x75\x6e\x48\x84\xbc\xc9\x06\x5e\xa1\x16\x37\xf7\x61\xc1\x06\xf2\xec\xf5\x87\x60\x89\x96\x40\xe4\x68\xa3\xb2\x63\x36\x44\xcf\x9c\x99\xca\x17\x54\xdb\x2f\x22\x1e\xe3\x2f\xf4\xac\x76\xfc\x4c\x96\xee\x5c\x3a\xf4\x31\x8d\xff\x6a\xed\xe8\xd2\xf8\x8a\x44\xd7\xac\x87\x22\xc7\xdb\xe7\x05\xda\xe1\xb0\x88\x05\xd1\x61\x1e\xbf\x3f\xec\x38\x11\x06\xbd\x43\xd3\x72\x58\x1e\xfb\x21\xea\x4f\xa6\xf1\x57\xe2\x4d\xd4\x13\x9d\x4f\xe7\x53\xf8\x0a\x00\x00\xff\xff\xa9\x29\xab\x0c\x53\x01\x00\x00") - -func testE2eTestingManifestsIngressStaticIpRcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressStaticIpRcYaml, - "test/e2e/testing-manifests/ingress/static-ip/rc.yaml", - ) -} - -func testE2eTestingManifestsIngressStaticIpRcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressStaticIpRcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/static-ip/rc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressStaticIpSecretYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x97\xdd\x8e\xa3\xbc\x9a\x85\xcf\xfb\x2a\xfa\x06\x66\x64\x43\x28\x75\x5a\xda\x07\x05\xb1\x21\x24\x76\x82\xf1\x6b\x83\xcf\x08\x46\x45\xc5\x86\xd0\x29\x2a\x3f\x5c\xfd\x28\xdf\xb7\xf7\x48\xf3\xa7\x39\x5e\x7a\x25\x84\xd6\xb3\xd6\x72\x33\x7d\xaa\xee\xfa\xf5\x79\x19\x7f\xff\xbc\xe1\x1f\xb6\x99\x9b\xdf\x3f\x7e\xfe\x9c\xfd\xd7\xbf\xb7\xd7\xf9\xf7\xcf\x7d\x89\xe6\x7d\x89\x13\x01\x36\x97\x9f\xf1\x46\xa8\x1c\x4a\x30\x79\x81\x28\x88\xbf\x34\x34\x27\x0e\xe7\x25\x88\x7d\xe7\xf8\xa6\xd0\xfd\xd1\x20\x1a\x96\x90\xc7\x06\xf9\x5d\x01\xeb\x88\x3b\x1c\x9b\x30\xae\xb5\xe3\xb5\x04\x72\x17\x88\xcb\x16\xac\x2c\xf5\x76\x11\x94\xd2\xc2\xf1\x50\x01\xe5\x45\x68\x57\xc2\x89\x18\x50\x3e\x4a\x5f\xef\x0a\x47\xb9\x04\xf6\x54\x67\x61\xd4\x42\xc3\xda\x59\x65\x95\x7b\x1e\x2a\xc1\xc1\xd3\x50\x68\x6b\x04\x35\x02\x60\x26\x45\x25\xbe\x0c\xd8\xd4\xa6\x3c\xeb\xd2\x07\x3b\x41\x14\xd4\x5e\xc4\x06\x4c\xc8\xb2\xfe\xd0\x38\xf2\x90\x4a\x9c\xbb\xf7\xe9\x28\x08\x0d\x25\x08\x5d\xff\x53\xeb\xfe\xa5\x91\x35\x29\x2a\xcb\x05\x35\xbd\x04\x1e\x76\xc4\x90\x42\xf1\xc4\xa0\x48\xff\x7f\xdf\x92\x38\x35\x6a\x10\x1a\x14\xdd\x0b\x42\xd1\x29\x55\x99\x18\xc5\x59\x84\xfd\x97\x4c\xf1\xc1\x0e\x39\x14\x88\xc7\x80\x7c\x28\x28\x35\xa5\x9b\x6f\xda\xf9\x8b\x1d\xf8\xa1\x50\xaf\x7f\x90\x8b\x02\xc4\x68\x90\x2a\x0a\x10\x9b\x02\x51\x71\x42\x6c\x67\x02\x4b\x0b\x47\xf7\xcc\x3d\x52\xb3\xd0\x51\x60\xcb\x58\xc0\x9e\x06\x6c\x0f\x1b\xb1\xed\xdc\x7a\x6c\x25\xd7\xa5\xc6\xf7\x96\xb6\x48\x29\x43\x0e\x80\x07\xd0\x8f\x27\x04\x62\xd0\x1b\xbb\x11\xe7\x1c\x33\x14\xcd\x4d\x25\x32\x3e\x52\xd7\xdc\xa7\xcf\xc6\x15\x91\xa8\x68\x29\xdd\xf4\x79\x22\xbe\x34\x32\x66\x2d\xc1\xcd\x3e\x20\x2b\x73\xf6\xb7\x6e\xf8\x0a\x59\xa0\xbe\x25\xea\xbf\x19\xca\x17\x8b\xdf\x23\x21\x73\x5f\x9e\xfb\xe1\xb0\xe9\x93\xee\xec\x30\x4b\xcd\x91\x85\xb6\x6a\x75\xf4\xa7\x19\xd9\x92\x38\x84\xb9\x7e\x54\xcc\x51\x6d\xd0\x74\x53\x5a\x49\x19\xe6\x65\xe3\xcd\xa6\x71\x13\x96\x4b\x9f\xeb\x8c\xc6\xa7\x8d\x2d\x98\x37\x73\x33\xf8\x1b\xa4\x96\x36\x99\x42\x1c\xd6\xb3\x92\x7d\x53\x06\x38\x16\x92\xf7\x6d\xea\x73\x11\xda\xdc\x0c\xbf\x76\xdd\x68\x6a\x7e\x7e\xbf\x2b\x64\x66\x9b\xf6\xae\x08\xb7\x57\x46\x63\x06\xa1\x29\x44\xb0\x3e\x37\xcf\xf5\xb3\xdc\xb4\xb7\x93\xce\x6f\xa7\x94\xef\x55\x26\x9c\x1d\x56\xf8\x94\x92\xa0\x81\x1a\x77\xa3\x9a\x4c\x25\xf4\x49\xbd\x07\x0c\xdd\x97\xce\x29\x03\xef\x13\x02\xc5\x2f\x6c\xe4\xa2\x4c\x1f\xea\xe4\x3d\x31\xa3\x5f\x35\x78\x9a\x20\x80\x6b\x31\x90\xc8\xe8\x5f\x77\x71\x8e\x3d\x5f\x5a\xc4\xbc\xe9\x0b\x70\x0b\x10\xb1\x91\x9b\x9e\x1b\x6c\x22\xa5\xdc\xf3\x44\x6c\x65\xaa\x7e\x7f\xa2\x3c\x92\xf4\x63\x49\xdc\x94\xea\x0d\x8b\xf8\xd9\x57\x65\x6a\xc2\xee\xcc\xcf\x75\xd5\x3f\x4f\xe9\xea\x0e\x84\x4e\x7c\xa0\x7f\x14\xf0\xd8\x22\x15\x17\x9a\x1e\x00\x30\xe5\x99\xdd\x82\xf2\x44\xf9\xed\x5d\xa2\x3c\xd1\xa0\x52\x81\x66\x72\x82\x48\x31\x9d\xe7\x4d\x4a\x76\x4c\xd3\x46\x6e\xd4\x5c\x3b\x91\xa8\x60\xba\x69\x29\x0e\x0c\x70\x72\x20\x36\x66\x4a\xb9\xb2\xb2\x42\x03\x4e\x6a\xa0\xff\xfd\xf6\x51\xab\x89\x71\x8d\x3f\x05\xc9\xab\x66\x58\x1b\x4e\x56\x0f\x09\x34\x14\xf7\xe9\xaf\x5b\x51\x59\x21\x1c\x8e\xe5\x8b\xd9\x73\xff\xbf\xfa\x53\x92\xff\xf4\x67\x52\xc0\x25\xd4\x1b\x86\xa1\x9a\x70\x33\x5a\x52\x54\x79\x26\xe1\x72\x3d\x54\xf4\x5b\x2c\x86\x24\xae\x77\x35\xf0\xb8\x90\x4a\x9d\x02\x6b\xac\x9e\x64\x3d\x58\xde\x84\x9c\x02\x56\x8b\x59\xf2\x91\x6d\xec\x4d\xa4\x2b\x2c\x03\xfe\x56\x52\xba\x2a\x87\x22\xea\xf4\x5c\xab\x45\x39\x31\x14\xb7\xce\x4f\x8d\x5c\x4c\x26\xc0\x1f\xcd\x48\xa1\x40\xed\xee\x00\x13\x14\xc1\xba\x6f\x49\xfe\x30\x63\x1f\x76\x99\xe8\x1b\xe9\x91\x05\x7b\x68\x86\xfa\x5e\x56\x93\xda\x07\xfc\x22\xc3\xbc\x6e\x86\xcb\xbd\xc4\x35\xae\x83\xa9\x51\x83\x30\x36\xa4\x61\xa1\x14\x34\x48\x91\x46\x91\x95\xf5\x34\xac\xcf\x8a\x9a\x62\xba\xca\x4c\x55\xbc\xfa\xb8\x17\x9e\x56\x12\xd7\x77\x0b\xf8\xde\x8d\x1f\xf7\x1a\xf0\xb1\x74\x1f\x0f\x3b\xd8\xf4\xa0\xf3\xa3\x49\xa7\xe3\xe9\x39\x63\x70\x53\xcc\xc8\x3a\x2a\xf5\xd7\x52\x0f\x82\xb6\xc3\x1c\x31\xfd\x11\x14\x03\x77\x2d\x4c\x47\x90\xef\x38\x71\x82\xef\x97\x8f\x67\x49\xec\x1f\x96\xcc\x13\x4f\xc5\x78\x48\xa7\xb9\x18\xfd\x28\x86\x69\xa8\xa5\x0b\x6b\xd7\x2e\xdd\xa8\x0e\x72\xc0\xa0\x5c\x7f\xdc\x85\xfd\xe3\x94\xe5\x2f\xb6\x8f\x45\xa8\x06\xf1\xb9\x4e\x34\x50\xda\x62\xf3\x3c\x6c\xac\xd7\x23\xdb\xd9\x80\x61\xa0\x53\xde\x0c\xe2\xd6\x39\x5e\x0a\xcf\x93\x6e\x58\xd7\xfb\xc5\x97\x2c\x9d\x8b\x42\x6f\x43\x35\x7c\xad\x4e\xe9\x94\x03\x59\x3f\x3b\xa8\x97\xae\x12\x21\x23\xe2\xb3\x18\xa7\x9d\xd1\x82\x95\x9a\x3e\x35\x89\x8a\x5a\xab\xb0\x80\x89\x1f\x8b\xcb\x5f\x39\xbe\x07\x75\x10\xc9\xff\x91\xf1\x1f\xff\xf8\xc7\x3f\x7b\xc1\x75\xcf\xff\xd1\x0b\x05\x38\xaf\x0b\x25\xe8\x96\xcc\x54\xff\x97\x5e\x50\x41\x01\x3e\x29\x40\xc4\xd2\xe5\x63\x13\xd2\x4b\x13\xf8\xec\x50\xb5\xf7\xc2\x51\x21\xc0\xc4\x85\xe2\x9b\xc2\xcd\xc6\x06\x76\x84\xc0\xc7\xe6\x2f\x36\xd6\xf9\x4b\x2f\x42\x31\x75\xd4\x1f\x34\xe4\x5f\x8d\x74\x8b\x1c\x56\xbb\x26\xc5\x7f\x76\x68\xbb\xea\x86\xf5\xde\x6e\xa8\x2c\x47\xda\xab\x51\xa5\xc2\x93\x9b\x22\x1f\xf7\x72\x20\xf7\x93\xff\x78\xec\x42\x7b\x31\x59\x8e\x3a\x3f\xdd\x5a\x9f\xe3\x56\x47\x8d\x58\x44\xb8\xc7\xf9\xbe\xc1\x42\xaa\x45\x49\xa1\x7a\x54\x2c\x06\xc4\x7d\x1a\xd8\x68\xb6\xfb\x80\x72\x0e\xbf\x22\x16\xc6\x6f\xcd\x06\x22\x1b\xe4\x5c\x24\xeb\x52\x0e\xd1\x64\xdc\xc7\x0d\x08\x3d\xef\x03\xe5\xca\x6c\x42\x07\x62\x1e\xed\xa6\x40\x1c\x45\x6f\x32\x50\x8d\x1a\xc5\x28\xbc\xdf\xd4\x60\xb6\x4d\x30\x3d\x18\x75\x8f\xc4\xd3\x5b\xa7\xf3\x3f\xd6\xf1\x94\x0f\x76\x67\xaa\x4b\x74\xa2\xd3\x8d\x67\x94\x70\x92\xe7\xf5\x98\x7b\x95\xc5\x5f\x40\xac\x6c\x53\x9b\xc8\x73\xfe\xd0\xda\x27\x2d\xe2\x5b\xee\x50\xc8\xca\x19\x49\x67\x2e\x7a\xcc\x8d\xa6\xf4\xb1\x0f\x05\xe9\xe4\xfb\xae\x1d\xa7\x55\x0b\xfd\x0e\x36\x66\xb5\x7b\xfe\xc2\x27\x69\x76\x9a\xf0\x2b\xc7\xfd\x27\x2f\xe7\x46\x85\xea\xd6\xa4\xea\xcc\x83\xf5\x77\xeb\x4d\xd3\x7c\xce\xa8\x93\x6e\xd5\x11\x4b\x38\x56\xf4\x14\x88\xa7\x80\x2d\x56\xee\xf2\x2c\x24\x5b\xb5\x78\xca\x74\x31\x5d\x4f\xa3\x19\x55\x68\xea\x16\xa2\xc4\x90\x1e\xef\x9e\xf3\xe1\x44\xed\x58\xa0\xe8\xcd\x86\x76\xda\x23\x91\x8b\x81\x7f\x09\x14\xdd\x61\x78\x7c\xb7\x98\xdf\x55\xc5\x27\x26\x7d\x04\xbe\x8e\xf6\x81\x0a\xd4\xf0\xb1\x1c\x08\x8a\x18\xb2\x4b\x2d\x55\x93\x9c\x3d\xb1\xc8\xe3\x93\xfe\xf5\x28\xb4\xe5\x85\xa3\xb1\x00\xfe\xca\x92\xb8\xa4\x6d\xc4\x64\x7f\xa9\xbd\x45\x6c\x31\x0d\xbc\xfa\x66\xe1\x05\x1f\x04\xb2\x24\xc2\xf5\x98\x47\x2c\x98\x98\xc2\x1c\x29\xff\xb1\x62\x61\x7f\x61\x1b\xf1\x07\x9e\xbf\x76\x22\x98\x6b\xfd\x39\x6f\x21\x9d\xd8\xa9\xaa\x57\xdc\x6f\xaf\x2a\xb3\x52\x8e\x79\x68\x42\x4a\x98\x14\x9a\x8d\x02\x9d\x9e\x73\x50\x8e\xfd\x0d\x36\xc6\xf3\xaa\x0d\x0f\x95\x89\x4a\xba\xc5\xa7\xb3\x60\x0c\xe7\x7f\x4e\x23\x7d\x2b\x83\xf9\x20\x33\x35\xab\xf7\xe9\x06\x98\x9f\xcd\x73\x36\xad\xeb\x53\x83\x5e\x5c\xda\xb4\xc0\xe6\x0d\x32\x83\x8b\x01\x47\x3c\x54\x5f\x00\xfd\x11\x34\x16\x05\xe0\x45\xe1\x7e\xa5\x52\xab\xf7\xc8\x56\x0c\xc7\xe1\x1e\xf1\x54\xe9\x9e\x74\x83\xd5\x7a\xe8\xbd\x0a\xa7\x63\x32\xa8\x50\x4b\xff\x14\xd4\xe2\xa2\x9a\xde\x4a\xcc\x9d\xd4\x04\x09\x17\x0d\x8d\x9e\xb4\xf0\x5e\xb7\x1b\x12\x8a\x05\xee\xc6\xcd\x47\xb5\xf0\x46\x3a\xfc\x3c\x68\x73\x2e\x11\x4e\x4a\x67\x27\x0b\xbf\x56\x80\x7b\x90\xc8\xa7\x80\xa6\x09\xe8\xfb\xae\xc6\xb0\x28\x35\xbd\xb2\x7d\xdf\x9d\xcd\x81\x55\xdb\xc8\x2e\x14\x2b\x45\xae\x8d\x57\xea\xb4\x89\x63\x13\xf0\xf2\x90\x89\x15\x0c\x8f\x55\x2d\x63\x80\x85\x6f\x21\xe5\x48\x8e\xdb\xdb\x0e\xc7\x4b\x0d\x1f\xc8\x50\x1b\xc9\x85\xe3\x3a\x14\x09\xbc\x5f\xa2\x5d\xe0\x1f\x4a\xf7\x91\xf5\x71\xd6\xf9\x18\xea\x85\x7e\xcb\x8a\xaf\xb4\x5b\x2b\x41\xee\xd7\xae\xca\x3f\xb9\xe7\xdf\x2a\x7b\x0f\xf7\x61\xfc\x59\x2f\xe2\x60\x30\xdd\x17\x83\x15\x82\x9a\xf8\x90\x59\xb4\x0b\xcc\x56\x9e\xcd\xb5\xc4\xea\x53\xa1\x7a\x49\x06\xee\x0f\xc9\x3a\x61\x67\x7e\x6b\xdc\x76\xd9\x3f\x67\x5f\x6e\xf2\xab\x24\x8f\x03\x77\xaf\x0e\xcb\x03\x49\xf9\x51\xfa\x8f\x45\x50\x76\xfb\x2b\x0f\x1d\xf5\x07\x4a\x96\x66\x63\x1a\x3b\x4c\x65\x99\xda\x74\xf7\x9c\x33\xe3\x58\x08\xc1\x3d\x3a\x95\xbf\x76\x2c\x35\x52\xea\xcb\x0d\x90\xda\xd5\x61\xac\xed\x12\x13\x7b\x8e\xa3\xd6\x01\x36\x0b\x8d\x55\x10\xc5\x2f\xe6\x24\x22\xc8\xe8\x17\xaf\x7e\x3c\x85\xe6\x6b\xff\xfc\x0a\xcd\xd9\xa6\x36\xf4\x82\x0d\x6b\xcf\x9c\xc9\xcb\x61\x5e\x14\xe1\x71\xf9\x3e\x31\x81\xbd\x02\x78\x6d\x4c\x58\x95\xae\x97\x45\xc5\xee\x9d\xbe\x5f\x9b\xe1\x12\x70\xaa\x8e\x00\x73\x62\x30\x25\xa0\x67\x62\xc8\x7a\x3a\x6d\x18\x2a\xb1\x2f\x2c\x88\xb8\xa9\x62\x2d\xb3\xfe\xed\x04\xfe\x2a\xa8\xa8\x4b\x14\x2d\x9d\xcf\xcf\x89\x7b\x34\x05\xe6\x47\x80\x69\xc7\xa4\xda\xb4\x67\x51\x36\xe0\x9f\xbb\xc0\x3c\x6d\xe5\xee\x0d\xc9\x8b\xf6\x1c\x1b\x3b\xd8\x40\x6c\x2c\x98\x2c\xfe\x6e\xc0\x7f\x36\xd4\x1f\xf8\x98\x8b\x76\xec\x2b\xa1\xed\x1e\x1c\xff\x34\xa3\x7f\xed\xe8\x41\x04\xf5\x8e\xa3\xed\xbd\xc4\x31\x97\x9a\xbf\x09\x07\x81\xad\x44\xcc\xa5\x08\x9a\xd1\x7e\x75\xf4\x7d\xa5\x94\x59\x01\xf6\x84\xfb\xf8\xdb\x02\x97\xc5\x30\xcd\x87\x64\xee\x4f\xca\xde\x85\xeb\x27\xe6\x26\xc4\x16\xb5\xe3\xe7\x36\xaa\x91\x7b\xb6\x68\xce\xe0\x7e\x79\xb2\xa5\x8f\x34\xb5\x91\xd9\x70\x51\xa2\x7c\x2c\xc0\x32\x20\x7e\x53\x87\xd3\x54\x0f\x24\x68\x17\xe3\x4f\x60\x74\xa1\x78\x54\x6b\xf5\x56\x04\xeb\x49\x69\xf1\xa5\xa1\xbd\xf3\x2c\xe6\xc2\xcd\x60\x65\x3e\x95\x5a\x24\xa0\x3e\xae\x4c\xc6\x59\xe2\xf8\xb6\x04\x23\xcb\x41\x05\xcd\x60\x2a\xe1\x54\xd4\x49\xff\x66\xd0\x74\xee\xb4\x8d\x9a\x00\x56\x7a\xf8\xba\xaa\xf1\xd5\xeb\x6b\xde\x29\x76\x6d\xd2\x87\xac\x87\xf9\x4f\x0d\xdc\x28\x49\x9f\x16\xd4\xcc\xd4\x47\x28\xb4\xe0\x22\x9d\xff\x94\x63\xb1\x3b\x90\xc7\x43\x56\x71\x0a\xc9\xba\x54\xd9\x64\xba\x6c\x1b\x76\x80\xa7\x32\x59\x17\x2f\xde\x9b\xd1\xee\x4f\xf0\xb8\x37\xcf\x19\x35\x30\xaf\x6a\x84\x03\x4d\xfd\xae\x54\xd3\x52\x3a\xdc\x6b\xb0\x4a\x81\xb9\x41\x16\xc7\x27\x64\x63\x08\x72\xd2\x7e\x4c\x59\x8d\xd4\x65\x17\xe6\x14\xb4\xcd\x8c\xf2\xe9\xa1\xea\x97\x4e\x4d\x0b\x0b\xf3\xb1\x46\x0f\xdd\x4a\xee\x79\x30\xb3\xda\x45\xe3\x81\xda\xeb\x8b\x9d\x13\x36\x49\xe3\xc5\xd2\x6c\x84\xd3\x1b\x71\x97\xc9\x5c\x89\xe0\x71\x69\xc7\x8f\x9b\x59\x6c\x9f\x8c\xb1\xd0\x9e\x46\x02\x7e\x45\x3a\xf3\xba\xd3\x0e\x43\xa8\xe2\x17\xeb\xdd\xe8\x22\xed\x55\x29\xd2\xfe\x66\x69\x5c\xe9\x4c\xe1\x86\x44\x47\x53\xf1\xe3\x21\xb5\x47\x51\xd1\xba\x1b\x8b\x27\xaf\x28\x51\xc3\x74\xd9\x05\xea\x6a\x47\xde\xd7\x8b\xdb\x41\x20\x16\xf0\x04\x99\x60\x7a\xf9\xa5\x38\x11\x8a\xea\xd0\xbe\xd9\xd1\xee\x1b\x62\xbe\x9b\x40\x1c\x80\x10\xd4\x54\xfe\x5e\x62\x95\xb2\xc5\xd2\x22\xb0\xa6\x00\xf1\xad\x86\xf9\x8d\x8d\xf4\xc9\x36\xe2\xc1\xf5\xbc\x34\xa9\xe0\xed\xb0\x5d\x89\x8f\x29\x06\x95\xf7\xa5\xef\x59\x5b\xc5\x57\x23\xfb\x5b\x01\xf6\xab\x40\x13\x67\x83\x7a\x31\x60\xec\xd9\x13\xa6\xe1\xd1\x54\xb6\x34\xd4\x5f\x4b\xa4\x40\x0f\xf3\xb6\xad\x54\x23\x36\x5c\x75\xaa\xdf\xef\x70\x7e\x14\x10\x7d\xeb\x73\x9e\x59\xd7\xde\x93\x81\xe6\xb5\xef\xb3\x83\xac\x57\x86\xf6\x93\xf9\x9c\xdf\xca\x85\x86\x7c\x78\x38\xa3\x45\x62\x53\xb3\x6d\x70\x2c\x6b\x69\x93\x02\x99\x44\x83\x78\x36\xd0\x62\x9e\xac\xbf\xe5\xd9\x7c\x6a\xa0\x53\x37\x60\x5e\x07\xc6\x6b\xf2\xf0\x25\x9a\x8e\x22\xfd\xb5\x93\x59\x2f\x4f\x78\x7b\xef\x5c\xc4\xbb\xc1\x70\x95\xd1\x7b\x3d\xf6\x67\x9b\x99\x1c\x24\x5a\x27\x9f\x7f\xef\x13\x01\x11\xd9\xd2\xb8\x2c\x95\x89\x15\x81\x8f\x12\x29\xf3\xf7\xae\x41\xbb\x1f\xee\x73\xb4\xbf\x7f\x96\x5d\x7b\xed\xe6\x1f\x43\x37\x37\xff\x7a\x1a\x8f\xcd\xd0\xfd\x7e\x0d\xa1\x7f\xfb\xfa\x5b\x9c\x9f\x53\xf7\xfb\xe7\x61\x6a\xfe\x7c\x77\x3f\x7e\xfc\x47\x00\x00\x00\xff\xff\x16\x44\xcf\x58\x51\x0f\x00\x00") - -func testE2eTestingManifestsIngressStaticIpSecretYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressStaticIpSecretYaml, - "test/e2e/testing-manifests/ingress/static-ip/secret.yaml", - ) -} - -func testE2eTestingManifestsIngressStaticIpSecretYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressStaticIpSecretYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/static-ip/secret.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsIngressStaticIpSvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8e\xc1\x0a\xc2\x30\x0c\x86\xef\x7d\x8a\xff\x05\x06\x7a\x93\x5e\xbd\xcb\x40\xf1\x1e\xdb\xe0\x8a\xdd\x12\xd2\x30\xf0\xed\x65\x75\x47\xf1\x16\x3e\xbe\x24\x1f\x69\xb9\xb3\xb5\x22\x4b\xc4\x7a\x0c\xaf\xb2\xe4\x88\x2b\xdb\x5a\x12\x87\x99\x9d\x32\x39\xc5\x00\x2c\x34\x73\x04\xa7\x49\x26\xa6\xcc\xd6\x86\xc9\x5d\x5b\x00\x2a\x3d\xb8\xb6\xcd\x01\x48\xf5\x97\xd4\x94\xd3\x26\xf8\x5b\x39\xe2\x22\x99\x47\x31\x0f\x80\x8a\x79\x5f\x1d\xfa\x18\x71\x3a\xf4\x3b\x4e\xf6\x64\x1f\x77\xb4\x43\x35\x71\x49\x52\x23\x6e\xe7\xb1\x93\x6f\xd4\xf6\x23\x00\x8d\x2b\x27\x17\xfb\x5b\xf2\x09\x00\x00\xff\xff\x0d\x93\xec\x7c\xf0\x00\x00\x00") - -func testE2eTestingManifestsIngressStaticIpSvcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsIngressStaticIpSvcYaml, - "test/e2e/testing-manifests/ingress/static-ip/svc.yaml", - ) -} - -func testE2eTestingManifestsIngressStaticIpSvcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsIngressStaticIpSvcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/ingress/static-ip/svc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsKubectlBusyboxPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8f\x31\x4f\x03\x31\x0c\x85\xf7\xfc\x8a\xa7\x1b\xda\x85\xe3\x5a\x21\x31\x64\x40\x62\x64\x41\x37\xb1\x20\x06\x27\xe7\xa3\x51\x93\x38\x4a\x52\xe0\xfe\x3d\x4a\x04\x82\x2e\xb6\xe4\xf7\xd9\xcf\x8f\x92\x7b\xe1\x5c\x9c\x44\x8d\x8f\xa3\x3a\xbb\xb8\x68\xcc\xb2\xa8\xc0\x95\x16\xaa\xa4\x15\x10\x29\xb0\x86\xb9\x94\xcd\xc8\xd7\x51\x01\x9e\x0c\xfb\xd2\x24\x80\x52\xfa\xa7\x95\xc4\xb6\xcd\xad\xc4\x4a\x2e\x72\xee\xd4\x08\x17\xe8\xfd\xef\x46\x5f\xb4\x12\x02\x35\xbb\xd7\x61\x32\x2e\x4e\xe5\x34\xdc\x60\x18\x6d\xab\xe1\xbc\xb8\x8c\x31\x61\xca\x22\x75\x5a\x45\x26\x43\x19\xbb\x1d\xd8\x9e\x04\xfb\x55\xc4\x50\xde\xe3\xe1\x1a\x68\xfd\xf6\x07\x2c\x9e\x39\xe1\xee\xfe\x70\x18\xde\xba\x5f\x7f\x61\xbe\x78\x3f\x8b\x77\x76\xd3\x78\x5a\x9f\xa5\xce\x99\x0b\xc7\xda\x89\xab\x9c\x0a\xc8\x5c\x2a\xe5\xfa\xcb\x3f\xfa\x4f\xda\x8a\xfa\x0e\x00\x00\xff\xff\x4e\x0c\x6d\xc8\x33\x01\x00\x00") - -func testE2eTestingManifestsKubectlBusyboxPodYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsKubectlBusyboxPodYaml, - "test/e2e/testing-manifests/kubectl/busybox-pod.yaml", - ) -} - -func testE2eTestingManifestsKubectlBusyboxPodYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsKubectlBusyboxPodYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/busybox-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsKubectlNginxDeployment1YamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8e\xbb\x4e\xc6\x30\x0c\x85\xf7\x3c\xc5\x79\x81\x72\x9b\x50\x66\x16\x24\x54\x31\xb1\x9b\xd4\x2a\x11\x89\x63\x25\x16\x17\x55\x7d\x77\x14\x51\xda\xf2\x7b\x3c\xfe\xce\x85\x34\xbe\x70\x6d\xb1\x88\x07\xa9\xb6\xeb\x8f\x5b\xf7\x1e\x65\xf2\x78\x60\x4d\xe5\x3b\xb3\x98\xcb\x6c\x34\x91\x91\x77\x80\x50\x66\x0f\x99\xa3\x7c\x0d\xd3\x81\x34\xe5\xd0\xdf\x95\x35\xc5\x40\xcd\xe3\xce\x01\x8d\x13\x07\x2b\xb5\x7f\x80\x4c\x16\xde\x9e\xe8\x95\x53\xfb\x15\xd0\x2b\xb7\x30\x07\x18\x67\x4d\x64\xbc\xd1\xa7\xd2\x7e\xe9\x9f\xf1\xc2\x0a\xfc\x0d\xe8\x17\x8a\x18\x45\xe1\xba\xe3\xc3\x79\xf7\x1e\x11\x33\xcd\xec\xb1\x2c\x57\x63\xd7\x47\xfe\x7c\xec\xca\xba\xee\x84\x96\x6a\xa7\xce\xe1\x88\x7e\x2e\xd5\x3c\xee\x6f\xdc\x4f\x00\x00\x00\xff\xff\xd9\x91\xf0\xd4\x42\x01\x00\x00") - -func testE2eTestingManifestsKubectlNginxDeployment1YamlInBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsKubectlNginxDeployment1YamlIn, - "test/e2e/testing-manifests/kubectl/nginx-deployment1.yaml.in", - ) -} - -func testE2eTestingManifestsKubectlNginxDeployment1YamlIn() (*asset, error) { - bytes, err := testE2eTestingManifestsKubectlNginxDeployment1YamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/nginx-deployment1.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsKubectlNginxDeployment2YamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8e\xbb\xce\xc2\x30\x0c\x85\xf7\x3c\x85\x5f\xa0\xff\x65\x43\x99\x59\x90\x50\xc5\xc4\x6e\x52\xab\x44\x24\x4e\x94\x58\x5c\x54\xf5\xdd\x91\x45\x69\x0b\x9e\xa2\x93\xef\xf8\x33\x66\x7f\xa4\x52\x7d\x62\x0b\x98\x73\xfd\xbd\xfe\x9b\x8b\xe7\xce\xc2\x96\x72\x48\x8f\x48\x2c\x26\x92\x60\x87\x82\xd6\x00\x30\x46\xb2\xc0\xbd\xe7\x7b\xd3\x2d\x48\xcd\xe4\xf4\xbb\x52\x20\x27\xa9\xe8\x1b\x20\xa2\xb8\xf3\x1e\x4f\x14\xea\x2b\x00\x95\x4c\x75\x03\x20\x14\x73\x40\xa1\x89\x5e\x69\x74\xc2\x47\xf1\xab\x0a\xf0\x56\xea\xb8\xc4\x82\x9e\xa9\xcc\x78\xb3\xbe\x74\x5e\xe1\x23\xf6\x64\x61\x18\x7e\x5a\xcd\x5b\xba\xed\x34\x19\xc7\x99\xc8\xa9\xc8\xca\xd9\x2c\xab\x0f\xa9\x88\x85\xcd\x9f\x79\x06\x00\x00\xff\xff\x13\x2c\x69\x2c\x34\x01\x00\x00") - -func testE2eTestingManifestsKubectlNginxDeployment2YamlInBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsKubectlNginxDeployment2YamlIn, - "test/e2e/testing-manifests/kubectl/nginx-deployment2.yaml.in", - ) -} - -func testE2eTestingManifestsKubectlNginxDeployment2YamlIn() (*asset, error) { - bytes, err := testE2eTestingManifestsKubectlNginxDeployment2YamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/nginx-deployment2.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsKubectlNginxDeployment3YamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8e\xcd\x0a\xc2\x30\x0c\xc7\xef\x7d\x8a\xbc\xc0\xfc\xb8\x49\xcf\x5e\x04\x11\x4f\xde\x63\x17\x66\xb1\x4d\x4b\x1b\x44\x19\x7b\x77\x09\xce\x6d\x9a\x53\x9b\xff\xc7\x2f\x98\xfd\x85\x4a\xf5\x89\x2d\x60\xce\x75\xfd\xd8\x9a\xbb\xe7\xd6\xc2\x9e\x72\x48\xaf\x48\x2c\x26\x92\x60\x8b\x82\xd6\x00\x30\x46\xb2\xc0\x9d\xe7\x67\xd3\xce\x96\x9a\xc9\xa9\x5c\x29\x90\x93\x54\xf4\x0d\x10\x51\xdc\xed\x88\x57\x0a\xf5\xb3\x00\x85\x8c\x71\x03\x20\x14\x73\x40\xa1\xd1\xbd\xc0\xe8\x84\x9f\xe0\x5f\x14\xe0\x8b\xd4\x71\x89\x05\x3d\x53\x99\xec\xcd\xf2\xd2\xa9\xc2\x47\xec\xc8\x42\xdf\xaf\x4e\xba\x3f\xe8\x77\x18\x26\x39\xa7\x22\x0b\x60\x33\xf7\x9e\x53\x11\x0b\xbb\x8d\x79\x07\x00\x00\xff\xff\x63\xf9\x37\xfb\x31\x01\x00\x00") - -func testE2eTestingManifestsKubectlNginxDeployment3YamlInBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsKubectlNginxDeployment3YamlIn, - "test/e2e/testing-manifests/kubectl/nginx-deployment3.yaml.in", - ) -} - -func testE2eTestingManifestsKubectlNginxDeployment3YamlIn() (*asset, error) { - bytes, err := testE2eTestingManifestsKubectlNginxDeployment3YamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/nginx-deployment3.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsKubectlPausePodYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8c\x31\x0e\xc2\x30\x0c\x45\xf7\x9c\xe2\x5f\xa0\x08\x36\xe4\x1b\xb0\x65\x62\x37\x8d\x85\x22\x1a\x3b\x4a\x0c\x4b\xd5\xbb\xa3\x54\x48\x08\x46\xbf\xe7\xff\xb8\xe6\xab\xb4\x9e\x4d\x09\xaf\x53\x78\x64\x4d\x84\x68\x29\x14\x71\x4e\xec\x4c\x01\x50\x2e\x42\xa8\xfc\xec\x12\x80\x85\x6f\xb2\xf4\xc1\x7f\x4d\xaf\x32\x0f\x3a\x9b\x3a\x67\x95\xb6\xff\x4c\x7f\x6b\x20\x17\xbe\x0b\x61\x5d\x0f\x71\xb0\xcb\x38\xb7\x6d\x57\xd5\x9a\x7f\xca\xd3\xb7\x13\xad\x39\xe1\x7c\x0c\xef\x00\x00\x00\xff\xff\x04\xec\xd3\x24\xad\x00\x00\x00") - -func testE2eTestingManifestsKubectlPausePodYamlInBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsKubectlPausePodYamlIn, - "test/e2e/testing-manifests/kubectl/pause-pod.yaml.in", - ) -} - -func testE2eTestingManifestsKubectlPausePodYamlIn() (*asset, error) { - bytes, err := testE2eTestingManifestsKubectlPausePodYamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/pause-pod.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsKubectlPodWithReadinessProbeYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8c\xcd\x4a\x43\x41\x0c\x46\xf7\xf7\x29\xbe\x17\xa8\x3f\x0b\x41\xb2\x16\xc4\x8d\x5c\x10\xdc\xa7\x77\x42\x1b\x9c\x49\x86\x99\x28\x4a\xe9\xbb\xcb\x5c\x2b\xad\x2e\xbf\x73\x92\xc3\x55\x5f\xa5\x75\x75\x23\x7c\xdc\x4e\x6f\x6a\x89\x30\x7b\x9a\x8a\x04\x27\x0e\xa6\x09\x30\x2e\x42\xb0\x9d\xda\xe7\x04\x64\xde\x4a\xee\x83\xff\x35\xbd\xca\x32\xe8\xe2\x16\xac\x26\x6d\xbd\xd9\xfc\xfb\x06\xb4\xf0\x4e\x08\x87\xc3\xd5\xf3\x60\x4f\x63\x1e\x8f\xab\xaa\xde\xe2\x54\xde\x9c\x3b\xb3\xb7\x20\xdc\xdf\xac\xbc\x09\x27\x35\xe9\x7d\x6e\xbe\x95\x9f\x5b\x60\x1f\x51\x1f\x25\x7e\x27\x50\x39\xf6\x84\xeb\xf3\xbe\x6c\x00\x6a\x1a\xca\xf9\x41\x32\x7f\xbd\xc8\xe2\x96\x3a\xe1\xee\x24\x43\x8b\xf8\x7b\x5c\xf0\xef\x00\x00\x00\xff\xff\x58\x3a\x3c\xc4\x26\x01\x00\x00") - -func testE2eTestingManifestsKubectlPodWithReadinessProbeYamlInBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsKubectlPodWithReadinessProbeYamlIn, - "test/e2e/testing-manifests/kubectl/pod-with-readiness-probe.yaml.in", - ) -} - -func testE2eTestingManifestsKubectlPodWithReadinessProbeYamlIn() (*asset, error) { - bytes, err := testE2eTestingManifestsKubectlPodWithReadinessProbeYamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/pod-with-readiness-probe.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsKubectlRedisMasterControllerJsonIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x92\x3f\x4b\xc4\x40\x10\xc5\xfb\x7c\x8a\x30\xb5\x0a\x87\xa0\xb8\xad\x95\x9d\x5c\x61\x23\x16\x63\x32\xc8\xe2\x66\x77\x99\x19\xae\x09\xfb\xdd\x65\x2f\xb9\x98\x3f\x9b\xb3\xb0\x0a\xbc\xf9\xf1\xde\x9b\xc9\xf6\x55\x5d\xd7\xf0\x6d\x7d\x0b\x06\x8e\x14\x9d\x6d\x50\x6d\xf0\xcf\xc1\x2b\x07\xe7\x88\xe1\xe6\x8c\x60\xb4\x6f\xc4\x62\x83\x07\x03\xa7\xc3\xa8\x76\xa4\xd8\xa2\x22\x98\xb3\x51\x96\x3c\x76\x04\x06\x98\x5a\x2b\xb7\x1d\x8a\x5e\x2c\xf2\xd0\xe1\x27\x39\xf9\xa5\x07\xe7\x78\xe1\x27\x30\xeb\x1c\x5c\x36\x1a\x2d\xc6\x41\xca\xdf\x34\x84\x4b\xa4\x66\x16\xcc\x43\x7b\x01\x73\x98\xf2\x84\x1c\x35\x1a\xf8\x3f\x89\x93\x99\x52\x17\x1d\x2a\x2d\xcd\xb6\x27\xd8\xdf\xf5\x7a\xfe\xb5\x16\xb3\xed\x57\xb5\xb6\x97\x18\xc5\x26\x78\x45\xeb\x89\x05\xcc\xfb\x3a\x65\x53\xea\xaf\x5f\xb7\x00\x6d\x87\x5f\x04\xa6\x86\xbe\xbf\x3b\x66\xfa\x25\x0b\x29\x95\xe9\x18\x58\x4b\x1d\xf6\x9b\x94\xfa\x08\xf1\x69\xa7\xcf\x7a\xe1\xd7\xc0\x0a\xe6\xe1\xfe\xf1\xa9\x0c\xa7\x82\xfc\xb1\xd6\x96\xd0\x6c\x9c\x16\x4f\xb1\x4a\xd5\x4f\x00\x00\x00\xff\xff\x4c\xf8\x18\x11\x44\x03\x00\x00") - -func testE2eTestingManifestsKubectlRedisMasterControllerJsonInBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsKubectlRedisMasterControllerJsonIn, - "test/e2e/testing-manifests/kubectl/redis-master-controller.json.in", - ) -} - -func testE2eTestingManifestsKubectlRedisMasterControllerJsonIn() (*asset, error) { - bytes, err := testE2eTestingManifestsKubectlRedisMasterControllerJsonInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/redis-master-controller.json.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsKubectlRedisMasterPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x51\x4d\x6b\x23\x31\x0c\xbd\xcf\xaf\x10\xb9\x3b\x5f\x0b\xbb\xac\x6e\x0b\x9b\x43\xa1\x09\xa1\x09\xbd\x3b\x33\x8f\xd4\xc4\x1f\x83\x2d\x0f\x94\xd2\xff\x5e\x66\xe2\x4c\x27\xbd\x96\xfa\x24\x3f\xe9\xe9\x49\x4f\xba\x35\xcf\x88\xc9\x04\xcf\xd4\xad\xaa\x8b\xf1\x0d\xd3\x3e\x34\x95\x83\xe8\x46\x8b\xe6\x8a\xc8\xea\x13\x6c\xea\x23\x22\xaf\x1d\x98\x22\x1a\x93\x86\xff\x10\xa9\x04\x2f\xc6\xc3\x32\xcd\x24\x66\xcc\xae\xa9\x60\xc1\xe4\x74\x12\xc4\xea\x8e\xa9\x0a\x98\x5a\xd4\x7d\xdb\x3a\x78\xd1\xc6\x23\x16\x11\x55\x8a\x47\x6e\xff\x8c\xd3\x67\x30\x9d\xeb\x38\x37\x61\x71\xc9\x27\x44\x0f\x41\x52\x58\x43\x09\x92\xa8\xa1\x22\x2d\x06\x09\x5e\xcd\x97\x85\x08\xdf\x71\x09\x3f\x5b\x6f\xff\x1d\x8e\x9b\xa7\x11\x26\xea\xb4\xcd\xb8\x9b\x9f\xa8\x0d\x51\xd2\x94\x3b\x0e\xba\x0f\x51\x98\x7e\xff\xfa\xf3\xb7\x64\x23\x52\xc8\xb1\xc6\xa4\xdc\x1a\x67\xa6\x74\xa2\xba\xcd\x4c\xb3\xe5\x7c\x75\x13\xe8\x82\xcd\x0e\xdb\x90\xfd\xbd\x8e\xeb\x91\xbd\x96\x17\xa6\xc5\xd4\x31\xd5\x9f\x64\xd2\xf0\xba\xcb\x08\xde\x96\xbb\x9d\xe3\x47\x9c\x3b\x6c\x76\xc7\x87\xdd\xe6\xf1\x9b\xde\xad\x8b\x79\x57\x0b\xbe\x1c\x7e\xb2\x26\x5c\x2b\xaf\xff\x4d\x64\x7a\x7b\xaf\x3e\x02\x00\x00\xff\xff\x5a\xef\xee\x2b\xaf\x02\x00\x00") - -func testE2eTestingManifestsKubectlRedisMasterPodYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsKubectlRedisMasterPodYaml, - "test/e2e/testing-manifests/kubectl/redis-master-pod.yaml", - ) -} - -func testE2eTestingManifestsKubectlRedisMasterPodYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsKubectlRedisMasterPodYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/redis-master-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsKubectlRedisMasterServiceJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x8f\xb1\xaa\xc3\x30\x0c\x45\xf7\x7c\x85\xd0\x9c\x37\x3c\x1e\xbc\x52\x7f\x45\xa1\xd0\xa5\x74\x50\x13\x51\x4c\x9d\xd8\x48\x22\x4b\xc9\xbf\x17\xc7\x6e\x92\xbd\x53\xe0\xdc\x9b\x7b\xac\x57\x03\x00\xf8\xf4\x63\x8f\x0e\xcf\x2c\x93\xef\x18\xdb\x05\x52\xf2\x17\x16\xf5\x71\x44\x87\xd3\x6f\xa5\x03\x1b\xf5\x64\x84\x6e\xf9\x35\xa3\x91\x06\x46\x87\xc2\xbd\xd7\x9f\x81\xd4\x58\x4a\x39\x87\x81\xee\x1c\x74\x6b\x97\xe5\xf4\xe9\xaf\xc5\xcc\x25\x86\x3c\x54\x27\x6a\x30\xe7\xef\x5c\xe4\x9a\xb8\xdb\x89\x53\x14\x53\x74\x70\x5d\x37\x76\x96\x12\xa3\xfb\xff\x3b\x1c\xdb\x3d\x36\x92\x07\xdb\x69\x09\xeb\xa3\x95\x65\xda\x8c\xd5\x09\x00\xb7\xf5\x0c\xe5\xc0\x9d\x45\xf9\xfa\x90\x66\x6e\xde\x01\x00\x00\xff\xff\xb3\x89\x96\xff\x74\x01\x00\x00") - -func testE2eTestingManifestsKubectlRedisMasterServiceJsonBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsKubectlRedisMasterServiceJson, - "test/e2e/testing-manifests/kubectl/redis-master-service.json", - ) -} - -func testE2eTestingManifestsKubectlRedisMasterServiceJson() (*asset, error) { - bytes, err := testE2eTestingManifestsKubectlRedisMasterServiceJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/kubectl/redis-master-service.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsPod = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\xcc\x31\x6e\xc3\x30\x0c\x85\xe1\x5d\xa7\x78\x40\x67\x17\xed\x56\x68\xed\x05\x3c\x75\x67\x2d\xda\x21\x22\x91\x82\xc4\x24\xf6\xed\x03\x07\x01\x02\x67\xfd\xc8\xff\x7d\xe0\xd7\xea\x06\x9b\x51\x2d\x7d\x6e\x54\x32\x6e\xe2\x27\xbb\x38\x66\xc9\x0c\x5e\x9d\xb5\x8b\x29\x66\x6b\x70\xee\x1e\xa8\xca\x1f\xb7\xdd\x22\xae\xdf\xe1\x2c\x9a\x22\x46\x4b\xa1\xb0\x53\x22\xa7\x18\x00\xa5\xc2\x11\xba\x88\xae\x01\xc8\xf4\xcf\xb9\xef\x7e\xbc\xf4\xca\xd3\xae\x93\xa9\x93\x28\xb7\xc7\xcf\xf0\x56\x03\x52\x68\x39\x40\xb5\xe6\xcf\xbd\xe1\x55\x8f\xd6\x3c\xe2\xe7\x2b\xdc\x03\x00\x00\xff\xff\xaf\xc0\x71\x4d\xd6\x00\x00\x00") - -func testE2eTestingManifestsPodBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsPod, - "test/e2e/testing-manifests/pod", - ) -} - -func testE2eTestingManifestsPod() (*asset, error) { - bytes, err := testE2eTestingManifestsPodBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/pod", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsRbdStorageClassYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8e\xb1\x6e\xc3\x30\x0c\x44\x77\x7d\x05\x91\xdd\x6a\xdc\xa1\x49\xb9\x76\xea\xd2\x25\x40\x77\xc6\x22\x5a\xc1\x96\x28\x90\x4c\x8a\xfe\x7d\x61\x79\x28\x32\x78\x93\xde\x1d\xef\x8e\x5a\xfe\x64\xb5\x2c\x15\xc1\x5c\x94\xbe\x38\xce\x67\x8b\x59\x9e\xee\x63\x98\x73\x4d\x08\x97\x8d\xbf\x2d\x64\x16\x0a\x3b\x25\x72\xc2\x00\x00\x95\x0a\x23\xd8\x22\x3f\xa1\xa9\xdc\xf3\x9a\xc3\x8a\x30\xdf\xae\xac\x95\x9d\x7b\x90\x5e\x53\x68\xa4\x54\xd8\x59\xad\x1f\x42\x91\x9a\x5d\xd4\x10\xc6\xe7\x53\x3c\xc6\x63\x1c\xf1\xe5\x74\x7e\xed\x22\xa5\x92\xeb\x7b\xc2\xed\xf1\x8f\x2e\x3c\x29\xfb\x47\x2f\x9d\xb8\x7d\x0f\xd6\xc1\xb0\x6b\xb3\x46\x13\x23\x1c\xd6\x3d\x83\xfd\x9a\x73\x39\x74\x5f\x13\x59\xb6\x99\xfd\x7b\x33\xd6\xb5\xef\x01\xec\xb5\xad\x5a\x08\x7f\x01\x00\x00\xff\xff\x71\x84\xc8\x20\x39\x01\x00\x00") - -func testE2eTestingManifestsRbdStorageClassYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsRbdStorageClassYaml, - "test/e2e/testing-manifests/rbd-storage-class.yaml", - ) -} - -func testE2eTestingManifestsRbdStorageClassYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsRbdStorageClassYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/rbd-storage-class.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsServiceloadbalancerHaproxyrcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x53\xcd\x8e\xd3\x30\x10\xbe\xe7\x29\x46\xe2\x4a\xba\x8d\xb2\xa0\x62\x89\xc3\x6a\x91\xe0\x18\x41\xc5\x7d\xea\x8e\x1a\x6b\x27\x1e\x63\x4f\xc3\x06\xc4\xbb\xa3\xa4\x6d\xea\x5d\xda\x05\x7c\xf4\x37\xfe\xfe\x26\x79\x70\x7e\x6b\xe0\x33\x05\x76\x16\xd5\x89\xbf\x17\xaf\x51\x98\x29\x16\x18\xdc\x57\x8a\xc9\x89\x37\xd0\x57\x45\x47\x8a\x5b\x54\x34\x05\x80\xc7\x8e\x0c\x24\x8a\xbd\xb3\x54\xb2\xe0\x76\x83\x8c\xde\x52\x2c\x00\x18\x37\xc4\x69\x1c\x03\xc0\x10\xae\xce\x01\xf4\x19\x7d\x0a\x64\xc7\x37\xf1\xe0\x25\x19\xa8\x0a\x80\x44\x4c\x56\x25\xfe\x2f\x1b\x80\x52\x17\x18\x95\x0e\x2f\x73\xf3\xe3\xc9\x3d\xfe\x9d\xf9\x4f\x76\x80\x93\xdf\xf1\x58\xf1\x8a\xce\x53\x9c\x19\x4b\x70\x1d\xee\xc8\xc0\xc3\x2a\x2d\x76\x36\x2e\x9c\xdc\x1c\xe9\x79\x63\x96\x8b\x6a\xe6\x9d\xe6\x9a\x3d\x73\x23\xec\xec\x60\xe0\x8e\xbf\xe3\x90\x66\x9c\x5d\x4f\x9e\x52\x6a\xa2\x6c\xe8\x6c\x18\xa0\x55\x0d\x1f\x49\xf3\x2b\x80\x80\xda\x1a\xb8\x69\x09\x59\xdb\x1f\x4f\x21\x89\x6a\x60\xb5\x5c\x55\x4f\xae\x93\x6d\x69\x5c\xe6\xa7\xf5\xba\xc9\x00\xe7\x9d\x3a\xe4\x0f\xc4\x38\x7c\x21\x2b\x7e\x9b\x0c\xd4\xcb\x6c\x42\x5d\x47\xb2\xd7\x19\x7c\x33\x63\x87\xaf\xa3\xc5\x10\xe5\x71\x28\x72\xfd\xac\xf1\x57\x70\xc7\x3c\x85\x38\xf5\x7e\xce\x5c\x9e\x1b\x6d\x8e\xae\xf3\xe0\x92\xf4\xc2\x75\x88\xa2\x62\x85\x0d\xac\xef\x9b\x4c\xc6\xef\x9c\x7f\x9c\x84\x5e\x10\xb8\xbd\xad\xaf\x28\xfc\x93\x46\x37\xa4\x6f\x7c\x9d\xbd\xae\x97\x6f\x2f\xd2\x3f\x03\xae\xd1\x1f\xab\x84\xa4\xa8\x2f\x84\xa8\xde\xd5\x97\x65\x9e\x01\x97\x65\x22\x25\xd9\x47\x4b\xc9\xc0\xcf\x5f\xe7\x1f\x23\xee\xb2\xa5\x95\x50\x96\x6a\x43\x79\xda\xd8\xfb\x29\xb8\x19\x63\xbc\x9e\x7a\x4e\xbd\x35\x63\x97\xbf\x03\x00\x00\xff\xff\x95\xb6\xdf\x12\x58\x04\x00\x00") - -func testE2eTestingManifestsServiceloadbalancerHaproxyrcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsServiceloadbalancerHaproxyrcYaml, - "test/e2e/testing-manifests/serviceloadbalancer/haproxyrc.yaml", - ) -} - -func testE2eTestingManifestsServiceloadbalancerHaproxyrcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsServiceloadbalancerHaproxyrcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/serviceloadbalancer/haproxyrc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsServiceloadbalancerNetexecrcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x90\xcd\xee\xd3\x30\x10\xc4\xef\x79\x8a\x91\x38\x27\x6d\xe9\xa5\xf2\x0d\xc1\xbd\x08\x21\xee\xdb\x78\xdb\x58\x75\x76\x2d\xef\xa6\x85\xb7\x47\x2e\xfd\xe2\xbf\xb7\x8c\xe6\x37\x33\x31\x95\xf4\x8b\xab\x25\x95\x80\xcb\xa6\x3b\x27\x89\x01\x3f\xb8\xe4\x34\x92\x27\x95\xaf\x2a\x5e\x35\x67\xae\xdd\xcc\x4e\x91\x9c\x42\x07\x08\xcd\x1c\x20\xec\xfc\x9b\xc7\xce\x0a\x8f\x4d\xfd\x84\x2f\x66\xcb\xcc\x86\x3f\xba\x60\xa2\x0b\x63\x0b\xd1\xc8\x86\x24\x4d\xab\x18\xf3\x62\xce\x75\xe8\x80\xfa\xaf\xc5\x02\xb6\x1d\xe0\x3c\x97\x4c\xce\x2d\x07\x78\xef\x6a\x97\xe9\xc0\xd9\x1e\x5f\x00\x95\xf2\xaa\x6f\xc2\x63\x42\xbb\x51\xc5\x29\x09\xd7\x27\xd0\x7f\x18\xfc\x88\x49\x33\x9d\x38\xe0\x34\xd6\x21\xe9\xea\xbc\x1c\xb8\x36\x8b\xf5\xfc\x99\x7b\x67\xf3\xfe\xe6\xb0\xd5\x1d\x0c\x9b\x61\xfd\x84\x8b\x56\x7f\x9b\xd4\xbf\x7a\xbf\x6b\xf5\x80\xdd\x7a\xf7\x32\xb7\xc7\xf9\x39\x25\x43\x32\xb8\xe2\xa8\x75\x64\xf8\xc4\xc6\x28\x1a\x6f\x5a\x26\x89\x50\x41\x4c\xc7\x23\x57\x16\xc7\xa4\xe6\x36\xfc\x9f\xb1\xff\xb6\x0f\x58\xec\x06\x23\xea\x55\xae\x54\x23\xa8\x24\x34\xfc\xc4\xde\xf2\xda\xdf\x22\x89\x39\x53\x7c\xe7\x5b\xe0\x7d\xdc\xa6\xfb\x1b\x00\x00\xff\xff\x4a\x68\xfa\x6c\xfb\x01\x00\x00") - -func testE2eTestingManifestsServiceloadbalancerNetexecrcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsServiceloadbalancerNetexecrcYaml, - "test/e2e/testing-manifests/serviceloadbalancer/netexecrc.yaml", - ) -} - -func testE2eTestingManifestsServiceloadbalancerNetexecrcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsServiceloadbalancerNetexecrcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/serviceloadbalancer/netexecrc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsServiceloadbalancerNetexecsvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xce\xb1\x6a\x03\x31\x10\x04\xd0\x5e\x5f\x31\x3f\x10\x48\xba\xa0\x36\x7d\x38\xc8\x91\x7e\xad\x1b\x6c\x61\x9d\x76\x91\x96\xc3\xfe\x7b\x73\xf2\x81\x1b\x77\xcb\x1b\x86\x1d\xb1\xfc\xcf\xd6\xb3\xd6\x88\xed\x2b\x5c\x73\x5d\x22\xfe\xd8\xb6\x9c\x18\x56\xba\x2c\xe2\x12\x03\x50\x65\x65\x44\xa5\xf3\xc6\x14\x80\x22\x27\x96\xbe\x27\x80\x98\xbd\xa2\x6e\x4c\x3b\xcf\x77\x63\xc4\xaf\x2e\x9c\xb4\x79\x00\x4c\x9b\x8f\xc2\xc7\x38\x23\xbe\x3f\x47\xdb\xa5\x9d\xe9\xd3\x41\x07\x5a\x53\xd7\xa4\x25\x62\xfe\x99\x86\x3c\x07\x5c\xdc\x2d\x00\x9d\x85\xc9\xb5\xbd\xf9\xff\x08\x00\x00\xff\xff\x99\xb6\xda\xa2\xd2\x00\x00\x00") - -func testE2eTestingManifestsServiceloadbalancerNetexecsvcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsServiceloadbalancerNetexecsvcYaml, - "test/e2e/testing-manifests/serviceloadbalancer/netexecsvc.yaml", - ) -} - -func testE2eTestingManifestsServiceloadbalancerNetexecsvcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsServiceloadbalancerNetexecsvcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/serviceloadbalancer/netexecsvc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsServiceloadbalancerNginxrcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8e\x4b\x4e\xc6\x30\x0c\x84\xf7\x39\x85\x2f\x50\xf8\xbb\x43\xde\x72\x01\xc4\x82\xbd\xdb\x5a\xad\x45\xe2\x58\x8e\x85\xe0\xf6\x28\x94\x3e\x66\x37\xc9\x37\x33\x26\x93\x0f\xf6\x26\x55\x11\xbe\xc6\xf4\x29\xba\x20\xbc\xb3\x65\x99\x29\xa4\xea\x6b\xd5\xf0\x9a\x33\x7b\x2a\x1c\xb4\x50\x10\x26\x00\xa5\xc2\x08\xe5\x67\xd0\x55\xf4\x3b\x35\xe3\xb9\x3f\xfb\x1e\x6c\x08\x63\x02\x08\x2e\x96\x29\xb8\xff\x00\xdc\xe3\x5d\x99\x26\xce\xed\x70\x00\x64\x86\xb0\xd7\x75\x7b\x54\x76\xcd\x55\x83\x44\xd9\x4f\x7c\xf8\xbf\xe0\x8f\xdf\x22\xac\x9d\x3d\x52\x68\x65\x84\xc9\x9c\xda\x46\x1a\xdb\xf3\x05\xe1\xf8\xf4\x38\x41\xab\x1e\xb7\xfd\xe1\x9a\x79\xab\x1e\x08\x2f\x8f\xf4\x1b\x00\x00\xff\xff\xdc\xf9\xe9\xab\x1e\x01\x00\x00") - -func testE2eTestingManifestsServiceloadbalancerNginxrcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsServiceloadbalancerNginxrcYaml, - "test/e2e/testing-manifests/serviceloadbalancer/nginxrc.yaml", - ) -} - -func testE2eTestingManifestsServiceloadbalancerNginxrcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsServiceloadbalancerNginxrcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/serviceloadbalancer/nginxrc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsServiceloadbalancerNginxsvcYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8c\x41\x0a\x02\x31\x0c\x45\xf7\x39\xc5\xbf\x80\xa0\x3b\xc9\xd6\x0b\x08\x8a\xfb\xd8\x09\x5a\xec\x34\xa1\x0d\xc5\xe3\xcb\x54\x77\xee\x3e\xef\x7d\x9e\x78\xbe\x69\xeb\xd9\x2a\x63\x1c\xe8\x95\xeb\xc2\xb8\x68\x1b\x39\x29\xad\x1a\xb2\x48\x08\x13\x50\x65\x55\x46\x7d\xe4\xfa\xee\x23\x11\x50\xe4\xae\xa5\x6f\x0a\x10\xf7\x9f\xa3\xee\x9a\x36\xe8\xd6\x62\xda\xdd\x9c\x8c\xe3\x7e\x5e\xbd\x59\x58\xb2\xc2\xb8\x9e\xce\x93\x7c\xcb\xcf\x08\x27\xa0\x6b\xd1\x14\xd6\xfe\xba\xf4\x09\x00\x00\xff\xff\x55\x0d\xe9\x5c\xaa\x00\x00\x00") - -func testE2eTestingManifestsServiceloadbalancerNginxsvcYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsServiceloadbalancerNginxsvcYaml, - "test/e2e/testing-manifests/serviceloadbalancer/nginxsvc.yaml", - ) -} - -func testE2eTestingManifestsServiceloadbalancerNginxsvcYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsServiceloadbalancerNginxsvcYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/serviceloadbalancer/nginxsvc.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetCassandraControllerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x54\x41\x6f\xd3\x4c\x10\xbd\xe7\x57\x8c\xfa\x5d\xbf\xb8\x4e\xa1\x82\xee\xcd\x6a\x8c\xa8\x50\x5a\x2b\x41\x05\x71\x89\xa6\xeb\x49\xba\x74\x77\x67\xd9\x5d\x1b\x2a\xc4\x7f\x47\x8e\x69\xe2\xd8\x2e\xe2\xd0\xb9\xf9\xcd\xbc\x37\xcf\xcf\x23\xa3\x53\xb7\xe4\x83\x62\x2b\xa0\x9e\x4d\x1e\x94\x2d\x05\x2c\xc9\x69\x25\x31\x2a\xb6\x97\x6c\xa3\x67\xad\xc9\x4f\x0c\x45\x2c\x31\xa2\x98\x00\x58\x34\x24\x40\x62\x08\x68\x4b\x8f\x13\x80\xff\xe0\xe3\x3d\x81\xc6\x3b\xd2\x01\xbe\x2b\xad\xe1\x8e\x00\x9d\xd3\x8a\x4a\xc0\x2a\xb2\xc1\xa8\x24\x6a\xfd\xb8\x1b\xde\x78\x36\x10\x0f\x0c\x65\x77\x4f\x8e\x4b\x88\x64\x9c\xc6\x48\xff\x83\xda\x80\xe5\x08\x81\xe2\x8e\xd3\x8e\x36\xeb\x9b\x27\x74\xae\xeb\x20\x38\x92\x4d\xcb\xb7\xde\x83\x80\xb3\xbd\xab\x40\x9a\x64\x64\xff\xf2\xbe\x92\x1d\xe9\x49\xbf\xb5\x36\x62\x0e\xf6\xe4\x76\xa4\x1b\x65\x53\xdd\x37\x6b\x6a\x40\x07\x78\x7a\xbf\xa6\x24\xdb\x88\xca\x92\xef\x50\xa6\x20\xd9\x18\xb4\xe5\x01\x6a\xe1\x53\x5f\xd9\x24\xdc\x77\x50\x4f\x81\x2b\x2f\x29\x1c\x8f\x6a\x65\x54\xec\x61\x00\xd2\x55\x02\xd2\xe4\xbc\x03\x93\xad\xfb\x4b\xda\x7b\x58\x64\x9f\xd7\xef\xf3\xac\x58\xaf\xae\xbe\xe4\x3d\x9d\x1a\x75\x45\x02\xce\x67\x67\x8b\x51\xee\x8e\x77\x9d\x7f\x7a\x9e\x3a\x4b\xd3\x71\xea\x65\xb6\x5a\x65\xd7\xf3\x65\xb6\x5e\xe5\xf9\x7c\x5d\x2c\x6f\x6e\xaf\xe6\xf9\x72\x5c\xe5\x44\x71\xf2\xf0\x36\x24\xfb\x74\x93\x0f\xd5\x1d\x79\x4b\x91\xc2\x8a\xa8\x2c\x3c\xd7\xaa\x24\x7f\x32\xba\xaa\xb8\x99\xaf\xaf\xb3\x45\xbe\x2a\xb2\xcb\x51\x9b\xef\x3c\x9b\x7e\x84\x00\x1b\x45\xba\x5c\xd2\x66\xd8\xf9\xd3\x2b\x30\xde\x8b\xfd\x59\x24\xcd\xb2\xe0\x50\xd2\xb3\x26\xae\x8a\x17\xdf\x1e\x22\xc6\x2a\x24\x8e\xcb\x23\x71\x65\x70\x4b\x02\xb6\xd2\x27\x8a\x4f\xb7\xcc\x5b\x4d\xd3\x80\xc6\x69\x0a\xa7\xfb\x14\x45\x3d\x7b\xd5\x21\x0d\xff\x0f\x4f\xe5\xd8\xf7\x8f\x6c\x7a\x38\xe8\x82\x7d\x14\xf0\x26\x4d\xd3\x9e\xd7\x56\x50\xd9\xe8\x71\x6a\xb9\xec\x07\x33\x14\x98\x8d\x0a\x44\x1d\xa6\xff\x2c\x32\xbb\xb8\x18\x15\xf9\x6a\x7e\xfc\x9d\x79\x91\xbe\x3e\x1b\x65\xca\x6f\xba\x83\xd7\xac\x2b\x43\x0b\xae\xec\x30\x11\xd3\xa0\xed\x77\x39\x84\xbc\x6e\x8e\x63\x54\xb8\xd3\x68\x55\x8f\xfe\x0c\x83\x99\xa6\xc8\xb8\xf8\x38\x57\x5e\xc0\xcf\x5f\x93\xc9\xef\x00\x00\x00\xff\xff\xa4\xa9\x50\x3c\x08\x06\x00\x00") - -func testE2eTestingManifestsStatefulsetCassandraControllerYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetCassandraControllerYaml, - "test/e2e/testing-manifests/statefulset/cassandra/controller.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetCassandraControllerYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetCassandraControllerYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cassandra/controller.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetCassandraPdbYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\xcc\x3d\xae\xc2\x30\x10\xc4\xf1\xde\xa7\x98\x0b\x3c\x3d\x85\xd2\x1d\x88\x92\x82\x8a\x7e\x6c\xaf\x60\x85\x3f\x56\xb6\x13\x89\xdb\xa3\x88\x26\xf5\x7f\xe6\x47\xd3\x87\xf4\xa1\xad\x7a\x58\xcb\x1a\x3f\xff\xdb\x12\x64\x72\x71\x6f\xad\xc9\xe3\xde\xd2\x55\x47\x5f\x6d\x6a\xab\x97\x35\x3d\x65\xba\x22\x93\x89\x93\xde\x01\x95\x45\x3c\x22\xc7\x60\x4d\x9d\x7f\x96\x82\x03\x32\x83\xe4\xb1\x77\xc0\x52\x38\x0c\xdc\x30\x89\x7b\x28\x5a\xcf\x1b\x35\x33\x64\xf1\x38\x39\x60\x48\x96\x38\x5b\xff\xdd\x0a\x67\x7c\xdd\x0e\x0e\x40\xb3\xa3\xf4\x0d\x00\x00\xff\xff\x20\x15\x65\x49\xbc\x00\x00\x00") - -func testE2eTestingManifestsStatefulsetCassandraPdbYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetCassandraPdbYaml, - "test/e2e/testing-manifests/statefulset/cassandra/pdb.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetCassandraPdbYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetCassandraPdbYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cassandra/pdb.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetCassandraServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8d\x31\xca\x42\x31\x10\x84\xfb\x3d\xc5\x5c\xe0\x87\x5f\xb1\x71\x6f\x60\x23\x82\x60\xbf\x26\x53\x04\xf3\x92\xb0\x1b\xdf\xf9\xe5\x89\x85\x85\xdd\xcc\x30\x7c\x9f\x8d\x72\xa3\x47\xe9\x4d\xb1\xee\xe4\x51\x5a\x56\x5c\xe9\x6b\x49\x94\x85\xd3\xb2\x4d\x53\x01\xaa\xdd\x59\x63\x4b\x80\x8d\xa1\x48\x16\x61\x2d\xbb\x09\xd0\x6c\xe1\xf7\x12\x83\x69\xbb\xa6\xfa\x8c\x49\x3f\x5d\x14\xe7\xde\x28\xc0\xe8\x3e\x3f\x94\xbf\x77\x51\x1c\xff\x0f\x7b\x01\x82\x95\x69\x76\xff\xa9\x78\x05\x00\x00\xff\xff\x9d\xcf\x54\x9b\xa7\x00\x00\x00") - -func testE2eTestingManifestsStatefulsetCassandraServiceYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetCassandraServiceYaml, - "test/e2e/testing-manifests/statefulset/cassandra/service.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetCassandraServiceYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetCassandraServiceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cassandra/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetCassandraStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\xdf\x6f\xe3\x36\x0c\x7e\xcf\x5f\x41\x64\x7b\xd8\x80\xd9\x49\xee\x76\xd8\xea\xb7\x20\xc9\x6e\xc5\xf5\x47\x10\x77\xbb\x61\xc3\x10\x30\x12\xdb\x68\x95\x25\x9f\x48\x67\xcd\x7f\x3f\xc8\x49\x5c\xbb\x71\x8b\x7b\x98\x9f\x8c\x8f\xfc\xc8\x8f\x94\x08\x0a\x4b\xf3\x3b\x05\x36\xde\x65\x80\x65\xc9\xa3\xdd\x64\xf0\x68\x9c\xce\x20\x17\x14\xba\xaf\x6c\x4e\x32\x28\x48\x50\xa3\x60\x36\x00\x70\x58\x50\x06\x0a\x99\xd1\xe9\x80\x03\x2e\x49\x45\x9c\x29\xec\x8c\xa2\x9b\x17\x66\x80\x40\xa5\x35\x0a\x39\x83\xf7\xb5\x9b\x25\x25\x3e\x44\x0a\x40\x81\xa2\xb6\x57\xb8\x21\xcb\x07\x00\xa2\x8a\x2e\x5f\xa8\x28\x2d\x0a\x1d\x19\x2d\x29\xf1\xb3\x1d\x72\x0f\x1d\xe0\xa4\x30\x7e\xca\x3b\x41\xe3\x28\x34\x94\xe4\xac\xa2\x53\x28\x53\xe0\x03\x65\xf0\xa0\x42\x6a\xfc\xe8\xc1\xfb\x07\x4b\x09\x63\x51\x5a\xe2\x51\xe3\x9e\xed\x26\xef\xbb\x94\x65\x65\xed\xd2\x5b\xa3\xf6\x19\x4c\xed\xbf\xb8\xe7\xc6\x5e\xfa\x20\x2d\xb1\xc9\xb3\x9e\xa5\x0f\x92\xc1\x4f\xe3\xf1\xb8\xb1\x9e\x7a\x6d\x9c\x04\x4c\x9c\xd7\xf4\x26\x71\x72\x46\x14\xcb\xc9\x57\x91\x27\x17\x17\x67\xe4\x7f\x8a\xa7\xd7\x19\x17\xe3\x1f\xdf\x9d\x31\xd4\x17\xdb\x60\x81\xd8\x57\x41\x51\xab\xd8\x08\x7e\xa9\x88\xa5\x83\x81\x2a\xab\x0c\x86\xef\xc7\xe3\x62\xd8\x86\x0b\x2a\x7c\xd8\x67\x30\xf9\x68\x1a\x98\x49\x55\xc1\xc8\x7e\xe6\x9d\xd0\x93\xb4\xc3\x28\x2c\x71\x63\xac\x11\xd3\x4d\x09\x80\x5a\x77\x81\x58\xce\xe5\x72\xb6\xbe\xba\x9d\x7d\x6a\x0c\xd6\xdc\x93\xda\x2b\x4b\x6d\xdf\x32\x50\x2e\xbe\xec\xd2\xe9\xe9\xf9\x36\x35\xd9\x7d\x51\xa0\xeb\xc9\x33\xda\x18\x37\xe2\xed\x19\x9e\xa8\x33\x28\x1e\x91\x78\x6f\x41\x07\x34\xae\x31\x93\xdb\xb5\xc3\x9e\x6e\xeb\xf5\xf4\x8f\xf5\xaf\x8b\xe9\x72\x9d\x5f\xfe\xb9\xe8\xc4\xda\xa1\xad\x28\x83\x0f\x93\x77\xd7\x3d\xbc\x9a\x73\xb3\xf8\xfc\x1a\x6d\x32\x1e\xf7\xd1\x96\xb7\xf3\xf5\xcd\xf4\x7a\x91\x2f\xa7\xb3\x1e\xde\x2f\xc1\x17\x2f\x8b\xbf\x37\x64\xf5\x8a\xee\x5f\xe2\x47\xcb\x12\x65\x9b\x35\xd3\x9c\xc6\x34\x5c\xa2\xa2\x9e\xe4\xb3\x69\x9e\x4f\x6f\xe6\xab\xe9\x3a\x5f\x2c\xe6\x79\x9f\xec\x61\x33\x8e\xc9\x38\x6d\xfe\xd3\x6f\xbf\xeb\x08\xff\x3e\xe5\x9d\x4a\x95\xad\x58\x28\xa4\xd6\x2b\xb4\xc3\x37\xf3\xcd\xae\x7e\xcb\xef\x16\xab\x3a\x42\x6f\xda\x4f\x3f\xcf\xa9\xf0\x6f\x07\x99\xcf\x7a\xa9\xf3\xd9\x24\xf9\x1a\xfa\x6a\xda\xba\xa6\xed\x00\x2b\x54\x8f\x6f\x85\x88\xa5\x5f\x2e\xff\xc7\xc3\x62\x41\xa9\x38\x2d\xbd\x6e\x85\x0d\x84\xda\x38\x62\x5e\x06\xbf\xe9\x4c\xcf\xf9\xa0\xf4\x8e\xc9\x71\x48\x36\xf8\x62\x4c\xce\x86\x24\x81\x51\x4c\xb6\x4f\xca\x98\x29\xed\xb8\x1b\x67\xc4\xa0\x9d\x93\xc5\x7d\x4e\xca\x3b\xcd\x19\x4c\x3e\xb4\x3c\xc4\x14\xe4\x2b\x69\x8c\xcf\xb6\x6f\xe0\x6e\x4b\x4c\xb0\xf3\xb6\x2a\x08\x0a\x5f\x39\x61\xc0\x40\x50\xc6\xcd\xc8\x42\x4e\xd2\xe8\xb3\xaf\x41\x6b\x1e\x09\x8c\xb3\xc6\x11\x28\x8b\xa6\xe0\x1f\x5a\xa1\x36\x95\x80\xf3\x02\xf4\x84\x4a\xec\x1e\x36\xa4\xb0\x62\x02\xd9\x52\x7d\x2c\x0c\x8e\x48\x83\xf8\xc3\xea\x6b\xfc\xbc\x23\xf0\xf7\xad\x40\x91\xc0\xc7\x15\x0c\xa5\xd7\x47\x79\x9c\x36\x3e\x07\xe0\xba\x96\xdb\x5e\x29\x2f\xd6\x59\x12\xe7\xab\xd5\x88\xba\xbe\xc3\x81\x3e\x2f\xb1\xf5\xd1\xe9\xd4\x8b\x58\xa8\xf2\x6e\x47\x41\x0e\x6a\x8f\xcd\x39\x14\x0c\x9b\x7d\xad\x2f\x2e\x85\xe0\xad\xa5\x50\x53\xd1\xe9\x43\x74\xd2\x80\x52\x7b\x94\x28\x5b\x86\x82\x9c\x18\xef\x22\xbc\xf1\x3b\x4a\x6b\x6f\xed\xeb\x46\x1d\x9b\xc3\xb1\xa7\x50\x06\xaf\x2b\x15\x7d\xa1\x72\x62\x2c\x30\x6b\xf8\x38\x5b\x2c\x9b\x83\x98\x1b\x7e\x04\x1f\xc0\xcb\x96\x42\x6d\x2e\xf5\xe0\xd4\x8b\x59\x54\x77\x77\x7c\x2e\xd4\x3d\x49\xce\xde\x0b\xaf\x76\xa7\xfd\x4a\x40\xa5\x88\xf9\xda\x6b\xe2\x0c\xfe\x82\xe1\x8a\x50\x7f\x0e\x46\xe8\xd6\x29\x1a\xc2\xdf\x83\xd3\xdd\x3f\x5b\x72\x7d\x2b\x8e\xc5\x87\xfa\x25\x11\x77\xd9\xe0\xbf\x00\x00\x00\xff\xff\xe4\xd5\x43\x1f\x72\x09\x00\x00") - -func testE2eTestingManifestsStatefulsetCassandraStatefulsetYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetCassandraStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/cassandra/statefulset.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetCassandraStatefulsetYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetCassandraStatefulsetYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cassandra/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetCassandraTesterYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x52\xbb\x6e\x1b\x31\x10\xec\xef\x2b\xf6\x07\xa8\x87\xd3\x08\xec\x6c\x08\x48\xe3\x42\x80\x81\xf4\x7b\xe4\x40\xb7\x30\x8f\x24\xc8\xd5\x05\x97\xaf\x0f\xce\xb1\x24\x9e\xad\x2a\x5b\x72\x38\xcb\x19\xce\x70\x96\x5f\x28\x55\x52\xb4\xc4\x39\xd7\xed\xb4\xef\xde\x25\x7a\x4b\x47\xe4\x90\xe6\x11\x51\xbb\x11\xca\x9e\x95\x6d\x47\x14\x79\x84\x25\xc7\xb5\x72\xf4\x85\x8d\xa2\xaa\xa9\x28\x13\x4a\x57\x33\xdc\x72\xa7\x20\x07\x71\x5c\x2d\xfd\xe8\x88\x2a\x02\x9c\xa6\xb2\x20\x44\x23\xab\x1b\x5e\xb9\x47\xa8\xff\x0e\x68\x79\xd7\x52\xbb\x87\x48\x31\xe6\xc0\x8a\x4f\x4e\xf3\xfe\x32\x61\x45\x7f\xb8\x80\xe8\x2a\x66\x19\x97\xa2\xb2\x44\x94\x1b\xc9\x7c\x1a\xf9\xca\x5a\x46\x46\x3e\xc3\xd2\xfb\xa1\x6e\xce\xae\x6c\x24\x6d\xef\x76\xf1\x84\x0f\xcb\x76\xb7\xd9\xaf\x09\xa7\x4b\x08\xa7\x14\xc4\xcd\x96\x9e\xc3\x6f\x9e\xeb\x0d\xcf\xa9\x68\x23\xd7\xdc\xf5\x9c\x52\x51\x4b\x87\xdd\x61\x77\x43\x0b\xd8\x4b\x44\xad\xa7\x92\x7a\xdc\x59\x44\x83\x6a\xfe\x09\x6d\x8f\x88\x32\xeb\x60\x69\x3b\x80\x83\x0e\x7f\xd6\xd0\xf7\xe5\x44\x12\x45\x85\xc3\x11\x81\xe7\x37\xb8\x14\x7d\xb5\xf4\xd4\x5c\xc8\x28\x92\x7c\x03\x19\x63\xba\xb6\x26\xf9\xc3\xe4\x76\xda\xf7\x50\xbe\xb6\xe5\x94\xfc\x51\x6a\xb9\x64\x95\x14\x5f\x2e\xfe\x8c\x47\xb5\x59\x7e\x0e\xc5\x64\xdf\x77\xeb\x14\xb3\xef\xd7\x59\x5c\xd3\x1b\x25\x3e\x4f\x2c\x81\xfb\x00\x4b\xfb\xff\xaa\xd3\x57\x03\xb7\x8a\xbf\xa1\x4c\xe2\xb0\x12\xda\xaa\x7a\xd0\xab\xef\xad\xb9\x2a\x6d\x42\x36\xeb\xaf\x5f\x2b\x7e\xd4\xf6\x39\xc3\xd2\x6b\x62\xff\xc2\x81\xa3\x43\xe9\xfe\x06\x00\x00\xff\xff\x6a\x4a\xab\x39\x98\x03\x00\x00") - -func testE2eTestingManifestsStatefulsetCassandraTesterYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetCassandraTesterYaml, - "test/e2e/testing-manifests/statefulset/cassandra/tester.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetCassandraTesterYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetCassandraTesterYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cassandra/tester.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetCockroachdbServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x94\x41\x6f\x24\x45\x0c\x85\xef\xfd\x2b\x9e\x66\x0f\x7b\xd9\xcc\x86\x95\x80\x55\xdf\x10\x70\xc8\x25\x8a\x08\xe2\x8a\xdc\x55\x9e\xa9\x22\xd5\x76\xab\xec\x9e\x61\xfe\x3d\xaa\xea\x99\x80\x42\xf6\xda\xf6\xfb\x5c\xb6\x9f\x9b\x96\xfc\x07\x57\xcb\x2a\x23\x4e\xdf\x0d\x2f\x59\xe2\x88\x67\xae\xa7\x1c\x78\x98\xd9\x29\x92\xd3\x38\x00\x1f\xf0\x7b\xca\x06\xdb\x42\x50\x29\x17\xf0\xdf\xd9\xdc\xe0\x8a\x50\x99\x9c\xf1\xcb\xe3\x33\x58\xbc\x66\x36\x1c\xb4\x82\x29\x24\x2c\x1a\x91\x05\x9e\x18\xe6\xe4\x7c\x58\x4b\xe7\x19\x3b\x6c\x0d\x09\x9e\xc8\x5b\xf8\x82\x40\x82\xca\xa6\xe5\xc4\x9b\x56\x3d\x71\xfd\x68\x78\x78\x02\xc5\x58\xd9\x8c\x6d\x8f\x07\x47\x54\x36\x88\x7a\x27\x5d\xab\x13\x8a\x52\xbc\x9b\xa8\x90\x04\x8e\xf8\xb9\xac\xe6\x5c\x9b\x56\x22\x2c\xe9\x5a\x62\xd3\x60\x62\xac\xc6\x11\x31\x57\x0e\x5e\x2e\x98\x2e\x08\x25\xb3\xb8\x75\x5e\x16\xcc\x6a\x8e\x90\x6b\x58\x67\xf3\x86\xb3\xfd\x00\x08\xcd\x3c\x22\x68\x78\xa9\x4a\x21\xc5\x69\x00\x0a\x4d\x5c\xac\x8d\x08\xa0\x65\x79\x1b\x26\x11\x75\xf2\xac\x72\xcd\xf9\x80\x5f\x85\xa6\xc2\xa0\xd5\x75\x26\xcf\x01\xb3\x4a\x76\xad\x59\x8e\xd0\x03\xa8\x14\x64\xb9\x56\xc5\x39\xb1\xe0\xa9\xea\xcc\x9e\x78\x35\x64\x43\x5d\x45\x5a\xee\x75\xa8\x61\x6b\x73\xdf\xe9\xcb\x6b\xe6\x3e\xeb\x67\x0b\x95\x16\x1e\xb1\xf3\xba\xf2\xee\x9d\x84\x85\x3c\x8d\xd8\xfd\xd9\x16\xb3\xda\xe7\x13\x55\x7b\x37\x4d\xab\x8f\xd8\x7d\xbd\xff\x7a\xbf\x1b\x6c\xe1\xd0\x5a\x69\x1f\x7b\x4f\x77\xd8\xe2\x5f\x7e\xf8\xf2\xfd\x8f\x5d\xed\x54\x8f\xec\x4f\x6f\xbe\x6e\xd3\x3b\xd6\x25\xfc\x47\xd4\x98\xff\xd3\xbc\x7e\xdc\x24\xc9\x7d\x19\x70\x6b\xf4\xe1\x69\xc4\xa3\x0a\x0f\x80\x71\xe1\xe0\x5a\xbf\x39\xfd\xab\x6b\xb3\x41\x98\x23\xc7\xe6\xd5\x99\x5e\xb8\x0f\x6e\x61\xae\x77\x87\x2c\x91\x2b\xce\x5a\x5f\x5a\xd3\x0b\xd7\x72\xe9\x7e\x71\x45\xe2\xb2\x80\x4e\x9a\x63\x47\x71\x3c\x32\x02\xd9\xb6\x95\xca\xaf\x5b\xc2\x3d\x82\xce\x6c\x58\x17\xd0\xc1\xb9\xa2\xa8\xf5\x0d\xb9\xa1\x1d\x50\x07\xb6\x17\xb4\x63\xe9\xac\xc8\x21\x47\x6e\x9c\xe6\x70\x64\xbf\xf9\xf3\xd5\xcb\xc2\xe7\x5b\xc7\xd0\x0a\xaf\x97\xf6\xa4\xbf\x34\x0b\x48\xb6\xd3\xcb\x72\xec\x30\x15\xde\xe3\xe1\xd0\x28\x9b\xdc\xde\xe8\xbb\x89\xfe\xad\x91\xe8\xc4\x9d\xc4\xf1\x3d\xd6\x27\x9c\xf9\x63\x04\x4b\x6c\x0d\x9d\xb3\x27\xf8\x59\x61\xbc\x50\x6d\x6f\xbb\x52\x0d\x25\x9b\x73\xb7\xe2\x76\xc0\x30\x9a\xf9\xf6\x8b\xd8\x46\x26\x71\xd1\x2c\xfe\x09\xe7\x94\x43\xc2\xb9\xd7\x9f\x18\x27\xae\x17\x4c\x14\x9b\x6b\x97\x75\x2a\xd9\xd2\xa3\xfa\x6f\x4c\xf1\xf2\xd3\xed\xd0\x47\x34\xdb\x0e\xff\x04\x00\x00\xff\xff\x6a\xf0\xa9\x28\xa3\x04\x00\x00") - -func testE2eTestingManifestsStatefulsetCockroachdbServiceYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetCockroachdbServiceYaml, - "test/e2e/testing-manifests/statefulset/cockroachdb/service.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetCockroachdbServiceYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetCockroachdbServiceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cockroachdb/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\xdf\x6f\xdb\xc8\xf1\x7f\xf7\x5f\x31\x5f\x7d\x0f\xb0\xdd\x9a\x92\x9c\xe2\xd2\x54\x80\x1f\x5c\xc7\x0d\x8c\x36\x8e\x61\x05\x77\x0f\x69\x90\x5b\xed\x0e\xc5\xad\x96\x3b\xbc\xdd\xa1\x14\xb5\xe9\xff\x5e\xcc\x92\xa2\x48\xca\x39\xa0\x40\xe5\x17\x93\x3b\xf3\xd9\x99\xcf\xfc\xa4\xaa\xec\x4f\x18\xa2\x25\xbf\x00\x55\x55\x71\xb6\xbd\x3e\xdb\x58\x6f\x16\xb0\x64\xc5\x98\xd7\x6e\x89\x7c\x56\x22\x2b\xa3\x58\x2d\xce\x00\xbc\x2a\x71\x01\x9a\xf4\x26\x90\xd2\x85\x59\x9d\xc5\x0a\xb5\x9c\x44\x0c\x5b\xab\xf1\x31\x09\x4c\x7a\x12\x93\x33\x80\x80\x95\xb3\x5a\xc5\x05\xfc\x21\x89\x3a\xd4\x4c\x41\xd4\x00\x4a\xc5\xba\xf8\x9b\x5a\xa1\x8b\xcd\x0b\x10\x5b\x86\x97\x00\x30\x96\x95\x53\x8c\xad\x4e\xcf\x24\xf9\xb9\x81\xfa\x8b\x00\x00\x07\x4b\xe5\xf7\xff\xf0\xe0\x2d\x83\x26\xcf\xca\x7a\x0c\x11\x54\x40\x08\xb5\x07\xf2\x6e\x0f\xe4\x35\x82\xf5\xc0\x05\x82\xb3\x39\xb2\x2d\x11\x28\x07\x05\x15\x99\x2b\x58\x61\x4e\x01\x3b\x28\xcb\xe7\x11\x22\xab\xc0\x68\xa0\xae\x20\xa7\x90\x34\x73\x1b\x22\x83\xe8\x4e\xe1\x81\xa1\x50\x11\x98\x00\xbf\x5a\x86\x58\x6b\x8d\x31\xe6\xb5\x73\xfb\x0e\xa7\x81\x4d\xaa\x15\x99\xf3\x08\xa5\xb2\x7e\x6c\xa3\x72\x8e\x76\x68\x04\x29\x5d\x39\xed\xd4\x3f\x16\x36\x42\xa5\x02\x5b\x5d\x3b\x15\xc0\x0e\x3c\x04\x43\x18\x41\xc1\xdb\xc7\x25\x38\xa2\x4d\x6b\x27\x71\x81\x41\xae\x8b\x60\x7d\x07\x25\x26\x44\x64\xb9\xa4\x40\x57\x81\x41\xc6\x50\x5a\x8f\xb0\x2b\x30\x69\x50\x00\x4f\x0c\x0a\xb4\xab\x23\x63\x00\xe5\x02\x2a\xb3\x17\xf7\x22\xc7\xa3\x55\x0f\x39\x28\xbf\xef\xdf\x93\x24\xae\x40\x8c\x0b\xa8\x38\x59\x95\x5b\xd7\x11\xde\xc5\x2d\x93\x10\x77\x40\xc6\x86\x94\x35\x7b\xb1\xaa\x52\x31\x02\x17\x8a\xc1\xfa\x9c\x42\xa9\xd8\x92\x07\xe5\xc8\xaf\xe5\x38\x51\x18\x6c\xa9\xc2\xbe\xc7\x80\xc8\x77\x70\x6d\x34\x0c\x6a\x6b\xc4\x2d\x25\x5c\x95\xa5\xf2\x26\x73\xe2\x68\xee\xd4\x3a\x49\xd4\x31\x79\xed\x1b\xba\xad\x5f\xc3\xdd\xc1\xc0\xb7\x7f\x1e\xb1\x9f\x92\xa7\x54\xcc\x12\xad\xa4\xa4\xda\x50\x56\x52\x67\x91\xd1\x33\x6c\xc9\xd5\x25\x82\x8d\x80\x65\xc5\x7b\xc8\xc0\xe6\xc2\x46\xa1\xe2\xd1\x59\xc5\x0a\xf2\x40\xa5\x00\x04\xdc\x5a\xaa\x85\x38\xd4\xb5\x38\x7a\xd5\xb8\x9e\x84\x76\xd6\x39\x50\x6e\xa7\xf6\x11\x56\x28\xd6\x9a\x83\x51\x92\x00\x77\x5d\xf6\x1c\x52\x3f\x6b\x8b\x78\x45\xc4\x91\x83\xaa\xba\xaa\xb1\xa5\x5a\x0f\xab\x7b\x76\x8c\xc5\xe6\x4d\xcc\x04\x70\x31\x9f\x5e\x0f\x35\x9e\x6a\xe7\x9e\xc8\x59\xbd\x5f\xc0\x43\xfe\x48\xfc\x14\x30\xa2\xe7\x63\x35\x86\x75\xaf\x36\x33\x98\x64\xe4\xb3\xc4\xe6\xcd\xec\xf0\xdf\x34\x16\x93\x81\x48\xdb\x4f\x6e\x46\x9d\xa4\xf9\xa1\xdf\xf6\x01\x1b\x87\x9e\x3e\xbc\xfd\xf2\x78\xfb\xfe\x7e\xf9\x74\x7b\x77\xdf\x9d\x02\x6c\x95\xab\xf1\x2f\x81\xca\x45\xef\x25\x40\x6e\xd1\x99\x67\xcc\x87\x6f\xdb\xf7\x4f\x8a\x8b\x45\xd7\x66\xa6\x72\x41\xac\x94\xc6\x4e\xb6\x09\xe2\x7b\xaa\x3d\xc7\x53\x53\x44\xc9\xd8\xd0\x43\x2e\x45\xb2\x41\x9d\x1c\x59\x9d\x0d\x73\xfd\xe0\xa0\xca\x73\xa1\x7a\x7f\x04\xae\xc8\xdc\x7a\xb6\xb7\x27\x07\x20\xe9\x91\x63\x08\x68\xde\xd6\xc1\xfa\xf5\x52\x17\x68\x6a\x67\xfd\xfa\x61\xed\xa9\x7b\x7d\x7f\xc8\x9d\xbe\x6a\x06\x3b\xb4\xeb\x82\x17\x70\x3d\x9f\x0f\x68\x90\xfb\xda\xbb\x3e\x62\x28\xc7\x1c\xa5\x7e\xbb\x1c\xb4\xf1\xfe\x2f\xb5\xf4\xfb\xaf\x55\xc0\x28\xc3\x25\x9e\x4a\x64\xb0\xc1\x7d\x1a\x3a\x27\x47\x00\x54\x61\x50\x02\x0c\x0f\xfe\x85\xe3\x14\xcf\x17\x30\x05\x75\xdc\xf3\x8f\x3f\xa6\x8a\x1c\xad\xf7\x7f\x95\x7b\x37\xf5\x0a\x83\x47\xc6\x38\xb5\x34\x2b\x28\xb2\xc4\xad\xd5\xd0\xdf\x2d\x99\x97\xd0\x7f\xab\x68\x16\xdb\xeb\xe9\xfc\xbf\x2c\x96\x8a\xc2\x30\xa3\x3a\x73\x9e\x28\xf0\x02\x5e\xbd\x7e\xf5\xe3\x1f\x7b\xbe\x35\x96\xad\x43\xa5\xbf\xaf\xf3\x66\xfe\x66\x7e\xa2\x52\x30\x57\xff\x8b\x74\xfe\x6e\x36\x77\xe2\x6d\x5f\x1d\x66\xde\x64\xb6\xb2\x7e\xb6\x52\xfd\xba\x6f\x2a\x1f\xf5\xd7\xe1\xab\x6f\x83\x50\x4a\xab\x4d\x7d\x4e\x06\xf2\xaf\xb5\x72\x36\xb7\x68\xe0\x97\x43\x14\x21\xcb\x7f\x91\xe6\xaa\x43\xad\xad\x72\x8b\x91\xf2\x87\x34\x88\x3c\x19\x4c\xf3\xd4\x9f\x33\xa8\x95\x43\xe9\xf4\x32\x16\x65\x7e\xcb\xf4\xa8\xfd\x11\xfa\x80\x3c\x1d\x40\xdd\x3d\xdf\x3e\xbf\x5b\xde\x5c\x4c\x52\xff\x9a\xc0\x24\xcb\x1c\xad\x99\x22\x1b\x0c\x21\x3d\x5b\x1f\x51\xd7\x01\xd3\x83\xa0\x4c\x60\xf2\xc3\x45\xcf\xd0\xcb\xe6\x84\xb9\x3a\x1c\xcf\xa7\xe9\x6f\x72\x39\x32\xfb\x67\x6c\x86\xcb\x4e\xf9\x34\x96\xa5\x34\xad\x72\xf6\x9f\x08\x0a\x3c\xee\xba\x39\x7c\xb1\xda\x03\x95\x96\xd3\xa4\x12\x4f\xfe\x41\xd6\xa7\x69\x36\x86\xb4\x39\xec\xf0\x3c\x20\xc4\x3a\x6d\x1d\x8a\xdb\xe7\xe3\xee\x22\x34\xc1\x85\x9d\xe2\x14\xac\x37\xf8\x15\xe6\x97\xa0\xbc\xe9\x4f\xd2\x03\x9a\xd0\x8a\x1d\xa3\xdd\xc4\x6f\x88\x0e\xb5\xf7\x62\x8f\x6a\x16\x14\x89\x5c\x9a\xf4\xad\xcd\x2f\xc2\xd9\x28\x51\x8c\x75\x55\x51\x6c\xf6\x9d\x95\xf8\x7a\xd0\xbf\xd8\x15\x56\x17\x62\x96\xd5\x69\x89\x48\x0e\x74\xfb\xc8\x08\x6e\xb8\x9d\x24\x1f\x76\x08\xb1\xa0\xda\x19\x28\xd5\xa6\x25\x41\x56\x1a\xa6\x76\x2f\x69\x89\x25\x8f\x97\xd3\x11\xdc\x83\x6c\x7c\xb9\xac\x09\x4c\x69\x6b\xdc\x59\x2e\xa8\x66\xc8\xb2\x44\xb7\xec\x22\x10\x30\x65\x86\xf0\x3c\x26\x67\x04\xd7\xa3\x6a\x78\x93\xcd\xe1\x13\xfc\x5f\x3f\x69\x2e\x27\x70\x73\x33\xd8\xaf\xb3\xf9\x04\x3e\xc3\xb7\x6f\xf0\xf7\x71\x47\xfc\x04\x19\xfe\xc6\xb4\x99\xb5\x54\x7d\x69\x48\xf9\x52\xaa\xb0\xc1\x30\x81\xcf\x03\x1c\x2e\x70\xdc\x84\x53\x36\x1a\x12\x5f\x92\xb7\x3d\x63\x64\x87\xa3\x60\x24\xa6\x04\x6a\x4b\xd6\x08\x8b\x92\x45\xb2\x14\x95\x95\x64\xe5\x09\x1a\x53\x83\x63\x39\xa2\xcb\xaf\xa0\x89\xac\xae\x43\x40\xcf\x6e\x9f\x36\x57\xb9\x6c\x47\x61\x73\xa2\x7c\x21\xd5\x13\x17\xb3\xd9\xda\x72\x51\xaf\xa6\x9a\xca\xd9\x8b\xcd\x78\x66\x63\xac\x31\xce\xfe\xf4\xfa\xd5\x8f\xa3\x80\x1e\x8a\xf9\xf7\x37\x17\x93\x26\x82\x93\x11\xc5\xd3\xde\xd3\x55\xff\xe4\xfa\xbb\x27\xaf\xfa\x27\xa3\x7a\xce\xed\xe0\x51\x16\xbb\x17\xfb\x28\xfc\xf0\xaf\xc6\xb2\x4f\xbf\xfb\xfc\xef\x6e\x39\x7c\x24\x19\xfa\x59\x64\xaa\xa0\x90\x9e\x65\x23\x04\xfc\xb5\xb6\x01\xcd\x15\x28\x58\x3e\xbc\xfb\x78\xff\xfc\x1e\x2a\x57\x47\x88\x54\x62\xfa\x06\x11\x29\xe5\x5c\xaa\x93\xf3\xe3\xa6\xe9\x11\x0d\x9a\xf4\x2d\xb0\x0e\x4a\xcb\x47\x1f\xc4\xa2\x66\x43\x3b\xdf\x7c\xf2\x48\xf8\x0e\x7c\x35\x9f\x01\x69\xdb\x7e\x27\xd2\x4f\x18\x2c\x99\x25\x6a\xf2\x26\x2e\xe0\xf5\x61\xcc\x34\xf3\xe4\x64\x80\x8e\x07\xc9\x71\x2b\xfe\x29\x29\xdc\x39\x65\x07\xcb\x86\x96\x17\x8f\x23\xdd\xed\x51\xf6\x63\xfb\x59\x98\x6e\xca\x4e\xbe\x0b\x4f\x6f\xed\x7f\x04\xaa\xf4\x0d\xf6\x5e\xca\x6e\xb0\x9e\x3e\xa3\x32\x3f\x07\xcb\xf8\xc1\x6b\x3c\x8c\xa2\x80\x91\xea\xa0\xfb\xa2\xc2\x39\x46\x1e\xac\x22\x91\x29\xa4\x85\xe0\xfa\x9d\x3d\xfb\x4f\x00\x00\x00\xff\xff\x35\xe0\x44\xba\x60\x0f\x00\x00") - -func testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/cockroachdb/statefulset.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/cockroachdb/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetEtcdPdbYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\xcc\x3d\x0e\xc2\x30\x0c\xc5\xf1\x3d\xa7\x78\x17\x40\xa8\x8c\xd9\x40\x8c\x0c\x4c\xec\x4e\x6c\x81\x45\x3e\xac\xc6\xad\xc4\xed\x51\x55\x06\xd6\xf7\xd7\xfb\x91\xe9\x43\xe6\xa1\xbd\x45\x58\x2f\x9a\x3f\xc7\x75\x4a\xe2\x34\x85\xb7\x36\x8e\xb8\x77\xbe\xea\x98\x17\x73\xed\xed\xb2\xf0\x53\x3c\x54\x71\x62\x72\x8a\x01\x68\x54\x25\x42\x3c\xf3\xc1\x38\x05\xa0\x50\x92\x32\xb6\x04\x18\xa7\xbd\x85\x61\x92\xb7\xad\x6a\x3b\xaf\xa4\x85\x52\x91\x88\x53\x00\x86\x14\xc9\xde\xe7\xfd\x51\xc9\xf3\xeb\xf6\x47\x00\x64\xf6\x43\xbe\x01\x00\x00\xff\xff\x37\xe7\x80\xf7\xad\x00\x00\x00") - -func testE2eTestingManifestsStatefulsetEtcdPdbYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetEtcdPdbYaml, - "test/e2e/testing-manifests/statefulset/etcd/pdb.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetEtcdPdbYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetEtcdPdbYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/etcd/pdb.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetEtcdServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8e\xcd\x4a\xc0\x30\x10\x84\xef\x79\x8a\x79\x81\x82\x3f\x07\x35\x37\x8f\x5e\x8a\x28\x78\xdf\x26\x03\x06\xd3\x24\xec\x6e\x0b\xbe\xbd\xb4\x08\x62\x6f\xc3\x37\x1f\xc3\xc8\x28\x1f\x54\x2b\xbd\x45\xec\xb7\xe1\xab\xb4\x1c\xf1\x4e\xdd\x4b\x62\x58\xe9\x92\xc5\x25\x06\xa0\xc9\xca\x08\x7a\xca\x01\xa8\xb2\xb0\xda\x81\x01\x19\xe3\x97\xdb\x60\x3a\xd8\xe8\xea\x67\x39\x9d\x31\xe2\xee\xfe\xf1\xe6\x74\xff\x46\x26\xa3\xee\xd4\x7f\xd2\xc3\xd3\x55\x4a\xb5\xb0\x79\x00\x52\xdd\xcc\xa9\x2f\xaf\x11\x73\x6f\x0c\x80\xb1\x32\x79\xd7\xeb\x09\x60\x6c\x4b\x2d\xf6\x39\x77\x7f\xa3\xe4\xef\xe7\x9c\x95\x66\xb4\x08\xd7\x8d\xe1\x27\x00\x00\xff\xff\x50\x82\x1d\x25\xf2\x00\x00\x00") - -func testE2eTestingManifestsStatefulsetEtcdServiceYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetEtcdServiceYaml, - "test/e2e/testing-manifests/statefulset/etcd/service.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetEtcdServiceYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetEtcdServiceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/etcd/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetEtcdStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x58\x6d\x6f\xdb\xb6\x13\x7f\x9f\x4f\x71\x7f\xc7\x48\xed\xff\x2a\x3f\x24\x2b\x92\xaa\x48\x8b\x2c\x31\xd6\x00\x49\x6a\xc4\x5e\x0b\xac\xdb\x0c\x46\x3a\xc7\x5c\x28\x52\x25\x29\x27\x81\xeb\xef\x3e\x50\x92\x65\x3d\x50\x8e\x0b\x24\x7b\x35\xbf\xd8\x1a\xea\xf8\xbb\xe3\x3d\xfc\xee\x48\x12\xd2\xcf\x28\x15\x15\xdc\x05\x12\x86\xaa\x3b\xef\xef\xdc\x51\xee\xbb\x30\xd2\x44\xe3\x34\x62\x23\xd4\x3b\x01\x6a\xe2\x13\x4d\xdc\x1d\x00\x4e\x02\x74\x01\xb5\xe7\xef\x00\x30\x72\x83\x4c\x99\x65\x30\xdb\xd3\x75\x15\xa2\x67\xd6\x14\xca\x39\xf5\xf0\x2a\xbf\x43\x62\xc8\xa8\x47\x94\x0b\x07\xb1\x04\x43\x4f\x0b\x99\x20\x04\x44\x7b\xb3\x8b\x1c\x64\x1e\x14\x40\x63\x10\x32\xa2\x31\x15\xce\xd9\x64\x7e\x05\xbb\xcc\x8f\x15\x80\x8a\x50\x00\x2b\x1b\xcd\xcf\x13\x5c\x13\xca\x51\x66\xd2\x4e\x15\x0e\x80\x06\xe4\x16\x5d\xb8\x3b\x52\x9d\x5b\x4f\x76\xa8\xe8\x9a\xcf\xee\x41\x67\xbf\xb3\xff\x73\x51\x6a\x18\x31\x36\x14\x8c\x7a\x8f\x2e\x9c\xb0\x7b\xf2\xa8\xb2\xef\xa1\x90\x3a\x67\x95\xb3\xd6\x3e\x14\x52\xbb\xb0\x7f\x70\xd4\xcb\xbe\xae\x8e\x15\x22\xca\x4d\x5b\x0e\xdf\x56\xb6\x78\x8c\x22\xd7\xd9\xb2\x44\x25\x22\xe9\x61\x4e\xb5\x59\xfc\x16\xa1\xd2\x85\x35\x00\x2f\x8c\x5c\xe8\xf7\x7a\x41\x61\x35\xc0\x40\xc8\x47\x17\xde\xf4\xf7\x2f\x69\xf6\x05\xf9\x3c\x7f\x96\x44\xf5\xf9\xd5\xf9\xf8\xfc\xe4\x62\x72\x7a\xf1\xdb\x68\x3c\xb8\x9e\x8c\xce\x7f\x1f\xe4\xb0\xe6\x84\x45\xe8\x42\xe3\xa0\x51\xd9\x39\x1a\x8c\x27\x57\x27\x97\x16\xe9\x42\x24\xe6\x82\x45\x01\x5e\x8a\x88\x17\x5d\x99\x80\x98\xac\xf0\xa9\xcc\x61\x04\x46\x72\x48\xf4\xcc\x85\xee\x9c\xc8\xae\x8c\x78\xb7\x00\xc8\xe8\x14\xbd\x47\x8f\x61\xde\x13\xa1\xc4\x91\x16\x61\xd1\x39\xf8\xb0\xce\x9b\xcc\x61\x22\x08\x08\xf7\xcb\xcb\xc6\xa2\x46\xf7\x86\xf2\xae\x9a\x35\x6c\xdf\x1c\xf4\x6c\xeb\xdf\x2b\x6b\x00\x83\xe1\xe8\xb8\x51\x15\x06\x98\x0a\x09\x14\x28\x87\x66\x4b\xe1\x37\xe8\x41\xb3\xd5\x6a\x2e\x6c\x11\x58\x82\x03\xfd\x76\xbb\xfd\x0e\x7c\x61\x01\xca\xb4\x34\x17\x83\xe1\x68\x19\xff\xd7\xfd\xe9\xf5\x72\xa6\x75\xe8\x76\xbb\xcd\xc5\x2a\x36\x4b\xa7\xb9\xa0\xcb\x4e\x6e\xc1\x35\x09\x68\x33\xce\x17\x1c\x77\x2c\xeb\x1f\x3f\x8d\xc6\x66\xe7\x71\xb3\x35\x13\x4a\x9b\xb0\xb5\x6d\x72\x01\x06\x37\x28\x27\x33\xa2\x66\xad\x36\x2c\x6a\xac\x36\x91\xf4\x34\x4b\xa5\x81\x51\xa5\xe1\x3b\xdc\x4a\x0c\x21\x33\x7e\xa5\xb1\x6c\xf7\x51\x0f\xbe\x83\x17\x69\x70\xfc\x57\xee\x2b\x70\xa6\xfd\xf5\xdf\x5f\xe3\xbf\x2d\x4a\x97\x36\x5b\xd1\x9b\x09\x68\x5c\x63\x20\xe6\x94\xdf\x42\x4e\x25\x4c\xa5\x08\x62\x2b\xc1\x63\x91\xd2\x28\x1b\x36\x80\xc1\xf8\xf4\xec\x74\x7c\x31\x19\x5c\x9d\x0d\x3f\x9d\x5f\x8d\x8f\x93\x40\x94\x8f\x27\x8d\x06\x84\x66\x2b\xe7\x9c\xb6\x05\x8e\x4e\xe1\x2b\x34\x3f\x80\x13\x67\xc5\x9f\xef\x40\xcf\x90\xd7\x78\x70\x17\xae\x13\x54\x9c\xa3\x7c\xd4\x33\x73\x00\xa1\x67\x28\xef\xa9\x42\xb3\x71\x65\x38\xdc\x53\xc6\x80\x0b\x60\x82\xdf\xa2\x04\xe5\x11\x86\x4e\x14\xd6\xe0\xca\x00\x1c\x39\x2d\xd6\x5c\xf7\xff\xb6\x2c\x5e\x33\x8a\xa5\x98\xec\x65\x54\x2d\xa0\x72\xe9\x3c\x9d\x66\xbb\xa0\xb4\x90\xb8\xf2\x2d\xf5\x81\x72\x2d\x60\xf8\xf9\x34\x2e\x2c\xd3\x6d\xe4\xda\xf1\x21\x23\x1e\x06\x79\x56\x4d\x0c\x66\xa6\x89\x4d\x12\x31\x6b\x9e\xde\xcf\x28\x43\xf8\x9f\x35\x53\xf7\xde\x77\x7d\x9c\x77\x79\xc4\x98\xa9\x4c\x50\x0c\x31\x84\xfe\xbb\xa4\x78\xca\x48\x2f\x9b\xeb\xf0\xbe\x14\xab\x34\xc7\xa8\x5f\x35\xe4\x81\x6a\xe8\x15\x96\x4b\x65\x81\xa1\xb2\x3a\xa3\x86\xca\x9e\x91\xc8\x9e\x97\xc6\xec\x71\x30\xd5\x9e\xa8\xd8\xe4\x83\xa7\x08\xec\x5f\xa4\xae\x65\x39\xf3\x25\x3a\x7f\x0b\xca\x4d\xad\x93\xa9\xc9\xf3\x29\xa1\x2c\x92\xf8\xa1\x20\x17\xd3\x88\x83\xa5\xbc\xf0\x71\x4a\x22\xa6\x3b\x31\xa9\xd5\x71\xcb\x8a\x11\x33\x35\xb1\x74\x72\xd4\xaa\x9b\xb3\x54\x3b\x6e\xb6\x3c\xa2\xeb\x12\xd1\xd2\x27\xb2\xa3\xa4\x18\xd5\x8c\xab\x30\x6b\x0b\x43\xd5\x2e\x7b\x3f\x0a\x7d\xa2\x11\x9a\x8b\x4c\xd9\x72\x9b\x28\x58\x4a\x03\xbd\xe4\xac\x8e\x63\x38\xa7\xd0\x0b\xfe\xb0\x66\xac\xe3\x98\xd0\x23\x77\xcc\xa0\xe7\x44\x92\xa9\xad\xe2\xff\x04\x58\x32\x02\x6e\x09\x77\xf8\xf6\x75\x2a\xd3\xdf\x3f\xec\xf4\x3a\xbd\x4e\x3f\x5e\xad\x55\x42\xfc\x39\x4a\x4d\x15\xfe\xa8\x9e\x5a\x44\x33\xb8\x39\x3e\x95\x1b\x92\xad\xb0\x73\x4a\xcb\x39\x6d\x44\x1c\xa3\xed\xfc\xac\xf0\x25\x59\x3a\x5e\x5b\xe5\xbe\x71\x9b\x8b\xdd\xcc\xc6\x4a\x71\x10\xdf\x8f\x0b\x03\x38\xde\xaf\xf2\x43\x0b\xc3\x7a\x4a\x9b\x0f\xab\x7e\xd8\x22\x4a\x45\x41\x2c\xca\x18\x50\x4e\x35\x25\x0c\x42\xe1\x2b\x20\x12\x81\xcc\x09\x65\xe4\x86\x61\xbb\x5a\x54\x8d\xc4\x2f\xe7\x67\xcb\x06\x38\xb7\x26\x4b\xec\x64\x57\x5b\x5e\x0f\xe6\x2a\x51\x97\xdc\xb6\x32\x49\xcf\x41\x98\x44\xe2\x3f\x9a\x33\xa2\xff\xa1\x22\x77\x39\xb8\xfc\x65\x70\x3d\xf9\x78\x32\xfa\x78\xfc\xc4\x94\x91\x90\x03\x37\x47\xc9\xed\x5a\x36\x36\x8e\x1b\xbb\xf1\x40\x91\xda\x62\x70\x13\xaf\x2a\xb8\x89\x74\xdc\x05\x94\x08\x10\x24\x12\x25\x78\x52\x46\x86\x98\xb0\xda\x82\xd2\x48\xa9\x18\x2f\x1d\xfa\x0d\x20\x70\xa1\xe1\x06\xc1\x93\x48\x34\xfa\xaf\xe1\x1e\xc1\x23\x7c\x35\x39\xad\xb5\xd7\x21\x72\x1f\x24\x6a\x49\x71\x8e\x71\xfc\x8d\x91\x56\xd9\x9a\xd1\xac\xe0\x8c\x6a\xa3\xa3\xd5\xd8\x24\x54\x79\x92\x24\xdd\x3a\xe5\xaa\x2c\x59\xd2\x48\x7c\xbf\xc0\x2e\xdb\x35\x8d\xb8\xbf\x34\xfe\x32\x99\x33\x69\x54\x7a\x3e\xc7\xfb\x74\x96\x99\x20\x9f\xab\xaa\xb1\xd9\x64\xc9\xf1\x89\xc9\x32\x39\xd6\xe0\x81\x9a\x9a\xb1\x5d\x10\x92\x11\xb1\x3c\x21\x96\x2d\xb0\x42\x9b\xf9\xa3\x3a\x9c\xdb\x9c\x5b\xed\x26\x4f\x29\x48\xae\xca\x3f\xea\x97\xe2\x20\x08\x7b\x96\x30\xff\xd7\x19\x5e\xac\x33\xd4\xee\x4d\x49\x39\x67\xd5\xf3\xb8\x72\x85\xbb\x6a\x05\xcd\x45\x5c\x50\x25\x12\xaf\x8f\x6b\x69\xbf\xa3\x74\x32\x7d\xd8\x50\x26\xa3\xf1\xc9\x78\xb0\xdc\xd8\xfd\x9e\x69\x80\x4e\xee\x2a\x5a\x46\x58\x3b\x5f\x27\x65\xfd\x85\xc4\x65\x1d\xeb\xdd\x34\x56\x9b\xbe\xe9\x19\x4a\x8f\x42\x3b\x05\x84\x06\xc5\xf9\x02\x7d\x70\x3c\xe8\x6f\xc6\x7a\x0f\xd9\x6d\x09\xf6\xf6\xe0\x46\x22\xb9\xb3\x82\xa6\xd7\xa8\x6a\x6d\x57\xc6\xf9\xea\x23\xc5\x70\x30\xb8\xae\xdc\x51\x9e\xc9\xbd\x29\x76\x73\x11\xff\x63\x99\xfe\xdf\xdc\x50\xca\xe7\x3e\xde\xee\xca\x72\xd4\x6b\x3c\x71\x9c\xcd\xbc\xb4\x0b\x75\xa3\xf3\x0f\xb2\xd5\x4b\x54\xda\xb3\xb1\xdf\x8b\x33\xdf\xf3\xb2\x5e\x95\x1d\xb4\xb8\xc3\x64\x1c\xca\x96\xfa\xdb\x6c\x84\x55\xa6\x6d\xa5\x25\xe1\x20\x33\x80\xd8\xa4\xb7\x9b\xcf\x93\xc7\xd9\x53\x46\x68\x30\x4e\x5f\xec\xe3\x47\x5a\xa7\xe6\xc9\x3e\xff\x5c\x9b\x7f\x95\x27\x9e\x87\x4a\x5d\x0a\x1f\x0b\x6f\xbc\x8d\x6b\x24\xfe\x17\x49\x35\x7e\xe2\x1e\xae\x72\xdf\xf2\xbc\x6d\x7b\xdc\xde\x85\x28\x54\x5a\x22\x09\x40\xa2\x27\x82\x00\xb9\x8f\x3e\x04\xe4\x01\xa8\x82\xc3\x5e\xef\x32\x27\xac\xb4\x90\xf1\x8b\x7f\xff\x57\xba\xf3\x4f\x00\x00\x00\xff\xff\x47\x5f\x27\x5d\x29\x19\x00\x00") - -func testE2eTestingManifestsStatefulsetEtcdStatefulsetYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetEtcdStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/etcd/statefulset.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetEtcdStatefulsetYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetEtcdStatefulsetYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/etcd/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetEtcdTesterYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8f\xc1\x4e\xc3\x30\x10\x44\xef\xf9\x8a\xfd\x81\xb4\xa5\x5c\x2a\xdf\x90\x2a\x71\xe1\x10\x09\x89\xfb\xd6\x19\x1a\xab\x1b\xdb\xf2\x6e\x8b\xc2\xd7\xa3\x94\xd2\xba\xc0\x1c\x3d\x7e\xb3\x33\x9c\xc3\x1b\x8a\x86\x14\x1d\x71\xce\xba\x3c\x3d\x34\x87\x10\x7b\x47\x5b\x64\x49\xd3\x88\x68\xcd\x08\xe3\x9e\x8d\x5d\x43\x14\x79\x84\x23\x98\xef\x5b\x83\x5a\xab\x28\x27\x94\x46\x33\xfc\x6c\x17\x64\x09\x9e\xd5\xd1\x63\x43\xa4\x10\x78\x4b\x65\x76\x88\x46\x36\x3f\xbc\xf0\x0e\xa2\xdf\x0f\x34\x9f\x74\x54\xe7\x10\x19\xc6\x2c\x6c\xb8\x30\xd5\xe9\x59\x72\x87\xff\x1b\x40\xf4\x53\x66\x96\x4f\xd1\x38\x44\x94\x2b\xd4\x5e\x36\xfc\xa6\x66\x85\x91\xf7\x70\x74\xd8\xe8\x62\xef\xcb\x22\xa4\xe5\x79\xa9\x1a\x1b\xde\x8f\xa2\xb0\x16\x6b\x9c\x97\xbb\xd5\x62\x75\xcf\x75\x47\x91\x2e\x49\xf0\x93\xa3\x27\xf9\xe0\x49\xaf\x7e\x4e\xc5\xaa\xd6\xed\xad\x56\x97\x8a\x39\xda\xac\x36\xb7\xb0\x02\xee\x43\x84\x6a\x57\xd2\x0e\x37\x8a\x68\x30\xcb\xcf\xb0\xfa\x89\x28\xb3\x0d\x8e\x96\x03\x58\x6c\xf8\xbc\xb7\xfe\x86\x13\x85\x18\x2c\xb0\x6c\x21\x3c\xbd\xc2\xa7\xd8\xab\xa3\x75\xf5\x21\xa3\x84\xd4\x57\x56\xf3\x15\x00\x00\xff\xff\x5f\xc9\x70\x5d\x26\x02\x00\x00") - -func testE2eTestingManifestsStatefulsetEtcdTesterYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetEtcdTesterYaml, - "test/e2e/testing-manifests/statefulset/etcd/tester.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetEtcdTesterYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetEtcdTesterYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/etcd/tester.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetMysqlGaleraServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8e\x31\x4b\xc4\x40\x10\x85\xfb\xfd\x15\x0f\xae\x13\x0c\xca\x81\xc5\x76\x07\x36\x36\x41\x3c\xb0\x9f\xdb\x7d\x7a\xc1\x4d\x76\x9d\x99\x04\xee\xdf\x4b\x12\xbb\xeb\x66\xe6\x7d\xf3\xf1\x0e\x38\xe1\x4a\xc9\x85\x66\x30\xea\x32\x24\xc2\x2b\x92\x52\x9c\x78\xed\xcf\x50\xa6\xaa\xd9\x82\xb4\xe1\x93\x6a\x43\x9d\x22\x96\xe7\xf0\x33\x4c\x39\xe2\xbc\xbf\x84\x91\x2e\x59\x5c\x62\x00\x26\x19\x19\xf1\x2d\x85\x2a\x01\x28\x72\x61\xb1\x35\x00\xa4\xb5\x88\xf1\x66\xbf\x25\x58\x63\x5a\x8f\xad\xaa\x6f\xe9\xe3\x36\x46\x1c\x8f\x4f\x2f\x1b\xbc\x7b\x76\x1a\x38\xe0\xa1\x5b\x9d\xa2\x5d\xe6\x97\xcc\xc5\x3b\x5b\x52\x97\xca\x6c\x4e\xed\x4a\x4d\xb2\x62\xff\xfb\xdb\x7b\x44\x5f\x27\x06\xc0\x58\x98\xbc\xea\x5d\x03\xa0\xcd\x97\x32\xd8\xb5\xaf\xfe\x41\xc9\xb7\x53\xce\x4a\x33\x5a\x84\xeb\xcc\xf0\x17\x00\x00\xff\xff\xf3\xa7\x43\xb4\x1d\x01\x00\x00") - -func testE2eTestingManifestsStatefulsetMysqlGaleraServiceYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetMysqlGaleraServiceYaml, - "test/e2e/testing-manifests/statefulset/mysql-galera/service.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetMysqlGaleraServiceYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetMysqlGaleraServiceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-galera/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\x51\x6f\xe3\x36\x0c\x7e\xcf\xaf\x20\xbc\x87\x7b\x52\xdc\x5c\x7b\xb7\x83\x86\x3c\x14\xed\x6d\x18\xb0\x5e\x83\x6b\xb1\x3d\x0c\xc3\xc0\xc8\x74\xac\x8b\x2c\xf9\x44\x39\x5d\x36\xec\xbf\x0f\x76\x1c\x5b\xb6\xdb\x62\x7b\x9b\x9f\x0c\x92\x1f\xf9\xf1\x13\x29\x61\xa5\x7f\x26\xcf\xda\x59\x09\x58\x55\x9c\x1e\x56\x8b\xbd\xb6\x99\x84\x87\x80\x81\xf2\xda\x3c\x50\x58\x94\x14\x30\xc3\x80\x72\x01\x60\xb1\x24\x09\xe5\x91\xbf\x9a\x05\x57\xa4\x1a\x1b\x93\x3f\x68\x45\x9f\x5a\x57\xb2\x43\x43\x1e\x93\x05\x80\xa7\xca\x68\x85\x2c\xe1\xb2\x8d\x32\xa4\x82\xf3\x0d\x02\xa0\xc4\xa0\x8a\x9f\x70\x4b\x86\x4f\x06\x68\x08\x9c\x33\x03\x04\x2a\x2b\x83\x81\xba\xe8\x88\x41\xf3\x99\x11\x70\x02\x05\x38\x13\x6b\x3e\x6d\x75\xb8\x71\x36\xa0\xb6\xe4\x7b\x88\xe8\x1a\xd1\x96\x03\x1a\xd3\x27\xd2\x25\xee\x48\xc2\xfe\x03\x2f\x77\xca\x2f\xb5\x4b\x4f\xed\x88\x2e\x50\x5e\x2c\x57\xe3\xe0\x4d\x6d\xcc\xc6\x19\xad\x8e\x12\xae\xcd\x13\x1e\x79\x60\xe5\x77\x11\x47\x01\x89\x10\x4f\xce\xef\x45\xa6\xfd\x3a\x3d\xff\x25\x7d\xc0\xc1\x99\xba\xa4\x3b\x57\xdb\x30\x82\x9d\x98\x36\xf1\x99\xf6\xbd\x1d\xa0\x6c\x22\x37\x18\x0a\x09\xc9\x33\xe9\xce\x40\xe5\x6c\xae\x77\x2f\xe1\x28\xa8\xb4\x15\x2e\x99\x28\xb3\x75\x2e\x70\xf0\x58\x4d\xb5\xc9\x68\xab\xd1\xca\x2f\xc4\xac\xa9\x77\x2a\x57\x96\x68\xb3\x51\xbb\x3d\xa9\xb4\x22\xf2\x22\xd7\x36\xa3\x88\xe0\x54\x1e\xe1\xac\xe0\x80\x3e\xac\x23\xe4\xd9\xb6\xe4\x22\x19\x49\xd9\x0d\xdd\x7a\x18\xb7\xd3\x47\xf6\x30\x17\x6f\x73\x7f\xfb\xfb\xa7\xeb\xbb\x8f\x0f\x9b\xeb\x9b\x8f\x91\x14\x07\x34\x35\x7d\xef\x5d\x29\x23\x23\x40\xae\xc9\x64\x9f\x29\x1f\x5b\x9b\x31\x1b\xd6\xe5\xb0\x9a\x38\x5b\xd0\x49\xd6\xf3\xb8\x2e\x9b\xea\x5c\xa1\xa2\xff\xd9\x21\xab\x17\x17\x62\x58\x22\x78\x76\x1d\x5a\xbf\x38\x89\x2e\xe9\xed\xd0\x58\xe5\xfc\xb8\xa3\xbe\xc6\xc6\xf9\x20\xe1\xf2\xf2\xe2\x7d\xc4\xef\xb9\x6a\x33\xcc\xd5\xd5\xd5\xd5\x0c\xc3\x1c\x5e\x41\xbc\x7b\xff\xed\x0c\xd1\xdd\x43\x41\x3b\xfb\x2a\xf2\xc3\x0c\xa9\xa3\x5a\xb3\x71\x15\x19\xe5\x58\x9b\xc0\x22\xd7\x86\xd6\x83\xca\x69\x79\xec\x14\x5a\x2a\x9b\x8f\x20\x35\x93\x5f\x7b\xe7\x86\xb4\x9e\x30\xd3\x96\x98\x37\xde\x6d\x29\x9e\xb8\x6f\xe0\xf1\xfe\xf6\x5e\xc2\x8f\x39\x64\x4e\xed\xc9\x03\xfd\x41\x0a\x34\xc3\xb6\xde\xed\x8e\xf0\xa5\xe6\x00\x35\xd3\xfc\x78\x0a\x42\x13\x8a\x3f\xe5\x6a\x79\x11\xe5\x6b\xd0\xe3\x89\x9e\x2d\xed\x89\x26\x17\x13\x83\x50\x13\x43\xd2\xd6\x01\x51\x43\xd3\x0b\x08\x82\x37\x5c\xb8\x27\x68\x86\x7e\x8b\x4c\xfc\xdd\x9b\x24\x82\x34\x77\xb0\x46\x73\x4b\x06\x8f\x0f\xa4\x9c\xcd\x58\xc2\xea\x5d\x14\x11\x74\x49\xae\x0e\xbd\x33\xf6\x71\xad\x14\x31\x3f\x16\x9e\xb8\x70\x26\x93\xf0\xf6\x5f\xae\x53\x43\xe7\xc5\x75\x4a\x0f\xe8\x53\xa3\xb7\xe9\x7f\x5a\xa6\xe1\x94\x17\x31\x83\xd9\x1e\x4d\x72\x50\x59\x85\xe3\xad\xf6\x12\xfe\xfa\x7b\x12\x39\xdd\xf9\x49\xe8\x29\xff\x8d\x41\x5d\x3e\x76\x6f\x62\x5b\x4c\xcc\x1e\xc5\x79\xcf\xf1\x3b\x88\xad\x88\x77\x2e\x23\x96\xf0\x2b\x24\x9f\x09\xb3\x5f\xbc\x0e\x74\x6f\x15\x25\xf0\x5b\x17\xe6\x89\x5d\xed\x15\x45\x6a\x7a\xfa\x5a\x13\xc7\xfa\x02\x70\x70\xbe\xbd\x1a\x56\x3f\xe8\xc5\x3f\x01\x00\x00\xff\xff\x3c\xf4\xc8\x50\x46\x08\x00\x00") - -func testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/mysql-galera/statefulset.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-galera/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xca\xb1\xae\xc2\x30\x0c\x85\xe1\xdd\x4f\x71\x5e\xa0\x57\xba\x6b\x56\x66\x56\x16\xc4\xe0\x12\xb7\x8a\x70\x9c\x10\x87\x4a\x95\x78\x78\x44\xa4\x8e\x8c\xe7\xfc\x1f\xd7\x74\x91\xe6\xa9\x58\xc0\xf6\x4f\x8f\x64\x31\xe0\x54\x6c\x49\xeb\x99\x2b\x65\xe9\x1c\xb9\x73\x20\xc0\x38\x4b\x40\xde\xfd\xa9\x04\x28\xcf\xa2\xfe\xfd\x01\xae\xf5\x08\x07\xce\xec\x5d\xda\xdf\xdd\x96\x80\xf7\x40\xd7\x01\xe2\x6d\x0c\x2d\xeb\x34\x27\x23\xc0\x95\x37\xf9\xe9\xfc\x55\xa5\x4d\x4d\x38\x4e\xc5\x74\xa7\x4f\x00\x00\x00\xff\xff\xd1\x8c\x7f\x5b\xaf\x00\x00\x00") - -func testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYaml, - "test/e2e/testing-manifests/statefulset/mysql-upgrade/configmap.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-upgrade/configmap.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x8e\xb1\x8a\x02\x31\x14\x45\xfb\xf7\x15\xf7\x07\x02\xbb\x0c\x6c\x91\x72\x3b\x41\x44\x10\xec\x9f\xc9\x2d\x82\x99\x24\x26\x71\x60\xfe\x5e\x46\xb1\x18\xed\xc4\xf6\x1e\xee\xe1\x68\x09\x47\xd6\x16\x72\xb2\x98\x7e\xe5\x1c\x92\xb7\x38\xb0\x4e\xc1\x51\x46\x76\xf5\xda\xd5\x0a\x90\x74\xa4\xc5\x38\xb7\x4b\x14\x20\xea\x89\xb1\x2d\x3b\xa0\xa5\x3c\x41\x2b\x74\xcb\x58\x72\xed\x77\x6a\x5e\x7e\x0f\x64\x31\x0c\x3f\x7f\x02\xb8\x78\x6d\x9d\x75\xb3\xb7\xd8\xe5\x44\x01\x1a\x23\x5d\xcf\xf5\x4d\x6d\x8c\x91\x4f\x62\x4d\xa5\xfa\xef\x15\xaf\xfb\x56\x2a\xa0\xcf\x85\x16\xdb\xac\xfe\x5f\xa3\x26\xc7\x2a\xb7\x00\x00\x00\xff\xff\x8b\xeb\xb7\xc6\x60\x01\x00\x00") - -func testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYaml, - "test/e2e/testing-manifests/statefulset/mysql-upgrade/service.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-upgrade/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x58\xef\x6e\xdb\x36\x10\xff\xee\xa7\x38\x18\x41\x63\xaf\xa5\x6d\xb5\xc8\x8a\xa9\x75\x07\xd7\x71\x93\x02\x76\x9c\xd9\x5e\x83\xc2\xf3\x5c\x5a\x3a\xdb\x44\x29\x52\x21\x29\x23\x59\xd3\x3d\xfb\x40\xc9\x7f\x28\x47\x4e\x8a\x0d\x1d\xb0\xe9\x83\x20\x1d\xef\x8e\xbf\x3b\x1e\xef\x8e\xa4\x31\xfb\x80\x4a\x33\x29\x7c\xa0\x71\xac\xeb\x2b\xaf\xf4\x99\x89\xd0\x87\xa1\xa1\x06\xe7\x09\x1f\xa2\x29\x45\x68\x68\x48\x0d\xf5\x4b\x00\x82\x46\xe8\x43\x74\xab\xaf\x79\x49\xc7\x18\x58\x9a\x46\xb5\x62\x01\x5e\x38\x43\x00\x0a\x63\xce\x02\xaa\x7d\x78\x91\xb2\x70\x0c\x8c\x54\x96\x1d\x20\xa2\x26\x58\x76\xe9\x0c\xb9\xce\x08\x60\x67\xdf\xc9\x1a\x8c\x62\x4e\x0d\xae\xb9\x9d\xe9\xed\xc3\x73\x82\x7b\xa2\x00\x1b\x54\xf6\x61\x82\x99\xb6\x14\x86\x32\x81\x6a\x2b\x42\xd6\x56\xd8\x51\xb2\x13\x4c\x05\x22\xba\xd8\x18\xe1\x9f\xd4\x5e\x6e\x07\x02\x19\x45\x54\x84\xbb\x59\x09\xcc\xa8\x5e\x3a\xbf\x65\x12\x94\x9d\xdf\xbb\xed\xb7\xb5\xde\x00\xc1\x1b\x87\x32\x1e\xc3\xa7\xa5\xd4\xc6\x02\xf9\x04\xcd\x3f\x81\x54\xc6\x0d\xf2\xd3\xe4\x69\xf5\x08\x26\x13\xb8\xbb\x03\xbc\x61\x06\x3c\x47\x44\xaa\x90\x09\xca\x9b\x47\x5f\xde\xb6\x86\xe7\xd3\x41\xa7\xd7\x1a\xb5\xcf\xc7\xde\xe4\xab\xc3\x84\xc1\x52\xc2\x38\x85\x1f\x4e\xe0\x0d\xd4\x23\x61\xea\x81\x14\xf3\x5a\x58\xb7\xcb\x84\x8a\xb0\xb0\x16\x88\xf9\xbe\xcc\x76\xb0\x79\x54\xa9\x78\x8d\x06\x3c\x85\xa3\xf5\x8c\xd5\x2a\xbc\xf9\x36\x4d\x6c\x6e\x0d\xdb\xc8\x01\xc1\x6b\x68\xc0\x64\xf2\x0a\xcc\x12\x85\xc3\x07\x10\xc4\x3b\x85\x6c\x41\x22\x1a\xd7\x23\xaa\x0d\x2a\xab\x31\x37\x97\x0b\x94\x6b\x7c\x4c\x8b\xe6\x74\x85\x0f\x29\x99\xb3\xed\xcf\x4a\xf2\x24\xc2\x9e\x4c\x84\xd1\xee\xc2\x66\xd1\x61\x45\x1d\xb9\xc8\xb2\x5d\x52\xb3\xf4\x5d\xcd\x85\x52\x19\x94\x47\x64\x73\x4c\x5b\x69\x2e\x05\x16\x87\xe4\x22\x50\x35\x26\xeb\x0b\x29\x17\x1c\x89\xa6\x51\xcc\x51\xd7\x6f\x8c\xa2\x33\x1a\x7c\x4e\x62\xdf\xab\x35\xbe\x63\xb4\x92\x10\xea\x2b\xaa\xea\x9c\xcd\xea\x29\xbe\xec\x6d\x83\xf5\xc9\x93\x2c\x58\x1b\xff\x42\x7c\x17\x85\x57\x21\x00\x11\x50\x03\x84\x28\x0c\x56\x44\x0a\x7e\x9b\x6d\x69\x72\x54\xa9\x6c\xe4\x89\x57\xad\xd6\x32\x23\x5e\xbc\x68\xbc\x84\x3b\xb8\x99\x69\xa3\x90\x46\x40\x6e\x80\xb4\xf7\xec\x75\x74\xef\x9c\x0e\x84\xc4\x0a\x63\xaa\x10\x08\x31\x54\x2d\xd0\x90\x90\xa9\xe6\x01\xd1\x87\x03\xce\xe6\xb8\x03\x41\x73\x08\x89\x4e\x66\x19\x47\x7e\xe0\x1b\x42\x18\x4d\xb0\x5e\xc7\x5c\x20\x07\x07\x93\xe5\xc3\x79\xb2\xe6\x9d\x6c\xc7\x50\xac\xee\x1b\xd7\xfb\x38\xfc\xa5\x3b\x6d\x75\xbb\xfd\xab\x69\xa7\x77\x39\xfa\x38\xbd\x6c\x0d\x87\x57\xfd\xc1\xa9\x03\x70\x45\x79\x82\x3e\x94\xbd\x5d\x68\xc6\x52\x15\xf9\x6a\xdf\x11\x5b\xdc\x97\x52\x19\xdf\x2e\xe8\x8f\xff\x21\xaf\xdb\x6a\xa9\x65\xa2\x02\x74\x00\x5a\xe2\x75\x82\xda\xe4\x68\x36\xe9\x25\x7e\x6e\xe3\xd8\x0a\x19\x49\x75\xeb\x83\x77\xb6\x4b\x6e\x9c\xad\x50\xa0\xd6\x97\x4a\xce\xd0\xd5\x80\x37\xbb\xfa\xb8\x71\x5e\x96\x2d\x60\x5c\x4e\xc1\xd1\x30\x62\xa2\xfc\x0c\xca\x31\x13\x8b\xf2\xc4\x4d\xf0\x82\x19\x46\xf9\x29\x72\x7a\x3b\xc4\x40\x8a\xd0\xd6\x77\x77\xdf\x19\x16\xa1\x4c\xcc\x76\xf0\xc4\x31\x91\x86\xec\x6f\x22\xb2\x60\xc8\xd2\xbe\xbd\xe7\x2f\x6b\x8d\x5a\xa3\xe6\xa5\x24\xb4\xef\x61\xa7\xdb\x69\x8f\xc0\x7b\x1c\xe9\xc9\x03\x40\xbd\xbd\x78\xdf\x6d\xf2\x7f\x94\x89\x0f\xc4\x6f\x81\xf6\xa2\x20\xfe\x6e\xfd\x47\xb0\x9f\xce\x4b\xf7\xca\x38\x99\x3b\x28\xa7\x69\x5d\x9d\x32\x31\x97\xc5\x05\x3d\x5a\x1d\xe0\x0e\x96\x54\x2c\x70\x9a\x55\xf7\xa9\x91\x35\x7d\xcd\x6b\x2c\x2f\xac\xa2\xbd\xd9\x66\x4c\x70\xb9\x48\x15\xe4\xea\x7f\x11\x32\x87\xb7\x18\x9a\xad\x45\xb6\x1a\x14\xcb\xa4\xd5\xe9\xf7\x4a\xed\x87\x9f\xab\xe3\xb1\xaf\x63\x1a\xa0\x3f\x99\x3c\x4d\x09\x07\x6b\x55\x0a\xf9\x51\xbc\xeb\xd6\xaa\xdc\x3e\x6f\x5d\x9c\x75\xa0\xd7\x1a\x8e\x3a\x03\x18\xf5\xd7\x5f\xd3\x6e\xff\x6c\xfa\xee\x7d\xb7\xd3\x3c\xbe\x5f\xf3\x8e\x9f\xfd\x96\xd3\x94\x3d\x8e\xe0\x65\x7f\xb8\x5f\x2a\x9f\x4f\xbe\x96\xe1\xcd\x37\x78\x7c\xce\x0a\x97\xfb\x80\x60\xb1\x57\x33\xd3\xae\x28\x33\x4c\x2c\x60\x2e\x55\x96\x0d\x43\x30\x12\x66\x98\xee\xf6\x5b\xa8\xd0\x20\xc0\x38\xe5\x08\xa4\x10\x18\x18\x26\x85\xae\x96\x73\x9a\x12\x61\x18\xcf\xa4\x81\x2c\x61\xbb\xc3\x81\xa0\xb3\xb9\x5f\x41\x28\x41\x73\xc4\x18\x3c\xfb\x2d\xb0\x54\x80\xe7\x7d\xb6\xed\xd9\x1f\x76\xca\xf5\x11\xc4\xce\x09\x73\x25\xa3\xac\xbd\x82\x58\x6a\x66\x69\xe5\xfd\x00\x3e\x64\x7f\x21\x5d\x2a\xb6\xc8\x2b\xb8\x6f\xc0\xeb\xd7\x9d\xfe\x3b\x87\xe9\xa8\xf2\xfa\xa0\xae\xea\xb3\x52\xc1\x4a\x9f\xf7\x87\xa3\xe6\x71\xd6\xbb\x34\xb2\x6e\xe5\xb8\x90\xf1\xd7\x61\x67\xd0\x3c\x56\x52\x9a\xe2\xf1\x4d\xb5\x6d\x1e\x17\x8f\xb7\xfb\x17\x17\x9d\xf6\x68\x3a\xe8\x8c\x06\x1f\x9b\x5e\xe3\x95\xc3\x34\x1c\xb5\x06\x23\x18\x76\x5b\x1f\x3a\x2e\x39\x6f\x5b\x3e\xa6\x6c\x4a\xdf\xf4\x60\x9c\x69\x83\x02\x08\xf9\x8c\x18\x13\x19\xa7\xdf\x1a\x45\x98\x35\x66\x84\x44\xf4\x86\xd8\xf0\xd0\x4d\x2f\x6b\xc5\x48\x00\xf9\xe8\x2f\xe7\x5a\xae\xed\x47\x9a\x66\x48\xba\xf3\x09\xc9\x7a\xb7\xe6\xae\x89\x23\xb6\x01\x6d\x3a\xe1\x44\x12\x8d\xaa\x69\x7d\x54\xfe\x7f\x37\x07\x8d\x46\x54\xdc\x1f\x34\x1a\xbd\x4d\x87\x90\x19\x7e\xaf\xcd\xcb\xe1\xc3\x28\x36\xb7\xa7\x4c\xf9\xf0\xe5\x6b\x01\xdf\xde\x39\x27\x23\xf5\x68\xec\x42\xca\xb7\x6b\xd9\xa4\x6d\x4e\x59\x34\x5a\x9f\xf1\x53\x04\xe4\xde\x21\x7f\xcf\xff\xee\xa1\xde\xe6\x14\xad\x7b\x32\x44\x6d\x1b\x84\x01\xd2\xf0\x4a\x31\x83\x7d\x11\xe0\xb6\x07\xd0\x46\x2a\xba\xb0\x53\x69\x9d\x5d\x4c\x84\x38\xa7\x09\x37\xa5\x83\x3e\x2d\xf2\xe8\x5a\x8d\x75\xdd\x19\x2b\x11\x42\x4a\xee\x95\x49\x2c\x39\x0b\x6e\xeb\x2b\x6f\x86\x86\x6e\x6e\x4e\x2e\x65\x78\xca\xb4\x4a\x62\x9b\x63\xde\x26\xe1\x22\x7f\x83\xe2\x38\x84\xc4\xe1\xac\xe4\x5e\x67\xc4\xe1\x6c\xef\x6e\x25\x62\xa2\xb5\xa2\x8c\xd3\x19\x47\x1f\x9e\x97\xf2\x17\x29\xf7\xef\x51\x9c\xbb\x90\xbf\x02\x00\x00\xff\xff\x48\xaa\x29\x27\xdc\x11\x00\x00") - -func testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/mysql-upgrade/statefulset.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-upgrade/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x52\xbb\x6e\x1b\x31\x10\xec\xef\x2b\xf6\x07\xa8\x87\xd3\x08\xec\x6c\x08\x48\xe3\x42\x80\x81\xf4\x7b\xe4\x40\xb7\x30\x8f\x64\xc8\xd5\x05\x97\xaf\x0f\xce\xb6\x64\x9e\xad\x2a\x5b\x72\x38\xcb\x19\xce\x70\x96\x5f\x28\x55\x52\xb4\xc4\x39\xd7\xed\xb4\xef\x5e\x25\x7a\x4b\x47\xe4\x90\xe6\x11\x51\xbb\x11\xca\x9e\x95\x6d\x47\x14\x79\x84\xa5\x71\xae\xbf\x83\x51\x54\x35\x15\x65\x42\xe9\x6a\x86\x5b\xf0\x82\x1c\xc4\x71\xb5\xf4\xa3\x23\xaa\x08\x70\x9a\xca\x82\x10\x8d\xac\x6e\x78\xe6\x1e\xa1\xbe\x1f\xd0\xf2\xa6\xa5\x76\x0f\x91\x62\xcc\x81\x15\x1f\x9c\xe6\xed\x65\xc2\x8a\x7e\x77\x01\xd1\x55\xcc\x32\x2e\x45\x65\x89\x28\x37\x92\xf9\x30\xf1\x95\xb5\x8c\x8c\x7c\x86\xa5\xd7\x43\xdd\x9c\x5d\xd9\x48\xda\xbe\x5b\xc5\x03\xde\xec\xda\xdd\x66\xbf\xbe\x7c\xba\x84\x70\x4a\x41\xdc\x6c\xe9\x31\xfc\xe1\xb9\xde\xf0\x9c\x8a\x36\x52\xcd\xa7\x96\x53\x2a\x6a\xe9\xb0\x3b\xec\x6e\x68\x01\x7b\x89\xa8\xf5\x54\x52\x8f\x4f\x16\xd1\xa0\x9a\x7f\x42\xdb\x23\xa2\xcc\x3a\x58\xda\x0e\xe0\xa0\xc3\xdf\x35\xf4\x7d\x39\x91\x44\x51\xe1\x70\x44\xe0\xf9\x05\x2e\x45\x5f\x2d\x3d\x34\x17\x32\x8a\x24\xdf\x40\xc6\x98\xae\xad\x47\x7e\x33\xb9\x9d\xf6\x3d\x94\xaf\x2d\x39\x25\x7f\x94\x5a\x2e\x59\x25\xc5\xa7\x8b\x3f\xe3\x5e\x5d\x96\x9f\x43\x31\xd9\xf7\xdd\x3a\xc1\xec\xfb\x75\x0e\xd7\xe4\x46\x89\x8f\x13\x4b\xe0\x3e\xc0\xd2\xfe\xbf\xaa\xf4\xd5\xc0\xad\xda\x2f\x28\x93\x38\xac\x84\xb6\xaa\xee\x74\xea\x7b\x63\xae\x4a\x9b\x90\xcd\xfa\xeb\xd7\x8a\xef\x35\x7d\xce\xb0\xf4\x9c\xd8\x3f\x71\xe0\xe8\x50\xba\x7f\x01\x00\x00\xff\xff\xb1\x05\xcf\x25\x90\x03\x00\x00") - -func testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYaml, - "test/e2e/testing-manifests/statefulset/mysql-upgrade/tester.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/mysql-upgrade/tester.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetNginxServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8c\x41\x0a\x02\x31\x10\x04\xef\xf3\x8a\xfe\x80\xa0\x37\x99\x1f\x78\x11\x41\xf0\x3e\x9b\x6d\x24\x98\x9d\x84\x24\xae\x3e\x5f\x36\xe2\xc5\x5b\x53\xd5\x94\x95\x78\x63\x6d\x31\xbb\x62\x3d\xc8\x23\xfa\xac\xb8\xb2\xae\x31\x50\x16\x76\x9b\xad\x9b\x0a\xe0\xb6\x50\xe1\xf7\xe8\x6f\x01\x92\x4d\x4c\x6d\xe3\x80\x95\xf2\x13\xad\x30\x6c\xb0\xe4\xda\x87\xdd\x8d\xa9\x38\xee\xc7\xf5\x1b\x79\x71\x12\x20\xa4\x67\xeb\xac\xa7\x8b\xe2\x9c\x9d\x02\x34\x26\x86\x9e\xeb\x7f\xf6\x13\x00\x00\xff\xff\x5f\xaa\x8f\x5a\xa4\x00\x00\x00") - -func testE2eTestingManifestsStatefulsetNginxServiceYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetNginxServiceYaml, - "test/e2e/testing-manifests/statefulset/nginx/service.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetNginxServiceYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetNginxServiceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/nginx/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetNginxStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xcd\x8e\xd3\x40\x10\x84\xef\xf3\x14\xad\xdc\x1d\x13\x10\x12\x9a\x2b\x07\x2e\x2c\xac\x58\x04\x07\xc4\xa1\x33\x2e\xe2\xd1\xce\x1f\xd3\xed\x84\xc7\x47\xe3\xb5\xb3\xde\x4d\x1f\x7b\xbe\xaa\x6a\x97\xb9\xf8\x1f\xa8\xe2\x73\xb2\xc4\xa5\x48\x7f\x3e\x1c\xa1\xfc\xd6\x3c\xfa\x34\x58\x7a\x50\x56\xfc\x99\xc2\x03\xd4\x44\x28\x0f\xac\x6c\x0d\x51\xe2\x08\x4b\x17\x1c\x8d\x14\xb8\xb6\x11\xd4\xb3\x77\xf8\x32\x3f\xec\xd2\xc9\xa7\x7f\x3b\x43\x54\x51\x82\x77\x2c\x96\xde\xcd\x50\x80\xd3\x5c\x9b\x80\x28\xb2\xba\xf1\x33\x1f\x11\xe4\x69\x41\xed\x04\x4b\xb3\xd8\x10\x29\x62\x09\xac\x58\xe8\x4d\x7c\x9b\xf0\x42\xf8\x4a\x4a\xb4\xde\xd5\xc6\xe5\xa4\xec\x13\xea\x15\xef\x96\x2f\x78\xe6\xdb\xf8\xc8\xa7\x75\x69\x0f\xfb\xc3\xfb\x8e\x43\xf1\x09\x57\xa0\xe4\xaa\x9b\xc8\xee\xd9\xf9\x3e\x57\xb5\xf4\xe1\xcd\xf5\x6d\xdb\xd1\xba\x39\xe7\x30\x45\xdc\xe5\x29\xbd\x74\x59\xc8\xcb\x65\xa3\x8e\x8d\xba\x67\x1d\x2d\xf5\x93\xd4\x5e\x46\xae\xe8\xe7\xd3\xfa\x51\x63\x30\xab\xdd\xc7\xc0\x3e\x7e\x5f\xaa\x9a\x6d\xbb\x9b\xae\x5e\x07\x70\x4a\x59\x59\x7d\x4e\x9b\x3b\x9e\xec\xf6\xed\xf7\xef\x1f\xa7\x23\x6a\x82\x42\xf6\x3e\xf7\xa2\xb9\xf2\x09\x9d\x0b\x2c\xb2\xf4\xd3\x89\xbb\xe9\x99\x9d\x83\xc8\x5d\x1e\x20\x96\x7e\xd1\xee\x1b\x78\xf8\x59\xbd\xe2\x6b\x72\xd8\xd1\xef\x05\xab\x90\x3c\x55\x87\x4d\x76\xc5\xdf\x09\xb2\x6d\x85\x68\x49\xb5\x74\xf8\xe4\xcd\xff\x00\x00\x00\xff\xff\x27\x2f\xbe\x99\xa8\x02\x00\x00") - -func testE2eTestingManifestsStatefulsetNginxStatefulsetYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetNginxStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/nginx/statefulset.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetNginxStatefulsetYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetNginxStatefulsetYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/nginx/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetRedisServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8d\x41\x4b\x03\x31\x10\x85\xef\xf9\x15\x0f\x7a\x13\x0c\x88\xa0\x98\x5b\xc1\x8b\x97\x45\x2c\x78\x9f\x26\x4f\x1a\x4c\x37\x61\x66\x76\xc1\x7f\x2f\xdd\xea\xa9\xb7\x99\xf7\xcd\x37\x6f\x87\x3d\x4e\x94\xd2\x68\x06\xa3\xae\x35\x13\xde\x91\x95\xe2\xc4\xeb\x74\x80\x32\x77\x2d\x16\x64\xd4\x4f\xaa\xd5\x3e\x27\xac\x0f\xe1\xbb\xce\x25\xe1\x70\x55\xc2\x99\x2e\x45\x5c\x52\x00\x66\x39\x33\x41\x59\xaa\x05\xa0\xc9\x91\xcd\x2e\x39\x20\x63\xfc\x03\x1b\xcc\x97\x70\x74\xf5\x8d\xde\x6f\x63\xc2\xd3\xe3\xf3\xcb\x76\x7c\x7d\x33\x48\x0d\xc0\x0e\x77\x71\x13\x63\xe1\x97\x2c\xcd\xa3\xad\x39\xe6\xb6\x98\x53\x63\xeb\x59\x5a\x00\xfe\xf6\xb7\xf7\x84\xa9\xcf\x0c\x80\xb1\x31\x7b\xd7\x9b\x7e\x60\x2c\xc7\x56\xed\x34\x75\xff\xa0\x94\x9f\x7d\x29\x4a\x33\x5a\x82\xeb\xc2\xf0\x1b\x00\x00\xff\xff\x74\x30\x5a\xc0\x1a\x01\x00\x00") - -func testE2eTestingManifestsStatefulsetRedisServiceYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetRedisServiceYaml, - "test/e2e/testing-manifests/statefulset/redis/service.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetRedisServiceYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetRedisServiceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/redis/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetRedisStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\x4d\x6f\xdb\x38\x10\xbd\xeb\x57\x0c\x84\x3d\xec\x1e\x64\xc1\x09\xb2\x8b\x25\xe0\x43\x90\x64\xf7\xd2\x24\x46\x5c\xb4\x87\xa2\x28\x68\x6a\x6c\xb3\xa1\x48\x96\x33\x72\x6a\x14\xfd\xef\x05\x25\x5b\xa6\x64\xb8\xcd\xb1\x3c\x09\x33\xf3\xde\x7c\xf0\x8d\x28\xbd\x7e\x87\x81\xb4\xb3\x02\xa4\xf7\x54\x6e\xa7\xd9\xb3\xb6\x95\x80\x05\x4b\xc6\x55\x63\x16\xc8\x59\x8d\x2c\x2b\xc9\x52\x64\x00\x56\xd6\x28\x20\x54\x19\x79\x54\xd1\x40\x18\xb6\x5a\xe1\x43\x6b\xcf\x03\x56\x9a\xf2\x0c\x20\xa0\x37\x5a\x49\x12\x70\xd9\x06\x19\x54\xec\x42\x04\x00\xd4\x92\xd5\xe6\x8d\x5c\xa2\xa1\xce\x00\x31\xb9\x80\x16\x9c\x01\x30\xd6\xde\x48\xc6\x7d\x74\x92\x3d\x1e\x33\x00\x8e\xa0\x00\x87\xba\xe2\xd1\x56\xf3\x8d\xb3\x2c\xb5\xc5\xd0\x43\x8a\x7d\x13\xda\x12\x4b\x63\x7a\x22\x5d\xcb\x35\x0a\x58\xab\x30\xd1\xae\x7c\x6e\x96\x18\x2c\x32\x52\x81\x17\x58\x30\x12\x17\x6d\x04\x95\x1e\x99\xca\x36\x63\xb1\xe7\xc0\x20\xa6\x93\x8b\x21\xd3\xbc\x31\x66\xee\x8c\x56\x3b\x01\xd7\xe6\x45\xee\xe8\x58\x72\x58\x27\x0d\x14\x90\x17\x07\xa2\x42\x5b\x76\xb3\xd2\x79\xce\x87\xfe\x17\x17\x9e\x8b\x4a\x87\x59\x79\xf8\x3a\x06\x6c\x9d\x69\x6a\xbc\x77\x8d\xe5\x01\x6d\xd7\xa6\xf3\xdc\xdb\x00\xea\x18\x35\x97\xbc\x11\x90\x8f\xd3\x74\xf1\x91\xbf\xd2\xe1\x1c\x66\x9c\xfe\x00\x5b\x3a\xc7\xc4\x41\xfa\xf1\x3c\x2b\x5c\x6a\x69\xc5\x67\x24\xd2\xd8\x3b\x95\xab\x6b\x69\xab\xc1\x14\x7a\xee\xd2\x23\x86\x62\xa5\x6d\x85\x49\x9b\xe3\xa9\x15\xce\x16\xc4\x32\xf0\x2c\x41\x1e\x6c\x13\xda\x0c\x27\xb8\xd7\xe9\xac\x57\x68\x77\xd0\x6e\x4f\x47\x36\x7f\xbc\xfd\xf4\x70\x7d\x7f\xb7\x98\x5f\xdf\xdc\x25\x83\xd8\x4a\xd3\xe0\x7f\xc1\xd5\x22\x31\x02\xac\x34\x9a\xea\x09\x57\x43\x6b\x54\xe6\x71\xbb\xb6\xd3\x91\xb3\x05\x75\x43\x3d\x28\x7c\x12\xb3\x93\x97\x0a\x7f\x8f\xab\x55\x67\x57\xe7\xb8\x6e\xbf\xbc\x68\xef\xc2\xb0\xf4\x9e\x75\xee\x02\x0b\xf8\xfb\xf2\x9f\x7f\x93\x82\x3a\xfe\x78\xff\x3f\x93\x4a\x6c\xaf\xdb\xc0\xfd\x1e\xc6\xdb\x4d\x20\x63\xa9\x8c\xe3\x27\xca\xd9\x55\xef\x0f\x28\x2b\x6d\x91\x68\x1e\xdc\x12\xd3\x5b\xc4\xaf\xc7\x9f\xc9\x99\x62\xba\x04\xb4\x19\x19\x0a\x35\x32\xe4\x27\x35\x2b\xa3\xa1\xd8\xc0\x1f\x7f\x6e\x1c\x71\xec\xfb\x2f\xf0\xda\xae\xf3\x04\x18\x7f\x60\x5a\x9a\x5b\x34\x72\xb7\x40\xe5\x6c\x45\x02\xa6\x57\x49\x04\xeb\x1a\x5d\xc3\xbd\xf3\xea\x95\xd2\x89\x7a\x3b\x2b\x85\x32\x7a\x5f\xaf\xb6\xf2\xe8\xe9\x92\x9e\xe8\x25\x85\x62\xed\x79\x77\xab\x83\x80\x6f\xdf\x47\x61\x63\x7d\x8e\x42\x3b\xf2\x1b\x23\x75\xfd\x76\xff\x44\xb4\x99\x8a\x93\x37\xe2\xb4\xc7\xf4\x59\x90\x4a\x21\xd1\xbd\xab\x90\x04\x7c\x80\xfc\x09\x65\xf5\x3e\x68\xc6\x47\xab\x30\x87\x8f\xd9\x41\x16\xe4\x9a\xa0\x30\x99\x5e\xc0\x2f\x0d\x52\x3a\x4f\x00\x62\x17\x5a\xfd\x4f\xff\xd7\xd9\x8f\x00\x00\x00\xff\xff\x4e\x22\x9b\xab\x51\x07\x00\x00") - -func testE2eTestingManifestsStatefulsetRedisStatefulsetYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetRedisStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/redis/statefulset.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetRedisStatefulsetYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetRedisStatefulsetYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/redis/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetZookeeperServiceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8e\xb1\x6a\x03\x31\x10\x44\x7b\x7d\xc5\x80\xbb\x80\x0f\x92\x34\x87\x3a\x43\x9a\x34\x47\x88\x21\xfd\x5a\x9a\x60\x71\xf2\x49\xec\xea\x0e\xe2\xaf\x0f\x96\x53\xc4\xdd\xee\x7b\xbb\xc3\xec\x70\xc0\x99\x12\x33\xcd\x60\xd4\x2d\x05\xa2\x15\x04\xa5\x34\xe2\x6d\x3a\x42\x19\x8a\x46\x73\x52\xd3\x17\xd5\x52\x59\x3c\xb6\x67\x37\xa7\x25\x7a\x1c\xef\x2f\xee\xc2\x26\x51\x9a\x78\x07\x2c\x72\xa1\xc7\x75\x76\x40\x96\x13\xb3\xdd\x20\x20\xb5\x76\x6a\x95\xe1\x46\x6a\xd1\xd6\xd5\xbe\x8f\x1e\x2f\xe3\x38\xf6\xcb\x7b\x40\x25\xf5\x9f\x7d\x7d\xb4\x99\x12\xa9\x7b\x66\x86\x96\xca\xe2\x80\x1d\x9e\x86\xeb\x3c\x44\x7e\xcb\x9a\xdb\x60\x5b\x18\x42\x5e\xad\x51\x87\x5c\x82\x64\x07\xfc\xed\xef\x1f\x1e\x53\x59\xe8\x00\xeb\x01\x45\x1f\x2b\x02\x75\x3d\xe5\x64\xe7\xa9\xb4\x4f\x4a\xfc\x39\xc4\xa8\x34\xa3\x79\x34\x5d\xe9\x7e\x03\x00\x00\xff\xff\xf5\xf5\x6e\xd6\x37\x01\x00\x00") - -func testE2eTestingManifestsStatefulsetZookeeperServiceYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetZookeeperServiceYaml, - "test/e2e/testing-manifests/statefulset/zookeeper/service.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetZookeeperServiceYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetZookeeperServiceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/zookeeper/service.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStatefulsetZookeeperStatefulsetYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x55\x4d\x8f\xdb\x36\x10\xbd\xeb\x57\x0c\xd4\x33\x2d\x38\x8b\x00\x0b\x02\x7b\x58\xec\xa6\xbd\x74\x13\x23\x2e\xda\x43\x51\x14\xb4\x34\xb6\xb9\xa6\x38\xec\x70\xe4\x74\x5d\xf4\xbf\x17\x92\x25\x99\xb2\x63\x23\x45\xab\x93\x30\xf3\xde\x7c\xf1\x0d\x69\x82\xfd\x19\x39\x5a\xf2\x1a\x4c\x08\xb1\xd8\xcf\xb3\x9d\xf5\x95\x86\xa5\x18\xc1\x75\xe3\x96\x28\x59\x8d\x62\x2a\x23\x46\x67\x00\xde\xd4\xa8\xe1\x40\x94\xc5\x80\x65\x6b\x89\xc8\x7b\x5b\xe2\xc7\xce\x91\x1f\x76\x79\x06\xc0\x18\x9c\x2d\x4d\xd4\x70\xd7\x21\x1c\x96\x42\xdc\xa2\x01\x6a\x23\xe5\xf6\x47\xb3\x42\x17\x8f\x06\x68\x53\x6b\x38\xec\x32\x00\xc1\x3a\x38\x23\xd8\x43\x93\xc4\xed\xe7\x26\xac\x94\x07\x30\x94\xd3\x7e\xd6\x5b\x79\x22\x2f\xc6\x7a\xe4\x11\xaf\xfa\xe2\xad\x8f\x62\x9c\x1b\xa3\xd8\xda\x6c\x50\xc3\xa6\xe4\x99\xa5\x62\xd7\xac\x90\x3d\x0a\x46\x85\xef\x50\x09\x46\x51\x1d\x22\x16\x01\x25\x16\x07\xa2\x1d\x62\x40\x56\x7d\x1c\x64\x3d\x9f\xdd\x4d\xa3\x2d\x1a\xe7\x16\xe4\x6c\xf9\xa6\xe1\xd1\x7d\x31\x6f\xf1\x54\x33\x6f\x92\x0e\x14\xe4\x6a\x08\xa4\xac\x17\x7a\x28\x28\x48\x3e\xf5\x7f\x21\xde\xa9\xca\xf2\x43\x31\xfc\x9d\x00\x7b\x72\x4d\x8d\x2f\xd4\x78\x99\x84\x3d\xb6\x4a\x41\x46\x1b\x40\xdd\xa2\x16\x46\xb6\x1a\xf2\x36\x4d\x91\x5f\x10\xda\x04\x95\xe5\x6b\xa4\xf3\xfc\x03\x6d\x45\x24\x51\xd8\x84\xf3\xa1\xbe\x9a\xbd\xd1\x14\xd0\xbf\x56\x3b\x75\xaf\x5e\x19\x47\x44\x49\x75\x6d\x7c\x35\x99\xc5\x98\xa0\x08\x88\xac\xd6\xd6\x57\x98\x34\x7b\x3e\x3b\x45\x5e\x45\x31\x2c\x0f\x09\x73\xb0\xcd\xe2\x76\x3a\xc7\x5e\xa8\x0f\x47\x89\x1e\x3f\xf4\xfb\xcb\xa9\x2d\x3e\x3d\xff\xfe\xf1\xf1\xe5\xc3\x72\xf1\xf8\xf4\x21\x19\xc5\xde\xb8\x06\xbf\x67\xaa\x75\x62\x04\x58\x5b\x74\xd5\x67\x5c\x4f\xad\xad\x3a\x4f\xcb\xb5\x9f\x9f\x39\x3b\xd2\x71\xac\x83\xca\x67\x6d\xf6\x18\x4c\x89\xff\xcb\xe9\xfe\xe7\xc3\x3d\x11\xdb\xea\x6e\x10\xa5\x0e\xa7\xb5\x18\xd8\xe5\xd5\xfd\xeb\x17\x36\x51\x49\x2f\x10\x3d\x15\x48\x20\x9e\x76\x3d\x86\x5c\x10\x8b\x86\x77\xf7\xf7\xf7\x49\x49\xc7\xe0\xad\x6e\xae\x53\xee\xbe\x46\x71\x68\x2a\x64\xd5\x5d\x52\x96\xfc\x2d\x81\x76\x5b\x33\xb6\x5a\xac\xac\x2f\x0e\xbb\x25\xf2\x1e\x79\x16\xb7\x57\x75\xda\xe9\x51\xad\x89\x71\xc3\xd4\xf8\x6a\x74\x31\x9a\xca\x7a\x8c\x71\xc1\xb4\xc2\x54\x40\xf8\xe7\xe9\x3a\xbb\x52\x4e\x1f\x7b\x7b\x66\x50\xe5\x99\x21\xff\x6a\xd5\x4f\xce\xce\xe2\x16\x5c\x84\xe4\x1a\x38\x5e\x9d\xd6\xb8\x67\x74\xe6\x6d\x89\x25\xf9\x2a\x6a\x98\xbf\x4f\x10\x62\x6b\xa4\x46\x46\xe7\xfb\x6f\x54\xeb\x4d\x11\x4d\x35\xf4\xed\x4a\x2f\x52\xcf\x77\xd0\xe5\x06\xd9\x22\x0c\x62\x86\xd7\x26\x0a\xac\x89\xa1\xc2\x55\xb3\xd9\x58\xbf\xf9\x77\x7b\x31\xae\x45\x96\x36\x79\x21\xea\xb4\x0e\xac\x83\xbc\x3d\x5b\xd6\xf0\xd7\xdf\xd9\xed\x54\x67\xd0\x63\xf0\x27\x67\x6c\xfd\x53\xff\x12\x76\x99\xd4\xc5\x53\x78\x39\xd3\xf4\x01\x34\x65\x89\x31\xbe\x50\x85\x51\xc3\xaf\x90\x7f\x46\x53\xfd\xc2\x56\xf0\x93\x2f\x31\x87\xdf\x7a\x18\x63\xa4\x86\x4b\x4c\x4e\x8b\xf1\x8f\x06\x63\x7a\x7e\x00\x51\x88\xbb\x3d\x9d\xff\x60\xb3\x7f\x02\x00\x00\xff\xff\x73\x38\x7a\x58\x33\x08\x00\x00") - -func testE2eTestingManifestsStatefulsetZookeeperStatefulsetYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStatefulsetZookeeperStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/zookeeper/statefulset.yaml", - ) -} - -func testE2eTestingManifestsStatefulsetZookeeperStatefulsetYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStatefulsetZookeeperStatefulsetYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/statefulset/zookeeper/statefulset.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\xcc\xb1\x6e\x84\x30\x0c\x80\xe1\xdd\x4f\x61\xa9\xb3\x41\x42\x55\x69\xd9\xbb\xb6\x52\x19\x3a\x5b\xc4\x81\x50\x1a\x47\x71\x12\x4e\xf7\xf4\x27\x9e\xe1\xb6\x5f\xff\xf0\xbd\xe0\x2c\x82\x65\x13\xfc\xfe\xfd\xfa\xfc\x99\xd1\xe9\x62\xc8\x05\xb7\x52\x92\x4d\x7d\xbf\x6a\xf7\xf7\x6e\x5d\xd0\x5e\xcf\x28\xd9\x00\x38\xa5\xac\x4d\xb2\x4d\x40\x68\xcc\x8e\xf8\x08\x40\x98\x55\x8b\x37\x20\x5c\x63\xf5\x41\x1c\x10\xee\x21\xae\xb7\xfa\x31\x5e\x69\xec\x33\x47\x01\xc2\x7f\xe3\xfa\x3a\x40\x96\x16\xe4\x7c\xde\x21\xdc\xc5\xfb\xc6\x71\xb9\xe6\xa2\x49\x76\x8d\x40\xd8\x24\xd7\xa3\x00\xa1\xe3\x16\xdc\xfd\x6d\x18\xe1\x11\x00\x00\xff\xff\x9f\x15\xc2\xee\xee\x00\x00\x00") - -func testE2eTestingManifestsStorageCsiOwnersBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiOwners, - "test/e2e/testing-manifests/storage-csi/OWNERS", - ) -} - -func testE2eTestingManifestsStorageCsiOwners() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiOwnersBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiClusterDriverRegistrarRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x92\xc1\x6a\xdc\x4c\x10\x84\xef\xf3\x14\xc5\xea\x6a\xed\x8f\x6f\x3f\xba\xd9\x3e\x04\x43\x72\xb1\x43\x20\x04\x1f\x66\x67\x5a\x56\xc7\xb3\x33\xa2\xbb\x47\xc1\x7e\xfa\x30\xab\xc5\x18\xb2\x6b\x1c\x72\x13\xdd\xa5\xd2\x57\x5d\xea\xf0\x75\x62\xc5\xf7\xab\x2f\x9f\x31\x72\x22\x84\x92\xcd\x73\x56\xf8\x94\x70\x77\x7d\x75\x83\xb2\xfb\x49\xc1\x14\x36\x79\x83\x17\x42\xa6\x40\xaa\x5e\x9e\x61\x05\x52\xb3\xeb\x10\x52\x55\x23\xe9\xa3\xf0\x42\xd2\x0b\x3d\xb2\x9a\x78\xd9\xba\xce\x75\xb8\xcd\x98\xa5\xc4\x1a\x8c\x4b\xbe\x00\xf9\x30\xe1\xe6\xfe\x16\xab\x1a\x91\xe6\x54\x9e\xf7\x94\x0d\x93\xd7\x66\xba\x23\x84\xaa\x56\xf6\xfc\x42\x71\x70\x1d\xfa\x36\xf5\x4b\xe1\xd8\x00\xc7\xc4\xc1\xf4\x02\x55\x09\xb9\xe4\x3e\xd2\xe8\x6b\x32\x64\xbf\x27\x9d\x7d\x20\xf8\x1c\x11\x79\x1c\x49\x9a\xeb\x61\xee\x3a\x00\x63\x91\xc3\x1b\xaf\xca\x08\xca\xc6\xc6\xa4\x48\xfc\x44\xb0\x89\x70\xb3\x86\xb9\x2b\x89\x9c\xf3\x33\x7f\x23\x51\x2e\x79\xc0\x72\xe9\x9e\x38\xc7\x01\xf7\x24\x0b\x07\xba\x0a\xa1\xd4\x6c\x6e\x4f\xe6\xa3\x37\x3f\x38\x1c\xbe\x35\x20\x28\xf7\xe7\x6e\xe2\x80\x0e\x42\x73\x6a\xa0\xbf\xd8\xa6\x33\x19\xda\xd3\xd1\xf0\x30\x18\x70\xd4\x38\xd7\xf7\xfd\x91\xe4\x2d\xeb\x5b\x54\xd9\xf9\xb0\xf5\xd5\xa6\x22\xfc\xe2\xdb\xdd\xb7\x4f\xff\xeb\x96\xcb\x7f\xcb\xe5\x29\xde\x33\xac\xbd\xd4\x9c\x49\x9c\xd4\x44\xda\xe4\x3d\xfc\xcc\x9f\xa4\xd4\x59\x07\xfc\xd8\xa8\x15\xf1\x8f\x74\xf4\xde\x3c\x38\x00\x10\xd2\x52\x25\xd0\x41\x11\x94\x57\x53\x3d\x6e\x17\x92\xdd\xba\x11\xf2\x46\x9b\x0b\x6c\x22\x25\x32\xda\x3c\x9c\x09\x76\xcd\x39\x72\x7e\xfc\xa7\x7c\xef\xf4\xd1\x4b\x3b\x9e\xd6\xf5\x37\x5f\x43\x9e\xac\xb9\xd1\x7f\xa8\xde\xbf\x2b\xf8\x64\xc5\x8d\xe9\x8e\xc6\x46\xf3\x67\xd1\x1f\x6d\x0d\xaf\x65\xbd\x73\x30\xf7\x3b\x00\x00\xff\xff\x23\x80\x47\x80\x03\x04\x00\x00") - -func testE2eTestingManifestsStorageCsiClusterDriverRegistrarRbacYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiClusterDriverRegistrarRbacYaml, - "test/e2e/testing-manifests/storage-csi/cluster-driver-registrar/rbac.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiClusterDriverRegistrarRbacYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiClusterDriverRegistrarRbacYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/cluster-driver-registrar/rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiControllerRoleYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x8f\xb1\x0e\xc2\x30\x0c\x44\x77\xbe\xc2\x52\x57\x5a\xef\xfd\x0c\xfe\xc0\x49\x0c\x89\x48\xe3\xc8\x76\x2b\xfa\xf7\x8c\xad\xc4\x02\x03\xeb\x9d\xee\xde\xdd\x00\x37\xee\x95\x22\x27\x08\x3b\x94\x96\xca\x56\xd2\x4a\x15\x54\x2a\x1b\xdc\x45\x81\x5f\xce\xda\xa8\x8e\xe4\x4e\x31\xb3\x5e\x0f\xa9\xab\x6c\xc5\x8a\x34\x56\xa0\x96\x0e\xc3\x1a\x75\xcb\xe2\xce\x3a\x5f\x06\x18\x21\xbb\x77\x9b\x11\x1f\xc5\xf3\x1a\xa6\x28\x0b\x3e\xd7\xc0\xda\xd8\xd9\xc6\x68\x05\x3f\x38\x18\xaa\x04\x5c\xc8\x9c\x15\x13\xf7\x2a\xfb\x29\x83\x1a\x28\x4e\x3b\x2d\xf5\xd7\xfe\xd3\xe8\x7f\x21\x4e\xf7\xbf\x45\xbc\x03\x00\x00\xff\xff\x7b\xf7\xef\xf6\x8a\x01\x00\x00") - -func testE2eTestingManifestsStorageCsiControllerRoleYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiControllerRoleYaml, - "test/e2e/testing-manifests/storage-csi/controller-role.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiControllerRoleYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiControllerRoleYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/controller-role.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiDriverRegistrarRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x54\x4d\x6f\xe3\x36\x10\xbd\xeb\x57\x0c\xe2\xab\xa5\x62\x6f\x85\x7b\xca\xe6\x50\x2c\xda\x5e\xb2\x41\x81\xa2\xd8\x03\x4d\x3e\x59\xd3\x50\x43\x81\x33\x94\x9b\xfd\xf5\x05\x69\xad\x11\x24\x6e\x8b\xa2\x27\x11\xf3\x3d\xef\xcd\xd3\x8e\x9e\x26\x56\xfa\xed\xfe\x97\x9f\x69\xe4\x08\xf2\x49\xcc\xb1\x28\xb9\x18\xe9\xf1\xe3\xfd\x03\xa5\xe3\x1f\xf0\xa6\x64\x93\x33\x72\x19\x24\xf0\x50\x75\xf9\x85\x2c\x51\x2e\x42\xf8\xd3\x90\xc5\xc5\x6e\x47\x0f\x9f\x3f\xd1\x92\xd3\xca\xca\x49\x90\x87\x6e\xd7\xed\xe8\x93\x54\x5b\x28\xde\x38\xc9\x9e\xe0\xfc\xd4\x02\x43\xe6\x15\x99\x02\x96\x98\x5e\x66\x88\xd1\xe4\xb4\x16\x3d\x82\x7c\x51\x4b\x33\x7f\x45\x38\x74\x3b\xea\xab\xd5\xad\x89\x43\x1d\x70\x8c\xec\x4d\xf7\x54\x14\x24\x49\xfa\x80\xd1\x95\x68\x24\x6e\x86\x2e\xce\x83\x9c\x04\x0a\x3c\x8e\xc8\xb5\x6a\xb3\x77\x3b\x22\x1a\x53\x6e\x19\xd7\xc8\x40\x10\x63\x63\x28\x45\x7e\x06\xd9\x04\x7a\x88\x45\x0d\xf9\x31\x45\xb4\xd6\x01\x9e\x03\xe8\x3c\xc1\x26\xe4\x16\xf2\x6a\xe4\x8c\x25\xb2\x77\x06\x6d\x9e\x6f\x58\xd4\x05\x5b\xcb\x57\x68\xec\x89\x85\xce\x13\xfb\x89\xbc\x53\x50\x84\x0b\xc8\x3a\xf1\x42\x88\x68\xe8\xd0\x5c\xd4\xea\xfe\x10\x77\x8c\x08\x3f\xb4\x1a\x56\x39\x62\x19\x63\x81\xf8\xad\x51\xe3\x46\x61\x65\xd9\x93\x02\x74\x44\x4c\xe7\xae\x73\x0b\xff\x8a\x5c\xfb\x1d\x68\xfd\xd0\x3d\xb3\x84\x03\x7d\x46\x5e\xd9\xe3\xde\xfb\x54\xc4\xba\x19\xe6\x82\x33\x77\xe8\xa8\x61\x73\x20\xaf\xdc\x4b\x0a\xe8\xd5\x75\x44\xbb\xb6\x54\xc5\xf1\xcc\x36\xfd\x0d\xc4\xf5\xb5\xe5\x37\xc3\x81\xb6\x98\xae\xeb\xfb\x7e\x6b\xfc\x1a\xca\xd7\x93\xe5\xa3\xf3\x83\x2b\x36\xa5\xcc\x5f\x5d\x5d\x7c\x78\xfe\x5e\x07\x4e\xdf\xad\x1f\x6e\x8c\x77\x39\x94\x3e\xe3\xc4\x6a\xd9\xe5\x3e\x17\x11\xe4\x2e\x97\x08\xad\x61\x3d\xb9\x85\x7f\xcc\xa9\x2c\x7a\xa0\xdf\xef\xee\xbe\x74\x44\x44\x19\x9a\x4a\xf6\x68\x36\xac\x10\xd3\xcd\xb3\x22\x1f\x9b\xf5\x04\xbb\xdb\xd3\x5d\x64\x6d\xdf\xb3\x33\x3f\xd5\x87\xcf\x70\x86\xfa\x2a\x4b\xd8\x5e\x4b\x73\x7e\x69\x00\x3d\x4d\xa0\x31\xc5\x98\xce\x2c\x27\x5a\x90\x67\xd6\xba\x9a\x36\x85\x24\x89\x2f\x24\x40\x40\xa8\x67\x23\x55\x25\xc2\x72\x6a\xa9\x6f\x97\x69\x20\xa7\x62\x8d\xd5\xbe\x7f\x2e\x47\x44\xd8\xd5\x5f\xc1\xe9\x17\x67\x53\x4b\x5e\x5c\x76\x33\xac\xdd\xd2\x80\xe1\x52\xbd\x68\x1d\xe2\x5d\x5d\x16\x35\xb8\x40\x69\x6c\xa9\x5b\xe1\xaa\xa4\xcb\x4e\xad\xa1\x57\x1e\xd6\x14\xcb\x8c\xa1\x06\x64\x81\xa1\x11\x51\xcf\x81\x43\xcb\x74\x22\xc9\x2e\x2c\xd1\x53\xfd\x0b\xcc\x29\x80\xd2\x48\x69\xc1\x65\x40\x62\xa5\x53\xaa\x53\x5c\xd4\x1b\xb0\x64\x54\x51\x7c\x2b\x10\x48\xa7\x54\x62\x20\x49\xed\xbc\x8b\x22\x90\x93\x97\x39\x65\xec\xe9\x58\xac\x56\xd8\x10\x4b\x42\x29\x06\xe4\x96\xfa\xd3\x75\xa8\x4a\x5a\x83\x78\x68\x8e\x5b\x94\xef\xde\x92\x5e\x97\xd0\xab\xeb\x2d\xeb\xef\xa9\xbd\x7d\xba\x1f\x59\x42\x65\xef\x7f\x5c\x70\x15\xd8\xfb\x2b\xae\xb2\xd0\x72\xf9\xbf\x5e\xce\xf8\xa6\x5e\xeb\xc5\xde\xd2\xe9\x7f\x53\xea\x4d\xad\xd6\x11\x1e\x31\xd6\xe6\xef\x15\xfb\x6f\xf2\xa3\x2b\x05\xff\x80\x47\xf7\x57\x00\x00\x00\xff\xff\xff\x6e\x3d\xe4\x63\x06\x00\x00") - -func testE2eTestingManifestsStorageCsiDriverRegistrarRbacYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiDriverRegistrarRbacYaml, - "test/e2e/testing-manifests/storage-csi/driver-registrar/rbac.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiDriverRegistrarRbacYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiDriverRegistrarRbacYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/driver-registrar/rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiExternalAttacherRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x54\x4d\x8b\x23\x37\x10\xbd\xeb\x57\x3c\xdc\x97\x04\xdc\x0e\x7b\x0b\xce\x69\x76\x0e\x61\x21\x81\x30\x1b\x06\x42\xc8\x41\x96\xaa\xdd\x15\xcb\x52\xa3\x2a\xd9\x99\xfd\xf5\x41\xf2\xc7\x3a\x19\x6f\xe6\x8b\xc0\x9e\xc6\x68\xaa\xeb\xd5\x7b\xf5\x5e\x75\xf8\x75\x64\xc1\x6f\x37\x3f\xff\x84\x81\x03\xc1\xa5\xa8\x96\xa3\xc0\x86\x80\xbb\xf7\x37\xb7\x48\xab\x3f\xc9\xa9\x40\x47\xab\xb0\x99\x10\xc9\x91\x88\xcd\x0f\xd0\x84\x5c\x22\xe8\x2f\xa5\x1c\x6d\x30\x1d\x6e\x3f\x7e\x80\x55\xb5\x6e\xa4\xbc\x30\x9d\xe9\xf0\x21\x62\xca\xc9\x17\xa7\x9c\xe2\x1c\x64\xdd\xd8\xaa\x7c\xe6\x1d\x65\x78\x9a\x42\x7a\xd8\x52\x54\x8c\x56\x6a\xc7\x15\xc1\x15\xd1\xb4\xe5\x4f\xe4\x97\xa6\x43\x5f\x5f\xed\x2e\xb1\xaf\xd3\x0d\x81\x9d\xca\x1c\x45\x08\x31\xc5\xde\xd3\x60\x4b\x50\x44\xbb\x25\x99\xac\x23\xd8\xe8\xe1\x79\x18\x28\xd7\xae\xed\xdd\x74\x00\x86\x94\xdb\x17\xe7\x4a\x0f\x8a\xca\xca\x24\x08\xbc\x21\xe8\x48\xb8\x0d\x45\x94\xf2\x5d\x0a\xd4\xa0\x3d\x39\xf6\x84\xfd\x48\x3a\x52\x6e\x25\x17\x23\x67\x9a\x02\x3b\xab\x24\xed\x3f\x27\x21\x2a\xc1\x06\x79\x92\x62\x0e\x8e\xd8\x8f\xec\x46\x38\x2b\x84\x40\xd6\x53\x96\x91\x27\x50\xa0\x26\x0d\xb6\x45\xb4\x92\xa7\x68\x57\x81\xfc\x0f\xad\x81\xd6\xed\x70\x1c\x42\xa1\xe8\x8e\x28\x6d\x2b\x42\x5a\xa6\x39\x84\x08\x2b\x0a\x69\x6f\x8c\x9d\xf8\x9e\xb2\x70\x8a\x4b\xec\xde\x99\x0d\x47\xbf\xc4\x47\xca\x3b\x76\x74\xe3\x5c\x2a\x51\xcd\x96\xd4\x7a\xab\x76\x69\xd0\x84\x59\xc2\x09\xf7\xa7\x29\x0d\xd0\x35\x4a\x55\xc5\x3d\xeb\xf8\x05\x81\xeb\xaf\x63\x83\xf6\xb0\xc4\xb1\xc6\x98\xbe\xef\x4d\x87\x9b\x63\xc3\x33\xa7\xca\xa8\x6e\x71\x9f\xf2\xe6\xd0\xf9\x97\x7b\x99\x23\x26\x4f\xd2\xf6\x75\x9f\x42\xd9\xd2\xe1\xbb\xaa\xac\x1c\xe7\xbf\x5c\xc7\x25\xc1\xbc\xb2\x6e\x61\x8b\x8e\x29\xf3\x27\x5b\xf5\x5b\x6c\xbe\x97\x05\xa7\xef\x76\xef\xae\xb0\x3c\x2d\xe6\x4c\xb5\xcf\x25\x46\xca\x26\x97\x40\x52\xeb\x7a\xd8\x89\x7f\xcc\xa9\x4c\xb2\xc4\xef\xb3\xd9\x1f\x06\x00\x32\x49\x2a\xd9\x51\x7b\x9b\x2a\xb8\x28\x45\xdd\xb5\x69\xe5\x58\xb4\xa3\xbc\x6a\x05\x6b\xd2\xd9\x1c\xb3\xc0\xd2\xfe\xee\xad\xba\xb1\xfe\x28\x93\xb7\x4a\xad\xfa\x19\x30\x4d\x94\x67\xb5\xbe\xd2\xd0\x09\x2f\x44\x53\xb6\x6b\x3a\x0a\x72\x0d\xc2\x09\x57\x14\x8e\x43\x7a\x35\xd2\xd3\x28\x07\x95\xec\xe7\x9d\xbe\x58\xaf\x66\xa7\x47\x46\x78\xcf\xd1\x73\x5c\xbf\xc5\x0f\x97\xae\xef\x73\x35\x97\x94\xc3\x99\x3b\x78\xe1\x6a\x78\xea\xec\x57\x43\xf3\xb2\xd8\x5c\x0d\x4e\x9d\xe1\x8e\x86\x8a\xfe\xd8\xf8\x4f\xba\x18\xe7\xd5\xfc\x87\x12\x2f\x08\x67\x3d\xb3\xbc\xc6\xd6\x4e\xf5\x6e\xb9\x92\x3f\x5f\xd2\x3a\xb6\xe9\xc0\x03\xbe\xa9\xb9\x4d\x31\x3c\x80\x87\x6f\xaf\x5e\x34\x96\xd3\x31\x3b\x2e\xf1\xf5\x31\x7e\xe3\x5d\xfa\xb2\x82\x6e\x58\x9f\x8e\xc0\xb5\x6c\xfe\x33\x36\x4d\x96\xad\x9d\x0e\x4e\xfe\xb7\x8f\xcf\xfe\x3d\x19\xda\x53\x20\xa5\x0b\x47\xcf\x31\x73\x99\x1e\x79\xfb\xff\x32\x75\x23\xf7\x66\xed\xbe\xb6\x64\x3c\x11\x89\x03\xe7\xe7\xe4\xe1\xef\x00\x00\x00\xff\xff\x18\x3d\x2c\xb8\xfc\x08\x00\x00") - -func testE2eTestingManifestsStorageCsiExternalAttacherRbacYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiExternalAttacherRbacYaml, - "test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiExternalAttacherRbacYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiExternalAttacherRbacYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiExternalProvisionerRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\xc1\x6a\x24\x37\x10\xbd\xf7\x57\x14\xd3\x97\x04\xa6\x1d\xf6\x16\x26\x27\xaf\x0f\x61\x21\x81\xe0\x0d\x81\x10\x72\xd0\x48\xaf\xdd\x15\x6b\xa4\x46\x55\xea\x89\xf7\xeb\x83\x34\x3d\xde\xf1\x6e\xdb\x1e\xdb\x09\xe4\xd6\x48\xea\x7a\xf5\x5e\x55\xbd\x6a\xe9\xd7\x81\x85\x7e\xbf\xfc\xf9\x27\xea\xd9\x83\x6c\x0c\x6a\x38\x08\x19\xef\xe9\xfa\xfd\xe5\x15\xc5\xed\x5f\xb0\x2a\xa4\x83\x51\x32\x09\x14\x60\x21\x62\xd2\x1d\x69\xa4\x94\x03\xe1\x6f\x45\x0a\xc6\x37\x2d\x5d\x7d\xfc\x40\x63\x8a\x13\x0b\xc7\x80\x74\xd1\xb4\x4d\x4b\x1f\x42\x39\x73\xd9\x2a\xc7\xb0\x26\x18\x3b\xd4\x87\x2e\xf1\x84\x44\x0e\xa3\x8f\x77\x3b\x04\xa5\xc1\x48\x09\xba\x05\xd9\x2c\x1a\x77\xfc\x09\x6e\xd3\xb4\xd4\x95\x53\x33\x45\x76\x25\xc1\xde\xb3\x55\x59\x53\x16\x50\x88\xa1\x73\xe8\x4d\xf6\x4a\xc1\xec\x20\xa3\xb1\x20\x13\x1c\x39\xee\x7b\xa4\x12\xb5\x9e\x37\x2d\x11\xf5\x31\xd5\x3f\xee\x5f\x3a\x42\x50\x56\x86\x90\xe7\x5b\x90\x0e\xa0\x2b\x9f\x45\x91\xae\xa3\x47\x85\x76\xb0\xec\x40\xfb\x01\x3a\x20\xd5\x27\x27\x29\x27\x8c\x9e\xad\x51\x48\xbd\x39\x6a\x51\x08\x56\xc8\x13\x35\xd6\xc4\x81\xf6\x03\xdb\x81\xac\x11\x90\x87\x71\x48\x32\xf0\x48\xf0\xa8\xea\xd0\x2e\x8b\x16\xfe\x08\x66\xeb\xe1\x7e\xa8\x31\xb4\xd4\x88\x43\xef\x33\x82\x9d\x81\x6a\x6d\x04\x9a\xc7\x35\x09\x40\x5b\xf8\xb8\x6f\x1a\x33\xf2\x6f\x48\x05\x6f\x43\xd3\xbb\xe6\x96\x83\xdb\xd0\x47\xa4\x89\x2d\x2e\xad\x8d\x39\x68\xb3\x83\x1a\x67\xd4\x6c\x1a\xaa\xda\x6c\xc8\x0a\x77\x27\x89\x36\x44\x6d\x25\x56\xb4\xdc\xb3\x0e\x8f\xc8\x5c\xbe\xe6\x18\xf5\x60\x43\xf3\x9b\xa6\xe9\xba\x6e\x06\x3f\x95\xf3\x34\xbb\xb4\x35\xf6\xc2\x64\x1d\x62\xe2\x4f\xa6\x90\xbf\xb8\xfd\x5e\x2e\x38\x7e\x37\xbd\x5b\x48\xf1\x28\xec\x69\x9e\x5d\xca\xa1\xa4\x9b\xb2\x87\x94\xa7\x1d\x99\x91\x7f\x4c\x31\x8f\xb2\xa1\x3f\x56\xab\x3f\x1b\x22\xa2\x04\x89\x39\x59\xd4\x33\x81\x4d\x50\x99\xaf\x26\xa4\x6d\x3d\xbe\x81\xae\xd6\xb4\xf2\x2c\x5a\xaf\xce\x88\x34\x16\x26\xa2\x08\x3a\x45\x9f\x77\x78\x32\xe6\x9a\x56\x7b\xa3\x76\x28\x1f\x36\xc1\x28\xca\x97\x83\x87\xe2\xb5\x80\xd6\x1b\xde\x9d\x8d\x9a\x47\x67\x96\xb1\x44\x63\x32\x37\x98\xe5\x5f\x14\xed\xf0\xc2\x7a\x23\x72\x26\xcf\x33\x39\x61\x42\xf8\xba\x1a\x4f\x48\x36\xd3\x58\xd3\x6a\x7c\x0c\x47\x82\x19\x65\x88\x7a\xf1\x3c\xb1\xb9\x72\xf3\x0f\x2f\xed\x8a\x57\x03\x15\x97\x5d\xe2\xfd\x1c\xde\xb3\x30\x56\x38\x44\xf7\xef\x96\xe8\x25\x01\x97\xe7\xfe\x3d\x07\xc7\xe1\xe6\x2d\xe3\xff\x85\x43\x75\xa9\xd8\x89\xe4\xc3\x6e\x3a\x8c\xfe\xa2\xd7\x95\xa4\x1f\xf3\xb8\x97\xb9\xdc\xa2\xcf\x95\x34\xae\xd1\x97\x04\xbe\x76\xbb\x73\xac\x8b\xee\xf5\x7f\x42\x92\x83\xac\x2d\xfd\xf2\xf9\xff\xfb\x45\x51\xd6\x44\xd9\x8e\xfb\x98\x6e\x0f\x2c\x10\xdc\x18\x39\x68\x59\x19\x64\x73\xfa\xbc\x03\x4b\xee\x4d\x4b\xdc\xd3\x37\x65\x43\xc6\xe0\xef\x88\xfb\x6f\x17\x17\x11\xcb\x71\x07\xcd\xf5\x7c\xbd\x81\xbf\x71\x97\x3c\x29\xa3\xed\x6f\x8e\xf6\xbf\xd4\xca\x0f\xbd\xe6\x28\x4c\xbd\xfa\xb2\x95\xef\xbd\xe6\xd8\xd3\xb3\x39\x3f\xf0\x9c\xd9\x87\x1e\x34\xfa\x7f\xd8\xe1\x95\xde\x9b\x05\xfc\x1f\x8e\xc9\xf3\xf3\x71\x60\x7e\xce\x70\xfc\x13\x00\x00\xff\xff\xe6\x61\x48\xf6\xc4\x0a\x00\x00") - -func testE2eTestingManifestsStorageCsiExternalProvisionerRbacYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiExternalProvisionerRbacYaml, - "test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiExternalProvisionerRbacYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiExternalProvisionerRbacYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiExternalResizerRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\xc1\x8a\x23\x37\x10\xbd\xf7\x57\x14\xe3\x4b\x02\xb6\x97\xbd\x85\xce\x69\xd6\x87\xb0\x90\xc0\x32\xb3\x0c\x84\x90\x83\x2c\xbd\x76\x57\x46\x96\x3a\xaa\x52\x3b\x33\x5f\x1f\x24\xb7\x9d\xd9\xb1\x77\xe2\xc4\x04\x72\xb2\x91\x4a\x55\xf5\x5e\xbd\x7a\x3d\xa3\xcf\x3d\x0b\xfd\x7c\xfb\xd3\x8f\xd4\xb1\x07\xd9\x18\xd4\x70\x10\x32\xde\xd3\xdd\x87\xdb\x15\xc5\xf5\x6f\xb0\x2a\xa4\xbd\x51\x32\x09\x14\x60\x21\x62\xd2\x13\x69\xa4\x94\x03\xe1\x0f\x45\x0a\xc6\x37\x33\x5a\xdd\x7f\xa4\x04\xe1\x67\xa4\x65\x33\x6b\x66\xf4\x31\xd0\x90\xa2\xcb\x56\x39\x86\x39\xc1\xd8\xbe\x06\xb9\xc4\x23\x12\x39\x0c\x3e\x3e\x6d\x11\x94\x7a\x23\x25\xe1\x1a\x64\xb3\x68\xdc\xf2\x33\x5c\xdb\xcc\x68\x51\x4e\xcd\x18\xd9\x95\xe6\x3a\xcf\x56\x65\x4e\x59\x40\x21\x86\x85\x43\x67\xb2\x57\x0a\x66\x0b\x19\x8c\x05\x99\xe0\xc8\x71\xd7\x21\x95\xac\xf5\xbc\x99\x11\x51\x17\x53\x7d\x71\x8c\x74\x84\xa0\xac\x0c\x21\xcf\x8f\x20\xed\x41\x2b\x9f\x45\x91\xee\xa2\x47\x2d\xed\x60\xd9\x81\x76\x3d\xb4\x47\xaa\x21\x2f\x5a\x4e\x18\x3c\x5b\xa3\x90\x7a\x73\xe0\xa1\x00\xac\x25\x27\x26\xe6\xc4\x81\x76\x3d\xdb\x9e\xac\x11\x90\x87\x71\x48\xd2\xf3\x40\xf0\xa8\xcc\xd0\x36\x8b\x16\xec\x08\x66\xed\xe1\xbe\xaf\xef\xb5\xcc\x86\x43\xe7\x33\x82\x9d\x8a\xd4\x99\x08\x34\x0f\x73\x12\x80\xd6\xf0\x71\xd7\x34\x66\xe0\x07\x24\xe1\x18\x5a\x1a\xdf\x37\x8f\x1c\x5c\x4b\xf7\x48\x23\x5b\xdc\x5a\x1b\x73\xd0\x66\x0b\x35\xce\xa8\x69\x1b\xaa\xbc\xb4\x64\x85\x17\x53\x93\x0d\xd1\xac\x02\x2a\x1c\xee\x58\xfb\xaf\xd0\x5b\xfe\x4d\xef\xeb\x41\x4b\x53\x4c\xd3\x2c\x16\x8b\x66\x46\x77\xfb\x7c\x47\x44\x05\x4f\x19\xe1\x2e\xa6\xc7\x7d\xe2\x4f\x0f\x2b\x99\xd3\xa7\x07\x99\xd3\xfd\x4a\x96\x53\xb3\x2f\xa9\x7f\x89\x26\xad\x8d\x5d\x9a\xac\x7d\x4c\xfc\x6c\x0a\x59\xcb\xc7\xef\x64\xc9\xf1\xdd\xf8\xfe\x0c\xa4\xc3\x10\x0e\xb8\x16\x29\x87\x80\xd4\xa4\xec\x21\x6d\x45\xf9\xb9\x07\x75\xd1\xfb\xb8\xe3\xb0\xa1\x72\x41\xd2\xc7\xec\x5d\x69\x37\x07\x1b\xb7\x65\xba\x70\x55\x32\x83\xcf\x9b\xb2\x0f\x55\xfe\x09\xbf\x67\x4e\x20\x81\x4d\x50\xa9\xd9\x6a\x50\x8a\x23\x97\x76\x39\x6c\x96\xf5\x74\x41\x66\xe0\x1f\x52\xcc\x83\xb4\xf4\xcb\xcd\xcd\xaf\xf5\xb4\x4a\x22\xe6\x64\x51\x4f\xa7\x34\xc7\xcb\x11\x69\x5d\x2f\x36\xd0\x9b\x39\xdd\x78\x96\xfa\xbb\x33\x6a\xfb\x1a\x75\x2e\xed\xab\xa4\x43\x21\x4e\x14\x41\xc7\xe8\xf3\x16\x32\x05\xbd\x9d\x7c\x4e\x37\x79\x70\x46\x51\xfe\x0d\xd7\xd4\xb3\xde\xf0\xf6\xb2\xa2\x57\x55\x78\x27\x6a\x34\x9f\x14\xba\x00\x85\x68\x4c\x66\x83\x49\x46\xe7\x2a\x4e\x11\xd6\x1b\x91\x0b\x09\xbc\x10\x0b\x46\x04\x3d\xc9\x78\x32\x0b\x9b\x30\xa1\x38\xc5\x53\xf7\xec\x64\x67\x3e\x70\x70\x1c\x36\xd7\xac\xce\x0b\x37\x58\xa4\xb2\x86\x92\xf7\xde\xdf\x56\x6c\x67\x3d\xa5\xc0\x38\xe7\x25\xff\xcc\x4d\xce\xfa\x49\x69\xe1\x0e\x5d\x29\x7e\xea\x10\x7f\xb7\xee\x74\x1c\xc5\x1b\x34\x5c\x6e\x59\x08\x8e\x86\xc8\x41\x8b\x95\xdb\x9c\xfe\xfa\xb6\x94\x9e\x9b\x19\x71\x47\xdf\x94\x2f\x4f\x0c\xfe\x89\xb8\xfb\xf6\xac\xc9\xb3\x1c\xfc\x7d\x9a\xdf\xbf\x37\xbb\x2b\xbd\xfa\xab\xf4\xd9\x6e\x73\xb0\xca\x73\x6a\xfe\x52\xcb\xc1\x55\x4e\xf6\x72\x7e\xbd\x1e\x47\x2d\x1f\xc4\xed\xe0\xf1\x5a\xd3\x93\xce\xbf\x10\xf5\x7f\xa4\xe6\x0a\xed\x6a\xe2\xfe\x67\x2b\xf1\xf6\x2e\xec\x11\x5f\xb2\x08\x7f\x06\x00\x00\xff\xff\xf6\xf7\x73\xda\x08\x0a\x00\x00") - -func testE2eTestingManifestsStorageCsiExternalResizerRbacYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiExternalResizerRbacYaml, - "test/e2e/testing-manifests/storage-csi/external-resizer/rbac.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiExternalResizerRbacYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiExternalResizerRbacYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/external-resizer/rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x55\xc1\x6e\xeb\x36\x10\xbc\xf3\x2b\x16\xd6\xd5\x72\x91\x5b\xa1\x5b\x92\x43\x11\xa0\xbd\x24\x45\x81\xa2\xc8\x61\x4d\xae\x2c\x36\x34\x29\xec\x2e\x95\x26\x5f\x5f\x90\x56\x1c\x3b\x76\xde\xcb\xcb\xcb\x49\x04\xb5\x9c\x99\x9d\x15\x47\x0d\xfc\x99\x36\xa4\x03\x31\x3c\x7a\x1d\x40\x07\x82\xdb\xab\xcb\x6b\xe8\x7d\x20\xe8\x13\x03\xfd\xa7\xc4\x11\x43\x3b\x72\x9a\xbc\xf8\x14\x89\x97\xa0\x83\x17\xf8\xfb\xf2\x8f\xdf\x6b\xa1\x69\xc0\xa6\xa8\xe8\xa3\x00\x86\xb0\x43\x48\xeb\x7f\xc9\xaa\x80\x0e\xa8\x80\x4c\x10\xc9\x92\x08\xf2\x13\x68\x02\xce\x71\x0f\x0d\xd7\x77\x37\xa6\x01\x89\x38\xca\x90\x54\x89\x57\xa6\x31\x0d\xdc\x44\x18\x39\xb9\x6c\xd5\xa7\xb8\x04\x42\x3b\x94\x52\x70\xec\x27\x62\x70\x34\x86\xf4\xb4\xa5\xa8\x30\xa0\x14\xd0\x35\x81\xcd\xa2\x69\xeb\x9f\xc9\x75\xa6\x81\xb6\xec\xe2\x94\xbc\x2b\x02\xfb\xe0\xad\xca\x12\xb2\x10\xc4\x14\x5b\x47\x3d\xe6\xa0\x10\x71\x4b\x32\xa2\x25\xc0\xe8\xc0\xf9\xbe\x27\x2e\xa8\x75\xdf\x34\x00\xd5\x88\x72\x62\x5f\xe9\x80\xa2\x7a\xf5\x24\x10\xfc\x03\x55\xdf\xae\x43\x16\x25\xbe\x4d\xd5\x90\x16\xd2\x58\x74\x63\x08\x4f\xc0\x54\x4e\xd6\xaa\x37\x30\x07\x87\xc0\xf7\xa5\x82\xa9\x52\x16\xc7\xf6\x9a\x77\xc3\x49\x75\x4e\xaf\x6d\x8b\x31\x38\xfa\xbf\x88\xcb\x54\x3a\x98\x2e\xcc\x83\x8f\xae\x83\x3b\xe2\xc9\x5b\xba\xb4\x36\xe5\xa8\x66\x4b\x8a\x0e\x15\x3b\x03\xb5\xa5\x0e\xac\xf8\xf6\xc0\x6d\x63\xda\xb6\x9d\xcf\x1e\x36\x71\x08\xce\x6b\xb4\x2b\xcc\x3a\x24\xf6\xcf\x58\x1a\x5b\x3d\xfc\x2a\x2b\x9f\x7e\x99\x2e\x8e\x18\x9a\x97\x66\x5f\xba\x39\xee\x64\xaf\x61\xff\x5d\x1d\x08\x69\x39\xc7\x48\x6c\x38\x07\x92\xce\xb4\x80\xa3\xff\x8d\x53\x1e\xa5\x83\x7f\x16\x8b\x7b\x03\xc0\x24\x29\xb3\xa5\xba\x33\x16\x75\xa2\x14\x75\x4a\x21\x6f\x49\x6a\xc9\x44\xbc\xae\xaf\x37\xa4\x8b\x25\x2c\x82\x97\xfa\x7c\x44\xb5\xc3\xe2\xfe\xc7\x61\x6d\x40\xbf\xfd\x14\xb6\x68\x62\xdc\xd0\x6c\xd5\x29\xd3\xfc\xde\x06\x14\xf9\x2a\xf5\x34\x95\x4f\xe3\x18\xeb\x18\x64\x09\x0b\xcb\x84\x4a\x65\x95\x47\x37\xaf\xc6\x8f\x32\x08\x59\xa6\xb7\x14\x87\x72\x4f\x7d\x98\x67\xbc\xfa\x9e\x21\xf3\x1c\xe7\xf2\x9f\xf0\xe5\xb3\x8c\x29\xea\xa9\x7d\xaf\x6e\x9d\x25\x3f\x72\xd1\x51\x20\xa5\x2f\x13\xf4\x91\xe6\x5f\xf9\x4f\x58\x71\xf4\xe5\xa2\xc5\x72\x89\xe5\x5d\xca\x5d\x68\xbe\x6c\x39\xea\x7d\xf4\xe5\x8a\xbf\x6b\xc3\x09\xff\xbe\xeb\xf3\x51\x72\xe5\xa3\xf3\x71\xf3\xb9\x44\x39\x9b\x59\x2d\x97\x84\x92\xbc\xfb\xc9\x94\xac\x38\x9b\x7d\xef\x25\xde\x2e\xa7\xc6\x50\x42\xbf\x66\xeb\xf9\xff\x41\x59\xcd\x18\x75\xa3\x83\xb9\xc6\x14\xfa\x5b\xea\x8b\xbe\xd3\xe0\x2c\xe8\x76\xc0\xb8\x99\x23\xbf\xc4\x21\x06\x49\x50\xf3\x70\x17\x8c\x47\xc9\xbf\x21\x95\x39\x37\xdd\x87\x12\x12\xf6\x63\xfe\x86\x91\xff\x07\x00\x00\xff\xff\xfd\xfb\x9d\x00\xdd\x07\x00\x00") - -func testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYaml, - "test/e2e/testing-manifests/storage-csi/external-snapshotter/rbac.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/external-snapshotter/rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiGcePdController_ssYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x94\x51\x6f\xd3\x30\x10\xc7\xdf\xf3\x29\x4e\xe5\xd9\xc9\x2a\x40\x42\x96\xf6\x50\x6d\xd3\x34\xa9\x34\x13\x9b\x78\x9d\x0e\xe7\x96\x9a\x38\xb6\xb1\x2f\x81\x09\xf1\xdd\x91\x9b\x6c\x4b\xda\x4e\x80\x10\x0f\xe4\xc9\x3d\xdf\xfd\xef\x7f\xbf\xda\x6e\xb4\xad\x24\xdc\x30\x32\xdd\x77\xe6\x86\x38\x43\xaf\x3f\x52\x88\xda\x59\x09\xe8\x7d\x2c\xfa\x65\xd6\x12\x63\x85\x8c\x32\x03\xb0\xd8\x92\x04\x15\xb5\xa8\x15\x09\x5f\x09\xe5\x2c\x07\x67\x0c\x85\x2c\x7a\x52\x29\x27\x52\xe8\xb5\xa2\xcd\x2e\x75\xf1\x9c\xbb\xc8\x00\x02\x79\xa3\x15\x46\x09\xcb\x5d\xa6\x21\xc5\x2e\xa4\x2a\x80\x16\x59\x6d\xd7\xf8\x89\x4c\x1c\x02\x90\x2c\x48\xa8\x95\x17\xca\xb5\xbe\x63\x12\x3e\x99\x8b\x4c\x96\x45\xa5\x63\x23\x92\x7a\x15\x74\x4f\x21\x03\x60\x6a\xbd\x41\xa6\x51\x6e\x62\x3b\x7d\x66\xa6\xfc\xa7\xda\x00\x8f\xe3\xed\xd6\xc3\x88\x2b\xa5\x5c\x67\x79\xf3\x04\xe5\x99\x86\x88\x38\xe6\xa6\x18\x6a\x4b\x61\xd2\x5b\x4c\x40\xfa\xe0\x7a\x9d\x88\x8f\x7d\x86\xef\x15\xdc\x96\xe7\xa5\xdc\x01\x43\x45\xf0\x55\xf3\x16\xdc\xfd\xbd\x56\x1a\x0d\xe8\x16\x6b\x9a\x64\xef\x7e\x4b\xf8\xd2\xe1\x43\xae\x5d\xd1\xbc\x8b\x2a\xea\x62\x4f\x5d\x72\xeb\x05\x53\x64\xb1\xcc\x97\x6f\x26\xd5\x18\xea\x89\xb7\xc1\xdf\x42\x88\xfe\xf4\xed\xe2\x30\x9a\x44\xb1\xaa\x02\xc5\x78\x5a\x8c\x5d\xf2\xe8\x54\x33\xcd\xed\x9d\xe9\x5a\x7a\x9f\xe0\x1c\x28\x0f\x93\xa7\x0a\x4a\xa0\xc3\x6c\x1b\xa0\x4d\x45\xd7\xc8\x5b\x09\x49\xfa\x28\x32\x64\x46\xb5\x9d\xf1\x1a\x09\xd4\x2a\x24\x00\x75\x43\x22\x90\x21\x8c\x54\x4c\x0b\x64\xbf\xcc\x4f\xf2\xa5\xa8\x1b\xca\x4f\xfe\x57\x02\xe3\xcd\x9b\x1c\xcd\x5f\x21\xf8\xbd\x53\x2e\xfb\x93\xfc\xf5\xdf\xc2\x21\x5b\x79\xa7\x2d\x9f\x76\x56\x7f\x93\x2f\xe2\x21\xdb\x1f\xa7\x72\x59\x96\x97\xeb\x8b\xbb\xd5\xf5\xf5\xfa\xea\x6c\x75\x7b\x55\x6e\xee\xce\x3e\x5c\x9c\x5f\x6c\x6e\xaf\x56\xeb\x9b\x3d\x52\x3d\x9a\x2e\xbd\x31\x05\xb1\x2a\x94\x71\x5d\x25\x22\x3e\x2d\xf2\xcf\xd1\xd9\x7f\xfc\x9f\x4c\x8b\x1f\xfb\x8a\xa1\xcf\x9e\x42\x20\xac\x4a\x6b\x1e\x24\x70\xe8\xf6\x37\x27\xf2\xf3\x61\x1e\xed\x0f\x92\x47\x5e\x90\xa3\x8e\xa9\xf5\xfc\x70\xae\x83\x84\xef\x3f\x0e\x2f\xd0\x8b\x36\x23\xa9\x40\x3c\x27\x33\xc4\x36\xb3\xca\xec\x67\x00\x00\x00\xff\xff\x80\xd8\x30\xca\x38\x06\x00\x00") - -func testE2eTestingManifestsStorageCsiGcePdController_ssYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiGcePdController_ssYaml, - "test/e2e/testing-manifests/storage-csi/gce-pd/controller_ss.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiGcePdController_ssYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiGcePdController_ssYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/gce-pd/controller_ss.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x92\xc1\xae\x52\x31\x10\x86\xf7\x7d\x8a\x49\xdc\x68\x62\x31\xb8\x32\x67\xa7\x2e\xdc\x9e\x80\x71\x3f\xb4\xc3\x61\xa4\xb4\xcd\x74\xda\x88\x4f\x6f\x4e\x54\x72\x2e\x70\x2f\x24\x37\x10\xd6\xed\xfc\xf3\xcf\x97\x0f\x33\xff\x20\x29\x9c\x62\x07\x6d\x6e\xb6\x1c\x7d\x07\x4b\x92\xc6\x8e\x3e\x3b\x97\x6a\x54\xb3\x23\x45\x8f\x8a\x9d\x01\x88\xb8\xa3\x0e\x5c\x61\xeb\x52\x54\x49\x21\x90\xd8\x82\xc6\x58\x6b\xff\x4d\x7f\x0d\xb5\x28\xc9\x22\x05\xfa\xc2\xd1\x73\x1c\xcc\x74\x8b\xac\xd0\xcd\xb0\xea\x26\x09\xff\x46\xe5\x14\x67\xdb\x4f\x65\xc6\xe9\x43\x9b\x5f\x5e\x85\xaa\xe8\x36\x24\x56\x52\x20\x53\xea\xea\x27\x39\x2d\xe3\x77\x0b\x67\xcb\x03\x3c\x5f\xfa\xff\x5b\xc9\xe8\xa8\x03\x4f\x6b\xac\x41\xcd\x18\xbd\xa0\xf5\x18\x7a\x72\xd1\xa1\x17\xfd\x52\x92\x88\x61\xd2\xa8\xc6\x48\x62\x00\x30\xf3\x37\x49\x35\xbf\x70\xeb\x94\xd7\x1d\x40\x59\xb7\x1e\xcc\xd9\x5b\xef\x44\xf0\x02\xba\xb1\xde\xbd\x0c\xca\x92\x1a\x8f\x41\x8f\x24\xd1\x93\x52\x0f\xe5\xd1\x31\xae\x07\x55\x69\x5a\xf3\x60\xd3\x1b\xc8\xc2\x8d\x03\xf9\x81\x3c\xf4\xc9\xc3\x92\x5c\x15\xd6\x3d\xf4\x29\xb0\xdb\xbf\x87\x2c\xd4\x38\xd5\x12\xf6\xe3\x46\x8e\xe4\xa1\x31\x42\xff\x77\x6e\x20\xff\x9d\x8a\xf6\xcb\xfe\x54\xc9\xb7\xef\x6e\x62\x6b\x2e\xd9\x1e\xc1\xf1\xc2\x6d\xa4\x4f\x03\x17\x15\xbc\xa9\xb6\x57\x66\xc5\xe4\xe9\xd5\xf2\x7f\x24\xab\x54\xd4\xe6\x03\x6c\x9b\x4b\xbe\x52\xfc\x3f\x01\x00\x00\xff\xff\xfb\x3e\x27\xdf\xb9\x06\x00\x00") - -func testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYaml, - "test/e2e/testing-manifests/storage-csi/gce-pd/csi-controller-rbac.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/gce-pd/csi-controller-rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiGcePdNode_dsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x55\x4d\x6f\xe3\x36\x10\xbd\xfb\x57\x0c\xdc\x6b\x29\x25\x28\x7a\x11\xe0\x43\xbe\x7a\x69\x93\x14\x4d\x77\x2f\x8b\x45\x40\x93\x63\x99\x30\x45\x72\x87\x94\x36\xfe\xf7\x0b\x5a\x4e\xac\x0f\x5a\x76\xf6\x43\x40\x02\x99\x1c\xbe\xf7\xc8\x79\x8f\xda\x28\x23\x0b\xb8\xe5\x58\x59\xf3\x84\x61\xc6\x9d\xfa\x88\xe4\x95\x35\x05\x70\xe7\x7c\xde\x5c\xce\x2a\x0c\x5c\xf2\xc0\x8b\x19\x80\xe1\x15\x16\x20\xbc\x62\xa5\x40\xe6\x24\x33\x56\xe2\xcc\x3b\x14\x71\xd6\xa3\x46\x11\x2c\xc5\x77\x80\x8a\x07\xb1\xfe\x87\x2f\x51\xfb\x76\x00\x22\x64\x01\xa5\x70\x4c\xd8\xca\xd5\x01\x99\x8b\x64\x3e\xa0\x09\x4c\x2a\xbf\x61\x11\x59\x92\x6a\x90\x66\x00\x01\x2b\xa7\x79\xc0\x3d\x5c\x47\x46\x7c\x74\x0f\xf9\xbd\xd8\x00\xaf\xa2\x77\xef\x48\x8d\x12\x78\x25\x84\xad\x4d\x78\x78\xdb\x64\xdc\x1d\xf3\x7c\x5f\x25\xac\x09\x5c\x19\xa4\x0e\x2b\xeb\x1c\x49\x0b\xce\x08\x4b\xe5\x03\x71\x7a\x2b\x02\x50\x15\x2f\x31\xca\xa3\x4c\xd9\xbc\xdc\x20\x23\xd4\xc8\x3d\xe6\xa9\x85\x45\x73\x99\x5d\x64\x97\xac\xdc\x60\x76\xd1\x41\xe1\x54\x76\xa8\x5b\xfa\x39\x63\xcd\xe2\xcf\xf9\x78\x34\x02\x73\x29\x09\xbd\x5f\x44\x96\xf8\x97\x79\x2b\x36\x89\xda\x4d\xbd\x44\x8d\xe1\x4d\x41\x50\xd6\x30\xc7\xc3\x7a\x91\x37\x9c\x72\xad\x96\xf9\xbe\x24\x77\xba\x2e\x95\xf1\xb9\x93\xd9\x0e\x30\x58\xe2\x25\x66\x51\xaa\xb2\x49\x0e\xad\x56\x28\xb6\x42\x63\x5f\xba\x23\x7c\x0a\xd6\xf5\x07\x01\xf0\xe5\xd0\x96\xc3\x23\x6c\x55\xf1\x68\xd5\x4f\xf3\x7c\xa9\x4c\xee\xd7\xf3\xdf\x61\xce\x44\xfc\x4f\x15\x30\x5a\x41\xde\x15\x9f\x96\x77\x4e\x4d\x3c\x83\x76\x0b\x9f\x3b\x2a\xd0\x34\xc3\x83\x6f\xfb\xfe\xf7\x87\xeb\xbb\xe7\x87\xc7\xdb\xbb\xe7\x87\xab\xfb\xbb\x81\xee\x86\xeb\x1a\xff\x22\x5b\x8d\x37\xb4\x52\xa8\xe5\x7f\xb8\x1a\xcf\xec\xe7\xfe\xe5\x61\x5d\xec\x4c\x9a\x45\x17\x46\x4f\x76\x4a\x1b\xab\xeb\x0a\xef\xa3\x5b\x47\x8e\x68\x85\xb5\x7d\x62\x52\xd1\x80\xa1\x8a\x8b\x5a\xf4\xd8\xae\xe4\xe2\x9e\x0f\xa6\x21\xba\xa5\xa3\x54\xec\x2f\x89\x4e\xea\xda\xc7\xa3\xa8\x49\x85\xed\x8d\x35\x01\x5f\xc2\xd0\x18\xaa\x51\x1a\x4b\x94\x05\x04\xaa\xf1\xac\x18\x9d\x17\xfc\xa2\xb9\xc8\xfe\xf8\xd1\x60\xa1\x91\xce\x2a\x13\x16\xb5\x51\x2f\xc5\xd1\x68\x9d\x6e\xd1\x6b\xea\xa6\x0f\x78\x10\xc0\x64\x25\x59\xc7\xcb\x5d\x0b\x0a\x98\x5f\x2b\xa9\x08\x45\xfc\xc5\xf5\x50\xff\x4f\x30\x87\xc4\x78\x57\x9e\x58\x2c\xb1\xe9\xcd\xfe\x06\xff\xaf\x11\x56\x56\x6b\xfb\x55\x99\xb2\xad\xf5\xc0\x09\x81\xf0\x4b\xad\x08\x25\x04\x0b\x81\x54\x59\x22\xc1\xda\xfa\x00\xb5\xc4\x86\xcb\x0a\x56\x64\xab\xc3\xe5\x9b\xd4\x14\x4b\x19\xd5\x1a\x3d\xc3\x20\x26\x74\x61\x10\x79\x3d\x14\x97\x40\xd1\x6a\x39\x81\x12\xfb\x31\x8d\x12\xdd\x70\xa4\x59\xfb\xdc\xd4\xe6\x38\x84\xdf\xfa\x89\xa5\x87\xd9\xd6\x63\x89\xcf\xd1\x44\x80\xe3\xd1\xee\x80\xfa\xa1\x4b\x9a\xed\xf5\xb6\x7f\xde\xe3\x6d\xf3\xde\xa2\xb0\x75\x58\xc0\xed\xce\x6d\x96\xb6\x23\x15\x69\x83\xbf\x47\xc0\xbb\xe8\x92\xae\xfe\x9e\xed\x1e\xf9\xb8\x4d\x89\x79\xa4\x1b\x42\x1e\x70\x24\x2a\x99\x96\x49\x51\x43\x53\x1c\xdb\xf6\x2f\x88\xd4\xc9\x38\x4d\x0a\x4f\x66\xeb\x54\xd3\x8e\x66\x6e\x92\x2a\x19\xc0\xb3\xa8\x46\xc1\x9c\xe4\x49\xa6\xf4\x14\x4f\x3f\xbd\x93\xf8\xc3\xa0\x0f\xa1\xbf\x05\x00\x00\xff\xff\xb6\x75\xde\xc3\xa0\x0b\x00\x00") - -func testE2eTestingManifestsStorageCsiGcePdNode_dsYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiGcePdNode_dsYaml, - "test/e2e/testing-manifests/storage-csi/gce-pd/node_ds.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiGcePdNode_dsYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiGcePdNode_dsYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/gce-pd/node_ds.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x52\x4d\x8f\xd3\x30\x10\xbd\xe7\x57\x8c\x56\x1c\xe0\xe0\x86\x00\x2b\x21\x4b\x7b\xa8\x28\x37\x58\x2a\x2a\x71\x9f\x3a\x43\x63\xd5\x8e\x8d\x3d\x0e\xca\xbf\x47\xf9\x58\xb0\x5b\xa0\x5a\x9f\xa2\xf1\x7b\x6f\xde\x7b\xf1\x59\xf7\xad\x84\x03\x85\x41\x2b\xaa\xd0\xeb\x6f\x14\xa2\x76\xbd\x84\xa1\xa9\x2c\x31\xb6\xc8\x28\x2b\x80\x1e\x2d\x49\x50\x51\x8b\xce\x45\xf6\xc8\x9d\x40\x66\x54\x1d\x85\x0a\xc0\xe0\x91\x4c\x9c\x70\x00\xe8\xfd\xbf\x80\xd1\x93\x9a\x40\x91\x0c\x29\x76\xe1\x26\x01\xc0\xbb\xc0\xab\xb0\x58\x4d\xb4\xc9\xda\x71\x9e\x2c\xd7\x12\x9a\x37\x6f\xdf\xdd\x57\x95\x10\xa2\x5a\x03\x31\x32\x7d\x4f\xe6\x40\x5c\x84\x42\xef\x63\xfd\x8c\x64\x7f\x0c\xcf\x05\x3d\xce\xd0\xbb\xbf\x62\xef\x2a\x80\x40\xde\x68\x85\x51\x42\x73\x95\xd2\x22\xab\xee\x53\xd6\xd3\x8d\xe0\x4c\xd6\x1b\x64\x5a\xd9\x99\xe1\xe9\x98\x42\xe8\x86\x14\xc0\x53\x8e\xf9\x7b\xc9\xb2\x55\xca\xa5\x9e\x1f\x7f\xa7\x2f\x08\x00\xca\xf5\x8c\xba\xa7\x90\x6d\x11\x59\x59\x17\xf0\xe9\x68\x8b\x27\x92\xf0\x23\xe1\xb8\xd1\xae\x3e\xbf\x8f\x2a\xea\x3a\x07\xcb\xa1\xd9\xbc\xde\x34\x19\x07\xc3\x29\x5b\xb0\x2c\x11\x62\x78\xb8\xbf\x9a\xcd\x3a\x6d\x1b\x28\xc6\x87\x17\x2f\xb7\xbb\xdd\xd7\x8f\x87\xc3\xab\x0c\x46\xfd\x70\xa9\xb4\xd8\x5d\xb1\xc5\x1d\xc0\x80\x26\x91\x84\x7a\xf5\xb8\x89\x4e\x9d\x2f\xc3\xec\x93\x31\x7b\x67\xb4\x1a\x25\x6c\xcd\x4f\x1c\x63\x86\x18\x9c\x49\x96\x3e\x4f\x2d\x16\x11\x04\xd8\x69\xb6\x47\xee\x16\xf9\x62\xf1\x62\x69\x5a\x46\x2c\x5a\xfd\xd4\xdf\x22\x56\x74\x3d\xfd\xca\x59\xa4\xe0\xfb\x45\x76\xc0\x50\x1b\x7d\xac\xcf\xe9\x48\x86\xb8\xf6\x26\x9d\x74\x1f\xeb\xfc\x0d\x14\x3c\x1e\x3d\x49\xd8\xe9\x30\xbf\xc9\xf1\x4b\xf8\x10\x08\x99\xaa\xff\x38\xfb\x15\x00\x00\xff\xff\xd6\x6e\xfa\x07\x1d\x04\x00\x00") - -func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-attacher.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-attacher.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x52\xcd\x8e\xd3\x30\x10\xbe\xe7\x29\x46\x15\x07\x38\xa4\x21\xc0\x4a\xc8\x52\x0f\x15\xe5\x06\x4b\x45\x25\xee\x53\x67\x68\xad\xfa\x0f\x7b\x1c\x94\xb7\x47\x4e\xb2\xe0\xb4\xb0\xcb\xfa\x14\xd9\xdf\x7c\x7f\x93\x8b\xb2\x9d\x80\x03\x85\x5e\x49\xaa\xd0\xab\x6f\x14\xa2\x72\x56\x40\xdf\x56\x86\x18\x3b\x64\x14\x15\x80\x45\x43\x02\x64\x54\xf5\xd9\x45\xf6\xc8\xe7\xda\x07\xd7\xab\x0c\xa6\x50\x01\x68\x3c\x92\x8e\x19\x0a\x80\xde\x3f\x82\x8d\x9e\x64\xc6\x45\xd2\x24\xd9\x85\xff\x99\x01\xf0\x2e\xf0\x4c\x5f\xcf\x6e\xba\x64\xcc\x30\xde\x4c\xcf\x02\xda\x37\x6f\xdf\xdd\x55\x55\x5d\xd7\xd5\x9c\x8c\x91\xe9\x7b\xd2\x07\xe2\x45\x3a\xf4\x3e\x36\xcf\x8b\xf8\xc7\xf6\x58\xd6\xfd\x88\x5e\xfd\x0b\xbe\xaa\x00\x02\x79\xad\x24\x46\x01\xed\x4d\x5c\x83\x2c\xcf\x9f\x8a\xce\x9e\x6e\x80\xc9\x78\x8d\x4c\x33\x41\xe1\x3c\x1f\xbd\xe0\x7a\x9a\x0d\xe0\x21\xd0\xf8\x3d\x85\xda\x4a\xe9\x92\xe5\xfb\xdf\x4d\x5c\xcf\x00\x48\x67\x19\x95\xa5\x50\x68\xd5\x45\x77\xb7\x13\xf9\x28\x83\x27\x12\xf0\x23\xe1\xb0\x56\xae\xb9\xbc\x8f\x32\xaa\xe6\x0a\x2f\xfa\x76\xfd\x7a\xdd\x16\x63\x18\x4e\x85\xcc\x24\xb5\xaa\xcb\x99\x4d\x19\x71\x75\x0b\xcd\xcf\xd8\x75\x81\x62\xdc\xbc\x78\xb9\xdd\xed\xbe\x7e\x3c\x1c\x5e\xfd\x0d\xe8\xac\x25\xc9\xca\xd9\x9a\x95\x21\x97\x78\xd3\xde\xc5\x12\x48\xb6\xbf\xf6\x32\xc5\x9e\x59\x17\x6f\x00\x3d\xea\x44\x02\x9a\x39\xe8\x3a\x3a\x79\xb9\x6e\x64\x9f\xb4\xde\x3b\xad\xe4\x20\x60\xab\x7f\xe2\x10\x0b\x44\xef\x74\x32\xf4\x39\x2f\xe4\xa6\x04\x93\x6f\xf7\xc8\xe7\x49\xe0\x4a\x7a\xb2\x95\x05\x89\xeb\x4e\x3d\x2c\x62\x22\x5c\xec\x2d\x37\x37\xd2\x2c\x18\xfc\x44\xdc\x63\x68\xb4\x3a\x36\x97\x74\x24\x4d\xdc\x78\x9d\x4e\xca\xc6\xa6\xac\x7c\x31\xc7\x83\x27\x01\x3b\x15\xc6\x1f\x7d\xf8\x12\x3e\x04\x42\xa6\xea\x11\x67\xbf\x02\x00\x00\xff\xff\xf7\x52\xf4\xcf\x81\x04\x00\x00") - -func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-provisioner.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-provisioner.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x92\xcf\xaa\xdb\x3c\x10\xc5\xf7\x06\xbf\xc3\x10\xbe\xc5\xd7\x85\xe2\xba\xed\x85\x22\xb8\x8b\xd0\x74\xd7\x3f\xa1\x81\xee\x27\xf2\x34\x11\x91\x25\x55\x1a\xb9\xf8\xed\x8b\xec\xdc\x46\x31\x49\xa9\x76\x61\x7e\xe7\xcc\x39\x13\x9f\xb5\xed\x24\xec\x29\x0c\x5a\x51\x5d\xa1\xd7\xdf\x29\x44\xed\xac\x84\xa1\xad\xab\x9e\x18\x3b\x64\x94\x75\x05\x60\xb1\x27\x09\x2a\x6a\x11\x2d\xfa\x78\x72\xcc\x14\xf2\xc0\xe0\x81\x4c\x9c\x18\x00\xf4\xfe\x0e\x14\x3d\xa9\x09\x88\x64\x48\xb1\x0b\x7f\xa5\x01\xbc\x0b\x3c\x3b\x8a\xcb\xde\x2e\xf5\xfd\x38\x8b\xf2\x50\x42\xfb\xe6\xed\xbb\xa7\xba\xaa\x2b\x21\x44\x5d\x5d\x8a\x30\x32\xfd\x48\x66\x4f\x7c\x5b\x06\xbd\x8f\xcd\xbf\x36\x2a\xc2\x4e\x77\xf9\x32\x61\xab\x05\xb7\xca\x44\x20\x6f\xb4\xc2\x28\xa1\xbd\xd3\xae\x47\x56\xa7\x4f\xe5\x75\x1e\x37\x66\xea\xbd\x41\xa6\x17\x69\x99\x33\x3f\x73\x6b\xf3\xd8\x08\xe0\x4f\xfe\xe9\xc7\xdc\x61\xa3\x94\x4b\x96\x1f\x28\x00\x94\xb3\x8c\xda\x52\xb8\xae\x10\x8f\xff\xf1\xf9\xe9\x1e\x8f\x24\xe1\x67\xc2\x71\xad\x5d\x73\x7e\x1f\x55\xd4\xcd\x02\x97\x43\xbb\x7e\xbd\x6e\x8b\xdc\xe1\x58\xd6\x10\xb0\x12\x22\x6b\xb0\xeb\x02\xc5\xf8\xfc\xdf\xff\x9b\xed\xf6\xdb\xc7\xfd\xfe\xd5\x6a\x49\x39\x6b\x49\xb1\x76\x56\xb0\xee\xc9\x25\x7e\x6e\x9f\x62\x41\x91\x1d\x6e\x9c\xe7\xfc\x17\xbb\xeb\x00\x60\x40\x93\x48\x42\x73\xc9\xbb\x8e\x4e\x9d\x17\xbd\x76\xc9\x98\x9d\x33\x5a\x8d\x12\x36\xe6\x17\x8e\xf1\x0a\x0c\xce\xa4\x9e\x3e\xe7\x83\xc6\x3b\x0b\xb3\x1b\xb1\xe8\x74\x28\x77\xf6\x19\xdf\x21\x9f\xe6\xbd\x2f\xa3\xd9\xab\xbc\xfa\xc9\xc5\x99\x2b\xd5\x7e\x16\x0e\x18\x1a\xa3\x0f\xcd\x39\x1d\xc8\x10\x37\xde\xa4\xa3\xb6\x71\x3a\x7a\xd6\x65\xac\x94\xf1\xe8\x49\xc2\x56\x87\xe9\xb3\x1c\xbf\x86\x0f\x81\x90\xe9\x8a\x2c\x13\xff\x0e\x00\x00\xff\xff\xe7\x2f\xe7\x0d\x11\x04\x00\x00") - -func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-snapshotter.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-snapshotter.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathpluginYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x54\xc1\x6e\xdb\x3a\x10\xbc\xfb\x2b\x16\x41\x0e\x79\x07\x59\xf1\xe1\x01\x0f\x04\x7c\x48\x62\x3f\x20\x68\xe3\x18\x4d\xdb\xab\xc1\x90\x1b\x7b\x61\x8a\x54\x49\x4a\x89\xfe\xbe\xa0\xa4\xb8\xa2\x2c\x2b\x4d\xd0\x4b\x73\x52\x56\xbb\x33\xe3\xd9\xd1\xee\x49\x4b\x06\x0b\x8e\x99\xd1\x0f\xe8\x27\x3c\xa7\xef\x68\x1d\x19\xcd\x80\xe7\xb9\x4b\xcb\xd9\x24\x43\xcf\x25\xf7\x9c\x4d\x00\x34\xcf\x90\x81\x70\x94\xec\x8c\xf3\x39\xf7\xbb\x5c\x15\x5b\xd2\x13\x97\xa3\x08\x0d\x0e\x15\x0a\x6f\x6c\x78\x06\xc8\xb8\x17\xbb\xcf\xfc\x11\x95\x6b\x0a\x10\x50\x07\x01\x00\x3c\x66\xb9\xe2\x1e\xdb\xd1\x0e\x6b\xf8\x53\x11\xca\x18\x0e\xc0\xab\x98\xfa\x19\x6d\x49\x02\xaf\x84\x30\x85\xf6\xab\x83\x7e\x6d\x24\x26\x8e\xb7\x5d\x01\x64\x85\xfe\xd9\xd8\x3d\x03\x6f\x0b\x6c\xeb\xc2\x68\xcf\x49\xa3\xed\x30\x27\xad\x0b\xd2\x52\x89\x36\xb1\xb8\x25\xe7\x2d\xb7\x87\x06\x00\xca\xf8\x16\x19\xfc\x28\x78\x35\x25\x93\xee\xff\x73\xc2\x51\x7a\xa0\xed\x4f\xb2\x72\x36\xbd\x9c\xce\x3a\x00\xdc\x6e\x3b\x8c\x0d\x6b\x92\x94\xf3\x7f\x8f\x6a\x01\x94\x4b\x69\xd1\xb9\x79\xda\xb2\x4c\x9d\x11\xfb\xa3\xce\x7d\xf1\x88\x0a\xfd\x81\xd6\x93\xd1\x49\x70\x6e\x9e\x96\xdc\xa6\x8a\x1e\xd3\xb6\x25\x6d\xbc\x74\x69\xd7\xdf\x21\x60\xd4\x65\x5f\x65\xe3\xcd\xa7\x6f\xd7\xcb\xcd\xea\x7e\xb1\xdc\xac\xae\xee\x96\x51\x0b\x40\xc9\x55\x81\xff\x5b\x93\xb1\xde\x0b\x80\x27\x42\x25\xbf\xe0\xd3\xf1\x9b\xb0\xf1\x5f\xd9\x2c\x67\x03\x0d\xf5\xf0\x9a\xfb\x1d\xab\x13\x30\x0d\x5e\x87\x85\xf7\x17\xb3\x2e\x94\x5a\x1b\x45\xa2\x62\x70\xa5\x9e\x79\xe5\x3a\x1d\xa5\x51\x45\x86\x77\x21\x2c\xd1\x06\x12\xc8\x42\xad\x81\x0f\x5e\x44\x02\x9a\x5f\x1d\xdc\x41\x9f\x48\xb2\x27\x07\xbb\xe6\x0f\x20\x44\xbb\xe9\xe2\xbc\x1a\xfb\xba\x8d\x37\xc3\x16\x7f\x16\x21\x61\xb3\xe9\x65\x62\xc5\x5b\x29\x3b\xab\x63\x76\x76\x5c\x45\x2d\x73\x43\xda\xcf\xcf\x2f\x6e\x1e\x6e\x37\xcb\xd5\x62\x7d\x7f\xbb\xfa\xfa\xcf\x40\x6b\x30\x9e\xe4\xfc\xfc\x22\x8e\x41\xd4\x7a\x32\x3a\x5d\xf0\xa1\xe0\x30\x28\x34\xbd\xb0\x34\x1d\x4b\xfb\xdf\x9e\x42\x87\xa2\xb0\xe4\xab\x1b\xa3\x3d\xbe\xf8\x58\x48\x6e\xa9\x24\x85\x5b\x94\xd1\xad\x82\x91\xf4\xbe\x95\xdf\xd1\x04\xf7\x87\x8f\xae\x85\x91\xae\x87\xd6\xb4\x5b\x93\xf3\x6d\x9d\x65\x06\xd7\x24\xc9\xa2\x08\xff\x70\x35\xc8\x5d\xcf\xd4\x11\x7b\x2f\x7f\x73\xad\xfe\x80\x84\x16\xa9\xc3\xdf\x18\x1a\x5d\xff\xf0\x65\xd5\x4a\xe2\xa5\x8c\x6a\x8b\x2e\x69\x34\xe7\xab\x1c\x19\x2c\x6a\x61\xc6\x56\xf7\xf6\xc6\x22\xf7\xdd\x9d\x9e\xdc\xcc\x7b\xa5\xf4\xd7\xf4\xbb\xd4\x27\x16\xf3\x31\x27\x36\xed\x89\xab\xc6\xa4\x1c\x49\x18\xb9\x8b\x1f\x11\xf1\x2e\xee\x6e\x28\x7e\x06\x00\x00\xff\xff\x7a\xfc\xf2\xda\x30\x09\x00\x00") - -func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathpluginYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathpluginYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpathplugin.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathpluginYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathpluginYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpathplugin.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x91\xcf\x6a\x23\x31\x0c\x87\xef\x7e\x0a\xc1\x5e\x76\x61\x9d\x65\x7b\x2a\x73\xeb\x1f\xe8\x75\x48\x4a\xef\x8a\xad\xcc\x28\x99\x58\xc2\x92\x07\xd2\xa7\x2f\x43\x68\x2e\xa1\xa5\x90\xab\x2d\x7d\x92\xbe\xdf\x2f\xd0\xca\x33\x4f\x94\x07\xca\xd0\x4b\x86\x0d\xa5\x56\xd9\x4f\xd0\xcb\xc4\xe9\xf4\x17\xb4\xd2\xcc\xd2\x6c\x3a\x41\xa6\x1d\x17\xca\xb0\x6f\xe6\xb0\x93\x0a\x43\xa2\xfe\x19\x66\x46\xe8\xcf\x98\x81\xf2\x2b\x99\xf7\x9b\xfe\x69\x6a\xe6\x54\xd7\x32\xd1\x23\x97\xcc\x65\xf8\xfd\x27\x1c\xb8\xe4\x0e\xae\xbf\x02\x2a\xbf\x51\x35\x96\xd2\x41\xdd\x62\x5a\x61\xf3\x51\x2a\xbf\xa3\xb3\x94\xd5\xe1\xde\x56\x2c\xff\xe6\xff\xe1\x48\x8e\x19\x1d\xbb\x00\x50\xf0\x48\x1d\xa8\x69\x4c\xc6\x71\x14\x73\x45\x1f\x63\x95\x89\x82\xb5\xed\x9e\x92\xdb\x52\x17\xe1\x3c\x77\x43\x75\xe6\x44\x0f\x29\x49\x2b\x1e\x00\x3e\x11\x4b\x3b\xba\x63\x1a\xa9\x5e\x9e\x4d\x31\x51\xb7\xdc\x8c\x6d\xf2\x9f\x62\x8a\x64\x8a\x86\x37\x52\xb4\xca\xcc\x8b\x8d\x9b\xf7\xb1\x82\x6a\xa3\xb8\x7f\x4d\x5a\x7c\xad\x69\xb7\x98\xba\xca\xe7\x62\x99\xee\x28\x3a\x99\x47\xbd\x04\x1d\xd5\x34\x00\xa0\xf2\x4b\x95\xa6\xdf\x04\x17\x3e\x02\x00\x00\xff\xff\xf3\x2b\x18\x76\x67\x02\x00\x00") - -func testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/e2e-test-rbac.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/e2e-test-rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathAttacherYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x52\x4d\x6f\x13\x31\x10\xbd\xef\xaf\x18\x55\x1c\xe0\xe0\x6c\x03\xad\x84\x2c\xf5\x10\x11\x6e\x50\x22\x22\x71\x9f\x78\x87\xc4\x8a\xbd\x36\xf6\xd8\x68\xff\x3d\xda\x8f\x82\x9d\x02\x51\x7d\x5a\x8d\xdf\x7b\xf3\xde\x5b\x9f\x75\xdf\x49\xd8\x53\xc8\x5a\x51\x83\x5e\x7f\xa3\x10\xb5\xeb\x25\xe4\x75\x63\x89\xb1\x43\x46\xd9\x00\xf4\x68\x49\x82\x8a\x5a\x9c\x5c\x64\x8f\x7c\x12\xc8\x8c\xea\x44\xa1\x01\x30\x78\x20\x13\x47\x1c\x00\x7a\xff\x2f\x60\xf4\xa4\x46\x50\x24\x43\x8a\x5d\xb8\x4a\x00\xf0\x2e\xf0\x22\x2c\x16\x13\x5d\xb2\x76\x98\x26\xf3\xb5\x84\xf5\xdb\x77\x77\xf7\x4d\x23\x84\x68\x96\x40\x8c\x4c\xdf\x93\xd9\x13\x57\xa1\xd0\xfb\xd8\xbe\x20\xd9\x1f\xc3\x53\x41\x8f\x13\xf4\xe6\xaf\xd8\x9b\x06\x20\x90\x37\x5a\x61\x94\xb0\x7e\x96\xd2\x22\xab\xd3\xa7\xa2\xa7\x2b\xc1\x99\xac\x37\xc8\xb4\xb0\x0b\xc3\xe3\x31\x95\xd0\x15\x29\x80\xa7\x1c\xd3\xf7\x9c\x65\xa3\x94\x4b\x3d\x3f\xfe\x4e\x5f\x11\x00\x94\xeb\x19\x75\x4f\xa1\xd8\x22\x8a\xb2\x2e\xe0\xe3\xd1\x16\x8f\x24\xe1\x47\xc2\x61\xa5\x5d\x7b\x7e\x1f\x55\xd4\x6d\x09\x96\xf9\x76\x75\xb7\x5a\x17\x1c\x0c\xc7\x62\xc1\xbc\x44\x88\xfc\x70\xff\x6c\x36\xe9\x74\x5d\xa0\x18\x1f\x5e\xbd\xde\x6c\xb7\x5f\x3f\xee\xf7\x6f\x0a\x18\xf5\xf9\x52\x69\xb6\xbb\x60\xab\x3b\x80\x8c\x26\x91\x84\x76\xf1\xb8\x8a\x4e\x9d\x2f\xc3\xec\x92\x31\x3b\x67\xb4\x1a\x24\x6c\xcc\x4f\x1c\x62\x81\xc8\xce\x24\x4b\x9f\xc7\x16\xab\x08\x02\xec\x38\xdb\x21\x9f\x66\xf9\x6a\xf1\x6c\x69\x5c\x46\x2c\x3a\xfd\xd4\xdf\x2c\x56\x75\x3d\xfe\xca\x49\xa4\xe2\xfb\x59\x36\x63\x68\x8d\x3e\xb4\xe7\x74\x20\x43\xdc\x7a\x93\x8e\xba\x8f\x6d\xf5\x06\xf2\x6d\x45\xe5\xc1\x93\x84\xad\x0e\xd3\xb3\x1c\xbe\x84\x0f\x81\x90\xa9\xf9\x8f\xb9\x5f\x01\x00\x00\xff\xff\xee\xc5\x50\xa9\x20\x04\x00\x00") - -func testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathAttacherYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathAttacherYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpath-attacher.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathAttacherYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathAttacherYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpath-attacher.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathProvisionerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x92\x4f\x8f\xd3\x3c\x10\xc6\xef\xf9\x14\xa3\xea\x3d\xbc\x1c\xdc\x6c\x61\x57\x42\x96\x7a\xa8\x28\x37\x58\x2a\x2a\x71\x9f\x3a\x43\x6b\xd5\xff\xb0\xc7\x41\xf9\xf6\xc8\x49\x16\x92\x14\x76\xc1\xa7\xc8\xfe\xcd\x33\xf3\x3c\x93\xab\x76\x8d\x84\x23\xc5\x56\x2b\xaa\x30\xe8\x2f\x14\x93\xf6\x4e\x42\xbb\xa9\x2c\x31\x36\xc8\x28\x2b\x00\x87\x96\x24\xa8\xa4\xc5\xc5\x27\x0e\xc8\x17\x11\xa2\x6f\x75\x81\x29\x56\x00\x06\x4f\x64\x52\x41\x01\x30\x84\x67\xd8\x14\x48\x15\x2e\x91\x21\xc5\x3e\xfe\x4d\x0d\x40\xf0\x91\x47\x79\x31\x4e\xd3\x64\x6b\xbb\xfe\x66\x78\x96\xb0\x79\xfd\xe6\xfe\xa1\xaa\x84\x10\xd5\xe8\x8c\x91\xe9\x6b\x36\x47\xe2\x99\x3b\x0c\x21\xd5\xff\x66\xf1\xd7\xd8\x7d\x58\x8f\x3d\xbd\xfa\x13\xbe\xaa\x00\x22\x05\xa3\x15\x26\x09\x9b\x1b\xbb\x16\x59\x5d\x3e\x4c\x32\x7b\x39\x01\x26\x1b\x0c\x32\x8d\x02\x93\xc9\xcb\x31\x33\xad\x97\xd5\x00\x9e\x0c\xf5\xdf\x83\xa9\x9d\x52\x3e\x3b\x7e\xfc\x99\xc4\xb2\x06\x40\x79\xc7\xa8\x1d\xc5\x49\x2f\x31\xc9\xee\xb6\xa2\x1c\x6d\xf1\x4c\x12\xbe\x65\xec\xd6\xda\xd7\xd7\xb7\x49\x25\x5d\x2f\x78\xd9\xde\xad\xef\xd7\x9b\x49\x19\xc6\xf3\xa4\xcd\xd0\x6a\x25\xa6\x35\xdb\x99\xc5\xf6\x6e\x75\x4b\x17\x02\x9b\x26\x52\x4a\xdb\xff\xfe\xdf\xed\xf7\x9f\xdf\x1f\x8f\xaf\x7e\x07\x7a\xe7\x48\xb1\xf6\x4e\xb0\xb6\xe4\x33\x6f\x37\x0f\x69\x0a\x92\x6b\x97\xe3\x0c\xce\x47\xd5\xd9\x1b\x40\x8b\x26\x93\x84\x7a\xf4\xba\x4e\x5e\x5d\x97\xa1\x1c\xb2\x31\x07\x6f\xb4\xea\x24\xec\xcc\x77\xec\xd2\x84\x68\xbd\xc9\x96\x3e\x96\x9d\xdc\xe4\x60\xcb\xed\x01\xf9\x32\x34\x58\xb4\x1e\xc6\x2a\x0d\x89\x45\xa3\x9f\x76\x31\x08\xce\x56\x57\xc2\xeb\x65\x66\x0a\x61\x10\x6e\x31\xd6\x46\x9f\xea\x6b\x3e\x91\x21\xae\x83\xc9\x67\xed\x52\xbd\x48\x7d\x56\xca\x5d\x20\x09\x7b\x1d\xfb\xdf\xbd\xfb\x14\xdf\x45\x42\xa6\xea\x99\xe1\x7e\x04\x00\x00\xff\xff\x2e\xa1\xfa\x9d\x87\x04\x00\x00") - -func testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathProvisionerYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathProvisionerYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpath-provisioner.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathProvisionerYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathProvisionerYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpath-provisioner.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathpluginYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x54\xc1\x6e\xdb\x38\x10\xbd\xfb\x2b\x06\x41\x0e\xd9\x83\xac\x04\xd8\x05\x16\x04\x7c\x48\x62\x2f\x10\x6c\xe3\x18\x4d\xdb\x6b\x30\x21\x27\xf6\xc0\x14\xa9\x92\x94\x12\xff\x7d\x41\xc9\x49\x45\x49\x76\xd2\xde\xea\x93\x4c\xbd\x79\xf3\xf8\xe6\x69\xb6\x6c\x94\x80\x39\x52\x61\xcd\x3d\x85\x09\x96\xfc\x8d\x9c\x67\x6b\x04\x60\x59\xfa\xbc\xbe\x98\x14\x14\x50\x61\x40\x31\x01\x30\x58\x90\x00\xe9\x39\xdb\x58\x1f\x4a\x0c\x9b\x52\x57\x6b\x36\x13\x5f\x92\x8c\x00\x4f\x9a\x64\xb0\x2e\x3e\x03\x14\x18\xe4\xe6\x13\x3e\x92\xf6\xed\x01\x44\xd6\x51\x02\x80\x40\x45\xa9\x31\xd0\xbe\xb4\xd3\x35\xfe\x74\xc2\x72\x8c\x07\xe0\x55\x4c\xf3\x4c\xae\x66\x49\x97\x52\xda\xca\x84\xe5\x9b\x7e\x63\x15\x65\x1e\xf7\xa8\x48\xb2\xa4\xf0\x6c\xdd\x56\x40\x70\x15\xed\xcf\xa5\x35\x01\xd9\x90\xeb\x74\xce\xf6\x2e\x28\xc7\x35\xb9\xcc\xd1\x9a\x7d\x70\xe8\xde\x00\x00\x5c\xe0\x9a\x04\x7c\xaf\x70\x37\x65\x9b\x6f\xff\xf5\xd2\x73\xde\x2f\x10\xf5\xf9\xf4\xef\xe9\x45\xa7\x0e\xdd\xba\xd3\xa8\x6d\x96\x65\xf5\xec\x9f\xc1\x59\xbc\x02\x2a\xe5\xc8\xfb\x59\x1e\xc9\xa5\xe7\xa9\xb7\x72\x3b\x40\x6e\xab\x47\xd2\x14\xde\xda\x06\xb6\x26\x8b\x86\xcd\xf2\x1a\x5d\xae\xf9\x31\xdf\x43\xf2\xd6\x42\x9f\x77\x6d\xcd\xea\xf3\x31\x6e\x32\x75\x5f\x68\xeb\xca\xff\x5f\xaf\x16\x0f\xcb\xbb\xf9\xe2\x61\x79\x79\xbb\x48\x20\x00\x35\xea\x8a\xfe\x73\xb6\x10\xbd\x17\x00\x4f\x4c\x5a\x7d\xa6\xa7\xe1\x9b\x38\xeb\x9f\xa9\xac\x2f\x46\x00\x4d\xf1\x0a\xc3\x46\x34\xb3\x9f\xc6\xe1\xc6\x51\xf7\x47\xb2\xaa\xb4\x5e\x59\xcd\x72\x27\xe0\x52\x3f\xe3\xce\x77\x10\xb5\xd5\x55\x41\xb7\x31\x26\xc9\x10\x32\x28\xe2\x59\x4b\x1f\xbd\x48\x04\xb4\xb7\x8e\xee\x50\xc8\x14\xbb\x83\x85\x5d\xff\x47\x18\x92\xf1\x74\x79\x5e\x8d\x7d\x1d\xc8\xbb\x31\x4b\x3f\x88\x8f\x85\xec\xa4\x49\xd9\xc9\xf0\x94\x8c\x2a\x2d\x9b\x30\x3b\x3d\xbb\xbe\xbf\x79\x58\x2c\xe7\xab\xbb\x9b\xe5\x97\xbf\x46\xa0\xd1\x74\x56\xb3\xd3\xb3\x34\x02\x09\xf4\x60\x6c\xba\xe4\x63\xa1\x11\x50\x19\x7e\x11\x79\x7e\x2c\xec\x7f\x7a\x02\x3d\xc9\xca\x71\xd8\x5d\x5b\x13\xe8\x25\xa4\x42\x4a\xc7\x35\x6b\x5a\x93\x4a\x36\x14\x1c\x49\xee\x7b\xd9\x3d\x9a\xde\x7e\xf1\x60\x59\x58\xe5\x7b\x6c\x2d\xdc\xd9\x12\xd7\x4d\x8e\x05\x5c\xb1\x62\x47\x32\xfe\x41\x3d\xda\xbb\xa9\x69\x22\xd6\xe9\xdf\x5e\x28\xd9\xb9\x31\xd5\x8d\x92\xd4\x94\x03\xda\xc6\x17\x59\x52\x1a\x76\x25\x09\x98\x37\xf2\xac\xdb\xdd\xb9\x6b\x47\x18\xba\xb6\x1e\x34\xe7\x57\xd5\xf4\x9d\xfa\x68\xeb\x51\x6f\x7e\xd7\x8c\x63\x0a\x06\x9d\x07\xdb\xe8\x47\x00\x00\x00\xff\xff\x2f\x11\xe9\xaf\x29\x08\x00\x00") - -func testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathpluginYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathpluginYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpathplugin.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathpluginYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathpluginYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpathplugin.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiHostpathHostpathV0E2eTestRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x91\xcf\x4a\x03\x41\x0c\x87\xef\xf3\x14\x01\x2f\x0a\x4e\x45\x4f\xb2\x37\xff\x80\xd7\xa5\x15\xef\xe9\x4c\xba\x9b\x76\x3a\x19\x26\x99\x85\xfa\xf4\xb2\x14\xf7\x52\x14\xc1\xeb\x4c\xf2\x25\xbf\x2f\x57\x50\x2a\x4f\x9c\x28\x0e\x14\xa1\x97\x08\x1b\x0a\xad\xb2\x9d\xa0\x97\xc4\xe1\x74\x0b\xa5\xd2\xc4\xd2\x34\x9d\x20\xd2\x8e\x33\x45\xd8\x37\x35\xd8\x49\x85\x21\x50\xff\x0a\x13\x23\xf4\x67\xcc\x40\xf1\x9d\xd4\xfa\x4d\xff\x92\x9a\x1a\xd5\xb5\x24\x7a\xe6\x1c\x39\x0f\xd7\x37\xee\xc0\x39\x76\x70\xf9\xe5\xb0\xf0\x07\x55\x65\xc9\x1d\xd4\x2d\x86\x15\x36\x1b\xa5\xf2\x27\x1a\x4b\x5e\x1d\x1e\x75\xc5\x72\x37\xdd\xbb\x23\x19\x46\x34\xec\x1c\x40\xc6\x23\x75\x50\xb4\xf8\xa0\xec\x47\x51\x2b\x68\xa3\xaf\x92\xc8\x69\xdb\xee\x29\x98\xce\x75\x1e\xce\x73\x37\x54\x27\x0e\xf4\x14\x82\xb4\x6c\x0e\xe0\x1b\x31\xb7\xa3\x19\x86\x91\xea\xf2\xac\x05\x03\x75\x73\x66\x6c\xc9\xfe\x8a\xc9\x12\xc9\x2b\xfe\x93\x52\xaa\x4c\x3c\xdb\xf8\x79\x9f\x39\xe5\x9a\x76\x73\xbe\x0b\xab\x8b\x1b\x7a\x20\x6f\xa4\xe6\xcb\x72\x1e\x5f\xb4\x38\x00\x2c\xfc\x56\xa5\x95\x5f\x74\xbb\xaf\x00\x00\x00\xff\xff\x91\xa9\xbf\x69\x1d\x02\x00\x00") - -func testE2eTestingManifestsStorageCsiHostpathHostpathV0E2eTestRbacYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiHostpathHostpathV0E2eTestRbacYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/e2e-test-rbac.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiHostpathHostpathV0E2eTestRbacYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiHostpathHostpathV0E2eTestRbacYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/e2e-test-rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xcc\xb1\x8a\xc3\x30\x0c\x87\xf1\x5d\x4f\xa1\x17\x48\x8e\xdb\x0e\x8f\x77\xb7\x74\x28\x14\x0a\xdd\x85\xfd\x27\x11\xb1\xad\x60\xa9\x81\xbe\x7d\x29\x9d\xba\x7e\x1f\xfc\x64\xd7\x1b\x86\xab\xf5\xc4\x1e\x36\x64\xc1\xbc\xfd\xf8\xac\xf6\x75\x7c\xd3\xa6\xbd\x24\xbe\xbe\xfb\x5f\x15\x77\x6a\x08\x29\x12\x92\x88\xb9\x4b\x43\xe2\xec\x3a\xad\xe6\xb1\x4b\xac\x93\x67\xda\x87\x1d\xfa\x12\x31\x3e\x27\x0d\xe4\x2a\xda\x2e\x56\x35\x3f\x12\xff\xa3\x22\x40\x87\xd5\x7b\xc3\xaf\xf6\xa2\x7d\x39\x5b\x41\xe2\x53\x6b\x28\x2a\x01\x7a\x06\x00\x00\xff\xff\x20\x58\xb7\x12\xa0\x00\x00\x00") - -func testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/usage/csi-storageclass.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/hostpath/usage/csi-storageclass.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiMockCsiMockClusterDriverRegistrarYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x53\xcd\x8e\xd3\x30\x10\xbe\xf7\x29\x46\x82\x03\x1c\xdc\xa8\x12\x48\xc8\xd2\x1e\xaa\x2d\x37\xa0\x15\x45\xdc\xa7\xce\xb4\x1d\xd5\x89\xcd\x78\x9c\x25\x6f\x8f\x52\x77\xc1\xd9\x95\x56\xec\x9c\x9c\xc9\xe4\xfb\x1b\xe7\xc2\x7d\x6b\x61\xaf\xa8\x74\xcc\x7e\x4f\xba\xc0\xc8\x3f\x49\x12\x87\xde\x02\xc6\x98\x9a\x61\xb5\xe8\x48\xb1\x45\x45\xbb\x00\xe8\xb1\x23\x0b\x2e\xb1\xe9\x82\xbb\x44\x9f\x4f\xdc\x1b\xe7\x73\x52\x12\xd3\x0a\x0f\x24\x46\xe8\xc4\x49\x05\x65\x91\x22\xb9\xe9\xab\x44\x9e\x9c\x06\x99\xce\x00\x1d\xaa\x3b\x7f\xc1\x03\xf9\x54\x1a\x30\x51\xfd\x3f\x2a\x80\x50\xf4\xec\x30\x59\x58\x2d\x00\x94\xba\xe8\x51\xe9\x86\x5e\xa9\x9d\xca\xcf\x88\x5e\x4d\x05\xf0\x68\xe2\x7a\x26\x19\xd8\xd1\xda\xb9\x90\x7b\xfd\x36\x0b\xe3\x36\xe2\x42\xaf\xc8\x3d\x49\xc5\x69\xaa\xdc\x5e\xe4\x2a\xf5\x06\x7e\x6c\x37\x5b\x7b\xb5\x89\x8e\xe0\x81\xf5\x0c\xe1\x78\x64\xc7\xe8\x81\x3b\x3c\x51\x35\x7d\x7d\xb6\xf0\x2b\xe3\xb8\xe4\xd0\x5c\x3e\x25\x97\xb8\x79\x89\xca\x6a\x17\x8d\x52\x52\xb3\x5a\xae\x3e\x54\x50\x28\xa7\x4a\x75\x51\x6e\xcc\x70\xf7\xf1\x59\x6f\x82\xc7\xb6\x15\x4a\xe9\xee\xed\xbb\xf5\x66\xf3\xfd\xf3\x7e\xff\xbe\x1a\xa3\x7e\x78\x8a\x54\x32\xb8\xcd\xce\xde\x01\x0c\xe8\x33\x59\x68\x6e\xd2\x97\xe9\x5f\xa0\x7f\x3d\xee\xb2\xf7\xbb\xe0\xd9\x8d\x16\xd6\xfe\x01\xc7\x54\x4d\x24\x72\x59\x58\xc7\xfb\xd0\x2b\xfd\xd6\x39\x77\x14\x1e\xd8\xd3\x89\x5a\x0b\x2a\xb9\x4e\x6f\x08\x3e\x77\xf4\x75\x5a\xe7\xcc\xba\x81\x6e\xea\xed\x50\xcf\x45\xd6\x0c\xb0\x58\x99\x44\x92\x9a\x96\x1f\x97\x57\xc0\x66\x8b\x3f\x87\x54\x40\xe6\x82\x0a\xec\x80\xd2\x78\x3e\x34\x97\x7c\x20\x4f\xda\x94\xeb\x98\x9a\x27\x57\xaa\x94\x8e\x91\x2c\x6c\x58\xae\xbf\xd2\xb8\x95\x7b\x21\xd4\xda\xcb\x33\x55\x7f\x02\x00\x00\xff\xff\xa0\x32\x38\x75\xe0\x03\x00\x00") - -func testE2eTestingManifestsStorageCsiMockCsiMockClusterDriverRegistrarYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiMockCsiMockClusterDriverRegistrarYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-mock-cluster-driver-registrar.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiMockCsiMockClusterDriverRegistrarYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiMockCsiMockClusterDriverRegistrarYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-mock-cluster-driver-registrar.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x92\x3f\x8f\x13\x31\x10\xc5\xfb\xfd\x14\x53\x50\x40\xb1\x59\x52\x20\x21\x4b\x57\x44\x17\x3a\xfe\x44\x44\xa2\x9f\x78\x87\x64\x14\xff\xc3\x1e\x1b\xf6\xdb\xa3\x8d\x73\x60\xdf\x09\x31\xd5\x6a\xfc\xf6\x37\xef\x8d\x7d\x65\x37\x2b\x38\x0a\x0a\x7d\xcf\xe6\x48\x32\x60\xe0\x6f\x14\x13\x7b\xa7\x00\x43\x48\x53\xd9\x0e\x96\x04\x67\x14\x54\x03\x80\x43\x4b\x0a\x74\xe2\xd1\x7a\x7d\x0d\x26\x9f\xd9\x8d\x28\x82\xfa\x42\x71\x48\x81\xf4\xaa\x4a\x64\x48\x8b\x8f\xeb\x37\x80\x45\xd1\x97\x8f\x78\x22\x93\x6a\x03\x56\xf4\xbf\x29\x00\x91\x82\x61\x8d\x49\xc1\x76\x00\x10\xb2\xc1\xa0\xd0\x9d\xd6\xb8\x59\xcb\x74\xe0\xff\xa2\x01\x9e\x4c\xde\xbe\x29\x16\xd6\xb4\xd3\xda\x67\x27\x9f\xbb\x70\x77\x89\xf6\x4e\x90\x1d\xc5\x66\xc6\xd8\xec\xa1\x63\xd7\x62\x8b\x67\x52\xf0\x23\xe3\xb2\x61\x3f\x5d\xdf\x27\x9d\x78\x6a\xc5\xaa\x6c\x37\x6f\x37\xdb\xe6\x1f\x8c\xe7\x66\x40\x1d\x32\x8e\xe5\xe1\xdd\x8b\xde\x8d\x33\xcf\x91\x52\x7a\x78\xf5\x7a\xb7\xdf\x7f\xfd\x70\x3c\xbe\x69\x64\xe4\xca\x73\x52\xb5\x7b\xd7\x76\x67\x00\x05\x4d\x26\x05\xd3\xdd\xe3\x26\xfd\xcd\xfe\x27\xcc\x21\x1b\x73\xf0\x86\xf5\xa2\x60\x67\x7e\xe2\x92\x1a\x45\x22\x9d\x23\xcb\xf2\xe8\x9d\xd0\x2f\xe9\x67\x87\xc8\x85\x0d\x9d\x69\x56\x20\x31\x53\x73\x58\xbc\xc9\x96\x3e\xad\x9b\xef\xa2\x8f\x60\xd7\xde\x01\xe5\x52\x6d\x75\xc0\x1a\x65\x35\x49\x32\xce\xfc\xb4\xf7\x0a\xeb\xee\xe8\xe2\x53\x85\xf4\x86\x2a\xb6\x60\x9c\x0c\x9f\xa6\x6b\x3e\x91\x21\x99\xea\x4b\x49\xd3\xb3\xdb\xaf\x25\x4b\x20\x05\x7b\x8e\xb7\x57\xbd\x7c\x89\x8f\x91\x50\xda\x2c\x2f\x5c\x0d\xbf\x03\x00\x00\xff\xff\x89\xca\xad\x7b\x5c\x03\x00\x00") - -func testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x92\x4f\x8f\x13\x31\x0c\xc5\xef\xfd\x14\xd6\x8a\x03\x1c\x66\x47\x7b\x40\x42\x91\xf6\x50\x6d\xb9\xf1\xa7\xa2\x12\x77\x37\x63\x5a\xab\x99\x24\xd8\xce\xc0\xf0\xe9\xd1\x6c\xba\x90\xd9\x15\xc2\xa7\x91\xf3\xe6\xe7\xf7\x9c\x5c\x38\x0e\x0e\x0e\x86\x46\xdf\x4a\x38\x90\x6d\x30\xf3\x57\x12\xe5\x14\x1d\x60\xce\xda\x4f\x77\x9b\x91\x0c\x07\x34\x74\x1b\x80\x88\x23\x39\xf0\xca\xdd\x98\xfc\x25\x87\x72\xe2\xd8\x09\x29\xff\x22\xd9\x68\x26\xbf\x88\x94\x02\x79\x4b\xb2\x7c\x03\x8c\x68\xfe\xfc\x01\x8f\x14\xb4\x36\x60\x21\xff\x13\x02\x20\x94\x03\x7b\x54\x07\x77\x1b\x00\xa3\x31\x07\x34\xba\xc2\x1a\x2f\x4b\x85\x15\xf7\x7f\x64\x80\x27\x8b\x8f\xdf\x24\x13\x7b\xda\x7a\x9f\x4a\xb4\x4f\xab\x64\x57\x89\x4f\xd1\x90\x23\x49\x33\xa2\x6b\x96\xd0\xa2\x6b\xf1\x88\x27\x72\xf0\xbd\xe0\x7c\xcb\xa9\xbf\xbc\x53\xaf\xdc\x37\x5a\xe7\x31\xa2\xcc\xcd\x2f\x28\xa7\x06\x5f\x47\xdc\x74\xdd\x74\xff\xf6\xe6\x65\x77\x21\xe1\x30\x08\xa9\xde\xbf\x7a\xbd\xdd\xed\xbe\xbc\x3f\x1c\xde\xb4\x42\x8a\xd3\x73\x5a\x35\x7c\x15\xaf\xce\x00\x26\x0c\x85\x1c\xf4\x57\x9b\xb7\xfa\x37\xfd\x9f\x3c\xfb\x12\xc2\x3e\x05\xf6\xb3\x83\x6d\xf8\x81\xb3\x36\x0a\x25\x5f\x84\x6d\x7e\x48\xd1\xe8\xa7\xad\x67\x67\xe1\x89\x03\x9d\x68\x70\x60\x52\xa8\x39\x9c\x52\x28\x23\x7d\x5c\x76\xbf\x8a\xdf\xc1\xb8\xf4\xf6\x68\xe7\x6a\x6b\x05\xac\x51\x16\x93\x64\xdd\xc0\x4f\xab\xaf\xb0\xd5\x2d\x9d\x93\x56\xc8\xda\x50\xc5\x4e\x28\x7d\xe0\x63\x7f\x29\x47\x0a\x64\x7d\x7d\x2a\xda\x3f\xbb\xff\x5a\x36\x67\x72\xb0\x63\x79\x7c\xd5\xf3\x67\x79\x10\x42\x6b\xb3\xbc\x70\xf5\x3b\x00\x00\xff\xff\x54\x6b\xa6\x74\x5a\x03\x00\x00") - -func testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiMockCsiMockDriverYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x55\x4d\x6b\xdb\x4c\x10\xbe\xeb\x57\x0c\xe1\x3d\xbc\x3d\xc8\xaa\x0a\x81\xb2\xe0\x83\x13\xbb\x10\xda\x38\x26\x6e\x7b\x35\x9b\xd5\xd8\x5e\xbc\xda\x55\x77\x47\x6a\xf5\xef\xcb\x4a\x8a\xa3\xcf\x34\x09\x14\xea\x93\xd8\xf9\x7e\x9e\x67\xc6\x27\xa9\x13\x06\x5b\xe2\x84\xfb\x5c\x6d\x91\x02\x9e\xc9\xef\x68\x9d\x34\x9a\x01\xcf\x32\x17\x15\x71\x90\x22\xf1\x84\x13\x67\x01\x80\xe6\x29\x32\x10\x4e\x86\xa9\x11\xa7\x4c\xe5\x07\xa9\x03\x97\xa1\xf0\x46\x87\x0a\x05\x19\xeb\xbf\x01\x52\x4e\xe2\xf8\x85\x3f\xa0\x72\xf5\x03\xf8\x8c\x83\x60\x00\x8b\x99\x92\x82\x3b\x06\x71\x00\x40\x98\x66\x8a\x13\x36\x49\x5a\xb5\xfd\x4f\x75\xf2\x4d\x65\x04\x78\x6c\xa9\xfa\x46\x5b\x48\x81\x0b\x21\x4c\xae\x69\xdd\x99\xa0\x71\x11\x46\x13\x97\x1a\xad\x63\x41\x70\x4e\x1e\xb6\xc6\xcd\xac\x29\xa4\xc7\x05\xed\xd9\x0e\x20\x53\x7e\x40\x06\x3f\x72\x5e\xce\xa4\x89\x4e\x1f\x9d\x70\x32\xea\xf9\xb3\x22\x9e\xbd\x9f\xc5\xad\x30\x6e\x0f\xad\x19\xea\x52\x17\x61\x3b\x66\xee\x73\x1c\x8d\xa3\x8c\xd3\xf1\x62\xe8\xea\xcd\x3c\x49\x2c\x3a\x37\xff\xef\xff\xc5\x72\x79\xbf\xda\x6e\xdf\x8d\x39\x1a\xad\x51\x90\x34\x3a\x24\x99\xa2\xc9\x69\x1e\x5f\xba\xb6\x23\xea\xa2\xdf\x4b\x3d\x76\x93\xb5\x63\x03\x28\xb8\xca\x91\x41\xd4\x0c\x3a\x73\x4f\x28\x9e\x11\xd9\xe4\x4a\x6d\x8c\x92\xa2\x64\xb0\x50\x3f\x79\xe9\x5a\x1e\x85\x51\x79\x8a\xb7\x9e\x8b\x01\x08\xa9\x7f\xdd\x70\x3a\xd6\x05\x7a\xa5\xeb\xb6\x7c\x41\xa4\x30\x91\x76\x84\xaa\xc4\xca\x02\x6d\x68\xf1\x20\x1d\x59\xfe\x32\xae\xb4\x49\x30\xec\x47\xd6\xac\x7d\xf8\x03\x6b\x61\x58\xcc\x2f\x07\x6f\x6d\x76\xa6\x80\xaa\x3d\x4f\xf9\x03\x2a\xa4\x73\xd9\x8a\x28\xcf\xf9\x3c\x2a\xb8\x8d\x94\x7c\x88\x1a\x97\xa8\x56\xb7\x8b\x1e\xa5\x3b\x96\x74\x92\xcb\xcf\xdf\xae\x56\xbb\xf5\xdd\x72\xb5\x5b\x2f\x6e\x57\x63\x94\x7e\xb2\x26\x65\x3d\x03\xc0\x5e\xa2\x4a\xee\x71\x3f\xb4\xf8\xdd\x7b\xba\x15\x45\x3c\xe2\x50\x05\xd7\x6c\xfa\x7d\x9c\x79\x9c\xfd\xfa\xbd\x4a\x2e\x0e\x45\x6e\x25\x95\xd7\x46\x13\xfe\xa2\x6e\x23\x99\x95\x85\x54\x78\xc0\x84\x01\xd9\x1c\x5f\x20\xb3\xe7\x45\x36\x90\xd8\x54\x60\x9b\xb0\x91\x0c\x1d\x3e\xc7\xa5\x9a\x8e\x2c\xce\x40\x9e\xde\xa9\x91\xa6\x17\x64\xdc\x39\x23\x93\x6c\x5f\x6f\x6f\x76\xab\xf5\x72\x73\x77\xb3\xfe\xfa\xba\xf5\xfd\xf7\x15\xf3\x56\x3d\x0c\x94\x76\xb3\x5f\x1b\xda\x58\x74\xa8\xe9\xef\x9c\xa7\xe9\xe0\xc1\x6e\x9b\xc4\xf5\xb2\xd5\xee\xd6\x64\xfc\x50\xa9\x88\xc1\x95\x4c\xa4\xad\x6f\x39\x57\xa3\xb5\xab\x98\xcc\x48\xdd\xae\x5f\x0f\xd4\x9a\x25\x04\xff\xc7\x52\x75\xd2\x05\x6f\xa2\xb7\xde\xdd\xe9\xc4\x50\x99\x21\x83\x65\xd5\x97\xb1\xe5\x9d\xbd\xb6\xc8\xa9\x8d\xfb\x24\x2a\xaf\x6d\xa3\x0f\xd1\x4b\x4b\x8f\x82\xf2\x56\x14\x76\xcd\x62\x97\xcf\xb5\x32\x68\x61\x70\x0d\x7e\x07\x00\x00\xff\xff\x1e\xa3\xf2\xb1\x79\x09\x00\x00") - -func testE2eTestingManifestsStorageCsiMockCsiMockDriverYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiMockCsiMockDriverYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiMockCsiMockDriverYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiMockCsiMockDriverYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiMockCsiMockRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x93\xb1\x8e\x13\x31\x10\x86\x7b\x3f\xc5\x48\x34\x20\xe1\xa0\x50\xa1\xed\x80\x82\x76\x95\x20\xfa\x89\x3d\xd9\x0c\x71\x6c\x6b\x3c\xb6\x48\x9e\x1e\xad\x02\x51\xee\x72\x39\x5d\x8a\xcb\x6d\xbb\xda\xf9\xf7\x9b\xef\x9f\xc5\xcc\xbf\x48\x0a\xa7\xd8\x41\x9b\x9b\x2d\x47\xdf\xc1\x92\xa4\xb1\xa3\xaf\xce\xa5\x1a\xd5\xec\x48\xd1\xa3\x62\x67\x00\x22\xee\xa8\x03\x57\xd8\xee\x92\xdb\x1a\x63\xad\xfd\x37\xf4\x3d\xd4\xa2\x24\x8b\x14\xe8\x1b\x47\xcf\x71\x30\xe7\xe1\xb2\x42\x37\xc3\xaa\x9b\x24\x7c\x40\xe5\x14\x67\xdb\x2f\x65\xc6\xe9\x53\x9b\x5f\xf9\x82\x4b\x51\x25\x85\x40\x62\x51\x15\xdd\x86\xc4\x4a\x0a\x64\x4a\x5d\xfd\x26\xa7\x65\x7c\xdd\xc2\x93\xcc\x00\x17\xac\xff\x1f\x95\x8c\x8e\x3a\xf0\xb4\xc6\x1a\xd4\x8c\x89\x0b\x5a\x8f\x59\x17\x8b\x9c\x70\xe8\x8f\x92\x44\x0c\x67\x20\x35\x46\x12\x03\x80\x99\x7f\x48\xaa\xf9\x99\x15\xef\xa6\x29\x4b\x6a\x3c\x06\x4d\xc0\xd4\x03\x96\x29\xca\x72\xc7\x70\xeb\x85\xdb\xc8\x48\x03\x17\x15\x7c\x33\x73\xd7\x79\x6e\xb6\xf7\x0e\xb2\x70\xe3\x40\x7e\x20\x0f\x7d\xf2\xb0\x24\x57\x85\x75\x0f\x7d\x0a\xec\xf6\x1f\x21\x0b\x35\x4e\xb5\x84\xfd\x48\xc9\x91\x3c\x34\x46\xe8\x8f\x73\x03\xf9\x9f\x54\xb4\x5f\xf6\x97\x15\xbc\xff\xf0\x2a\xed\xe4\x92\xed\xa3\x86\xa6\xd2\x0c\x7d\x26\xab\x54\xd4\xe6\x93\x1d\x9b\x4b\x7e\x61\x23\x77\x3a\x67\xa1\xc2\x87\x09\xfc\xf7\x27\x8e\x5b\xae\xf6\x6f\x00\x00\x00\xff\xff\xc8\x91\x6e\x9c\x87\x06\x00\x00") - -func testE2eTestingManifestsStorageCsiMockCsiMockRbacYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiMockCsiMockRbacYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-mock-rbac.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiMockCsiMockRbacYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiMockCsiMockRbacYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-mock-rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiMockCsiStorageclassYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\xcc\xb1\xaa\x02\x31\x10\x46\xe1\x7e\x9e\x62\x5e\x60\xf7\x72\x3b\x49\xa9\x36\x16\x82\x20\xd8\x0f\xc9\xcf\x32\x6c\x26\xb3\x64\xe2\x82\x6f\x2f\x62\x61\x7b\x0e\x7c\xb2\xe9\x03\x3d\xd4\x5b\xe2\x18\xde\x65\xc1\xbc\x1e\x62\x56\xff\xdb\xff\x69\xd5\x56\x12\xdf\xbf\xfd\x54\x25\x82\x0c\x43\x8a\x0c\x49\xc4\xdc\xc4\x90\x38\x87\x4e\xe6\x79\x9d\x22\xd3\xd6\x7d\xd7\x8f\x86\xfe\x1b\xd4\x91\xab\xa8\xdd\xbc\x6a\x7e\x25\x3e\xa3\x62\x80\x76\xaf\x4f\xc3\x51\x5b\xd1\xb6\x5c\xbd\x20\xf1\xc5\x0c\x45\x65\x80\xde\x01\x00\x00\xff\xff\x5a\x2e\xc6\x9d\x98\x00\x00\x00") - -func testE2eTestingManifestsStorageCsiMockCsiStorageclassYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiMockCsiStorageclassYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-storageclass.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiMockCsiStorageclassYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiMockCsiStorageclassYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/csi-storageclass.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testE2eTestingManifestsStorageCsiMockE2eTestRbacYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x8f\x31\x4e\x04\x31\x0c\x45\xfb\x9c\xc2\x17\xc8\x22\xa8\x50\x3a\xa0\xa0\x5f\x24\x7a\x6f\xf2\x77\x30\x93\x49\x22\xdb\x99\x82\xd3\xa3\x11\x62\x1b\x24\x6a\xfb\x3d\xfb\xad\xd2\x4a\xa2\x97\x3a\xcd\xa1\xe7\x5e\xf1\x2c\xad\x48\x5b\x02\x0f\x79\x87\x9a\xf4\x96\x48\x2f\x9c\x4f\x3c\xfd\xa3\xab\x7c\xb1\x4b\x6f\xa7\xf5\xd1\x4e\xd2\xef\xf6\xfb\xb0\xc1\xb9\xb0\x73\x0a\x44\x8d\x37\x24\x1a\x36\x62\x36\x89\x5b\xcf\x6b\xd4\x5e\x11\x6c\x5e\x3e\x91\xdd\x8e\x9d\x48\x3f\x37\xdf\xa0\xbb\x64\x3c\xe5\xdc\x67\xf3\x40\xf4\x8b\x1f\x68\x51\xd9\xa1\x51\xb1\x88\xb9\xb2\xde\xc6\x36\x38\x23\x51\xc1\x95\x67\xf5\x70\xd8\xcf\xb8\x1e\xde\x3f\x25\xb7\x7f\xf0\x80\xe8\x30\x8f\x43\x65\x97\x8a\x05\x25\x0e\x1b\x81\x88\x87\xbc\x6a\x9f\xe3\x9f\xc4\xf0\x1d\x00\x00\xff\xff\x10\xd8\xa2\xf1\x22\x01\x00\x00") - -func testE2eTestingManifestsStorageCsiMockE2eTestRbacYamlBytes() ([]byte, error) { - return bindataRead( - _testE2eTestingManifestsStorageCsiMockE2eTestRbacYaml, - "test/e2e/testing-manifests/storage-csi/mock/e2e-test-rbac.yaml", - ) -} - -func testE2eTestingManifestsStorageCsiMockE2eTestRbacYaml() (*asset, error) { - bytes, err := testE2eTestingManifestsStorageCsiMockE2eTestRbacYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/e2e/testing-manifests/storage-csi/mock/e2e-test-rbac.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x53\xd1\x6e\xe3\x36\x10\x7c\x2e\xbf\x62\x10\xdf\x43\x02\xc4\x54\xec\x97\x43\x5d\x04\x85\x2e\x71\x13\xe1\x12\xab\xb5\x9c\x0b\xf2\x54\xd0\xd2\x4a\x5a\x84\x22\x55\x92\x8a\xed\xbf\x2f\x28\x27\xbd\xfa\x4e\x6f\xe4\xce\xcc\x0e\x77\x56\x13\xdc\xd8\xfe\xe0\xb8\x69\x03\xe6\x57\xb3\xcf\xd8\xb4\x84\xaf\xc3\x96\x9c\xa1\x40\x1e\xe9\x10\x5a\xeb\xbc\x14\x13\x31\xc1\x03\x97\x64\x3c\x55\x18\x4c\x45\x0e\xa1\x25\xa4\xbd\x2a\x5b\xfa\xa8\x5c\xe2\x1b\x39\xcf\xd6\x60\x2e\xaf\x70\x1e\x01\x67\xef\xa5\xb3\x8b\xdf\xc4\x04\x07\x3b\xa0\x53\x07\x18\x1b\x30\x78\x42\x68\xd9\xa3\x66\x4d\xa0\x7d\x49\x7d\x00\x1b\x94\xb6\xeb\x35\x2b\x53\x12\x76\x1c\xda\xb1\xcd\xbb\x88\x14\x13\xbc\xbc\x4b\xd8\x6d\x50\x6c\xa0\x50\xda\xfe\x00\x5b\xff\x1f\x07\x15\x46\xc3\xf1\x6b\x43\xe8\x17\x49\xb2\xdb\xed\xa4\x1a\xcd\x4a\xeb\x9a\x44\x1f\x81\x3e\x79\xc8\x6e\x96\xab\x62\x39\x9d\xcb\xab\x91\xf2\x64\x34\x79\x0f\x47\xff\x0c\xec\xa8\xc2\xf6\x00\xd5\xf7\x9a\x4b\xb5\xd5\x04\xad\x76\xb0\x0e\xaa\x71\x44\x15\x82\x8d\x7e\x77\x8e\x03\x9b\xe6\x12\xde\xd6\x61\xa7\x1c\x89\x09\x2a\xf6\xc1\xf1\x76\x08\x27\xc3\xfa\x70\xc7\xfe\x04\x60\x0d\x94\xc1\x59\x5a\x20\x2b\xce\xf0\x25\x2d\xb2\xe2\x52\x4c\xf0\x9c\x6d\xee\xf3\xa7\x0d\x9e\xd3\xf5\x3a\x5d\x6d\xb2\x65\x81\x7c\x8d\x9b\x7c\x75\x9b\x6d\xb2\x7c\x55\x20\xff\x03\xe9\xea\x05\x5f\xb3\xd5\xed\x25\x88\x43\x4b\x0e\xb4\xef\x5d\xf4\x6f\x1d\x38\x8e\x91\xaa\x38\xb3\x82\xe8\xc4\x40\x6d\x8f\x86\x7c\x4f\x25\xd7\x5c\x42\x2b\xd3\x0c\xaa\x21\x34\xf6\x8d\x9c\x61\xd3\xa0\x27\xd7\xb1\x8f\x61\x7a\x28\x53\x89\x09\x34\x77\x1c\x54\x18\x6f\x7e\x7a\x94\x14\x82\x4d\xa9\x87\x8a\x00\x29\x13\x29\x93\x56\x95\xaf\x49\xa7\x5e\x69\xea\x06\x4d\x3e\x79\x54\xaf\x14\xa3\x96\x9d\x32\x5c\x93\x0f\x42\xac\x97\x77\x59\xb1\x59\xbf\xe0\xf7\x6b\x34\xa5\x93\x6c\x93\xd7\xff\x76\x6f\x4a\x73\x9a\x06\xf2\x61\xca\x9d\x6a\xc8\x8b\xbb\x3c\x5d\x3f\x5e\x7f\x16\x7f\x2d\x1f\x9f\xbe\x2d\xd7\x45\x96\xaf\xae\xdf\xe6\xf2\x57\x39\x13\x77\xf9\x43\xba\xba\xfb\xfb\xe3\x76\x26\x67\x73\x39\x13\xb4\xef\xad\x0b\x42\x70\x6d\x2a\xaa\xf1\x7c\x9f\x6e\xc4\xa7\x73\x72\xce\xba\xf1\x10\x83\x50\xdf\xa3\x7e\x53\x8e\x63\xca\x97\xa0\xfd\x02\xd1\x39\x94\xd6\x23\xf2\xda\x50\xb8\x10\x64\x2a\xae\x85\x98\xe0\xcb\xc0\xba\x42\x69\x2b\x3a\xfe\x18\xa9\x6b\xfc\x62\xdc\xb7\x08\x5e\xe0\x96\x1d\x95\xc1\xba\x03\x8c\xea\xc8\xc7\x45\xd9\x46\xca\x11\xbd\xdc\xab\xae\xd7\x74\x24\x9c\xb6\x29\xf5\xe0\x03\x39\xd5\xf3\xf8\x72\x72\x42\x69\xbd\x88\xf5\x69\x69\x4d\x5c\x78\x72\x42\x9c\x1c\x17\xe2\x17\x99\x8c\x13\x9a\x0e\x81\xb5\xf4\xed\xb1\x17\x3e\x9d\x47\xc9\x8b\x23\xbc\x1f\x7c\xfb\xa3\xce\x4f\xbc\x08\xfa\x4e\x93\x7f\xde\xe7\xab\x97\x91\x84\x0f\x89\x1f\x14\xfe\x0d\x00\x00\xff\xff\x52\x0d\xc5\x91\x3e\x04\x00\x00") - -func testImagesMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesMakefile, - "test/images/Makefile", - ) -} - -func testImagesMakefile() (*asset, error) { - bytes, err := testImagesMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x52\x56\x08\x4e\x4d\x55\x28\xc9\x48\x55\xf0\x0f\xf7\x73\x0d\x0a\x56\x48\xc9\x4f\x2e\x56\x48\x2c\x51\xc8\x28\x29\x29\x28\xb6\xd2\xd7\x4f\xcf\xd7\xcb\xb6\x28\xd6\xcb\xcc\xd7\xcf\x2f\xcf\x4b\x2d\x2a\xe6\xe2\x2a\x4a\x2d\xcb\x4c\x2d\x4f\x2d\x2a\xb6\xe2\x52\x50\xd0\x55\xc8\x29\xad\x48\x2c\x06\xb3\x72\xb3\x4b\x73\x13\x4b\x12\xd3\xc1\x9c\xcc\x8a\x94\x4a\xae\xc4\x82\x82\xa2\xfc\x32\xa2\x94\x02\x02\x00\x00\xff\xff\xe0\x46\x77\x03\x89\x00\x00\x00") - -func testImagesOwnersBytes() ([]byte, error) { - return bindataRead( - _testImagesOwners, - "test/images/OWNERS", - ) -} - -func testImagesOwners() (*asset, error) { - bytes, err := testImagesOwnersBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesApparmorLoaderBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\xb3\xe0\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x0a\x10\x00\x00\xff\xff\x5e\x22\x59\x39\x5c\x00\x00\x00") - -func testImagesApparmorLoaderBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesApparmorLoaderBaseimage, - "test/images/apparmor-loader/BASEIMAGE", - ) -} - -func testImagesApparmorLoaderBaseimage() (*asset, error) { - bytes, err := testImagesApparmorLoaderBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/apparmor-loader/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesApparmorLoaderDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x93\x51\x6f\xbb\x36\x14\xc5\xdf\xfd\x29\x8e\xe0\x65\x93\x02\x74\x79\xd8\xc3\xa6\x3d\xf0\x4f\xf2\x5f\x51\x1b\xe8\x20\x59\x15\x4d\x55\xe5\xe0\x1b\xb0\xe6\xd8\xae\x6d\x4a\xf3\xed\x27\x48\x5b\xad\x1b\x4f\x5c\xee\xe5\xf0\xbb\xe7\xe0\x18\x2b\x63\x2f\x4e\x76\x7d\xc0\xf2\xe6\xa7\x9f\xb1\xeb\x09\x77\xc3\x91\x9c\xa6\x40\x1e\xf9\x10\x7a\xe3\x7c\xca\x62\x16\xe3\x5e\xb6\xa4\x3d\x09\x0c\x5a\x90\x43\xe8\x09\xb9\xe5\x6d\x4f\x1f\x9d\x05\xfe\x24\xe7\xa5\xd1\x58\xa6\x37\xf8\x61\x1a\x88\xde\x5b\xd1\x8f\xbf\xb2\x18\x17\x33\xe0\xcc\x2f\xd0\x26\x60\xf0\x84\xd0\x4b\x8f\x93\x54\x04\x7a\x6b\xc9\x06\x48\x8d\xd6\x9c\xad\x92\x5c\xb7\x84\x51\x86\x7e\xfe\xcc\xbb\x48\xca\x62\x1c\xde\x25\xcc\x31\x70\xa9\xc1\xd1\x1a\x7b\x81\x39\xfd\x7b\x0e\x3c\xcc\xc0\xd3\xd5\x87\x60\x7f\xc9\xb2\x71\x1c\x53\x3e\xc3\xa6\xc6\x75\x99\xba\x0e\xfa\xec\xbe\x58\x6d\xca\x66\x93\x2c\xd3\x9b\xf9\x95\xbd\x56\xe4\x3d\x1c\xbd\x0c\xd2\x91\xc0\xf1\x02\x6e\xad\x92\x2d\x3f\x2a\x82\xe2\x23\x8c\x03\xef\x1c\x91\x40\x30\x13\xef\xe8\x64\x90\xba\x5b\xc0\x9b\x53\x18\xb9\x23\x16\x43\x48\x1f\x9c\x3c\x0e\xe1\x8b\x59\x1f\x74\xd2\x7f\x19\x30\x1a\x5c\x23\xca\x1b\x14\x4d\x84\x6f\x79\x53\x34\x0b\x16\xe3\xb1\xd8\xdd\x56\xfb\x1d\x1e\xf3\xba\xce\xcb\x5d\xb1\x69\x50\xd5\x58\x55\xe5\xba\xd8\x15\x55\xd9\xa0\xfa\x8e\xbc\x3c\xe0\xae\x28\xd7\x0b\x90\x0c\x3d\x39\xd0\x9b\x75\x13\xbf\x71\x90\x93\x8d\x24\x26\xcf\x1a\xa2\x2f\x00\x27\x73\x05\xf2\x96\x5a\x79\x92\x2d\x14\xd7\xdd\xc0\x3b\x42\x67\x5e\xc9\x69\xa9\x3b\x58\x72\x67\xe9\xa7\x30\x3d\xb8\x16\x2c\x86\x92\x67\x19\x78\x98\x9f\xfc\x6f\xa9\x94\xb1\xef\x75\xb5\x9d\xf0\x37\xc5\x36\xff\x7d\xc3\xd8\xaa\xae\x9a\xe6\xf9\xdb\xbe\xb8\x5f\x3f\xaf\xaa\x87\x03\x5e\xe8\x3c\x24\x7f\x6c\xb6\xfb\xbc\x5e\xdd\x26\x7e\xd2\x6a\x91\x0d\xde\x65\x47\xa9\x33\xc6\xea\x7d\x09\x6e\xff\x06\x17\x62\x32\x9d\xbb\xb3\x71\x50\xf2\xf8\x79\x9f\x24\x83\x15\x3c\x50\xd2\xce\x7f\x5d\x92\x38\xb2\xc6\xcb\x60\xdc\xe5\x23\x67\xa1\x92\x56\xe8\x94\x2b\x2b\x35\x29\xa9\x87\xb7\x39\xef\x6b\x9d\x91\xe8\x28\x0b\xe4\xa7\xc0\x32\x24\x09\x57\xca\x8c\xc9\xa0\x83\x1b\x7c\x20\xc1\x58\xbe\x5e\x43\x19\x3e\x2d\xf7\x09\x76\xad\x19\xdb\x94\xbb\xfa\xf0\x50\x15\xe5\x0e\x7f\x45\xff\xe9\x46\x0b\x44\x89\x32\x5d\x30\x3e\x08\x72\xd7\xfa\xf5\xb7\x65\xf4\xc4\x58\x8c\x35\x9d\xf8\xa0\x02\x84\x74\xd4\xce\xb4\xc1\x60\xe4\xa1\xed\x53\xb6\xda\xae\x27\x39\xeb\xcc\x74\x0e\x7c\xf4\xc4\xfe\x09\x00\x00\xff\xff\xe7\x19\x1e\xa7\x94\x03\x00\x00") - -func testImagesApparmorLoaderDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesApparmorLoaderDockerfile, - "test/images/apparmor-loader/Dockerfile", - ) -} - -func testImagesApparmorLoaderDockerfile() (*asset, error) { - bytes, err := testImagesApparmorLoaderDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/apparmor-loader/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesApparmorLoaderMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x3e\x14\xc5\x9f\xff\xfe\x14\x47\x0d\x0f\xad\x54\x52\xfe\x68\xe2\x81\x09\x4d\x59\xdb\x41\x04\x4a\xa6\x24\x80\x78\x42\x4e\x72\x9b\x5c\xc9\xb5\x33\xdb\x59\xe8\xb7\x9f\x5c\x40\x5a\x35\xbf\xf9\x9e\xe3\xe3\x9f\x8f\x23\xac\xcd\x70\xb0\xdc\xf5\x1e\x97\x17\xff\x5f\xa1\xea\x09\xf7\x63\x4d\x56\x93\x27\x87\x64\xf4\xbd\xb1\x2e\x16\x91\x88\xf0\xc0\x0d\x69\x47\x2d\x46\xdd\x92\x85\xef\x09\xc9\x20\x9b\x9e\x3e\x95\x25\x9e\xc8\x3a\x36\x1a\x97\xf1\x05\xe6\xc1\x30\xfb\x90\x66\x8b\xaf\x22\xc2\xc1\x8c\xd8\xcb\x03\xb4\xf1\x18\x1d\xc1\xf7\xec\xb0\x63\x45\xa0\xb7\x86\x06\x0f\xd6\x68\xcc\x7e\x50\x2c\x75\x43\x98\xd8\xf7\xc7\x6b\x3e\x42\x62\x11\xe1\xe5\x23\xc2\xd4\x5e\xb2\x86\x44\x63\x86\x03\xcc\xee\x6f\x1f\xa4\x3f\x02\x87\xd5\x7b\x3f\x5c\xaf\x56\xd3\x34\xc5\xf2\x08\x1b\x1b\xdb\xad\xd4\xbb\xd1\xad\x1e\xd2\xf5\x36\x2b\xb7\xe7\x97\xf1\xc5\xf1\xc8\xa3\x56\xe4\x1c\x2c\xfd\x1a\xd9\x52\x8b\xfa\x00\x39\x0c\x8a\x1b\x59\x2b\x82\x92\x13\x8c\x85\xec\x2c\x51\x0b\x6f\x02\xef\x64\xd9\xb3\xee\x96\x70\x66\xe7\x27\x69\x49\x44\x68\xd9\x79\xcb\xf5\xe8\x4f\xca\xfa\xa4\x63\x77\x62\x30\x1a\x52\x63\x96\x94\x48\xcb\x19\xbe\x27\x65\x5a\x2e\x45\x84\xe7\xb4\xba\xcb\x1f\x2b\x3c\x27\x45\x91\x64\x55\xba\x2d\x91\x17\x58\xe7\xd9\x26\xad\xd2\x3c\x2b\x91\xff\x40\x92\xbd\xe0\x3e\xcd\x36\x4b\x10\xfb\x9e\x2c\xe8\x6d\xb0\x81\xdf\x58\x70\xa8\x91\xda\xd0\x59\x49\x74\x02\xb0\x33\xef\x40\x6e\xa0\x86\x77\xdc\x40\x49\xdd\x8d\xb2\x23\x74\xe6\x37\x59\xcd\xba\xc3\x40\x76\xcf\x2e\x7c\xa6\x83\xd4\xad\x88\xa0\x78\xcf\x5e\xfa\xe3\xe4\x9f\x47\xc5\x42\x94\xc5\xba\xbc\x51\x46\xb6\x64\x45\x52\xac\xef\xf0\xed\x06\x72\xdf\x5e\x7d\x11\x55\x52\xdc\x6e\xab\xb0\x3f\x9b\xaf\x1f\x8b\x4d\x5a\x2c\xc4\x6d\xfe\x90\x64\xb7\xaf\x4f\xdb\xa2\x4c\xf3\x2c\x68\x4a\x7a\x72\x3e\xc4\xbc\x6e\xd2\x02\xc1\xac\x8d\x6f\xd9\xe2\x6c\xee\x7a\x52\x0a\xc3\xd4\x2e\x16\x82\xde\x06\x63\xbd\x10\x35\xeb\x6b\xf1\x5f\x1c\xaf\x78\x2f\x3b\x3a\x1f\x3d\xab\xd8\xf5\xa8\x59\xe3\x6c\x1e\x60\x16\x42\xc4\x3f\xef\xf2\xec\xe5\x3a\x0c\xc5\x9f\x00\x00\x00\xff\xff\xd1\x6a\xd3\x35\xec\x02\x00\x00") - -func testImagesApparmorLoaderMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesApparmorLoaderMakefile, - "test/images/apparmor-loader/Makefile", - ) -} - -func testImagesApparmorLoaderMakefile() (*asset, error) { - bytes, err := testImagesApparmorLoaderMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/apparmor-loader/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesApparmorLoaderVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesApparmorLoaderVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesApparmorLoaderVersion, - "test/images/apparmor-loader/VERSION", - ) -} - -func testImagesApparmorLoaderVersion() (*asset, error) { - bytes, err := testImagesApparmorLoaderVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/apparmor-loader/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesApparmorLoaderExampleConfigmapYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x94\x5f\x6f\xeb\x44\x10\xc5\xdf\xfd\x29\x46\xea\x0b\x44\x4e\x17\x24\x84\x20\x02\x04\xba\xe8\xbe\x20\x04\x02\x89\x97\xe8\x26\x1a\xef\x8e\xed\xbd\xde\x7f\xcc\x8e\xe3\x86\xd2\xef\x7e\x65\x37\x69\xd3\xdb\x6d\xfb\x90\x97\xf3\x9b\x3d\x7b\x66\x67\xe2\x2b\xf8\x25\x00\xdd\xa0\x4f\x8e\xe0\x5d\x0c\xad\xed\x7e\xc7\x04\x86\x7c\x0c\x59\x18\xc5\x86\x0e\xfa\x38\x41\xe2\xd8\x5a\x47\x19\x34\x06\x68\x08\xb2\x44\x26\x03\x98\xe1\xb7\xb1\x21\x0e\x24\x94\x21\x36\x1f\x49\x4b\xae\x01\x83\x01\x17\xd1\x90\x81\xe6\x58\x5d\x81\xf4\x04\x98\x12\xb2\x8f\xbc\x5e\x00\xc3\xaf\x38\x5f\xf2\x37\xc9\x75\x55\x61\xb2\xff\x10\x67\x1b\xc3\x06\x0e\x5f\x57\x83\x0d\x66\xf3\x18\xa7\xf2\x24\x68\x50\x70\x53\x01\x04\xf4\xb4\x79\x34\x3b\xe7\x3a\x91\x9c\x50\x5f\xe0\xea\x7c\xea\x0a\xde\x5b\x47\x73\x05\x0c\xdf\xe5\x75\xe8\x6c\xb8\x01\x8f\x29\x83\xc4\x25\x9d\xa1\xd6\x06\x2b\x36\x06\x88\xed\xa2\xdc\xd7\x9c\xfc\xaf\x2b\x78\x3c\xb8\x81\xff\xd7\x15\x00\xc0\x95\x0d\xda\x8d\x86\xe0\x07\x19\x03\x36\x8e\xb2\xea\x5c\x6c\xd0\xfd\x54\xdd\x73\x78\xcf\xd1\x43\x2f\x92\xf2\x46\xa9\xce\x4a\x3f\x36\xd7\x3a\x7a\xf5\xb1\x65\xfc\x8f\x9c\x23\xd5\x60\x20\xd5\xb8\xd8\x28\x8f\x59\x88\x95\x89\x7a\x20\xbe\xbf\x69\x9d\x97\xc9\x2c\x66\xa7\x24\x17\xf9\x5b\x87\x5d\xfe\xf1\x0b\x14\x41\xdd\xef\x8d\xcd\x3a\x86\x40\x5a\xc8\xd4\x9e\x8c\x45\xa1\xbd\x21\x47\x42\xe6\x4b\xb8\x5d\x3c\x2e\x23\x63\x33\x0f\x58\xcf\x2d\x67\xd5\x60\xa6\x53\x68\x80\x40\x32\x45\x1e\xc0\x06\x12\x10\x9d\xea\x92\x3e\x9a\xb2\x6e\xb5\x4f\xf5\xd9\xc9\x50\x38\x3e\x60\xc6\xa9\x0c\x12\xea\x81\xe4\x81\xcd\x5d\x9e\xad\x47\x1f\xc7\x20\x4f\x8f\xa9\xc6\x06\xb5\x5a\xc1\xe4\xea\xa7\x72\x8c\x52\xd2\x0d\x1d\x4a\x32\x89\x2e\xc9\x7d\xf4\x54\xd2\x9d\x6d\x5e\x90\xbf\xfd\xa6\x04\x96\x09\x14\x41\x28\xa6\x8c\xa9\x28\x27\x8e\xc5\x98\xfc\x42\xb3\xf9\x85\xc7\xc9\x5c\x7c\x04\xf1\xa9\x58\x7d\xcc\x25\x79\xcc\x7c\x96\x4f\x3a\x8e\xc6\x0a\x2c\xe2\x83\xa6\x0e\xc8\x8a\xc7\xa0\x96\x2d\xbd\x4e\xd6\x5c\xc2\xd9\x63\x09\x79\xbf\xc3\xf6\xa6\x30\x5c\x83\xb9\x07\xcf\xd3\xe0\x6e\xea\x67\xf0\x05\x34\xfb\xce\x58\x62\x7a\xe0\xa7\x02\x8d\x09\x1b\xeb\xac\x1c\x41\xf7\x71\x0a\xf5\x73\xdd\xa0\xde\xc7\x03\x31\x5b\x43\x05\x9c\x49\x46\x6b\xca\xa0\x2b\x82\x40\xb2\x6f\x6c\x30\xfb\x4c\x7c\xb0\x9a\x9e\x76\xf9\xf3\xed\x9f\x7f\xfd\xf1\xee\x4e\xdd\xae\xea\xd5\x6a\xb7\xfd\x6a\xfd\xfd\xea\x43\x3d\x3f\xfa\x30\x7f\x4a\x9d\xca\xbd\x5f\xdd\xc1\x34\x3c\xed\xf1\x7c\x2a\x1f\x33\xff\xbb\x16\xb6\x5d\x47\x0c\xcf\xdf\xe2\x5c\xe7\xc9\xbf\x42\x87\x37\xb0\x8e\x4c\x05\x7e\xfa\x43\x7e\xbe\x2d\xdb\x5d\xfb\x61\xb5\xec\xc1\xb3\xc9\xcc\xb8\xdd\xee\xf2\xab\x7c\x76\xd0\x6f\x54\xe8\xed\xae\x7b\xab\xa4\xdb\xee\xf8\xd5\x1a\xcb\x7e\x42\x26\x45\xad\x9d\x7f\x07\xe4\x65\xd5\x0b\x1b\x75\x39\x0f\xd2\x23\x5b\x39\x7e\x56\x79\x57\x7d\x0a\x00\x00\xff\xff\x7e\x92\x58\xad\x40\x07\x00\x00") - -func testImagesApparmorLoaderExampleConfigmapYamlBytes() ([]byte, error) { - return bindataRead( - _testImagesApparmorLoaderExampleConfigmapYaml, - "test/images/apparmor-loader/example-configmap.yaml", - ) -} - -func testImagesApparmorLoaderExampleConfigmapYaml() (*asset, error) { - bytes, err := testImagesApparmorLoaderExampleConfigmapYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/apparmor-loader/example-configmap.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesApparmorLoaderExampleDaemonYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\xc1\x6e\xdb\x3a\x10\xbc\xeb\x2b\x06\xf0\xd9\x76\x1e\x72\xf3\x2d\xc8\x3b\xbe\xbc\x16\x68\xd0\xfb\x86\x5c\x5b\x44\x49\x2e\x4b\xae\x9c\xf8\xef\x0b\x4a\xb6\x2c\xc9\x71\x50\x9d\x6c\x72\x39\x33\x3b\xb3\xe4\x0a\xaf\x2d\x83\x3f\x28\x24\xcf\xf8\x97\x38\x48\xfc\xc1\x0a\x5b\x7f\x14\xcd\xa4\x2e\x1e\xd0\xca\x3b\xb4\x65\xa4\x2c\x7b\xe7\x19\x5e\xc8\x72\x86\xa1\x88\x37\x86\xe5\xe4\xe5\xc4\x16\x12\x55\x40\x30\xbe\x2b\xca\x19\x2a\xcd\x0a\xd4\xa9\x04\x52\x67\xc8\xfb\x53\x7f\x10\x4f\x29\x3d\xe5\x20\xf9\x02\x57\xb0\xcf\x12\x40\x78\x96\xb8\x77\x87\x17\x4a\x9b\xa6\xa1\xe4\x7e\x72\x2e\x4e\xe2\x0e\x94\x52\xd9\x1e\xff\x69\x7e\xb9\x68\x77\x57\x91\x4d\x60\x25\x4b\x4a\xbb\x06\x88\x14\xb8\xaf\xa4\x0a\xbd\x1e\x14\x36\xc0\x0a\xff\x53\xe0\x92\xc8\x30\x42\x57\x14\x81\xd4\xb4\xd0\x96\x14\xb2\xef\xbb\x9a\xd0\x0e\x38\x7d\xf5\x15\xac\x01\x3c\xbd\xb1\x2f\x95\x07\xb0\x3d\xff\x2d\x57\x49\x6c\x6a\x45\x61\xcf\x46\x25\x0f\xd5\x3d\xdd\x7f\x93\xe3\xf7\x01\x00\xe5\x90\x3c\x29\x9f\x8f\x4e\xda\xab\xdf\xbd\x16\xeb\xe7\x67\x0c\x5f\x71\x00\x17\xa1\xf5\x33\x12\x95\x5c\xe4\x3c\x9e\x5d\x7f\xc9\x03\xb8\x40\x07\xde\xe1\x20\x72\xf0\xbc\x5d\x54\xed\xaa\xfa\xa2\x63\x31\xe5\xc3\x44\x54\x4d\xe3\x95\xbd\xef\x5d\x3f\xcf\x90\x0a\x52\x77\x5e\xda\x8e\x03\x61\x5d\xee\x3d\x3c\x81\x8f\x9c\x4f\x78\x7c\x40\x61\x23\xd1\x96\xcd\x04\x6d\x8d\x75\x12\xef\x67\x2b\x8f\x0f\x65\xf6\x7f\xc4\x1c\x57\x0b\x9b\x2e\x3b\x3d\x3d\x4b\x54\xfe\xd0\x85\xbc\xab\xb2\xcc\xbf\x3b\x97\xb9\x20\x8b\x28\x12\xe7\xe0\x4a\x9d\xc7\x52\x35\x93\xd1\xee\x3a\xd1\x93\xbb\x31\x13\x98\xb2\x3b\x3a\xcf\x07\xb6\x3b\x68\xee\x78\xdc\x3a\x8a\xef\x02\xbf\x48\x17\x75\xe2\xcf\xc5\xfa\x72\x9a\xf6\x10\x6a\xd5\x77\xd2\x76\x87\xed\x7c\x27\x33\xd9\x6f\xd1\x9f\x16\xe0\x37\x09\xba\x68\x7c\x67\xf9\x1e\x28\xab\x19\x73\xdc\xd8\xbf\xc7\xbf\x71\x76\x0e\xfb\xc9\xf6\xa7\x80\x83\x17\xa3\x0d\x43\x06\xb5\xd3\xc9\x14\xf4\x37\xf7\x8d\x07\x7c\xb6\x35\x01\x17\x95\x33\x19\xc5\xbb\xd3\xb6\x4f\x60\x7c\x57\x82\xd8\xce\xf3\xa6\xb9\xef\x6a\x2b\x65\x90\x39\x0d\x6b\x69\xf1\x59\xc9\xdc\x9e\x89\x28\x57\x2e\x33\x62\xb1\xef\x69\x8b\x8e\xa6\xe3\x6c\xfa\x78\xa7\xcb\x52\xcf\xfd\x78\xbe\x50\xf7\x69\x56\x2b\xbc\x50\x82\x8b\xb3\x37\xba\xbe\x1c\x4b\xca\x9b\x48\xcc\xe5\xe9\x9b\x52\x2d\xe4\x8d\x87\xfe\x04\x00\x00\xff\xff\x7d\xc7\xad\x50\x2c\x06\x00\x00") - -func testImagesApparmorLoaderExampleDaemonYamlBytes() ([]byte, error) { - return bindataRead( - _testImagesApparmorLoaderExampleDaemonYaml, - "test/images/apparmor-loader/example-daemon.yaml", - ) -} - -func testImagesApparmorLoaderExampleDaemonYaml() (*asset, error) { - bytes, err := testImagesApparmorLoaderExampleDaemonYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/apparmor-loader/example-daemon.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesApparmorLoaderExampleNamespaceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\xcb\x31\x0a\x42\x31\x10\x04\xd0\x7e\x4f\x31\x60\x2f\xd8\xe6\x10\x56\x62\x3f\xff\x67\x20\x51\x37\x59\x92\x28\x7a\x7b\x3b\xad\x1f\xef\x80\x4b\x11\xf4\xa6\xc7\x43\x38\xd3\x35\x83\xbb\xf0\x9c\xca\xd8\x3e\xe8\xab\x68\xfc\xbc\x6f\x37\xed\x6b\x1e\xcd\x18\xf5\xaa\x31\x6b\x6f\x09\xaf\x93\xdd\x6b\xcb\xe9\xdf\xcd\xb5\x98\xb9\x98\x0c\x68\x74\x25\x30\x82\xc3\xfb\xb0\x6f\x00\x00\x00\xff\xff\xc3\x16\x28\x79\x72\x00\x00\x00") - -func testImagesApparmorLoaderExampleNamespaceYamlBytes() ([]byte, error) { - return bindataRead( - _testImagesApparmorLoaderExampleNamespaceYaml, - "test/images/apparmor-loader/example-namespace.yaml", - ) -} - -func testImagesApparmorLoaderExampleNamespaceYaml() (*asset, error) { - bytes, err := testImagesApparmorLoaderExampleNamespaceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/apparmor-loader/example-namespace.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesApparmorLoaderExamplePodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x91\x3d\x6f\x1b\x31\x0c\x86\x77\xfd\x8a\x17\xf1\x6c\xa5\x01\x3a\x04\xb7\x65\x2e\x50\x64\x08\xba\xf3\x4e\xcc\x99\xb0\x8e\x14\x24\x3a\x48\xfa\xeb\x0b\xc9\x1f\x75\x00\x4d\x14\xf5\xbc\x1f\xda\xe1\xed\xc0\xe0\x4f\xda\x4a\x66\xbc\x5a\xc2\xc9\x25\xcb\x5f\xd1\x15\x7e\x60\x94\x6a\xef\x92\x19\xd9\x28\x71\xc2\xfc\x35\xa6\xed\xbc\x9e\x88\x37\xd3\x18\x02\x15\xf9\xc3\xb5\x89\xe9\x84\x8f\xa7\x70\x14\x4d\x53\x87\x85\x8d\x9d\x12\x39\x4d\x01\x50\xda\x78\x82\xae\xa2\x9f\x7b\x2a\x85\xea\x66\x35\x00\x3b\xfc\x36\x67\xf8\x81\x7c\xb0\xbb\x87\x64\xdc\xa0\xe6\x50\xe6\x04\x37\xcc\x0c\xd1\xab\x34\x0f\x54\x2b\xb4\x30\xa8\x8d\xe9\xb0\x57\x63\x00\x32\xcd\x9c\x5b\xd7\x03\xa8\x94\x8b\x60\x00\x48\xd5\x9c\x5c\x4c\x2f\xb7\x3b\xbc\x71\xce\xf8\x75\x9a\xb9\x2a\x3b\xb7\x2e\x44\xa5\xe4\x73\xc6\x97\x52\x5e\xba\xc5\x5b\x05\x0f\xc7\xe7\xb6\x1f\xb4\x87\x78\x01\xdc\x3b\x97\x86\x7e\x56\xb5\xca\x09\xf2\x3e\x20\x77\x70\xb5\xc4\x7d\xa3\xc7\xaa\x27\xd5\xde\xf0\xc7\xb9\x34\x3c\xc5\x9f\xb0\x8a\xb5\x32\xf9\x39\x06\xb0\x98\x3a\x89\x72\x8d\xd7\xb2\x62\xe3\xe5\x54\xc5\xbf\xe2\xcc\x4e\xf1\x78\x63\x47\xb1\xc7\x61\x6c\x42\xb6\x85\xf2\xc1\x9a\x3f\xde\xdc\x86\x56\x78\xe9\x91\x6f\xc4\x51\xc0\xfe\xfe\x43\x86\xa2\x6c\xb4\x7e\x1b\x14\xab\x7e\x29\x6b\xff\xff\xf5\xab\x55\x9f\xf0\xfc\x23\xfc\x0b\x00\x00\xff\xff\x39\xce\x35\xa3\x3c\x02\x00\x00") - -func testImagesApparmorLoaderExamplePodYamlBytes() ([]byte, error) { - return bindataRead( - _testImagesApparmorLoaderExamplePodYaml, - "test/images/apparmor-loader/example-pod.yaml", - ) -} - -func testImagesApparmorLoaderExamplePodYaml() (*asset, error) { - bytes, err := testImagesApparmorLoaderExamplePodYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/apparmor-loader/example-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesApparmorLoaderLoaderGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x59\x6d\x6f\x1b\x37\x12\xfe\xac\xfd\x15\xd3\x05\xd2\xae\x8a\xcd\x6e\x1a\xdc\x01\x07\xb7\x3e\xc0\xf5\xcb\x55\x57\xd7\x36\x2c\x27\x41\xe1\x04\x01\xbd\x3b\x2b\x11\xa2\xc8\x3d\x92\x6b\x59\x08\xfc\xdf\x0f\x43\x72\xdf\x24\x25\x69\x0b\x34\x1f\x62\x69\x77\x38\x7c\x38\xf3\xcc\xf0\x21\x95\x7f\x1f\x9d\xaa\x7a\xab\xf9\x62\x69\xe1\xf5\xab\x1f\xfe\x09\x77\x4b\x84\x5f\x9b\x07\xd4\x12\x2d\x1a\x38\x69\xec\x52\x69\x93\x45\xd1\x25\x2f\x50\x1a\x2c\xa1\x91\x25\x6a\xb0\x4b\x84\x93\x9a\x15\x4b\x84\xf0\x26\x85\xb7\xa8\x0d\x57\x12\x5e\x67\xaf\x20\x21\x83\x38\xbc\x8a\xa7\x3f\x46\x5b\xd5\xc0\x9a\x6d\x41\x2a\x0b\x8d\x41\xb0\x4b\x6e\xa0\xe2\x02\x01\x9f\x0a\xac\x2d\x70\x09\x85\x5a\xd7\x82\x33\x59\x20\x6c\xb8\x5d\xba\x49\x82\x8b\x2c\xfa\x3d\x38\x50\x0f\x96\x71\x09\x0c\x0a\x55\x6f\x41\x55\x43\x2b\x60\x36\x8a\x00\x00\x96\xd6\xd6\x47\x79\xbe\xd9\x6c\x32\xe6\x50\x66\x4a\x2f\x72\xe1\xad\x4c\x7e\x39\x3b\x3d\xbf\x9a\x9f\xbf\x7c\x9d\xbd\x8a\xa2\x37\x52\xa0\x31\xa0\xf1\x7f\x0d\xd7\x58\xc2\xc3\x16\x58\x5d\x0b\x5e\xb0\x07\x81\x20\xd8\x06\x94\x06\xb6\xd0\x88\x25\x58\x45\x38\x37\x9a\x5b\x2e\x17\x29\x18\x55\xd9\x0d\xd3\x18\x95\xdc\x58\xcd\x1f\x1a\x3b\x0a\x50\x8b\x8a\x1b\x18\x1a\x28\x09\x4c\x42\x7c\x32\x87\xd9\x3c\x86\x9f\x4f\xe6\xb3\x79\x1a\xbd\x9b\xdd\xfd\x72\xfd\xe6\x0e\xde\x9d\xdc\xde\x9e\x5c\xdd\xcd\xce\xe7\x70\x7d\x0b\xa7\xd7\x57\x67\xb3\xbb\xd9\xf5\xd5\x1c\xae\x2f\xe0\xe4\xea\x77\xf8\x75\x76\x75\x96\x02\x72\xbb\x44\x0d\xf8\x54\x6b\xc2\xae\x34\x70\x0a\x1d\x96\x59\x34\x47\x1c\x4d\x5e\x29\x0f\xc6\xd4\x58\xf0\x8a\x17\x20\x98\x5c\x34\x6c\x81\xb0\x50\x8f\xa8\x25\x97\x0b\xa8\x51\xaf\xb9\xa1\xe4\x19\x60\xb2\x8c\x04\x5f\x73\xcb\xac\xfb\xbe\xb7\x9c\x2c\xfa\x3e\x8f\xa2\x9a\x15\x2b\x72\xb2\x66\x5c\x46\x11\x5f\xd7\x4a\x5b\x48\xa2\x49\xfc\xd0\x54\x5c\xc5\xf4\x61\x6b\xd1\xd0\x87\x4a\xb0\x85\xfb\xbb\xb6\xf4\x87\xab\x9c\xab\xc6\x72\x41\x5f\x94\xf1\xff\xe7\xf8\x84\x05\x7d\xac\x99\x5d\xb6\x7f\x73\xe2\x47\xfb\x80\xe2\x27\x17\xce\xdc\xf2\x35\xc6\x51\x34\x89\x57\xff\x32\x19\x57\xf9\x4a\xa8\x45\x1c\x4d\xa3\xe8\x91\x69\xc2\x90\xe7\x8e\xc7\x25\xd7\x58\x58\xa5\x39\x1a\x4a\x9c\x50\xac\x84\x5a\x2b\x72\x6a\xa0\xd2\x6a\x9d\x45\x93\x92\x6b\x03\xf7\x1f\xbc\xf3\x68\x52\x2b\x21\xe0\x18\x08\x71\x76\xd6\x68\x17\x82\x24\xa6\xa7\x71\x0a\x2f\x7f\x48\x21\xbe\x21\x0b\xbb\xe3\x9d\x62\x2c\x71\xd3\x7b\x0f\xf4\xe5\x06\xb8\xb4\xa8\x1f\x99\xc8\xe0\x2d\x13\x0d\x1a\xf8\x09\x5e\x11\x1b\x1c\xb9\xc8\xb1\x23\x12\x93\x25\xe0\x13\xb7\xc0\x2a\x8b\xda\x41\xa5\xbc\xd0\x3c\xad\xcf\x2c\x9e\xd2\x12\x0b\x25\x8d\x0b\x74\xcd\xb4\x41\x4d\x64\x87\x63\x88\x59\x5d\x33\xbd\x56\xfa\xa3\x7f\x1c\x47\x93\xf6\x49\x65\xe8\x7d\x6e\xb6\x26\x5f\x51\x59\x8b\xdc\x60\xd1\x68\x6e\xb7\x79\x6b\xe2\x62\x57\x35\xb2\x70\xd9\x4c\xa6\xf0\x29\x9a\xb8\x10\xbc\x31\x94\xe2\x63\xa0\x77\xfe\xf1\xa4\x5a\xdb\xec\xa2\xd6\x5c\xda\x2a\x51\x26\x9b\xdb\x12\xb5\x4e\x21\x76\xa6\x47\xf0\xc2\xc0\xfd\xc5\xe5\xc9\x7f\x3e\x64\x59\x06\xf7\x37\xb7\xd7\x17\xb3\xcb\xf3\x8f\x67\xb3\x5b\x7a\xf0\x5e\xc6\x29\x28\x93\x9d\xe8\x85\xb9\x7f\xf5\x61\xfa\x05\x77\x97\x94\x2c\xdf\x64\xea\x13\xc2\xd8\xc7\x36\x10\x19\x4b\x2a\x45\x32\x19\xcc\x32\xcc\x0a\x4d\xe7\xa6\xa0\x95\xdc\xd0\x14\x67\x58\xb1\x46\x58\x93\x4c\xa3\xc9\x73\x58\xe2\x0d\xc5\x2b\x99\x46\x81\x0a\x21\xf7\x84\x90\xac\x78\x05\x02\x65\x42\xaf\xa6\x70\x7c\x0c\xaf\x5c\x0c\x88\x6f\xd9\xb9\xd6\x4a\x57\x49\xfc\x5b\x63\x6c\xc0\xb4\x05\x66\x41\x20\x33\x16\x94\xec\x19\xb2\xcd\x7a\x1c\x2e\x4c\xe4\x79\xa2\x4c\x76\xfe\xc4\x6d\xf2\x83\x03\xe3\x48\x7b\xba\xc4\x62\x05\x76\xc9\xac\x5b\x57\xd7\x91\x42\xaa\x1f\xb8\x64\x7a\x4b\xdd\xa4\x52\x8d\x2c\x33\x07\xef\x63\x0a\xa8\x35\x1c\x1d\x03\x55\x50\x76\xa9\xd4\xea\x86\xd9\x65\xe2\xc7\x4c\x7f\x74\x6f\xbf\x39\x06\xc9\xc5\x00\xfb\x13\xb7\x55\x12\xdf\x76\x2d\xcf\x7b\x7e\x61\x5c\x7b\x76\xde\x29\xb8\x37\x27\x77\xbf\xc4\x69\x98\xfe\x20\x4c\x22\x2a\x0e\xaa\xaa\x60\x12\x1e\x08\x39\xdb\x83\xb7\x40\x7b\xe9\xac\x6f\x82\x71\xf2\x65\x70\x6f\xa4\x2b\x11\xab\x80\x15\x05\x35\xb9\x96\xad\xdd\x6c\x47\xf0\xe2\x31\x76\xfe\x03\x36\x5e\xc1\xf7\xae\x82\x7f\x0a\x89\xd2\x8d\xbc\x96\x85\x8b\xf7\x33\xa0\x30\xe8\x9e\x92\xc9\x85\xd2\xf8\x88\xda\x33\xe1\x39\x8a\xf2\x1c\xae\x54\x5b\x8f\x47\xa0\x1b\x09\x8a\xf6\xa1\xb6\x30\x33\x5f\x1f\x9d\x43\x72\xc4\x2b\x30\x8d\xc3\x96\x52\xf5\xb7\xeb\xa2\xc5\x52\x5c\xae\xfa\x47\xb4\xd4\x6f\x82\xad\x83\x10\x78\x35\x18\x35\x85\x7f\x07\xd0\xa3\x28\x5c\x29\x0b\x4c\x88\x41\x67\x41\x8d\xed\xb4\x55\x23\xc4\x36\xe4\x20\x03\x1f\xdd\x10\x94\xa1\xe7\x68\x32\x5c\x7d\xef\x3e\x89\x1d\x87\xbb\x6e\x33\xec\x34\x13\x2a\x90\xc1\xa8\xaf\x03\x9e\xc9\x4a\x55\x49\x3c\xdf\x87\xb6\x9b\xb0\xaf\x61\x7b\xc7\xdc\xae\x44\x8b\x1f\x77\x55\x4f\xfb\x0e\x5d\xc8\xdb\xc1\x8e\xcc\x65\x89\x15\x97\xdc\xa2\xd8\x86\xdc\x8d\xd2\x4e\xd3\xb9\xc9\xde\x26\xaf\xa7\x2d\xf6\x1b\x9f\x7e\xaa\x03\xb2\xa2\x82\x88\x53\x08\x1b\x4f\xf6\x5f\xc5\x7d\x27\x48\x21\x4e\x21\x9e\xa6\xce\x63\x36\x77\xaf\x93\xe9\xd4\xef\x1e\x17\x92\xf2\x3f\x68\x98\x1f\xbf\x4e\x8e\x3f\x14\xdf\x21\xd0\xbf\x10\x64\xd7\xf1\x3c\xc0\x64\x0a\x79\x0e\xb7\x8d\x04\xbe\x5e\x63\xc9\x99\x0f\xd2\xc4\xf2\x62\x85\xae\x56\x69\x83\xcd\xae\x70\x73\xe7\x9e\x24\xae\xa8\xa6\xd1\x84\xb6\x39\xcd\xe4\x02\xc1\x9b\x66\xa7\x7d\x3d\xc9\xae\x94\x5c\xb0\xf7\xd6\x08\x49\xcb\xff\x07\xa5\xc4\x38\x26\xed\xfe\xeb\x02\x26\x46\x4d\xe2\x4b\xed\xc3\x55\xe0\xc1\x0e\x12\x5a\xb3\xa7\x37\x35\x23\xca\xea\xe1\x38\xf9\xee\x31\xd1\x68\x1b\x2d\xa1\x62\x82\x94\xac\xe4\xc2\x77\x94\x16\xf3\x31\x58\xdd\xa0\x8f\xc0\xc7\x94\x98\x46\x98\x7c\x2c\xdc\xbe\xe1\x6a\x44\x56\xaa\x07\xec\x35\x4e\x76\x8b\xac\x3c\xe3\x9a\x88\x13\xf2\xbc\x83\x78\xc4\xf9\x3d\xd0\x2f\x5a\x9c\x25\xd7\x1d\xd8\x01\x2c\x07\x98\x1e\x15\x4a\x5a\x2e\x09\xa3\x03\xde\x22\x25\x4c\x3d\x54\x87\xd0\xcf\x4a\xb2\xca\x31\x35\x48\xac\x8e\xde\x7e\x4c\x76\xc5\xd6\xe8\x48\x3d\xa1\x96\x3f\xab\xfa\xdd\x2c\x25\xb9\x69\xb6\x6b\xc1\xe5\xca\xb5\xe7\xe1\x2b\xb3\xe2\x35\x50\xbb\x9c\x50\x4c\x8d\x12\x8f\x58\x12\x69\xbb\xb0\x84\x87\x73\x3f\xbe\x9f\xd0\xcd\x74\x20\x3a\x9f\x0b\x0f\x79\xa1\x00\x05\x20\xe3\x6c\x8e\xc2\x41\xc4\x77\xae\x87\x78\xb2\x99\xa1\xac\x4c\xc3\x24\x79\x0e\x67\xed\x22\x40\x70\x43\xf2\x9e\x36\x5a\xb3\x64\x42\xa8\x4d\xd6\x23\x79\x9b\xfc\xa3\x2f\xc3\x15\xaf\x6b\xb2\xec\x02\xe0\x3b\x06\xc5\xf3\x10\x8c\xe8\xa0\x93\x82\x49\x19\xba\xce\xae\x8e\x1c\xfa\xaa\x0f\x54\x44\xa8\x05\xca\x95\x49\x3a\xcb\x3f\x11\xc5\x1d\x92\x91\x8b\x41\x10\x0f\xd0\xec\xc0\x8a\x78\x05\x8d\x1c\x57\x6d\xb2\x5b\xc4\x75\xd7\xd4\x3c\x9c\x00\x31\x34\xc3\x6e\x98\x5b\xc2\x9e\x2a\x98\xec\x94\xf5\xa9\x6a\x44\xe9\x94\xca\x48\xd2\xef\x52\xe0\x20\xfc\x11\x7e\xcf\x0c\x4a\xfe\x49\x59\x8e\xb7\x1a\x3a\x2f\x70\xd2\x71\xd5\x6e\xdf\xf0\x5c\x18\xb6\xaf\x63\x92\x26\x28\xcb\x61\xf7\xee\x97\x9c\x65\x99\xc7\x13\x2a\x32\x3c\xef\x8b\xb2\x9b\x33\xac\x75\x1c\xbb\xfb\xf0\xfa\x43\xd7\x83\x5a\xdc\xcf\x6d\x5b\x8f\xda\xee\x75\x48\x8d\x74\x1d\xf9\x10\x5d\xa0\xed\xbb\x49\xdb\x82\x5d\xfc\x94\x76\x79\x2a\xd6\x65\xa7\x2b\x4f\xd5\x7a\xcd\x64\x19\x64\x65\x0a\xf1\xcb\x97\x92\xdc\xf4\x0c\x35\x4e\xba\xd3\x80\x6f\xdd\xc9\x2f\xfb\xb9\xa9\x2a\xd4\x9f\x9e\x9d\xa3\xa0\xec\xe1\x18\xbc\x5d\x34\x51\x8d\xed\xa8\x4c\x06\xd7\x8d\xad\x1b\x7b\xb8\xab\x93\xd2\x72\xc3\xb2\x4b\xa4\xed\x6b\xbc\x33\xb6\x7a\x21\x98\x0c\x36\x64\x17\xa3\x10\x1c\xc9\x45\x0a\x74\xdc\x68\x69\x84\xa3\x1a\x18\x1d\x0c\x0f\x57\x04\x45\xda\x6a\xb7\x67\x12\xe8\x56\x17\xdc\x69\xbe\x9e\xd7\xac\xc0\xc4\x3f\x49\x54\x63\xa7\x7e\x8b\xc5\xb5\x7a\x44\xb0\x9a\x71\xa7\x2b\xde\xcb\x3e\x55\x61\xf0\xbc\x16\xdc\x26\xc1\x6b\x0a\x31\x9d\x59\xfc\xfe\xd3\xe6\xed\x2b\xb5\x05\x6b\x56\xdf\x7b\x6f\x1f\xfc\xce\x5a\xef\x6f\xab\xf4\xc2\x1d\xea\xfe\x08\x05\x79\x05\xdf\x7c\x8e\x83\x9f\x7c\x5f\x77\x4b\x08\x6c\xf4\xca\x62\xb8\x7f\x8e\x44\xc0\xa8\xb6\x3b\xbe\xf9\xd8\x7f\x9d\x63\x8f\xa8\x1f\x94\xc1\xbf\x83\x65\x7b\xa2\xea\x52\x7d\x86\x09\xef\x65\xd7\xd5\x53\xa0\xe4\xfe\x5d\x14\xdd\x67\xe7\xae\x34\xff\x22\x3b\x07\x4c\x0f\xd2\x78\xe6\x6f\xc7\x16\xfc\x11\xa5\xdb\xe9\x9d\x1c\xe0\x06\x58\xbb\x6f\xa6\xd0\x66\x73\x89\x70\xc1\x05\x52\x30\xda\x5b\x35\xcb\xf4\x02\x6d\x06\xd7\x76\x89\x7a\xc3\x49\x19\xf5\xd6\xe4\x7f\xec\xb8\x3d\x23\x8d\x77\xf8\x07\x66\xf0\xa6\xcf\x7d\x90\x24\xca\x64\xed\x6c\x53\x48\x06\xdf\x86\x0d\x88\x57\x5e\x8b\xfc\xa6\x4a\x4c\xa6\xdf\x2a\xe3\x3e\x05\xc7\xfd\x71\xdc\x9d\xdd\x6c\xbf\xa6\xac\x8f\x28\x77\x1e\x83\x9c\x9b\x54\x87\x45\x4f\x8b\x70\x57\xf9\xb4\x7a\x81\x1e\x74\x24\xea\x86\x9e\x3f\x32\x11\xa0\x98\xa4\x0a\xf4\xdc\xe7\xc5\xd7\xba\xcf\x8e\x8e\xe9\x73\x5b\xed\x25\xf7\x80\x9a\x72\x57\x26\xcc\x26\x43\xa8\x7f\x01\x46\xc1\xfc\xc1\xc7\x58\x66\x41\xc9\x1e\xc4\x5e\x08\x46\x44\x1b\x43\xea\x69\x77\x77\x7d\x76\x7d\x04\x77\xee\xfa\xcb\x40\xa1\x6a\x8e\xa5\x67\x6e\x7b\x61\xd7\xdd\x30\xe7\xf5\x6a\xb1\x7f\x21\x95\xed\xa9\xfd\x8c\xfc\xfa\x7f\xb7\x58\x31\x12\x5b\xfe\x06\x62\x8d\x76\xa9\xdc\xc5\x2c\x3e\xd5\xca\x20\x70\x77\x95\xcc\x40\x63\xe3\x2f\xd9\x36\x6c\xeb\x2f\xd8\x4a\x14\x68\xc3\xcd\xf3\xa3\xbf\xab\xce\xba\xbd\x71\xf7\x70\x01\xc9\x5e\x63\xed\x89\xd9\x96\xe3\x4d\xe0\x53\xcf\xa5\xfe\xd6\x2d\x85\xb8\x93\x71\xd3\x7e\x08\xf1\x7c\x98\xbe\xeb\x1a\x65\x32\xf4\xf7\xa7\xd2\x57\x31\x2e\xfc\xb5\xb4\xaa\x71\x90\xb7\xa1\xc3\x41\xde\x4a\xac\xb0\xbf\x3f\x21\x28\xd9\xa9\x50\xe1\xfe\xab\x1e\x1c\x51\x77\xd6\x4e\xed\xd5\x90\x4e\xf5\xc7\x43\x77\xc5\x4b\xe7\xc3\xb9\x7f\x96\x0c\x3d\x86\x73\x62\x30\xcf\xc8\x24\xc8\xec\xba\x97\x1f\x3e\x68\xda\xe0\x40\x92\x24\xed\x90\x3b\x7c\xb2\xbe\x37\xf2\x0a\x86\x83\x8e\x8f\x21\x8e\x7d\x57\xcd\x73\x78\x23\x57\x52\x6d\x24\x08\x2e\xdd\x2d\xf7\x9a\xd9\x1f\x47\xe7\x8f\xd1\x91\xa8\x17\xd0\xf7\x03\x97\xbd\xaa\xea\x59\xdd\x0b\xed\x01\xa3\x07\x17\xb1\xfe\x57\x0b\x77\x0b\x47\x73\x5a\x2c\xfd\x75\xaf\x92\x9d\x0d\xd4\xa8\x1d\xae\x14\xd6\xcc\x16\x4b\xaa\x2d\xe6\xec\x8f\x3c\x8f\x9d\x76\x22\xcd\x70\x94\xe7\x61\x8c\xd3\x53\x90\xac\x55\x89\x53\x6f\xf4\x99\x17\xef\x96\xa8\x11\xe8\x2b\x81\xf8\x84\xb2\x52\xba\xc0\xd4\xff\x7a\xc2\xb8\x4c\x61\xc5\x85\x78\xce\x1c\xe8\x78\x38\x53\x4c\x03\x94\x14\x5b\xe0\xb2\x10\x0d\xa9\x5a\x77\xe2\x68\x4d\x4a\x72\xdf\xe9\x56\xb8\x08\xbf\x1c\xd4\x8d\xa6\xca\x32\xb4\x2d\xf4\xbf\x0d\xa5\xb0\x41\x28\x94\x34\xbc\xfd\x7d\xa0\xf3\x43\xa9\xb5\xed\x26\xd2\x86\x84\xde\xb6\x37\x31\xbb\x99\x0f\x36\x97\x94\xc9\x56\x22\xf8\xbf\x94\x6d\x5a\xea\x4c\x96\xf8\x34\x54\x5d\xee\xc1\x6d\x23\x47\x83\x53\xf8\x2e\xf9\xce\x17\x50\x3f\xa8\xbb\x0c\xf4\xe9\x8d\xe3\x61\xb2\xf7\x45\xdc\xc0\xdd\xfd\x51\xe7\xe5\xc3\x34\x7a\x8e\xfe\x1f\x00\x00\xff\xff\x79\x36\xfd\x94\x2f\x1b\x00\x00") - -func testImagesApparmorLoaderLoaderGoBytes() ([]byte, error) { - return bindataRead( - _testImagesApparmorLoaderLoaderGo, - "test/images/apparmor-loader/loader.go", - ) -} - -func testImagesApparmorLoaderLoaderGo() (*asset, error) { - bytes, err := testImagesApparmorLoaderLoaderGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/apparmor-loader/loader.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesAuditProxyDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x6f\x9c\x3e\x10\xc5\xef\xfe\x14\x4f\x70\xf9\xff\xa5\x0d\xa4\xb9\x35\x3d\xd1\xcd\x46\x45\x49\x21\x5a\x48\xa3\x55\xd5\x83\x17\x66\x61\x24\xd6\x76\xed\xa1\x84\x6f\x5f\x41\x12\x29\x51\x7d\xf4\x7b\x33\xfe\xbd\xe7\x18\x5b\xeb\x66\xcf\x5d\x2f\xb8\xba\xfc\xf4\x19\x75\x4f\xb8\x1b\x8f\xe4\x0d\x09\x05\x64\xa3\xf4\xd6\x87\x44\xc5\x2a\xc6\x3d\x37\x64\x02\xb5\x18\x4d\x4b\x1e\xd2\x13\x32\xa7\x9b\x9e\xde\x94\x0d\x7e\x90\x0f\x6c\x0d\xae\x92\x4b\xfc\xb7\x18\xa2\x57\x29\xfa\xff\x8b\x8a\x31\xdb\x11\x67\x3d\xc3\x58\xc1\x18\x08\xd2\x73\xc0\x89\x07\x02\x3d\x37\xe4\x04\x6c\xd0\xd8\xb3\x1b\x58\x9b\x86\x30\xb1\xf4\xeb\x33\xaf\x4b\x12\x15\xe3\xf0\xba\xc2\x1e\x45\xb3\x81\x46\x63\xdd\x0c\x7b\x7a\xef\x83\x96\x15\x78\x39\xbd\x88\xbb\x4e\xd3\x69\x9a\x12\xbd\xc2\x26\xd6\x77\xe9\xf0\x62\x0c\xe9\x7d\xbe\xdd\x15\xd5\xee\xe2\x2a\xb9\x5c\x47\x1e\xcd\x40\x21\xc0\xd3\xef\x91\x3d\xb5\x38\xce\xd0\xce\x0d\xdc\xe8\xe3\x40\x18\xf4\x04\xeb\xa1\x3b\x4f\xd4\x42\xec\xc2\x3b\x79\x16\x36\xdd\x06\xc1\x9e\x64\xd2\x9e\x54\x8c\x96\x83\x78\x3e\x8e\xf2\xa1\xac\x37\x3a\x0e\x1f\x0c\xd6\x40\x1b\x44\x59\x85\xbc\x8a\xf0\x35\xab\xf2\x6a\xa3\x62\x3c\xe5\xf5\xb7\xf2\xb1\xc6\x53\xb6\xdf\x67\x45\x9d\xef\x2a\x94\x7b\x6c\xcb\xe2\x26\xaf\xf3\xb2\xa8\x50\xde\x22\x2b\x0e\xb8\xcb\x8b\x9b\x0d\x88\xa5\x27\x0f\x7a\x76\x7e\xe1\xb7\x1e\xbc\xd4\x48\xed\xd2\x59\x45\xf4\x01\xe0\x64\x5f\x80\x82\xa3\x86\x4f\xdc\x60\xd0\xa6\x1b\x75\x47\xe8\xec\x1f\xf2\x86\x4d\x07\x47\xfe\xcc\x61\xf9\xcc\x00\x6d\x5a\x15\x63\xe0\x33\x8b\x96\xf5\xe6\x9f\x50\x89\x52\xb7\xfb\xf2\x3b\xba\xc6\x27\x6c\xd3\x35\x9f\x5d\xaa\x4c\xc3\x32\xd3\x5c\x0f\x5a\x28\x88\xda\x96\x0f\x07\xe8\xb1\x65\xb9\x70\xde\x3e\xcf\x48\xd5\xae\xa8\xf7\x87\x87\x32\x2f\x6a\xfc\x8c\xd2\x77\x5a\xf4\x4b\xfd\x0d\x00\x00\xff\xff\x33\xc9\xc0\xcf\xa0\x02\x00\x00") - -func testImagesAuditProxyDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesAuditProxyDockerfile, - "test/images/audit-proxy/Dockerfile", - ) -} - -func testImagesAuditProxyDockerfile() (*asset, error) { - bytes, err := testImagesAuditProxyDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/audit-proxy/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesAuditProxyMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6b\xdb\x3e\x14\xc5\x9f\xff\xfa\x14\x87\xb8\x0f\x09\xa4\x4e\xff\x65\x6c\xac\xa3\x0c\x2f\xc9\x52\xd3\xce\x1e\x76\xda\xd2\xa7\x22\xdb\x37\xf6\x05\x47\xd2\x24\x79\x4e\xbe\xfd\x50\xda\xc2\xca\xf4\xa6\x7b\xcf\x3d\xfa\xe9\xdc\x08\x4b\x6d\x8e\x96\xdb\xce\xe3\xf2\xe2\xff\xcf\xd8\x76\x84\xdb\xa1\x22\xab\xc8\x93\x43\x32\xf8\x4e\x5b\x17\x8b\x48\x44\xb8\xe3\x9a\x94\xa3\x06\x83\x6a\xc8\xc2\x77\x84\xc4\xc8\xba\xa3\xb7\xce\x1c\x0f\x64\x1d\x6b\x85\xcb\xf8\x02\xd3\x20\x98\xbc\xb6\x26\xb3\x2f\x22\xc2\x51\x0f\xd8\xcb\x23\x94\xf6\x18\x1c\xc1\x77\xec\xb0\xe3\x9e\x40\x87\x9a\x8c\x07\x2b\xd4\x7a\x6f\x7a\x96\xaa\x26\x8c\xec\xbb\xd3\x33\xaf\x26\xb1\x88\xf0\xf4\x6a\xa1\x2b\x2f\x59\x41\xa2\xd6\xe6\x08\xbd\xfb\x5b\x07\xe9\x4f\xc0\xe1\x74\xde\x9b\xab\xc5\x62\x1c\xc7\x58\x9e\x60\x63\x6d\xdb\x45\xff\x22\x74\x8b\xbb\x74\xb9\xce\xca\xf5\xf9\x65\x7c\x71\x1a\xb9\x57\x3d\x39\x07\x4b\xbf\x06\xb6\xd4\xa0\x3a\x42\x1a\xd3\x73\x2d\xab\x9e\xd0\xcb\x11\xda\x42\xb6\x96\xa8\x81\xd7\x81\x77\xb4\xec\x59\xb5\x73\x38\xbd\xf3\xa3\xb4\x24\x22\x34\xec\xbc\xe5\x6a\xf0\xef\xc2\x7a\xa3\x63\xf7\x4e\xa0\x15\xa4\xc2\x24\x29\x91\x96\x13\x7c\x4b\xca\xb4\x9c\x8b\x08\x8f\xe9\xf6\x26\xbf\xdf\xe2\x31\x29\x8a\x24\xdb\xa6\xeb\x12\x79\x81\x65\x9e\xad\xd2\x6d\x9a\x67\x25\xf2\xef\x48\xb2\x27\xdc\xa6\xd9\x6a\x0e\x62\xdf\x91\x05\x1d\x8c\x0d\xfc\xda\x82\x43\x8c\xd4\x84\xcc\x4a\xa2\x77\x00\x3b\xfd\x02\xe4\x0c\xd5\xbc\xe3\x1a\xbd\x54\xed\x20\x5b\x42\xab\x7f\x93\x55\xac\x5a\x18\xb2\x7b\x76\x61\x99\x0e\x52\x35\x22\x42\xcf\x7b\xf6\xd2\x9f\x2a\xff\x7c\x2a\x16\xa2\x2c\x96\xe5\xb5\x1c\x1a\xf6\xe7\xc6\xea\xc3\x51\x24\xc5\xf2\x06\x5f\xaf\x21\xf7\xcd\xc7\x0f\x62\x9b\x14\x9b\xf5\x36\xdc\xcf\xa6\xcb\xfb\x62\x95\x16\x33\xb1\xc9\x93\xe2\xc7\xf5\x27\xb1\xc9\xef\x92\x6c\xf3\xfc\xb0\x2e\xca\x34\xcf\x82\xa6\x97\x9e\x9c\x0f\x9e\xcf\xab\xb4\x40\x18\x52\xda\x37\x6c\x71\x36\x75\x1d\xf5\x3d\xcc\xd8\xcc\x66\x82\x0e\x46\x5b\x2f\x44\xc5\xea\x4a\xfc\x17\xc7\x0b\xde\xcb\x96\xce\x07\xcf\x7d\xec\x3a\x54\xac\x70\x36\x0d\x64\x33\x21\xe2\x9f\x37\x79\xf6\x74\x15\x8a\xe2\x4f\x00\x00\x00\xff\xff\xad\x3c\xf9\x35\xf9\x02\x00\x00") - -func testImagesAuditProxyMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesAuditProxyMakefile, - "test/images/audit-proxy/Makefile", - ) -} - -func testImagesAuditProxyMakefile() (*asset, error) { - bytes, err := testImagesAuditProxyMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/audit-proxy/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesAuditProxyVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") - -func testImagesAuditProxyVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesAuditProxyVersion, - "test/images/audit-proxy/VERSION", - ) -} - -func testImagesAuditProxyVersion() (*asset, error) { - bytes, err := testImagesAuditProxyVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/audit-proxy/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesAuditProxyMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x54\x51\x4f\xe3\x46\x10\x7e\xf6\xfe\x8a\xa9\x25\x4e\x36\x72\x6d\xe0\x89\xe6\xc4\x43\x0e\x42\xb1\xa0\x49\x85\xa1\xe8\x9e\xaa\x8d\x3d\xb6\xb7\x6c\x76\xcd\xee\x38\xb9\xf4\xc4\x7f\xaf\x76\xed\x00\xe9\xe9\x38\x55\x7d\xb2\xd7\xfb\xcd\xcc\x37\xdf\xe7\x99\xec\x90\x9d\xeb\x6e\x6b\x44\xd3\x12\x9c\x1c\x1d\xff\x02\x77\x2d\xc2\x75\xbf\x44\xa3\x90\xd0\xc2\xb4\xa7\x56\x1b\x9b\x32\x76\x23\x4a\x54\x16\x2b\xe8\x55\x85\x06\xa8\x45\x98\x76\xbc\x6c\x11\xc6\x9b\x04\xfe\x40\x63\x85\x56\x70\x92\x1e\x41\xe4\x00\xe1\x78\x15\xc6\x1f\xd9\x56\xf7\xb0\xe2\x5b\x50\x9a\xa0\xb7\x08\xd4\x0a\x0b\xb5\x90\x08\xf8\xa5\xc4\x8e\x40\x28\x28\xf5\xaa\x93\x82\xab\x12\x61\x23\xa8\xf5\x45\xc6\x14\x29\xfb\x3c\x26\xd0\x4b\xe2\x42\x01\x87\x52\x77\x5b\xd0\xf5\x5b\x14\x70\x62\x0c\x00\xa0\x25\xea\x26\x59\xb6\xd9\x6c\x52\xee\x59\xa6\xda\x34\x99\x1c\x50\x36\xbb\xc9\xcf\x67\xf3\x62\xf6\xf3\x49\x7a\xc4\xd8\xbd\x92\x68\x2d\x18\x7c\xea\x85\xc1\x0a\x96\x5b\xe0\x5d\x27\x45\xc9\x97\x12\x41\xf2\x0d\x68\x03\xbc\x31\x88\x15\x90\x76\x3c\x37\x46\x90\x50\x4d\x02\x56\xd7\xb4\xe1\x06\x59\x25\x2c\x19\xb1\xec\x69\x4f\xa0\x1d\x2b\x61\xe1\x2d\x40\x2b\xe0\x0a\xc2\x69\x01\x79\x11\xc2\xa7\x69\x91\x17\x09\x7b\xc8\xef\xae\x16\xf7\x77\xf0\x30\xbd\xbd\x9d\xce\xef\xf2\x59\x01\x8b\x5b\x38\x5f\xcc\x2f\xf2\xbb\x7c\x31\x2f\x60\x71\x09\xd3\xf9\x67\xb8\xce\xe7\x17\x09\xa0\xa0\x16\x0d\xe0\x97\xce\x38\xee\xda\x80\x70\xd2\x61\x95\xb2\x02\x71\xaf\x78\xad\x07\x32\xb6\xc3\x52\xd4\xa2\x04\xc9\x55\xd3\xf3\x06\xa1\xd1\x6b\x34\x4a\xa8\x06\x3a\x34\x2b\x61\x9d\x79\x16\xb8\xaa\x98\x14\x2b\x41\x9c\xfc\xf9\x9b\x76\x52\x76\x98\x31\xd6\xf1\xf2\xd1\x25\x59\x71\xa1\x18\x13\xab\x4e\x1b\x82\x88\x05\xa1\xd0\x99\xd0\x3d\x09\x19\xb2\x20\x94\xba\x71\x0f\x85\x94\x39\x4b\xdc\xbb\xb6\x21\x63\x41\xf8\x78\x6a\x53\xa1\x33\xde\x89\x15\x2f\x5b\xa1\xd0\x6c\xb3\xee\xb1\xc9\x4c\xaf\x48\xac\x30\xfc\x31\x24\xb3\x68\x04\x97\xe2\x6f\x34\xd9\x5f\x56\xab\x90\x05\xbc\xaf\x9c\x33\x96\xb8\x94\xf0\x26\xde\xa2\x59\xa3\xf1\xc1\xee\x94\x79\x5c\x36\x02\x77\x71\xeb\xe3\x1f\x87\xac\x8f\xf7\x89\xbd\x45\x39\x40\xc8\x62\xc6\xd6\xdc\x38\x25\x50\x95\xda\x49\x37\xd2\x4d\x67\xc3\x99\x05\x15\xee\x5f\x5c\x0c\x67\x17\x5a\xf7\xaa\xf4\x92\x46\x31\x7c\x65\x81\x2d\x5b\x5c\x21\x4c\xce\x5e\xb0\x73\xdc\x14\xfe\x63\x14\xef\xb7\x9b\xe6\xc3\x33\x1a\x62\x62\x16\xbc\xca\xe3\x12\x38\x85\x7c\xf4\xcb\xd7\xc8\x7f\xba\xc0\x9a\xf7\x92\x7e\x43\xe2\x97\xbc\x24\x6d\xb6\x09\x0c\x29\x5e\x9f\x35\x97\xd6\x65\xdc\x75\x74\x06\xbe\x72\x7a\xae\x2b\x2c\xed\xae\xb1\x4b\x6d\xc6\x0d\x10\xbd\x96\x4e\x60\xd4\x36\x1d\x68\xff\x6a\x74\xdf\x8d\xb0\xf8\x55\x8a\x7f\x65\xbc\x57\x62\x8d\xc6\x72\x39\x4a\x13\xbd\x97\x84\x05\xee\xd7\x4a\xaf\xb8\xaa\x24\x5e\xf6\xaa\x8c\xc2\x2c\x4c\xa0\xf5\x67\x13\xb3\x40\xea\x26\xbd\xe4\xc4\x65\xe4\x81\x37\xc2\x12\xaa\xa9\xaa\x0a\x67\x5e\x14\x4e\x4e\x8f\x4e\x8f\xc2\x04\x94\x90\x71\xcc\x9e\x47\x13\xc6\xf0\x68\xe3\x77\x49\x7a\x8b\xb6\xd3\xca\xe2\x83\x11\xe4\xba\x32\xf8\x04\x87\xe3\xcd\x53\x8f\x96\xbc\x5f\x4b\x5d\x6d\x13\x40\xe3\x15\x1f\xa6\x20\xbd\x45\x5e\x4d\xa5\x8c\x0c\x3e\xa5\x9f\x74\xb5\x8d\x59\x20\x6a\x8f\xf9\xe9\xcc\xd5\x74\x71\x9e\xe2\xef\x46\x28\xaa\xa3\xb0\xd4\xbd\xac\xfc\x9e\x34\xc8\x2b\xbf\x97\xd0\x12\xb8\xdc\x13\x38\x58\x87\xbe\x40\xcc\x82\x60\x93\x7a\x36\x57\xc8\x9d\x44\x9e\x4c\x41\x9c\x7a\x9b\x2b\x42\xa3\xb8\xf4\x0d\x9a\x99\x31\xda\xe3\x0d\x52\x6f\x14\x0b\x9e\x59\x80\xd2\x31\xfc\xb0\x93\x75\xb6\x46\x45\x4e\x97\xaf\xcf\xec\x85\xde\x9b\xbf\x6e\xb0\x21\x57\xa4\xa3\xd1\xb1\x04\xc6\x5e\x65\xfc\xf1\xbd\x66\x6a\x2e\x24\x56\xe0\xa3\xdc\xa6\x59\xf6\xf5\x04\x0e\x96\x09\xf0\x4e\x8c\x0e\x4e\xe0\xc0\x86\xbb\x7c\xef\xfe\x2d\xff\xa7\xe3\x0a\x6b\x37\x72\xa3\x09\xe9\xb9\xd4\xd6\xcd\x10\x0b\xb2\xcc\xef\x73\x04\x74\x22\x58\xb7\xe2\x2d\x55\xba\x27\x16\xb8\xd5\xf9\x67\x32\x5c\x78\x39\xb8\x6a\x10\x50\xa6\x39\xe1\xca\xfa\x5e\x47\xa1\xc6\xc9\x18\x47\x21\xfa\xe0\x43\x12\xd0\x36\x2d\x7c\x2e\x47\xe6\x5b\xd7\xbf\x63\xfb\x90\x6c\x90\x62\x28\xbe\xef\xfb\x7f\x96\xe1\x45\x07\x27\xc4\x33\xfb\x7e\xfc\xe2\xda\x0d\xc0\x3f\x01\x00\x00\xff\xff\xbf\x38\x5a\x10\x16\x08\x00\x00") - -func testImagesAuditProxyMainGoBytes() ([]byte, error) { - return bindataRead( - _testImagesAuditProxyMainGo, - "test/images/audit-proxy/main.go", - ) -} - -func testImagesAuditProxyMainGo() (*asset, error) { - bytes, err := testImagesAuditProxyMainGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/audit-proxy/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCrdConversionWebhookBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x0a\x10\x00\x00\xff\xff\xe5\x8d\xa8\xc0\x5c\x00\x00\x00") - -func testImagesCrdConversionWebhookBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesCrdConversionWebhookBaseimage, - "test/images/crd-conversion-webhook/BASEIMAGE", - ) -} - -func testImagesCrdConversionWebhookBaseimage() (*asset, error) { - bytes, err := testImagesCrdConversionWebhookBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/crd-conversion-webhook/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCrdConversionWebhookDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x92\x51\x6f\xd3\x3c\x14\x86\xef\xfd\x2b\x5e\x25\x37\xdf\x27\x95\x74\xec\x0a\xc1\x55\x68\x33\x88\xb6\x25\xa8\xc9\x98\x2a\x84\x26\xc7\x39\x4d\x8e\x48\x6d\x63\x3b\xcb\xfa\xef\x51\xda\x4e\xa2\x02\x7c\x79\xce\xe3\xe3\xc7\xaf\x1d\x63\x65\xec\xc1\x71\xd7\x07\x5c\x5f\xbd\x7d\x87\xba\x27\xdc\x8e\x0d\x39\x4d\x81\x3c\xd2\x31\xf4\xc6\xf9\x44\xc4\x22\xc6\x1d\x2b\xd2\x9e\x5a\x8c\xba\x25\x87\xd0\x13\x52\x2b\x55\x4f\xaf\x9d\x05\xbe\x92\xf3\x6c\x34\xae\x93\x2b\xfc\x37\x03\xd1\xb9\x15\xfd\xff\x41\xc4\x38\x98\x11\x7b\x79\x80\x36\x01\xa3\x27\x84\x9e\x3d\x76\x3c\x10\xe8\x45\x91\x0d\x60\x0d\x65\xf6\x76\x60\xa9\x15\x61\xe2\xd0\x1f\x8f\x39\x0f\x49\x44\x8c\xed\x79\x84\x69\x82\x64\x0d\x09\x65\xec\x01\x66\xf7\x3b\x07\x19\x8e\xc2\xf3\xea\x43\xb0\xef\x97\xcb\x69\x9a\x12\x79\x94\x4d\x8c\xeb\x96\xc3\x09\xf4\xcb\xbb\x7c\x95\x15\x55\xf6\xe6\x3a\xb9\x3a\x6e\x79\xd0\x03\x79\x0f\x47\x3f\x47\x76\xd4\xa2\x39\x40\x5a\x3b\xb0\x92\xcd\x40\x18\xe4\x04\xe3\x20\x3b\x47\xd4\x22\x98\xd9\x77\x72\x1c\x58\x77\x0b\x78\xb3\x0b\x93\x74\x24\x62\xb4\xec\x83\xe3\x66\x0c\x17\x61\xbd\xda\xb1\xbf\x00\x8c\x86\xd4\x88\xd2\x0a\x79\x15\xe1\x63\x5a\xe5\xd5\x42\xc4\x78\xcc\xeb\xcf\xe5\x43\x8d\xc7\x74\xb3\x49\x8b\x3a\xcf\x2a\x94\x1b\xac\xca\x62\x9d\xd7\x79\x59\x54\x28\x6f\x90\x16\x5b\xdc\xe6\xc5\x7a\x01\xe2\xd0\x93\x03\xbd\x58\x37\xfb\x1b\x07\x9e\x63\xa4\x76\xce\xac\x22\xba\x10\xd8\x99\x93\x90\xb7\xa4\x78\xc7\x0a\x83\xd4\xdd\x28\x3b\x42\x67\x9e\xc9\x69\xd6\x1d\x2c\xb9\x3d\xfb\xf9\x31\x3d\xa4\x6e\x45\x8c\x81\xf7\x1c\x64\x38\x56\xfe\xb8\x54\x22\xc4\xcd\xa6\xbc\x9f\xf5\xb3\xfc\x3e\xfd\x94\x09\x91\xae\xd7\x50\xae\x7d\x52\x46\x3f\x9f\xbe\xc5\xd3\x44\x4d\x6f\xcc\x0f\x2c\xff\x5e\x17\x59\x51\x6f\xb6\x5f\xca\xbc\xa8\xf1\x2d\xfa\x07\x14\x7d\x17\xbf\x02\x00\x00\xff\xff\xda\xbb\xcb\x50\xb6\x02\x00\x00") - -func testImagesCrdConversionWebhookDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesCrdConversionWebhookDockerfile, - "test/images/crd-conversion-webhook/Dockerfile", - ) -} - -func testImagesCrdConversionWebhookDockerfile() (*asset, error) { - bytes, err := testImagesCrdConversionWebhookDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/crd-conversion-webhook/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCrdConversionWebhookMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x51\x4f\xe3\x38\x14\x85\x9f\xd7\xbf\xe2\xa8\xe1\xa1\x95\x4a\xca\xa2\xd5\x6a\xc5\x0a\x8d\x32\x6d\x07\x22\x50\x32\x4a\x02\x88\xa7\xca\x49\x6e\x93\xab\x49\x6d\x8f\xed\x10\xfa\xef\x47\x2e\x20\x0d\x9a\xbc\xe5\x9e\xe3\xe3\xcf\xc7\x8e\xb0\xd6\xe6\x68\xb9\xeb\x3d\x2e\x2f\xfe\xfe\x0f\x55\x4f\xb8\x1b\x6b\xb2\x8a\x3c\x39\x24\xa3\xef\xb5\x75\xb1\x88\x44\x84\x7b\x6e\x48\x39\x6a\x31\xaa\x96\x2c\x7c\x4f\x48\x8c\x6c\x7a\xfa\x50\x96\x78\x24\xeb\x58\x2b\x5c\xc6\x17\x98\x07\xc3\xec\x5d\x9a\x2d\xfe\x17\x11\x8e\x7a\xc4\x41\x1e\xa1\xb4\xc7\xe8\x08\xbe\x67\x87\x3d\x0f\x04\x7a\x6d\xc8\x78\xb0\x42\xa3\x0f\x66\x60\xa9\x1a\xc2\xc4\xbe\x3f\x6d\xf3\x1e\x12\x8b\x08\xcf\xef\x11\xba\xf6\x92\x15\x24\x1a\x6d\x8e\xd0\xfb\xdf\x7d\x90\xfe\x04\x1c\xbe\xde\x7b\x73\xb5\x5a\x4d\xd3\x14\xcb\x13\x6c\xac\x6d\xb7\x1a\xde\x8c\x6e\x75\x9f\xae\xb7\x59\xb9\x3d\xbf\x8c\x2f\x4e\x4b\x1e\xd4\x40\xce\xc1\xd2\xcf\x91\x2d\xb5\xa8\x8f\x90\xc6\x0c\xdc\xc8\x7a\x20\x0c\x72\x82\xb6\x90\x9d\x25\x6a\xe1\x75\xe0\x9d\x2c\x7b\x56\xdd\x12\x4e\xef\xfd\x24\x2d\x89\x08\x2d\x3b\x6f\xb9\x1e\xfd\xa7\xb2\x3e\xe8\xd8\x7d\x32\x68\x05\xa9\x30\x4b\x4a\xa4\xe5\x0c\x5f\x93\x32\x2d\x97\x22\xc2\x53\x5a\xdd\xe6\x0f\x15\x9e\x92\xa2\x48\xb2\x2a\xdd\x96\xc8\x0b\xac\xf3\x6c\x93\x56\x69\x9e\x95\xc8\xbf\x21\xc9\x9e\x71\x97\x66\x9b\x25\x88\x7d\x4f\x16\xf4\x6a\x6c\xe0\xd7\x16\x1c\x6a\xa4\x36\x74\x56\x12\x7d\x02\xd8\xeb\x37\x20\x67\xa8\xe1\x3d\x37\x18\xa4\xea\x46\xd9\x11\x3a\xfd\x42\x56\xb1\xea\x60\xc8\x1e\xd8\x85\xcb\x74\x90\xaa\x15\x11\x06\x3e\xb0\x97\xfe\x34\xf9\xe3\x50\xb1\x10\x65\xb1\x2e\xaf\x1b\xdb\xee\x1a\xad\x5e\xde\xde\xc1\x6e\xa2\xba\xd7\xfa\x87\x48\x8a\xf5\x2d\xbe\x5c\x43\x1e\xda\x7f\xff\x11\x55\x52\xdc\x6c\xab\xf0\x7f\x36\x5f\x3f\x14\x9b\xb4\x58\x88\x9b\xfc\x3e\xc9\x6e\x76\x8f\xdb\xa2\x4c\xf3\x2c\x68\x83\xf4\xe4\x7c\x88\xdd\x6d\xd2\x02\xc1\xac\xb4\x6f\xd9\xe2\x6c\xee\x7a\x1a\x06\x98\xa9\x5d\x2c\x04\xbd\x1a\x6d\xbd\x10\x35\xab\x2b\xf1\x57\x1c\xaf\xf8\x20\x3b\x3a\x1f\x3d\x0f\xb1\xeb\x51\xb3\xc2\xd9\x3c\xc0\x2d\x84\x88\xbf\xdf\xe6\xd9\xf3\x55\x18\x8a\x5f\x01\x00\x00\xff\xff\xc9\xae\x2b\xd4\xfc\x02\x00\x00") - -func testImagesCrdConversionWebhookMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesCrdConversionWebhookMakefile, - "test/images/crd-conversion-webhook/Makefile", - ) -} - -func testImagesCrdConversionWebhookMakefile() (*asset, error) { - bytes, err := testImagesCrdConversionWebhookMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/crd-conversion-webhook/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCrdConversionWebhookVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\x34\x2e\x4a\x2d\x33\xe2\x02\x04\x00\x00\xff\xff\xad\x76\x76\x6d\x09\x00\x00\x00") - -func testImagesCrdConversionWebhookVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesCrdConversionWebhookVersion, - "test/images/crd-conversion-webhook/VERSION", - ) -} - -func testImagesCrdConversionWebhookVersion() (*asset, error) { - bytes, err := testImagesCrdConversionWebhookVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/crd-conversion-webhook/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCrdConversionWebhookConfigGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x54\x4d\x6f\xdb\x46\x10\x3d\x6b\x7f\xc5\xab\x0e\x85\x65\xc8\xa4\x6b\xa0\x40\xaa\x22\x07\x55\xb6\x5b\xc1\x86\x54\x98\x4a\xd2\xa0\xe8\x61\x45\x0e\xc9\x81\x57\xbb\xec\xee\x30\x0c\x11\xf8\xbf\x17\x4b\xca\x96\x83\xe6\xd0\x1e\xc9\xf7\xf6\x7d\x0c\x87\x9b\x9e\xab\x95\x6b\x7a\xcf\x55\x2d\xb8\xba\xfc\xe1\x0d\x76\x35\xe1\xae\xdd\x93\xb7\x24\x14\xb0\x6c\xa5\x76\x3e\x24\x4a\xdd\x73\x4e\x36\x50\x81\xd6\x16\xe4\x21\x35\x61\xd9\xe8\xbc\x26\x1c\x91\x39\xde\x93\x0f\xec\x2c\xae\x92\x4b\x9c\x45\xc2\xf4\x08\x4d\x67\x3f\xab\xde\xb5\x38\xe8\x1e\xd6\x09\xda\x40\x90\x9a\x03\x4a\x36\x04\xfa\x9c\x53\x23\x60\x8b\xdc\x1d\x1a\xc3\xda\xe6\x84\x8e\xa5\x1e\x4c\x8e\x12\x89\xfa\x78\x14\x70\x7b\xd1\x6c\xa1\x91\xbb\xa6\x87\x2b\x5f\xb3\xa0\x45\x29\x00\xa8\x45\x9a\x45\x9a\x76\x5d\x97\xe8\x21\x65\xe2\x7c\x95\x9a\x91\x15\xd2\xfb\xf5\xea\x66\x93\xdd\x5c\x5c\x25\x97\x4a\xbd\xb3\x86\x42\x80\xa7\xbf\x5b\xf6\x54\x60\xdf\x43\x37\x8d\xe1\x5c\xef\x0d\xc1\xe8\x0e\xce\x43\x57\x9e\xa8\x80\xb8\x98\xb3\xf3\x2c\x6c\xab\x39\x82\x2b\xa5\xd3\x9e\x54\xc1\x41\x3c\xef\x5b\xf9\x6a\x40\xcf\xa9\x38\xe0\x35\xc1\x59\x68\x8b\xe9\x32\xc3\x3a\x9b\xe2\x97\x65\xb6\xce\xe6\xea\xc3\x7a\xf7\xdb\xf6\xdd\x0e\x1f\x96\x0f\x0f\xcb\xcd\x6e\x7d\x93\x61\xfb\x80\xd5\x76\x73\xbd\xde\xad\xb7\x9b\x0c\xdb\x5b\x2c\x37\x1f\x71\xb7\xde\x5c\xcf\x41\x2c\x35\x79\xd0\xe7\xc6\xc7\xec\xce\x83\xe3\xe8\xa8\x48\x54\x46\xf4\x95\x79\xe9\xc6\x30\xa1\xa1\x9c\x4b\xce\x61\xb4\xad\x5a\x5d\x11\x2a\xf7\x89\xbc\x65\x5b\xa1\x21\x7f\xe0\x10\x3f\x5e\x80\xb6\x85\x32\x7c\x60\xd1\x32\x3c\xff\xab\x4e\xa2\xce\x53\xa5\x1a\x9d\x3f\x46\x91\x83\x66\xab\x14\x1f\x1a\xe7\x05\x67\x6a\x32\xcd\x7d\xdf\x88\x4b\xc5\x84\xa9\x52\x93\xe9\xe3\x9b\x90\xb0\x4b\x73\xc3\x64\xe5\xa2\x72\xe9\xe3\xcb\x76\x4d\xbf\x05\x7b\x0a\xf2\x0a\x78\x34\xae\x9a\xaa\x99\x52\x69\x8a\x5f\x49\xe2\x67\x1f\xa8\x81\x64\xdc\x11\xb6\x17\xb9\x69\x83\x90\x47\xee\x6c\xc9\x55\xa2\xca\xd6\xe6\xa8\x48\x56\x03\xf3\x6c\x86\xf3\x93\x67\xb2\x7a\x39\xfe\x45\x4d\xc6\x13\x73\x90\xf7\x58\xbc\x45\xf4\x4e\xd6\x76\x35\xea\xad\x06\xf0\x6c\xa6\x26\x5c\x0e\x8c\xef\xde\xc2\xb2\x89\xe7\x26\x31\x56\x72\xab\x45\x9b\x33\xf2\x7e\xa6\x26\x4f\x6a\xf2\x12\xec\x45\xef\x95\xed\x86\xba\x5b\xf7\x2c\x39\xda\xfe\x67\x61\x4f\xd2\x7a\x7b\x2a\xae\x9e\xd4\xd8\x71\xd4\xd9\xdd\x67\x47\x45\xac\x8e\x7d\x4e\x33\xfa\x66\xf5\x19\xce\xc5\x84\x64\x64\x47\xdb\xb0\x22\x7f\x8a\x1d\xb1\x7b\xa7\x8b\x3f\x7e\xbc\xfc\xe9\x8e\xfa\xdf\x35\xfb\xa3\x41\x12\x79\xb7\x6c\x68\xfe\x3c\xec\x3b\xea\xe3\xf3\xff\xed\xf2\xfd\xc9\x3f\x32\xa3\x6c\xdc\x4d\x2d\x14\x16\xf8\xf3\xaf\x01\x3d\xbd\xfb\x32\xe4\x7b\x9a\xab\xc9\x24\x4d\xb1\xdb\x5e\x6f\x17\xf1\x0e\x09\x38\xb4\xd2\x6a\x13\x03\x43\x97\x71\x05\x3a\x1a\xff\xd4\xf8\x8f\x75\xb5\x16\xe4\xe4\x65\x58\x5e\xdd\x70\x20\xff\x89\x3c\x42\xed\x5a\x53\x44\x81\x64\x14\x1c\xe7\x12\xaf\xba\x05\x30\xb4\x7f\x18\xef\x82\xa5\x2d\xde\x93\xe7\xb2\x1f\x19\xc3\x90\x62\x8b\x27\xf5\x4f\x00\x00\x00\xff\xff\x01\x38\x44\xd3\x39\x05\x00\x00") - -func testImagesCrdConversionWebhookConfigGoBytes() ([]byte, error) { - return bindataRead( - _testImagesCrdConversionWebhookConfigGo, - "test/images/crd-conversion-webhook/config.go", - ) -} - -func testImagesCrdConversionWebhookConfigGo() (*asset, error) { - bytes, err := testImagesCrdConversionWebhookConfigGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/crd-conversion-webhook/config.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCrdConversionWebhookConverterConverter_testGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x56\x6f\x6f\x13\xb9\x13\x7e\x1d\x7f\x8a\x61\x25\x7e\x4a\xaa\xcd\x6e\x5a\xe9\x27\x50\x50\x5f\x84\xfe\x39\x22\x20\x45\xd9\x70\x08\x01\x3a\x9c\xdd\xd9\xac\xe9\xae\xbd\x67\x7b\x93\xe6\x50\xbf\xfb\x69\xbc\x4e\x9a\x94\x52\x7a\x1c\x2f\x4e\xad\x92\x78\x3c\x7e\x66\xe6\xf1\x3c\xb6\xe3\x03\x76\xa2\xea\xb5\x16\x8b\xc2\xc2\xd1\xe0\xf0\x29\xcc\x0a\x84\x97\xcd\x1c\xb5\x44\x8b\x06\x46\x8d\x2d\x94\x36\x11\x63\xaf\x44\x8a\xd2\x60\x06\x8d\xcc\x50\x83\x2d\x10\x46\x35\x4f\x0b\x04\x3f\x13\xc2\xef\xa8\x8d\x50\x12\x8e\xa2\x01\x74\xc9\x21\xf0\x53\x41\xef\x19\x5b\xab\x06\x2a\xbe\x06\xa9\x2c\x34\x06\xc1\x16\xc2\x40\x2e\x4a\x04\xbc\x4a\xb1\xb6\x20\x24\xa4\xaa\xaa\x4b\xc1\x65\x8a\xb0\x12\xb6\x70\x41\x3c\x44\xc4\xde\x7b\x00\x35\xb7\x5c\x48\xe0\x90\xaa\x7a\x0d\x2a\xdf\xf5\x02\x6e\x19\x03\x00\x28\xac\xad\x87\x71\xbc\x5a\xad\x22\xee\xb2\x8c\x94\x5e\xc4\x65\xeb\x65\xe2\x57\xe3\x93\xb3\x49\x72\xd6\x3f\x8a\x06\x8c\xbd\x95\x25\x1a\x03\x1a\xff\x6c\x84\xc6\x0c\xe6\x6b\xe0\x75\x5d\x8a\x94\xcf\x4b\x84\x92\xaf\x40\x69\xe0\x0b\x8d\x98\x81\x55\x94\xe7\x4a\x0b\x2b\xe4\x22\x04\xa3\x72\xbb\xe2\x1a\x59\x26\x8c\xd5\x62\xde\xd8\x3d\x82\x36\x59\x09\x03\xbb\x0e\x4a\x02\x97\x10\x8c\x12\x18\x27\x01\x3c\x1f\x25\xe3\x24\x64\xef\xc6\xb3\x17\x17\x6f\x67\xf0\x6e\x34\x9d\x8e\x26\xb3\xf1\x59\x02\x17\x53\x38\xb9\x98\x9c\x8e\x67\xe3\x8b\x49\x02\x17\xe7\x30\x9a\xbc\x87\x97\xe3\xc9\x69\x08\x28\x6c\x81\x1a\xf0\xaa\xd6\x94\xbb\xd2\x20\x88\x3a\xcc\x22\x96\x20\xee\x05\xcf\x55\x9b\x8c\xa9\x31\x15\xb9\x48\xa1\xe4\x72\xd1\xf0\x05\xc2\x42\x2d\x51\x4b\x21\x17\x50\xa3\xae\x84\xa1\xcd\x33\xc0\x65\xc6\x4a\x51\x09\xcb\xad\x1b\x7f\x53\x4e\xc4\x0e\x62\xc6\x6a\x9e\x5e\x12\x48\xaa\xe4\x12\xb5\x45\xcd\x98\xa8\x6a\xa5\x2d\x74\x59\x27\x90\x68\x63\xda\x83\x60\xe7\xb7\xfb\xb0\x68\x2c\x19\x89\x0d\xb9\x30\xf4\x93\x4c\x42\x2e\x02\xc6\x3a\xc1\xe5\x53\x13\x09\x15\xf3\x5a\xe0\x95\x45\xe9\x32\xea\xf3\x5a\x18\xd4\x4b\xd4\x71\x7d\xb9\xa0\x39\xb3\xef\x10\x2f\x0f\xe7\x68\xf9\x61\xb0\x07\x50\xf1\xb4\x10\x12\xf5\xfa\x66\x55\x85\x96\xc7\xcb\x07\xfb\xc5\x8d\x34\x56\x37\xa9\x6d\x34\x66\xf7\x2d\xd2\x8d\xb4\xa2\xc2\x07\xb8\xc4\x06\xb5\xe0\xa5\xf8\x0b\x75\xfc\xc5\x28\x19\xb0\x1e\x63\x79\x23\x53\x98\xa1\xb1\x27\x1b\x2e\xbb\x16\x0e\x3c\x2d\xd1\xac\x07\x5f\x59\xc7\xf0\xaa\x2e\xf1\x62\xfe\x05\x86\xc7\xf0\xf9\x52\xc8\x6c\x08\xad\x3b\x51\x30\xc5\xa5\xc0\x15\xe3\xb5\xf0\x1a\x1c\xc2\x1e\x43\x91\x4f\xcb\x13\xc5\xa8\xd7\xd1\xd8\x21\x03\x68\x44\x36\x84\xc1\x60\x30\xe8\xef\x7f\x30\x80\x0c\x0d\x09\x62\xf4\x66\xbc\x45\x35\x96\x44\x11\xe1\x95\x4b\x27\x4a\x55\x15\x2f\x8f\x18\x80\x9a\x7f\xc1\xd4\x9a\xa1\x13\x5f\x1f\x76\x13\xb9\x6b\xc9\xa1\xf3\x03\xf0\x75\x68\x25\x67\x7c\xee\x6d\x44\x7e\xc6\x2d\x1f\xfa\x31\x80\xe4\x15\x0e\xa1\x5a\xf7\x25\xae\xfa\xa9\x56\xb2\xdf\x86\xf3\x0e\xd4\xd8\x37\xce\x34\x9f\x90\x05\x82\x03\xf0\x7f\xf1\xff\x83\xed\xbc\xa8\xf8\xa2\x45\xe3\x2b\x34\xaa\xc2\x16\xd1\x99\xbd\x53\xa1\x8c\x7d\xa3\xb4\x1d\x42\x50\xaa\x94\x97\x34\x1e\x3e\x19\x3c\x19\x04\xec\x33\xeb\xc4\x31\x9c\x0b\x6d\x2c\x58\xbd\x06\xda\xc3\x10\x84\x05\x53\xa8\xa6\xcc\x20\xe7\xa2\x04\x6e\x9c\x5c\xa8\x08\x92\xbe\xe5\x55\xc9\x3a\x1a\x4d\xad\x48\x8f\xc3\x63\xd8\x08\x21\x9a\xe0\x6a\x8a\xa9\xd2\x19\xea\x6e\x8f\x7c\xdc\xb6\x84\x80\x5a\x6f\xfc\x5a\x1f\x67\xef\x06\x6f\x2e\x92\x59\x10\x42\x10\x7b\xd5\x05\x21\x78\x21\xb5\x6e\x9c\x80\xb6\xad\xd2\xeb\xb1\x8e\xc8\x1d\xd8\xa3\x63\x90\xa2\xa4\x46\xea\xd8\xe8\x9c\x5b\x5e\x76\x51\xeb\x1e\xeb\x5c\x6f\xa3\x46\x2f\xdc\xf2\x68\x94\x65\xdd\xe0\x44\x49\x8b\xd2\xf6\x67\xeb\x1a\x29\xa0\x3f\x10\xe9\x44\x68\xfb\xb6\xc7\x3a\x09\x69\xf2\xac\xdd\x56\xdf\xb9\xdd\x4d\x95\x21\x78\xd4\x1e\xeb\xf8\x5c\xdb\x1e\xa5\xb2\x7c\x17\x46\xb7\xfb\xf7\xeb\x35\xeb\x98\xb4\xc0\xca\x91\xe4\x15\x43\x85\x25\xce\x48\x0c\x51\xec\x64\x2b\x21\x72\x23\x8b\xf3\xd9\x5a\xbb\xce\x74\x8a\x39\x6f\x4a\xfb\x1a\x2d\x3f\xe7\xa9\x55\x7a\x1d\x42\x0b\x7e\xf3\x9d\xf3\xd2\x60\x4b\xd2\x1f\x21\xfd\x7b\xde\xf7\xa3\x44\xa7\x98\xaa\x0c\xb7\xb5\x45\xcf\x55\xb6\x8e\x9e\xaf\x2d\x9a\x6e\x2f\x24\x5e\x43\xf8\xdf\x5e\x91\xbd\x67\x3f\x24\x5d\xe4\xb0\xb7\x24\x9a\x6e\xd0\xa7\x68\x9a\xd2\x46\x89\xe5\xb6\x31\x84\xb1\x3c\xf4\x83\x73\x2e\xca\x46\xe3\x2e\x60\xde\x0d\xf0\xaa\xc6\x94\xae\x15\xea\x39\x55\xa3\x76\xbb\x44\x37\x95\x6b\xc6\x55\x81\x12\xd6\xbc\x2a\xa9\x15\x6b\xad\x96\x22\xc3\xac\xbd\x5e\xa9\x4c\x28\xdc\xae\xd3\x7e\x5e\x03\x96\x74\x59\xe5\xf0\x68\xd3\x54\xd4\x06\x5c\x48\xd3\xbd\x3f\xd7\xd7\x68\x0c\x5f\x60\x08\x81\x83\xac\xb9\x36\x48\x0c\x28\x1d\xf4\xbe\x9b\xad\xcf\x4f\x49\xb8\x59\xa4\x43\x98\x37\x96\xf4\x44\x73\x3e\xcf\x21\x3c\x5e\x06\xe1\x0f\xe8\xf2\x29\x38\x72\x9d\x46\x27\x6a\xe5\x14\x4a\xa5\x87\x74\xa9\xed\xa8\xd4\x34\x69\x8a\xc6\xe4\x4d\x59\xae\x37\xb8\x3b\x0a\x7d\xa0\x40\xff\xab\xfa\xa4\x8a\x7f\x5e\x9f\xf7\xcb\x93\xb0\xef\xd6\xdf\xfb\xd1\xeb\x57\xff\x5c\x83\x77\x88\x6f\x3f\xc4\x2f\x14\x5f\xde\x0d\x52\x2e\xe9\xfd\x99\x39\x4c\x77\x40\x0f\xe1\xa3\x84\xc7\xcb\x8f\x12\xce\xa8\x5f\x7d\xaf\xed\x45\x73\x99\xfd\xbc\x6a\x93\xb6\xd9\x6e\x67\xa2\x3d\x92\x7b\x31\xb7\xdd\x7e\x6f\xa3\xb7\x09\x6c\x5e\x5b\x99\x7f\x09\xec\xbe\x50\xa2\xb7\x3b\x83\xaf\xd7\x0f\x65\xf6\x3b\x05\x9d\xec\x44\xa2\xab\xfd\xc3\xe0\x53\x34\xe5\xab\x5b\x94\xbb\xe9\x87\x1d\x77\x18\x02\xa7\x2c\x82\x3b\xdf\x10\x37\x75\x3b\xc8\xe8\x37\xb4\x37\xef\x8e\x2e\x45\x20\x7c\xee\xd1\xdd\x5e\xed\x9c\x26\xc7\xf0\x78\x19\x02\x4f\x6d\xc3\xcb\xe3\x96\x45\x0a\xf7\x6d\xec\xed\x7d\x7e\x3b\x5e\x5b\xe5\x87\xc0\xcd\x7d\xfa\x55\xe1\xdc\xa3\xe1\x3b\x91\xe8\xad\xfc\xaf\x22\x5d\xb3\xbf\x03\x00\x00\xff\xff\xc8\x8d\x7c\x7c\xbf\x0d\x00\x00") - -func testImagesCrdConversionWebhookConverterConverter_testGoBytes() ([]byte, error) { - return bindataRead( - _testImagesCrdConversionWebhookConverterConverter_testGo, - "test/images/crd-conversion-webhook/converter/converter_test.go", - ) -} - -func testImagesCrdConversionWebhookConverterConverter_testGo() (*asset, error) { - bytes, err := testImagesCrdConversionWebhookConverterConverter_testGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/crd-conversion-webhook/converter/converter_test.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCrdConversionWebhookConverterExample_converterGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x54\x51\x6f\xdb\x36\x17\x7d\x16\x7f\xc5\x2d\x81\x00\x72\xe1\x4f\x4e\xfc\x54\xf8\x83\x1f\xbc\x24\x5b\x8d\x76\x76\x11\xa5\x2d\x8a\xa2\x40\x69\xea\x4a\xe2\x2c\x91\x2c\x79\x65\xc7\x68\xfb\xdf\x07\xca\x52\xa2\x66\x6b\x92\x01\xc3\x5e\x2c\x93\x3a\x87\xe7\xdc\xcb\x73\x35\x79\xce\xce\x8d\x3d\x38\x55\x94\x04\xd3\xd3\xb3\x17\x70\x5d\x22\xbc\x6a\x36\xe8\x34\x12\x7a\x58\x34\x54\x1a\xe7\x13\xc6\x5e\x2b\x89\xda\x63\x06\x8d\xce\xd0\x01\x95\x08\x0b\x2b\x64\x89\xd0\xbd\x19\xc3\x3b\x74\x5e\x19\x0d\xd3\xe4\x14\xe2\x00\xe0\xdd\x2b\x3e\xfa\x3f\x3b\x98\x06\x6a\x71\x00\x6d\x08\x1a\x8f\x40\xa5\xf2\x90\xab\x0a\x01\x6f\x24\x5a\x02\xa5\x41\x9a\xda\x56\x4a\x68\x89\xb0\x57\x54\xb6\x22\xdd\x11\x09\xfb\xd0\x1d\x60\x36\x24\x94\x06\x01\xd2\xd8\x03\x98\x7c\x88\x02\x41\x8c\x01\x00\x94\x44\x76\x36\x99\xec\xf7\xfb\x44\xb4\x2e\x13\xe3\x8a\x49\x75\x44\xf9\xc9\xeb\xe5\xf9\xe5\x2a\xbd\xfc\xdf\x34\x39\x65\xec\xad\xae\xd0\x7b\x70\xf8\xa5\x51\x0e\x33\xd8\x1c\x40\x58\x5b\x29\x29\x36\x15\x42\x25\xf6\x60\x1c\x88\xc2\x21\x66\x40\x26\xf8\xdc\x3b\x45\x4a\x17\x63\xf0\x26\xa7\xbd\x70\xc8\x32\xe5\xc9\xa9\x4d\x43\x3f\x34\xa8\x77\xa5\x3c\x0c\x01\x46\x83\xd0\xc0\x17\x29\x2c\x53\x0e\xbf\x2c\xd2\x65\x3a\x66\xef\x97\xd7\x2f\xd7\x6f\xaf\xe1\xfd\xe2\xea\x6a\xb1\xba\x5e\x5e\xa6\xb0\xbe\x82\xf3\xf5\xea\x62\x79\xbd\x5c\xaf\x52\x58\xff\x0a\x8b\xd5\x07\x78\xb5\x5c\x5d\x8c\x01\x15\x95\xe8\x00\x6f\xac\x0b\xde\x8d\x03\x15\x5a\x87\x59\xc2\x52\xc4\x1f\xc4\x73\x73\x34\xe3\x2d\x4a\x95\x2b\x09\x95\xd0\x45\x23\x0a\x84\xc2\xec\xd0\x69\xa5\x0b\xb0\xe8\x6a\xe5\xc3\xe5\x79\x10\x3a\x63\x95\xaa\x15\x09\x6a\xd7\x7f\x29\x27\x61\xcf\x27\x8c\x59\x21\xb7\xe1\x10\x69\xf4\x0e\x1d\xa1\x63\x4c\xd5\xd6\x38\x82\x98\x45\x3c\xaf\x89\xb3\x88\x87\x9a\x75\xe1\x39\x63\x11\xdf\xbe\xf0\x89\x32\x93\x6d\x65\x8a\xb0\xae\x91\xc4\xee\x0c\xfa\x6d\x61\x55\x2d\x64\xa9\x34\xba\xc3\xc4\x6e\x8b\xb0\xe1\x27\x01\x34\xd9\x9d\xf1\x3b\xfa\x83\xb8\x49\xa3\x3d\xb9\x46\x52\xe3\x30\xe3\x6c\xc4\x58\xde\x68\xd9\x5b\xbc\xbc\x11\xb5\xad\xf0\xfc\xea\x22\x5e\x6f\xfe\x40\x49\xf0\x7c\x88\x4f\xde\x0e\x16\x63\x20\xd3\xc7\xf9\x58\xc4\x08\xe2\x87\xe0\xc7\x72\x92\x94\x04\x35\x7e\x04\x5f\x59\x14\x0a\x4d\xde\xc5\xd3\x51\xb2\xd4\xb9\x89\x79\xe7\x22\xb4\x5b\xba\x8c\x8f\x18\x8b\xfa\xde\x65\x9d\x9f\xd9\x1c\x8e\xff\x92\x0b\x44\x1b\x26\x33\x1e\xb1\x28\x77\xa6\xee\xbd\xdc\x21\x7e\x43\x5a\xbc\x59\x76\xfb\x71\x38\x4d\xe5\x03\xd3\xf3\x39\x0c\x79\x5f\x59\x14\x39\xa4\xc6\x69\xd0\xaa\x1a\x83\x6f\x7d\x5e\x3a\x67\xdc\x7b\x45\xe5\xef\xe8\xbd\x28\xb0\x37\xd9\x52\x02\x1d\x04\xf4\xcb\x90\x7c\xf2\x58\xe5\xe0\x4b\xd3\x54\x59\x3b\xc8\x52\x54\x55\x1b\x8d\x3d\x6e\x4a\x63\xb6\x33\x38\xf1\x7c\xd0\xbb\x11\x8b\xbe\x33\x16\xf9\xbd\x22\x59\xfe\xc4\x79\xf0\x26\x85\x47\xe0\x9e\xc2\xc4\x25\x78\xbc\xa7\x44\x9a\x3a\xdc\xfd\x8c\x45\xfd\x01\x77\xe5\x85\x7a\x7e\x4e\x9a\xb6\xa4\xa8\x34\x9e\xde\x18\x47\x63\x30\xdb\xd0\xb9\x7b\xed\x4e\x8e\x8f\x8f\xbc\xc7\xf1\x4f\x81\xa5\xf2\x00\x0f\x02\x51\x94\x61\x85\x84\xf1\xdf\x13\xc7\x70\xc7\x1c\xb5\x70\x2b\x1c\xf9\xa0\xd4\xe5\x3e\x49\x6d\xa5\x28\xee\x51\x49\xdc\x45\x69\x0c\x7c\xd6\x51\x54\x0e\x15\xea\xb8\x65\x8e\xe0\xd9\x1c\xa6\x9d\xf4\x93\xae\x4b\xe9\x9d\xa8\x54\x06\xbd\x02\xec\x44\xd5\x20\x7c\x3e\xd9\x7d\xe6\xe3\xdb\xdd\xa3\xd2\xf7\xf6\xf7\xa1\x1e\xf0\x4f\x30\x87\xd6\xc9\xc7\xd3\x4f\x0f\xa2\x6d\xdb\xad\x5b\xf4\x59\x8b\x0e\x02\x19\xe6\xa2\xa9\xa8\x6d\xff\x53\x0a\x68\x34\xde\x58\x94\xe1\xab\x38\x88\x5e\xff\x3c\xf9\x72\x2f\x4c\x41\xe3\xb1\x6b\xff\x87\x59\x39\xbb\xcb\xca\x18\x4a\xe1\x5f\x1a\x4f\x8f\x85\xe5\x18\x14\xdb\x46\xab\x14\xbe\xed\xfc\x03\x14\x3b\xcc\x56\x2f\xf1\xed\xdb\x2d\xf5\x6b\x9f\x84\x67\xfd\xcb\x2e\x02\x41\x0b\xe6\xc0\xf9\xe0\x02\x3b\xd8\x80\xd8\x1a\xb9\x0f\x7b\x3c\xeb\x30\x87\xbc\xa6\x24\xb5\x4e\x69\xca\x63\x7e\xe2\x67\xed\xf0\x1e\x3b\x61\x6f\x73\xf3\x94\x19\xe0\x4f\x83\xda\xdb\x51\xf9\x8f\xb2\x32\x90\xf8\x97\x14\x06\x1f\xd5\xf6\xe3\xd6\x9f\x7b\xaf\xe6\x5e\x23\x6d\xa4\x44\xcc\xe2\x11\xfb\xce\xfe\x0c\x00\x00\xff\xff\x93\xc3\x72\x3d\x6d\x09\x00\x00") - -func testImagesCrdConversionWebhookConverterExample_converterGoBytes() ([]byte, error) { - return bindataRead( - _testImagesCrdConversionWebhookConverterExample_converterGo, - "test/images/crd-conversion-webhook/converter/example_converter.go", - ) -} - -func testImagesCrdConversionWebhookConverterExample_converterGo() (*asset, error) { - bytes, err := testImagesCrdConversionWebhookConverterExample_converterGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/crd-conversion-webhook/converter/example_converter.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCrdConversionWebhookConverterFrameworkGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x58\x5d\x6f\xdb\xb8\xd2\xbe\x36\x7f\xc5\xac\x80\x16\x52\xa0\x4a\x6d\xae\x16\x59\xe4\xc2\x4d\xd2\x77\xfd\x6e\x9b\x2c\xec\x74\x8b\xa2\x08\x76\x69\x69\x6c\xb3\x91\x28\x1d\x92\xb2\xeb\x0d\xfc\xdf\x0f\x86\xa4\x64\x29\x76\xda\x14\x38\xbd\xa9\xc5\xf9\xe0\x33\xdf\xc3\xa4\x27\xec\xa2\xaa\xb7\x4a\x2c\x57\x06\x4e\x5f\xbf\xf9\x15\x6e\x57\x08\x7f\x34\x73\x54\x12\x0d\x6a\x18\x37\x66\x55\x29\x9d\x30\xf6\x5e\x64\x28\x35\xe6\xd0\xc8\x1c\x15\x98\x15\xc2\xb8\xe6\xd9\x0a\xc1\x53\x62\xf8\x0b\x95\x16\x95\x84\xd3\xe4\x35\x84\xc4\x10\x78\x52\x10\xfd\xc6\xb6\x55\x03\x25\xdf\x82\xac\x0c\x34\x1a\xc1\xac\x84\x86\x85\x28\x10\xf0\x5b\x86\xb5\x01\x21\x21\xab\xca\xba\x10\x5c\x66\x08\x1b\x61\x56\xf6\x12\xaf\x22\x61\x9f\xbd\x82\x6a\x6e\xb8\x90\xc0\x21\xab\xea\x2d\x54\x8b\x3e\x17\x70\xc3\x18\x00\xc0\xca\x98\xfa\x2c\x4d\x37\x9b\x4d\xc2\x2d\xca\xa4\x52\xcb\xb4\x70\x5c\x3a\x7d\x3f\xb9\xb8\xba\x9e\x5d\xbd\x3a\x4d\x5e\x33\xf6\x51\x16\xa8\x35\x28\xfc\x4f\x23\x14\xe6\x30\xdf\x02\xaf\xeb\x42\x64\x7c\x5e\x20\x14\x7c\x03\x95\x02\xbe\x54\x88\x39\x98\x8a\x70\x6e\x94\x30\x42\x2e\x63\xd0\xd5\xc2\x6c\xb8\x42\x96\x0b\x6d\x94\x98\x37\x66\xe0\xa0\x16\x95\xd0\xd0\x67\xa8\x24\x70\x09\xc1\x78\x06\x93\x59\x00\x6f\xc7\xb3\xc9\x2c\x66\x9f\x26\xb7\xbf\xdf\x7c\xbc\x85\x4f\xe3\xe9\x74\x7c\x7d\x3b\xb9\x9a\xc1\xcd\x14\x2e\x6e\xae\x2f\x27\xb7\x93\x9b\xeb\x19\xdc\xbc\x83\xf1\xf5\x67\xf8\x63\x72\x7d\x19\x03\x0a\xb3\x42\x05\xf8\xad\x56\x84\xbd\x52\x20\xc8\x75\x98\x27\x6c\x86\x38\xb8\x7c\x51\x39\x30\xba\xc6\x4c\x2c\x44\x06\x05\x97\xcb\x86\x2f\x11\x96\xd5\x1a\x95\x14\x72\x09\x35\xaa\x52\x68\x0a\x9e\x06\x2e\x73\x56\x88\x52\x18\x6e\xec\xf7\x81\x39\x09\x3b\x49\x19\xab\x79\x76\x4f\x4a\xb2\x4a\xae\x51\x19\x54\x8c\x89\xb2\xae\x94\x81\x90\x8d\x82\x45\x69\x02\x36\x0a\x44\x95\x8a\xaa\x31\xa2\xa0\x0f\x89\x26\xa5\xb8\xd0\x6f\x72\x86\x5c\xea\x80\xb1\x51\xb0\x14\x66\xd5\xcc\x93\xac\x2a\xd3\xb2\x91\x12\xd5\xbf\xe9\xb2\xe2\x8d\xa9\x24\x2e\x2d\xc3\xfd\xaf\x3a\x11\x55\x7a\x5f\x54\x83\x6f\x5e\x0b\xfc\x66\x50\x5a\xd8\xaf\x78\x2d\x34\xaa\x35\xaa\xb4\xbe\x5f\x12\x4d\x0f\x19\xd2\xf5\x9b\x39\x1a\xfe\x26\x60\xa3\x12\x0d\x5f\xbf\x81\x9e\x9e\x92\x67\x2b\x21\x51\x6d\xf7\xc2\xc4\x94\xae\x89\xfd\x59\x7c\x69\x23\xb5\x51\x4d\x66\x1a\x85\xf9\xf7\x84\x54\x23\x8d\x28\xf1\x19\x2c\xa9\x46\x25\x78\x21\xfe\x45\x95\x7e\xd5\x95\x0c\x58\xc4\x58\x9a\xb6\x1e\x7f\xd7\xc8\x8c\x32\x8b\x22\xd3\x68\x54\x90\xe3\x42\x48\xcc\x61\xd1\xc8\x8c\x42\x67\x23\xcf\xe5\xd6\x0b\x90\x17\x12\x5b\xdf\x59\x95\x23\xa5\xf1\xbe\x04\x85\x06\x4e\xaa\x0d\x96\x75\xc1\x0d\x25\x10\x37\x90\x71\x09\x73\xab\xbc\x53\x75\x31\xed\x69\x83\xa5\x58\x63\xab\xc6\x5f\x9a\x30\xb3\xad\x71\x80\x91\x48\xe1\xcd\xfc\x2b\x66\x06\x4e\xfa\x6e\x4a\x3e\xf6\x3e\x62\x68\xb5\xba\xdc\x88\x20\xfc\x1e\xb3\x8b\x61\x32\x33\xdc\x34\xba\xef\x17\x52\x31\x45\x5d\x57\x52\xe3\x3b\x2e\x8a\x46\xe1\x27\x61\x56\x1f\x50\x6b\xbe\xc4\x85\x35\x15\x56\x58\xd4\xa8\xf6\x9e\x32\x15\x64\x0a\xc9\x70\x2e\x61\x9c\xfb\x5a\x68\xd5\x90\x72\xdb\x8f\x38\xf9\xa1\xe4\x86\x8a\x18\xcb\x39\xe6\x39\xfd\x50\xaa\x52\x50\x3a\xfd\x09\x23\x9d\xcf\x83\x12\x96\x7a\xe9\x8d\x8d\xa1\xe6\x8a\x97\x1a\x92\x24\x11\xd2\xa0\x5a\xf0\x0c\x1f\x76\x11\x9c\xf8\xac\x4d\x2e\x0e\x34\xc2\x03\x1b\x29\x34\x8d\x92\xf0\xf2\x69\xae\x07\x36\x1a\x4d\x51\x37\x85\x39\x1b\xfa\x8c\x08\x23\x0f\xe5\x0c\x16\xa5\x49\x66\xb5\x12\xd2\x58\x58\x2d\x9e\x24\x49\xa2\x98\x18\x9d\xcc\x19\x0c\x75\x78\xa3\x88\x63\x17\xb3\xd1\x8e\xb1\x1d\x73\x0e\xd0\x96\x7e\x45\xae\xe9\x99\xfc\x1c\x8b\x07\x17\xf4\x6c\x3c\x00\xff\x5c\xec\x3f\x82\xbe\x7b\x04\x7a\xd6\x64\x19\x62\x1e\xfe\x04\x94\xf6\x8a\x01\xc1\xea\xd1\xba\xbd\x21\x4d\x21\xaf\xf6\xf1\x69\x2b\xc4\xd5\x2f\xcd\x1e\xd4\x76\x36\xb8\x3a\x69\x2b\x0b\xfb\xe5\xd6\xa5\x2b\x97\x39\x38\x2c\xda\xce\xc1\x8e\x43\xf9\xa8\x27\x74\xdd\xc2\x99\xa8\x61\x23\x8a\x82\x0a\x59\x21\xf5\x67\xcc\x81\x6b\x98\x22\xd7\x95\x74\x5d\x00\x8f\xab\xb0\x3e\xe9\x63\x0e\x3d\xe6\xa9\x43\x7b\x3c\x39\x2d\x29\x6e\xcd\xeb\x37\x82\x1f\x66\xf3\x9a\xab\x6e\x9c\xe4\xae\x61\x68\xf8\x72\xe7\xdb\x61\x32\xe5\x9b\xab\xb6\x9d\xb3\x11\x75\xa4\xbf\x63\xf2\x17\x9c\x9d\x83\xe2\x72\x3f\x8b\x3c\x88\xa4\x55\x41\x21\xca\x14\xb1\x3d\xd9\x50\x1e\x76\x6c\x34\x12\x0b\x2a\x66\xe2\xcb\x54\xf2\x51\x96\x5c\xe9\x15\x2f\xfe\x7f\x76\x73\x1d\x56\xf3\xaf\x74\x7f\xf4\x9b\xe5\xf8\xe5\x1c\xa4\x28\xac\xde\x11\x4d\xa5\xc4\x26\x7a\x88\x4a\x45\x74\xe4\xd3\xe4\x79\x4d\x20\xa0\x30\xb9\xcd\xa2\x69\xaf\x2c\xda\x34\x08\x5f\xac\x23\xd7\x7a\x6c\x97\x39\x83\x17\xeb\x20\xf6\x15\xd4\x61\x8a\xc1\x5f\x4c\x36\x74\xfe\xbb\x98\xc6\x3e\xa1\xad\x41\xee\x38\x7c\x99\xa9\xf8\xb1\x9b\x2e\x51\xd3\xde\x33\xfe\x73\xe2\x17\xb8\xc8\xf9\xc2\x49\xb7\xe9\xff\xcb\xf9\xd1\xf4\x3e\x70\x42\x27\x65\x31\x46\x7d\x87\xfc\xa0\x4d\xed\x1b\x95\xd3\x61\x1b\xcf\xee\xd0\xae\x64\x86\x66\x0f\x36\x7c\x8e\x35\x07\x59\x75\x4e\x2b\x1e\xca\x3c\x7c\x4c\x89\xe1\x58\xba\x3d\x38\xea\x19\xf4\x60\xec\x22\xaa\xec\x67\xda\x76\xf1\xe8\x9a\xb3\x83\x44\x8f\x7b\x8d\x7a\xff\xef\x51\x4b\x1a\xb6\x2b\x5a\x77\xc2\x8d\xdd\x75\x93\xf6\xb2\x4f\x4a\x18\x54\x31\x28\x38\xf1\xe7\xdf\x2b\x48\x5f\x74\xf3\x2a\xdf\xc2\x97\xbb\xf9\xd6\x20\xa3\xc8\xab\xe4\x2d\x9d\xf4\xd2\x5c\x2c\x20\xe7\x86\xc7\x6d\x81\xb8\xad\x2e\x99\x22\xcf\xc7\x45\x11\x3a\x01\x5f\x1d\xe7\xbd\xea\xb0\x9a\xcf\xad\xac\x0b\xe4\x8e\x31\x8a\x86\x41\x69\x6e\x69\x51\xa0\xda\x4d\x7e\x47\x9e\xa3\x4a\xfe\x0f\x4d\x18\x5c\x38\xe2\x2b\xa2\x06\x11\x1b\xed\x97\x20\xe2\x5d\xa2\x99\xc8\xba\x31\xb3\xee\x34\xec\x69\x8b\x2c\xfa\x9e\x44\x0f\x0a\x8d\x9e\xb3\xf3\xc1\xb0\x08\x84\x5c\xf3\x42\xe4\xd0\xbf\x13\x56\x16\x0c\xfc\xf3\x42\xff\x13\x58\xb7\xf5\xb4\xf7\x12\xdd\xce\x1a\x3a\xb2\x6e\x76\xb9\xbf\x89\xc1\x0e\x20\x7b\xe4\xca\xe4\x2d\xcf\x7d\x08\x88\xd7\x25\x8b\xf3\x82\x55\xf5\x57\x78\x1a\x25\x13\xb9\xa8\x16\x61\xb0\xe2\x32\x2f\x68\x1b\xf7\xd3\xc0\x57\x3b\xb9\x30\x62\xa3\x2e\xcd\xd7\x02\x37\x64\xc9\xb1\x84\x23\x1a\xb5\x32\xb1\xa0\xde\xf8\x77\x17\xae\xbd\x4b\x92\x4b\xa4\xf5\x2f\x24\xad\x31\x39\x27\x86\x97\x03\xd5\x87\x2d\xee\xb0\xc3\x0d\x04\xba\xd4\x83\xf3\x9f\x6f\x79\x39\x76\xd0\x5c\x16\x3e\xea\x78\x83\x86\x67\x3d\xd1\x76\xbb\x1d\x60\xe1\xc6\xc6\xd3\x70\x8e\x0f\x2f\xcf\x35\xac\x8b\xa7\xcd\x4a\x3e\x4e\x2e\x3b\xd3\x1e\x89\x13\xcd\x76\x81\x61\x30\xc3\x41\x96\x69\x94\xb9\x0b\xab\x53\xe8\xe3\x7a\xfc\xb6\x28\x62\x6c\x94\xa6\xc4\x8c\xa6\xbf\x1b\xc4\x20\x0c\x2d\xaf\xf4\x7e\x96\x88\xb4\x79\xda\x57\xf0\x7e\x5e\x1f\xe0\x77\x53\xfa\xfc\x78\x6f\xb2\xc4\x07\x4a\x44\x9e\xd9\xf7\xf7\x41\x25\x8e\xed\x39\xd5\x60\xd5\x2f\x38\x5f\x86\x37\x8d\x19\xd6\xa1\x53\xe3\x4a\x70\x28\xf0\xcc\x2a\xf4\x38\x86\xf5\xd7\x69\xfd\xdf\x95\xde\xc8\x17\xc5\x00\x64\x72\x25\x6d\x5d\x0c\x8b\x21\x86\x8d\x33\xe8\x87\x25\x31\x84\x82\x4a\xf9\x8f\x68\x00\x69\x42\x9b\xae\xe4\xc5\xcc\xbe\x54\x2d\xc7\x10\x9b\x5b\x14\x2d\xf9\xea\x1b\x2f\xeb\x02\xfd\xe4\x70\xdd\x5e\x69\x40\x99\xd7\x95\x90\xa6\x7b\xd7\xa3\xe3\xdb\x3f\xc4\xbb\x87\x20\xd7\xed\x61\xab\x6b\x7a\xd9\x7b\xa8\xd9\x21\x72\xe4\xaa\x67\x8e\x14\x3b\x3d\xfc\x0c\x8a\x61\xbf\x56\xec\xef\x8a\xc8\x1c\xfb\x1c\x2c\x31\x17\xdc\x76\x57\xb7\x72\x91\x28\x7d\xc6\x30\x6b\xe6\xed\xb9\x90\x4b\x12\xa0\x81\xa4\xb3\x15\x96\x54\xc1\xed\x30\xbe\xc6\xcd\xcc\x9e\x85\x91\x63\xe8\x02\x47\xb3\xbc\xe4\xf5\x97\xee\x8a\x6e\x5f\xdc\x07\xf7\x81\x8d\x1e\x02\xff\x37\x1d\xb2\x3d\x88\x21\xb0\x2f\xea\xdd\x19\xd0\xff\x56\xfd\x3e\x93\xed\xd1\x25\x2e\x78\x53\x98\x0f\x68\xf8\x3b\x9e\x99\x4a\x6d\x63\x0f\x6b\xff\xff\x82\x17\x1a\x69\x28\x1f\x68\xdf\xf2\xb2\xe8\x6b\xff\x3c\xfe\xf0\xfe\xe7\x6f\x88\xe2\x6e\xd8\x7f\x7f\xf0\x75\x6f\xe6\x43\xdb\xc9\xd5\x35\xa7\x87\x06\xcd\x01\xf7\x67\x97\x64\x56\x17\xc2\x5c\xf7\x35\xc4\x10\xa4\x41\x0c\xa7\x2e\xdd\x0b\x94\xa1\x15\x8a\x28\xeb\x4f\x6d\xce\xfb\x45\x47\x8a\xa2\xbf\xf7\xf4\x02\xb1\x0f\xc1\x83\x95\xfd\xf2\xfa\xce\xbe\xc5\x8c\xfe\xf2\xe6\x6e\x77\xd7\x37\xe5\x89\xe6\xf1\x03\x33\x3c\x30\xdf\x12\xa8\xad\xbc\xee\x23\x3b\x0e\xe5\x78\xdc\xef\xfc\x26\x52\xf0\x46\xa3\x75\x4d\xf7\x27\xa7\xe4\x4f\xae\x34\xba\xe6\xb7\x6f\x6a\xfe\xb9\xe1\x04\x7a\x2f\x0e\xaf\x80\x60\x10\xcb\x7d\x0c\xeb\x3d\xb5\x9f\xa5\x76\x1d\xd2\x1b\x61\xb2\x95\xfb\x9d\x71\xdd\xca\x27\x36\x86\xe7\xe7\x70\xef\x7e\xbd\x7c\xd9\x12\xda\xf2\xb0\x34\xff\x61\xf7\xe2\xd1\x4f\x48\x06\x27\xc1\x51\x99\xe0\x24\x78\x52\xe0\xcc\x0a\x78\xcf\xae\x7b\x9b\x38\xb9\xad\x97\x0a\x3b\xf6\xdf\x00\x00\x00\xff\xff\x49\xe7\x06\x89\x44\x16\x00\x00") - -func testImagesCrdConversionWebhookConverterFrameworkGoBytes() ([]byte, error) { - return bindataRead( - _testImagesCrdConversionWebhookConverterFrameworkGo, - "test/images/crd-conversion-webhook/converter/framework.go", - ) -} - -func testImagesCrdConversionWebhookConverterFrameworkGo() (*asset, error) { - bytes, err := testImagesCrdConversionWebhookConverterFrameworkGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/crd-conversion-webhook/converter/framework.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCrdConversionWebhookMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x52\xc1\x6e\xdb\x46\x10\x3d\x73\xbe\x62\xb0\x87\x40\x74\x29\xd2\x75\x53\x20\x55\x91\x03\xab\xd8\xb0\x60\x43\x0e\x4c\x25\x41\x8e\xab\xe5\x90\x5c\x88\xda\x65\x77\x87\x96\x89\x20\xff\x5e\x2c\x49\xc5\x31\xda\x43\x79\xe2\xee\xce\xbc\x79\xef\xcd\xcb\x2e\x60\x6d\xbb\xc1\xe9\xba\x61\xbc\xba\xfc\xf5\x1d\xee\x1a\xc2\xbb\x7e\x4f\xce\x10\x93\xc7\xbc\xe7\xc6\x3a\x9f\x02\xdc\x6b\x45\xc6\x53\x89\xbd\x29\xc9\x21\x37\x84\x79\x27\x55\x43\x38\xbf\x24\xf8\x99\x9c\xd7\xd6\xe0\x55\x7a\x89\x8b\x50\x20\xe6\x27\x11\xff\x09\x83\xed\xf1\x28\x07\x34\x96\xb1\xf7\x84\xdc\x68\x8f\x95\x6e\x09\xe9\x59\x51\xc7\xa8\x0d\x2a\x7b\xec\x5a\x2d\x8d\x22\x3c\x69\x6e\xc6\x21\x33\x44\x0a\x5f\x67\x00\xbb\x67\xa9\x0d\x4a\x54\xb6\x1b\xd0\x56\x3f\x57\xa1\x64\x00\x44\xc4\x86\xb9\x5b\x65\xd9\xe9\x74\x4a\xe5\xc8\x32\xb5\xae\xce\xda\xa9\xca\x67\xf7\x9b\xf5\xf5\xb6\xb8\x5e\x5e\xa5\x97\x00\x9f\x4c\x4b\xde\xa3\xa3\xbf\x7b\xed\xa8\xc4\xfd\x80\xb2\xeb\x5a\xad\xe4\xbe\x25\x6c\xe5\x09\xad\x43\x59\x3b\xa2\x12\xd9\x06\x9e\x27\xa7\x59\x9b\x3a\x41\x6f\x2b\x3e\x49\x47\x50\x6a\xcf\x4e\xef\x7b\x7e\x65\xd0\x99\x95\xf6\xf8\x73\x81\x35\x28\x0d\x8a\xbc\xc0\x4d\x21\xf0\xaf\xbc\xd8\x14\x09\x7c\xd9\xec\x6e\x1f\x3e\xed\xf0\x4b\xfe\xf8\x98\x6f\x77\x9b\xeb\x02\x1f\x1e\x71\xfd\xb0\xfd\xb0\xd9\x6d\x1e\xb6\x05\x3e\xdc\x60\xbe\xfd\x8a\x77\x9b\xed\x87\x04\x49\x73\x43\x0e\xe9\xb9\x73\x81\xbb\x75\xa8\x83\x75\x54\xa6\x50\x10\xbd\x1a\x5e\xd9\x89\x8c\xef\x48\xe9\x4a\x2b\x6c\xa5\xa9\x7b\x59\x13\xd6\xf6\x89\x9c\xd1\xa6\xc6\x8e\xdc\x51\xfb\xb0\x3c\x8f\xd2\x94\xd0\xea\xa3\x66\xc9\xe3\xf9\x5f\x72\x52\xb8\xc8\x00\x3a\xa9\x0e\x01\xe4\x28\xb5\x01\xd0\xc7\xce\x3a\xc6\x05\x44\xa2\x6a\x65\x2d\x20\x12\x86\x38\x0b\x6b\x10\x00\x91\x38\xbc\xf3\xa9\xb6\xd9\xe1\x47\xb2\x32\x26\xcf\x99\x3e\xca\x9a\x7c\xa6\x5c\xb9\x54\xd6\x3c\x4d\xf9\x59\x9e\x68\xdf\x58\x7b\xc8\xa6\x2b\x26\x27\x20\x06\xc8\x32\x5c\x5b\x53\xe9\x1a\x95\x35\x21\x02\x7e\x92\x45\xee\x89\xdc\x94\xb7\xb9\x31\x46\x45\x8e\x83\x10\x3c\xd0\x90\x02\x0f\x1d\x9d\x7b\x3d\xbb\x5e\x31\x7e\x83\x68\x4d\x8e\x6f\x42\xfe\xc2\x62\x4c\x0d\xd1\x1d\x0d\xe3\xf9\x7c\xf1\x1d\xa0\xea\x8d\xc2\x85\xc2\x8b\xa9\x3b\x46\x59\x96\x37\xad\xac\xfd\x22\x0e\x10\x41\x6a\x5a\x8c\xd5\x9f\xa5\x5b\xbc\x51\xe9\x19\x34\x41\xc1\xad\x5f\x06\x1e\xcb\x10\x72\x91\xe0\xab\x47\xf1\x0b\x44\x91\x18\xc7\xcd\x6a\xc2\x1a\x82\x86\x92\x2a\xd9\xb7\x8c\xcf\xbf\x5f\xfe\x81\xa1\x23\xec\x4c\xf2\xb4\xc7\xdb\xdd\xee\x63\x91\xe2\x62\x9d\x8f\x12\x13\xd4\x15\x4a\x33\x24\x01\x24\x14\x19\x19\xf2\x35\x81\xcb\x8a\xc9\x9d\xed\x09\xd5\x71\x2a\xe2\xff\xe2\x3c\xeb\x9e\x29\x77\x4e\x3f\x49\xa6\xe5\x81\x86\x17\xe6\x2f\x25\xff\x93\xf8\x8c\x12\xfc\xc7\xa3\x64\xd5\x84\xaa\xe5\xf2\x95\x27\x81\xce\xd9\xe3\x90\xa2\xc9\xd3\x27\xe9\x02\x72\xd8\xd5\x64\x3a\x44\xd3\x31\x7d\xf1\x7e\x56\xf1\x51\x3a\x4f\x8b\x18\x20\x0a\x39\x4b\x6f\xa5\x29\x5b\xba\xe9\x8d\x5a\x88\x10\xa9\x39\x3e\x62\x74\x67\x0a\x52\x5a\x04\x3b\xae\x9f\xe5\xb1\x6b\x69\x3d\xdd\xc6\x10\xa9\x56\x93\x61\x4f\x8c\xab\xf7\x58\x13\xaf\xc7\x73\x98\x33\xdb\xb7\x7a\x8f\x6f\xc6\x19\x63\xbf\xfb\x06\x51\x94\x97\xa5\x5b\xe1\xf8\x89\xd5\xdb\xb7\xbf\x89\x04\xa2\x68\x77\x5f\x4c\xa4\x57\xb3\x86\xdd\x7d\xb1\x98\xfe\x12\xfc\x31\x25\x4e\x20\xfa\x7e\xc6\x4e\xef\xb5\x67\x32\xb9\x29\x47\xec\xd0\x20\x44\x30\x3a\x98\xf3\x4f\x00\x00\x00\xff\xff\xcc\x28\xc2\xce\xa0\x05\x00\x00") - -func testImagesCrdConversionWebhookMainGoBytes() ([]byte, error) { - return bindataRead( - _testImagesCrdConversionWebhookMainGo, - "test/images/crd-conversion-webhook/main.go", - ) -} - -func testImagesCrdConversionWebhookMainGo() (*asset, error) { - bytes, err := testImagesCrdConversionWebhookMainGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/crd-conversion-webhook/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCudaVectorAddBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\xcd\x2b\xcb\x4c\xc9\x4c\xd4\x4f\x2e\x4d\x49\xb4\x32\x34\xd0\x33\xd0\x4d\x49\x2d\x4b\xcd\xd1\x2d\x4d\x2a\xcd\x2b\x29\x35\xb4\xd0\x33\x30\xe1\x2a\x28\x48\x36\x33\xc9\x49\x45\x56\xaa\x0b\x15\xc3\xa5\x05\x10\x00\x00\xff\xff\x67\x31\x07\x44\x5c\x00\x00\x00") - -func testImagesCudaVectorAddBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesCudaVectorAddBaseimage, - "test/images/cuda-vector-add/BASEIMAGE", - ) -} - -func testImagesCudaVectorAddBaseimage() (*asset, error) { - bytes, err := testImagesCudaVectorAddBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/cuda-vector-add/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCudaVectorAddDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6f\xa3\x38\x14\x85\xdf\xfd\x2b\x8e\xc2\xaa\xda\x5d\x05\x9c\xed\xcb\x4a\xbb\x4f\x94\xa4\x2d\x4a\x03\x1d\x48\x5a\x55\x1a\x29\x72\xe0\x06\xac\x31\x36\xb5\x4d\xd3\xfc\xfb\x11\x49\x3a\x6a\x35\xf7\xcd\xf7\x1e\x1f\x7f\xf7\x38\x40\x62\xfa\xa3\x95\x4d\xeb\x71\x3d\xfb\xe7\x5f\xac\x5b\xc2\x72\xd8\x91\xd5\xe4\xc9\x21\x1e\x7c\x6b\xac\x8b\x58\xc0\x02\x3c\xc8\x8a\xb4\xa3\x1a\x83\xae\xc9\xc2\xb7\x84\xb8\x17\x55\x4b\x1f\x93\x29\x9e\xc8\x3a\x69\x34\xae\xa3\x19\xfe\x1c\x05\x93\xcb\x68\xf2\xd7\xff\x2c\xc0\xd1\x0c\xe8\xc4\x11\xda\x78\x0c\x8e\xe0\x5b\xe9\xb0\x97\x8a\x40\xef\x15\xf5\x1e\x52\xa3\x32\x5d\xaf\xa4\xd0\x15\xe1\x20\x7d\x7b\x7a\xe6\x62\x12\xb1\x00\x2f\x17\x0b\xb3\xf3\x42\x6a\x08\x54\xa6\x3f\xc2\xec\x3f\xeb\x20\xfc\x09\x78\xac\xd6\xfb\xfe\x3f\xce\x0f\x87\x43\x24\x4e\xb0\x91\xb1\x0d\x57\x67\xa1\xe3\x0f\x69\xb2\xc8\xca\x45\x78\x1d\xcd\x4e\x57\x36\x5a\x91\x73\xb0\xf4\x3a\x48\x4b\x35\x76\x47\x88\xbe\x57\xb2\x12\x3b\x45\x50\xe2\x00\x63\x21\x1a\x4b\x54\xc3\x9b\x91\xf7\x60\xa5\x97\xba\x99\xc2\x99\xbd\x3f\x08\x4b\x2c\x40\x2d\x9d\xb7\x72\x37\xf8\x2f\x61\x7d\xd0\x49\xf7\x45\x60\x34\x84\xc6\x24\x2e\x91\x96\x13\xdc\xc4\x65\x5a\x4e\x59\x80\xe7\x74\x7d\x9f\x6f\xd6\x78\x8e\x8b\x22\xce\xd6\xe9\xa2\x44\x5e\x20\xc9\xb3\x79\xba\x4e\xf3\xac\x44\x7e\x8b\x38\x7b\xc1\x32\xcd\xe6\x53\x90\xf4\x2d\x59\xd0\x7b\x6f\x47\x7e\x63\x21\xc7\x18\xa9\x1e\x33\x2b\x89\xbe\x00\xec\xcd\x19\xc8\xf5\x54\xc9\xbd\xac\xa0\x84\x6e\x06\xd1\x10\x1a\xf3\x46\x56\x4b\xdd\xa0\x27\xdb\x49\x37\x7e\xa6\x83\xd0\x35\x0b\xa0\x64\x27\xbd\xf0\xa7\xce\x6f\x4b\x45\x8c\xdd\x16\xf9\x6a\xc4\x5f\xa4\xab\xf8\x6e\xc1\x58\x52\xe4\x65\xb9\xbd\xd9\xa4\x0f\xf3\x6d\x92\x3f\xbe\xe0\x95\xba\x21\xfc\xb6\x58\x6d\xe2\x22\xb9\x0f\xdd\xe8\x55\x81\x0f\xce\xf2\x9d\xd4\x9c\xb1\x62\x93\x41\xf4\x3e\x6c\xc8\x63\xe8\x6b\xe1\x09\x57\x57\xbf\x3a\x52\x3b\x2f\x94\x42\x78\x44\x18\x6a\x13\x5e\xce\xa1\xa5\xca\x74\x1d\xe9\xda\xe1\x3b\xc3\xa5\xaa\xa1\x16\xa1\x13\x5d\xaf\xc8\x85\x7f\x24\x9b\x79\xbc\x7d\x5c\xde\x6d\x9f\x16\x45\x99\xe6\xd9\x68\x7b\xd6\xda\x0e\xa1\xdd\x83\xbf\x09\xcb\x95\xdc\x71\xd1\x7b\xae\xa4\xf3\x8e\xff\xcd\xd8\x73\x5e\x2c\xe7\x69\x71\x46\x54\xa6\x12\x8a\x8f\xbe\xfc\xe2\xcb\x67\xdb\x72\x0c\x99\xf8\x1b\x55\xde\xd8\xb8\xae\x4f\x2b\x74\xe2\x07\x31\x96\xac\xe6\x88\x3e\x4d\x7e\x06\x00\x00\xff\xff\x4b\xe6\x49\xa2\x6a\x03\x00\x00") - -func testImagesCudaVectorAddDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesCudaVectorAddDockerfile, - "test/images/cuda-vector-add/Dockerfile", - ) -} - -func testImagesCudaVectorAddDockerfile() (*asset, error) { - bytes, err := testImagesCudaVectorAddDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/cuda-vector-add/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesCudaVectorAddVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd2\x33\xe0\x02\x04\x00\x00\xff\xff\x31\x5b\x26\x76\x04\x00\x00\x00") - -func testImagesCudaVectorAddVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesCudaVectorAddVersion, - "test/images/cuda-vector-add/VERSION", - ) -} - -func testImagesCudaVectorAddVersion() (*asset, error) { - bytes, err := testImagesCudaVectorAddVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/cuda-vector-add/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesDnsutilsBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x0a\x10\x00\x00\xff\xff\xe5\x8d\xa8\xc0\x5c\x00\x00\x00") - -func testImagesDnsutilsBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesDnsutilsBaseimage, - "test/images/dnsutils/BASEIMAGE", - ) -} - -func testImagesDnsutilsBaseimage() (*asset, error) { - bytes, err := testImagesDnsutilsBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/dnsutils/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesDnsutilsDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x41\x6f\x9c\x3e\x14\xc4\xef\xfe\x14\xa3\xe5\xf2\xff\x4b\x0b\xa4\x39\xf4\xd0\x9e\xc8\x86\x34\x28\x09\xb4\xb0\xdb\x28\xa7\xc8\xc0\x5b\x78\x2a\xd8\x8e\x6d\x4a\xf6\xdb\x57\x90\x44\xea\xaa\x3e\x7a\xc6\xe3\x9f\xc7\x2f\xc0\x4e\x9b\x93\xe5\xae\xf7\xb8\xbc\xf8\xf4\x19\xfb\x9e\x70\x37\xd5\x64\x15\x79\x72\x48\x26\xdf\x6b\xeb\x22\x11\x88\x00\xf7\xdc\x90\x72\xd4\x62\x52\x2d\x59\xf8\x9e\x90\x18\xd9\xf4\xf4\xa1\x6c\xf1\x93\xac\x63\xad\x70\x19\x5d\xe0\xbf\xc5\xb0\x79\x97\x36\xff\x7f\x15\x01\x4e\x7a\xc2\x28\x4f\x50\xda\x63\x72\x04\xdf\xb3\xc3\x91\x07\x02\xbd\x36\x64\x3c\x58\xa1\xd1\xa3\x19\x58\xaa\x86\x30\xb3\xef\xd7\x6b\xde\x43\x22\x11\xe0\xe9\x3d\x42\xd7\x5e\xb2\x82\x44\xa3\xcd\x09\xfa\xf8\xb7\x0f\xd2\xaf\xc0\xcb\xea\xbd\x37\x5f\xe2\x78\x9e\xe7\x48\xae\xb0\x91\xb6\x5d\x3c\xbc\x19\x5d\x7c\x9f\xed\xd2\xbc\x4a\xc3\xcb\xe8\x62\x3d\x72\x50\x03\x39\x07\x4b\x2f\x13\x5b\x6a\x51\x9f\x20\x8d\x19\xb8\x91\xf5\x40\x18\xe4\x0c\x6d\x21\x3b\x4b\xd4\xc2\xeb\x85\x77\xb6\xec\x59\x75\x5b\x38\x7d\xf4\xb3\xb4\x24\x02\xb4\xec\xbc\xe5\x7a\xf2\x67\x65\x7d\xd0\xb1\x3b\x33\x68\x05\xa9\xb0\x49\x2a\x64\xd5\x06\x57\x49\x95\x55\x5b\x11\xe0\x31\xdb\xdf\x16\x87\x3d\x1e\x93\xb2\x4c\xf2\x7d\x96\x56\x28\x4a\xec\x8a\xfc\x3a\xdb\x67\x45\x5e\xa1\xb8\x41\x92\x3f\xe1\x2e\xcb\xaf\xb7\x20\xf6\x3d\x59\xd0\xab\xb1\x0b\xbf\xb6\xe0\xa5\x46\x6a\x97\xce\x2a\xa2\x33\x80\xa3\x7e\x03\x72\x86\x1a\x3e\x72\x83\x41\xaa\x6e\x92\x1d\xa1\xd3\xbf\xc9\x2a\x56\x1d\x0c\xd9\x91\xdd\xf2\x99\x0e\x52\xb5\x22\xc0\xc0\x23\x7b\xe9\xd7\x9d\x7f\x1e\x15\x09\x71\x53\x16\x0f\x0b\x7e\x9a\x3d\x24\xdf\x52\x21\x76\x65\x51\x55\xcf\x57\x87\xec\xfe\xfa\x79\x57\x7c\x7f\xc2\x0b\x8d\x53\xf8\x23\x7d\x38\x24\xe5\xee\x36\x74\x4b\x56\x83\x78\x72\x36\xae\x59\xc5\x42\x94\x87\x1c\xd2\xfc\x82\x6c\x5b\x84\xa1\xd2\x61\xb3\x0e\x57\xcd\xaa\x0d\xbd\xd6\x83\x43\xab\xdc\x28\xdd\x8b\xf8\x13\x00\x00\xff\xff\xa5\x98\x0c\x19\xb7\x02\x00\x00") - -func testImagesDnsutilsDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesDnsutilsDockerfile, - "test/images/dnsutils/Dockerfile", - ) -} - -func testImagesDnsutilsDockerfile() (*asset, error) { - bytes, err := testImagesDnsutilsDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/dnsutils/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesDnsutilsVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") - -func testImagesDnsutilsVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesDnsutilsVersion, - "test/images/dnsutils/VERSION", - ) -} - -func testImagesDnsutilsVersion() (*asset, error) { - bytes, err := testImagesDnsutilsVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/dnsutils/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesEchoserverBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\xcd\x4b\xcf\xcc\xab\xb0\x32\xd4\x33\x34\xd5\x4d\xcc\x29\xc8\xcc\x4b\xe5\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\xc7\x2a\x6b\x66\x62\x0b\x26\xcb\x2c\xb0\xc8\x17\x14\x24\x9b\x99\xe4\xa4\xda\x42\x69\x2c\x2a\x00\x01\x00\x00\xff\xff\xea\xea\x49\xdf\x78\x00\x00\x00") - -func testImagesEchoserverBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesEchoserverBaseimage, - "test/images/echoserver/BASEIMAGE", - ) -} - -func testImagesEchoserverBaseimage() (*asset, error) { - bytes, err := testImagesEchoserverBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/echoserver/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesEchoserverDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x92\x5d\x6f\xab\x46\x10\x86\xef\xf7\x57\xbc\x32\x37\xad\x6a\x20\x89\x54\x55\x6a\xaf\x88\x4d\x1a\x94\x18\x52\xb0\x1b\x59\x55\x15\xad\x61\x0c\xab\xc0\xee\x66\x3f\x8e\xed\x7f\x7f\x04\x4e\x94\x44\x27\xc7\x57\xd6\x3b\xcf\xcc\x3e\x3b\x4b\x80\x85\xd2\x27\x23\xda\xce\xe1\xea\xe2\xf2\x0f\xac\x3b\xc2\x9d\xdf\x91\x91\xe4\xc8\x22\xf1\xae\x53\xc6\x46\x2c\x60\x01\xee\x45\x4d\xd2\x52\x03\x2f\x1b\x32\x70\x1d\x21\xd1\xbc\xee\xe8\xad\x32\xc7\xbf\x64\xac\x50\x12\x57\xd1\x05\x7e\x19\x81\xd9\x6b\x69\xf6\xeb\x5f\x2c\xc0\x49\x79\x0c\xfc\x04\xa9\x1c\xbc\x25\xb8\x4e\x58\xec\x45\x4f\xa0\x63\x4d\xda\x41\x48\xd4\x6a\xd0\xbd\xe0\xb2\x26\x1c\x84\xeb\xa6\x63\x5e\x87\x44\x2c\xc0\xf6\x75\x84\xda\x39\x2e\x24\x38\x6a\xa5\x4f\x50\xfb\x8f\x1c\xb8\x9b\x84\xc7\x5f\xe7\x9c\xfe\x33\x8e\x0f\x87\x43\xc4\x27\xd9\x48\x99\x36\xee\xcf\xa0\x8d\xef\xb3\x45\x9a\x57\x69\x78\x15\x5d\x4c\x2d\x1b\xd9\x93\xb5\x30\xf4\xe2\x85\xa1\x06\xbb\x13\xb8\xd6\xbd\xa8\xf9\xae\x27\xf4\xfc\x00\x65\xc0\x5b\x43\xd4\xc0\xa9\xd1\xf7\x60\x84\x13\xb2\x9d\xc3\xaa\xbd\x3b\x70\x43\x2c\x40\x23\xac\x33\x62\xe7\xdd\xa7\x65\xbd\xd9\x09\xfb\x09\x50\x12\x5c\x62\x96\x54\xc8\xaa\x19\xae\x93\x2a\xab\xe6\x2c\xc0\x63\xb6\xbe\x2d\x36\x6b\x3c\x26\x65\x99\xe4\xeb\x2c\xad\x50\x94\x58\x14\xf9\x32\x5b\x67\x45\x5e\xa1\xb8\x41\x92\x6f\x71\x97\xe5\xcb\x39\x48\xb8\x8e\x0c\xe8\xa8\xcd\xe8\xaf\x0c\xc4\xb8\x46\x6a\xc6\x9d\x55\x44\x9f\x04\xf6\xea\x2c\x64\x35\xd5\x62\x2f\x6a\xf4\x5c\xb6\x9e\xb7\x84\x56\x7d\x23\x23\x85\x6c\xa1\xc9\x0c\xc2\x8e\x8f\x69\xc1\x65\xc3\x02\xf4\x62\x10\x8e\xbb\x29\xf9\xe1\x52\x11\x63\x37\x65\xb1\x1a\xf5\xd3\x6c\x95\xfc\x9d\x32\xb6\x28\x8b\xaa\x7a\xba\xde\x64\xf7\xcb\xa7\x45\xf1\xb0\xc5\x0b\x0d\x3e\xfc\x27\x5d\x6d\x92\x72\x71\x1b\xda\x71\x56\x8d\xd8\x5b\x13\xef\x84\x8c\x19\x2b\x37\x39\xb8\x7e\x06\x6f\x1a\x84\xa1\x54\x61\x3d\x7d\x5c\x4a\x93\xb4\xb6\x87\x6c\x85\x3c\x86\x83\x6a\xc2\xf1\x4d\xc3\xde\xf3\x2f\xa2\xd0\x6b\xeb\x0c\xf1\x61\x9a\x36\x3c\x37\xc2\x20\xd4\x88\x8d\x97\xf1\x44\x33\x96\x2c\x97\xe7\xc6\xa8\x56\x72\x8f\x98\x5c\x7d\x2e\xc5\xef\xe9\x04\x39\x1a\x74\xcf\x1d\x45\xe3\x51\x93\x67\xaf\x6a\xde\xc7\xb6\xe3\x86\xe2\xde\xf3\xf8\xf7\xe8\x32\x9e\xd0\x32\x4d\x96\xab\x34\x1a\x9a\xf7\x7f\x53\x6e\xbc\x8c\x6c\xf7\xb1\x79\xbc\xea\x39\x9d\x0c\xeb\x6e\x50\x0d\x7e\x3b\xfe\x04\x49\xf3\x75\xb9\x7d\x28\xb2\x7c\x8d\xff\x66\x5f\x22\xb3\xff\xd9\xf7\x00\x00\x00\xff\xff\x9c\x82\xa0\xf6\xc5\x03\x00\x00") - -func testImagesEchoserverDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesEchoserverDockerfile, - "test/images/echoserver/Dockerfile", - ) -} - -func testImagesEchoserverDockerfile() (*asset, error) { - bytes, err := testImagesEchoserverDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/echoserver/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesEchoserverVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd2\x33\xe2\x02\x04\x00\x00\xff\xff\xb3\x39\x10\x44\x04\x00\x00\x00") - -func testImagesEchoserverVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesEchoserverVersion, - "test/images/echoserver/VERSION", - ) -} - -func testImagesEchoserverVersion() (*asset, error) { - bytes, err := testImagesEchoserverVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/echoserver/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesEchoserverNginxConf = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x56\x41\x6f\xdb\x3a\x12\x3e\x8b\xbf\x62\xa0\x20\x88\x0d\xc4\x52\xd2\x06\x8b\xae\x03\x1f\xd2\x6d\x80\x06\x8b\x36\x41\xd2\x3d\x05\x81\x40\x53\x63\x8b\x30\x45\xaa\x24\x65\x5b\x6b\xf8\xbf\x3f\x0c\x25\xd9\x72\x93\x77\x78\x27\x81\xc3\x6f\x66\xc8\xe1\x37\xdf\x48\x19\x9e\x67\xa5\xc9\x6b\x85\xd0\x7e\x5c\xaa\xf3\x55\x56\x78\x5f\x75\xf6\xc4\x99\x5b\xf6\x21\x6e\xb9\x6d\x71\xaa\xe6\xff\x08\x5b\x57\xce\x5b\xe4\xe5\xd0\x89\xe1\x1a\xb5\x77\xb0\x63\xd1\xc6\xd8\x15\xda\x4c\x18\xad\x51\x78\x69\xb4\x83\xeb\xab\x4f\x37\xb7\x6c\xcf\x18\xea\x35\x7c\x7f\x7c\xf9\xf5\xf3\xee\xc7\xfd\x6d\x58\xfd\x7c\xfc\x76\x9f\x1d\x97\x4f\x8f\xdf\x3e\x58\xbd\x3c\xdd\xfd\x67\x60\x7a\x78\xba\x65\x8c\x8e\x43\xe9\x72\x5c\xf0\x5a\xf9\xcc\x37\x15\xc2\x85\xc7\xad\x4f\x2b\xc5\xa5\xbe\xb8\x65\xd1\x19\x94\x7c\x2b\xcb\xba\x04\xae\x94\xd9\x60\x0e\x4e\xfe\x1f\xc1\x2c\xc0\x17\x08\x42\x49\xd4\x1e\x2c\xfe\xae\xd1\x79\x98\x9b\xbc\x49\xe0\x6b\x03\x5d\x44\xf0\x85\x74\x20\x1d\x5c\x97\x09\x85\x7a\xee\x70\x1b\xe9\x0b\x98\xcb\xe5\x12\x2d\xf9\x48\x74\xa0\x97\x52\x6f\x61\x23\x95\x02\x8b\xbe\xb6\x1a\xd0\x5a\x63\x41\x98\x1c\xe1\xe6\xfa\x73\xf0\xa7\x03\x4f\xd3\x34\x60\x13\x63\x97\x29\xea\x34\x37\xc2\xa5\xb4\x71\xac\xb0\x30\x16\xfb\xca\x16\xbe\x54\x67\xed\x31\xb3\x92\x6f\x33\x3a\x62\x46\x57\x60\xd1\x47\x56\xb8\xbe\x2a\x6f\x19\x8b\xa4\x96\x3e\x9b\x37\xe1\xb1\xe6\xca\x88\x15\xd5\x29\x52\x46\x70\x05\x1e\xcb\x4a\x71\x8f\x30\x0b\x17\x97\x16\x47\x71\x6f\x8b\xc7\x2c\x8a\x26\x93\x23\xc6\x35\xda\xf3\x2d\xe4\x46\xd4\x25\x6a\x8f\x39\x14\x68\x71\xda\xa2\xe8\xb4\x6e\x9a\xa6\x4b\xe9\x8b\x7a\x9e\x08\x53\xa6\xf3\x5a\x2f\x15\xa6\xaa\xe6\x13\x8b\xce\x37\x93\x3e\x52\x3a\x57\x66\x9e\x96\xdc\x79\xb4\xe9\xf3\xfd\xdd\xb7\x1f\xf7\x49\x99\xb3\x28\xf2\x65\xa5\x60\x76\xc8\x48\x51\x2a\xa9\x70\xf4\xfa\xca\x18\xfb\x6e\x9c\xd7\xbc\xc4\x29\xec\x76\xc6\x25\x4b\xf4\xa8\xd7\xa3\xb8\x27\x50\x3c\x06\x63\x21\xfe\x99\xde\xc5\xfb\x3d\x63\x4f\x26\x87\x07\xbd\x30\xb6\xe4\xc4\xba\x29\xdb\x9d\x83\x5c\xc0\xc0\xb1\xa7\x53\x3c\xa6\xf7\xd7\x70\xbe\x67\x91\xa6\x27\x0a\x49\xa2\x93\x24\x07\x5e\x9e\x66\x89\x2a\x93\x7f\x04\x1f\x84\xfe\x08\xed\x2a\x2e\xfe\xce\x25\x90\xfb\x03\xbf\x87\xa7\x0f\x1c\x1e\x9e\x4e\x91\xbb\x73\x40\xe5\x30\x5c\x65\xa2\x0d\x90\xa3\x3c\x16\x01\xf8\x9a\x4b\xc5\xe7\x0a\x27\x01\xaa\x73\x42\xb2\x17\xb4\x6b\xb4\xb0\xe6\xaa\x46\x37\x65\x91\x0b\xeb\x6c\x8d\xd6\x49\xa3\x67\x81\xa2\x54\x74\xbd\xdc\x26\x6b\x6e\x93\x60\xe8\xb7\xf7\x7b\x98\x80\xaa\x79\x0f\x10\x46\x2f\xe4\x32\x21\x02\x13\xe1\x0e\x28\xc6\xfa\x8e\x39\x79\x95\x9e\xb9\x3c\xcf\x2d\x3a\x37\x3b\x66\xb1\x58\x1a\x8f\x61\x83\x6a\x50\xa2\x2f\x4c\xde\xed\x5b\xfc\x4d\x75\xc8\x5a\xe3\x68\x4c\x00\x8b\x5c\x41\xc5\x7d\x71\x12\x23\xa4\xcc\x6a\x2b\x09\xf2\xbb\x46\xdb\x0c\xb6\xc3\x3a\x73\xde\x4a\xbd\x0c\x65\x8c\xdb\x40\xad\x53\x7f\xff\x63\xca\xd0\x91\x9d\xb9\x4f\xda\x62\x9d\x28\xb0\xc4\x41\xe8\xd6\x30\x84\xd4\x56\xbe\xdb\x4f\x92\x78\x9a\xa6\x71\x92\xf4\xe6\xc2\x38\x4f\xc6\x81\xa9\x7b\x8d\xca\x58\x7f\x34\x9e\x5e\xec\x50\xda\xef\xc8\x73\xb4\x2e\x90\x7d\x61\x2c\xc8\x4b\x58\x61\x03\x52\x83\xac\xb8\xb4\x6e\xb4\xc2\xc6\x8d\x21\x37\x81\x21\xbb\x73\x68\x55\x60\xcd\xa9\xeb\x8a\xd6\xf9\x75\x85\xcd\x5b\xbf\x2f\x17\x40\x4a\x3a\x5a\x73\x35\x86\xd9\x0c\x62\x4f\xec\x89\x8f\x0d\x13\xf5\x99\x60\x06\xd7\x97\x67\x14\xa9\x8f\xbe\x5b\x61\xb3\xdf\xcf\x76\xbb\x35\x57\xaf\xf2\x6d\xdf\xa1\x3b\xd6\x45\x43\xae\x9e\x60\xf7\xdd\x66\x8b\x1b\xf0\xb4\xbf\xe5\x57\x93\x37\x53\xf6\xfe\x95\x49\xf9\xc2\x33\x06\xee\x87\x95\xd4\xbd\xa0\x4f\xe8\x6d\xdf\xde\xc6\x2c\xda\xb3\x9e\xe2\x41\x08\xcf\xa0\x52\xc8\x1d\x82\x28\x50\xac\xc2\x28\x98\xa3\xc6\x85\xf4\x8e\x46\x83\xc5\xda\x21\x15\xff\xa0\x70\x9b\xcd\xa6\x6d\x81\x56\xe4\x94\x59\xa6\xce\x88\x15\xfa\x89\x2b\xb8\xcd\xa5\x5e\x4e\xc2\xf6\xc4\x62\x08\x3c\xb9\x9e\xfc\x7b\x72\x1d\x32\xcd\xb9\x93\x82\x2b\x45\x07\x73\xde\xd6\xc2\x3b\xf0\x06\x84\x45\xd2\x57\xae\x41\xea\x5c\xae\x65\x5e\x73\x05\x4a\x3a\x8f\x9a\x98\xd9\x46\x0f\x65\x46\x2e\x0a\x68\x47\x2a\x54\xd6\x08\x74\x0e\x46\xb5\x23\x14\x1d\xfc\xe5\x31\x7b\xbe\xff\xdf\xcb\xfd\xd3\xe3\xf3\xaf\x90\xb0\x73\x35\x15\x75\xdb\xf8\xb2\x1d\x7c\x84\xe6\xb0\x42\xab\x51\x51\xfa\x5c\x52\x0b\xcc\x6b\x8f\x20\xb5\x30\x25\xed\x0f\xe7\xf5\x1c\xfd\x06\x51\xff\x91\x17\x5d\x42\x63\x24\x9c\x12\xbe\x5c\x7d\xb9\xea\x27\x65\xd6\x15\xf7\x50\xb9\xdb\x01\xee\xe6\xe6\xf3\x9f\x38\xe7\x54\xa8\xed\xa7\xa1\x07\x8b\x22\xe7\x54\x26\xd0\x7a\xb9\x90\x82\xca\x93\xd2\xc2\xa5\x03\x53\x22\xda\xe0\x7f\x20\x33\xe2\x7c\x87\xae\xac\x5c\x73\x8f\xff\xc5\x26\x59\x61\x13\xe2\xd2\xec\xae\x14\x17\x08\x17\xd9\x45\x3b\xbf\x1b\x53\x5b\x28\xba\xf9\x42\xd7\xea\x9a\x8e\x96\x90\x75\x5e\x0e\x3d\x28\xa3\x97\xb0\x42\xac\xb8\x92\x6b\xcc\xbc\x2c\xd1\xd4\x1e\xe6\x28\x78\xed\x10\x9c\x29\x11\xe8\x8f\x69\xce\x15\xd7\xa2\x2d\xd6\x96\xfe\x09\x70\x5b\xa1\xf0\xed\x8f\xc6\xa1\xb4\x21\xac\x37\x60\xb1\xe4\x52\x83\xa9\x50\x87\x57\xe6\x1e\x88\x39\x1e\xa8\x64\xa5\xd4\xb5\x6f\x8b\xfd\x3e\xf1\xbf\x3e\x5d\xb9\x70\x3c\x6a\xe4\x20\xf1\x69\x20\x75\x44\xda\xab\x11\xf3\xec\xb4\x39\x34\x95\x2b\x12\x46\x7b\x12\xdd\x77\x3f\x05\x51\x44\x3d\xd5\x0a\xc1\x6b\xdc\xce\x85\xf8\x0d\x66\x10\xa3\x28\x4c\x5b\x94\x98\x05\x60\xab\x1c\x9d\x66\xc0\x0c\x86\xb2\xdc\x59\x47\xe3\x01\x92\x94\x07\x66\xb0\xdb\x07\x1b\xdd\x72\x85\xcd\x65\x90\x1e\xa9\xa1\x55\xa7\xce\x8f\x04\x2a\xa0\xa2\xa0\x36\x89\xd4\x0e\xad\x0f\xda\x15\xf4\xac\x0d\x8b\x3a\x67\x47\x8c\x33\x1d\x62\xcc\x0e\xf7\x70\xbc\x19\xd1\x1f\xc5\x68\x67\xdc\xcc\xb8\x4b\x3a\xe3\x4c\x2f\xb7\x21\x88\x9b\xb5\xf1\xba\x9c\xb3\xee\xbb\x1f\x87\xe8\x74\xca\x3d\x49\xc5\x9e\xfd\x15\x00\x00\xff\xff\x6d\xfd\xc1\xd0\x55\x0b\x00\x00") - -func testImagesEchoserverNginxConfBytes() ([]byte, error) { - return bindataRead( - _testImagesEchoserverNginxConf, - "test/images/echoserver/nginx.conf", - ) -} - -func testImagesEchoserverNginxConf() (*asset, error) { - bytes, err := testImagesEchoserverNginxConfBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/echoserver/nginx.conf", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesEchoserverRunSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xd1\x6f\xab\x36\x14\xc6\xdf\xfd\x57\x7c\x83\x97\x4d\x0a\x90\x65\xeb\xd5\xdd\xbd\xca\x43\x96\x76\x1b\x4a\x04\x52\x49\x56\x55\xea\x8b\x03\x07\x38\x0b\xd8\x9e\x6d\x4a\xf8\xef\x27\xd2\x54\x6a\x35\x3f\xd8\xb2\xbf\xcf\xc7\xdf\xf9\x39\xfc\x21\x39\xb1\x4a\x5c\x2b\x44\x88\xad\x36\x93\xe5\xa6\xf5\x58\x2d\x7f\xfe\x8a\x43\x4b\xd8\x0d\x27\xb2\x8a\x3c\x39\x6c\x06\xdf\x6a\xeb\x62\x11\x8a\x10\x7b\x2e\x49\x39\xaa\x30\xa8\x8a\x2c\x7c\x4b\xd8\x18\x59\xb6\xf4\xae\x2c\xf0\x37\x59\xc7\x5a\x61\x15\x2f\xf1\xe3\x6c\x08\x6e\x52\xf0\xd3\x77\x11\x62\xd2\x03\x7a\x39\x41\x69\x8f\xc1\x11\x7c\xcb\x0e\x35\x77\x04\xba\x94\x64\x3c\x58\xa1\xd4\xbd\xe9\x58\xaa\x92\x30\xb2\x6f\xaf\xcf\xdc\x8a\xc4\x22\xc4\xf3\xad\x84\x3e\x79\xc9\x0a\x12\xa5\x36\x13\x74\xfd\xd1\x07\xe9\xaf\x81\xe7\xd1\x7a\x6f\xbe\x25\xc9\x38\x8e\xb1\xbc\x86\x8d\xb5\x6d\x92\xee\xcd\xe8\x92\x7d\xba\x7d\xc8\x8a\x87\x68\x15\x2f\xaf\x57\x8e\xaa\x23\xe7\x60\xe9\xdf\x81\x2d\x55\x38\x4d\x90\xc6\x74\x5c\xca\x53\x47\xe8\xe4\x08\x6d\x21\x1b\x4b\x54\xc1\xeb\x39\xef\x68\xd9\xb3\x6a\x16\x70\xba\xf6\xa3\xb4\x24\x42\x54\xec\xbc\xe5\xd3\xe0\x3f\xc1\x7a\x4f\xc7\xee\x93\x41\x2b\x48\x85\x60\x53\x20\x2d\x02\xfc\xbe\x29\xd2\x62\x21\x42\x3c\xa5\x87\xbf\xf2\xe3\x01\x4f\x9b\xc7\xc7\x4d\x76\x48\x1f\x0a\xe4\x8f\xd8\xe6\xd9\x7d\x7a\x48\xf3\xac\x40\xfe\x07\x36\xd9\x33\x76\x69\x76\xbf\x00\xb1\x6f\xc9\x82\x2e\xc6\xce\xf9\xb5\x05\xcf\x18\xa9\x9a\x99\x15\x44\x9f\x02\xd4\xfa\x2d\x90\x33\x54\x72\xcd\x25\x3a\xa9\x9a\x41\x36\x84\x46\xbf\x92\x55\xac\x1a\x18\xb2\x3d\xbb\xf9\x33\x1d\xa4\xaa\x44\x88\x8e\x7b\xf6\xd2\x5f\x4f\xfe\xd7\x54\x2c\x04\x95\xad\x46\xf0\x27\x29\xb2\x72\x26\x02\x47\x5d\x1d\x39\x6e\x14\x55\x28\xc9\xfa\x40\xf4\xe7\x8a\x2d\x22\x83\x64\xde\x3b\xa1\x0d\x29\xe7\xba\x19\x37\xa2\xcb\xdd\xf2\x37\x44\xae\x95\xab\xbb\x2f\x88\x94\xae\xc8\x21\xaa\xe4\xe4\xf0\xcb\x97\x3b\x44\x8a\xc6\x33\x4d\xb0\x4e\x7e\x5b\x2d\x7f\xfd\x8a\x17\x11\x9d\x69\xd2\x83\xbf\x15\x4b\x8c\xe5\x57\xe9\x69\x47\x53\x3c\x1b\x5f\x44\xf4\x41\x9c\xe7\xb9\x55\xe9\x29\x2e\xad\x9f\x55\x37\x9c\xfe\x41\x90\x6c\xd7\xc7\x5d\x52\x1c\xd6\x4f\xd2\x8e\x5c\x9e\x5d\xcb\x96\x92\xfd\x7a\x4f\xb2\x67\xd5\x78\xad\x92\x7c\x9d\xdb\x26\x93\x3d\x25\xf9\x71\x9d\x1e\x70\x4f\x46\x5a\xdf\x93\xf2\xc9\x36\x5b\xd3\x45\xf6\xa6\xa3\xb8\xd4\x7d\xf0\x0e\xa1\xf0\xd2\x5e\x11\xa8\x86\xd5\x25\x10\xd7\x05\x51\x83\xa0\x92\xd4\x6b\x05\x5d\xd7\xdf\x03\xf1\x5f\x00\x00\x00\xff\xff\x0b\x85\xf1\xac\x89\x03\x00\x00") - -func testImagesEchoserverRunShBytes() ([]byte, error) { - return bindataRead( - _testImagesEchoserverRunSh, - "test/images/echoserver/run.sh", - ) -} - -func testImagesEchoserverRunSh() (*asset, error) { - bytes, err := testImagesEchoserverRunShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/echoserver/run.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesEchoserverTemplateLua = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x5b\x7b\x73\xda\xc8\x96\xff\x9f\x4f\x71\x4a\xb3\x33\x16\x13\x19\x1b\x27\xd9\x4c\x32\xc3\x54\x61\x50\x6c\x55\x61\xf0\x4a\xb2\x73\x53\xc4\x4b\x09\xd1\x60\xc5\x42\xd2\xd5\xc3\x86\x71\x79\x3f\xfb\xd6\xe9\x87\xde\x60\xf0\x9d\x57\xa5\x46\x55\x09\x52\x77\x9f\x67\xff\xfa\xf4\x39\x2d\xf9\xf0\x10\xee\x89\x37\xf3\x43\x32\x83\x79\xe8\x2f\xe1\x36\x8e\x83\xe8\xc3\xd1\x51\x68\x3d\xb4\x16\x4e\x7c\x9b\x4c\x93\x88\x84\xb6\xef\xc5\xc4\x8b\x5b\xb6\xbf\x3c\x9a\x26\xde\xc2\x25\x47\x6e\x62\x1d\x86\x24\x8a\xd7\x87\x31\x59\x06\xae\x15\x93\xa3\xf6\xfc\xbd\xf5\xd6\x3e\x79\x33\xb7\xdf\xbd\x7d\x77\x32\x9b\xce\xdf\x4e\xc9\xf1\xf4\xfd\xfc\xa7\xf6\x7f\xff\x64\xdb\xaf\xdf\xff\xf4\x66\x7a\xfc\x7a\x76\xf2\xe6\xc8\x75\xa6\x47\x94\xf6\x48\xd0\xb6\xdc\xc4\x6a\x1c\x1e\x82\xef\xb9\x6b\x58\xfa\x33\x67\xee\xd8\x56\xec\xf8\xde\x07\x08\xc9\xd2\xbf\x27\x70\xc4\xf4\x3b\x37\x2f\x06\x13\x75\x68\x6a\xa6\xa6\x1a\x10\xfb\xe0\xf9\x31\x90\xc8\xb6\x02\x02\x4e\xac\x80\xe5\xcd\x60\xee\xac\x20\xbe\x25\x60\x05\x41\xe8\x07\xa1\x63\xc5\x04\x42\xb2\x20\xab\x56\xe3\xf0\x70\x3c\x6e\xf4\xfc\x60\x1d\x3a\x8b\xdb\x18\x64\xbb\x09\x27\xc7\xed\x37\x70\x88\x3f\xef\xa0\x6b\x05\x3e\x98\x96\x7b\x4f\xbc\xc8\xb2\x42\xa7\xd1\x75\x5d\xa0\x43\x23\x08\x49\x44\xc2\x7b\x32\x6b\x35\x1a\x3a\x99\x39\x51\x1c\x3a\xd3\x04\x55\xa4\x32\x93\x88\x80\xe3\x41\xe4\x27\xa1\x4d\x68\xcb\xd4\xf1\xac\x70\x0d\x73\x3f\x5c\x46\x0a\x3c\x38\xf1\x2d\xf8\x21\xfd\xf5\x93\xb8\x60\xa3\xd2\xb0\x42\x02\x01\x09\x97\x4e\x1c\x93\x19\x04\xa1\x7f\xef\xcc\xc8\x0c\xe2\x5b\x2b\xa6\x96\xcc\x7d\xd7\xf5\x1f\x1c\x6f\x01\xb6\xef\xcd\x1c\x24\x8a\x00\x89\x96\x24\xfe\xd0\x68\xfc\x08\x45\x8d\x22\xf0\xe7\x42\x15\xdb\x9f\x11\x58\x26\x51\x0c\x21\x89\x2d\xc7\x63\x9e\x99\xa2\x4b\xed\xd4\x0f\x9e\x1f\x3b\x36\x51\x20\xbe\x75\xa2\x06\x80\xeb\x44\x31\xb2\xc8\x0b\xf3\x66\x25\x4d\x66\x4e\x64\xbb\x96\xb3\x24\x61\xab\x4e\x03\xc7\xcb\x7b\x40\x68\x10\x84\xfe\x2c\xb1\xc9\x1f\xa0\x04\x70\xd3\x66\xbe\x9d\x2c\x89\x17\x5b\x62\x6a\x8e\xfc\xb0\x01\xe0\xc7\xb7\x24\x84\xa5\x15\x93\xd0\xb1\xdc\x28\xf3\x31\x9d\x18\x4a\x98\x53\x9f\x5a\x34\x24\x0e\x25\xc2\x4e\xcf\x5a\x12\x54\x06\xef\x1f\xfd\x70\x61\x79\xce\x6f\x54\xc2\x13\x78\x7e\x36\x84\x3a\xde\x89\x51\x7d\x5c\x32\x94\x9d\x1f\x46\xb0\xb4\xd6\x30\x25\x08\x92\x19\x62\x96\xae\xb8\x88\x20\x1e\x82\xd0\x5f\xfa\x31\x01\xe6\x98\x38\x82\x19\x09\x9d\x7b\xbe\x1a\x1b\x40\x9d\x01\x91\x3f\x8f\x1f\x70\xba\x05\x7a\xa2\x80\xd8\x08\x1f\x08\x42\x07\x41\x15\x22\x70\x3c\x06\xa1\x28\x62\x06\x98\xe7\x9a\x01\xc6\xe8\xa3\xf9\xa9\xab\xab\xa0\x19\x70\xa9\x8f\xae\xb5\xbe\xda\x87\xd3\xcf\x60\x9e\xab\xd0\x1b\x5d\x7e\xd6\xb5\xb3\x73\x13\xce\x47\x83\xbe\xaa\x1b\xd0\x1d\xf6\xa1\x37\x1a\x9a\xba\x76\x7a\x65\x8e\x74\x03\xa4\xae\x01\x9a\x21\x61\x47\xa3\x3b\xfc\x0c\xea\xbf\x2e\x75\xd5\x30\x60\xa4\x83\x76\x71\x39\xd0\xd4\x3e\x7c\xea\xea\x7a\x77\x88\xab\x51\x01\x6d\xd8\x1b\x5c\xf5\xb5\xe1\x99\x02\xa7\x57\x26\x0c\x47\x26\x0c\xb4\x0b\xcd\x54\xfb\x60\x8e\x14\x2a\x94\x93\x35\x32\x32\x18\x7d\x84\x0b\x55\xef\x9d\x77\x87\x66\xf7\x54\x1b\x68\xe6\x67\xaa\xc8\x47\xcd\x1c\xa2\xac\x8f\x23\x1d\xba\x70\xd9\xd5\x4d\xad\x77\x35\xe8\xea\x70\x79\xa5\x5f\x8e\x0c\x15\xba\xba\xda\xe8\x6b\x46\x6f\xd0\xd5\x2e\xd4\x7e\x0b\xb4\x21\x0c\x47\xa0\x5e\xab\x43\x13\x8c\xf3\xee\x60\x50\x6b\x25\xea\x5e\xb0\xf1\x54\x85\x81\xd6\x3d\x1d\xa8\x28\x89\x5a\xd9\xd7\x74\xb5\x67\xa2\x39\xd9\x5d\x4f\xeb\xab\x43\xb3\x3b\x50\xc0\xb8\x54\x7b\x1a\xde\xa8\xff\x52\x2f\x2e\x07\x5d\xfd\xb3\xc2\x79\x1a\xea\xff\x5c\x61\x68\xea\x0e\xa0\xdf\xbd\xe8\x9e\xa9\x46\x43\x7e\xc6\x25\x97\xfa\xa8\x77\xa5\xab\x17\xa8\xf3\xe8\x23\x18\x57\xa7\x86\xa9\x99\x57\xa6\x0a\x67\xa3\x51\x9f\x3a\xda\x50\xf5\x6b\xad\xa7\x1a\x3f\x37\x06\x23\x83\x7a\xeb\xca\x50\x15\xe8\x77\xcd\x2e\x15\x7c\xa9\x8f\x3e\x6a\xa6\xf1\x33\xde\x9f\x5e\x19\x1a\x75\x9a\x36\x34\x55\x5d\xbf\xba\x34\xb5\xd1\xb0\x09\xe7\xa3\x4f\xea\xb5\xaa\x43\xaf\x7b\x65\xa8\x7d\xea\xdd\xd1\x90\x9a\x6a\x9e\xab\x23\xfd\x33\x32\x45\x1f\x50\xe7\x2b\xf0\xe9\x5c\x35\xcf\x55\x1d\x1d\x4a\x3d\xd5\x45\x17\x18\xa6\xae\xf5\xcc\xfc\xb0\x91\x0e\xe6\x48\x37\x73\x36\xc2\x50\x3d\x1b\x68\x67\xea\xb0\xa7\x62\xef\x08\xb9\x7c\xd2\x0c\xb5\x09\x5d\x5d\x33\x70\x80\x36\x04\x14\xfb\xa9\xfb\x19\x46\x57\xd4\x64\x9c\xa3\x2b\x43\x65\xb7\x9a\xd1\x10\x88\x55\xe8\x4c\x82\xf6\x11\xba\xfd\x6b\x0d\xd5\xe6\x83\x2f\x47\x86\xa1\x71\x9c\x50\x97\xf5\xce\xb9\xbb\x31\xbc\xdf\xdc\x34\x1a\xae\x6f\x5b\x2e\x44\x24\x5e\x92\xd8\x8a\xad\xa9\x4b\xa0\x53\x78\xe4\x23\x5c\xdf\x9a\xe1\x9a\xf7\x16\xd0\xc9\x3d\xe4\x7a\xed\xdb\xc4\xbb\xe3\xcf\xb1\x9f\x8e\x15\xb7\x99\xa4\x39\xf1\xee\x99\x10\xbc\xe3\xed\x21\xf9\x77\xe2\x84\x28\x9c\xdf\xf1\x76\xdb\x0a\xe2\x24\x7b\xf2\x3d\xdb\x8a\x91\x2b\xaa\xd6\x62\x8f\xbc\xcf\x8a\x22\x12\x62\x1f\xbb\xe1\xad\x41\x48\xe6\xce\x8a\x3f\xe0\xda\x47\x11\x8e\xdf\xa2\xb7\x62\x8c\x6d\xb9\x2e\x74\xd8\xaf\x68\xbb\xb5\x22\xd1\xef\x07\xc4\x63\x54\x78\x97\x33\x99\xbb\x42\x18\xbd\x0e\x90\x39\xfe\xf0\x96\x59\xb2\x0c\xd0\x52\xea\x80\x16\x3e\xf1\x8e\xb9\xe3\xcd\xb2\x0e\x7c\xe2\x1d\x8b\x28\x99\x66\x1d\xf8\xc4\x3b\xa6\x6b\xaa\x39\xef\xc0\x27\xde\xe1\x25\xa9\xce\x05\xda\x8c\xd4\x5b\xac\xa0\x83\xff\xf3\xe7\xaf\x0e\x7a\xe9\xab\x23\x5c\x74\x6f\x85\x02\x07\x93\x6b\x55\x37\xb4\xd1\x10\x3a\xe9\xad\xe8\x51\x87\xd7\xd8\xaa\x0e\xaf\x45\xcb\x19\x3e\x9f\x09\xd2\x62\xb2\xd1\x81\xc7\x06\x00\xc0\x58\xfa\x41\xba\x81\x0e\x48\x3f\x58\xcb\xe0\x67\x49\xe1\x8d\xbf\xf0\x46\x37\xce\xda\x7e\xe5\x6d\x8b\xac\xed\x40\x3a\x60\x6d\xff\x4e\xfc\xdc\xc8\x03\x3e\xf2\xbb\xd7\xef\xb1\xf1\x49\xa8\xd0\x1b\xf5\xd5\x3a\x15\x1e\xc5\xf8\xf6\xc9\xeb\x8c\xcb\x53\xd6\xfa\x36\x6b\xfd\xe3\xd5\x65\x8d\x47\xa2\xf1\xcd\xbb\x9f\xa5\xcc\x84\xeb\xae\x3e\xb9\x3c\xef\x1a\xaa\x21\x5a\xfc\x3b\x05\x3c\xf2\x10\x5b\x53\x81\x50\x99\xaf\x10\x05\x24\xb6\x0c\x3c\xf2\x20\x35\x1b\xce\x9c\xe6\x77\xfe\x1d\xee\xb0\x5e\x46\x33\x4f\x3c\x1b\x77\x5f\xb9\x89\x59\x4d\x12\x7a\xf0\xf8\x84\xbb\x2a\xfe\x6b\xa4\xab\xcc\xbe\xe5\xcb\x35\x4c\x04\xb2\x44\xbe\x89\xe0\xa1\xcc\xe4\x63\x05\xda\x27\xcd\x46\x23\xcd\x44\x73\x78\x91\xda\xad\xf7\x52\xd6\x83\x1c\x09\x9a\xda\x81\xc7\xd4\x3a\xa1\x0a\x10\x0f\x15\x9f\xc9\xf7\x96\xdb\xa4\x0e\x71\xe6\x70\x6f\xb9\xd0\xe9\x80\xe7\xb8\xcc\x00\xae\x2c\x2a\x44\x55\xc5\x61\xbc\x8d\x0f\xa5\x5d\x7e\x08\x32\x7f\x96\xda\x12\x3e\x8a\x27\xec\x2e\x34\xf8\x9e\xd4\x6c\xe4\xac\x4e\xd5\x89\x43\x67\x29\x47\xcd\xbc\x08\x5c\x7a\x32\xfd\x2f\x52\x40\xfa\xdf\xef\xa3\x57\x92\x02\x92\xd4\x54\x40\xfa\x3e\x7a\xf5\x5f\xec\xa1\x96\x59\x18\xf8\x91\x7c\xef\x90\x07\x05\x38\xcb\x87\x5b\xc7\x25\x10\xc1\xaf\x70\x0c\x33\x9f\x36\xe1\xc5\x5d\x8f\x4b\x36\x99\x0a\x8a\x94\x88\x7b\xc5\xa6\x9a\x03\xb5\x83\xdd\x7f\x89\xf3\x0f\xc7\xf9\x87\xd5\xf1\xa9\x44\x9d\x97\x72\xc0\x2b\x42\x09\x70\x08\xed\xb4\x95\xb8\x11\x29\x0c\x99\x86\xc4\xba\xcb\xba\xb9\xb7\x4b\x5e\x8f\x6a\xcd\x65\xf5\xc4\xac\x68\xb1\x33\xa7\xe6\xb6\x69\x16\x9a\xb3\x0e\xb5\xe0\x3f\x4d\xa6\xf2\x97\x92\xc2\x9c\xf2\xa4\x86\xf2\x84\xff\x6c\xa0\xcc\x69\x3a\xb7\xdc\x88\x28\xdb\x0c\xce\x81\xab\x30\xae\xde\x72\xce\xef\xb8\x7e\xbe\x89\x35\x9b\x3b\x2e\x91\x03\x2b\xbe\x65\xe6\x8b\x20\x4f\x37\x53\xdc\x33\x68\x9f\x02\x52\x38\x95\x52\x07\xe1\x62\xa5\x43\xf2\x68\x47\xf4\x0b\xe1\xe9\x96\x87\xe5\x24\x2e\x64\xc7\x25\x1f\x50\x1a\x48\x3f\x5a\x12\x1d\x42\x9b\x6c\xd7\x8f\x88\x5c\x40\x2f\x27\xaa\xd5\x17\x77\x2c\x37\xb1\x72\xea\x72\xa2\xa2\x21\x34\xe1\xb6\xe2\xdb\x8d\x3c\xbc\xc5\xaa\x62\xf2\xbd\x15\x22\xda\xb2\x28\x36\xa6\xfb\xa8\xdc\xbc\x29\xf9\x45\xa1\xf7\x94\x57\x07\x98\x73\x28\x2d\xce\xfa\xbd\x15\xb6\x44\x1c\x99\x88\x61\x29\xac\x92\xa9\xcc\x18\xb4\x9b\x40\x81\x70\xc4\x70\x20\xdc\x9d\x0d\x38\x69\xa6\xae\x74\xe6\x99\x3c\x14\x91\x3e\xfc\x5f\x07\xa4\x1a\x04\x26\x53\x59\x0c\x51\xe0\x90\x63\x55\x08\xca\x69\x5e\x1c\xd8\x56\xe0\x30\x27\x34\xb3\x38\x24\xe8\x15\x9e\xca\xc8\x2c\x6b\x79\x84\x8c\xf0\xe0\xe8\x40\xa1\xfa\x3f\x15\xd6\x7e\x48\xa2\x56\x14\x5b\x71\x12\xa1\xfc\x93\xe3\xe3\x02\x54\xb0\x77\xea\xcf\xd6\x15\xd0\x72\x99\xbe\x8f\xa0\x49\xbd\x2a\x17\xdc\x4a\x7b\x69\x68\x0c\x5b\xa2\x0a\xa4\x8d\x6c\xde\x59\xd2\x94\xf3\x06\x76\x55\x3d\xc1\x65\x64\x03\x4a\x1e\x28\x03\x4b\x58\xce\x06\x4b\x47\x12\xb3\x1a\x9e\x4a\x68\xe3\x41\x12\x17\xc9\x62\x55\x9c\x9d\x0c\x5a\xe9\x06\x9f\xc6\x39\x12\xe7\x9e\xd8\xf6\xa0\x94\x56\x3d\xcb\x00\x37\x8f\xb0\x6c\x9b\x44\xd1\x36\x1e\x62\x3d\x6e\x1e\x71\x4b\xac\x19\x09\x27\x73\xc7\x8d\x49\x58\x3b\x02\xa7\x4d\xf4\xd7\xf3\x70\xfd\x45\xc5\x96\x74\xc0\x53\x7a\x97\x6e\xb7\x41\xe8\xd0\x18\xe1\x2d\x56\xfc\x9e\x97\xba\xa4\x3a\x96\x66\xae\x3c\x75\xc5\xac\x50\x0c\x60\xb3\x4e\x17\xa2\x22\xc0\xaa\xd0\xfc\x52\x61\xe9\x30\xe7\x6f\xfb\xde\xdc\x59\xb4\xd8\x70\xb9\xa9\xd0\x46\x4a\x84\x37\x02\xd5\xad\x8c\xc3\x62\xd5\x62\x5c\xf0\x6e\x41\xe2\x09\x4b\xae\x73\x48\xaf\x09\x18\xd5\xe0\x9e\x25\x29\x59\xfa\x90\x83\x34\xcd\x38\x9a\xd5\x50\x9e\x0f\xfd\x15\x7f\xed\xe0\x22\x37\xb1\x0a\xcb\xcb\x99\xe7\xd2\xe4\x0e\x48\x83\xc4\x82\xb7\xad\x76\x29\x8a\xe4\x82\xf7\x0a\x05\x3d\xc2\x64\xe2\x78\x33\xb2\xca\x67\x64\xb1\x02\x77\xcd\xda\x7d\xa9\xc5\x29\xc7\x77\x37\x38\x93\x71\x6a\x26\x6f\x98\x9c\x8d\xef\x6e\xf2\xb6\xe6\x40\xe1\xcc\x69\x8a\x5f\xf1\x5f\x5a\xa4\xe5\x55\xc0\xed\xb5\xa8\x42\x4e\x0d\x56\x49\xc9\x48\xc8\xf7\x61\xcf\x71\xf9\x7f\xf9\x1a\x51\x7e\xcc\x27\x8b\xe9\xed\x93\x22\x1c\xd0\x6c\x16\x65\xe4\x43\x64\x65\x6f\xde\x43\xcf\x6c\x5b\x4a\xeb\x3e\x39\x2b\x4e\x19\x51\x95\x8a\x57\x9e\x32\xd2\xed\x6d\xc8\x26\x5f\x21\xb3\xcd\x36\xd6\x81\xf1\x8f\x86\x88\x3a\xbc\xde\x0c\x92\x1d\x9d\xfc\x47\x02\x21\xbf\x6f\xd1\xb0\x9f\xe5\xe3\xf9\x2a\x02\x27\x92\x2d\xf8\x34\x75\x62\x8f\xb8\x79\xa7\xd5\x42\x39\x38\xa4\xf5\x41\x69\x2f\xe2\xe3\x36\x09\xf4\x93\x38\x48\x62\x39\x9f\xc6\xf2\x9a\xc4\x0f\xf9\x7d\xe2\x16\x0b\x14\x49\xca\x87\x06\xac\xfe\xe5\x88\x6d\x93\x82\xbd\x54\x2c\x68\xca\xb2\xe4\x66\x65\xc7\x14\x87\x26\xa8\xc8\x06\x4d\x59\xde\x8d\xd5\x89\xdd\xac\x13\xce\x18\x54\x73\x1b\xbb\xa0\x4c\x5a\xe1\x8c\x9f\x1e\xbf\x48\xbf\x1e\xfd\x72\xf0\xc3\x8d\xa4\x14\x2b\xe9\x62\x46\x53\x21\xfc\x22\xfd\xca\xa9\x0a\x47\x00\xcd\xba\x44\xba\xc6\xcf\x1b\xcc\xf3\xc8\x03\x47\x9a\x6b\xad\xfd\x24\x66\xec\x38\x0e\x59\x87\x84\x3f\xf0\x60\x45\x34\x95\x4e\x0f\xa9\xe7\xb8\x18\x36\xb2\x69\x49\xf9\x7c\x35\x24\xde\x8c\xe0\x6e\xe7\x2f\x03\x96\x3e\xa6\x94\xa2\x2b\xc3\x22\x1b\x93\xe6\x93\x94\x5f\xc5\xbd\x74\x0a\xb8\x2c\x56\x85\x22\x1a\x37\x97\x2a\xa5\xd5\xc3\xa4\xe6\xd7\x64\x44\xdc\x79\xb6\x7c\x36\x44\xc0\x2c\x88\x88\x3b\x84\x2b\x71\xe7\x95\xf1\xbc\xbf\x35\x75\x7d\xfb\x2e\xca\x08\x44\x83\x1f\x62\xbd\xbe\x89\x8a\x7a\xbc\x23\xdc\xc5\xe2\x85\xbc\x59\x37\xea\x86\x3d\x45\x71\xa2\x54\x52\x4e\xb0\x1f\x82\x24\x6d\x8a\xbf\x8c\xee\x03\x73\xa0\x5c\xd9\x6e\x30\x06\x61\x80\xcd\x9d\x4c\x16\x5c\xfc\xbc\x67\xbf\x35\x77\x6e\x72\x64\x1a\x7b\xf2\x0b\xaf\xe0\xc9\xe6\xb3\x75\xf5\xb7\x8c\xea\xb4\xa8\xa1\x40\x63\x4e\xda\x60\xca\xb7\x81\xbb\xf4\x4c\x81\x8d\xe6\xb0\xa8\x1f\x5f\xc6\xc7\x86\x93\xa4\x17\xc2\xa3\xe8\x7a\x16\xd7\x4b\xd0\x48\xb7\x9d\xdd\x1d\x5f\xb2\x8f\x79\xa3\xc4\x6b\xe3\x3e\x15\x84\x24\x4f\xa8\xf0\xc3\x0c\x94\x19\xe4\x77\x1a\x91\x6b\xcd\x92\x65\x20\x97\xf7\x14\x26\x93\x53\x61\x5a\x43\x0f\x9c\xd2\x6d\x1d\x59\xd6\x55\x17\x35\x07\x4c\x0f\xe2\x80\x09\xc4\xe9\x10\xad\x70\x64\x2a\xbe\xd4\x93\x3f\x37\x2a\x67\x49\xf4\x5d\xce\xa6\xa4\xac\x60\xef\x1d\x59\x2b\x10\xb8\x96\xe3\xbd\x70\x8b\xde\xc8\xae\x95\x9d\x95\xdd\x91\x35\xdd\x4c\x3d\xff\x90\x96\x79\xa5\xfd\x54\x6c\x01\x22\xa7\xcd\x1c\x1c\x58\x61\x94\xce\x0c\xe5\xda\x54\x98\x77\x0b\x66\x53\xfe\xf4\x7f\x3f\x84\x34\x38\x66\x67\xe3\x85\xcc\x80\x36\x08\xcd\xe8\xc3\xf8\x8e\xac\x6f\x0a\x79\x55\xd6\xac\x14\xd3\xd0\x42\xc5\xb2\x9b\xc2\x79\x51\x08\xe4\x34\xdf\xe5\x72\x19\xb0\x2b\x67\x96\xb4\xb8\x61\xa6\x6e\xc2\x6e\x45\xd6\xcb\x66\xb0\xca\xa7\x55\x3c\xe6\xa4\x8d\xc5\x29\xe3\x21\xa8\x50\x71\x97\xea\x0f\x67\x4e\xdf\x7a\x71\xc6\x6d\x85\x9f\x19\x9f\xbc\x2b\x78\x9a\x32\xaa\x3f\x02\xfb\x0a\x1d\x38\xc9\xcf\x24\x16\x59\xe3\x71\x83\x87\x8c\x4e\xab\xd5\xe2\x81\xb2\x74\xbc\xe9\x78\xb6\x9b\xcc\x88\x7c\x8f\xc9\x75\x25\x77\x4d\x01\xdb\x94\x6d\x7a\xf8\xce\xc3\x14\x95\xce\xdf\x8d\x4d\x26\x0a\x8b\xc4\x0a\x0b\x97\x9d\xc7\x27\xa5\x10\x9a\x6f\x6e\x78\x31\xc6\x08\x1c\x85\x1e\xd3\xb7\x15\xfa\x6a\x50\xf8\xfe\x51\xa2\x76\x23\x80\x8a\x6f\x12\x2a\x6f\x11\x62\x05\x82\xe2\x8b\x04\x78\xc5\x8e\xda\x5f\x41\xbb\xc9\x7e\x4f\x0a\x79\x2a\x5d\x4f\x8f\x35\x89\x29\x63\x48\xe8\x81\x73\xa6\xca\xd3\x93\xa4\x40\x90\xd7\x25\xc7\x8c\x54\xb9\x64\x9c\x7e\x53\x00\x67\xba\xf6\x3d\x41\x89\x8f\x03\xbf\xd0\x23\xfe\x87\x7a\x7e\x78\xd9\xe3\xaf\xf4\xc5\xd9\x64\x32\x19\x7f\x37\x99\x4c\x5e\xb5\x6f\x3a\xe3\xce\xf8\x8b\x57\x4d\x0c\xf9\xf0\x57\xed\x9b\x82\x67\x1c\xfe\x02\x02\xe5\x54\xb5\x10\x44\x27\x54\xca\x4d\xe7\x66\x13\xe7\xaf\x9d\xaf\xaf\x5e\x57\x7a\xf2\x95\x52\xce\xb0\xdf\x36\x1b\xe4\xa0\x72\x55\x3e\xe5\xc4\x6a\x9b\xfd\xe5\x9a\xf0\x19\x57\xb0\xb7\x5d\xa9\x3f\x02\x05\x08\x7d\x21\xf3\x9c\x33\x9a\xfb\xb9\x02\xaf\x48\xa1\xf6\x11\x06\x46\x52\x00\x61\x6a\x6a\xc9\x65\xe5\xb3\xa1\x14\xac\x3f\xee\x0c\xd6\x1f\xff\x01\x6b\xf1\xfa\x3b\x82\x95\x1f\x01\x7c\xa3\x60\xfd\x7e\x67\xb0\x7e\xff\x67\x80\x75\xdb\x9c\xee\x04\x65\xd8\x1f\xce\xf0\x52\x48\xc3\xae\xb0\x86\xad\xf3\x59\x07\x6f\xd8\x1f\xc4\xfc\x23\x1a\x8e\x8c\x2a\x24\x20\x7b\x4b\xc6\x8f\x46\x15\xf0\xf8\x3b\x6a\xaf\x06\x05\xf9\x0b\xb9\x7a\x88\xb7\xbd\x0c\xe0\x67\x57\xd0\x29\x7c\x6b\x40\x97\xc5\x96\x19\xee\x40\xf8\x27\x4d\x6f\xf8\x97\x4c\x2b\x57\x7f\xff\x80\x41\x0d\x90\xb6\xc5\x8b\xfa\x49\xe7\xf1\xc2\x63\x1f\x35\x54\xfd\xba\x73\xac\x90\x77\x8e\x15\xcd\x7f\x36\xb6\xe2\xf5\x17\x6d\x6c\xbc\x5e\x28\x58\x94\x22\x6d\x0b\xc5\x4a\xcc\xe7\x5c\x01\x49\x91\x14\x38\xa9\x9b\xcb\x9c\xca\xab\xfd\x97\xac\x28\x5e\xc6\x9d\xf1\x0e\x0b\x37\x5d\x2e\x73\x5a\x6a\xac\xb6\xac\x15\x28\x4f\x8a\xb2\x9d\xff\xeb\x32\xff\x15\x2d\x46\xb6\x33\x7f\xb3\x7d\xf7\x06\x3e\xe7\x6f\xeb\x43\xc3\xa6\xf9\x82\xdf\xcf\x57\x35\x27\x76\xf9\x81\xa9\x73\x9e\x35\x61\xbf\xe8\xf6\xbb\x26\x27\xe3\x9d\x03\xce\xcd\x3f\x01\xa7\x78\xfd\x8d\x32\x69\x01\xde\x6f\x34\x83\x3e\xdc\x19\xa4\x87\x2f\x06\xe9\x4a\x81\x75\x91\x59\xe1\x53\x4c\xc2\x4f\x4f\xa8\x25\x9b\x22\xf5\xf6\x28\xbd\xdf\x62\x80\x67\x71\x03\x7b\x65\xec\xf0\xb2\xb4\x0e\xfe\x93\xcc\x1d\xf6\x49\xf3\x60\x2b\x9e\x60\x4b\x40\x84\x8d\x8b\x08\x9e\xdb\x09\x70\xca\xd7\x1b\xb3\x6e\xbc\x70\x9f\x5e\x15\x3e\x99\xad\x88\xce\x67\xfc\x6b\x05\xd6\x3b\x66\xfc\xbb\xc9\xdf\x66\x34\xff\x7b\x80\xbd\x57\x36\xd7\x7a\x4a\xf5\xbc\x27\xe1\xd4\x8a\x9d\x25\xfd\x7a\x98\x35\x85\xd6\xc3\x0e\xba\xef\x87\x3d\x78\x39\xfe\xe0\x3f\xc5\x20\xec\x8b\x43\x78\x16\x8b\xf0\xcc\xd4\xc0\x66\x73\xf7\x5e\x6c\x3c\xe6\xac\xfe\xbc\x85\xb6\x6d\xc9\x40\x19\xf2\x2b\x54\x6d\x77\xc8\xc3\x4e\x8b\x0a\x76\xf0\xef\xbe\xc5\x6f\x4e\xfb\x5d\x8a\x60\x71\xfd\xee\xa8\xdd\x52\x14\xe7\x09\xff\x1a\xb4\x1e\xb0\x77\x13\x63\xe9\x60\x37\x98\x4e\x77\x03\xe5\x81\x94\x66\x29\xe3\xce\xf8\x79\xde\xaf\x5f\xba\x04\xde\xec\xb3\x04\xea\x6b\x07\x78\xc6\x5b\x3c\xb7\x59\xb3\x6a\x7f\xbd\x73\xf2\xbe\x73\xbe\xf3\xdd\xce\xf9\xce\x77\xff\x24\xe5\xc5\xeb\x2f\x4a\xca\xc9\xee\x67\x82\x44\x01\xb2\x63\xb8\x14\x5c\xf7\x3b\x13\x4c\x53\x6f\x0a\xcf\xaa\xbe\x5b\x61\x98\xbb\x8f\x4a\x58\x7b\x94\xd2\x77\x89\x19\xdc\x04\x41\x54\x9c\xcc\xdc\x47\x93\xf4\xaf\x77\xea\xfe\xba\x62\x07\xcc\x64\x38\x29\x34\xd5\xa2\x20\x9b\x79\xa1\x93\x10\x50\xf8\x2c\x8c\xea\x23\xea\x25\xfe\xc9\x4e\xf1\x23\x14\x34\xa1\x93\xff\xab\x52\x79\x32\x99\x34\xf9\x3b\xdb\x0e\xfb\x79\x52\x1e\xf9\x17\xba\x1d\xfe\xce\xf7\xa9\x49\xff\x72\xa1\x42\xc7\x14\xcc\xfe\x18\x07\xdb\xed\x8d\xdf\x90\xd4\x7d\xcf\xf2\x3b\x7c\x58\xf1\x2c\x5b\xf1\x96\xbe\xfc\x82\x9b\x7e\x1c\x5f\xff\x91\x4a\x81\x5e\xce\x3e\x8a\xa6\x96\x95\xf8\xfc\x7f\x00\x00\x00\xff\xff\x47\xf1\xfa\x92\x30\x43\x00\x00") - -func testImagesEchoserverTemplateLuaBytes() ([]byte, error) { - return bindataRead( - _testImagesEchoserverTemplateLua, - "test/images/echoserver/template.lua", - ) -} - -func testImagesEchoserverTemplateLua() (*asset, error) { - bytes, err := testImagesEchoserverTemplateLuaBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/echoserver/template.lua", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesEntrypointTesterDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xb1\x6e\xdb\x30\x10\x86\x77\x3e\xc5\x0f\x69\x69\x01\x47\x76\x3d\x14\x41\x3b\xa9\xb6\x83\x0a\x49\xa4\xc0\x52\x9a\x06\x41\x06\x5a\x3a\x4b\x07\xc8\x24\x4b\x9e\xaa\xf8\xed\x0b\x39\x09\x5a\xa3\x9c\x08\xde\xc7\xe3\xc7\xff\x62\xac\xac\x3b\x7a\x6e\x3b\xc1\x72\xf1\xe9\x33\xaa\x8e\x70\x3d\xec\xc8\x1b\x12\x0a\x48\x07\xe9\xac\x0f\x89\x8a\x55\x8c\x1b\xae\xc9\x04\x6a\x30\x98\x86\x3c\xa4\x23\xa4\x4e\xd7\x1d\xbd\x57\x66\xf8\x41\x3e\xb0\x35\x58\x26\x0b\x7c\x98\x80\xe8\xad\x14\x7d\xfc\xaa\x62\x1c\xed\x80\x83\x3e\xc2\x58\xc1\x10\x08\xd2\x71\xc0\x9e\x7b\x02\xbd\xd4\xe4\x04\x6c\x50\xdb\x83\xeb\x59\x9b\x9a\x30\xb2\x74\xa7\x67\xde\x9a\x24\x2a\xc6\xe3\x5b\x0b\xbb\x13\xcd\x06\x1a\xb5\x75\x47\xd8\xfd\xbf\x1c\xb4\x9c\x84\xa7\xd5\x89\xb8\x2f\xf3\xf9\x38\x8e\x89\x3e\xc9\x26\xd6\xb7\xf3\xfe\x15\x0c\xf3\x9b\x6c\xb5\xc9\xcb\xcd\xc5\x32\x59\x9c\xae\xdc\x9b\x9e\x42\x80\xa7\x5f\x03\x7b\x6a\xb0\x3b\x42\x3b\xd7\x73\xad\x77\x3d\xa1\xd7\x23\xac\x87\x6e\x3d\x51\x03\xb1\x93\xef\xe8\x59\xd8\xb4\x33\x04\xbb\x97\x51\x7b\x52\x31\x1a\x0e\xe2\x79\x37\xc8\x59\x58\xef\x76\x1c\xce\x00\x6b\xa0\x0d\xa2\xb4\x44\x56\x46\xf8\x96\x96\x59\x39\x53\x31\x1e\xb2\xea\x7b\x71\x5f\xe1\x21\xdd\x6e\xd3\xbc\xca\x36\x25\x8a\x2d\x56\x45\xbe\xce\xaa\xac\xc8\x4b\x14\x57\x48\xf3\x47\x5c\x67\xf9\x7a\x06\x62\xe9\xc8\x83\x5e\x9c\x9f\xfc\xad\x07\x4f\x31\x52\x33\x65\x56\x12\x9d\x09\xec\xed\xab\x50\x70\x54\xf3\x9e\x6b\xf4\xda\xb4\x83\x6e\x09\xad\xfd\x4d\xde\xb0\x69\xe1\xc8\x1f\x38\x4c\xc3\x0c\xd0\xa6\x51\x31\x7a\x3e\xb0\x68\x39\x9d\xfc\xf7\xa9\x44\xa9\xab\x6d\x71\x8b\x50\x7b\x2d\x75\xa7\xd2\xf5\x1a\xe4\x40\xee\xef\xee\x62\xa9\x36\x3f\xef\x8a\x72\x83\xcb\xc5\xe5\x42\x6d\xf2\x6a\xfb\x78\x57\x64\x79\x85\xa7\x68\x4e\x2e\x7a\x56\xab\xdb\x35\x9e\xa2\x86\xf6\x7a\xe8\x25\x9a\x21\xd2\xbe\x1d\x0e\x64\x24\x44\xcf\xea\x4f\x00\x00\x00\xff\xff\xd4\xb5\x6f\xb2\xab\x02\x00\x00") - -func testImagesEntrypointTesterDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesEntrypointTesterDockerfile, - "test/images/entrypoint-tester/Dockerfile", - ) -} - -func testImagesEntrypointTesterDockerfile() (*asset, error) { - bytes, err := testImagesEntrypointTesterDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/entrypoint-tester/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesEntrypointTesterMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x3e\x14\xc5\x9f\xff\xfe\x14\x47\x0d\x0f\xad\x54\x52\xfe\x68\xe2\x81\x09\x4d\x59\xdb\x41\x04\x4a\xa6\x24\x80\x78\x42\x4e\x72\x9b\x5c\x29\xb5\x3d\xdb\x59\xe8\xb7\x9f\x5c\x40\x5a\x35\xbf\xf9\x9e\xe3\xe3\x9f\x8f\x23\xac\xb5\x39\x58\xee\x7a\x8f\xcb\x8b\xff\xaf\x50\xf5\x84\xfb\xb1\x26\xab\xc8\x93\x43\x32\xfa\x5e\x5b\x17\x8b\x48\x44\x78\xe0\x86\x94\xa3\x16\xa3\x6a\xc9\xc2\xf7\x84\xc4\xc8\xa6\xa7\x4f\x65\x89\x27\xb2\x8e\xb5\xc2\x65\x7c\x81\x79\x30\xcc\x3e\xa4\xd9\xe2\xab\x88\x70\xd0\x23\xf6\xf2\x00\xa5\x3d\x46\x47\xf0\x3d\x3b\xec\x78\x20\xd0\x5b\x43\xc6\x83\x15\x1a\xbd\x37\x03\x4b\xd5\x10\x26\xf6\xfd\xf1\x9a\x8f\x90\x58\x44\x78\xf9\x88\xd0\xb5\x97\xac\x20\xd1\x68\x73\x80\xde\xfd\xed\x83\xf4\x47\xe0\xb0\x7a\xef\xcd\xf5\x6a\x35\x4d\x53\x2c\x8f\xb0\xb1\xb6\xdd\x6a\x78\x37\xba\xd5\x43\xba\xde\x66\xe5\xf6\xfc\x32\xbe\x38\x1e\x79\x54\x03\x39\x07\x4b\xbf\x46\xb6\xd4\xa2\x3e\x40\x1a\x33\x70\x23\xeb\x81\x30\xc8\x09\xda\x42\x76\x96\xa8\x85\xd7\x81\x77\xb2\xec\x59\x75\x4b\x38\xbd\xf3\x93\xb4\x24\x22\xb4\xec\xbc\xe5\x7a\xf4\x27\x65\x7d\xd2\xb1\x3b\x31\x68\x05\xa9\x30\x4b\x4a\xa4\xe5\x0c\xdf\x93\x32\x2d\x97\x22\xc2\x73\x5a\xdd\xe5\x8f\x15\x9e\x93\xa2\x48\xb2\x2a\xdd\x96\xc8\x0b\xac\xf3\x6c\x93\x56\x69\x9e\x95\xc8\x7f\x20\xc9\x5e\x70\x9f\x66\x9b\x25\x88\x7d\x4f\x16\xf4\x66\x6c\xe0\xd7\x16\x1c\x6a\xa4\x36\x74\x56\x12\x9d\x00\xec\xf4\x3b\x90\x33\xd4\xf0\x8e\x1b\x0c\x52\x75\xa3\xec\x08\x9d\xfe\x4d\x56\xb1\xea\x60\xc8\xee\xd9\x85\xcf\x74\x90\xaa\x15\x11\x06\xde\xb3\x97\xfe\x38\xf9\xe7\x51\xb1\x10\x65\xb1\x2e\x6f\xc8\x88\xa4\x58\xdf\xe1\xdb\x0d\xe4\xbe\xbd\xfa\x22\xaa\xa4\xb8\xdd\x56\x61\x7f\x36\x5f\x3f\x16\x9b\xb4\x58\x88\xdb\xfc\x21\xc9\x6e\x5f\x9f\xb6\x45\x99\xe6\x59\xd0\x06\xe9\xc9\xf9\x10\xf1\xba\x49\x0b\x04\xb3\xd2\xbe\x65\x8b\xb3\xb9\xeb\x69\x18\x60\xa6\x76\xb1\x10\xf4\x66\xb4\xf5\x42\xd4\xac\xae\xc5\x7f\x71\xbc\xe2\xbd\xec\xe8\x7c\xf4\x3c\xc4\xae\x47\xcd\x0a\x67\xf3\x00\xb2\x10\x22\xfe\x79\x97\x67\x2f\xd7\x61\x28\xfe\x04\x00\x00\xff\xff\x3c\xab\x65\xa6\xe8\x02\x00\x00") - -func testImagesEntrypointTesterMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesEntrypointTesterMakefile, - "test/images/entrypoint-tester/Makefile", - ) -} - -func testImagesEntrypointTesterMakefile() (*asset, error) { - bytes, err := testImagesEntrypointTesterMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/entrypoint-tester/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesEntrypointTesterVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesEntrypointTesterVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesEntrypointTesterVersion, - "test/images/entrypoint-tester/VERSION", - ) -} - -func testImagesEntrypointTesterVersion() (*asset, error) { - bytes, err := testImagesEntrypointTesterVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/entrypoint-tester/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesEntrypointTesterEpGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\xc1\x6a\xdb\x40\x10\x86\xcf\x9e\xa7\xf8\x11\x94\xda\xc1\x95\xdc\x40\x2f\x29\x3d\xa8\x89\x4b\x45\x82\x5d\x2c\xa5\x21\xd0\xcb\x5a\x1a\x49\x43\xa5\xdd\xed\xee\x2a\xb2\x29\x7d\xf7\x22\xc7\x85\x84\x1e\x87\xf9\xf9\xe6\xdb\x99\x4d\x2e\xe8\xda\xd8\xa3\x93\xa6\x0d\xb8\x5c\xbd\xff\x80\xa2\x65\xdc\x0e\x7b\x76\x9a\x03\x7b\xa4\x43\x68\x8d\xf3\x31\xd1\x9d\x94\xac\x3d\x57\x18\x74\xc5\x0e\xa1\x65\xa4\x56\x95\x2d\xe3\xdc\x59\xe2\x3b\x3b\x2f\x46\xe3\x32\x5e\x61\x3e\x05\xa2\x73\x2b\x5a\x7c\xa4\xa3\x19\xd0\xab\x23\xb4\x09\x18\x3c\x23\xb4\xe2\x51\x4b\xc7\xe0\x43\xc9\x36\x40\x34\x4a\xd3\xdb\x4e\x94\x2e\x19\xa3\x84\xf6\x34\xe4\x8c\x88\xe9\xf1\x0c\x30\xfb\xa0\x44\x43\xa1\x34\xf6\x08\x53\xbf\x4c\x41\x05\x22\x00\x68\x43\xb0\x57\x49\x32\x8e\x63\xac\x4e\x96\xb1\x71\x4d\xd2\x3d\xa7\x7c\x72\x97\x5d\xaf\x37\xf9\xfa\xdd\x65\xbc\x22\xba\xd7\x1d\x7b\x0f\xc7\xbf\x06\x71\x5c\x61\x7f\x84\xb2\xb6\x93\x52\xed\x3b\x46\xa7\x46\x18\x07\xd5\x38\xe6\x0a\xc1\x4c\x9e\xa3\x93\x20\xba\x59\xc2\x9b\x3a\x8c\xca\x31\x55\xe2\x83\x93\xfd\x10\x5e\x2d\xe8\x9f\x95\x78\xbc\x0c\x18\x0d\xa5\x11\xa5\x39\xb2\x3c\xc2\xe7\x34\xcf\xf2\x25\x3d\x64\xc5\xd7\xed\x7d\x81\x87\x74\xb7\x4b\x37\x45\xb6\xce\xb1\xdd\xe1\x7a\xbb\xb9\xc9\x8a\x6c\xbb\xc9\xb1\xfd\x82\x74\xf3\x88\xdb\x6c\x73\xb3\x04\x4b\x68\xd9\x81\x0f\xd6\x4d\xee\xc6\x41\xa6\xd5\x71\x15\x53\xce\xfc\x6a\x78\x6d\x9e\x65\xbc\xe5\x52\x6a\x29\xd1\x29\xdd\x0c\xaa\x61\x34\xe6\x89\x9d\x16\xdd\xc0\xb2\xeb\xc5\x4f\xc7\xf3\x50\xba\xa2\x4e\x7a\x09\x2a\x9c\xea\xff\x9e\x13\xd3\x45\x42\x64\x55\xf9\x73\x82\xf4\x4a\x34\x91\xf4\xd6\xb8\x80\x39\xcd\xa2\xba\x0f\x11\xcd\x22\xe3\x23\x5a\x10\x25\x09\x8a\xe9\xd2\xd6\x99\xc6\xa9\x1e\xd6\x89\x0e\xfe\x84\x53\xae\x19\x7a\x9e\x2a\x09\x6f\x3d\xac\xf2\xd3\xf7\x52\xba\x02\x1f\x24\xf8\x98\xea\x41\x97\x27\xfe\x7c\x81\xdf\x34\x53\xae\xf1\xb8\xfa\x04\xe3\xe3\xd4\x35\x9e\x66\x75\x1f\xe2\x6f\x13\xaf\x9e\x47\x6f\x9e\x7e\xe8\x68\x39\x31\xfd\x82\x66\xc6\xc7\xeb\x83\x84\xf9\x6a\x41\x7f\xe8\x6f\x00\x00\x00\xff\xff\x74\xae\x46\x0a\xe5\x02\x00\x00") - -func testImagesEntrypointTesterEpGoBytes() ([]byte, error) { - return bindataRead( - _testImagesEntrypointTesterEpGo, - "test/images/entrypoint-tester/ep.go", - ) -} - -func testImagesEntrypointTesterEpGo() (*asset, error) { - bytes, err := testImagesEntrypointTesterEpGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/entrypoint-tester/ep.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesFakegitserverDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x6f\x9b\x40\x10\x85\xef\xfb\x2b\x9e\xe0\xd2\x4a\x2e\xa4\x39\xf4\xd0\x9e\xa8\xe3\xd4\x28\x29\x44\x86\x34\xb2\xaa\x1e\xd6\x30\xc0\xa8\x78\x97\xee\x0e\xc1\xfe\xf7\x15\xb6\x23\xd5\xea\x1e\xe7\xbd\x7d\xfb\xed\x9b\x10\x4b\x3b\x1c\x1d\xb7\x9d\xe0\xf6\xe6\xe3\x27\x94\x1d\xe1\x61\xdc\x91\x33\x24\xe4\x91\x8c\xd2\x59\xe7\x23\x15\xaa\x10\x8f\x5c\x91\xf1\x54\x63\x34\x35\x39\x48\x47\x48\x06\x5d\x75\xf4\xa6\x2c\xf0\x83\x9c\x67\x6b\x70\x1b\xdd\xe0\xdd\x6c\x08\x2e\x52\xf0\xfe\x8b\x0a\x71\xb4\x23\xf6\xfa\x08\x63\x05\xa3\x27\x48\xc7\x1e\x0d\xf7\x04\x3a\x54\x34\x08\xd8\xa0\xb2\xfb\xa1\x67\x6d\x2a\xc2\xc4\xd2\x9d\x9e\xb9\x84\x44\x2a\xc4\xf6\x12\x61\x77\xa2\xd9\x40\xa3\xb2\xc3\x11\xb6\xf9\xd7\x07\x2d\x27\xe0\xf9\x74\x22\xc3\xe7\x38\x9e\xa6\x29\xd2\x27\xd8\xc8\xba\x36\xee\xcf\x46\x1f\x3f\xa6\xcb\x55\x56\xac\x3e\xdc\x46\x37\xa7\x2b\xcf\xa6\x27\xef\xe1\xe8\xcf\xc8\x8e\x6a\xec\x8e\xd0\xc3\xd0\x73\xa5\x77\x3d\xa1\xd7\x13\xac\x83\x6e\x1d\x51\x0d\xb1\x33\xef\xe4\x58\xd8\xb4\x0b\x78\xdb\xc8\xa4\x1d\xa9\x10\x35\x7b\x71\xbc\x1b\xe5\xaa\xac\x37\x3a\xf6\x57\x06\x6b\xa0\x0d\x82\xa4\x40\x5a\x04\xf8\x9a\x14\x69\xb1\x50\x21\x5e\xd2\x72\x9d\x3f\x97\x78\x49\x36\x9b\x24\x2b\xd3\x55\x81\x7c\x83\x65\x9e\xdd\xa5\x65\x9a\x67\x05\xf2\x7b\x24\xd9\x16\x0f\x69\x76\xb7\x00\xb1\x74\xe4\x40\x87\xc1\xcd\xfc\xd6\x81\xe7\x1a\xa9\x9e\x3b\x2b\x88\xae\x00\x1a\x7b\x06\xf2\x03\x55\xdc\x70\x85\x5e\x9b\x76\xd4\x2d\xa1\xb5\xaf\xe4\x0c\x9b\x16\x03\xb9\x3d\xfb\x79\x99\x1e\xda\xd4\x2a\x44\xcf\x7b\x16\x2d\xa7\xc9\x7f\x9f\x8a\x94\xba\xdf\xe4\xdf\xe1\x2b\xa7\xa5\xea\xd4\x32\x7f\xda\xe2\x5b\x5a\xae\x93\x62\x1d\xc9\x41\x10\x9f\x47\x8d\xfe\x4d\x2d\x8b\x27\xf7\x4a\x0e\xb1\x5a\x65\xe5\x66\xfb\x94\xa7\x59\x89\x9f\x41\x7c\xa5\x06\xbf\x94\xfa\x1b\x00\x00\xff\xff\x28\xa3\xd0\x01\xa0\x02\x00\x00") - -func testImagesFakegitserverDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesFakegitserverDockerfile, - "test/images/fakegitserver/Dockerfile", - ) -} - -func testImagesFakegitserverDockerfile() (*asset, error) { - bytes, err := testImagesFakegitserverDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/fakegitserver/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesFakegitserverMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xc1\x6e\xdb\x3c\x10\x84\xcf\x3f\x9f\x62\x60\xf9\x60\x03\x8e\x9c\x3f\x28\x72\x70\x91\x16\xaa\xed\xda\x42\x02\xa9\x90\x94\x04\x39\x05\xb4\xb4\x96\x16\x95\x49\x96\xa4\x22\xfb\xed\x0b\x39\x49\xd1\xa0\xbc\x71\x67\xb8\xfb\xed\x30\xc0\x52\x9b\x93\xe5\xba\xf1\xb8\xba\xfc\xff\x1a\x45\x43\xb8\xed\x76\x64\x15\x79\x72\x88\x3a\xdf\x68\xeb\x42\x11\x88\x00\x77\x5c\x92\x72\x54\xa1\x53\x15\x59\xf8\x86\x10\x19\x59\x36\xf4\xae\xcc\xf0\x40\xd6\xb1\x56\xb8\x0a\x2f\x31\x19\x0c\xa3\x37\x69\x34\xfd\x2c\x02\x9c\x74\x87\x83\x3c\x41\x69\x8f\xce\x11\x7c\xc3\x0e\x7b\x6e\x09\x74\x2c\xc9\x78\xb0\x42\xa9\x0f\xa6\x65\xa9\x4a\x42\xcf\xbe\x39\x8f\x79\x6b\x12\x8a\x00\x4f\x6f\x2d\xf4\xce\x4b\x56\x90\x28\xb5\x39\x41\xef\xff\xf6\x41\xfa\x33\xf0\x70\x1a\xef\xcd\x62\x3e\xef\xfb\x3e\x94\x67\xd8\x50\xdb\x7a\xde\xbe\x1a\xdd\xfc\x2e\x5e\xae\x93\x7c\x7d\x71\x15\x5e\x9e\x9f\xdc\xab\x96\x9c\x83\xa5\x5f\x1d\x5b\xaa\xb0\x3b\x41\x1a\xd3\x72\x29\x77\x2d\xa1\x95\x3d\xb4\x85\xac\x2d\x51\x05\xaf\x07\xde\xde\xb2\x67\x55\xcf\xe0\xf4\xde\xf7\xd2\x92\x08\x50\xb1\xf3\x96\x77\x9d\xff\x10\xd6\x3b\x1d\xbb\x0f\x06\xad\x20\x15\x46\x51\x8e\x38\x1f\xe1\x5b\x94\xc7\xf9\x4c\x04\x78\x8c\x8b\x6d\x7a\x5f\xe0\x31\xca\xb2\x28\x29\xe2\x75\x8e\x34\xc3\x32\x4d\x56\x71\x11\xa7\x49\x8e\xf4\x3b\xa2\xe4\x09\xb7\x71\xb2\x9a\x81\xd8\x37\x64\x41\x47\x63\x07\x7e\x6d\xc1\x43\x8c\x54\x0d\x99\xe5\x44\x1f\x00\xf6\xfa\x15\xc8\x19\x2a\x79\xcf\x25\x5a\xa9\xea\x4e\xd6\x84\x5a\xbf\x90\x55\xac\x6a\x18\xb2\x07\x76\xc3\x67\x3a\x48\x55\x89\x00\x2d\x1f\xd8\x4b\x7f\xae\xfc\xb3\x54\x28\x44\x9e\x2d\x73\xdc\x60\x2f\x7f\x52\xcd\xde\x91\x7d\x21\x2b\xa2\x6c\xb9\xc5\xd7\x1b\xc8\x43\x75\xfd\x49\x14\x51\xb6\x59\x17\xc3\x7d\x3c\x59\xde\x67\xab\x38\x9b\x8a\x4d\x7a\x17\x25\x9b\xe7\x87\x75\x96\xc7\x69\x32\x68\xad\xf4\xe4\xfc\xd0\xef\x79\x15\x67\x18\xcc\x4a\xfb\x8a\x2d\xc6\x13\xd7\x50\xdb\xc2\xf4\xd5\x74\x2a\xe8\x68\xb4\xf5\x42\xc4\x9b\x24\xcd\xd6\x58\xdc\xfc\xd1\x6b\xf6\xb0\xf4\x72\x61\xa4\x75\x84\xed\x3a\x5a\xe1\x0b\xc6\x93\xd7\xf1\xd3\xf9\x26\x2e\xb6\x51\xbe\x0d\xfd\xd1\x4f\x85\xd8\xb1\x5a\x88\xff\xc2\x70\xce\x07\x59\xd3\x45\xe7\xb9\x0d\x5d\x83\x1d\x2b\x8c\x27\xc3\x52\x53\x21\xc2\x1f\xdb\x34\x79\x5a\x0c\x45\xf1\x3b\x00\x00\xff\xff\x9e\x87\x9c\x0d\x34\x03\x00\x00") - -func testImagesFakegitserverMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesFakegitserverMakefile, - "test/images/fakegitserver/Makefile", - ) -} - -func testImagesFakegitserverMakefile() (*asset, error) { - bytes, err := testImagesFakegitserverMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/fakegitserver/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesFakegitserverVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesFakegitserverVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesFakegitserverVersion, - "test/images/fakegitserver/VERSION", - ) -} - -func testImagesFakegitserverVersion() (*asset, error) { - bytes, err := testImagesFakegitserverVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/fakegitserver/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesFakegitserverGitserverGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x52\xc1\x6e\xe3\x36\x14\x3c\x87\x5f\x31\xe0\xc9\x0e\x14\xc9\xcd\xa1\x28\xb6\x27\x35\x9b\xc5\x0a\x1b\xd8\x80\xe5\xad\x91\x5b\x68\xe9\x59\x7a\x08\x45\x32\x24\x15\xc5\x28\xf2\xef\x05\x65\x17\x48\x50\xec\x4d\xe2\x0c\x66\xe6\xcd\x7b\xc5\xb5\xb8\xb3\xee\xe4\xb9\xeb\x23\x6e\x57\xbf\xfd\x8e\x5d\x4f\xf8\x31\x1e\xc8\x1b\x8a\x14\x50\x8e\xb1\xb7\x3e\xe4\x42\x3c\x70\x43\x26\x50\x8b\xd1\xb4\xe4\x11\x7b\x42\xe9\x54\xd3\x13\x2e\x48\x86\xbf\xc9\x07\xb6\x06\xb7\xf9\x0a\x8b\x44\x90\x17\x48\x2e\xff\x14\x27\x3b\x62\x50\x27\x18\x1b\x31\x06\x42\xec\x39\xe0\xc8\x9a\x40\x6f\x0d\xb9\x08\x36\x68\xec\xe0\x34\x2b\xd3\x10\x26\x8e\xfd\x6c\x72\x91\xc8\xc5\xe3\x45\xc0\x1e\xa2\x62\x03\x85\xc6\xba\x13\xec\xf1\x23\x0b\x2a\x0a\x01\x00\x7d\x8c\xee\x4b\x51\x4c\xd3\x94\xab\x39\x65\x6e\x7d\x57\xe8\x33\x2b\x14\x0f\xd5\xdd\xfd\xba\xbe\xbf\xb9\xcd\x57\x42\xfc\x34\x9a\x42\x80\xa7\x97\x91\x3d\xb5\x38\x9c\xa0\x9c\xd3\xdc\xa8\x83\x26\x68\x35\xc1\x7a\xa8\xce\x13\xb5\x88\x36\xe5\x9c\x3c\x47\x36\x5d\x86\x60\x8f\x71\x52\x9e\x44\xcb\x21\x7a\x3e\x8c\xf1\x53\x41\xff\xa5\xe2\x80\x8f\x04\x6b\xa0\x0c\x64\x59\xa3\xaa\x25\xfe\x2a\xeb\xaa\xce\xc4\xbe\xda\x7d\xdf\xfc\xdc\x61\x5f\x6e\xb7\xe5\x7a\x57\xdd\xd7\xd8\x6c\x71\xb7\x59\x7f\xad\x76\xd5\x66\x5d\x63\xf3\x0d\xe5\xfa\x11\x3f\xaa\xf5\xd7\x0c\xc4\xb1\x27\x0f\x7a\x73\x3e\x65\xb7\x1e\x9c\xaa\xa3\x36\x17\x35\xd1\x27\xf3\xa3\x3d\x87\x09\x8e\x1a\x3e\x72\x03\xad\x4c\x37\xaa\x8e\xd0\xd9\x57\xf2\x86\x4d\x07\x47\x7e\xe0\x90\x96\x17\xa0\x4c\x2b\x34\x0f\x1c\x55\x9c\xff\xff\x37\x4e\x2e\xae\x0b\x21\x9c\x6a\x9e\x93\xc8\xa0\xd8\x08\xc1\x83\xb3\x3e\x62\x21\xae\x24\x5b\x29\xae\xa4\xa1\x58\xa4\x25\x48\xb1\x14\xe2\x38\x9a\x06\x3d\x69\x6d\x17\xd3\xbc\x9a\x7c\x4b\xc1\x59\x13\x68\xef\x39\x92\xcf\xe0\x71\x7d\x79\x7f\x19\x29\xc4\x25\xfe\x11\x57\x6c\xf3\x19\xae\xa3\x67\xd3\x2d\xa6\x0c\xb2\x82\x1a\xa0\x70\x54\xcf\x84\x8e\x23\x02\xf9\x57\xf2\x72\x29\xc4\xbb\x10\x45\x81\x7d\x4f\x06\xad\x4d\x23\x3d\x25\xbc\xd1\xd6\x10\xb4\x6d\x94\xee\x6d\x88\x5f\xfe\x58\xad\x56\x4f\x19\xd2\x2d\x4e\xac\xf5\x05\x57\x06\x34\xb8\x78\x9a\x25\x3d\x39\x0b\xa3\x06\x6a\x21\x13\x5d\xa6\x75\xcd\x0a\x79\x72\x48\x57\xd8\x28\x03\xa5\x83\x9d\xef\xf8\x97\x3e\x18\x4e\x37\x49\xec\x26\x89\x3d\xa5\xcb\xf1\x94\x3e\x11\x7b\x75\xb6\xc9\xcf\xc5\xa4\x06\x17\xf3\xc4\x73\x05\xdf\x95\x69\x35\x7d\x1b\x4d\xb3\x90\x85\xcc\xce\xbd\x2d\x2f\xe0\x03\x87\x48\xa6\x34\x6d\x9d\x26\x5f\xc8\xd9\x49\x66\x30\xac\x97\xe2\x5d\xfc\x1b\x00\x00\xff\xff\x68\x0f\xa2\xe1\xd0\x03\x00\x00") - -func testImagesFakegitserverGitserverGoBytes() ([]byte, error) { - return bindataRead( - _testImagesFakegitserverGitserverGo, - "test/images/fakegitserver/gitserver.go", - ) -} - -func testImagesFakegitserverGitserverGo() (*asset, error) { - bytes, err := testImagesFakegitserverGitserverGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/fakegitserver/gitserver.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesHostexecBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x0a\x10\x00\x00\xff\xff\xe5\x8d\xa8\xc0\x5c\x00\x00\x00") - -func testImagesHostexecBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesHostexecBaseimage, - "test/images/hostexec/BASEIMAGE", - ) -} - -func testImagesHostexecBaseimage() (*asset, error) { - bytes, err := testImagesHostexecBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/hostexec/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesHostexecDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x41\x6f\xe3\x36\x10\x85\xef\xfc\x15\x0f\x16\xb0\x68\x0b\xcb\xca\xfa\xd0\x83\xf7\xa4\xb5\xbd\x5d\x61\x63\x69\x6b\xd9\x0d\x72\x0a\x68\x6a\x2c\x11\x91\x49\x86\x1c\x45\xf1\xbf\x2f\x68\x3b\x45\x83\xd5\x4d\xe4\x9b\xc7\x6f\xde\x4c\x82\xa5\x75\x67\xaf\xdb\x8e\x31\xbf\xfb\xfc\x27\x76\x1d\xe1\xc7\x70\x20\x6f\x88\x29\x20\x1f\xb8\xb3\x3e\xcc\x44\x22\x12\xdc\x6b\x45\x26\x50\x83\xc1\x34\xe4\xc1\x1d\x21\x77\x52\x75\xf4\x7e\x33\xc5\x3f\xe4\x83\xb6\x06\xf3\xd9\x1d\x7e\x8b\x82\xc9\xed\x6a\xf2\xfb\x17\x91\xe0\x6c\x07\x9c\xe4\x19\xc6\x32\x86\x40\xe0\x4e\x07\x1c\x75\x4f\xa0\x37\x45\x8e\xa1\x0d\x94\x3d\xb9\x5e\x4b\xa3\x08\xa3\xe6\xee\xf2\xcc\xcd\x64\x26\x12\x3c\xde\x2c\xec\x81\xa5\x36\x90\x50\xd6\x9d\x61\x8f\xff\xd7\x41\xf2\x05\x38\x7e\x1d\xb3\x5b\x64\xd9\x38\x8e\x33\x79\x81\x9d\x59\xdf\x66\xfd\x55\x18\xb2\xfb\x62\xb9\x2e\xeb\x75\x3a\x9f\xdd\x5d\x4a\xf6\xa6\xa7\x10\xe0\xe9\x65\xd0\x9e\x1a\x1c\xce\x90\xce\xf5\x5a\xc9\x43\x4f\xe8\xe5\x08\xeb\x21\x5b\x4f\xd4\x80\x6d\xe4\x1d\xbd\x66\x6d\xda\x29\x82\x3d\xf2\x28\x3d\x89\x04\x8d\x0e\xec\xf5\x61\xe0\x0f\x61\xbd\xd3\xe9\xf0\x41\x60\x0d\xa4\xc1\x24\xaf\x51\xd4\x13\x7c\xcd\xeb\xa2\x9e\x8a\x04\x0f\xc5\xee\x7b\xb5\xdf\xe1\x21\xdf\x6e\xf3\x72\x57\xac\x6b\x54\x5b\x2c\xab\x72\x55\xec\x8a\xaa\xac\x51\x7d\x43\x5e\x3e\xe2\x47\x51\xae\xa6\x20\xcd\x1d\x79\xd0\x9b\xf3\x91\xdf\x7a\xe8\x18\x23\x35\x31\xb3\x9a\xe8\x03\xc0\xd1\x5e\x81\x82\x23\xa5\x8f\x5a\xa1\x97\xa6\x1d\x64\x4b\x68\xed\x2b\x79\xa3\x4d\x0b\x47\xfe\xa4\x43\x1c\x66\x80\x34\x8d\x48\xd0\xeb\x93\x66\xc9\x97\x93\x5f\x9a\x9a\x09\xf1\x6d\x5b\x6d\x22\xfe\xba\xd8\xe4\x7f\xad\x85\x58\x6e\xab\xba\x7e\xfa\xba\x2f\xee\x57\x4f\xcb\xea\xe7\x23\x5e\xe8\x34\xa4\x7f\xaf\x37\xfb\x7c\xbb\xfc\x9e\x86\xe8\xa5\x90\x0d\xc1\x67\x07\x6d\x32\x21\x12\x68\x13\x58\xf6\x3d\x0c\x29\x0a\x41\xfa\x33\x9c\x54\xcf\xb2\xa5\xb0\x10\x09\x52\xa8\xc1\xf7\x53\x18\xb5\x88\xdb\x73\x1d\x0e\x7a\xcb\x71\xfc\x34\x27\x30\x05\x0e\x17\xa1\x76\xde\x0e\x4c\xf3\x05\xb4\x51\xfd\xd0\x50\x40\x08\xd7\x22\x6d\x50\xda\x86\x7e\x5a\xcf\xb7\x82\xed\xbe\x84\x74\xcf\x48\xd3\xc1\x35\x92\x09\xb2\x69\x2e\x4f\xc1\x10\x2b\xc9\xa9\x75\x64\x0e\xa1\xf9\xcf\x15\x9f\x3e\xc1\x9f\x90\xfa\x23\xb2\x57\xe9\x33\x15\xf7\x2a\x93\xee\x39\xfb\x23\x76\x31\x4a\xcd\x31\x63\x7a\x25\x2f\x96\x9b\x15\xc6\x2e\xae\x38\xfb\x81\xbe\xa0\xb1\x08\x3d\x91\xc3\xe7\x26\xfe\x18\x12\xff\x06\x00\x00\xff\xff\x98\x3a\x7a\x1b\x84\x03\x00\x00") - -func testImagesHostexecDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesHostexecDockerfile, - "test/images/hostexec/Dockerfile", - ) -} - -func testImagesHostexecDockerfile() (*asset, error) { - bytes, err := testImagesHostexecDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/hostexec/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesHostexecVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") - -func testImagesHostexecVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesHostexecVersion, - "test/images/hostexec/VERSION", - ) -} - -func testImagesHostexecVersion() (*asset, error) { - bytes, err := testImagesHostexecVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/hostexec/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesHostexecPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8e\xbd\x8a\xc3\x30\x10\x84\x7b\x3d\xc5\xbe\x80\x6c\x7c\x1c\x57\xa8\xbd\x3e\xa4\x4a\xbf\x96\x06\x47\xd8\xfa\x41\xbb\x4e\x9c\xb7\x0f\x76\x08\x04\xd2\xce\xf7\xcd\x30\x5c\xe3\x05\x4d\x62\xc9\x8e\x6e\x83\x99\x63\x0e\x8e\xce\x25\x98\x04\xe5\xc0\xca\xce\x10\x65\x4e\x70\x74\x2d\xa2\xd8\xe0\x0d\xd1\xc2\x23\x16\xd9\x11\x11\xd7\xfa\xc1\xa4\xc2\xef\xb9\x2f\x59\x39\x66\xb4\xc3\xb2\xdf\x13\x44\x31\xf1\x04\x47\x93\x6f\x5d\x2c\xfd\xbc\x8e\x68\x19\x0a\xb1\xf8\x81\x55\x88\xda\xc3\x90\xfe\xdd\xb2\x9c\xc2\xdf\xaf\x1b\xba\xc1\x10\x09\xfc\xda\xa2\x3e\xfe\x4b\x56\x6c\xfa\xfa\xb2\x9b\x27\xe8\xbd\xb4\xd9\x91\xb6\x15\xe6\x19\x00\x00\xff\xff\x7e\x32\xd2\xed\xe0\x00\x00\x00") - -func testImagesHostexecPodYamlBytes() ([]byte, error) { - return bindataRead( - _testImagesHostexecPodYaml, - "test/images/hostexec/pod.yaml", - ) -} - -func testImagesHostexecPodYaml() (*asset, error) { - bytes, err := testImagesHostexecPodYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/hostexec/pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesImageUtilSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x58\xdd\x53\xe3\xb6\x16\x7f\xf7\x5f\x71\xea\x78\x16\xd2\xc1\x36\xbb\x6d\xb7\xdb\x6c\x33\xd3\x10\x72\x69\x66\x81\xf4\x26\xd9\x7e\xb1\xdc\x8c\x62\x2b\xb6\x6e\x6c\xc9\x95\x64\x02\x0d\xe9\xdf\x7e\xe7\x48\xb6\x93\x40\x68\xf7\xe9\xf2\x00\xb6\x75\x3e\x7f\xe7\x53\xb4\xbe\x08\x4b\x25\xc3\x39\xe3\x21\xe5\x77\x30\x27\x2a\x75\x9c\x16\xf4\x45\xf1\x20\x59\x92\x6a\x78\x73\xfa\xfa\x5b\x98\xa6\x14\x3e\x94\x73\x2a\x39\xd5\x54\x41\xaf\xd4\xa9\x90\x2a\x70\x5a\x4e\x0b\x2e\x59\x44\xb9\xa2\x31\x94\x3c\xa6\x12\x74\x4a\xa1\x57\x90\x28\xa5\xf5\xc9\x09\xfc\x4c\xa5\x62\x82\xc3\x9b\xe0\x14\x8e\x91\xc0\xad\x8e\xdc\xf6\x7b\xa7\x05\x0f\xa2\x84\x9c\x3c\x00\x17\x1a\x4a\x45\x41\xa7\x4c\xc1\x82\x65\x14\xe8\x7d\x44\x0b\x0d\x8c\x43\x24\xf2\x22\x63\x84\x47\x14\x56\x4c\xa7\x46\x4d\x25\x24\x70\x5a\xf0\x5b\x25\x42\xcc\x35\x61\x1c\x08\x44\xa2\x78\x00\xb1\xd8\xa5\x03\xa2\x8d\xc1\xf8\x93\x6a\x5d\x74\xc2\x70\xb5\x5a\x05\xc4\x18\x1b\x08\x99\x84\x99\x25\x54\xe1\xe5\xb0\x3f\xb8\x9e\x0c\xfc\x37\xc1\xa9\x61\xf9\xc8\x33\xaa\x14\x48\xfa\x47\xc9\x24\x8d\x61\xfe\x00\xa4\x28\x32\x16\x91\x79\x46\x21\x23\x2b\x10\x12\x48\x22\x29\x8d\x41\x0b\xb4\x77\x25\x99\x66\x3c\x39\x01\x25\x16\x7a\x45\x24\x75\x5a\x10\x33\xa5\x25\x9b\x97\x7a\x0f\xac\xda\x3a\xa6\xf6\x08\x04\x07\xc2\xc1\xed\x4d\x60\x38\x71\xe1\xac\x37\x19\x4e\x4e\x9c\x16\xfc\x32\x9c\xfe\x38\xfa\x38\x85\x5f\x7a\xe3\x71\xef\x7a\x3a\x1c\x4c\x60\x34\x86\xfe\xe8\xfa\x7c\x38\x1d\x8e\xae\x27\x30\xfa\x17\xf4\xae\x7f\x83\x0f\xc3\xeb\xf3\x13\xa0\x4c\xa7\x54\x02\xbd\x2f\x24\xda\x2f\x24\x30\x84\x91\xc6\x88\xd9\x84\xd2\x3d\x03\x16\xc2\x1a\xa4\x0a\x1a\xb1\x05\x8b\x20\x23\x3c\x29\x49\x42\x21\x11\x77\x54\x72\xc6\x13\x28\xa8\xcc\x99\xc2\x60\x2a\x20\x3c\x76\x5a\x90\xb1\x9c\x69\xa2\xcd\x97\x67\x4e\x05\x8e\xa3\xa8\x06\x5f\x00\x95\x92\xde\x33\x5d\xbf\x72\x51\x72\x45\x9b\xd7\x82\x15\x74\x41\x58\xe6\x38\xd3\xde\xe4\x43\xd7\x7b\xed\x0c\xaf\x7a\x17\x83\xae\xf7\xc6\x71\x3e\x7c\x3c\x1b\xcc\xc6\xa3\xd1\xb4\xeb\x7a\xc7\x51\x0c\xae\x77\x1c\x33\xc9\x49\x4e\xc1\xf5\xd6\x67\xbd\xc9\x8f\xb3\xc9\xe8\xe3\xb8\x3f\xd8\xb8\xed\x30\x08\xc2\x20\x70\xe1\xd5\x2b\x28\x56\x31\xf8\x3f\xb5\x5d\x47\x89\x52\x46\x86\xb6\x91\xb4\x09\x53\x12\x2d\xc3\x8c\xcd\xc3\x52\xb3\x2c\x50\xa9\x8b\x49\x7f\x45\x8a\x02\x9d\x14\x0b\x48\x04\xf4\xc6\xfd\x1f\x31\x98\x24\xd2\x25\xc9\x80\xc8\x28\x65\x9a\x46\xba\x94\x54\x81\x4a\x59\x51\xd0\x18\x0a\x22\x35\xd2\xe7\x65\xa6\x19\x92\x84\x7f\xd0\xbc\xf4\x4b\x45\xa5\xaf\x10\x96\x08\x0a\x29\xfe\x4b\x23\xed\xc4\x34\xca\x88\xa4\xe0\xf7\xe0\xdf\x83\xab\x8f\x28\x7e\xd2\x3d\x86\x1b\x97\xe4\xf1\xdb\xaf\xdd\xdb\xae\x7b\xff\xee\xed\xec\xed\xd7\x2e\x7e\x92\x39\x7e\xc0\x3f\xf6\xcd\x12\x10\xd4\x60\x29\x8a\x22\x7a\xfb\x75\x46\xf1\x6b\xfd\x08\x37\xae\xfa\xea\xbb\xd3\x7b\xfc\x66\x1f\xa0\x8d\x6e\x8d\xa9\x2e\x25\x57\x90\x31\x65\x6c\x25\x59\x06\xaa\x2c\x0a\x21\x31\xcf\xf6\xfd\x5a\x48\x91\x63\xb2\x0d\x0c\xfe\xa6\x08\x1d\xe4\xeb\xc9\x28\x55\xc7\x6d\x58\x3b\x00\x51\xa9\xc1\x8f\xc1\xed\xba\xe0\x2f\xe0\x35\x78\x6b\x43\xbc\x09\x1b\x3e\x67\xb3\xab\x77\x4e\x14\x65\x39\xe6\x11\xaf\xea\xa3\xc4\x76\xc1\x38\x9c\x8b\x68\x49\xa5\xa9\x74\x4c\x3e\xc2\x1f\x20\x61\x77\x94\xef\x19\xe5\x24\x54\x9f\x11\x45\x87\x28\xa2\x32\x01\xcf\x31\x4b\x00\x68\x94\x0a\xf0\x8e\x13\x49\x0b\x0c\x31\x1e\x6c\xba\xee\x8e\x0b\x8f\x95\xbd\x5d\xf0\x17\x6f\xda\xd6\xb2\xa9\x69\x30\x25\x8f\x30\x6d\x61\xc5\xb2\x0c\xe6\x25\xcb\x62\xd0\x54\x69\xb0\xb6\x1a\x83\xb2\xcc\x64\xf3\x1e\x46\x4e\x0b\x72\xca\x91\xd3\x3a\xb1\x8f\x56\x00\x43\x6e\x79\xe6\x8a\x62\xb7\x12\x8b\x27\x14\x58\xc5\x4c\xef\x6a\xdd\x55\xb5\x1f\x18\x1b\x33\x1f\x4c\x8a\x9c\x00\x91\x39\x72\x9b\x7c\x38\x81\x2a\xee\x27\x60\x82\xed\x18\x59\x15\x3e\x6c\x01\x37\x37\x18\x9d\xe7\xb1\x81\xdb\xdb\xf7\xa8\x89\x3b\xd8\x07\x51\x89\xea\x7a\xc7\x4d\x8c\xdb\x88\x69\xa6\xe8\xee\xe9\xfa\x8b\x26\x61\x6f\x7e\xb8\xdd\x38\x00\x0b\xe6\x38\x00\xcb\x72\x4e\x3b\x1d\xac\xa0\x4e\x87\x72\x55\x4a\xea\x27\xbc\xf4\x15\x8d\xf1\xd4\x78\x85\x3e\x30\x0e\x36\x30\x6a\xf3\x1e\x62\x61\x24\x9b\xb0\xb9\x67\x68\x32\x56\xdc\x16\xf2\xda\x60\x53\x7e\x9d\x8a\x71\x13\x04\x81\xeb\x18\xc6\x16\xf4\x25\x25\x9a\x02\x01\x4d\xf3\x42\x48\x22\x1f\x20\x66\x92\x46\x5a\xc8\x07\x23\x82\xde\x51\xf9\xb0\x17\x33\x6c\x55\x76\x22\x20\xc4\x56\x59\x24\xb8\xa6\x5c\x57\x42\x91\xa0\x4a\x81\x86\xc2\xd4\xc2\x01\x25\x86\x25\x5f\xc6\x4c\x82\x5f\xc0\x5e\x5b\x99\xe9\xbc\x30\xc7\xc8\x36\x8b\x99\xec\x7a\xc7\xf9\x12\x5f\xb0\x62\x9e\x91\x86\x98\x6f\xbe\xd1\xa6\x7c\xa3\x3e\xf8\xd5\xfc\xb4\x8d\x90\x5d\x7c\xb5\x24\xc5\x8c\xc4\x31\xb8\x32\x07\x5f\x62\x64\x6b\x1d\x1b\x17\x06\xbf\x0e\xa7\x16\x9f\xa8\x00\x7f\x8b\x62\xf8\xe5\x2e\x9d\x21\x78\x9e\x1a\x57\x64\x49\x4d\x0d\xee\x65\x06\xa2\x92\x93\x25\x85\x39\xab\x4a\x44\xe3\x5b\x84\x2d\xac\x6a\x22\x08\x55\x21\xa9\x99\x8a\x8a\xe1\x62\x80\x05\x4e\xe3\x86\x1f\xa3\x31\xaf\x63\x8c\xd4\xb1\x29\x78\x8b\x6f\x45\x65\x74\xf8\xfd\x6d\xe0\x51\x1f\x06\xbf\x5b\xc5\x1e\xa6\xbd\xf1\xc5\x60\xda\x7d\xea\xc8\x82\x99\x3f\x45\xa9\xd2\xf8\x99\x97\xad\x2a\x86\x9a\x24\xe6\x7d\xda\xbb\xe8\x7a\xc7\xdf\xff\x3c\x18\x4f\x86\xa3\xeb\xb6\xb3\x0f\xc5\x0b\xc5\x01\xdb\x83\xae\x77\xbc\xdb\x86\xea\xbc\x6c\x57\x74\xde\x7a\x32\x38\xdf\x80\xcf\xc0\x55\x8f\x0d\xd3\xa3\x19\x4f\xf6\x79\xf3\x98\xb8\x3b\xfd\xee\x25\x3e\x74\xfc\xb1\x12\x7e\x80\xc3\xd6\x1d\xba\xd7\x64\xb3\x99\x37\x5f\xd6\xc3\x66\xce\x38\xe6\xaa\x16\x7b\x50\xe3\xfb\x36\xbb\xcd\xac\xda\xaf\x0f\x4b\x25\x38\xdc\xbf\x7b\x0b\x45\x46\xf4\x42\xc8\x7c\x07\xa3\xba\xc1\xf6\xc7\xa3\xc9\x64\x76\xf6\x71\x78\x79\x3e\xdb\x35\xae\xfd\x14\x38\xcb\x56\x37\x64\x17\xba\x5d\xa8\xe6\xdc\x53\xca\x3d\x10\xc2\x5d\x05\x61\x7c\x00\xb1\xa6\x37\x3d\x83\xaf\xee\x51\x8f\xde\x7a\xdb\xae\x3c\xd4\x7f\x7b\x18\x7c\x84\x71\x4c\x13\xa6\x34\x95\x4f\x60\xac\x3b\xf2\xb6\x1b\x17\x52\x44\x54\x29\x21\x55\xbd\x94\x22\x94\x51\x29\x25\xe5\x1a\x04\xdf\x0a\xb5\xad\xad\x16\x8c\x99\x7f\x20\x44\x8c\x2a\xec\x8b\x28\x63\x89\x5b\x75\xe6\x36\xfc\x99\x88\x08\x6a\x8e\x45\xd7\xdd\x7e\xad\xe3\xc0\x62\xf0\xcb\x36\x7c\xd1\x85\xd3\xe7\x48\x82\x65\xc3\x5f\xcd\xb7\xaa\x4c\xf0\xc7\xf5\xd6\x78\xb4\x71\x9f\x2c\x43\x3a\x65\x32\x9e\xe1\x2a\xf3\x10\xbe\xbc\xc8\x84\xb2\x72\xa9\x79\xc0\xbd\x09\x7c\x5f\x52\xdc\xe4\x6a\x25\x51\x29\x33\xf0\xd5\xe4\xd2\xec\xd8\xaa\x13\x86\x09\xd3\x69\x39\x0f\x22\x91\xff\xbd\xf4\x8c\x12\xdc\xbd\x63\xb1\xe2\x99\x20\x71\x68\xe3\x58\x95\xec\x26\xb4\xdb\xd1\xcc\x30\x1e\x08\x71\x25\x27\xd0\x44\x06\xc9\x9f\xf0\x08\x9a\x48\xf0\xef\xff\xb4\xbd\x65\xbf\x3b\xd8\xd8\x0f\xcc\xc8\x82\x15\xb6\x25\x7e\xa4\x21\xa1\x1a\x54\x29\x0b\xc9\x94\x5d\xf1\xcb\x9c\xa8\x25\x28\xaa\x71\x93\x57\x5b\x0f\xd3\x5c\xc4\x70\xfa\xed\x37\xdf\x20\x8e\x8d\xe4\xf0\x1f\x2c\x73\x0f\xa6\xed\x7e\xc6\x87\x87\xf2\xb4\x8a\x60\x5d\xfb\x55\x61\xdb\x7a\xf6\xfd\xa2\xcc\x32\xf0\x35\x78\xeb\xf1\xe0\x62\x38\x99\x8e\x7f\xdb\x84\x75\x2f\xf5\xab\xfa\xeb\x78\xeb\x69\xef\x62\x03\x81\x95\x50\x88\x02\x7b\x74\x8c\x59\xbb\x71\x1c\x2b\x70\x76\x67\x2f\x69\xb3\x28\xa5\xd1\xb2\xda\x23\x5a\xe6\xe6\x27\x29\x51\x82\x57\xf7\x03\xa6\xa0\xa2\x04\x43\x89\xf7\x16\x8a\x3b\x9b\x4e\x45\x99\xa4\xe0\x56\xf6\xe5\x84\xb3\x05\x55\xda\xc5\xab\x5b\x8e\xf3\x95\x29\x20\x77\x84\x65\xe6\xce\xc4\x38\xbc\x7e\x17\x9c\x7e\x75\x82\xbb\x50\x2c\xa8\x32\xda\xf0\x06\xb8\x12\x72\x89\xe5\x56\x50\x99\x3d\xd8\x22\x21\xba\xd6\x19\xc0\x44\x60\xc4\x18\x57\x66\x9b\xb5\x52\xde\x06\xa7\x78\xb7\x49\x59\x92\x52\x19\x38\x35\x46\xb5\x4b\x5d\xef\xb8\x32\xaa\xb6\xdc\xf7\xb1\xc1\x11\x0d\x47\xeb\x75\xd0\xcf\x18\xe5\x3a\xa8\x2e\xa9\x9b\xcd\x51\xb3\x33\xba\x3e\xae\xb8\xaf\xdb\xcd\x46\xe5\xad\xf7\x25\x6f\xb0\x10\x6b\x0b\x5e\xbd\x3a\x70\xfe\x7d\x73\xbc\x57\xad\xb6\x49\x5c\x31\xce\xf2\x32\x87\x27\xd6\xd5\x1c\x6c\xe7\xc6\x89\xe0\x47\xb8\xf9\x60\x43\x41\x34\x71\xee\xe1\x73\x8d\xb3\xed\xe1\xea\x66\x21\x4a\x1e\x77\x9e\x5b\x72\x6b\xf3\x0f\x2f\x61\xf0\xda\xae\x70\x2f\xed\xc2\x28\xfa\xd9\xb8\x56\x0e\x7e\xae\xf2\xe2\x50\xca\x38\xcd\x94\x6d\x36\x8b\x66\xdc\xfe\x5f\x36\xd2\x7f\x58\x39\x2b\x67\x8c\x73\x9f\x51\x2c\x75\x81\xfc\xe3\x9e\x6b\x6b\xa4\x09\xc3\x4e\xb6\x2b\x8d\x68\xd2\xfb\x82\x4a\x86\x57\x06\xbc\x45\x2a\x5c\x9e\x6c\x89\x9b\x38\x7f\x17\xbc\x41\xff\xee\x71\xcc\xc0\xf9\xa8\xff\x61\x30\x9e\xf5\x2f\x87\xb3\xc1\xaf\x3f\x0d\xc6\xc3\xab\xc1\xf5\xb4\x77\xd9\x75\x29\xc7\xa2\x89\x5d\xa3\x0e\xf7\x35\x0b\x84\xbd\x1e\x30\xae\x45\x35\xc1\x6b\x2b\x02\x18\x24\x1d\x38\x32\x13\xb7\xbe\x27\x1c\xe1\x16\x70\x74\xd0\x73\x43\x57\x37\x89\x83\x14\x95\x8c\x8a\xe6\xc8\x81\x46\x55\xd7\x3b\xb6\x77\x30\x6b\xd1\x63\xd3\xdd\x28\xb8\xea\xaf\x9b\xff\xc0\xed\x97\x7f\x79\xb5\xc4\x4f\xa1\x67\x04\x7e\xf2\x5f\x75\xbc\x69\xef\xe2\xaf\xc4\x6d\x37\xe9\xb4\x83\xa1\x5d\xf1\x7d\x9f\xe4\x94\xc7\x07\x2d\xda\x5a\x5b\x73\x6d\x3e\x33\x01\x1a\x2d\x84\x73\xa1\x2b\x3d\xc8\x53\xef\x9b\x7f\xaf\xee\xb3\x13\xe7\xb9\x42\x93\x7a\xd8\xb1\xa5\xd9\x20\x5f\xd4\x72\xa8\x30\xf1\xf9\xe9\x36\x9d\x08\x88\x44\x4c\x9d\x39\xe3\x55\x5d\x22\xc9\x64\xdc\x37\xee\xff\xf0\xde\x98\xb0\xb5\x43\x96\xd8\xf8\xf0\xfa\xc0\x34\xf8\x77\x80\xca\x70\xb3\xb6\x6a\xed\xd3\xef\xf6\x60\xbb\x1c\x74\xc2\x44\x84\x4a\x46\xe1\xf2\x9d\x0a\x98\x08\x97\xcd\x7f\x01\x3b\xbf\xc3\xa7\x66\xa4\x25\x22\x23\x3c\xe9\x78\xeb\x8b\xd1\x65\xef\xfa\x62\x56\x4f\xed\x1d\x12\xf3\x3f\xc6\x39\x41\x08\x22\x70\x3f\xed\x2c\x2d\xd5\x58\x8d\xe1\x45\x5d\xe6\xa2\x14\xda\x3e\x14\x7a\xeb\xc9\xb8\x3f\x3b\x1f\x8e\x37\xd8\x72\x9f\x0b\xea\x5f\x8c\x66\x83\xeb\xde\xd9\xe5\xe0\xbc\x7b\x0a\x17\xa3\xde\xf8\xaa\x8b\x86\xf5\xc6\x57\x1b\xf3\x6a\xee\x16\xf8\x67\x83\x10\x56\x83\x94\x80\xcf\xb8\xd2\x24\xcb\x54\xb9\x58\xb0\x7b\x88\x12\x01\xbe\x9f\xc5\x8b\x8c\x24\x0a\x8e\xfc\xd5\x11\xf8\x62\x0b\x9a\x35\x63\x03\x41\xb8\xfd\x7f\x94\xfd\xd4\x76\x77\x86\xab\x4a\xd9\x42\x3b\x0e\xbd\x23\x99\xe1\x9d\x7c\xd8\x80\xeb\xfd\xe0\x3a\xff\x0b\x00\x00\xff\xff\xc3\x61\x59\xff\x79\x15\x00\x00") - -func testImagesImageUtilShBytes() ([]byte, error) { - return bindataRead( - _testImagesImageUtilSh, - "test/images/image-util.sh", - ) -} - -func testImagesImageUtilSh() (*asset, error) { - bytes, err := testImagesImageUtilShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/image-util.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesIpcUtilsBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x0a\x10\x00\x00\xff\xff\xe5\x8d\xa8\xc0\x5c\x00\x00\x00") - -func testImagesIpcUtilsBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesIpcUtilsBaseimage, - "test/images/ipc-utils/BASEIMAGE", - ) -} - -func testImagesIpcUtilsBaseimage() (*asset, error) { - bytes, err := testImagesIpcUtilsBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/ipc-utils/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesIpcUtilsDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x4f\x6f\x9c\x3c\x18\xc4\xef\xfe\x14\xa3\xe5\xf2\xbe\xd2\x02\x69\x4e\x55\x7b\x22\x9b\x4d\x83\x92\x40\x0b\xbb\x8d\x72\x8a\x0c\x3c\x0b\x8f\xca\xda\x8e\xff\x94\xec\xb7\xaf\x20\x89\xd4\x55\x7d\xf4\x8c\xc7\x3f\x8f\x9f\x08\x1b\x6d\x4e\x96\xfb\xc1\xe3\xf2\xe2\xd3\x67\xec\x06\xc2\x5d\x68\xc8\x2a\xf2\xe4\x90\x05\x3f\x68\xeb\x12\x11\x89\x08\xf7\xdc\x92\x72\xd4\x21\xa8\x8e\x2c\xfc\x40\xc8\x8c\x6c\x07\xfa\x50\xd6\xf8\x49\xd6\xb1\x56\xb8\x4c\x2e\xf0\xdf\x6c\x58\xbd\x4b\xab\xff\xbf\x8a\x08\x27\x1d\x70\x94\x27\x28\xed\x11\x1c\xc1\x0f\xec\x70\xe0\x91\x40\xaf\x2d\x19\x0f\x56\x68\xf5\xd1\x8c\x2c\x55\x4b\x98\xd8\x0f\xcb\x35\xef\x21\x89\x88\xf0\xf4\x1e\xa1\x1b\x2f\x59\x41\xa2\xd5\xe6\x04\x7d\xf8\xdb\x07\xe9\x17\xe0\x79\x0d\xde\x9b\x2f\x69\x3a\x4d\x53\x22\x17\xd8\x44\xdb\x3e\x1d\xdf\x8c\x2e\xbd\xcf\x37\xdb\xa2\xde\xc6\x97\xc9\xc5\x72\x64\xaf\x46\x72\x0e\x96\x5e\x02\x5b\xea\xd0\x9c\x20\x8d\x19\xb9\x95\xcd\x48\x18\xe5\x04\x6d\x21\x7b\x4b\xd4\xc1\xeb\x99\x77\xb2\xec\x59\xf5\x6b\x38\x7d\xf0\x93\xb4\x24\x22\x74\xec\xbc\xe5\x26\xf8\xb3\xb2\x3e\xe8\xd8\x9d\x19\xb4\x82\x54\x58\x65\x35\xf2\x7a\x85\xab\xac\xce\xeb\xb5\x88\xf0\x98\xef\x6e\xcb\xfd\x0e\x8f\x59\x55\x65\xc5\x2e\xdf\xd6\x28\x2b\x6c\xca\xe2\x3a\xdf\xe5\x65\x51\xa3\xbc\x41\x56\x3c\xe1\x2e\x2f\xae\xd7\x20\xf6\x03\x59\xd0\xab\xb1\x33\xbf\xb6\xe0\xb9\x46\xea\xe6\xce\x6a\xa2\x33\x80\x83\x7e\x03\x72\x86\x5a\x3e\x70\x8b\x51\xaa\x3e\xc8\x9e\xd0\xeb\xdf\x64\x15\xab\x1e\x86\xec\x91\xdd\xfc\x99\x0e\x52\x75\x22\xc2\xc8\x47\xf6\xd2\x2f\x3b\xff\x3c\x2a\x11\xe2\xa6\x2a\x1f\x66\xfc\x6d\xfe\x90\x7d\xdb\x0a\xb1\xa9\xca\xba\x7e\xbe\xda\xe7\xf7\xd7\xcf\x9b\xf2\xfb\x13\x5e\xe8\x18\xe2\x1f\xdb\x87\x7d\x56\x6d\x6e\x63\x37\x67\xb5\x48\x83\xb3\x69\xc3\x2a\x15\xa2\xda\x17\x90\xe6\x17\x64\xd7\x21\x8e\x95\x8e\xdb\x65\xb8\x82\xe7\x31\x1e\x59\x85\x57\xf1\x27\x00\x00\xff\xff\xb0\xef\xe6\x73\xaf\x02\x00\x00") - -func testImagesIpcUtilsDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesIpcUtilsDockerfile, - "test/images/ipc-utils/Dockerfile", - ) -} - -func testImagesIpcUtilsDockerfile() (*asset, error) { - bytes, err := testImagesIpcUtilsDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/ipc-utils/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesIpcUtilsVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesIpcUtilsVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesIpcUtilsVersion, - "test/images/ipc-utils/VERSION", - ) -} - -func testImagesIpcUtilsVersion() (*asset, error) { - bytes, err := testImagesIpcUtilsVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/ipc-utils/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesIperfBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\xcd\xb6\x28\xd6\x4b\x4f\x2e\xd2\xcb\xcc\xd7\x2f\x4d\x2a\xcd\x2b\x29\xd5\x2d\xce\xc9\xcc\xb5\x32\xd0\x33\x34\xe2\x4a\x2c\xca\xc5\x21\xaf\x9b\x58\x84\x50\x83\xd3\x14\x5d\xb0\x24\x44\x5d\x41\x41\xb2\x99\x49\x4e\x2a\x2e\x95\x50\x69\x88\x5a\x40\x00\x00\x00\xff\xff\x38\x2f\x95\x58\x9a\x00\x00\x00") - -func testImagesIperfBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesIperfBaseimage, - "test/images/iperf/BASEIMAGE", - ) -} - -func testImagesIperfBaseimage() (*asset, error) { - bytes, err := testImagesIperfBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/iperf/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesIperfDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x91\x51\x4f\xdc\x3a\x10\x85\xdf\xfd\x2b\x8e\x36\x12\xba\xf7\x6a\xb3\xe1\xf2\xd0\x87\xf6\x29\x2c\x4b\x89\x80\x4d\xbb\xd9\x2d\x42\xaa\x84\x9c\x64\x36\x19\xc9\xb1\x8d\xed\x10\xf6\xdf\x57\x09\x4b\x01\xb5\x7e\x9b\x33\x67\x8e\x3f\x8f\x23\x2c\x8d\x3d\x38\x6e\xda\x80\xb3\xd3\xff\x3f\x61\xdb\x12\xae\xfb\x92\x9c\xa6\x40\x1e\x69\x1f\x5a\xe3\xfc\x42\x44\x22\xc2\x0d\x57\xa4\x3d\xd5\xe8\x75\x4d\x0e\xa1\x25\xa4\x56\x56\x2d\xbd\x76\xe6\xf8\x41\xce\xb3\xd1\x38\x5b\x9c\xe2\x9f\xd1\x30\x3b\xb6\x66\xff\x7e\x11\x11\x0e\xa6\x47\x27\x0f\xd0\x26\xa0\xf7\x84\xd0\xb2\xc7\x9e\x15\x81\x9e\x2b\xb2\x01\xac\x51\x99\xce\x2a\x96\xba\x22\x0c\x1c\xda\xe9\x9a\x63\xc8\x42\x44\xb8\x3f\x46\x98\x32\x48\xd6\x90\xa8\x8c\x3d\xc0\xec\xdf\xfb\x20\xc3\x04\x3c\x9e\x36\x04\xfb\x39\x49\x86\x61\x58\xc8\x09\x76\x61\x5c\x93\xa8\x17\xa3\x4f\x6e\xb2\xe5\x6a\x5d\xac\xe2\xb3\xc5\xe9\x34\xb2\xd3\x8a\xbc\x87\xa3\xc7\x9e\x1d\xd5\x28\x0f\x90\xd6\x2a\xae\x64\xa9\x08\x4a\x0e\x30\x0e\xb2\x71\x44\x35\x82\x19\x79\x07\xc7\x81\x75\x33\x87\x37\xfb\x30\x48\x47\x22\x42\xcd\x3e\x38\x2e\xfb\xf0\x61\x59\xaf\x74\xec\x3f\x18\x8c\x86\xd4\x98\xa5\x05\xb2\x62\x86\xf3\xb4\xc8\x8a\xb9\x88\x70\x97\x6d\xaf\xf2\xdd\x16\x77\xe9\x66\x93\xae\xb7\xd9\xaa\x40\xbe\xc1\x32\x5f\x5f\x64\xdb\x2c\x5f\x17\xc8\x2f\x91\xae\xef\x71\x9d\xad\x2f\xe6\x20\x0e\x2d\x39\xd0\xb3\x75\x23\xbf\x71\xe0\x71\x8d\x54\x8f\x3b\x2b\x88\x3e\x00\xec\xcd\x0b\x90\xb7\x54\xf1\x9e\x2b\x28\xa9\x9b\x5e\x36\x84\xc6\x3c\x91\xd3\xac\x1b\x58\x72\x1d\xfb\xf1\x33\x3d\xa4\xae\x45\x04\xc5\x1d\x07\x19\x26\xe5\x8f\x47\x2d\x84\xb8\xdc\xe4\xb7\x23\xfe\x2a\xbb\x4d\xbf\xae\x84\x58\x6e\xf2\xa2\x78\x38\xdf\x65\x37\x17\x0f\xcb\xfc\xdb\x3d\x1e\xa9\xeb\xe3\xef\xab\xdb\x5d\xba\x59\x5e\xc5\x7e\xcc\xaa\x90\xf4\xde\x25\x25\xeb\x44\x88\xcd\x6e\x0d\x69\x43\xdc\x50\x40\x6f\x6b\x19\x08\x27\x27\xbf\x15\xd6\x3e\x48\xa5\x10\x1f\x10\xc7\xda\xc4\xc7\x3a\x76\x54\x99\xae\x23\x5d\x7b\xb0\x25\xb7\x47\x29\x7d\x8b\x9f\x02\xef\x87\x2b\x45\x52\x8f\xa3\x47\xdd\x75\x88\xdd\x1e\xc9\x93\x74\x89\xe2\x32\x91\x36\x24\x8a\x7d\xf0\xc9\x7f\xaf\x16\xa5\x11\xfb\x37\xbc\x97\xec\xa9\x54\xa6\x92\xea\x4d\x9c\xb8\x95\x47\x2c\x55\x70\xed\xdf\x2d\xbf\x02\x00\x00\xff\xff\x49\x10\xa2\x30\x68\x03\x00\x00") - -func testImagesIperfDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesIperfDockerfile, - "test/images/iperf/Dockerfile", - ) -} - -func testImagesIperfDockerfile() (*asset, error) { - bytes, err := testImagesIperfDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/iperf/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesIperfVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesIperfVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesIperfVersion, - "test/images/iperf/VERSION", - ) -} - -func testImagesIperfVersion() (*asset, error) { - bytes, err := testImagesIperfVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/iperf/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesJessieDnsutilsBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\x49\x4d\xca\x4c\xcc\xb3\xca\x4a\x2d\x2e\xce\x4c\xe5\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd7\xc7\x90\x31\x33\xb1\x05\x93\x65\x16\x68\x72\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x4d\x16\x10\x00\x00\xff\xff\xef\xf0\x59\x96\x68\x00\x00\x00") - -func testImagesJessieDnsutilsBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesJessieDnsutilsBaseimage, - "test/images/jessie-dnsutils/BASEIMAGE", - ) -} - -func testImagesJessieDnsutilsBaseimage() (*asset, error) { - bytes, err := testImagesJessieDnsutilsBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/jessie-dnsutils/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesJessieDnsutilsDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x93\x51\x6f\xdb\x36\x14\x85\xdf\xf9\x2b\x0e\x2c\xa0\xd8\x80\x58\xce\x82\x22\x0f\xdd\x93\xea\xb8\xad\xd0\xc4\xee\x2c\x7b\x45\xb0\x0d\x05\x4d\x5d\x4b\xb7\x93\x48\x86\xbc\x8a\xa3\x7f\x3f\x50\x4e\x80\x05\xd1\x9b\x78\xee\x3d\xfc\x78\x78\x99\x61\xe9\xfc\x18\xb8\x69\x05\x57\x97\xbf\x5d\x63\xd7\x12\xbe\x0e\x07\x0a\x96\x84\x22\x8a\x41\x5a\x17\x62\xae\x32\x95\xe1\x96\x0d\xd9\x48\x35\x06\x5b\x53\x80\xb4\x84\xc2\x6b\xd3\xd2\x8b\x72\x81\x3f\x29\x44\x76\x16\x57\xf9\x25\x7e\x49\x05\xb3\x67\x69\xf6\xeb\xef\x2a\xc3\xe8\x06\xf4\x7a\x84\x75\x82\x21\x12\xa4\xe5\x88\x23\x77\x04\x7a\x32\xe4\x05\x6c\x61\x5c\xef\x3b\xd6\xd6\x10\x4e\x2c\xed\xb4\xcd\xb3\x49\xae\x32\xdc\x3f\x5b\xb8\x83\x68\xb6\xd0\x30\xce\x8f\x70\xc7\xff\xd7\x41\xcb\x04\x9c\xbe\x56\xc4\x7f\x58\x2c\x4e\xa7\x53\xae\x27\xd8\xdc\x85\x66\xd1\x9d\x0b\xe3\xe2\xb6\x5c\xae\xd6\xd5\x6a\x7e\x95\x5f\x4e\x2d\x7b\xdb\x51\x8c\x08\xf4\x30\x70\xa0\x1a\x87\x11\xda\xfb\x8e\x8d\x3e\x74\x84\x4e\x9f\xe0\x02\x74\x13\x88\x6a\x88\x4b\xbc\xa7\xc0\xc2\xb6\xb9\x40\x74\x47\x39\xe9\x40\x2a\x43\xcd\x51\x02\x1f\x06\x79\x15\xd6\x0b\x1d\xc7\x57\x05\xce\x42\x5b\xcc\x8a\x0a\x65\x35\xc3\xc7\xa2\x2a\xab\x0b\x95\xe1\x7b\xb9\xfb\xb2\xd9\xef\xf0\xbd\xd8\x6e\x8b\xf5\xae\x5c\x55\xd8\x6c\xb1\xdc\xac\x6f\xca\x5d\xb9\x59\x57\xd8\x7c\x42\xb1\xbe\xc7\xd7\x72\x7d\x73\x01\x62\x69\x29\x80\x9e\x7c\x48\xfc\x2e\x80\x53\x8c\x54\xa7\xcc\x2a\xa2\x57\x00\x47\x77\x06\x8a\x9e\x0c\x1f\xd9\xa0\xd3\xb6\x19\x74\x43\x68\xdc\x23\x05\xcb\xb6\x81\xa7\xd0\x73\x4c\x97\x19\xa1\x6d\xad\x32\x74\xdc\xb3\x68\x99\x56\xde\x1c\x2a\x57\xea\xd3\x76\x73\x97\xf0\x57\xe5\x5d\xf1\x79\xa5\xd4\x72\xbb\xa9\xaa\x1f\x1f\xf7\xe5\xed\xcd\x8f\xe5\xe6\xdb\x3d\x1e\xa8\x1f\xe6\x7f\xac\xee\xf6\xc5\x76\xf9\x65\x1e\x93\x97\xc1\x62\x88\x61\x71\x60\xbb\x50\xe9\xcc\xc5\x76\x5d\xae\x3f\x7f\xc0\xb7\x8e\x74\xa4\x34\x27\x89\x5c\xcb\x19\xd7\x04\xf6\x82\x03\x75\xee\x84\x40\xbd\x7b\xa4\x78\x16\xc8\x0c\x81\x65\x84\xd7\xe6\x5f\xdd\x50\xc4\x31\xb8\x1e\x3a\xf4\xd7\xef\x13\x3c\xbc\x37\xd7\xef\xa9\x03\xf7\x49\x55\x19\xf4\xd4\x38\xa2\x76\xd3\x2c\xd2\x13\x47\x81\xb6\x63\xef\x02\xa5\x4b\x4d\xae\x35\x1d\x58\x5b\x04\xf2\x2e\xb2\xb8\xc0\xc9\xd7\x05\xfc\xa4\x18\x99\x72\x54\x0e\x27\x7a\x71\x08\x64\x5c\xdf\x93\xad\x31\xc4\x14\x5f\x9a\x6c\x95\x9d\x37\x9c\xba\xb4\x1d\xe1\x83\xab\x07\x93\x12\x9c\xa6\x3f\x91\x4d\xa1\x4e\x7f\xd3\x08\x73\x7c\x6e\x11\x87\x9f\x43\x14\x08\x45\x41\x34\x64\x75\x60\x17\x73\xa5\xa6\x24\x8f\xfc\x34\xf8\xb9\xf6\x32\xef\x38\x4a\x1e\x5b\x2c\xd4\x76\xbf\xc6\x5f\xb3\xc5\x1b\x69\xf6\x8f\x9a\xb4\xb4\xd4\x90\x60\xfe\x80\xc1\xd7\x5a\x08\xef\xde\xe1\x6f\x95\xde\xc8\x8b\xc4\x36\x8a\xee\x3a\xcc\x47\xd4\x36\x0e\xc2\x5d\x7c\x5b\x64\x3a\xd2\x56\xfd\x17\x00\x00\xff\xff\x8d\x18\xa5\x26\x39\x04\x00\x00") - -func testImagesJessieDnsutilsDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesJessieDnsutilsDockerfile, - "test/images/jessie-dnsutils/Dockerfile", - ) -} - -func testImagesJessieDnsutilsDockerfile() (*asset, error) { - bytes, err := testImagesJessieDnsutilsDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/jessie-dnsutils/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesJessieDnsutilsVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesJessieDnsutilsVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesJessieDnsutilsVersion, - "test/images/jessie-dnsutils/VERSION", - ) -} - -func testImagesJessieDnsutilsVersion() (*asset, error) { - bytes, err := testImagesJessieDnsutilsVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/jessie-dnsutils/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesJessieDnsutilsFixupAptListSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x93\xd1\x6f\xdb\x36\x10\xc6\xdf\xf9\x57\x7c\xb3\x0a\xb4\x01\x62\x29\x0b\x8a\x0e\x58\xb0\x07\x37\xc9\x50\xa1\x85\x0d\x58\xee\x8a\x3e\x0d\x14\x75\x96\xae\x93\x48\x8e\x3c\x45\x31\xb6\xfd\xef\x03\x65\x7b\x98\x91\xf2\x49\xe0\x1d\xef\x7e\xf7\x7d\xa7\xec\x87\x62\x8c\xa1\xa8\xd9\x16\x64\x9f\x50\xeb\xd8\x29\x95\xe1\xde\xf9\x43\xe0\xb6\x13\xdc\xde\xfc\xf8\x13\x76\x1d\xe1\xe3\x58\x53\xb0\x24\x14\xb1\x1a\xa5\x73\x21\xe6\x2a\x53\x19\x3e\xb1\x21\x1b\xa9\xc1\x68\x1b\x0a\x90\x8e\xb0\xf2\xda\x74\x74\x8e\x5c\xe3\x37\x0a\x91\x9d\xc5\x6d\x7e\x83\x37\x29\x61\x71\x0a\x2d\xae\xee\x54\x86\x83\x1b\x31\xe8\x03\xac\x13\x8c\x91\x20\x1d\x47\xec\xb9\x27\xd0\xb3\x21\x2f\x60\x0b\xe3\x06\xdf\xb3\xb6\x86\x30\xb1\x74\x73\x9b\x53\x91\x5c\x65\xf8\x7a\x2a\xe1\x6a\xd1\x6c\xa1\x61\x9c\x3f\xc0\xed\xff\x9f\x07\x2d\x33\x70\x3a\x9d\x88\xff\xb9\x28\xa6\x69\xca\xf5\x0c\x9b\xbb\xd0\x16\xfd\x31\x31\x16\x9f\xca\xfb\xc7\x75\xf5\xb8\xbc\xcd\x6f\xe6\x27\x9f\x6d\x4f\x31\x22\xd0\x9f\x23\x07\x6a\x50\x1f\xa0\xbd\xef\xd9\xe8\xba\x27\xf4\x7a\x82\x0b\xd0\x6d\x20\x6a\x20\x2e\xf1\x4e\x81\x85\x6d\x7b\x8d\xe8\xf6\x32\xe9\x40\x2a\x43\xc3\x51\x02\xd7\xa3\x5c\x88\x75\xa6\xe3\x78\x91\xe0\x2c\xb4\xc5\x62\x55\xa1\xac\x16\x78\xbf\xaa\xca\xea\x5a\x65\xf8\x52\xee\x3e\x6c\x3e\xef\xf0\x65\xb5\xdd\xae\xd6\xbb\xf2\xb1\xc2\x66\x8b\xfb\xcd\xfa\xa1\xdc\x95\x9b\x75\x85\xcd\xaf\x58\xad\xbf\xe2\x63\xb9\x7e\xb8\x06\xb1\x74\x14\x40\xcf\x3e\x24\x7e\x17\xc0\x49\x46\x6a\x92\x66\x15\xd1\x05\xc0\xde\x1d\x81\xa2\x27\xc3\x7b\x36\xe8\xb5\x6d\x47\xdd\x12\x5a\xf7\x44\xc1\xb2\x6d\xe1\x29\x0c\x1c\x93\x99\x11\xda\x36\x2a\x43\xcf\x03\x8b\x96\xf9\xe6\xc5\x50\xb9\x52\x0f\x8f\xef\x7f\x5f\x6d\xef\x3f\xfc\xf2\xea\x4d\xe3\xff\x68\xb1\x5c\xfa\xc0\x56\x96\x3a\x98\x8e\x85\x8c\x8c\x81\xae\xd2\xca\x9d\x2c\x89\x64\xc6\xc0\x72\xc8\x1b\xaa\x59\xdb\xd9\x97\xe3\xe7\xf2\x1c\x2a\x92\x4e\xb1\xf8\x46\x31\x32\x15\xa3\x6f\xb4\x50\x2c\x4a\xbb\xa5\x9e\xf4\x51\xc9\x19\xd2\xb6\x2a\x03\x59\x09\x4c\x71\x9e\x2e\xba\x81\xe0\x7b\x2d\x7b\x17\x86\x98\xbc\xc1\x44\xf8\x36\x46\x41\xa0\xc1\x3d\x1d\xf5\xe8\x75\x14\xf4\x6c\x29\xf9\x18\xdd\x18\x0c\xc5\xbc\xe7\x98\xf6\x50\x65\x28\x48\x4c\xa1\xbd\x14\x17\xa1\xa9\x63\xd3\xa5\xce\x8b\x86\xea\xf3\x2c\x0d\xd5\x2f\xc7\xc0\x91\x7b\x79\xe2\xc6\xa0\xd9\x2e\x94\x32\x89\xfc\xd5\x5f\x67\xb9\xfe\x49\xcd\xd2\xa6\xea\x30\xbc\x7b\xfb\xb7\xf7\xe6\xdd\x5b\xea\xaf\xe6\xab\x74\xd2\x0f\xb7\x64\xbc\x7e\xa9\xcd\xeb\xef\x13\xfe\xf7\xf2\xee\x4e\x51\xd4\x46\x29\x7a\x66\xc1\x8d\xfa\x37\x00\x00\xff\xff\x00\x5e\xb6\x14\x02\x04\x00\x00") - -func testImagesJessieDnsutilsFixupAptListShBytes() ([]byte, error) { - return bindataRead( - _testImagesJessieDnsutilsFixupAptListSh, - "test/images/jessie-dnsutils/fixup-apt-list.sh", - ) -} - -func testImagesJessieDnsutilsFixupAptListSh() (*asset, error) { - bytes, err := testImagesJessieDnsutilsFixupAptListShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/jessie-dnsutils/fixup-apt-list.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesKittenBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\xcd\x5d\x0a\x42\x21\x10\xc5\xf1\xf7\xf6\x32\xf7\x5a\x89\x50\xd0\x62\xd4\x0e\x22\x35\x25\x33\xf6\xb1\xfc\x68\xa8\x05\xe8\xdb\x79\xf9\xfd\x4f\xe4\x73\xf0\xa7\x92\x65\xa9\xf7\xf5\xf2\x48\x90\x1b\x3a\x94\xb0\x03\x75\x68\xa7\xca\xb1\x40\x57\xdb\x2f\x24\x85\x3c\x21\x64\xec\xb8\x5d\xdc\x26\x0a\x4f\x70\xe1\x3f\x9e\x7a\xff\x32\x0b\xb4\x96\x83\xbf\x62\x3c\xf1\x83\x16\xd1\xfd\xc1\xbd\xc7\x13\xc6\x2c\xf0\x09\x00\x00\xff\xff\xcf\x73\x31\xc1\x45\x01\x00\x00") - -func testImagesKittenBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesKittenBaseimage, - "test/images/kitten/BASEIMAGE", - ) -} - -func testImagesKittenBaseimage() (*asset, error) { - bytes, err := testImagesKittenBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/kitten/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesKittenDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x73\xd3\x30\x14\x84\xef\xfa\x15\x3b\xf1\x05\x66\x82\x13\x72\xe0\x00\x27\x93\xa6\xe0\x69\x6b\x33\x71\x4a\x27\x47\xc5\x7e\xb1\x5f\x51\x24\x21\x3d\xe3\xe6\xdf\x33\x4e\x53\x68\xa6\x3a\xbd\xd1\xae\x56\x9f\x56\x09\x96\xce\x1f\x03\xb7\x9d\x60\x31\xff\xf8\x09\x9b\x8e\x70\xd3\xef\x28\x58\x12\x8a\xc8\x7a\xe9\x5c\x88\xa9\x4a\x54\x82\x5b\xae\xc9\x46\x6a\xd0\xdb\x86\x02\xa4\x23\x64\x5e\xd7\x1d\xbd\x28\x53\xfc\xa4\x10\xd9\x59\x2c\xd2\x39\xde\x8d\x86\xc9\x59\x9a\xbc\xff\xa2\x12\x1c\x5d\x8f\x83\x3e\xc2\x3a\x41\x1f\x09\xd2\x71\xc4\x9e\x0d\x81\x9e\x6a\xf2\x02\xb6\xa8\xdd\xc1\x1b\xd6\xb6\x26\x0c\x2c\xdd\xe9\x9a\x73\x48\xaa\x12\x6c\xcf\x11\x6e\x27\x9a\x2d\x34\x6a\xe7\x8f\x70\xfb\xd7\x3e\x68\x39\x01\x8f\xab\x13\xf1\x9f\x67\xb3\x61\x18\x52\x7d\x82\x4d\x5d\x68\x67\xe6\xd9\x18\x67\xb7\xf9\x72\x55\x54\xab\x0f\x8b\x74\x7e\x3a\x72\x6f\x0d\xc5\x88\x40\xbf\x7b\x0e\xd4\x60\x77\x84\xf6\xde\x70\xad\x77\x86\x60\xf4\x00\x17\xa0\xdb\x40\xd4\x40\xdc\xc8\x3b\x04\x16\xb6\xed\x14\xd1\xed\x65\xd0\x81\x54\x82\x86\xa3\x04\xde\xf5\x72\x51\xd6\x0b\x1d\xc7\x0b\x83\xb3\xd0\x16\x93\xac\x42\x5e\x4d\xf0\x35\xab\xf2\x6a\xaa\x12\x3c\xe4\x9b\xef\xe5\xfd\x06\x0f\xd9\x7a\x9d\x15\x9b\x7c\x55\xa1\x5c\x63\x59\x16\x57\xf9\x26\x2f\x8b\x0a\xe5\x35\xb2\x62\x8b\x9b\xbc\xb8\x9a\x82\x58\x3a\x0a\xa0\x27\x1f\x46\x7e\x17\xc0\x63\x8d\xd4\x8c\x9d\x55\x44\x17\x00\x7b\xf7\x0c\x14\x3d\xd5\xbc\xe7\x1a\x46\xdb\xb6\xd7\x2d\xa1\x75\x7f\x28\x58\xb6\x2d\x3c\x85\x03\xc7\xf1\x33\x23\xb4\x6d\x54\x02\xc3\x07\x16\x2d\xa7\x9d\x37\x8f\x4a\x95\xba\x5e\x97\x77\x23\xfe\x2a\xbf\xcb\xbe\xad\xd4\xb2\xfc\xb1\x45\x27\x07\x33\xfb\xc5\x22\x64\xd3\x47\xdf\xe2\xff\xf8\x4a\x6f\xb4\xe8\xf4\x31\x3a\x8b\x7f\x93\xfa\x1b\x00\x00\xff\xff\x3d\x50\x58\xd6\x99\x02\x00\x00") - -func testImagesKittenDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesKittenDockerfile, - "test/images/kitten/Dockerfile", - ) -} - -func testImagesKittenDockerfile() (*asset, error) { - bytes, err := testImagesKittenDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/kitten/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesKittenVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesKittenVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesKittenVersion, - "test/images/kitten/VERSION", - ) -} - -func testImagesKittenVersion() (*asset, error) { - bytes, err := testImagesKittenVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/kitten/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesKittenHtmlDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\xca\xcc\x4d\x4c\x4f\x55\xb2\x52\x50\xca\xce\x2c\x29\x49\xcd\xd3\xcb\x2a\x48\x57\xe2\xaa\xe5\x02\x04\x00\x00\xff\xff\x27\x07\xd0\xf9\x1c\x00\x00\x00") - -func testImagesKittenHtmlDataJsonBytes() ([]byte, error) { - return bindataRead( - _testImagesKittenHtmlDataJson, - "test/images/kitten/html/data.json", - ) -} - -func testImagesKittenHtmlDataJson() (*asset, error) { - bytes, err := testImagesKittenHtmlDataJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/kitten/html/data.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesLivenessDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x8f\xda\x30\x10\x85\xef\xfe\x15\x4f\xe4\xd2\x4a\x34\x6c\x39\xf4\xd0\x9e\x52\x96\x55\xa3\xdd\x26\x15\x61\xbb\xe2\x68\x92\x21\x19\x29\xd8\xee\x78\x42\x96\x7f\x5f\x85\x65\xa5\xa2\xfa\xe8\xf9\xfc\xfc\xf9\x39\xc1\xca\x87\xb3\x70\xdb\x29\x96\x77\x9f\xbf\x60\xdb\x11\x1e\x87\x3d\x89\x23\xa5\x88\x6c\xd0\xce\x4b\x4c\x4d\x62\x12\x3c\x71\x4d\x2e\x52\x83\xc1\x35\x24\xd0\x8e\x90\x05\x5b\x77\xf4\x3e\x99\xe3\x37\x49\x64\xef\xb0\x4c\xef\xf0\x61\x02\x66\xd7\xd1\xec\xe3\x37\x93\xe0\xec\x07\x1c\xed\x19\xce\x2b\x86\x48\xd0\x8e\x23\x0e\xdc\x13\xe8\xb5\xa6\xa0\x60\x87\xda\x1f\x43\xcf\xd6\xd5\x84\x91\xb5\xbb\x5c\x73\x0d\x49\x4d\x82\xdd\x35\xc2\xef\xd5\xb2\x83\x45\xed\xc3\x19\xfe\xf0\x2f\x07\xab\x17\xe1\x69\x75\xaa\xe1\xeb\x62\x31\x8e\x63\x6a\x2f\xb2\xa9\x97\x76\xd1\xbf\x81\x71\xf1\x94\xaf\xd6\x45\xb5\xfe\xb4\x4c\xef\x2e\x47\x9e\x5d\x4f\x31\x42\xe8\xcf\xc0\x42\x0d\xf6\x67\xd8\x10\x7a\xae\xed\xbe\x27\xf4\x76\x84\x17\xd8\x56\x88\x1a\xa8\x9f\x7c\x47\x61\x65\xd7\xce\x11\xfd\x41\x47\x2b\x64\x12\x34\x1c\x55\x78\x3f\xe8\x4d\x59\xef\x76\x1c\x6f\x00\xef\x60\x1d\x66\x59\x85\xbc\x9a\xe1\x7b\x56\xe5\xd5\xdc\x24\x78\xc9\xb7\x3f\xca\xe7\x2d\x5e\xb2\xcd\x26\x2b\xb6\xf9\xba\x42\xb9\xc1\xaa\x2c\xee\xf3\x6d\x5e\x16\x15\xca\x07\x64\xc5\x0e\x8f\x79\x71\x3f\x07\xb1\x76\x24\xa0\xd7\x20\x93\xbf\x17\xf0\x54\x23\x35\x53\x67\x15\xd1\x8d\xc0\xc1\xbf\x09\xc5\x40\x35\x1f\xb8\x46\x6f\x5d\x3b\xd8\x96\xd0\xfa\x13\x89\x63\xd7\x22\x90\x1c\x39\x4e\x9f\x19\x61\x5d\x63\x12\xf4\x7c\x64\xb5\x7a\xd9\xf9\xef\x51\xa9\x31\x0f\x9b\xf2\x27\x62\x2d\x56\xeb\xce\x98\x55\xf9\x6b\x87\x9e\x4f\xe4\x26\x9f\x45\x24\x39\x91\x98\xbf\x01\x00\x00\xff\xff\xd3\x90\x91\xcc\x70\x02\x00\x00") - -func testImagesLivenessDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesLivenessDockerfile, - "test/images/liveness/Dockerfile", - ) -} - -func testImagesLivenessDockerfile() (*asset, error) { - bytes, err := testImagesLivenessDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/liveness/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesLivenessMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x30\x14\x85\x9f\xe7\x5f\x71\xd4\xf0\xd0\x4a\x25\x65\x68\xe2\x81\x09\x4d\x59\xdb\x41\x04\x4a\xa6\x24\x80\x78\x42\x4e\x72\x9b\x5c\xc9\xb5\x33\xdb\x21\xf4\xdf\x4f\x2e\x20\x0d\xcd\x6f\xbe\xe7\xf8\xf8\xf3\x71\x84\xb5\x19\x0e\x96\xbb\xde\xe3\xfc\xec\xeb\x05\xaa\x9e\x70\x3b\xd6\x64\x35\x79\x72\x48\x46\xdf\x1b\xeb\x62\x11\x89\x08\x77\xdc\x90\x76\xd4\x62\xd4\x2d\x59\xf8\x9e\x90\x0c\xb2\xe9\xe9\x43\x59\xe2\x81\xac\x63\xa3\x71\x1e\x9f\x61\x1e\x0c\xb3\x77\x69\xb6\xf8\x2e\x22\x1c\xcc\x88\xbd\x3c\x40\x1b\x8f\xd1\x11\x7c\xcf\x0e\x3b\x56\x04\x7a\x6d\x68\xf0\x60\x8d\xc6\xec\x07\xc5\x52\x37\x84\x89\x7d\x7f\xbc\xe6\x3d\x24\x16\x11\x9e\xde\x23\x4c\xed\x25\x6b\x48\x34\x66\x38\xc0\xec\xfe\xf5\x41\xfa\x23\x70\x58\xbd\xf7\xc3\xe5\x6a\x35\x4d\x53\x2c\x8f\xb0\xb1\xb1\xdd\x4a\xbd\x19\xdd\xea\x2e\x5d\x6f\xb3\x72\x7b\x7a\x1e\x9f\x1d\x8f\xdc\x6b\x45\xce\xc1\xd2\x9f\x91\x2d\xb5\xa8\x0f\x90\xc3\xa0\xb8\x91\xb5\x22\x28\x39\xc1\x58\xc8\xce\x12\xb5\xf0\x26\xf0\x4e\x96\x3d\xeb\x6e\x09\x67\x76\x7e\x92\x96\x44\x84\x96\x9d\xb7\x5c\x8f\xfe\x53\x59\x1f\x74\xec\x3e\x19\x8c\x86\xd4\x98\x25\x25\xd2\x72\x86\x9f\x49\x99\x96\x4b\x11\xe1\x31\xad\x6e\xf2\xfb\x0a\x8f\x49\x51\x24\x59\x95\x6e\x4b\xe4\x05\xd6\x79\xb6\x49\xab\x34\xcf\x4a\xe4\xbf\x90\x64\x4f\xb8\x4d\xb3\xcd\x12\xc4\xbe\x27\x0b\x7a\x1d\x6c\xe0\x37\x16\x1c\x6a\xa4\x36\x74\x56\x12\x7d\x02\xd8\x99\x37\x20\x37\x50\xc3\x3b\x6e\xa0\xa4\xee\x46\xd9\x11\x3a\xf3\x42\x56\xb3\xee\x30\x90\xdd\xb3\x0b\x9f\xe9\x20\x75\x2b\x22\x28\xde\xb3\x97\xfe\x38\xf9\xef\x51\xb1\x10\x65\xb1\x2e\x71\x05\xc5\x2f\xa4\xc9\x39\x91\x14\xeb\x1b\xfc\xb8\x82\xdc\xb7\x17\xdf\x44\x95\x14\xd7\xdb\x2a\xec\x4f\xe6\xeb\xfb\x62\x93\x16\x0b\x71\x9d\xdf\x25\xd9\xf5\xf3\xc3\xb6\x28\xd3\x3c\x0b\x9a\x92\x9e\x9c\x0f\x51\xcf\x9b\xb4\x40\x30\x6b\xe3\x5b\xb6\x38\x99\xbb\x9e\x94\xc2\x30\xb5\x8b\x85\xa0\xd7\xc1\x58\x2f\x44\xcd\xfa\x52\x7c\x89\xe3\x15\xef\x65\x47\xa7\xa3\x67\x15\xbb\x1e\x35\x6b\x9c\xcc\x03\xd0\x42\x88\xf8\xf7\x4d\x9e\x3d\x5d\x86\xa1\xf8\x1b\x00\x00\xff\xff\x65\x4d\x13\x20\xf0\x02\x00\x00") - -func testImagesLivenessMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesLivenessMakefile, - "test/images/liveness/Makefile", - ) -} - -func testImagesLivenessMakefile() (*asset, error) { - bytes, err := testImagesLivenessMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/liveness/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesLivenessVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") - -func testImagesLivenessVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesLivenessVersion, - "test/images/liveness/VERSION", - ) -} - -func testImagesLivenessVersion() (*asset, error) { - bytes, err := testImagesLivenessVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/liveness/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesLivenessServerGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x53\x5f\x6b\xdc\x46\x10\x7f\xd6\x7e\x8a\xa9\x20\x20\x19\x55\xba\x98\x16\x82\x4b\x0a\x17\xc7\xae\x8f\x98\x33\xb5\xec\x9a\x50\xfa\xb0\x27\x8d\xa4\x21\x7b\xbb\xf2\xec\xc8\xf2\xb5\xf8\xbb\x97\x95\xee\x8a\x9d\x3a\x2f\x79\x3a\x9d\xf6\x37\xbf\x7f\xb3\x2a\x8e\xd4\xa9\xeb\x77\x4c\x6d\x27\x70\xbc\x78\xfb\x13\xdc\x74\x08\x9f\x86\x0d\xb2\x45\x41\x0f\xcb\x41\x3a\xc7\x3e\x57\xea\x92\x2a\xb4\x1e\x6b\x18\x6c\x8d\x0c\xd2\x21\x2c\x7b\x5d\x75\x08\xfb\x93\x0c\xfe\x40\xf6\xe4\x2c\x1c\xe7\x0b\x48\x02\x20\xde\x1f\xc5\xe9\x2f\x6a\xe7\x06\xd8\xea\x1d\x58\x27\x30\x78\x04\xe9\xc8\x43\x43\x06\x01\x1f\x2b\xec\x05\xc8\x42\xe5\xb6\xbd\x21\x6d\x2b\x84\x91\xa4\x9b\x44\xf6\x14\xb9\xfa\xbc\x27\x70\x1b\xd1\x64\x41\x43\xe5\xfa\x1d\xb8\xe6\x39\x0a\xb4\x28\x05\x00\xd0\x89\xf4\x27\x45\x31\x8e\x63\xae\x27\x97\xb9\xe3\xb6\x30\x33\xca\x17\x97\xab\xd3\xb3\x75\x79\xf6\xe3\x71\xbe\x50\xea\xd6\x1a\xf4\x1e\x18\xef\x07\x62\xac\x61\xb3\x03\xdd\xf7\x86\x2a\xbd\x31\x08\x46\x8f\xe0\x18\x74\xcb\x88\x35\x88\x0b\x3e\x47\x26\x21\xdb\x66\xe0\x5d\x23\xa3\x66\x54\x35\x79\x61\xda\x0c\xf2\xa2\xa0\x83\x2b\xf2\xf0\x1c\xe0\x2c\x68\x0b\xf1\xb2\x84\x55\x19\xc3\x87\x65\xb9\x2a\x33\x75\xb7\xba\xb9\xb8\xba\xbd\x81\xbb\xe5\xf5\xf5\x72\x7d\xb3\x3a\x2b\xe1\xea\x1a\x4e\xaf\xd6\x1f\x57\x37\xab\xab\x75\x09\x57\xe7\xb0\x5c\x7f\x86\x4f\xab\xf5\xc7\x0c\x90\xa4\x43\x06\x7c\xec\x39\x78\x77\x0c\x14\xaa\xc3\x3a\x57\x25\xe2\x0b\xf1\xc6\xcd\x66\x7c\x8f\x15\x35\x54\x81\xd1\xb6\x1d\x74\x8b\xd0\xba\x07\x64\x4b\xb6\x85\x1e\x79\x4b\x3e\x2c\xcf\x83\xb6\xb5\x32\xb4\x25\xd1\x32\xfd\xff\x5f\x9c\x5c\x1d\x15\x4a\x15\x05\x2c\xc1\x07\x55\x04\x8f\xfc\x30\x61\xb4\x84\xac\xda\xd0\xc3\xac\xfb\x76\x01\x1e\x2b\x67\x6b\x9f\x05\x06\x0b\x8c\xbd\x63\x09\xa4\x1d\x6a\x23\xdd\x2e\xc0\x02\x57\xe0\x67\xf4\x12\x16\x4a\xe2\x21\xe9\x5c\x8f\xcd\x60\xcc\x2e\x05\xdf\x39\x16\xc0\x47\xf2\x82\xb6\xc2\x5c\xf5\xba\xfa\x12\x02\x6c\x35\x59\xa5\x68\x1b\x38\x21\x51\x51\xdc\x6c\x25\x56\x51\x6c\x5c\x1b\x7e\x2c\x4a\x11\x2e\xc2\xe1\x79\x60\x13\x1e\x85\xb6\x18\xab\x54\xa9\x66\xb0\xd5\xc4\x91\xa4\xf0\x8f\x8a\xbc\x68\x0e\xeb\x39\x79\x0f\x01\x92\xaf\xdd\x98\xa4\x2a\x0a\x0c\xf9\x85\xb6\xb5\xc1\xf3\xc1\x56\x49\x5c\xec\x81\x71\x06\x81\x21\x19\xa7\xdb\x96\x5f\xa3\xef\x9d\xf5\x78\xc7\x24\xc8\x19\x30\x1c\xed\xdf\xdf\x0f\xe8\x65\x92\x88\xc6\x7c\x3a\xbe\x40\x5d\x23\x27\xc7\x8b\x45\xaa\xa2\xa8\xd6\xa2\x83\x6a\x32\xc9\x96\x64\x2b\x4c\xf6\x1a\x69\x9a\x97\xc2\x64\xdb\xe0\xe4\x30\x9d\xfc\xf9\xd7\x66\x27\x98\x84\xb9\x34\x55\xd1\xd3\xab\x2e\xe7\x82\xff\xfe\x1e\x97\xf5\xc0\xd3\xf2\xff\xab\xe2\xa5\x27\x15\x45\xd4\xc0\x01\x94\x97\xf3\x86\x93\x14\x7e\x0d\x0b\x0f\x04\x5f\xe5\xfc\x79\xce\xf9\xb5\xff\x66\x2b\x79\xd9\x33\x59\x69\x92\x18\x99\x1d\x9f\xc0\x9b\x87\x38\x7b\x85\x3a\x0d\x39\xa3\x27\x40\xe3\xf1\x35\x85\xe3\xd7\x15\x62\xf7\x25\x9e\x27\xbf\xd5\x12\x63\x4d\x8c\x95\x7c\x4f\x4d\xc6\x55\x19\x20\x73\xa8\x69\x60\x93\xff\x3e\x20\xef\x6e\x2d\xfa\x4a\xf7\x98\x70\x7e\x7b\x7d\x39\xbf\x4b\xd2\xfc\x37\x94\x24\x36\xae\x9a\xed\x50\x33\xcd\xfd\xf0\x1e\x2c\x99\x39\xcf\x44\x7f\x16\x4a\x48\xc6\x0c\x5e\x54\x43\xf6\x41\x1b\xaa\xe1\xe0\xf5\x04\xde\xdc\xc7\x19\x7c\x53\x20\x9b\x33\x94\xa2\x65\xf0\x1f\x74\x7d\x30\x1d\x64\x18\x65\x60\x3b\x37\x12\xed\x23\xcd\xac\x41\x96\x33\x98\x42\x3d\x9b\x3f\x77\x83\xad\xf7\x97\xcc\xb8\x36\x3f\xd7\xa2\x4d\x32\x01\x2e\xa7\x0f\x72\x69\xeb\x32\x7c\xff\x49\x7c\xf2\x6e\xf1\x6e\x11\x67\x21\x53\x9a\xaa\x27\xf5\x6f\x00\x00\x00\xff\xff\x81\x6b\xfa\x13\x5e\x06\x00\x00") - -func testImagesLivenessServerGoBytes() ([]byte, error) { - return bindataRead( - _testImagesLivenessServerGo, - "test/images/liveness/server.go", - ) -} - -func testImagesLivenessServerGo() (*asset, error) { - bytes, err := testImagesLivenessServerGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/liveness/server.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesLogsGeneratorBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\x2a\x2d\xae\x4c\xca\xaf\xe0\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x12\x33\x33\xb1\x05\x93\x65\x16\x70\xd1\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x0d\x17\x07\x04\x00\x00\xff\xff\xb3\x6b\xfb\x8a\x50\x00\x00\x00") - -func testImagesLogsGeneratorBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesLogsGeneratorBaseimage, - "test/images/logs-generator/BASEIMAGE", - ) -} - -func testImagesLogsGeneratorBaseimage() (*asset, error) { - bytes, err := testImagesLogsGeneratorBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/logs-generator/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesLogsGeneratorDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x91\x41\x6f\x9b\x30\x14\xc7\xef\xfe\x14\x7f\xc1\x0e\x9b\x14\x92\xb6\x87\x1d\x36\xed\xc0\x12\xda\xa1\xa6\x30\x01\x6d\x55\x4d\x53\xe5\xc0\x0b\x58\x72\x6c\x66\x3f\x46\xa3\xa9\xdf\x7d\x22\x4d\xa5\x75\xdd\x38\x20\xd9\xef\xe7\xe7\xdf\xfb\x3b\xc4\xd2\xf6\x7b\xa7\xda\x8e\x71\x76\x72\xfa\x1e\x55\x47\xb8\x1c\x36\xe4\x0c\x31\x79\xc4\x03\x77\xd6\xf9\xb9\x08\x45\x88\xb5\xaa\xc9\x78\x6a\x30\x98\x86\x1c\xb8\x23\xc4\xbd\xac\x3b\x7a\xae\xcc\x70\x43\xce\x2b\x6b\x70\x36\x3f\xc1\xdb\x09\x08\x8e\xa5\xe0\xdd\x47\x11\x62\x6f\x07\xec\xe4\x1e\xc6\x32\x06\x4f\xe0\x4e\x79\x6c\x95\x26\xd0\x43\x4d\x3d\x43\x19\xd4\x76\xd7\x6b\x25\x4d\x4d\x18\x15\x77\x87\x6b\x8e\x4d\xe6\x22\xc4\xdd\xb1\x85\xdd\xb0\x54\x06\x12\xb5\xed\xf7\xb0\xdb\x3f\x39\x48\x3e\x08\x4f\x5f\xc7\xdc\x7f\x58\x2c\xc6\x71\x9c\xcb\x83\xec\xdc\xba\x76\xa1\x9f\x40\xbf\x58\xa7\xcb\x24\x2b\x93\xe8\x6c\x7e\x72\x38\x72\x6d\x34\x79\x0f\x47\x3f\x06\xe5\xa8\xc1\x66\x0f\xd9\xf7\x5a\xd5\x72\xa3\x09\x5a\x8e\xb0\x0e\xb2\x75\x44\x0d\xd8\x4e\xbe\xa3\x53\xac\x4c\x3b\x83\xb7\x5b\x1e\xa5\x23\x11\xa2\x51\x9e\x9d\xda\x0c\xfc\x22\xac\x67\x3b\xe5\x5f\x00\xd6\x40\x1a\x04\x71\x89\xb4\x0c\xf0\x39\x2e\xd3\x72\x26\x42\xdc\xa6\xd5\x97\xfc\xba\xc2\x6d\x5c\x14\x71\x56\xa5\x49\x89\xbc\xc0\x32\xcf\x56\x69\x95\xe6\x59\x89\xfc\x1c\x71\x76\x87\xcb\x34\x5b\xcd\x40\x8a\x3b\x72\xa0\x87\xde\x4d\xfe\xd6\x41\x4d\x31\x52\x33\x65\x56\x12\xbd\x10\xd8\xda\x27\x21\xdf\x53\xad\xb6\xaa\x86\x96\xa6\x1d\x64\x4b\x68\xed\x4f\x72\x46\x99\x16\x3d\xb9\x9d\xf2\xd3\x63\x7a\x48\xd3\x88\x10\x5a\xed\x14\x4b\x3e\xec\xbc\x1a\x6a\x2e\xc4\x79\x91\x5f\x4d\xfa\x49\x7a\x15\x5f\x24\x42\x24\xd9\x0d\xd6\xf9\x45\x79\x7f\x91\x64\x49\x11\x57\x79\x71\xbf\x4e\xb3\xa4\xbc\xaf\xf2\x2a\x5e\xe3\xf4\x5f\xc0\xea\xba\x88\xa7\xe9\x70\xea\x85\x58\xe6\x5f\xef\xa0\x6d\xeb\xa3\x96\x0c\x39\xc9\xd6\x61\x21\xc4\xf2\x6a\x85\x6f\x81\xef\x82\x19\x82\xa8\x9e\xfe\x8b\xbf\xa0\x28\xd2\xb6\x65\xeb\xb9\x21\x77\x5c\x45\x5a\x19\xf2\x11\x5b\x96\xfa\xd3\x9b\x5f\xff\xf7\x7a\x44\x14\xb9\xc1\x44\xcd\xe0\x0e\xb3\xbe\x86\x9f\x1d\x1f\x83\xef\xe2\x77\x00\x00\x00\xff\xff\xad\x9d\x6f\x88\x40\x03\x00\x00") - -func testImagesLogsGeneratorDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesLogsGeneratorDockerfile, - "test/images/logs-generator/Dockerfile", - ) -} - -func testImagesLogsGeneratorDockerfile() (*asset, error) { - bytes, err := testImagesLogsGeneratorDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/logs-generator/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesLogsGeneratorMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x3e\x14\xc5\x9f\xff\xfe\x14\x47\x0d\x0f\xad\x54\x52\xfe\x68\xe2\x81\x09\x4d\x59\xdb\x41\x04\x4a\xa6\x24\x80\x78\x42\x4e\x72\x9b\x5c\xc9\xb5\x33\xdb\x59\xe8\xb7\x9f\x5c\x40\x5a\x35\xbf\xf9\x9e\xe3\xe3\x9f\x8f\x23\xac\xcd\x70\xb0\xdc\xf5\x1e\x97\x17\xff\x5f\xa1\xea\x09\xf7\x63\x4d\x56\x93\x27\x87\x64\xf4\xbd\xb1\x2e\x16\x91\x88\xf0\xc0\x0d\x69\x47\x2d\x46\xdd\x92\x85\xef\x09\xc9\x20\x9b\x9e\x3e\x95\x25\x9e\xc8\x3a\x36\x1a\x97\xf1\x05\xe6\xc1\x30\xfb\x90\x66\x8b\xaf\x22\xc2\xc1\x8c\xd8\xcb\x03\xb4\xf1\x18\x1d\xc1\xf7\xec\xb0\x63\x45\xa0\xb7\x86\x06\x0f\xd6\x68\xcc\x7e\x50\x2c\x75\x43\x98\xd8\xf7\xc7\x6b\x3e\x42\x62\x11\xe1\xe5\x23\xc2\xd4\x5e\xb2\x86\x44\x63\x86\x03\xcc\xee\x6f\x1f\xa4\x3f\x02\x87\xd5\x7b\x3f\x5c\xaf\x56\xd3\x34\xc5\xf2\x08\x1b\x1b\xdb\xad\xd4\xbb\xd1\xad\x1e\xd2\xf5\x36\x2b\xb7\xe7\x97\xf1\xc5\xf1\xc8\xa3\x56\xe4\x1c\x2c\xfd\x1a\xd9\x52\x8b\xfa\x00\x39\x0c\x8a\x1b\x59\x2b\x82\x92\x13\x8c\x85\xec\x2c\x51\x0b\x6f\x02\xef\x64\xd9\xb3\xee\x96\x70\x66\xe7\x27\x69\x49\x44\x68\xd9\x79\xcb\xf5\xe8\x4f\xca\xfa\xa4\x63\x77\x62\x30\x1a\x52\x63\x96\x94\x48\xcb\x19\xbe\x27\x65\x5a\x2e\x45\x84\xe7\xb4\xba\xcb\x1f\x2b\x3c\x27\x45\x91\x64\x55\xba\x2d\x91\x17\x58\xe7\xd9\x26\xad\xd2\x3c\x2b\x91\xff\x40\x92\xbd\xe0\x3e\xcd\x36\x4b\x10\xfb\x9e\x2c\xe8\x6d\xb0\x81\xdf\x58\x70\xa8\x91\xda\xd0\x59\x49\x74\x02\xb0\x33\xef\x40\x6e\xa0\x86\x77\xdc\x40\x49\xdd\x8d\xb2\x23\x74\xe6\x37\x59\xcd\xba\xc3\x40\x76\xcf\x2e\x7c\xa6\x83\xd4\xad\x88\xa0\x78\xcf\x5e\xfa\xe3\xe4\x9f\x47\xc5\x42\x94\xc5\xba\xbc\x51\xa6\x73\xe7\x1d\x69\xb2\xd2\x1b\x2b\x92\x62\x7d\x87\x6f\x37\x90\xfb\xf6\xea\x8b\xa8\x92\xe2\x76\x5b\x85\xfd\xd9\x7c\xfd\x58\x6c\xd2\x62\x21\x6e\xf3\x87\x24\xbb\x7d\x7d\xda\x16\x65\x9a\x67\x41\x53\xd2\x93\xf3\x21\xee\x75\x93\x16\x08\x66\x6d\x7c\xcb\x16\x67\x73\xd7\x93\x52\x18\xa6\x76\xb1\x10\xf4\x36\x18\xeb\x85\xa8\x59\x5f\x8b\xff\xe2\x78\xc5\x7b\xd9\xd1\xf9\xe8\x59\xc5\xae\x47\xcd\x1a\x67\xf3\x00\xb5\x10\x22\xfe\x79\x97\x67\x2f\xd7\x61\x28\xfe\x04\x00\x00\xff\xff\x2e\x8d\x74\x12\xf4\x02\x00\x00") - -func testImagesLogsGeneratorMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesLogsGeneratorMakefile, - "test/images/logs-generator/Makefile", - ) -} - -func testImagesLogsGeneratorMakefile() (*asset, error) { - bytes, err := testImagesLogsGeneratorMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/logs-generator/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesLogsGeneratorVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesLogsGeneratorVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesLogsGeneratorVersion, - "test/images/logs-generator/VERSION", - ) -} - -func testImagesLogsGeneratorVersion() (*asset, error) { - bytes, err := testImagesLogsGeneratorVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/logs-generator/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesLogsGeneratorLogs_generatorGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x54\xdd\x8e\x9b\x48\x13\xbd\xa6\x9f\xa2\x84\x34\x12\x24\x18\xc8\x7c\xfa\xa2\xd5\x24\x73\xe1\x9d\x4c\xb2\x56\x66\xed\x68\x70\x36\x8a\xa2\x5c\xb4\xa1\x80\x96\x9b\x6e\xb6\x7f\xec\x58\x51\xde\x7d\x55\x60\x8f\xf1\x8e\xb4\x12\x12\x4d\xf7\xa9\x73\xaa\x4e\x75\x91\xbd\x60\x77\xba\x3f\x18\xd1\xb4\x0e\xae\xf3\x57\xaf\x61\xdd\x22\x7c\xf4\x1b\x34\x0a\x1d\x5a\x98\x7b\xd7\x6a\x63\x53\xc6\x1e\x44\x89\xca\x62\x05\x5e\x55\x68\xc0\xb5\x08\xf3\x9e\x97\x2d\xc2\xf1\x24\x81\xbf\xd0\x58\xa1\x15\x5c\xa7\x39\x44\x04\x08\x8f\x47\x61\xfc\x86\x1d\xb4\x87\x8e\x1f\x40\x69\x07\xde\x22\xb8\x56\x58\xa8\x85\x44\xc0\x1f\x25\xf6\x0e\x84\x82\x52\x77\xbd\x14\x5c\x95\x08\x7b\xe1\xda\x41\xe4\x48\x91\xb2\xaf\x47\x02\xbd\x71\x5c\x28\xe0\x50\xea\xfe\x00\xba\x9e\xa2\x80\x3b\xc6\x00\x00\x5a\xe7\xfa\x9b\x2c\xdb\xef\xf7\x29\x1f\xb2\x4c\xb5\x69\x32\x39\xa2\x6c\xf6\xb0\xb8\xbb\x5f\x16\xf7\xb3\xeb\x34\x67\xec\xb3\x92\x68\x2d\x18\xfc\xdb\x0b\x83\x15\x6c\x0e\xc0\xfb\x5e\x8a\x92\x6f\x24\x82\xe4\x7b\xd0\x06\x78\x63\x10\x2b\x70\x9a\xf2\xdc\x1b\xe1\x84\x6a\x12\xb0\xba\x76\x7b\x6e\x90\x55\xc2\x3a\x23\x36\xde\x5d\x18\x74\xca\x4a\x58\x98\x02\xb4\x02\xae\x20\x9c\x17\xb0\x28\x42\xf8\x7d\x5e\x2c\x8a\x84\x7d\x59\xac\xff\x58\x7d\x5e\xc3\x97\xf9\xe3\xe3\x7c\xb9\x5e\xdc\x17\xb0\x7a\x84\xbb\xd5\xf2\xdd\x62\xbd\x58\x2d\x0b\x58\xbd\x87\xf9\xf2\x2b\x7c\x5c\x2c\xdf\x25\x80\xc2\xb5\x68\x00\x7f\xf4\x86\x72\xd7\x06\x04\x59\x87\x55\xca\x0a\xc4\x0b\xf1\x5a\x8f\xc9\xd8\x1e\x4b\x51\x8b\x12\x24\x57\x8d\xe7\x0d\x42\xa3\x77\x68\x94\x50\x0d\xf4\x68\x3a\x61\xa9\x79\x16\xb8\xaa\x98\x14\x9d\x70\xdc\x0d\xdf\xcf\xca\x49\xd9\x8b\x8c\xb1\x9e\x97\x5b\x22\xe9\xb8\x50\x8c\x89\xae\xd7\xc6\x41\xc4\x82\xb0\x96\xbc\x09\xe9\xdd\x39\x7a\x39\xd1\x61\xc8\x58\x10\x6e\x7f\xb3\xa9\xd0\x19\xef\x45\xc7\xcb\x56\x28\x34\x87\xac\xdf\x36\x99\x77\x42\x66\x86\xab\x2a\x3c\x83\xb6\x52\x37\x21\x8b\x19\xdb\x71\x43\xa4\xd4\xce\x3f\xd1\xb5\xba\xb2\x70\x0b\xdf\xbe\x93\x97\xaa\xf9\xc9\x82\x20\xfc\x70\xbf\x0e\x13\x5a\x7c\x5a\x15\xa7\xd5\xe7\x61\xf1\x8b\x05\x8a\x77\x68\x7b\x5e\xe2\xb3\xb0\xad\xdf\xe0\xcc\x1e\xac\xc3\x6e\x0c\xaa\xb0\xe6\x5e\xba\xf1\x43\xd9\x91\xe0\x9c\x81\x14\x0a\xed\x5a\x3b\x2e\xe1\x16\xa8\xc4\x74\xa1\x5c\x14\x4a\xdd\xcc\x86\xa3\x99\xa3\xb3\x30\x81\x3c\x81\x70\xc4\x0d\xfb\xe0\x5a\xee\xc0\xb6\xda\xcb\x0a\x36\x08\x0d\x2a\x34\xdc\x8d\xd7\x8c\x4c\x45\x55\x9d\x2e\xb1\xf1\x2a\x8c\x59\x50\x79\x33\x58\x0f\x70\x92\x7a\x77\xdc\x89\x42\xe3\xd5\xec\x74\x7e\x21\xf6\x14\x74\xc1\x15\x33\x56\x7b\x55\x0e\x4d\x8a\x62\xf8\xc9\x82\x81\xef\x13\x37\x16\xa3\x98\xb1\x40\xd4\xf0\x62\x52\xda\xdb\x5b\xc8\x09\x15\x50\x03\xd2\xf7\xdc\x71\x59\x47\xe1\x42\xed\xb8\x14\x74\xf9\x09\xa3\x7c\xb7\x41\x43\x3a\x43\xe0\x0d\x5c\x55\x61\x32\x65\x89\xc9\xb9\x91\xfa\x29\xab\xff\x26\x3e\xc1\x6e\xe0\x6a\x47\x5c\xa7\xef\x23\xd3\xc9\xb3\x07\xdd\xd8\x68\x22\x74\x81\xfc\xc5\x58\x96\xc1\xca\xbb\xde\x3b\x0b\x93\x9a\xc6\x36\x50\xba\xba\xb1\x34\xc0\xd6\x55\xda\x3b\xf0\x4a\xd4\xda\x74\xf2\x30\x4c\xc8\x89\x68\xf4\xeb\x42\x71\xc2\x25\x94\x4b\xce\x56\xd3\xd5\x7e\xea\xcd\xe0\x6e\x85\x92\x1f\xe0\xe6\xf6\x8c\xc9\x2e\x51\xd1\xd4\x26\x16\x38\x51\x6e\xd1\x50\xc0\x80\x5a\xe2\x7e\x3d\xec\x44\x03\x11\xdd\x05\xac\x69\xf8\x86\xcd\xb4\x70\xba\x8f\x62\x16\x50\xbe\xa2\xa2\xa8\xfc\x0d\x2d\xde\x4e\xca\xa5\x8d\x97\x2f\xcf\x56\x2f\x54\xad\xa3\x49\x39\x0f\x42\x61\x24\xaa\x38\x66\x41\xf0\x76\x76\x24\xbe\x23\x9f\x47\x03\x3f\x1c\xa1\x16\x78\x2f\x2c\x9a\x1d\x9a\x99\x14\x5b\x1c\x24\xc6\xbf\x32\xdf\xa1\xa1\xc9\x97\xa8\x1a\xd7\x92\xb3\xaf\xf2\x1c\xec\xa1\xdb\x68\x69\x9f\xf9\x77\x14\x24\xeb\x62\x18\x07\x90\xb2\xeb\x86\x69\xa6\x1a\x26\xb3\xfd\x8d\x7e\x03\x34\x58\x2a\x92\xa8\xa2\xc9\x49\x1c\x7f\x9f\x4c\x33\x85\x9d\x47\xfb\x5f\x51\xe7\x03\x0a\x62\x41\xaf\xab\x25\xef\x86\x98\x01\x58\x0c\x39\x44\x4f\x41\x8f\x5c\x35\x18\xfd\x2f\x81\xff\x93\x29\xde\x48\x42\xd6\x9d\x4b\x8b\xde\x08\xe5\xea\x28\xa4\x7f\x56\xb6\x7b\x95\x9d\x99\xb3\x2b\x9b\xf5\xba\xa2\x77\x98\x9c\x53\x49\xe0\x28\x16\xb3\xc0\x3a\xee\xbc\x7d\x52\x3d\x2b\x5d\xe7\x79\x02\xaf\xf3\x9c\xfa\x6f\xd0\x79\xa3\x2e\xd5\xae\x2a\xb8\xb2\xc3\x43\x73\x25\xaa\x04\x46\xaf\x12\xf0\x46\x26\x30\xf2\xd2\x7d\xff\x27\x00\x00\xff\xff\x4d\xb3\x58\xc9\xbd\x07\x00\x00") - -func testImagesLogsGeneratorLogs_generatorGoBytes() ([]byte, error) { - return bindataRead( - _testImagesLogsGeneratorLogs_generatorGo, - "test/images/logs-generator/logs_generator.go", - ) -} - -func testImagesLogsGeneratorLogs_generatorGo() (*asset, error) { - bytes, err := testImagesLogsGeneratorLogs_generatorGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/logs-generator/logs_generator.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMetadataConcealmentDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x91\x51\x6f\xd3\x30\x14\x85\xdf\xfd\x2b\x8e\x92\x17\x90\x4a\x32\xf6\xc0\x03\x3c\x85\xae\x13\xd1\x46\x32\x35\x19\x53\x85\xd0\xe4\x3a\xb7\xc9\x15\x89\x1d\xec\x1b\xb2\xfe\x7b\x94\x6e\x93\xa8\x10\x7e\xf4\xfd\x7c\xfc\xf9\x38\xc6\xda\x8d\x47\xcf\x6d\x27\xb8\xbc\x78\xff\x01\x75\x47\xb8\x99\xf6\xe4\x2d\x09\x05\x64\x93\x74\xce\x87\x44\xc5\x2a\xc6\x2d\x1b\xb2\x81\x1a\x4c\xb6\x21\x0f\xe9\x08\xd9\xa8\x4d\x47\xaf\x93\x15\xbe\x91\x0f\xec\x2c\x2e\x93\x0b\xbc\x59\x80\xe8\x65\x14\xbd\xfd\xa4\x62\x1c\xdd\x84\x41\x1f\x61\x9d\x60\x0a\x04\xe9\x38\xe0\xc0\x3d\x81\x9e\x0c\x8d\x02\xb6\x30\x6e\x18\x7b\xd6\xd6\x10\x66\x96\xee\x74\xcd\x4b\x48\xa2\x62\xec\x5e\x22\xdc\x5e\x34\x5b\x68\x18\x37\x1e\xe1\x0e\x7f\x73\xd0\x72\x12\x5e\x56\x27\x32\x7e\x4c\xd3\x79\x9e\x13\x7d\x92\x4d\x9c\x6f\xd3\xfe\x19\x0c\xe9\x6d\xbe\xde\x14\xd5\xe6\xdd\x65\x72\x71\x3a\x72\x6f\x7b\x0a\x01\x9e\x7e\x4d\xec\xa9\xc1\xfe\x08\x3d\x8e\x3d\x1b\xbd\xef\x09\xbd\x9e\xe1\x3c\x74\xeb\x89\x1a\x88\x5b\x7c\x67\xcf\xc2\xb6\x5d\x21\xb8\x83\xcc\xda\x93\x8a\xd1\x70\x10\xcf\xfb\x49\xce\xca\x7a\xb5\xe3\x70\x06\x38\x0b\x6d\x11\x65\x15\xf2\x2a\xc2\xe7\xac\xca\xab\x95\x8a\xf1\x90\xd7\x5f\xca\xfb\x1a\x0f\xd9\x76\x9b\x15\x75\xbe\xa9\x50\x6e\xb1\x2e\x8b\xab\xbc\xce\xcb\xa2\x42\x79\x8d\xac\xd8\xe1\x26\x2f\xae\x56\x20\x96\x8e\x3c\xe8\x69\xf4\x8b\xbf\xf3\xe0\xa5\x46\x6a\x96\xce\x2a\xa2\x33\x81\x83\x7b\x16\x0a\x23\x19\x3e\xb0\x41\xaf\x6d\x3b\xe9\x96\xd0\xba\xdf\xe4\x2d\xdb\x16\x23\xf9\x81\xc3\xf2\x99\x01\xda\x36\x2a\x46\xcf\x03\x8b\x96\xd3\xce\x3f\x8f\x4a\x94\xba\xde\x96\x5f\x11\x8c\xd7\x62\x3a\xa5\xd6\xe5\xdd\x0e\xa6\x23\xf3\xf3\x71\x20\xd1\x8d\x16\xfd\x68\x9c\x35\xa4\xfb\x81\xac\x20\x55\x6a\x53\xd4\xdb\xdd\x5d\x99\x17\x35\xbe\x47\xe9\xff\xd9\xe8\x87\xfa\x13\x00\x00\xff\xff\x3e\xaf\x22\x2c\xa8\x02\x00\x00") - -func testImagesMetadataConcealmentDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesMetadataConcealmentDockerfile, - "test/images/metadata-concealment/Dockerfile", - ) -} - -func testImagesMetadataConcealmentDockerfile() (*asset, error) { - bytes, err := testImagesMetadataConcealmentDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/metadata-concealment/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMetadataConcealmentMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x4f\xe3\x3a\x14\x85\xd7\xcf\xbf\xe2\xa8\x61\xd1\x4a\x25\xe5\xa1\x27\x16\x3c\xa1\x51\xa6\xed\x40\x04\x4a\x46\x49\x01\xb1\xaa\x9c\xe4\x36\xb9\x9a\xc4\xce\xd8\x37\x13\xfa\xef\x47\x29\x20\x0d\x1a\xef\x7c\xcf\xf1\xf1\xe7\xe3\x00\x6b\xdb\x1f\x1d\xd7\x8d\xe0\xf2\xe2\xdf\x2b\xec\x1a\xc2\xfd\x50\x90\x33\x24\xe4\x11\x0d\xd2\x58\xe7\x43\x15\xa8\x00\x0f\x5c\x92\xf1\x54\x61\x30\x15\x39\x48\x43\x88\x7a\x5d\x36\xf4\xa1\x2c\xf1\x44\xce\xb3\x35\xb8\x0c\x2f\x30\x9f\x0c\xb3\x77\x69\xb6\xf8\x5f\x05\x38\xda\x01\x9d\x3e\xc2\x58\xc1\xe0\x09\xd2\xb0\xc7\x81\x5b\x02\xbd\x96\xd4\x0b\xd8\xa0\xb4\x5d\xdf\xb2\x36\x25\x61\x64\x69\x4e\xd7\xbc\x87\x84\x2a\xc0\xcb\x7b\x84\x2d\x44\xb3\x81\x46\x69\xfb\x23\xec\xe1\x4f\x1f\xb4\x9c\x80\xa7\xd5\x88\xf4\xd7\xab\xd5\x38\x8e\xa1\x3e\xc1\x86\xd6\xd5\xab\xf6\xcd\xe8\x57\x0f\xf1\x7a\x9b\xe4\xdb\xf3\xcb\xf0\xe2\x74\xe4\xd1\xb4\xe4\x3d\x1c\xfd\x1c\xd8\x51\x85\xe2\x08\xdd\xf7\x2d\x97\xba\x68\x09\xad\x1e\x61\x1d\x74\xed\x88\x2a\x88\x9d\x78\x47\xc7\xc2\xa6\x5e\xc2\xdb\x83\x8c\xda\x91\x0a\x50\xb1\x17\xc7\xc5\x20\x9f\xca\xfa\xa0\x63\xff\xc9\x60\x0d\xb4\xc1\x2c\xca\x11\xe7\x33\x7c\x8d\xf2\x38\x5f\xaa\x00\xcf\xf1\xee\x2e\x7d\xdc\xe1\x39\xca\xb2\x28\xd9\xc5\xdb\x1c\x69\x86\x75\x9a\x6c\xe2\x5d\x9c\x26\x39\xd2\x6f\x88\x92\x17\xdc\xc7\xc9\x66\x09\x62\x69\xc8\x81\x5e\x7b\x37\xf1\x5b\x07\x9e\x6a\xa4\x6a\xea\x2c\x27\xfa\x04\x70\xb0\x6f\x40\xbe\xa7\x92\x0f\x5c\xa2\xd5\xa6\x1e\x74\x4d\xa8\xed\x2f\x72\x86\x4d\x8d\x9e\x5c\xc7\x7e\xfa\x4c\x0f\x6d\x2a\x15\xa0\xe5\x8e\x45\xcb\x69\xf2\xd7\xa3\x42\xa5\xf2\x6c\x9d\xdf\x94\x0d\x95\x3f\xf6\x1d\x89\xae\xb4\xe8\x7d\x69\x4d\x49\xba\xed\xc8\x88\x8a\xb2\xf5\x1d\xbe\xdc\x40\x77\xd5\xd5\x7f\x6a\x17\x65\xb7\xdb\xdd\xb4\x3f\x9b\xaf\x1f\xb3\x4d\x9c\x2d\xd4\x6d\xfa\x10\x25\xb7\xfb\xa7\x6d\x96\xc7\x69\x32\x69\xad\x16\xf2\x32\x45\xef\x37\x71\x86\xc9\x6c\xac\x54\xec\x70\x36\xf7\x0d\xb5\x2d\xfa\xb1\x5a\x2c\x14\xbd\xf6\xd6\x89\x52\x05\x9b\x6b\xf5\x4f\x18\xae\xb8\xd3\x35\x9d\x0f\xc2\x6d\xe8\x1b\x14\x6c\x70\x36\x9f\x00\x17\x4a\x85\xdf\xef\xd2\xe4\xe5\x7a\x1a\xaa\xdf\x01\x00\x00\xff\xff\xd7\x08\x43\x28\x00\x03\x00\x00") - -func testImagesMetadataConcealmentMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesMetadataConcealmentMakefile, - "test/images/metadata-concealment/Makefile", - ) -} - -func testImagesMetadataConcealmentMakefile() (*asset, error) { - bytes, err := testImagesMetadataConcealmentMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/metadata-concealment/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMetadataConcealmentVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe2\x02\x04\x00\x00\xff\xff\x5d\x96\xa5\x56\x04\x00\x00\x00") - -func testImagesMetadataConcealmentVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesMetadataConcealmentVersion, - "test/images/metadata-concealment/VERSION", - ) -} - -func testImagesMetadataConcealmentVersion() (*asset, error) { - bytes, err := testImagesMetadataConcealmentVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/metadata-concealment/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMetadataConcealmentCheck_metadata_concealmentGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xbc\x58\x6d\x4f\xe3\xb8\x16\xfe\x5c\xff\x8a\x33\x91\xba\xb7\x5d\xa5\x49\x07\x66\xe0\x2e\xab\x6a\xd4\xe5\x65\xb7\x9a\x19\x18\x51\xd8\xb9\xab\xd5\x8a\x71\x93\x93\xc4\xc2\xb5\x83\xed\xb4\x54\x23\xfe\xfb\x95\xf3\x46\x29\xa5\x5b\x5a\x98\x0f\xd0\x36\x39\x7e\xce\x73\x5e\x7d\x6c\xff\x67\x72\x28\xd3\x99\x62\x71\x62\x60\xa7\xfb\x76\x1f\x2e\x12\x84\x8f\xd9\x08\x95\x40\x83\x1a\xfa\x99\x49\xa4\xd2\x1e\x21\x9f\x58\x80\x42\x63\x08\x99\x08\x51\x81\x49\x10\xfa\x29\x0d\x12\x84\xf2\x8d\x0b\x7f\xa2\xd2\x4c\x0a\xd8\xf1\xba\xd0\xb2\x02\x4e\xf9\xca\x69\xff\x4a\x66\x32\x83\x31\x9d\x81\x90\x06\x32\x8d\x60\x12\xa6\x21\x62\x1c\x01\x6f\x03\x4c\x0d\x30\x01\x81\x1c\xa7\x9c\x51\x11\x20\x4c\x99\x49\x72\x25\x25\x84\x47\xfe\x2a\x01\xe4\xc8\x50\x26\x80\x42\x20\xd3\x19\xc8\x68\x5e\x0a\xa8\x21\x04\x00\x20\x31\x26\x3d\xf0\xfd\xe9\x74\xea\xd1\x9c\xa5\x27\x55\xec\xf3\x42\x4a\xfb\x9f\x06\x87\xc7\xa7\xc3\xe3\xce\x8e\xd7\x25\xe4\x52\x70\xd4\x1a\x14\xde\x64\x4c\x61\x08\xa3\x19\xd0\x34\xe5\x2c\xa0\x23\x8e\xc0\xe9\x14\xa4\x02\x1a\x2b\xc4\x10\x8c\xb4\x3c\xa7\x8a\x19\x26\x62\x17\xb4\x8c\xcc\x94\x2a\x24\x21\xd3\x46\xb1\x51\x66\x1e\x38\xa8\x62\xc5\x34\xcc\x0b\x48\x01\x54\x80\xd3\x1f\xc2\x60\xe8\xc0\x6f\xfd\xe1\x60\xe8\x92\xaf\x83\x8b\x3f\xce\x2e\x2f\xe0\x6b\xff\xfc\xbc\x7f\x7a\x31\x38\x1e\xc2\xd9\x39\x1c\x9e\x9d\x1e\x0d\x2e\x06\x67\xa7\x43\x38\x3b\x81\xfe\xe9\x5f\xf0\x71\x70\x7a\xe4\x02\x32\x93\xa0\x02\xbc\x4d\x95\xe5\x2e\x15\x30\xeb\x3a\x0c\x3d\x32\x44\x7c\xa0\x3c\x92\x05\x19\x9d\x62\xc0\x22\x16\x00\xa7\x22\xce\x68\x8c\x10\xcb\x09\x2a\xc1\x44\x0c\x29\xaa\x31\xd3\x36\x78\x1a\xa8\x08\x09\x67\x63\x66\xa8\xc9\x7f\x3f\x32\xc7\x23\x3f\xfb\x84\xa4\x34\xb8\xb6\x20\x63\xca\x04\x21\x6c\x9c\x4a\x65\xa0\x45\x1a\x4e\x34\x36\x0e\x69\x38\x4c\xfa\x4c\x66\x86\x71\xfb\x83\xcb\xd8\x7e\x08\x34\xbe\x8d\x8c\xfd\x2e\xb5\xfd\xaf\x30\xc6\xdb\xd4\x21\x6d\x42\x26\x54\xd9\xf5\x3a\x0b\x02\xd4\xfa\x58\x84\xa9\x64\xc2\x68\xe8\xc1\xdf\xff\x58\xdf\x89\xf8\x3b\x69\x34\x7c\x1f\x8e\x98\x0e\x2c\xf3\x19\x69\x34\x9c\x32\xd0\x6f\xf7\x7e\xf1\x76\xde\xbf\xf3\xca\x4f\xc7\x9d\x7b\x37\x46\x43\x43\x6a\xa8\x17\x4b\x19\x73\xf4\x98\x30\xa8\x04\xe5\x0f\x84\x16\x00\xfc\xb5\x10\xd6\x94\xea\x7a\x6f\xd7\x16\x5c\x13\xd2\x56\x4a\x66\xf0\x73\xf9\x7e\xa3\x45\xfe\xa4\xa0\xe5\xfb\xd0\xe7\x5c\x4e\x31\x84\xfe\x97\x01\x4c\x8a\x2a\xd6\xde\x66\x90\x7e\x85\x39\x44\x35\x61\x01\x02\x0d\x02\x99\x09\x03\x46\x5e\xa3\x00\xac\xe2\xba\x29\x3c\x13\xda\xd8\x0e\xe1\xeb\x02\xbf\x53\xe2\x6b\x3f\xc4\x88\x66\xdc\xf8\xb9\xa2\x8a\xc5\x17\x9b\xd9\xc6\x56\x9d\xc2\x20\x53\x9a\x4d\x10\x6e\x32\x54\x33\x5b\xca\xc3\x7e\xcd\xe7\xf5\xe8\x7c\xa8\x15\xf7\x8c\xca\xb0\x22\xf6\x51\xc8\xa9\x28\xa9\xa4\x54\xd1\xf1\xf6\x1e\x31\x34\xd6\x1f\x28\x37\x3d\x83\xb7\x66\xd3\x94\x58\x80\x9b\x52\x66\xae\x22\xa9\xae\x82\x84\x8a\x18\x7b\x11\xe5\x1a\x5f\x09\xdb\xba\xe7\x27\xc3\xc6\x28\x33\x73\xa5\x31\xe8\x75\x5f\x53\x11\xa7\xda\x5c\xa1\xa1\x71\x2f\xdc\x7d\x17\x8e\x76\x77\x23\xab\xed\x8e\x34\x38\xc6\x34\x98\x0d\x37\xea\x43\x2b\x4b\xdb\xbe\xec\x6c\x53\xae\x23\x34\x74\xfb\x9a\x7d\x40\x65\xb3\x7e\x53\x71\x79\xd1\x62\x7f\xc8\xeb\xc9\x7a\xa2\x41\xbe\x4f\x6f\xc7\xfb\x99\x5d\x64\xc3\x62\x7d\x9e\x45\x1f\x74\x20\x53\xd4\x65\x16\x0a\x69\xc7\xb0\x63\x31\x59\x91\x81\x87\x09\x06\xd7\x60\x12\x6a\xec\xfe\xac\x11\x42\x29\xfe\x63\x20\x46\x03\x74\xae\xdf\x29\xd4\x19\xdf\xbe\xc3\xdd\x37\xb2\xe6\xee\x51\xd1\xca\x00\xc0\xf7\x21\x53\x1c\x45\x20\x43\x0c\x5f\x40\x45\xb3\xfb\xdf\x85\x7e\x69\x55\x8c\x68\x70\xad\x53\x1a\x58\x15\x77\xa4\x11\x51\xc6\x33\x85\x2b\x5c\x73\x96\xcf\x47\x1b\xd4\xc6\xce\xa6\x15\xb1\x53\x17\xc3\x75\x36\xc2\x0e\x8a\xc9\x06\x39\x42\x4d\x39\x25\x6a\xbf\x42\x79\xa1\x44\x7f\x41\xe4\x7f\x07\xf5\x7d\xf8\xf3\x33\xb0\x10\x85\x61\x66\xf6\x92\xb5\x52\x61\xbe\x76\xf9\x6f\xab\xe7\xb9\x2a\x7c\x1f\x4e\xa4\x1a\xb1\x30\x44\xb1\x30\xaa\x30\xdc\x7e\x34\x58\x36\x84\x6c\x07\xd8\xdc\xdf\x69\xee\xbd\x6f\xee\xed\x36\xf7\xdf\xdb\xef\xfb\xbb\xcd\xbd\x5f\x9a\xfb\x7b\xcd\xbd\xf7\x73\x75\x9b\x29\xde\xb9\xef\x0d\xbe\x0f\x97\xe2\x7a\xb1\x97\xc2\x35\xae\x97\x22\x2b\xf9\x68\x39\x46\x93\x30\x11\xf7\xf0\x45\x26\x94\x0f\x59\xc1\xb4\x8a\x4e\xde\x50\xb6\xa6\x39\x57\x30\xaf\x53\x86\x9e\xf7\x3a\x95\xfe\x28\x8b\x7f\x44\xa5\x78\xde\x7a\xd5\x73\x67\xcf\x8f\x51\x26\x82\xfc\x34\xda\x6a\xc3\xf7\xfa\x1c\x09\x07\x3d\xe8\x92\x46\x62\x3f\xc7\x34\xfd\xbb\xd8\x24\xfe\x99\xdf\x2d\x9c\x8a\x4c\xe7\x84\xd3\x89\x54\xce\x01\x7c\x77\x7e\xcf\x79\x3b\x77\xc5\x66\x6c\xcf\xd0\x57\x2e\xa0\x45\x51\x76\x84\x84\x47\xc7\x54\x8b\xc4\x22\x40\xa5\xac\x50\x60\x77\xe6\xcb\xf3\x4f\x2d\x74\x21\x71\x61\xa7\xdb\x75\xc1\x71\xec\x5f\xfb\xd7\x5c\xe6\x4d\x0f\x04\xe3\xf9\xaa\x06\x97\xb1\xf7\x45\x31\x61\xa2\x96\xf3\x55\x49\x11\xdb\x1d\x3b\x95\xd5\xe1\xbd\x39\x39\x80\xe6\xc4\x71\x01\x5d\xbb\xb4\x6d\x97\x54\xd6\xf5\xe0\x2d\x69\x58\x86\x4b\x49\x2e\x99\x21\x56\xd2\x7c\xd7\xdd\x2d\x69\xd6\x89\xf3\x23\xe9\x3e\xda\xd5\xd7\x24\xfb\x7a\x24\xab\xc3\x40\x45\xe9\xf8\x36\xc5\xc0\x60\x38\x34\xd4\x64\x79\x6e\xed\x74\xbb\x64\x19\xc7\x97\xaa\xe7\x90\x69\x3a\xe2\xd8\x29\x78\x74\xea\x89\xda\x99\xcb\xab\xb2\xdd\xd6\x7e\xe8\xdd\xfb\xc1\xf7\x61\x10\xc1\xb7\xa7\x50\xbe\x01\xd3\xa0\xd1\xce\xeb\x60\x51\xdc\x6a\xc3\xb1\x0f\x32\x11\x48\x11\x20\xe5\x18\x42\xb1\xf0\x7e\xa0\x87\x29\xe3\x1c\x14\x9a\x4c\x09\xa0\x36\x16\xb6\x35\xae\x74\x56\xcf\x4a\x3d\x11\xf9\x27\x8e\x5c\x2b\xe3\xbf\x4a\xd9\x0f\x48\x8c\xdb\x13\xa9\xa6\x54\x85\x18\x9e\x48\xf5\x07\xd2\x10\xd5\xaa\x1e\xf3\xbf\x4e\x2d\x6f\xbf\xe5\x3d\x66\x28\xc7\x38\x92\xe1\xac\x63\xf7\xae\x69\x82\xaa\xee\x37\x0f\x67\xfb\x4a\xff\xbd\xf7\x6d\xa5\x00\x8b\x60\x01\xd5\x46\x33\x55\xa8\x31\xbf\xcf\xd8\xaa\x69\x2d\x31\x6f\xeb\x92\x2b\x2e\x75\x17\x38\xaf\xd7\x2c\xa4\xf6\x8e\x6f\x99\x69\x95\xef\xda\xe4\x8e\x90\xca\x49\xba\xf0\x12\x85\xcb\xf3\x4f\xf7\xf7\xc6\x31\x9b\xa0\x80\x24\x67\xae\xcb\x4c\xd5\xf9\x9b\xe2\xb6\xdb\xce\x24\x1e\x29\xea\x03\xcb\xe4\xb9\x90\x87\x52\xe4\xb7\xcb\x4c\x83\x90\xa2\x83\xe3\xd4\xcc\xdc\xc2\x31\xba\x3e\x68\x81\x0d\x1a\x04\x85\xa8\x7e\xbc\x3a\x87\x1d\xb2\x31\xe3\x54\xf1\x99\x6b\x03\x75\x2f\x73\x2a\xcd\x33\x94\x84\x12\xb5\x3d\xd2\x95\xca\x96\xe2\x78\xc5\xd6\x57\x47\x2f\x53\x1c\x8a\xcc\x73\x4b\xfb\xf3\xeb\x70\xaf\x8a\x22\x3e\xac\x4b\x26\x8c\xfb\xd8\x06\x77\x39\xe5\x02\xb7\x6d\x63\x25\x95\x0d\x7b\xc0\x19\x0a\x63\xb3\xe7\xa7\x5c\xc9\x61\xfe\xfb\xfb\x1d\x69\x28\xbc\x71\xab\xcc\xca\x5f\x9d\xe2\xf4\x1c\x6f\x32\xd4\xa6\xe5\xfc\x7e\x7c\xe1\xb8\x76\x3a\x74\x6d\xfe\xb4\xeb\x16\x3a\x97\x4f\x65\x73\x41\xa5\xf2\x0c\x50\x78\x53\x5a\x00\xbd\xd2\x2c\xfb\x50\xa7\xb5\x92\x82\x8a\x77\x24\x5b\x0a\x6f\xd6\x81\x0c\x31\x42\x95\x27\xa9\xf7\x9b\x0c\x67\xde\x21\x97\x1a\x5b\xc5\xca\xfc\x69\xe1\xa1\x43\x19\xa2\x45\x59\xf0\xdb\x1c\x60\x34\x36\xde\xb1\xf5\x48\xd4\x72\x32\x51\xc9\xd5\xe9\x7f\x00\xb1\x34\xd0\x0c\x5d\x98\x52\x61\xbf\x38\xee\x22\xfe\x62\x54\xda\x39\x41\x9b\x02\xb5\x79\xc5\x6d\xba\x77\x8e\x34\xec\x73\xde\xaa\x69\xaf\x63\x29\x5b\x96\xe3\x6f\x7a\xe0\x38\xb9\xf4\x98\x9a\x20\xc1\xb0\x56\x55\xdc\xca\x7b\x9f\xed\xe3\xd6\x92\xd4\x18\x15\x6a\x97\xe8\x7d\xa0\xd8\x6a\xb6\x32\x6f\x4a\xfc\x07\x12\xf3\x3e\x2b\x52\x9d\x85\xf3\x99\xde\xbc\x29\xdd\x96\x77\x87\xc7\x1c\x8a\x4c\x6c\xe5\x54\xda\x75\x9f\x78\xaa\xd4\x9e\x6d\xeb\xfd\xda\x67\x9b\xbb\x96\xb5\x4c\x04\x52\x29\x0c\x0c\xaf\x3b\x09\x86\x4f\x19\x3d\x4f\x66\xb9\xdd\xa5\x1a\xc1\x38\xb9\x23\xff\x0f\x00\x00\xff\xff\x6b\xf2\x86\x74\xd6\x1b\x00\x00") - -func testImagesMetadataConcealmentCheck_metadata_concealmentGoBytes() ([]byte, error) { - return bindataRead( - _testImagesMetadataConcealmentCheck_metadata_concealmentGo, - "test/images/metadata-concealment/check_metadata_concealment.go", - ) -} - -func testImagesMetadataConcealmentCheck_metadata_concealmentGo() (*asset, error) { - bytes, err := testImagesMetadataConcealmentCheck_metadata_concealmentGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/metadata-concealment/check_metadata_concealment.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMounttestDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xc1\x6f\xd3\x30\x14\xc6\xef\xfe\x2b\x3e\x25\x17\x90\x4a\x52\x7a\xe0\x00\xa7\xd0\x75\x22\xda\x48\xa6\x26\x63\xaa\x10\x07\x37\x79\x4d\x9e\x94\xda\xc6\x7e\x21\xeb\x7f\x8f\xd2\x75\x88\x6a\x3e\xfa\xfb\xf9\xf9\xe7\xcf\x31\xd6\xd6\x9d\x3c\x77\xbd\x60\xb5\xfc\xf8\x09\x75\x4f\xb8\x1b\xf7\xe4\x0d\x09\x05\x64\xa3\xf4\xd6\x87\x44\xc5\x2a\xc6\x3d\x37\x64\x02\xb5\x18\x4d\x4b\x1e\xd2\x13\x32\xa7\x9b\x9e\x5e\x93\x05\x7e\x90\x0f\x6c\x0d\x56\xc9\x12\xef\x66\x20\xba\x44\xd1\xfb\x2f\x2a\xc6\xc9\x8e\x38\xea\x13\x8c\x15\x8c\x81\x20\x3d\x07\x1c\x78\x20\xd0\x73\x43\x4e\xc0\x06\x8d\x3d\xba\x81\xb5\x69\x08\x13\x4b\x7f\xbe\xe6\x32\x24\x51\x31\x76\x97\x11\x76\x2f\x9a\x0d\x34\x1a\xeb\x4e\xb0\x87\xff\x39\x68\x39\x0b\xcf\xab\x17\x71\x9f\xd3\x74\x9a\xa6\x44\x9f\x65\x13\xeb\xbb\x74\x78\x01\x43\x7a\x9f\xaf\x37\x45\xb5\xf9\xb0\x4a\x96\xe7\x23\x8f\x66\xa0\x10\xe0\xe9\xf7\xc8\x9e\x5a\xec\x4f\xd0\xce\x0d\xdc\xe8\xfd\x40\x18\xf4\x04\xeb\xa1\x3b\x4f\xd4\x42\xec\xec\x3b\x79\x16\x36\xdd\x02\xc1\x1e\x64\xd2\x9e\x54\x8c\x96\x83\x78\xde\x8f\x72\x55\xd6\xab\x1d\x87\x2b\xc0\x1a\x68\x83\x28\xab\x90\x57\x11\xbe\x66\x55\x5e\x2d\x54\x8c\xa7\xbc\xfe\x56\x3e\xd6\x78\xca\xb6\xdb\xac\xa8\xf3\x4d\x85\x72\x8b\x75\x59\xdc\xe4\x75\x5e\x16\x15\xca\x5b\x64\xc5\x0e\x77\x79\x71\xb3\x00\xb1\xf4\xe4\x41\xcf\xce\xcf\xfe\xd6\x83\xe7\x1a\xa9\x9d\x3b\xab\x88\xae\x04\x0e\xf6\x45\x28\x38\x6a\xf8\xc0\x0d\x06\x6d\xba\x51\x77\x84\xce\xfe\x21\x6f\xd8\x74\x70\xe4\x8f\x1c\xe6\xcf\x0c\xd0\xa6\x55\x31\x06\x3e\xb2\x68\x39\xef\xbc\x79\x54\xa2\xd4\xed\xb6\xfc\x8e\xd0\x78\x2d\x4d\xaf\xd6\xe5\xc3\x0e\x47\x3b\x1a\x11\x0a\x82\x54\x6d\x8a\x7a\xbb\x7b\x28\xf3\xa2\xc6\xcf\x28\xfd\x97\x44\xbf\xd4\xdf\x00\x00\x00\xff\xff\x62\xac\xcd\x37\x84\x02\x00\x00") - -func testImagesMounttestDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesMounttestDockerfile, - "test/images/mounttest/Dockerfile", - ) -} - -func testImagesMounttestDockerfile() (*asset, error) { - bytes, err := testImagesMounttestDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/mounttest/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMounttestMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x3e\x14\xc5\x9f\xff\xfe\x14\x47\x0d\x0f\xad\x54\x52\xfe\x68\xe2\x81\x09\x4d\x59\xda\x41\x04\x4a\xa6\x24\x80\x78\x42\x4e\x72\x9b\x5c\x29\xb1\x3d\xdb\x59\xe8\xb7\x9f\x52\x40\x5a\x35\xbf\xf9\x9e\x73\xaf\x7f\x3e\x37\x40\xac\xcd\xc1\x72\xdb\x79\x5c\x5e\xfc\x7f\x85\xb2\x23\xdc\x8f\x15\x59\x45\x9e\x1c\xa2\xd1\x77\xda\xba\x50\x04\x22\xc0\x03\xd7\xa4\x1c\x35\x18\x55\x43\x16\xbe\x23\x44\x46\xd6\x1d\x7d\x2a\x6b\x3c\x91\x75\xac\x15\x2e\xc3\x0b\x2c\x67\xc3\xe2\x43\x5a\xac\xbe\x8a\x00\x07\x3d\x62\x90\x07\x28\xed\x31\x3a\x82\xef\xd8\x61\xcf\x3d\x81\xde\x6a\x32\x1e\xac\x50\xeb\xc1\xf4\x2c\x55\x4d\x98\xd8\x77\xc7\x67\x3e\x86\x84\x22\xc0\xcb\xc7\x08\x5d\x79\xc9\x0a\x12\xb5\x36\x07\xe8\xfd\xdf\x3e\x48\x7f\x04\x9e\x4f\xe7\xbd\xb9\xde\x6c\xa6\x69\x0a\xe5\x11\x36\xd4\xb6\xdd\xf4\xef\x46\xb7\x79\x48\xe2\x5d\x5a\xec\xce\x2f\xc3\x8b\x63\xcb\xa3\xea\xc9\x39\x58\xfa\x35\xb2\xa5\x06\xd5\x01\xd2\x98\x9e\x6b\x59\xf5\x84\x5e\x4e\xd0\x16\xb2\xb5\x44\x0d\xbc\x9e\x79\x27\xcb\x9e\x55\xbb\x86\xd3\x7b\x3f\x49\x4b\x22\x40\xc3\xce\x5b\xae\x46\x7f\x12\xd6\x27\x1d\xbb\x13\x83\x56\x90\x0a\x8b\xa8\x40\x52\x2c\xf0\x3d\x2a\x92\x62\x2d\x02\x3c\x27\xe5\x5d\xf6\x58\xe2\x39\xca\xf3\x28\x2d\x93\x5d\x81\x2c\x47\x9c\xa5\xdb\xa4\x4c\xb2\xb4\x40\xf6\x03\x51\xfa\x82\xfb\x24\xdd\xae\x41\xec\x3b\xb2\xa0\x37\x63\x67\x7e\x6d\xc1\x73\x8c\xd4\xcc\x99\x15\x44\x27\x00\x7b\xfd\x0e\xe4\x0c\xd5\xbc\xe7\x1a\xbd\x54\xed\x28\x5b\x42\xab\x7f\x93\x55\xac\x5a\x18\xb2\x03\xbb\x79\x99\x0e\x52\x35\x22\x40\xcf\x03\x7b\xe9\x8f\x95\x7f\x3e\x15\x0a\x51\xe4\x71\x71\x33\xe8\x51\x79\x4f\xce\x8b\x28\x8f\xef\xf0\xed\x06\x72\x68\xae\xbe\x88\x32\xca\x6f\x77\xe5\x7c\x3f\x5b\xc6\x8f\xf9\x36\xc9\x57\xe2\x36\x7b\x88\xd2\xdb\xd7\xa7\x5d\x5e\x24\x59\x3a\x6b\xbd\x3c\xb6\x16\x79\xfc\xba\x4d\x72\xcc\x66\xa5\x7d\xc3\x16\x67\x4b\xd7\x51\xdf\xc3\x4c\xcd\x6a\x25\xe8\xcd\x68\xeb\x85\xa8\x58\x5d\x8b\xff\xc2\x70\xc3\x83\x6c\xe9\x7c\xf4\xdc\x87\xae\x43\xc5\x0a\x67\xcb\x99\x67\x25\x44\xf8\xf3\x2e\x4b\x5f\xae\xe7\xa2\xf8\x13\x00\x00\xff\xff\xc1\x47\x9c\x48\xef\x02\x00\x00") - -func testImagesMounttestMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesMounttestMakefile, - "test/images/mounttest/Makefile", - ) -} - -func testImagesMounttestMakefile() (*asset, error) { - bytes, err := testImagesMounttestMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/mounttest/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMounttestVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesMounttestVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesMounttestVersion, - "test/images/mounttest/VERSION", - ) -} - -func testImagesMounttestVersion() (*asset, error) { - bytes, err := testImagesMounttestVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/mounttest/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMounttestMtGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x58\x6d\x6f\xdb\x38\x12\xfe\x6c\xfe\x8a\x39\x01\xdd\x93\x7a\xaa\xac\xe4\x7a\xc9\x6d\x7a\xf9\x90\x26\x69\xcf\xd8\x6e\x52\xc4\xce\x16\x8b\xdd\x45\x40\xcb\x23\x9b\xa8\x44\xaa\x24\x55\xc7\x58\xe4\xbf\x1f\x86\x94\x1c\xf9\x2d\x4d\xd3\xed\x87\x2b\xb0\xce\x4a\xe4\xbc\x3d\x33\x7c\x66\xa8\x7e\x1f\xfe\x31\xae\x45\x31\x81\x42\xc8\xfa\x96\xb1\xfe\x73\x76\xaa\xaa\x85\x16\xd3\x99\x85\xfd\x74\xef\x5f\x30\x9a\x21\xfc\x54\x8f\x51\x4b\xb4\x68\xe0\xa4\xb6\x33\xa5\x4d\xc2\xd8\x3b\x91\xa1\x34\x38\x81\x5a\x4e\x50\x83\x9d\x21\x9c\x54\x3c\x9b\x21\x34\x2b\x31\xfc\x82\xda\x08\x25\x61\x3f\x49\x21\xa4\x0d\x41\xb3\x14\x44\xaf\xd8\x42\xd5\x50\xf2\x05\x48\x65\xa1\x36\x08\x76\x26\x0c\xe4\xa2\x40\xc0\xdb\x0c\x2b\x0b\x42\x42\xa6\xca\xaa\x10\x5c\x66\x08\x73\x61\x67\xce\x48\xa3\x22\x61\xbf\x36\x0a\xd4\xd8\x72\x21\x81\x43\xa6\xaa\x05\xa8\xbc\xbb\x0b\xb8\x65\x0c\x00\x60\x66\x6d\x75\xd4\xef\xcf\xe7\xf3\x84\x3b\x2f\x13\xa5\xa7\xfd\xc2\xef\x32\xfd\x77\x83\xd3\xf3\x8b\xe1\xf9\x8b\xfd\x24\x65\xec\x5a\x16\x68\x0c\x68\xfc\x54\x0b\x8d\x13\x18\x2f\x80\x57\x55\x21\x32\x3e\x2e\x10\x0a\x3e\x07\xa5\x81\x4f\x35\xe2\x04\xac\x22\x3f\xe7\x5a\x58\x21\xa7\x31\x18\x95\xdb\x39\xd7\xc8\x26\xc2\x58\x2d\xc6\xb5\x5d\x01\xa8\xf5\x4a\x18\xe8\x6e\x50\x12\xb8\x84\xe0\x64\x08\x83\x61\x00\xaf\x4f\x86\x83\x61\xcc\x3e\x0c\x46\xff\xbd\xbc\x1e\xc1\x87\x93\xab\xab\x93\x8b\xd1\xe0\x7c\x08\x97\x57\x70\x7a\x79\x71\x36\x18\x0d\x2e\x2f\x86\x70\xf9\x06\x4e\x2e\x7e\x85\x9f\x06\x17\x67\x31\xa0\xb0\x33\xd4\x80\xb7\x95\x26\xdf\x95\x06\x41\xd0\xe1\x24\x61\x43\xc4\x15\xe3\xb9\xf2\xce\x98\x0a\x33\x91\x8b\x0c\x0a\x2e\xa7\x35\x9f\x22\x4c\xd5\x67\xd4\x52\xc8\x29\x54\xa8\x4b\x61\x28\x79\x06\xb8\x9c\xb0\x42\x94\xc2\x72\xeb\x9e\x37\xc2\x49\xd8\xf3\x3e\x63\x15\xcf\x3e\x92\x92\x92\x0b\xc9\x98\x28\x2b\xa5\x2d\x84\xac\x17\xe4\x05\x9f\x06\xf4\xb7\xb4\xf4\x47\xa8\xbe\x50\xb5\x15\x05\x3d\x28\x43\xbf\x66\x61\x32\x5e\xb8\x17\x56\x94\x18\xb0\x88\xb1\xcf\x5c\x93\x74\x6e\x46\x8b\x0a\xdf\x73\x3b\x83\xb5\x7f\xc7\x10\x04\xac\x47\x05\xf3\xb3\x9a\x6c\xd9\x71\xbf\xfe\x1e\x75\xf9\xd0\xfa\xe5\x5c\xa2\xde\xd8\xe0\xd7\x25\xce\xdf\x90\x0a\x6e\x67\xe9\xc1\xcb\x97\x0f\xaf\x1f\x1c\x7c\x61\x3d\x7d\x70\xfd\xf0\xf0\x70\x63\x5d\x23\x9f\xd0\x86\x53\x25\x2d\x4a\xdb\xf1\x72\xeb\xfa\x40\xbe\x53\xaa\x72\xbb\xda\x75\xab\x17\x67\xb5\x76\xb9\x5b\x8b\x6f\xef\xdf\x29\xeb\x8d\x35\xf2\x8f\x97\xf2\xfc\xb6\xc2\xcc\xe2\xa4\xd1\xe3\x37\x58\x5d\x23\xe5\x22\xaf\x65\x06\x42\x0a\x1b\x46\xf0\x27\xeb\x51\x42\x93\xa1\xd5\x42\x4e\x7f\xe1\x3a\xfc\xe1\x3e\x47\x31\x04\xb9\xb9\xb1\x8b\x0a\x83\x18\x02\xfa\xcf\xb9\x62\x15\x54\x5a\x48\xeb\x8a\x26\x37\x40\x1b\xa8\x0c\x83\x68\x8b\xb2\x4e\x42\x49\x9d\x28\xf0\xa6\x54\x93\x07\x14\xd2\x2a\x8c\x85\x35\xa0\xf2\x5d\x1a\xdb\x12\x68\x35\x52\x7d\xef\xd6\x48\xab\x0f\x69\x5b\x16\x4c\xab\x4e\xd1\x8b\xdd\xfa\xd4\xdc\x1d\xaa\xeb\xc1\x19\x1d\x26\x78\x3b\x38\xdb\xa1\x7c\xad\xda\x62\x08\x24\xce\x6f\x9c\x09\x7a\x5e\xb7\x40\xb4\x83\xf4\x3f\xa4\x95\x2a\x01\x72\xad\x4a\x4f\x95\x14\x03\x38\xa1\x2f\xd9\x39\x38\x58\xb5\x73\x70\xf0\x04\x3b\x07\x07\x5f\xb6\x93\xae\xd9\x49\x9f\x62\x27\xfd\x92\x9d\xc3\xc3\xc3\x15\x3b\x87\x87\x87\x5f\x6f\x87\x84\xb6\xd8\xd9\x72\x1a\xdb\x12\xc8\xfc\xab\x75\x53\x4e\xbb\x2b\x7b\xea\x6c\xcd\x26\x67\xee\x11\xfa\xef\x4f\xf3\x9a\x95\x1b\x21\x6f\x0a\xa5\xaa\xc7\x59\x13\x12\x68\xf3\xaa\xd5\x81\xb4\x8d\xc9\x0e\x41\xc4\x10\xb8\xe7\x1b\x47\xc3\x31\x31\x44\x0c\xc1\x15\xbd\x02\x7a\x05\x93\x9a\x7c\x75\x26\x9c\xfd\x56\xdb\x6b\xa5\x0a\xa7\x6e\x3b\x9d\xc4\x10\xb8\x85\x1b\x25\x6f\xb0\x59\xea\x20\x46\x3c\x13\x43\xf0\x9a\xb6\x80\xaa\x2d\x35\x71\xe7\xb1\x92\xd0\x6e\x6f\xa3\x89\x21\xa4\x69\xc1\xe5\xea\xc5\x8b\x6d\xa0\x00\x79\x04\x4a\x16\x8b\x28\x88\xd8\x1d\x63\xfd\x3e\x8c\x68\xb8\xa8\xb4\x9a\x6a\x5e\x52\x8a\x73\x45\x27\xdc\xa8\x12\xc1\xa2\x21\xea\x90\x4b\xdc\xcc\xc2\x58\x2c\x81\x53\x8f\xce\x2c\xb7\x7e\x02\xb0\x33\x24\x45\xa4\xdb\x40\xc5\x8d\x59\xbe\xa6\xe9\x45\x27\x9e\x24\xa9\xf9\x75\x48\xf2\x3d\xd7\x06\xc3\x88\xb1\x5e\xd3\xce\x7a\xa8\x35\x00\x6a\xad\xb4\x7f\x30\x70\x0c\xbf\xfd\xe1\x5e\xfc\x79\xc7\x7a\xb4\xb5\xdf\x87\xd3\x02\xb9\x6f\xb1\x75\xc9\xcd\x47\x30\x0a\xe6\x08\x19\x97\x60\xd0\x02\x97\x8b\x0e\xe9\xcd\x11\xe6\x5c\xda\x84\xf5\x9a\x36\x9a\x5c\x93\x4c\x98\xa6\x69\xda\xa8\xbb\xb8\x1c\x9d\x1f\x79\x26\xd2\x13\x74\x19\x54\x39\xe0\x2d\x66\xb5\x6b\x0b\xcd\xcc\xf4\x99\x6b\xa1\x6a\x43\x53\x57\x49\x27\xa3\x10\x12\x9d\xbc\x0f\x5a\x18\x10\x0e\x68\xa1\x24\x2f\xdc\xd9\xe1\x45\xa1\xe6\x06\x38\x18\x21\xa7\xae\xe2\xbc\xa4\x55\x47\x24\xe8\x84\xf7\x12\x80\xd3\x19\x66\x1f\x1b\xf6\x77\xe4\xaf\x72\xe0\x50\x71\x3b\x73\x5b\xf6\x13\x80\x0f\xee\x4c\x72\x90\x38\xf7\xd5\x4b\x19\x16\x94\x15\x6e\xef\x77\xfe\xb3\xa3\x8c\xdb\x65\xca\xfe\x6e\x96\xc5\x4e\x20\x8d\xd1\x9d\x84\xa5\x0b\xa7\x33\x2e\xa7\x6d\xdd\x76\x21\x70\xf2\x8a\x82\xa0\x17\x19\x61\x3a\x17\x45\x01\xae\x58\x7d\x65\x24\x8c\xb9\xa4\x1d\x83\x6f\x73\xe1\x7d\xb7\x8b\x58\x4f\xe4\x94\x4c\xf8\xdb\x31\x48\x51\x50\xda\xdb\x9c\xf2\xaa\x42\x39\x09\xe9\x29\xa6\x2d\x11\xeb\xdd\x2d\x35\x91\x73\x2e\xde\x0b\xcf\x5b\xe1\x06\xef\xd3\xef\x77\x52\x4f\x74\x4f\xbf\xdf\x4b\x7d\xea\xd4\xa7\xdf\x47\xbd\x23\x77\xfa\x7d\xb2\xfa\x76\xbe\x08\xbb\x83\xc6\x37\x69\xa3\xd9\x22\xec\x0e\x19\xdf\xa4\xcd\xcd\x16\xe1\xca\x94\xf1\x4d\x50\x76\xda\x49\xb8\xa5\x7d\xfd\x55\xba\x7d\xab\x5a\xb7\xd0\x6d\x60\x6b\x8d\x66\x7b\xa3\x78\x82\x3b\x22\x87\x02\xa5\x7b\x1d\x91\x54\xea\x64\x94\x49\xce\x6f\x85\x0d\xf7\x9a\x5d\xed\x73\xda\x76\x84\x33\xcc\x85\xf4\x1c\xfe\x8e\xee\xbe\x10\x9a\x85\xe9\x1b\xcb\x6d\x6e\x92\x59\x04\x2f\x1c\x39\x38\xb2\x92\x75\x39\x46\xed\xef\x4d\x65\x95\x1b\x28\x55\x2d\x89\x19\x32\x25\x8d\xf5\x57\xe7\x11\x2d\xfc\xcc\xa7\x22\x83\x63\x48\x6f\xd3\xbd\x74\x7f\xef\xc7\x1f\x5f\x36\xb3\x73\x43\x1d\x44\x63\x60\x5c\xbb\x8f\x7c\x13\x20\x5f\x45\xee\xf8\x0d\x8e\x69\x62\x77\xce\x6b\xb4\xb5\x96\x14\xbf\x77\x7e\x5c\xe7\x70\x74\x0c\x2d\xbf\x0f\x9d\x93\x37\x96\x1a\x46\x83\xd6\xc6\xaa\xb3\x15\xc3\x0f\xe3\x3a\x8f\x5e\xad\x03\x9a\x97\x36\x79\x4f\xd3\x69\x1e\x06\xde\x0d\x37\xff\xf8\xe0\xc3\x67\x9f\xa2\x23\x78\xf6\xf9\x77\x19\xc4\xe0\xb5\x78\xb0\x5b\xb7\x50\xeb\x25\xf2\xe3\x3a\x4f\x28\x34\x72\x7e\x1d\x87\x75\x4b\x0e\x35\x68\xe9\xff\xd9\xa7\x23\x8f\xe6\xd2\x0e\x65\x0a\xb0\x30\xf8\x08\xc9\x15\xf7\x5a\x27\x9a\x54\x77\xd0\xbb\x6b\xf1\x6f\x0f\xfd\x53\x33\x40\x0a\x84\xcc\x55\xdc\xa2\xad\x8c\x03\x3a\xac\x76\x9d\xa1\x1d\x18\x3b\xa1\x47\x23\xbc\x0a\xc2\xc4\x85\xef\x9a\xe3\x06\x06\xad\x83\x89\x0b\x33\x8a\x76\xc2\xe0\xd8\xea\xff\x18\x86\xf6\x6e\xf6\x38\x1c\x12\x17\xee\x03\x70\x78\xba\xfd\x0b\x0f\xe6\x43\xc7\xf2\xa9\x87\xf2\x69\x48\xb9\x4b\xa9\xbb\x74\xee\x3a\x34\xd7\x62\x12\x6d\x93\x79\xfb\x80\xcc\x5b\x27\xb3\x05\xcd\xf5\x66\xf3\x54\x4c\x9b\x41\xee\xf5\xc2\xa2\x59\xd6\x99\xff\x62\x94\x5c\x35\x36\xbe\xa6\xde\xc8\x2f\x9a\xee\x56\x2f\x60\x4a\x6f\x86\xf7\x08\x4c\x5b\xf9\x9d\xf5\xe7\x03\x0e\xbb\x41\x44\xd1\x06\x29\xf9\xc6\x21\xa4\xb0\x82\x17\xed\x27\x17\x2f\x0a\xc7\xe0\xf9\xee\x05\x8d\x9f\xa8\x97\x03\xf1\xef\x32\xe8\x20\xbd\x32\x21\x75\xa0\x8e\xfd\x05\x56\x99\xe4\x4d\xc3\x79\x5f\x05\xfe\x2a\xdc\xce\xc8\xd2\x42\x0c\xbf\xfd\x31\x5e\x58\x0c\x57\xfd\x8e\xbc\xc9\x47\x66\xa3\xf9\x52\x7a\x3f\xe6\x3f\x36\x0b\xcd\xf3\xb6\x2a\x8b\x76\xd5\x60\x33\x94\xac\xc0\xb3\xfa\x41\x4c\xd0\x85\x72\xc7\x27\xb0\xb1\x52\xc5\x57\x80\xd7\x3e\x52\xda\xd6\x3d\x7c\xf4\xf4\xd3\x06\xb2\xae\x24\x6f\x06\xe0\x6f\x0f\xa3\xbd\x88\x76\x2b\xb4\x49\x6c\x7b\x3d\x6d\xff\x35\xd7\xd4\xa6\x7c\xf5\x62\x24\x4a\xa4\xea\xb0\xa2\xc4\x64\x88\x99\x92\x13\x78\xee\x9f\x5a\x4f\xc2\x15\xbf\x88\x5c\x94\x26\x0a\xd3\x76\x29\x78\xa1\xe6\x61\xf4\xaa\x51\x22\x64\x86\xa1\x5b\x8f\xe0\x3f\xb0\xb4\xd2\x2e\x17\x88\x55\xb8\xdf\x1a\xf1\x26\xdd\xed\x7a\x0b\x4b\x6c\x92\x44\x0b\x1a\x95\xd3\x66\x6d\xae\x14\xe7\xf9\x26\x55\x3c\x33\x54\x98\x0d\xd2\x42\x4e\x5d\x89\xb6\x2a\x97\x65\xea\x1c\x11\xb2\x26\xf0\xee\xd6\x2a\xfe\x01\xb2\xb8\xd7\xb3\x9d\x30\x9c\xc3\x3b\x12\xea\x9c\x17\xf9\x56\x49\x0a\x70\x8d\x56\xdc\xf6\x15\xbf\xae\xe5\xfa\x47\x95\x04\x5a\x23\x47\xf0\xcc\x24\x70\xd5\xc4\x1c\xc4\x6b\xda\x5c\xc8\xdd\x98\x5d\xd0\xfe\x23\xb2\x47\xe0\xfe\x20\xd0\xd1\xbd\x63\xff\x0b\x00\x00\xff\xff\x0c\x3e\x53\x0c\x63\x1a\x00\x00") - -func testImagesMounttestMtGoBytes() ([]byte, error) { - return bindataRead( - _testImagesMounttestMtGo, - "test/images/mounttest/mt.go", - ) -} - -func testImagesMounttestMtGo() (*asset, error) { - bytes, err := testImagesMounttestMtGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/mounttest/mt.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMounttestUserBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\xcd\x41\x0a\x02\x31\x0c\x46\xe1\xbd\x77\xe9\xcc\xa8\x43\x41\xc1\xc3\xd4\xfa\x53\x8a\xa6\x2d\x49\x0a\x1e\x5f\x0c\x7a\x80\x6c\x1f\x7c\xbc\x44\x8f\xb8\xdf\x4a\xe6\xa5\xf6\xf5\x39\xef\xe0\x06\x85\x04\x9c\x10\x14\xa2\xa1\x52\x2a\x90\x95\xfa\x6c\x6a\xc1\xc4\xf5\xb8\x6c\x87\xc4\xe4\x93\x4c\x7f\xe7\x7d\x7e\x85\xd9\x31\x72\xdc\x5f\x70\xe9\x9f\x31\x2f\xe7\xcb\xf6\x76\x69\x13\x66\x3f\x01\x00\x00\xff\xff\x2e\x5b\x6c\x98\x2c\x01\x00\x00") - -func testImagesMounttestUserBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesMounttestUserBaseimage, - "test/images/mounttest-user/BASEIMAGE", - ) -} - -func testImagesMounttestUserBaseimage() (*asset, error) { - bytes, err := testImagesMounttestUserBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/mounttest-user/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMounttestUserDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xcd\x8e\x9b\x30\x14\x85\xf7\x7e\x8a\xa3\xb0\x69\xa5\x94\xfc\x2c\xba\x68\x57\x34\xc3\xb4\x68\x66\x40\x0a\x49\x47\xb3\x74\xe0\x06\xae\x44\x6c\xd7\xbe\x94\xe1\xed\x2b\x98\x8c\xd4\x68\xbc\xf4\xfd\x7c\xfc\xf9\x38\xc2\xce\xba\xd1\x73\xd3\x0a\xb6\xeb\xcd\x57\x1c\x5a\xc2\x43\x7f\x22\x6f\x48\x28\x20\xe9\xa5\xb5\x3e\xc4\x2a\x52\x11\x1e\xb9\x22\x13\xa8\x46\x6f\x6a\xf2\x90\x96\x90\x38\x5d\xb5\xf4\x3e\x59\xe2\x37\xf9\xc0\xd6\x60\x1b\xaf\xf1\x69\x02\x16\xd7\xd1\xe2\xf3\x77\x15\x61\xb4\x3d\x2e\x7a\x84\xb1\x82\x3e\x10\xa4\xe5\x80\x33\x77\x04\x7a\xad\xc8\x09\xd8\xa0\xb2\x17\xd7\xb1\x36\x15\x61\x60\x69\xe7\x6b\xae\x21\xb1\x8a\xf0\x72\x8d\xb0\x27\xd1\x6c\xa0\x51\x59\x37\xc2\x9e\xff\xe7\xa0\x65\x16\x9e\x56\x2b\xe2\xbe\xad\x56\xc3\x30\xc4\x7a\x96\x8d\xad\x6f\x56\xdd\x1b\x18\x56\x8f\xd9\x2e\xcd\xcb\xf4\xcb\x36\x5e\xcf\x47\x8e\xa6\xa3\x10\xe0\xe9\x4f\xcf\x9e\x6a\x9c\x46\x68\xe7\x3a\xae\xf4\xa9\x23\x74\x7a\x80\xf5\xd0\x8d\x27\xaa\x21\x76\xf2\x1d\x3c\x0b\x9b\x66\x89\x60\xcf\x32\x68\x4f\x2a\x42\xcd\x41\x3c\x9f\x7a\xb9\x29\xeb\xdd\x8e\xc3\x0d\x60\x0d\xb4\xc1\x22\x29\x91\x95\x0b\xfc\x48\xca\xac\x5c\xaa\x08\xcf\xd9\xe1\x57\x71\x3c\xe0\x39\xd9\xef\x93\xfc\x90\xa5\x25\x8a\x3d\x76\x45\x7e\x97\x1d\xb2\x22\x2f\x51\xdc\x23\xc9\x5f\xf0\x90\xe5\x77\x4b\x10\x4b\x4b\x1e\xf4\xea\xfc\xe4\x6f\x3d\x78\xaa\x91\xea\xa9\xb3\x92\xe8\x46\xe0\x6c\xdf\x84\x82\xa3\x8a\xcf\x5c\xa1\xd3\xa6\xe9\x75\x43\x68\xec\x5f\xf2\x86\x4d\x03\x47\xfe\xc2\x61\xfa\xcc\x00\x6d\x6a\x15\xa1\xe3\x0b\x8b\x96\x79\xe7\xc3\xa3\x62\xa5\xee\xf7\xc5\xd3\xa4\x9f\x66\x4f\xc9\xcf\x54\x1d\xcb\x74\x8f\xcd\x7a\xbd\x51\xff\x02\x00\x00\xff\xff\xb3\x69\xf0\x70\x65\x02\x00\x00") - -func testImagesMounttestUserDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesMounttestUserDockerfile, - "test/images/mounttest-user/Dockerfile", - ) -} - -func testImagesMounttestUserDockerfile() (*asset, error) { - bytes, err := testImagesMounttestUserDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/mounttest-user/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesMounttestUserVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesMounttestUserVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesMounttestUserVersion, - "test/images/mounttest-user/VERSION", - ) -} - -func testImagesMounttestUserVersion() (*asset, error) { - bytes, err := testImagesMounttestUserVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/mounttest-user/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNautilusBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\xcd\x5d\x0a\x42\x21\x10\xc5\xf1\xf7\xf6\x32\xf7\x5a\x89\x50\xd0\x62\xd4\x0e\x22\x35\x25\x33\xf6\xb1\xfc\x68\xa8\x05\xe8\xdb\x79\xf9\xfd\x4f\xe4\x73\xf0\xa7\x92\x65\xa9\xf7\xf5\xf2\x48\x90\x1b\x3a\x94\xb0\x03\x75\x68\xa7\xca\xb1\x40\x57\xdb\x2f\x24\x85\x3c\x21\x64\xec\xb8\x5d\xdc\x26\x0a\x4f\x70\xe1\x3f\x9e\x7a\xff\x32\x0b\xb4\x96\x83\xbf\x62\x3c\xf1\x83\x16\xd1\xfd\xc1\xbd\xc7\x13\xc6\x2c\xf0\x09\x00\x00\xff\xff\xcf\x73\x31\xc1\x45\x01\x00\x00") - -func testImagesNautilusBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesNautilusBaseimage, - "test/images/nautilus/BASEIMAGE", - ) -} - -func testImagesNautilusBaseimage() (*asset, error) { - bytes, err := testImagesNautilusBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nautilus/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNautilusDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xc1\x72\xda\x30\x10\x86\xef\x7a\x8a\x7f\xf0\xa5\x9d\xa1\x86\x72\xe8\xa1\x3d\xb9\x84\xb4\x9e\x24\x76\x07\x93\x66\x38\x0a\x7b\xb1\x37\x23\x24\x55\x5a\xd7\xe1\xed\x3b\x26\xa4\x03\x13\x9d\x24\xed\xa7\xd5\xa7\x5f\x09\x96\xce\x1f\x03\xb7\x9d\x60\x31\xff\xfc\x05\x9b\x8e\x70\xd7\xef\x28\x58\x12\x8a\xc8\x7a\xe9\x5c\x88\xa9\x4a\x54\x82\x7b\xae\xc9\x46\x6a\xd0\xdb\x86\x02\xa4\x23\x64\x5e\xd7\x1d\xbd\x55\xa6\xf8\x4d\x21\xb2\xb3\x58\xa4\x73\x7c\x18\x81\xc9\xb9\x34\xf9\xf8\x4d\x25\x38\xba\x1e\x07\x7d\x84\x75\x82\x3e\x12\xa4\xe3\x88\x3d\x1b\x02\xbd\xd4\xe4\x05\x6c\x51\xbb\x83\x37\xac\x6d\x4d\x18\x58\xba\xd3\x35\xe7\x26\xa9\x4a\xb0\x3d\xb7\x70\x3b\xd1\x6c\xa1\x51\x3b\x7f\x84\xdb\x5f\x72\xd0\x72\x12\x1e\x47\x27\xe2\xbf\xce\x66\xc3\x30\xa4\xfa\x24\x9b\xba\xd0\xce\xcc\x2b\x18\x67\xf7\xf9\x72\x55\x54\xab\x4f\x8b\x74\x7e\x3a\xf2\x68\x0d\xc5\x88\x40\x7f\x7a\x0e\xd4\x60\x77\x84\xf6\xde\x70\xad\x77\x86\x60\xf4\x00\x17\xa0\xdb\x40\xd4\x40\xdc\xe8\x3b\x04\x16\xb6\xed\x14\xd1\xed\x65\xd0\x81\x54\x82\x86\xa3\x04\xde\xf5\x72\x15\xd6\x9b\x1d\xc7\x2b\xc0\x59\x68\x8b\x49\x56\x21\xaf\x26\xf8\x9e\x55\x79\x35\x55\x09\x9e\xf2\xcd\xcf\xf2\x71\x83\xa7\x6c\xbd\xce\x8a\x4d\xbe\xaa\x50\xae\xb1\x2c\x8b\x9b\x7c\x93\x97\x45\x85\xf2\x16\x59\xb1\xc5\x5d\x5e\xdc\x4c\x41\x2c\x1d\x05\xd0\x8b\x0f\xa3\xbf\x0b\xe0\x31\x46\x6a\xc6\xcc\x2a\xa2\x2b\x81\xbd\x7b\x15\x8a\x9e\x6a\xde\x73\x0d\xa3\x6d\xdb\xeb\x96\xd0\xba\xbf\x14\x2c\xdb\x16\x9e\xc2\x81\xe3\xf8\x99\x11\xda\x36\x2a\x81\xe1\x03\x8b\x96\xd3\xce\xbb\x47\xa5\x4a\xdd\xae\xcb\x87\x51\x7f\x95\x3f\x64\x3f\x56\x6a\x59\xfe\xda\xa2\x93\x83\x99\x59\xdd\x0b\x9b\x3e\xa6\xcf\xbe\xc5\xe5\xe2\x82\x69\xb4\xe8\xf4\x39\x3a\x8b\xff\x33\xf5\x2f\x00\x00\xff\xff\x77\x1e\x88\xbc\x9d\x02\x00\x00") - -func testImagesNautilusDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesNautilusDockerfile, - "test/images/nautilus/Dockerfile", - ) -} - -func testImagesNautilusDockerfile() (*asset, error) { - bytes, err := testImagesNautilusDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nautilus/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNautilusVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesNautilusVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesNautilusVersion, - "test/images/nautilus/VERSION", - ) -} - -func testImagesNautilusVersion() (*asset, error) { - bytes, err := testImagesNautilusVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nautilus/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNautilusHtmlDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\xca\xcc\x4d\x4c\x4f\x55\xb2\x52\x50\xca\x4b\x2c\x2d\xc9\xcc\x29\x2d\xd6\xcb\x2a\x48\x57\xe2\xaa\xe5\x02\x04\x00\x00\xff\xff\xbe\x2a\xe3\xd9\x1e\x00\x00\x00") - -func testImagesNautilusHtmlDataJsonBytes() ([]byte, error) { - return bindataRead( - _testImagesNautilusHtmlDataJson, - "test/images/nautilus/html/data.json", - ) -} - -func testImagesNautilusHtmlDataJson() (*asset, error) { - bytes, err := testImagesNautilusHtmlDataJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nautilus/html/data.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetGitignore = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd2\xcf\x4b\x2d\xe1\x02\x04\x00\x00\xff\xff\xdf\x93\xd0\xbb\x05\x00\x00\x00") - -func testImagesNetGitignoreBytes() ([]byte, error) { - return bindataRead( - _testImagesNetGitignore, - "test/images/net/.gitignore", - ) -} - -func testImagesNetGitignore() (*asset, error) { - bytes, err := testImagesNetGitignoreBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/net/.gitignore", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x0a\x10\x00\x00\xff\xff\xe5\x8d\xa8\xc0\x5c\x00\x00\x00") - -func testImagesNetBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesNetBaseimage, - "test/images/net/BASEIMAGE", - ) -} - -func testImagesNetBaseimage() (*asset, error) { - bytes, err := testImagesNetBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/net/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x4d\x6f\x9c\x3c\x14\x85\xf7\xfe\x15\x47\x83\x14\xbd\xaf\x34\x81\x34\x8b\x2e\xda\x15\x99\x90\x06\x25\x81\x16\x66\x1a\x65\x15\x19\xb8\x03\x57\x65\x6c\xc7\x1f\x25\xf3\xef\x2b\x48\x22\x75\x54\x76\xf8\x3e\x3e\x7e\x7c\x1c\x61\xa3\xcd\xd1\x72\x3f\x78\x5c\x5e\x7c\xfa\x8c\xed\x40\xb8\x0b\x0d\x59\x45\x9e\x1c\xd2\xe0\x07\x6d\x5d\x2c\x22\x11\xe1\x9e\x5b\x52\x8e\x3a\x04\xd5\x91\x85\x1f\x08\xa9\x91\xed\x40\x1f\x93\x35\x7e\x92\x75\xac\x15\x2e\xe3\x0b\xfc\x37\x03\xab\xf7\xd1\xea\xff\xaf\x22\xc2\x51\x07\x1c\xe4\x11\x4a\x7b\x04\x47\xf0\x03\x3b\xec\x79\x24\xd0\x6b\x4b\xc6\x83\x15\x5a\x7d\x30\x23\x4b\xd5\x12\x26\xf6\xc3\x72\xcc\x7b\x48\x2c\x22\x3c\xbd\x47\xe8\xc6\x4b\x56\x90\x68\xb5\x39\x42\xef\xff\xe6\x20\xfd\x22\x3c\x7f\x83\xf7\xe6\x4b\x92\x4c\xd3\x14\xcb\x45\x36\xd6\xb6\x4f\xc6\x37\xd0\x25\xf7\xf9\x26\x2b\xea\xec\xfc\x32\xbe\x58\xb6\xec\xd4\x48\xce\xc1\xd2\x4b\x60\x4b\x1d\x9a\x23\xa4\x31\x23\xb7\xb2\x19\x09\xa3\x9c\xa0\x2d\x64\x6f\x89\x3a\x78\x3d\xfb\x4e\x96\x3d\xab\x7e\x0d\xa7\xf7\x7e\x92\x96\x44\x84\x8e\x9d\xb7\xdc\x04\x7f\x52\xd6\x87\x1d\xbb\x13\x40\x2b\x48\x85\x55\x5a\x23\xaf\x57\xb8\x4a\xeb\xbc\x5e\x8b\x08\x8f\xf9\xf6\xb6\xdc\x6d\xf1\x98\x56\x55\x5a\x6c\xf3\xac\x46\x59\x61\x53\x16\xd7\xf9\x36\x2f\x8b\x1a\xe5\x0d\xd2\xe2\x09\x77\x79\x71\xbd\x06\xb1\x1f\xc8\x82\x5e\x8d\x9d\xfd\xb5\x05\xcf\x35\x52\x37\x77\x56\x13\x9d\x08\xec\xf5\x9b\x90\x33\xd4\xf2\x9e\x5b\x8c\x52\xf5\x41\xf6\x84\x5e\xff\x26\xab\x58\xf5\x30\x64\x0f\xec\xe6\xc7\x74\x90\xaa\x13\x11\x46\x3e\xb0\x97\x7e\x59\xf9\xe7\x52\xb1\x10\x37\x55\xf9\x30\xeb\x67\xf9\x43\xfa\x2d\x13\x62\x53\x95\x75\xfd\x7c\xb5\xcb\xef\xaf\x9f\x37\xe5\xf7\x27\xbc\xd0\x21\x9c\xff\xc8\x1e\x76\x69\xb5\xb9\x3d\x77\x73\x56\x8b\x24\x38\x9b\x34\xac\x12\x21\x16\x48\x91\x47\xa2\xc8\x8b\x6a\x57\x40\x9a\x5f\x08\xa6\x93\x9e\x70\x76\xb6\xfc\xc9\xae\x43\x1b\xec\x28\xfe\x04\x00\x00\xff\xff\x17\xf3\x8e\x7e\xba\x02\x00\x00") - -func testImagesNetDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesNetDockerfile, - "test/images/net/Dockerfile", - ) -} - -func testImagesNetDockerfile() (*asset, error) { - bytes, err := testImagesNetDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/net/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x3e\x14\xc5\x9f\xff\xfe\x14\x47\x0d\x0f\xad\x54\x52\xfe\x68\xe2\x81\x09\x4d\x59\xdb\x41\x04\x4a\xa6\x24\x80\x78\x42\x4e\x72\x9b\x5c\x29\xb5\x33\xfb\x66\xa1\xdf\x7e\x4a\x01\x69\xd5\xfc\xe6\x7b\x8e\x8f\x7f\x3e\x0e\xb0\xb6\xfd\xc1\x71\xd3\x0a\x2e\x2f\xfe\xbf\x42\xd1\x12\xee\x87\x92\x9c\x21\x21\x8f\x68\x90\xd6\x3a\x1f\xaa\x40\x05\x78\xe0\x8a\x8c\xa7\x1a\x83\xa9\xc9\x41\x5a\x42\xd4\xeb\xaa\xa5\x4f\x65\x89\x27\x72\x9e\xad\xc1\x65\x78\x81\xf9\x64\x98\x7d\x48\xb3\xc5\x57\x15\xe0\x60\x07\xec\xf5\x01\xc6\x0a\x06\x4f\x90\x96\x3d\x76\xdc\x11\xe8\xad\xa2\x5e\xc0\x06\x95\xdd\xf7\x1d\x6b\x53\x11\x46\x96\xf6\x78\xcd\x47\x48\xa8\x02\xbc\x7c\x44\xd8\x52\x34\x1b\x68\x54\xb6\x3f\xc0\xee\xfe\xf6\x41\xcb\x11\x78\x5a\xad\x48\x7f\xbd\x5a\x8d\xe3\x18\xea\x23\x6c\x68\x5d\xb3\xea\xde\x8d\x7e\xf5\x10\xaf\xb7\x49\xbe\x3d\xbf\x0c\x2f\x8e\x47\x1e\x4d\x47\xde\xc3\xd1\xaf\x81\x1d\xd5\x28\x0f\xd0\x7d\xdf\x71\xa5\xcb\x8e\xd0\xe9\x11\xd6\x41\x37\x8e\xa8\x86\xd8\x89\x77\x74\x2c\x6c\x9a\x25\xbc\xdd\xc9\xa8\x1d\xa9\x00\x35\x7b\x71\x5c\x0e\x72\x52\xd6\x27\x1d\xfb\x13\x83\x35\xd0\x06\xb3\x28\x47\x9c\xcf\xf0\x3d\xca\xe3\x7c\xa9\x02\x3c\xc7\xc5\x5d\xfa\x58\xe0\x39\xca\xb2\x28\x29\xe2\x6d\x8e\x34\xc3\x3a\x4d\x36\x71\x11\xa7\x49\x8e\xf4\x07\xa2\xe4\x05\xf7\x71\xb2\x59\x82\x58\x5a\x72\xa0\xb7\xde\x4d\xfc\xd6\x81\xa7\x1a\xa9\x9e\x3a\xcb\x89\x4e\x00\x76\xf6\x1d\xc8\xf7\x54\xf1\x8e\x2b\x74\xda\x34\x83\x6e\x08\x8d\xfd\x4d\xce\xb0\x69\xd0\x93\xdb\xb3\x9f\x3e\xd3\x43\x9b\x5a\x05\xe8\x78\xcf\xa2\xe5\x38\xf9\xe7\x51\xa1\x52\x79\xb6\xce\x6f\x0c\x89\x8a\xb2\xf5\x1d\xbe\xdd\x40\xef\xeb\xab\x2f\xaa\x88\xb2\xdb\x6d\x31\xed\xcf\xe6\xeb\xc7\x6c\x13\x67\x0b\x75\x9b\x3e\x44\xc9\xed\xeb\xd3\x36\xcb\xe3\x34\x99\xb4\x4e\x0b\x79\x99\x32\x5e\x37\x71\x86\xc9\x6c\xac\xd4\xec\x70\x36\xf7\x2d\x75\x1d\xfa\xb1\x5e\x2c\x14\xbd\xf5\xd6\x89\x52\x25\x9b\x6b\xf5\x5f\x18\xae\x78\xaf\x1b\x3a\x1f\x84\xbb\xd0\xb7\x28\xd9\xe0\x6c\x3e\x91\x2c\x94\x0a\x7f\xde\xa5\xc9\xcb\xf5\x34\x54\x7f\x02\x00\x00\xff\xff\x73\xb5\x78\x02\xe9\x02\x00\x00") - -func testImagesNetMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesNetMakefile, - "test/images/net/Makefile", - ) -} - -func testImagesNetMakefile() (*asset, error) { - bytes, err := testImagesNetMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/net/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesNetVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesNetVersion, - "test/images/net/VERSION", - ) -} - -func testImagesNetVersion() (*asset, error) { - bytes, err := testImagesNetVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/net/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetCommonCommonGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x4f\x4f\xf4\x36\x10\xc6\xcf\xf8\x53\x3c\xda\x13\xa0\x25\xa1\xa8\xa7\xf6\xb4\x05\xaa\xa6\xa0\xac\xb4\x59\x8a\x38\x7a\x9d\xd9\xc4\x22\xb1\xdd\xf1\x98\x10\x21\xbe\xfb\xab\x84\xe5\xdf\xfb\xde\x12\xcd\xe3\xdf\xfc\x66\xec\xfc\x54\x5d\xfa\x30\xb2\x6d\x5a\xc1\xc5\xf9\x6f\xbf\x63\xdb\x12\x6e\xd2\x8e\xd8\x91\x50\xc4\x2a\x49\xeb\x39\x66\x4a\xdd\x5a\x43\x2e\x52\x8d\xe4\x6a\x62\x48\x4b\x58\x05\x6d\x5a\xc2\xa1\xb2\xc4\x7f\xc4\xd1\x7a\x87\x8b\xec\x1c\xc7\x53\x60\x71\x28\x2d\x4e\xfe\x54\xa3\x4f\xe8\xf5\x08\xe7\x05\x29\x12\xa4\xb5\x11\x7b\xdb\x11\xe8\xd9\x50\x10\x58\x07\xe3\xfb\xd0\x59\xed\x0c\x61\xb0\xd2\xce\x4d\x0e\x88\x4c\x3d\x1c\x00\x7e\x27\xda\x3a\x68\x18\x1f\x46\xf8\xfd\xd7\x14\xb4\x28\x05\x00\xad\x48\xf8\x23\xcf\x87\x61\xc8\xf4\x6c\x99\x79\x6e\xf2\xee\x2d\x15\xf3\xdb\xe2\xf2\xba\xac\xae\xcf\x2e\xb2\x73\xa5\xee\x5c\x47\x31\x82\xe9\xff\x64\x99\x6a\xec\x46\xe8\x10\x3a\x6b\xf4\xae\x23\x74\x7a\x80\x67\xe8\x86\x89\x6a\x88\x9f\x3c\x07\xb6\x62\x5d\xb3\x44\xf4\x7b\x19\x34\x93\xaa\x6d\x14\xb6\xbb\x24\xdf\x16\xf4\x6e\x65\x23\xbe\x06\xbc\x83\x76\x58\xac\x2a\x14\xd5\x02\x7f\xad\xaa\xa2\x5a\xaa\xfb\x62\xfb\xcf\xfa\x6e\x8b\xfb\xd5\x66\xb3\x2a\xb7\xc5\x75\x85\xf5\x06\x97\xeb\xf2\xaa\xd8\x16\xeb\xb2\xc2\xfa\x6f\xac\xca\x07\xdc\x14\xe5\xd5\x12\x64\xa5\x25\x06\x3d\x07\x9e\xdc\x3d\xc3\x4e\xab\xa3\x3a\x53\x15\xd1\xb7\xe6\x7b\xff\x26\x13\x03\x19\xbb\xb7\x06\x9d\x76\x4d\xd2\x0d\xa1\xf1\x4f\xc4\xce\xba\x06\x81\xb8\xb7\x71\xba\xbc\x08\xed\x6a\xd5\xd9\xde\x8a\x96\xf9\xff\x97\x71\x32\x75\x9a\x2b\x15\xb4\x79\x9c\x20\xc6\xf7\xbd\x77\x4a\xd9\x3e\x78\x16\x2c\x3a\xdf\x2c\x94\xca\x73\x6c\x92\x73\xc4\xd3\xec\x1a\xa6\xb3\xe4\x64\xd2\x8c\xc4\x4f\x13\xce\x83\x93\xcb\x94\x8c\x81\x3e\x92\x4e\x88\xf7\xda\x10\x5e\xd4\x51\x9e\xa3\xa4\x61\x1d\xde\x1c\x98\x24\xf1\xe4\x06\x47\x03\xa8\x0f\x32\xc2\x1f\x6a\x51\x38\x19\x49\x4c\x13\x74\x47\x08\x3e\xa4\x4e\x0b\xd5\x33\x64\x37\x62\xcf\xbe\x9f\xfd\xff\xad\xd6\x25\xce\xde\xcf\x69\x6e\x52\x4f\x4e\x32\x75\xf4\xd9\xe9\xf8\xe4\x53\xe3\xe5\x75\x26\x6c\x92\x9b\x4f\xff\x3c\xc3\x12\xa2\x1f\xa7\xe5\x59\xf7\xee\x92\x61\x3b\xbd\x6a\x7a\x26\x93\x64\xbe\x85\x99\x20\x14\x05\xc6\xd7\x94\xa9\xa3\x4d\x72\xc7\x9d\x6f\x1a\x62\x9c\x76\xbe\xc9\x6e\xe7\xef\xe5\xc7\x34\x5f\xba\x9f\x80\x98\x3d\xab\x57\xf5\x23\x00\x00\xff\xff\xb0\x3a\x4e\xbc\xa7\x03\x00\x00") - -func testImagesNetCommonCommonGoBytes() ([]byte, error) { - return bindataRead( - _testImagesNetCommonCommonGo, - "test/images/net/common/common.go", - ) -} - -func testImagesNetCommonCommonGo() (*asset, error) { - bytes, err := testImagesNetCommonCommonGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/net/common/common.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x56\x51\x6f\xdb\x38\x12\x7e\x16\x7f\xc5\x1c\x0f\xed\x4a\x8d\x22\xa5\xb9\x3d\x5c\xe1\x6d\x0a\xb8\xd9\x04\xcd\x6d\x9a\x04\x76\xba\xc5\xa2\xed\x03\x2d\x8d\x65\x9e\x65\x52\x25\xa9\xb8\x46\x2f\xff\xfd\x30\xa4\x64\xcb\x49\xae\x77\xc0\x3e\xd9\x14\xc9\x99\x6f\xbe\x99\xf9\x86\xf9\x0b\x76\xaa\x9b\x8d\x91\xd5\xc2\xc1\xf1\xd1\xcb\x9f\xe1\x76\x81\xf0\x5b\x3b\x43\xa3\xd0\xa1\x85\x71\xeb\x16\xda\xd8\x8c\xb1\x4b\x59\xa0\xb2\x58\x42\xab\x4a\x34\xe0\x16\x08\xe3\x46\x14\x0b\x84\x6e\x27\x85\xdf\xd1\x58\xa9\x15\x1c\x67\x47\x10\xd3\x01\xde\x6d\xf1\xe4\x17\xb6\xd1\x2d\xac\xc4\x06\x94\x76\xd0\x5a\x04\xb7\x90\x16\xe6\xb2\x46\xc0\x6f\x05\x36\x0e\xa4\x82\x42\xaf\x9a\x5a\x0a\x55\x20\xac\xa5\x5b\x78\x27\x9d\x89\x8c\xfd\xd1\x19\xd0\x33\x27\xa4\x02\x01\x85\x6e\x36\xa0\xe7\xc3\x53\x20\x1c\x63\x00\x00\x0b\xe7\x9a\x51\x9e\xaf\xd7\xeb\x4c\x78\x94\x99\x36\x55\x5e\x87\x53\x36\xbf\xbc\x38\x3d\xbb\x9a\x9e\x1d\x1e\x67\x47\x8c\x7d\x50\x35\x5a\x0b\x06\xbf\xb6\xd2\x60\x09\xb3\x0d\x88\xa6\xa9\x65\x21\x66\x35\x42\x2d\xd6\xa0\x0d\x88\xca\x20\x96\xe0\x34\xe1\x5c\x1b\xe9\xa4\xaa\x52\xb0\x7a\xee\xd6\xc2\x20\x2b\xa5\x75\x46\xce\x5a\xb7\x47\x50\x8f\x4a\x5a\x18\x1e\xd0\x0a\x84\x02\x3e\x9e\xc2\xc5\x94\xc3\xdb\xf1\xf4\x62\x9a\xb2\x8f\x17\xb7\xef\xae\x3f\xdc\xc2\xc7\xf1\x64\x32\xbe\xba\xbd\x38\x9b\xc2\xf5\x04\x4e\xaf\xaf\x7e\xbd\xb8\xbd\xb8\xbe\x9a\xc2\xf5\x39\x8c\xaf\xfe\x80\xdf\x2e\xae\x7e\x4d\x01\xa5\x5b\xa0\x01\xfc\xd6\x18\xc2\xae\x0d\x48\xa2\x0e\xcb\x8c\x4d\x11\xf7\x9c\xcf\x75\x00\x63\x1b\x2c\xe4\x5c\x16\x50\x0b\x55\xb5\xa2\x42\xa8\xf4\x1d\x1a\x25\x55\x05\x0d\x9a\x95\xb4\x94\x3c\x0b\x42\x95\xac\x96\x2b\xe9\x84\xf3\xeb\x47\xe1\x64\xec\x45\xce\x58\x23\x8a\x25\x19\x59\x09\xa9\x18\x93\xab\x46\x1b\x07\x31\x8b\xf8\x6c\xe3\xd0\x72\x16\x71\x54\x85\x2e\xa5\xaa\xf2\x7f\x59\xad\xe8\xc3\xbc\x16\x95\xff\x5d\x39\xfa\x91\x3a\x97\xba\x75\xb2\xa6\x45\xad\xfd\x96\x42\x97\x53\xee\xe8\xbf\xf6\x56\x88\x36\x55\x59\xce\x58\xc4\x97\xaf\x6c\x26\x75\xbe\xdc\xd6\x67\xee\xd0\xba\x5c\xae\x44\x85\x36\xa7\xbb\x85\x5e\xad\x82\xb3\xff\x7d\x56\x09\xc7\x59\xc2\x98\xdb\x34\x08\xa6\x55\x0a\xcd\x7b\xd1\xc0\x4a\x34\x9f\x82\xd3\x2f\xc1\x5a\x36\xf1\x7b\xbb\x83\x13\xfc\xda\xa2\x75\xff\x9c\x5e\x5f\x81\x75\xa6\x2d\x1c\x7c\x67\x51\xb0\x00\x10\xee\xb2\x48\x37\x81\x3f\xa9\x1c\x9a\xb9\x28\xf0\xfb\x3d\xbb\x67\xec\x4e\x18\xa2\x29\xcf\x81\xe8\xb0\xdb\xf4\x90\x2f\xa1\x4a\xa8\xa5\xc2\x0c\x28\x89\xad\x25\x7e\x85\xa9\x2c\xcc\xb0\xd6\x6b\x3a\xea\x2f\x96\x68\x0b\x23\x83\xf9\x8c\x45\xc1\xce\x0e\x48\x34\x45\x73\x87\xb0\x43\x12\x4d\x1e\x40\x8b\xae\x3b\x6c\xfd\x87\x7b\x6f\x37\x44\x60\xa9\x5c\x05\xd1\x00\x73\xa3\x57\xdd\x57\x50\x62\x85\x54\xfe\xdd\x52\x2a\xeb\xa8\x51\xb3\x3e\x70\x0b\x27\xb0\x12\x4b\x9c\xf4\x44\xc6\xc9\x96\xdc\x5a\x57\xd7\xad\x6b\x5a\x37\x40\x39\x03\x5f\x28\xd9\xdb\x76\x3e\x47\x43\xcc\xcc\x5b\x55\xf8\x72\x8a\x13\x3a\x20\x95\x74\xe7\x14\x5a\x9c\xb0\xa8\xd6\x55\x36\xc5\x6e\x4d\x8b\x6e\x07\xfe\x4d\xc6\xb3\x4b\xbb\xd0\xc6\x91\x9a\x24\x8c\x45\x72\x1e\xb8\xcd\x02\x11\x27\x27\xc0\xb9\x27\x46\x7b\x10\x29\xa0\x31\x30\x3a\x01\xfc\x86\x45\xeb\x3a\xc4\x71\xb8\x12\x16\x69\x67\xa0\xe3\x29\x61\x11\x19\xa5\x6b\x27\x27\xa0\x64\xed\xad\x45\xf3\x95\xcb\x6e\x8c\x54\x2e\xe6\xc1\xf2\xe8\xb3\xfa\xac\x38\x1c\x40\x58\x66\xb3\x6c\xea\x09\x8e\x13\xb2\x10\x69\x9b\x9d\x7d\x93\x2e\x3e\xa2\xd5\x3d\x60\x6d\x31\x18\xa2\x10\xbc\xa1\x79\xcc\xcf\x8c\xd1\x66\x04\xcf\xee\xb8\xc7\x99\xfc\x19\x47\x2f\xbd\x23\x36\xf4\x45\xcd\x95\xbd\x13\xaa\xac\xf1\xbc\x55\x45\xcc\x73\xd3\xaa\x9c\xa7\xb0\xf0\xdf\x26\xdb\xea\xa6\xab\x43\x5c\x44\x0c\x49\x85\x25\x4e\x0d\x69\x98\x87\x38\x20\xba\xbf\x71\x2e\x9c\xa8\x63\xef\xe8\x52\x5a\x87\x6a\xac\x4a\x7f\x20\x1e\x1c\x4e\x89\x46\x42\x7b\xbf\x4d\xfd\x20\xe1\x04\xb5\xc6\x4a\xd4\x93\xae\xb6\x46\x94\x43\x16\x51\xb3\x2c\x69\x61\x84\xaa\x70\x5b\xb0\x14\xd8\xde\xf1\x83\x13\xe0\x40\xfc\x2c\x7d\x6d\x93\xdf\x8e\xa1\xdf\x85\x89\x59\x14\x3d\xdf\x83\xc2\x7d\x50\x3c\x05\xce\x53\x16\x45\x7c\x5c\x96\x5e\x56\xa9\x1f\xbd\xae\x39\x0d\x33\xa9\xbc\xfc\xc7\x98\x55\x19\xbc\x3c\xfe\x47\x76\x94\x1d\x65\x2f\x47\xaf\x8e\x5e\x1d\x25\xd4\xb0\x8e\x46\x42\x18\x6b\x6b\x59\xd7\xc0\x0f\x28\x15\xdc\xb4\xca\xf7\xb7\x42\xb7\xd6\x66\x09\xa4\x42\xbe\x7f\x7a\x26\x57\xba\xec\x23\x01\x61\x10\x9c\x91\x55\x85\x34\x88\xdc\xc2\xe8\xb6\x5a\xf4\x96\xde\xdd\xde\xde\xf8\x29\x85\xd6\xd9\x8c\x27\x3f\x88\xab\xaf\x62\x1e\xec\xee\x22\xeb\x94\xc0\xe9\xbe\xf8\x21\x16\x77\x42\xd6\x34\xea\x46\xfc\x60\x48\xe2\x01\x4f\x7e\xe8\xa3\xeb\x8d\x14\x78\xa7\x74\x3b\x2f\x5e\x19\x7b\xfd\x73\xda\xc7\x1f\xac\x6e\x2d\xde\x08\x63\x31\xde\xeb\xd6\x0e\x5b\x68\xd7\xe7\xcf\xff\x4b\x0f\x6f\x2b\x6c\x1e\xf3\xf7\xad\x75\x60\xd1\xf5\xe3\xf0\xb0\xa3\x51\x1b\x38\xb4\x21\xb5\x16\x11\x0e\x0f\x17\x58\x37\x7c\xaf\xd8\x1e\x48\xd5\x40\xff\xbf\x0f\xb4\x30\xa8\x9e\xb4\xf0\xba\x59\x56\x6f\x0e\x5f\x93\xc2\xbc\x39\x7c\xdd\x8f\xd2\x37\xa4\x7e\xe8\x5a\xa3\x76\xf7\x09\x23\x57\xc2\x1d\x16\xb5\xb6\xb8\x16\x92\xfe\x49\x54\x8e\x8f\x40\x09\x97\x5d\xe1\xfa\x94\x76\x3e\x0a\xe9\x4e\xfd\x46\x9c\xa4\x8f\xef\x84\xe2\x78\xe2\x8e\xe7\xc3\xf8\x3b\xbb\x68\xf6\x95\xcc\x83\x0e\xd2\x9e\x82\x11\xeb\x7d\xb5\x4f\x20\xde\xea\xb1\x97\x18\x6d\x92\xdd\xfc\x4a\x41\x87\x06\x0b\x45\xf0\x89\x6c\x7d\xf1\x49\xd2\xcb\xa0\xa1\x9d\xb1\xed\x19\x42\xd7\x79\x88\x07\x42\x39\x3a\x01\x9a\xfb\xd9\x07\xb5\x12\xc6\x2e\x44\x1d\x7f\xfa\x42\x8a\x1f\xef\x00\x25\x69\x5f\x24\xc9\x2f\xfe\xce\x5f\x06\xe2\xda\xf1\xba\x85\xfa\xfd\x3e\x05\xd2\x41\xaf\x8f\xf3\x98\x5f\xa8\x3b\x51\xcb\x72\x5b\x66\x54\x73\xfb\xb2\x79\xcf\x1e\x48\x58\xe7\x76\x04\xcf\x0e\xe8\x58\xef\x9b\x6d\x27\x03\x81\x1e\x38\x0c\xd7\x2b\x34\xdd\x77\x8a\x34\x7e\xde\x4b\x6e\x0a\xfc\xaf\xc0\xd3\x27\xe6\x4f\x8f\xbd\x1f\x37\x1d\x4f\x93\x56\xc5\xc1\xde\xc0\xb7\x47\xf9\xff\xc6\x1a\x0c\x8d\xe0\xa7\x67\x77\x3f\xed\x95\x76\xef\x23\xa1\x8a\xc8\xf3\x47\x62\xde\x7d\xa0\xb9\xde\x09\x88\xe7\xab\xef\xcd\x7d\x6d\xca\x42\x4d\x3d\xb4\x11\xaf\xfd\xab\x3a\x9b\xa0\x6d\xb4\xb2\xf8\xd1\x48\x47\xa1\x18\x78\xd1\x7d\x0f\x73\xc3\x6b\xf7\x80\xf5\x47\x58\x7c\x8e\x5e\x18\x62\xaa\x35\xf5\x8d\x30\xce\x57\x53\xf7\xd0\xcb\xa6\x4d\x2d\x5d\x6c\xb2\x0f\x93\xcb\xec\x46\xb8\x45\x0a\x3c\xa7\xde\x95\x73\xa8\x51\xc5\xfd\x95\x84\xaa\xe5\x6f\xbb\x99\xe6\xb9\x8a\xd7\x81\xb8\x69\xd3\x39\x97\x3d\x73\x9d\xef\xf0\x80\xe9\xea\x64\x6b\x2a\x85\x9f\x8f\xfc\x50\x0e\x89\xe8\x92\x12\x14\x60\x74\xb2\x3d\xf7\xe9\x38\x74\x82\xc9\xde\xea\x72\x33\x7c\x0a\xec\x23\xe0\xef\xe9\x2d\xad\xaa\xad\xd7\x99\x2e\x37\xfc\x49\x27\xb4\xb3\x7d\x8f\x84\xd7\x70\x36\x41\x51\x8e\xeb\x3a\x0e\x6e\x42\xe4\x0f\xba\xe3\x07\x11\xfb\x86\x06\x83\x82\x9e\xde\xde\xf3\xa0\x2b\x9e\xc4\x40\x2f\xd2\xae\xfe\xb7\x15\x18\x3a\x7e\xf0\x5c\x7a\xf8\x5a\xea\xd5\x22\x64\x2d\x26\x3f\xc9\xe3\x2e\x2e\xb4\x72\xa8\x42\x7e\xf7\x50\x7a\xec\xc3\xf7\x25\x81\xfc\xac\x06\xaf\x9b\x67\xd6\xcf\x92\x08\x0d\xb5\xcb\x53\xcf\x9c\x7d\x12\x7a\x57\x29\xfc\xfd\x71\x88\xe4\xfb\xbc\xf3\x4d\x09\xd2\xcb\x3d\x5f\xfc\xe0\x09\x07\xbd\xb6\x5a\x74\x6d\x73\xe9\xfb\xd6\x3f\x4c\xee\xd9\x7f\x02\x00\x00\xff\xff\x50\x5e\xd3\x44\x36\x0f\x00\x00") - -func testImagesNetMainGoBytes() ([]byte, error) { - return bindataRead( - _testImagesNetMainGo, - "test/images/net/main.go", - ) -} - -func testImagesNetMainGo() (*asset, error) { - bytes, err := testImagesNetMainGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/net/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetNatClosewaitGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x57\xeb\x8f\xe2\xc8\x11\xff\xec\xfe\x2b\xea\x90\x6e\x65\x46\x60\xcf\xee\x87\x28\xda\xbd\x5d\x89\x30\x33\x39\x72\x23\x18\x01\x97\xd1\x29\x8a\xa2\xc6\x2e\xdb\xad\x31\xdd\x4e\x77\x1b\x8e\xec\xce\xff\x1e\x55\xb7\x61\x6c\x60\x1e\xa7\x64\xf9\xc0\xc3\x5d\x8f\x5f\x3d\xba\x7e\x45\x7c\xc1\xc6\xaa\xda\x69\x91\x17\x16\x3e\x5c\xbe\xff\x13\x2c\x0b\x84\x5f\xea\x15\x6a\x89\x16\x0d\x8c\x6a\x5b\x28\x6d\x22\xc6\x6e\x45\x82\xd2\x60\x0a\xb5\x4c\x51\x83\x2d\x10\x46\x15\x4f\x0a\x84\xe6\x64\x00\x7f\x47\x6d\x84\x92\xf0\x21\xba\x84\x90\x04\x7a\xcd\x51\xaf\xff\x89\xed\x54\x0d\x6b\xbe\x03\xa9\x2c\xd4\x06\xc1\x16\xc2\x40\x26\x4a\x04\xfc\x3d\xc1\xca\x82\x90\x90\xa8\x75\x55\x0a\x2e\x13\x84\xad\xb0\x85\x73\xd2\x98\x88\xd8\x6f\x8d\x01\xb5\xb2\x5c\x48\xe0\x90\xa8\x6a\x07\x2a\x6b\x4b\x01\xb7\x8c\x01\x00\x14\xd6\x56\x1f\xe3\x78\xbb\xdd\x46\xdc\xa1\x8c\x94\xce\xe3\xd2\x4b\x99\xf8\x76\x32\xbe\x9e\x2e\xae\x87\x1f\xa2\x4b\xc6\x7e\x95\x25\x1a\x03\x1a\xff\x5d\x0b\x8d\x29\xac\x76\xc0\xab\xaa\x14\x09\x5f\x95\x08\x25\xdf\x82\xd2\xc0\x73\x8d\x98\x82\x55\x84\x73\xab\x85\x15\x32\x1f\x80\x51\x99\xdd\x72\x8d\x2c\x15\xc6\x6a\xb1\xaa\x6d\x27\x41\x7b\x54\xc2\x40\x5b\x40\x49\xe0\x12\x7a\xa3\x05\x4c\x16\x3d\xf8\xcb\x68\x31\x59\x0c\xd8\xfd\x64\xf9\xf3\xec\xd7\x25\xdc\x8f\xe6\xf3\xd1\x74\x39\xb9\x5e\xc0\x6c\x0e\xe3\xd9\xf4\x6a\xb2\x9c\xcc\xa6\x0b\x98\xdd\xc0\x68\xfa\x1b\xfc\x32\x99\x5e\x0d\x00\x85\x2d\x50\x03\xfe\x5e\x69\xc2\xae\x34\x08\x4a\x1d\xa6\x11\x5b\x20\x76\x9c\x67\xca\x83\x31\x15\x26\x22\x13\x09\x94\x5c\xe6\x35\xcf\x11\x72\xb5\x41\x2d\x85\xcc\xa1\x42\xbd\x16\x86\x8a\x67\x80\xcb\x94\x95\x62\x2d\x2c\xb7\xee\xf7\x49\x38\x11\xbb\x88\x19\xab\x78\xf2\x40\x46\x24\xa5\x3c\xbe\x60\x49\x29\x50\xda\xd8\xa0\xde\xa0\xf6\x4e\xd1\x50\x96\x60\x7c\x3b\x5b\x5c\xff\xeb\x7e\x34\x59\x82\x15\x6b\x54\xb5\x85\x44\xc9\x54\x90\x79\xca\xa6\xa8\x2c\x65\xda\xc0\x74\xb4\x8c\x58\x63\x08\x3a\x2f\x6f\x95\x01\x7c\x83\xd3\xd7\x37\x7a\xfe\xd3\x70\x68\x93\x0a\x0a\x2e\x53\x53\xf0\x07\x1c\x0e\xbf\xec\x9f\xbb\x57\x26\x64\xf3\x6d\xf8\x0d\x0a\x5e\x66\xc3\xa4\x54\x94\x1d\xad\xd6\xaf\x98\x87\x06\x91\x30\x84\xf6\x29\x1a\x97\x06\xb1\xae\x94\xb6\x10\xb2\xa0\x87\x5a\x2b\x6d\x7a\x2c\xe8\x09\x45\xef\xa5\xca\xe9\x43\xa2\xa5\x0f\x0a\xbd\xc7\x58\xd0\x7b\xf8\xb3\x89\x84\x8a\x1f\x0e\x97\x2c\xa6\x44\xc5\x62\xcd\x73\x34\xb1\x44\x1b\x27\x6a\xbd\x56\xb2\xc7\xfa\x8c\xc5\x31\x94\xc8\x1f\x30\x1d\x2b\x29\x31\xf1\x29\x33\xc0\x21\x2f\xd5\x8a\x97\xb0\xe1\x5a\xb8\x36\xb5\x05\xb7\x60\x0a\x55\x97\xa9\xd3\x70\x05\xe3\x89\x15\x1b\x24\x23\xc9\x93\x3a\x37\x46\xe4\x12\x53\x28\x50\x63\xc4\x36\x5c\x9f\xba\xb8\x90\x68\xa3\xe5\xf8\x8e\x1e\x39\x10\x63\x4a\xd6\x3d\x17\x76\xe1\x52\x35\xab\x7c\x6f\x14\xaa\x4c\x4d\x93\x3e\xf8\xdb\x62\x36\x05\xe5\x4f\x22\x66\x77\x15\x3e\xa7\x66\xac\xae\x13\x0b\x5f\x59\x10\xc7\x30\x4a\x53\xd7\xc3\x56\xc1\x4a\xc8\xf4\xd0\xaf\x94\x15\x16\xdc\xaa\x84\x97\x24\x42\x4a\x42\xe6\x4e\x65\xd9\xb4\x91\x55\xb0\xe5\xc2\x02\xcf\x2c\x6a\x30\x28\x53\xea\x37\x52\xbe\x99\x4c\x23\x16\xdc\x29\x63\x6f\x84\x6c\xc4\x17\x48\x6d\x47\x45\xb4\xec\x91\x79\x80\x49\x17\x60\x0b\x59\x13\x08\x5c\x9c\x8f\x81\x2c\xc4\x31\x4c\x71\x7b\x74\x0e\x1a\x6d\xad\xe9\x1e\x81\xc4\x2d\xcc\x6b\x29\x51\x47\x2c\xab\x65\x72\x46\x3a\xec\x83\xaf\x76\xe4\x05\xc9\xb3\x37\x00\xef\x8e\xb0\x7d\x7d\x7c\xf2\xb9\x4f\x24\x2f\x4b\x95\x70\x1a\xd4\xe4\x4b\x75\xd2\x5b\x53\x75\x9d\xdb\xb0\x29\xd0\xc5\x91\xc5\x7e\xcb\x54\xd8\xa7\xbc\xa0\xce\x78\x82\x5f\x1f\xdb\x30\xce\xc7\x7f\x40\x33\xaf\xa5\x1f\x2f\xee\x74\x68\x44\x8a\xfb\xa1\x4c\x15\x7c\x15\xc2\xbc\x96\x61\xa9\xf2\x9c\x0e\x4b\x95\x47\xb7\xee\xfb\x00\x34\x3f\x44\xd9\x02\xd6\x07\x77\xcb\x08\x9f\xc8\xf6\x01\x0f\x40\x3d\xc0\xc7\xcf\x2d\x95\x28\x7c\xa6\x6c\xfd\x4f\x24\xfb\x95\x05\x81\x07\x14\xed\x73\xf6\x79\x6f\x8c\x05\x8f\x80\xa5\x41\x27\xd4\xe4\xc0\xdf\xec\x68\x8a\xdb\xb0\x27\xe4\x86\x97\x22\x05\x6a\x9f\x5e\x9f\x05\x8f\x8c\x05\x1e\x7f\x74\xa7\x85\xb4\x59\xd8\xa3\x94\xfc\xb8\xe9\x0d\xa0\xeb\xa3\xcf\x58\xc0\xd3\x54\x0f\xc8\x1e\xe1\xa5\x4b\x36\x47\xa3\xca\x0d\x2e\xc7\x77\xd4\xe4\x61\xcf\x26\xd5\x89\x62\x74\xb8\x04\x7d\x17\x36\xa9\xff\xf0\x19\xa4\x28\x8f\x40\x36\x68\x84\xb1\x28\xb1\xeb\xe7\xd6\x3d\x5c\x8e\xef\xf6\x2e\xf8\xdb\xcc\x05\x29\x66\xa8\x61\x6f\x33\x72\x69\x0d\xfb\xa7\x41\x37\xdd\xef\x05\xe9\x1a\xaa\x26\x09\xde\x11\x0b\x68\x04\x1d\x20\x1d\xec\x8d\x12\x22\x7f\xc2\xf5\x76\x30\x64\xe9\x79\x20\x63\x3f\xad\x9b\x89\x87\x69\x8f\x64\xe2\x18\x16\x28\xd3\xfd\x28\x6f\x11\xc0\xcd\x64\x0a\x46\xb5\x66\xbc\x54\xdb\xee\x9c\x8f\xe0\x1e\xe1\x01\xb1\x72\x66\xa8\xb1\x1b\xe1\xe1\x97\xfd\xe8\xab\x44\x85\xa0\x2a\x94\x34\x92\x36\xa8\x45\xb6\x83\x6d\x81\x8e\xa3\x95\x76\x3b\x0f\xe9\x4d\x47\x4b\x67\x23\xd5\xaa\xaa\x68\x11\xa8\x75\x6b\x32\x47\x87\x04\x7c\xfc\xdc\x8a\xf1\x5e\x0b\x8b\x61\xff\xd3\xab\x65\x3f\x5b\x0f\x43\x40\x6f\x26\xd3\x81\x9b\x94\x54\x97\x1f\x37\x60\xfc\x24\xec\x0d\x4e\xee\x41\x74\x76\x64\x52\x06\x7f\x1a\x12\x83\x45\x23\x1a\xb5\xa1\xfb\x7a\x55\x6b\xb7\x22\x84\x6f\x32\x01\x17\x8e\xfd\x23\xff\xfb\x4c\xdd\xae\x94\x44\x57\xab\x26\x30\x29\xca\x66\xc4\x1c\xae\xb2\x2f\x6d\x97\x7c\x9a\x5a\xbc\x44\x3e\x5d\xb5\x0e\xf9\xcc\x71\xad\x2c\x3a\x7e\x69\x86\x56\x53\x51\xab\xf6\x95\x01\xab\x22\x16\xb4\x04\x4f\x89\x68\xcf\x2c\x4a\xc2\x24\x9e\x3d\xed\xae\x4d\x62\x58\x70\x86\x81\x48\xfd\xe7\xa7\x36\xdc\x6f\x46\xa1\x55\x90\x8b\x0d\x1e\x06\xa8\x3b\x71\x70\x0a\x4c\x3c\xad\x1b\xcb\x6d\x6d\x1a\xc0\xce\x10\x41\xb5\x9a\xd3\xb9\xdb\x06\x50\x5a\xbd\x7b\x91\x00\x49\xeb\x96\xf6\x84\xd6\x66\x10\xfa\xd5\x80\x9c\x1d\xaf\x17\x46\xb5\x05\x2b\x5a\xf4\x8d\x35\xce\x0a\x37\x50\x2a\x99\xd3\x27\x81\xab\xb4\x4a\xfc\x3a\xbd\xe6\x82\x6a\x11\x90\x9b\xd6\x6e\xb1\x52\xaa\x3c\xe5\xdf\xe6\xd6\xbe\xc4\xbf\x9d\x32\x9e\xe1\xdf\xfd\xc5\xd7\xe8\x18\xd1\xf3\xaf\x76\xb4\x7a\x4a\xbf\x5e\xf8\x4d\xf4\xeb\x45\xff\x07\xfa\x6d\x5a\xf4\xe2\xc8\xe2\x1f\xa4\xdf\x4e\xf8\x27\xf4\xeb\x7d\x44\xeb\xd7\x5c\x7e\x77\xba\xed\xc0\x7c\xa2\xdb\x06\xdf\x77\xa5\xdb\xae\x8f\x3f\x40\xb7\x5d\xc5\xe8\xe9\xae\xbf\x89\x6f\x3b\xc4\x46\x4e\xae\x04\x2f\x5b\x4c\x2b\x45\xf9\x76\xba\x15\x19\xfc\x70\x04\xe7\xe8\xfe\x90\xd2\x19\x1e\x3c\x97\x99\xf1\x9e\x03\xe9\x4a\xfb\x61\xe4\x26\xac\xc8\x8e\x43\x3e\x9a\x10\x5f\xe0\xb2\xf1\x53\xf2\x1d\x85\xd5\x1d\xf8\x2f\x2a\x1f\x4d\x7a\xaa\x3d\xe1\x5c\xa0\x9d\x23\x4f\xaf\x90\xa7\xa5\x90\xe8\x29\x64\xaa\xb6\x61\x3f\x1a\xa5\x69\xe8\x3c\xf5\x9b\x30\x56\x75\x46\x4e\xd7\xfc\x01\xc3\x7f\xfc\x73\xb5\xb3\x38\x80\xf7\x03\x78\xdf\x67\x81\x11\xff\xc1\x41\x87\x24\xc9\x6a\xb8\xaa\xb3\x26\xb0\x56\x7a\xdf\xbd\xdb\xff\x12\x2a\xba\x9e\xdd\x9c\xad\x9e\xc8\x80\x6c\x92\xd4\xe5\x73\x4d\xf8\x57\x65\x21\xe5\x96\xc3\xaa\xb6\xf4\x9f\xdb\xe7\xf4\x7a\x76\xf3\x4c\x47\x36\xdc\x5b\x70\xd3\xda\x34\x52\x7f\x4f\x0f\x85\x7c\x96\x91\x8f\xb2\xfb\x2c\x23\x9f\x56\xf1\x4c\xa7\x1c\x21\x23\x09\x72\x99\x74\x96\xa4\xd6\xf0\x77\x7f\xa0\x4e\xe6\x7f\x9f\x02\x0d\x4e\xfe\x26\xfa\x0a\xf8\x14\x74\xf6\x03\x16\x04\x2f\x76\xcc\xff\x75\x45\xf8\x6f\x00\x00\x00\xff\xff\x8d\x4a\x16\x8b\xc5\x12\x00\x00") - -func testImagesNetNatClosewaitGoBytes() ([]byte, error) { - return bindataRead( - _testImagesNetNatClosewaitGo, - "test/images/net/nat/closewait.go", - ) -} - -func testImagesNetNatClosewaitGo() (*asset, error) { - bytes, err := testImagesNetNatClosewaitGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/net/nat/closewait.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetexecGitignore = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\x4b\x2d\x49\xad\x48\x4d\xe6\x02\x04\x00\x00\xff\xff\x8a\xe9\x3e\xf6\x08\x00\x00\x00") - -func testImagesNetexecGitignoreBytes() ([]byte, error) { - return bindataRead( - _testImagesNetexecGitignore, - "test/images/netexec/.gitignore", - ) -} - -func testImagesNetexecGitignore() (*asset, error) { - bytes, err := testImagesNetexecGitignoreBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/netexec/.gitignore", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetexecBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\x2a\x2d\xae\x4c\xca\xaf\xe0\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x12\x33\x33\xb1\x05\x93\x65\x16\x70\xd1\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x0d\x17\x2f\x36\xb6\x34\xa8\xb0\x05\x93\x70\x31\x40\x00\x00\x00\xff\xff\xc9\xd8\x77\x8f\x64\x00\x00\x00") - -func testImagesNetexecBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesNetexecBaseimage, - "test/images/netexec/BASEIMAGE", - ) -} - -func testImagesNetexecBaseimage() (*asset, error) { - bytes, err := testImagesNetexecBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/netexec/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetexecDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x51\x4f\xdb\x3e\x14\xc5\xdf\xfd\x29\x8e\x9a\x97\xff\x5f\x2a\x49\xe1\x61\x42\xdb\x53\x68\xc3\x88\x80\x84\x25\xe9\x58\x35\x4d\xc8\x4d\x6e\x93\xab\xa5\xb6\xb1\x9d\x85\x7e\xfb\x29\xa5\x48\xa0\xf9\xc5\x96\xef\xf1\xf1\xcf\xc7\x37\xc0\x52\x9b\x83\xe5\xb6\xf3\xb8\x58\x9c\x7f\x42\xd5\x11\x6e\x87\x2d\x59\x45\x9e\x1c\xe2\xc1\x77\xda\xba\x50\x04\x22\xc0\x1d\xd7\xa4\x1c\x35\x18\x54\x43\x16\xbe\x23\xc4\x46\xd6\x1d\xbd\x55\xe6\xf8\x4e\xd6\xb1\x56\xb8\x08\x17\xf8\x6f\x12\xcc\x4e\xa5\xd9\xff\x5f\x44\x80\x83\x1e\xb0\x97\x07\x28\xed\x31\x38\x82\xef\xd8\x61\xc7\x3d\x81\x5e\x6a\x32\x1e\xac\x50\xeb\xbd\xe9\x59\xaa\x9a\x30\xb2\xef\x8e\xd7\x9c\x4c\x42\x11\x60\x73\xb2\xd0\x5b\x2f\x59\x41\xa2\xd6\xe6\x00\xbd\x7b\xaf\x83\xf4\x47\xe0\x69\x74\xde\x9b\xcf\x51\x34\x8e\x63\x28\x8f\xb0\xa1\xb6\x6d\xd4\xbf\x0a\x5d\x74\x97\x2e\x93\xac\x4c\xce\x2e\xc2\xc5\xf1\xc8\x5a\xf5\xe4\x1c\x2c\x3d\x0f\x6c\xa9\xc1\xf6\x00\x69\x4c\xcf\xb5\xdc\xf6\x84\x5e\x8e\xd0\x16\xb2\xb5\x44\x0d\xbc\x9e\x78\x47\xcb\x9e\x55\x3b\x87\xd3\x3b\x3f\x4a\x4b\x22\x40\xc3\xce\x5b\xde\x0e\xfe\x43\x58\x6f\x74\xec\x3e\x08\xb4\x82\x54\x98\xc5\x25\xd2\x72\x86\xab\xb8\x4c\xcb\xb9\x08\xf0\x98\x56\x37\xf9\xba\xc2\x63\x5c\x14\x71\x56\xa5\x49\x89\xbc\xc0\x32\xcf\x56\x69\x95\xe6\x59\x89\xfc\x1a\x71\xb6\xc1\x6d\x9a\xad\xe6\x20\xf6\x1d\x59\xd0\x8b\xb1\x13\xbf\xb6\xe0\x29\x46\x6a\xa6\xcc\x4a\xa2\x0f\x00\x3b\xfd\x0a\xe4\x0c\xd5\xbc\xe3\x1a\xbd\x54\xed\x20\x5b\x42\xab\xff\x90\x55\xac\x5a\x18\xb2\x7b\x76\xd3\x67\x3a\x48\xd5\x88\x00\x3d\xef\xd9\x4b\x7f\xdc\xf9\xe7\x51\xa1\x10\xd7\x45\x7e\x3f\xe1\x27\xe9\x7d\xfc\x35\x11\x62\x59\xe4\x65\xf9\x74\xb5\x4e\xef\x56\x4f\xcb\xfc\x61\x83\x67\xda\x0f\x67\xdf\x92\xfb\x75\x5c\x2c\x6f\xce\xdc\xe4\x55\x23\x1a\x9c\x8d\xb6\xac\x22\x21\xe2\xd5\x0a\x53\xdb\xbd\x50\xfd\x36\x8b\xe4\xc7\x43\x5e\x26\xb8\x5c\x5c\x2e\xde\xad\xcf\x85\x28\xd6\x19\xf6\xbf\x1b\xb6\x88\x06\xd3\x6b\xd9\x38\x21\x92\xac\x2a\x36\x0f\x79\x9a\x55\xf8\x39\x8b\x4e\x16\xb3\x5f\xe2\x6f\x00\x00\x00\xff\xff\xcc\x00\x10\x29\xe6\x02\x00\x00") - -func testImagesNetexecDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesNetexecDockerfile, - "test/images/netexec/Dockerfile", - ) -} - -func testImagesNetexecDockerfile() (*asset, error) { - bytes, err := testImagesNetexecDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/netexec/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetexecMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x51\x4f\xdb\x3e\x14\xc5\x9f\xff\xfe\x14\x47\x0d\x0f\xad\x54\x52\xfe\x68\xe2\x81\x09\x4d\x59\xdb\x41\x04\x4a\xa6\x24\x80\x78\x42\x4e\x72\x9b\x5c\x29\xb5\x3d\xdb\x59\xda\x6f\x3f\xb9\x80\x34\xb4\xbc\xe5\x9e\xe3\xe3\x9f\x8f\x1d\x61\xad\xcd\xd1\x72\xd7\x7b\x5c\x5e\xfc\x7f\x85\xaa\x27\xdc\x8f\x35\x59\x45\x9e\x1c\x92\xd1\xf7\xda\xba\x58\x44\x22\xc2\x03\x37\xa4\x1c\xb5\x18\x55\x4b\x16\xbe\x27\x24\x46\x36\x3d\x7d\x28\x4b\x3c\x91\x75\xac\x15\x2e\xe3\x0b\xcc\x83\x61\xf6\x2e\xcd\x16\x5f\x45\x84\xa3\x1e\xb1\x97\x47\x28\xed\x31\x3a\x82\xef\xd9\x61\xc7\x03\x81\x0e\x0d\x19\x0f\x56\x68\xf4\xde\x0c\x2c\x55\x43\x98\xd8\xf7\xa7\x6d\xde\x43\x62\x11\xe1\xe5\x3d\x42\xd7\x5e\xb2\x82\x44\xa3\xcd\x11\x7a\xf7\xb7\x0f\xd2\x9f\x80\xc3\xd7\x7b\x6f\xae\x57\xab\x69\x9a\x62\x79\x82\x8d\xb5\xed\x56\xc3\x9b\xd1\xad\x1e\xd2\xf5\x36\x2b\xb7\xe7\x97\xf1\xc5\x69\xc9\xa3\x1a\xc8\x39\x58\xfa\x35\xb2\xa5\x16\xf5\x11\xd2\x98\x81\x1b\x59\x0f\x84\x41\x4e\xd0\x16\xb2\xb3\x44\x2d\xbc\x0e\xbc\x93\x65\xcf\xaa\x5b\xc2\xe9\x9d\x9f\xa4\x25\x11\xa1\x65\xe7\x2d\xd7\xa3\xff\x54\xd6\x07\x1d\xbb\x4f\x06\xad\x20\x15\x66\x49\x89\xb4\x9c\xe1\x7b\x52\xa6\xe5\x52\x44\x78\x4e\xab\xbb\xfc\xb1\xc2\x73\x52\x14\x49\x56\xa5\xdb\x12\x79\x81\x75\x9e\x6d\xd2\x2a\xcd\xb3\x12\xf9\x0f\x24\xd9\x0b\xee\xd3\x6c\xb3\x04\xb1\xef\xc9\x82\x0e\xc6\x06\x7e\x6d\xc1\xa1\x46\x6a\x43\x67\x25\xd1\x27\x80\x9d\x7e\x03\x72\x86\x1a\xde\x71\x83\x41\xaa\x6e\x94\x1d\xa1\xd3\xbf\xc9\x2a\x56\x1d\x0c\xd9\x3d\xbb\x70\x99\x0e\x52\xb5\x22\xc2\xc0\x7b\xf6\xd2\x9f\x26\xff\x1c\x2a\x16\xa2\x2c\xd6\xe5\x4d\x78\x36\x07\x6a\x44\x52\xac\xef\xf0\xed\x06\x72\xdf\x5e\x7d\x11\x55\x52\xdc\x6e\xab\xf0\x7f\x36\x5f\x3f\x16\x9b\xb4\x58\x88\xdb\xfc\x21\xc9\x6e\x5f\x9f\xb6\x45\x99\xe6\x59\xd0\x06\xe9\xc9\xf9\x90\xf3\xba\x49\x0b\x04\xb3\xd2\xbe\x65\x8b\xb3\xb9\xeb\x69\x18\x60\xa6\x76\xb1\x10\x74\x30\xda\x7a\x21\x6a\x56\xd7\xe2\xbf\x38\x5e\xf1\x5e\x76\x74\x3e\x7a\x1e\x62\xd7\xa3\x66\x85\xb3\x79\xa0\x59\x08\x11\xff\xbc\xcb\xb3\x97\xeb\x30\x14\x7f\x02\x00\x00\xff\xff\x57\x42\x5f\xff\xed\x02\x00\x00") - -func testImagesNetexecMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesNetexecMakefile, - "test/images/netexec/Makefile", - ) -} - -func testImagesNetexecMakefile() (*asset, error) { - bytes, err := testImagesNetexecMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/netexec/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetexecVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe4\x02\x04\x00\x00\xff\xff\x9e\xc5\x88\x7d\x04\x00\x00\x00") - -func testImagesNetexecVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesNetexecVersion, - "test/images/netexec/VERSION", - ) -} - -func testImagesNetexecVersion() (*asset, error) { - bytes, err := testImagesNetexecVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/netexec/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetexecNetexecGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x3a\x5d\x73\xe3\x38\x72\xcf\xe2\xaf\xe8\x63\xd5\xcc\x52\x73\x5c\x4a\x76\x2e\x75\x5b\xde\x28\x5b\x5e\x7b\x7c\x76\x6e\xe2\x71\x2c\x7b\xa7\xae\x1c\xd7\x15\x44\xb6\x24\xdc\x90\x00\x17\x00\x6d\xeb\x66\xfd\xdf\x53\x0d\x80\x20\xf5\xe5\x2d\xef\xe4\x21\x95\xbb\x07\x9b\x14\xd0\x68\xf4\xf7\x07\xc0\xd1\xbb\xe8\x44\xd6\x2b\xc5\x17\x4b\x03\x87\xe3\x83\x3f\xc0\xcd\x12\xe1\xcf\xcd\x0c\x95\x40\x83\x1a\x8e\x1b\xb3\x94\x4a\x67\x51\xf4\x81\xe7\x28\x34\x16\xd0\x88\x02\x15\x98\x25\xc2\x71\xcd\xf2\x25\x82\x9f\x49\xe1\x27\x54\x9a\x4b\x01\x87\xd9\x18\x12\x02\x88\xfd\x54\x3c\xfc\x3e\x5a\xc9\x06\x2a\xb6\x02\x21\x0d\x34\x1a\xc1\x2c\xb9\x86\x39\x2f\x11\xf0\x29\xc7\xda\x00\x17\x90\xcb\xaa\x2e\x39\x13\x39\xc2\x23\x37\x4b\xbb\x89\x47\x91\x45\x7f\xf1\x08\xe4\xcc\x30\x2e\x80\x41\x2e\xeb\x15\xc8\x79\x1f\x0a\x98\x89\x22\x00\x80\xa5\x31\xf5\xd1\x68\xf4\xf8\xf8\x98\x31\x4b\x65\x26\xd5\x62\x54\x3a\x28\x3d\xfa\x70\x71\xf2\xfe\x72\xfa\xfe\xdb\xc3\x6c\x1c\x45\xb7\xa2\x44\xad\x41\xe1\xcf\x0d\x57\x58\xc0\x6c\x05\xac\xae\x4b\x9e\xb3\x59\x89\x50\xb2\x47\x90\x0a\xd8\x42\x21\x16\x60\x24\xd1\xf9\xa8\xb8\xe1\x62\x91\x82\x96\x73\xf3\xc8\x14\x46\x05\xd7\x46\xf1\x59\x63\xd6\x04\xd4\x52\xc5\x35\xf4\x01\xa4\x00\x26\x20\x3e\x9e\xc2\xc5\x34\x86\x1f\x8f\xa7\x17\xd3\x34\xfa\x74\x71\x73\xfe\xf1\xf6\x06\x3e\x1d\x5f\x5f\x1f\x5f\xde\x5c\xbc\x9f\xc2\xc7\x6b\x38\xf9\x78\x79\x7a\x71\x73\xf1\xf1\x72\x0a\x1f\xcf\xe0\xf8\xf2\x2f\xf0\xe7\x8b\xcb\xd3\x14\x90\x9b\x25\x2a\xc0\xa7\x5a\x11\xed\x52\x01\x27\xd1\x61\x91\x45\x53\xc4\xb5\xcd\xe7\xd2\x11\xa3\x6b\xcc\xf9\x9c\xe7\x50\x32\xb1\x68\xd8\x02\x61\x21\x1f\x50\x09\x2e\x16\x50\xa3\xaa\xb8\x26\xe5\x69\x60\xa2\x88\x4a\x5e\x71\xc3\x8c\xfd\xbd\xc5\x4e\x16\xbd\x1b\x45\x51\xcd\xf2\xcf\x84\xa4\x62\x5c\x44\x11\xaf\x6a\xa9\x0c\x24\xd1\x20\x46\x91\xcb\x82\x8b\xc5\xe8\x6f\x5a\x8a\x38\x1a\xc4\xf3\x92\x2d\xec\xb3\x32\xf4\xe0\xd2\xfd\x1f\x71\xd9\x18\x5e\xd2\x8f\x52\x5a\x00\x81\xc6\x3f\x46\xa4\xbf\xf6\xbd\x51\x16\x48\x6a\xf7\x7f\x84\x4f\x98\xd3\xab\x36\x2a\x97\xe2\xc1\xbf\x72\xb1\xb0\x00\x7a\x25\xf2\x11\x33\xb2\xe2\x16\xc8\xf0\x0a\xe3\x28\x1a\xd0\x56\x02\x0d\xc4\x9f\xbf\xd3\x19\x97\x23\x56\xf3\x8a\xe5\x4b\x2e\x50\xad\x46\xf5\xe7\xc5\x88\x00\x46\x96\x82\x61\x14\x3d\x30\x45\xbc\x10\x15\x57\xc4\x17\x00\x4c\xe0\xbb\xf1\x77\xe3\x68\xd0\x14\x61\xc8\x8d\x1d\x44\x03\xbd\xc4\xb2\xbc\x62\x66\x69\xc7\xe2\xd1\x8c\x8b\x91\x5e\xc6\xd1\x40\xa3\x7a\x40\x75\x8d\xac\x58\xc1\x04\xde\x3a\xb2\x7e\x94\xb2\xfc\x32\x7e\xa6\x7d\x46\x23\xe8\xc6\xc8\x2d\x34\x94\x92\x15\x23\x6d\xa4\x42\x90\x35\x2a\xaf\x04\x67\x32\x5c\x98\x7f\x39\x24\x1b\xd4\xbc\x6a\x4a\x66\x90\x06\x1d\x02\x98\x49\x59\x22\x13\x59\x64\x56\x35\xf6\xb1\x6a\xa3\x9a\xdc\xc0\x97\x68\xf0\xe0\x10\x44\xcf\x76\x63\x8d\x86\xfe\xb4\x55\x6d\xc0\x4c\x3f\x16\xfc\x01\x45\x87\x70\xde\x88\x1c\x12\x06\xef\x3a\xa4\x43\x5a\x99\x3c\xb0\xb2\x41\x0b\x37\x24\xf4\x7c\x0e\x6e\xe4\x4b\x34\x18\x38\xd8\x6c\x4a\x8c\x5c\x10\xf2\xe4\x2d\xcb\x1e\x52\x38\x18\x46\x83\x81\x42\xd3\x28\x11\x0d\x9e\xa3\xbd\x70\xe3\xa1\x27\x73\x81\x06\x1c\xbc\x06\xa3\x1a\x04\x3e\xef\x51\x3c\x99\xc0\xc1\x6e\x02\x17\x68\x92\xa1\x25\x8e\xe8\x71\x18\xbc\x58\xb2\x0f\x92\x15\xdd\x66\x43\x87\xe5\x39\x72\xa2\x93\x8d\xa9\x1b\xd3\x13\x9b\x42\x5d\x4b\x0a\x1b\x70\x77\xef\x0c\x2d\x1a\xa0\x52\x52\x69\xb2\x81\x30\xf6\x1c\x39\x42\xb8\xe0\xb4\xf3\x97\x68\x40\x86\x9f\x5d\x08\xf3\x13\x53\xc9\xdb\xd6\x96\x52\x88\xe9\xf5\x5b\xf2\x97\x38\xb5\x46\x95\x42\x7c\x7e\x73\x73\x05\x1f\xb8\x36\x28\x80\xa0\xe2\xe1\xc6\x72\x6f\x76\x29\xc4\x4d\xd1\x5f\x7c\x90\x42\x7c\x7b\xba\xb9\xb6\xa5\x85\x9c\xb3\x47\xcb\x15\x53\x1a\x93\x61\x34\x58\x48\xd0\x86\x29\x73\x7b\x7a\x35\xb5\x26\x9a\x78\xfc\xc3\x68\x60\x27\x88\x1e\x3f\xd3\x12\xde\x61\xdd\x07\x41\x3a\xb1\x9b\xd1\x40\x76\xce\x44\x51\xe2\x59\x23\xf2\x24\x1e\xc5\x29\x28\x29\x8d\x1b\x53\xc3\x5d\x20\x79\xc9\x51\x18\x5e\xc7\x29\xb8\xd7\x8b\xab\x97\xc0\x31\x5f\xca\x38\x05\x7a\xbc\x08\xf6\xc4\x49\x52\xf4\x78\x09\x6c\x29\xb5\x11\xac\xc2\x38\x85\xf6\xf5\x25\x70\xeb\xf0\x71\x0a\xf6\xf9\x12\x60\x53\x93\x3f\xc7\x29\xb8\x97\x97\x40\x0b\xce\x08\x25\x3d\x5e\xa4\x14\x59\x69\x96\x7f\x27\x42\xdd\x5b\x07\x3c\x1a\x81\x2c\x29\x58\x2f\xdd\x90\xde\xc7\xe9\x65\xc7\xe9\xe5\xaf\x72\xda\x98\x42\x3e\x0a\xcb\xac\x7b\xed\xc0\x4b\xb9\xc8\xce\x98\x61\xa5\x35\x81\xcc\xd9\xe0\xb1\x28\xac\x5d\x24\xf3\xca\x64\xd3\x5a\x71\x61\xe6\x49\x7c\xf4\x86\xa4\x10\x6c\x29\x05\xc1\xcb\x61\x67\x52\x3d\xe3\x48\x1e\x2d\x58\x76\xed\xdd\xee\x93\xe2\x06\x55\x0a\x0a\xde\xf9\xf1\x9f\x1b\xd4\xce\xd0\x88\x80\x2b\xbf\xc3\x9f\xde\xdf\xc0\xc8\xfa\x4d\x65\xb2\x33\xbf\xef\x63\x0a\xf1\xe5\xc7\x4f\x47\xf0\xe6\x21\x4e\x81\x92\x41\x76\x29\x1f\x93\xde\xce\x3d\x03\xfa\xaa\x9d\x09\xcf\x0f\x95\x5e\x4c\xde\x68\x32\xf6\xec\x4c\xaa\xea\x27\x0a\x87\x49\x5c\xe9\x45\x3c\xdc\x41\xd8\x5e\xc8\x96\xb6\x0d\x3f\xf8\x2a\xfa\x82\x7b\x6d\x13\xa2\xb2\x6b\xac\xa4\xc1\xe3\xa2\x50\x3d\xc1\x74\x2e\xf3\x75\x82\x79\xe2\xe6\x87\x5c\x16\xb8\x43\x32\x34\x6c\x45\x43\x2f\x29\xa0\x52\x70\x34\x01\x9f\xd8\xb3\x63\x23\x79\xb2\x1b\x9e\xcf\x2d\xf0\x64\x42\x76\x04\xbf\xfc\xb2\x0b\x2d\xcd\xc6\xb1\xcd\x46\x52\x67\xef\x9f\xb8\x49\x68\x62\x68\xf3\xce\xa6\x2e\x98\x5a\x34\x15\x0a\x03\xdf\x10\xcc\x37\x50\x35\xda\xc0\x0c\x7d\xd6\xc5\x05\x2a\xb8\x1b\x7f\x7b\x70\xf8\xc7\x7b\x2a\xb6\xb0\xaa\xcd\x2a\x85\x85\x34\xf0\xe6\xe7\x7d\x4c\xb5\x82\xdc\x08\x28\x5f\x25\xcc\x10\xa7\xb6\xb5\xb8\x40\x73\xee\x1d\xda\xdb\xf7\x68\xe4\x63\x84\xdf\x19\xda\x4c\xe6\xaa\x6b\x06\x87\xe3\x71\x9b\x4e\x29\x87\xb8\x6a\x85\xaa\x55\x45\x15\x4b\x06\x17\x06\x58\xa9\xa5\x9b\xd0\xb6\x5a\xd1\xc0\x3c\x52\xc8\x97\x98\x7f\x6e\x0b\x70\x9b\xc0\x3c\x82\xd9\x0a\x1e\xb8\x32\x0d\xd2\xe4\x0c\xa9\xc0\x64\x0e\xc0\x07\x26\x5f\x53\xac\x07\xb0\xaf\x93\x8b\x8f\x8a\xce\x34\x7a\x65\x57\xe6\xea\x00\x32\x82\xc7\xcc\xa2\x3c\x47\x56\xa0\x4a\x0e\xc7\xe3\x8d\x52\x64\x7d\xde\xee\x39\x35\xcc\x34\xfa\x4a\x61\x2e\x45\xc1\xa9\x14\x3b\x63\xbc\xc4\xa2\x97\x0b\xd7\x83\xe2\x57\x31\x11\x62\xed\x30\x0a\x16\x3b\xee\xb6\xea\x65\x86\xd7\x6c\x63\x6b\x32\x1d\x9c\xab\x51\xa5\xaf\x03\x54\x76\x7b\xfd\xa1\x05\xbd\xbd\xbe\x48\x7a\x8e\xf5\x3b\xe7\x58\x24\x36\x8b\xf0\x3d\xd5\x3b\x64\x65\x6b\x41\xdd\x06\x55\x54\x6a\xe8\x22\xbb\x17\xd7\x8f\xac\x68\xf7\x5f\x13\x70\x34\x20\xeb\x25\x1a\x1c\x49\xd9\x7f\x35\xa8\x56\xc9\x30\xfb\x13\x9a\x24\xa6\x39\x62\xdc\xf6\x11\x7b\x60\x6a\x5f\x19\x29\x87\x7e\x1f\x98\x9f\x8e\x87\x40\x1e\xe0\x7d\x22\x1a\xd4\x4a\x1a\x99\xcb\x72\x2f\x76\x3f\x4f\x3b\x18\xb5\xba\x62\x8a\x55\xfb\x60\x8d\xe2\xa8\xe3\xe1\x0e\x25\x92\x96\x7e\xa0\x4d\x27\x6f\xf4\xdb\x16\xa5\x7d\x97\xca\x8e\x79\xea\xe8\xd5\x62\x71\x61\x91\x56\xa4\xd0\xc2\xa7\x50\xdb\x62\xcf\xc3\xa6\xd0\xd2\x63\x49\xe3\xa8\x89\xae\x03\xab\xad\x12\x45\x12\x66\xe1\xdf\x61\x6c\x95\x66\x81\x9c\xce\x37\xe2\x69\x0f\xd3\xf3\x2b\xd5\xed\x76\xae\x69\x35\x1a\x17\x28\xb8\x78\x60\x25\x2f\x32\x78\x9d\x29\xb4\x84\xab\xd6\x4e\x27\x13\x4f\xf8\x0b\xdb\xb7\x5a\xef\x08\x10\xd2\xb4\x6d\x2d\xfe\x66\x1a\x5a\x99\xf7\x88\x08\x96\x32\x71\xc5\x7a\x1c\x0d\x9e\x01\x4b\x8d\x9b\xb3\xbe\xef\xcc\x6e\xe4\x07\xf9\x88\xaa\xc3\xd5\x6e\x10\x60\x7f\xd7\xa2\x82\xb7\x6f\xd7\x47\x9b\xa2\x8e\x7f\x8d\xf5\x46\xe8\xa6\x26\x93\xc0\x22\x2c\xce\xc0\x1a\x4e\xd8\xf2\x15\x3e\x78\xe5\x7d\x4c\xa0\xc9\xfe\x43\x72\x71\xee\xc7\x12\x6f\x85\xae\x11\xa0\x26\xb8\x29\x6a\xaa\x0a\x50\x6b\x78\x47\xd0\xb7\xa7\x57\xf4\x7b\x9d\xb7\x49\x9f\x8b\x6e\x45\x6b\x7e\xb4\xee\x1a\xb5\x2c\x1f\xd0\x2f\x4f\x2c\xb8\x33\x7a\xdf\x75\xec\xb0\xc4\x97\x04\x62\x23\x09\x13\xc5\x48\x2a\x4b\xae\x33\x0a\x60\x0a\x5f\x67\x92\x41\x34\xa4\xaf\x9e\x8e\xff\xba\x83\xf8\x9b\x13\x4f\xbc\xc9\xff\x2f\x12\x1f\x9a\xd2\xa3\x09\x54\xec\x33\x26\x6d\x67\x6a\x9b\xe9\x5e\x17\xbb\x7b\x9e\xb4\x1d\xea\x83\xb6\xcd\x9d\x4b\x05\x9c\x16\x8c\xbf\x07\x0e\xff\x06\x36\x02\x7c\x0f\xfc\xf7\xbf\xb7\x4c\xee\x35\x82\xb0\x5b\x2b\x46\x8a\x8a\xb7\xa7\x57\x49\x08\x68\x9d\x99\x10\x27\x3d\xc9\xef\x5c\x4a\xc5\x43\xb7\xb6\x2f\xf9\xe7\xdd\xd2\xf7\xa2\x98\x00\xab\x6b\x14\x45\xe2\x7e\xef\x4b\x5f\xfb\x48\xe8\x21\x08\x43\x69\x90\xd2\x30\x08\xde\x1f\x19\x58\xc1\xd6\x77\x4e\x78\xf7\xad\x78\xbf\xf4\xc3\x9d\x5f\x19\xe2\xb4\x5b\x79\x17\x07\xf4\xf1\x3d\x4c\xc2\x0e\xba\x1f\xa7\x1c\x0b\xdb\x4b\xdd\xb8\x5d\xe7\x5e\xed\xa2\xd9\xca\xf4\x92\xfe\xdf\xb4\x14\xd9\x7f\x32\xa5\x97\xac\x4c\xdc\xc2\xad\x22\x9a\x70\x6e\x94\x94\x8e\x81\xc4\xe2\x22\x21\xf5\x64\xf4\x62\x9c\xf6\x56\x94\xcb\xa6\x2c\x6c\x90\x9e\x21\xd5\x64\x9c\x95\xfc\xef\xfb\x03\xf5\xfb\xa7\x1a\x73\x77\xea\xd8\x56\x59\x83\xe7\xf5\xea\x67\xa7\x19\x78\x32\x87\x90\xb4\xf6\x6c\xe5\x60\x8b\x1f\xa3\x98\xd0\x6d\x49\xe1\xcf\x00\xb3\x29\x9a\x9b\x76\xfc\x14\xe7\xac\x29\x8d\x76\x07\x34\x59\x18\xff\xf2\xec\xdb\xe1\x13\xdb\x37\xd1\xf2\x5c\x21\x33\x48\x34\xb8\xb1\x24\x20\xf7\xee\x15\xc4\xdd\xad\xb3\xd5\xc2\xba\xf3\xbb\x93\xe9\x37\x7a\x14\xf2\xfe\x55\x3f\xd7\x93\x9c\x0b\x9c\xa3\x82\x80\x3e\x3b\x29\xa5\xc6\x8b\xa2\xc4\x13\x29\x04\xe6\xf6\x48\x30\xd9\xa9\x40\xb7\x92\x88\xc9\x7e\x94\xc5\xca\xad\x24\xd0\xc1\x4c\x16\xab\x40\xa0\x3b\x7a\xcd\xa8\x42\x3e\x2e\xcb\x24\xc0\xf7\x62\x59\x0f\x69\x7b\x7a\xd6\x9a\x03\x01\xda\x06\x3e\x38\x80\x07\x88\x9d\x5a\xbb\xfe\x75\xaf\xc4\x7c\x9d\x1a\xc4\x3d\xf4\x03\x5e\xda\x5f\xa2\x41\x1e\xe4\xfe\xb6\x37\x43\xe4\x84\x45\x47\x9d\x88\x52\x1a\xe7\x15\xca\xc6\x1c\x01\xc0\xbf\xc2\x3b\xd7\xec\x4f\x6d\xe5\x9e\xf6\x89\x74\x88\xd7\xec\xaa\x17\x99\xa0\xb5\x21\x15\x5a\xe2\xcd\xe4\xb7\xd3\xd0\x48\x33\x41\xbc\x04\x7c\xea\xf1\xfa\x54\x27\x78\xb9\x81\x73\x67\xb1\xdd\x13\x24\x59\x8d\x75\xb0\xb9\xc5\x61\x09\x85\xb9\x75\x8c\x8c\x96\x1d\x05\x2f\x72\x89\xdd\xa9\x9e\xe8\xe8\xb4\x3e\x6b\xe6\x44\xcf\xdd\x3d\xb9\x70\xa8\xb6\xa2\x2e\xbd\x59\x70\xdb\x3d\x24\xb3\x66\xfe\x5a\x92\xf2\x60\x8e\xf6\x4a\x04\xf7\x93\x47\x65\x41\xdb\xac\xf4\x12\x10\x91\x95\xc2\xc1\xf8\xf0\x0f\x43\x27\x42\xf2\x4d\xb2\xca\x53\x64\x45\xc9\x05\x26\xdd\x91\x4d\x76\x5c\x14\xc9\x86\x62\xdd\xd1\x41\x23\x4c\x10\xbd\x45\x42\x18\x92\xde\x8e\x5b\x7c\xfd\xf2\x0b\xd8\x65\x5d\xc9\xb7\x87\x4b\x6a\x84\xa9\x7f\x9d\x2b\x59\xc1\x06\xcb\x7d\x66\xbf\x79\xf3\xf0\x4d\x9f\xdd\x75\x8f\xe9\x91\x72\x37\x3e\xb2\x3b\xdf\x7b\x0f\xea\xfa\xc8\xee\x24\xf1\x35\xdd\x5d\x5e\x15\xc4\xf6\xda\x01\x84\xc5\x75\x22\xab\x8a\x89\xc2\x77\xc4\x04\xd6\x1d\x87\xd8\x5f\x1b\x87\x16\x95\x05\x7d\xde\xd9\x96\x62\x59\xfe\x90\x57\x85\xeb\x54\xf2\x8a\x02\x73\x5e\x15\x1f\x9b\x4e\xec\xf8\x84\x79\xe6\xb7\x4c\xc2\x75\x48\x0a\xf1\xb7\xb9\x5f\x42\xb3\x33\x2e\x90\x96\xd5\x8d\x21\xeb\xdc\x99\x36\xb7\x92\xa6\xdb\x69\x3b\xef\xb9\xa7\xcd\x7b\x5e\xcc\x1e\x72\x4f\x63\xb3\x96\x2f\xed\xb2\xdd\xc5\xc0\x96\x10\x1c\xc1\x47\xae\xdc\x0e\xc9\xf3\xff\x5d\x82\x5d\x3b\xa1\xfe\xaa\x73\x0c\x7f\xe8\xed\xb2\x62\x53\xee\xd7\xf0\x9c\x97\x98\xc2\x5f\x83\x14\x9d\x45\x9e\xf1\x12\x93\x98\xe6\xe2\x3d\x01\x89\x90\xf6\x15\x19\xdf\x0a\x7b\x57\x6b\xa4\xe7\xc2\x5e\x2c\x67\x31\xa5\xbd\xfd\x6a\x72\x78\xf6\xa4\xbc\x5f\x51\xd4\x5a\xb9\xf8\xd2\x09\x89\xce\xe0\xb8\xd4\x12\x9a\x40\x61\xd0\x93\xb7\x25\xaf\xad\x0d\xae\x76\xa8\xef\x42\x18\x54\x82\x95\xee\xd6\xc5\xee\xd7\x56\xc0\x7d\x15\xec\x94\x85\xb7\x5e\x67\xdf\xfd\x26\xd8\x65\x0d\x2b\xae\x36\x6b\x44\x83\xf9\x66\xa1\x70\x83\x55\xed\xd4\xe2\x95\x4b\xc8\xe2\x4e\xcf\xaf\x54\x92\xac\x51\xb8\xbb\x7f\x6a\x30\x6c\xea\xf8\x47\xd7\xd5\x0e\x91\xfc\x9a\xce\xba\x34\xcf\xe7\x10\x32\x3a\x97\xd9\x89\xac\x57\xc9\x3c\xb5\xe8\x86\xdf\xbf\x4a\x33\x3e\x8d\xff\xd3\x7b\xfa\xa2\xd8\xa7\x88\x68\x70\x6b\x3d\x80\x3c\x83\xe4\x33\xcf\xdc\xe1\x7b\xf0\x87\xa3\x09\x48\x9d\x9d\x2c\x2b\x59\x24\x1d\x68\x0a\xe3\x3f\x8e\xc7\xaf\x54\x4c\x4e\x48\xfe\xa9\x98\x75\x51\xec\xf5\x90\xfe\xc2\x4f\x4a\x1a\x6c\x63\xa1\x91\x6e\x49\xa7\x8d\x90\xa5\xd6\x2a\x8a\x6e\xfe\x85\x7b\x81\x13\xdb\xde\x14\x2f\x17\x03\x41\x1d\x2f\x8b\xbe\x7f\x59\x74\xf9\xbf\x78\x59\x74\xf9\x8a\xcb\x22\xaa\x6f\xfd\x15\x8e\x3f\x6e\x74\x1f\x87\xb4\x78\xdc\x6d\x3b\x30\x51\x84\x9b\x49\xc8\x5d\xcd\xa7\xb3\xde\xa7\x01\x5b\x5f\x15\x84\x0f\x03\x1c\xf6\xb5\xf3\xc1\xa3\x97\x0e\x08\x77\x5c\x21\xb7\x1f\x2a\x0c\xa3\x01\xd3\x1a\x95\xb9\x94\xce\x46\x9d\x15\xb8\x1d\xb6\xba\x31\x77\x35\xdd\xeb\xc7\xd6\x28\xd9\x83\xcb\xc5\xd9\x0e\xe3\x56\x5f\xb5\xa3\x8b\x59\x57\xc3\x94\xc4\x81\x45\xef\x76\x2d\x76\xf7\xf4\x76\xc2\x9f\xf3\xd8\x06\xc3\x48\x70\xbd\x06\x75\x9b\xb5\x92\x33\xd4\xd9\xda\xf7\x43\x99\x46\xea\x9f\x1b\x0c\x84\x91\xc0\xfd\xd5\xd6\x9a\xa3\x74\x37\x79\xf8\xc4\x0d\xda\x04\xbd\x85\x69\xce\x4a\xdb\x17\x3d\x13\x3b\x94\x72\x08\x8d\x68\x3f\xbd\xd8\xd4\x50\x4f\x06\x84\xe2\x4c\xc9\x8a\x64\xe9\x5a\xc6\x9d\xb2\x1b\x28\xcc\x91\x3f\x60\x71\x83\x4f\xc6\x5f\xea\xae\x1d\x95\x87\xdf\x8a\x57\xd3\x9a\xe5\x98\xb4\x1e\xd1\xcc\xef\xc6\x47\xe2\x7e\x38\xf4\x31\x6c\x0d\x13\x35\x31\xe1\x12\xd4\xc5\xa9\xc0\x7c\x29\x92\x78\x8a\x4e\x9e\x64\xcb\xad\xdd\x86\xf3\x34\x2b\x89\xae\xf9\xed\x71\x65\xfd\xea\x46\x12\x53\xbe\x59\x5e\xf7\x90\x0d\xc1\x58\x3c\x3b\xd9\xf6\x01\x94\xcf\x03\xc3\xe7\x4c\x5f\x29\x9c\xf3\xa7\xa4\xcf\x48\x0a\xb1\x75\xa6\xd8\x29\x70\x50\x33\xf2\xb6\x9e\x9c\xa6\x75\xc9\xcd\xe5\xe6\x1a\x88\x53\x38\x1c\xb6\x67\x94\x04\x1f\x53\x3a\x08\x77\x19\x84\xc5\x5e\x64\x1c\x3a\xb4\x0e\x6c\x02\x76\xe2\xee\xe0\x9e\xc6\x9e\xd7\x84\x36\x4f\xe2\xf7\xf9\x52\x92\xcc\xde\x3c\xfc\xb7\x70\x21\xbb\x7e\x85\xa0\x2c\xf8\x6f\x90\xcf\x96\x5a\xc3\x17\x0a\x1b\x6a\x9d\x77\x5a\x9d\xb1\xfc\x33\xb4\x70\x21\x98\xaf\x6d\x9d\x4d\x9d\x19\x0d\x5f\xc1\xc2\x1e\x04\xbf\x81\x29\x77\xca\xdb\x31\xd6\xb5\xad\x1b\xc9\xec\xb3\x90\x8f\xc2\x9f\x28\xd8\x08\x1a\xe4\x71\xd4\xe9\xa1\x87\xa7\x3d\x6a\x6b\xf3\xc4\x9a\x79\x7a\xa3\xb1\x9f\x5e\x75\xb1\x3a\x14\x20\xe7\xde\x5f\x92\x3d\x71\xce\x1f\x56\x84\x9b\xd2\x76\x8f\x2d\xd8\xde\x79\xd7\x76\xc5\xdf\x7d\x0c\x14\xdb\x05\x20\xf3\xbc\x51\xca\x9f\x90\x48\x75\xd4\xeb\xaf\x9f\xa3\xff\x09\x00\x00\xff\xff\xaa\x3d\x7e\xf6\x7a\x2c\x00\x00") - -func testImagesNetexecNetexecGoBytes() ([]byte, error) { - return bindataRead( - _testImagesNetexecNetexecGo, - "test/images/netexec/netexec.go", - ) -} - -func testImagesNetexecNetexecGo() (*asset, error) { - bytes, err := testImagesNetexecNetexecGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/netexec/netexec.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNetexecPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x51\xcb\x8e\xdb\x30\x0c\xbc\xe7\x2b\x06\xe8\xb5\x4e\x36\x7d\x61\xa1\x6b\x17\x68\x8f\x01\x9a\xf6\x4e\xcb\xb3\xb1\xb0\xb2\x64\x88\x74\xd2\xf4\xeb\x0b\x39\xce\xa6\x68\xd0\x1f\xe8\x45\x80\x38\x0f\x92\x43\x19\xc3\x0f\x16\x0d\x39\x39\x1c\xb7\xab\x97\x90\x3a\x87\x5d\xee\x56\x03\x4d\x3a\x31\x71\x2b\x20\xc9\x40\x87\x44\xe3\x4f\xfa\x15\x10\xa5\x65\xd4\x8a\x00\x32\x8e\x37\x48\x47\xfa\x5a\xf6\x39\x99\x84\xc4\x32\x93\x9a\x3b\x03\x20\x0c\x72\xa0\xc3\xc1\x97\x75\xc8\x9b\x97\xa9\x65\xa9\xb0\x36\x7c\xc7\xc6\xa8\xd6\xcc\x0c\xdd\x2c\xa2\x46\x86\xee\xd3\x07\xb7\x5d\x6f\x67\xf9\x98\x8b\x2d\x03\x34\xb7\x6e\xbb\x5c\xcc\xe1\xf1\xe1\xf1\x61\x46\x80\xb1\x64\xcb\x3e\x47\x87\xfd\xe7\xdd\x3f\xd9\xdb\x3b\xf6\xf7\xa7\x0b\xfb\x0d\x0e\xe1\x48\x58\x1f\x14\x63\xee\x60\x3d\xa1\x32\x10\x31\x1c\x99\xa8\x0a\x49\x1d\x0a\xa5\x0b\xf3\x6f\x2c\xb9\x25\x5a\x7a\x99\x94\x8b\xc3\x89\x90\x78\x92\xb3\xe2\x24\xc9\x66\x8b\xba\x6e\xa4\xc1\x32\x0a\xd5\xa4\x18\x82\x21\x3c\xd7\xb7\xa5\xcf\x03\x75\x11\x4f\xa9\x9a\x9f\xdf\xce\x7d\xc4\x6e\x03\x58\x18\x58\xad\x2f\x9e\x19\xb9\x55\x96\x23\x6f\xb3\x2c\x06\xa2\x10\x68\x38\x24\x89\x95\x76\x69\x56\xf3\x0d\xe9\xb0\x9e\x39\xd7\x55\x76\x75\x76\xb7\x44\xd1\x9b\x8d\x5f\x68\xd7\x2f\x30\x8a\xf5\x0e\x9b\x9e\x12\xad\xff\x75\x2b\xff\x9d\x38\xa0\xbe\x67\xbd\xf6\xd7\xfd\x7e\xb7\x14\x43\x0a\x16\x24\x3e\x31\xca\xf9\x1b\x7d\x4e\x9d\x3a\x6c\xaf\x92\xba\x4a\x9e\xec\x15\xf8\xb8\xd4\x9f\x25\xc4\xa9\x70\xdf\x17\x6a\x9f\x63\xe7\xf0\xfe\x7a\x28\x96\x90\xbb\x7b\x27\x9d\xbc\xa7\xea\x1f\x8a\xcb\x69\x5f\x43\xf9\x4f\x77\xfc\x1d\x00\x00\xff\xff\x7d\x11\x89\xab\xc5\x03\x00\x00") - -func testImagesNetexecPodYamlBytes() ([]byte, error) { - return bindataRead( - _testImagesNetexecPodYaml, - "test/images/netexec/pod.yaml", - ) -} - -func testImagesNetexecPodYaml() (*asset, error) { - bytes, err := testImagesNetexecPodYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/netexec/pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNettestDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6f\x9b\x30\x14\x85\xdf\xfd\x2b\x8e\xe0\x65\x93\x32\xc8\xf2\x30\x55\xdb\x13\x4b\xa9\x86\xda\x41\x14\xe8\xba\x68\xda\x83\x03\x37\x70\x25\x62\x33\xfb\x32\x9a\x7f\x3f\x91\xa6\xd2\xa2\xfa\xd1\xf7\xf3\xf1\xe7\xe3\x10\x6b\x3b\x9c\x1c\xb7\x9d\x60\xb5\xfc\xf8\x09\x55\x47\xb8\x1f\xf7\xe4\x0c\x09\x79\x24\xa3\x74\xd6\xf9\x48\x85\x2a\xc4\x03\xd7\x64\x3c\x35\x18\x4d\x43\x0e\xd2\x11\x92\x41\xd7\x1d\xbd\x4e\x16\xf8\x41\xce\xb3\x35\x58\x45\x4b\xbc\x9b\x81\xe0\x32\x0a\xde\x7f\x51\x21\x4e\x76\xc4\x51\x9f\x60\xac\x60\xf4\x04\xe9\xd8\xe3\xc0\x3d\x81\x9e\x6b\x1a\x04\x6c\x50\xdb\xe3\xd0\xb3\x36\x35\x61\x62\xe9\xce\xd7\x5c\x42\x22\x15\x62\x77\x89\xb0\x7b\xd1\x6c\xa0\x51\xdb\xe1\x04\x7b\xf8\x9f\x83\x96\xb3\xf0\xbc\x3a\x91\xe1\x73\x1c\x4f\xd3\x14\xe9\xb3\x6c\x64\x5d\x1b\xf7\x2f\xa0\x8f\x1f\xb2\x75\x9a\x97\xe9\x87\x55\xb4\x3c\x1f\x79\x34\x3d\x79\x0f\x47\x7f\x46\x76\xd4\x60\x7f\x82\x1e\x86\x9e\x6b\xbd\xef\x09\xbd\x9e\x60\x1d\x74\xeb\x88\x1a\x88\x9d\x7d\x27\xc7\xc2\xa6\x5d\xc0\xdb\x83\x4c\xda\x91\x0a\xd1\xb0\x17\xc7\xfb\x51\xae\xca\x7a\xb5\x63\x7f\x05\x58\x03\x6d\x10\x24\x25\xb2\x32\xc0\xd7\xa4\xcc\xca\x85\x0a\xf1\x94\x55\xdf\x8a\xc7\x0a\x4f\xc9\x76\x9b\xe4\x55\x96\x96\x28\xb6\x58\x17\xf9\x6d\x56\x65\x45\x5e\xa2\xb8\x43\x92\xef\x70\x9f\xe5\xb7\x0b\x10\x4b\x47\x0e\xf4\x3c\xb8\xd9\xdf\x3a\xf0\x5c\x23\x35\x73\x67\x25\xd1\x95\xc0\xc1\xbe\x08\xf9\x81\x6a\x3e\x70\x8d\x5e\x9b\x76\xd4\x2d\xa1\xb5\x7f\xc9\x19\x36\x2d\x06\x72\x47\xf6\xf3\x67\x7a\x68\xd3\xa8\x10\x3d\x1f\x59\xb4\x9c\x77\xde\x3c\x2a\x52\xea\x6e\x5b\x7c\x87\xaf\x9d\x96\xba\x53\xeb\x62\xb3\x83\x21\x11\xf2\x82\x58\xa5\x3f\x37\x45\x99\xe2\x66\x79\xb3\x54\x69\x5e\x6d\x77\x9b\x22\xcb\x2b\xfc\x0a\xe2\x0b\x13\xfc\x56\xff\x02\x00\x00\xff\xff\x47\xe1\x53\x83\x8c\x02\x00\x00") - -func testImagesNettestDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesNettestDockerfile, - "test/images/nettest/Dockerfile", - ) -} - -func testImagesNettestDockerfile() (*asset, error) { - bytes, err := testImagesNettestDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nettest/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNettestMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x4f\xe3\x48\x10\x85\xcf\xdb\xbf\xe2\x29\xe6\x90\x48\xc1\x61\xd1\x8a\x03\x2b\xb4\xf2\x3a\x19\xb0\x40\xf6\xc8\x36\x20\x4e\xa8\x6d\x57\xec\x92\x9c\x6e\x4f\x77\x79\x4c\xfe\xfd\xc8\x01\xa4\x41\xd3\xb7\xae\xf7\xaa\xfa\xeb\x57\x01\x62\x3b\x1c\x1d\xb7\x9d\xe0\xf2\xe2\xef\x2b\x94\x1d\xe1\x7e\xac\xc8\x19\x12\xf2\x88\x46\xe9\xac\xf3\xa1\x0a\x54\x80\x07\xae\xc9\x78\x6a\x30\x9a\x86\x1c\xa4\x23\x44\x83\xae\x3b\xfa\x54\xd6\x78\x22\xe7\xd9\x1a\x5c\x86\x17\x58\xce\x86\xc5\x87\xb4\x58\xfd\xab\x02\x1c\xed\x88\x83\x3e\xc2\x58\xc1\xe8\x09\xd2\xb1\xc7\x9e\x7b\x02\xbd\xd5\x34\x08\xd8\xa0\xb6\x87\xa1\x67\x6d\x6a\xc2\xc4\xd2\x9d\x9e\xf9\x18\x12\xaa\x00\x2f\x1f\x23\x6c\x25\x9a\x0d\x34\x6a\x3b\x1c\x61\xf7\xbf\xfb\xa0\xe5\x04\x3c\x9f\x4e\x64\xb8\xde\x6c\xa6\x69\x0a\xf5\x09\x36\xb4\xae\xdd\xf4\xef\x46\xbf\x79\x48\xe2\x5d\x5a\xec\xce\x2f\xc3\x8b\x53\xcb\xa3\xe9\xc9\x7b\x38\xfa\x31\xb2\xa3\x06\xd5\x11\x7a\x18\x7a\xae\x75\xd5\x13\x7a\x3d\xc1\x3a\xe8\xd6\x11\x35\x10\x3b\xf3\x4e\x8e\x85\x4d\xbb\x86\xb7\x7b\x99\xb4\x23\x15\xa0\x61\x2f\x8e\xab\x51\xbe\x84\xf5\x49\xc7\xfe\x8b\xc1\x1a\x68\x83\x45\x54\x20\x29\x16\xf8\x3f\x2a\x92\x62\xad\x02\x3c\x27\xe5\x5d\xf6\x58\xe2\x39\xca\xf3\x28\x2d\x93\x5d\x81\x2c\x47\x9c\xa5\xdb\xa4\x4c\xb2\xb4\x40\xf6\x0d\x51\xfa\x82\xfb\x24\xdd\xae\x41\x2c\x1d\x39\xd0\xdb\xe0\x66\x7e\xeb\xc0\x73\x8c\xd4\xcc\x99\x15\x44\x5f\x00\xf6\xf6\x1d\xc8\x0f\x54\xf3\x9e\x6b\xf4\xda\xb4\xa3\x6e\x09\xad\xfd\x49\xce\xb0\x69\x31\x90\x3b\xb0\x9f\x97\xe9\xa1\x4d\xa3\x02\xf4\x7c\x60\xd1\x72\xaa\xfc\xf1\xa9\x50\xa9\x22\x8f\x8b\x1b\x43\x22\xe4\x45\x45\x79\x7c\x87\xff\x6e\xa0\x0f\xcd\xd5\x3f\xaa\x8c\xf2\xdb\x5d\x39\xdf\xcf\x96\xf1\x63\xbe\x4d\xf2\x95\xba\xcd\x1e\xa2\xf4\xf6\xf5\x69\x97\x17\x49\x96\xce\x5a\xaf\x4f\xad\x45\x1e\xbf\x6e\x93\x1c\xb3\xd9\x58\x69\xd8\xe1\x6c\xe9\x3b\xea\x7b\x0c\x53\xb3\x5a\x29\x7a\x1b\xac\x13\xa5\x2a\x36\xd7\xea\xaf\x30\xdc\xf0\x41\xb7\x74\x3e\x0a\xf7\xa1\xef\x50\xb1\xc1\xd9\x72\xa6\x59\x29\x15\x7e\xbf\xcb\xd2\x97\xeb\xb9\xa8\x7e\x05\x00\x00\xff\xff\x6e\x55\x58\x46\xed\x02\x00\x00") - -func testImagesNettestMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesNettestMakefile, - "test/images/nettest/Makefile", - ) -} - -func testImagesNettestMakefile() (*asset, error) { - bytes, err := testImagesNettestMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nettest/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNettestVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesNettestVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesNettestVersion, - "test/images/nettest/VERSION", - ) -} - -func testImagesNettestVersion() (*asset, error) { - bytes, err := testImagesNettestVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nettest/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNettestNettestGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x5a\xff\x6f\xdb\xc6\x92\xff\x59\xfc\x2b\xe6\x78\x70\x42\xba\x0a\xe9\x14\x57\xa0\x70\xea\x02\x7e\x76\xd2\xf8\xea\xd8\x46\xe4\xbc\xe0\x21\xaf\x28\x56\xe4\x88\xda\x67\x6a\x97\xdd\x5d\x4a\x11\x0c\xfd\xef\x87\x99\x5d\x52\x94\x2c\xf7\x5d\x7a\xe7\x02\x95\x44\xee\xce\xcc\xce\x97\xcf\x7c\xd9\xe4\xc7\xd1\x85\x6e\xd6\x46\x56\x73\x07\xdf\x9f\xbc\xfe\x2f\xb8\x9f\x23\xfc\xda\x4e\xd1\x28\x74\x68\xe1\xbc\x75\x73\x6d\x6c\x16\x45\xd7\xb2\x40\x65\xb1\x84\x56\x95\x68\xc0\xcd\x11\xce\x1b\x51\xcc\x11\xc2\x9b\x31\xfc\x1d\x8d\x95\x5a\xc1\xf7\xd9\x09\x24\xb4\x20\x0e\xaf\xe2\xf4\x4d\xb4\xd6\x2d\x2c\xc4\x1a\x94\x76\xd0\x5a\x04\x37\x97\x16\x66\xb2\x46\xc0\xaf\x05\x36\x0e\xa4\x82\x42\x2f\x9a\x5a\x0a\x55\x20\xac\xa4\x9b\x33\x93\x40\x22\x8b\xfe\x11\x08\xe8\xa9\x13\x52\x81\x80\x42\x37\x6b\xd0\xb3\xe1\x2a\x10\x2e\x8a\x00\x00\xe6\xce\x35\xa7\x79\xbe\x5a\xad\x32\xc1\x52\x66\xda\x54\x79\xed\x57\xd9\xfc\xfa\xea\xe2\xed\xcd\xe4\xed\xab\xef\xb3\x93\x28\xfa\xa4\x6a\xb4\x16\x0c\xfe\xd1\x4a\x83\x25\x4c\xd7\x20\x9a\xa6\x96\x85\x98\xd6\x08\xb5\x58\x81\x36\x20\x2a\x83\x58\x82\xd3\x24\xe7\xca\x48\x27\x55\x35\x06\xab\x67\x6e\x25\x0c\x46\xa5\xb4\xce\xc8\x69\xeb\x76\x14\xd4\x49\x25\x2d\x0c\x17\x68\x05\x42\x41\x7c\x3e\x81\xab\x49\x0c\x7f\x3b\x9f\x5c\x4d\xc6\xd1\xe7\xab\xfb\xf7\xb7\x9f\xee\xe1\xf3\xf9\xc7\x8f\xe7\x37\xf7\x57\x6f\x27\x70\xfb\x11\x2e\x6e\x6f\x2e\xaf\xee\xaf\x6e\x6f\x26\x70\xfb\x0e\xce\x6f\xfe\x01\xbf\x5e\xdd\x5c\x8e\x01\xa5\x9b\xa3\x01\xfc\xda\x18\x92\x5d\x1b\x90\xa4\x3a\x2c\xb3\x68\x82\xb8\xc3\x7c\xa6\xbd\x30\xb6\xc1\x42\xce\x64\x01\xb5\x50\x55\x2b\x2a\x84\x4a\x2f\xd1\x28\xa9\x2a\x68\xd0\x2c\xa4\x25\xe3\x59\x10\xaa\x8c\x6a\xb9\x90\x4e\x38\xfe\xfd\xe4\x38\x59\x74\x9c\x47\x51\x9e\xc3\x39\x38\xa9\xd6\xb0\xc2\x29\x58\x34\x4b\x34\xcc\xab\x98\x63\xf1\x40\x44\x15\xba\x95\x36\xfc\xb5\xd0\x4a\x61\xe1\xe4\x52\xba\x75\x16\xe5\x39\xed\xfe\x2c\xeb\x1a\x4a\x29\x6a\xd0\xad\x03\xa7\xc7\xc4\x99\x4e\x84\x05\xfd\x84\x39\x0a\x03\x33\xa3\x17\x63\xc0\x25\x9a\x35\x34\xba\x04\x37\x17\x8e\xd4\x29\x60\x81\x8b\x29\x1a\xd0\x33\xa2\xc5\xe7\x43\xb3\x94\x05\x42\x23\x2c\xb9\xa9\x54\xfc\x74\x56\x8b\x0a\x5e\x85\x77\x3b\xac\x59\x64\x10\x24\x7e\x90\x5e\x2b\xa8\xe4\x12\x15\xbc\x6a\xb4\x71\xdd\xe2\xbf\x4b\x2b\x1d\xe4\x06\x05\x9b\xdf\x06\xf5\x16\xad\x31\xa8\x1c\x58\x27\x1c\x8e\xc9\x02\xf9\x1f\xad\x64\xc9\xed\xbc\x75\x50\xea\x95\xda\x23\x41\x4b\x5b\xdb\x11\x21\x39\x73\xd3\x2a\x32\x40\x3e\x13\xb2\x86\x12\x1d\xd9\x41\xb1\xe2\x33\x48\x6a\xe9\xd0\x88\xba\x5e\x8f\x41\x3a\x58\xc9\xba\x26\x62\x06\x5d\x6b\x14\x68\x85\xde\xf9\xb5\x45\x58\x69\x53\xda\x2c\x0d\xec\x72\xf2\x4f\xf6\xba\xd6\x7a\x7f\xd6\xec\x2d\xc1\x20\xe0\xd0\x3a\xd2\x26\x8b\x62\xb0\x92\xd6\xa1\xd9\xb3\x51\x23\x8a\x07\xf2\x91\x85\x90\x2a\x8a\xe4\x82\x34\x02\x49\x34\x8a\xa7\x6b\x87\x36\x8e\x46\x31\xaa\x42\x97\x24\xfb\xbf\xac\x56\xf4\x80\x54\xcd\x9f\x0b\x47\x1f\x52\xe7\x52\xb7\x4e\xd6\xf4\xa3\xd6\xfc\x4a\xa1\x0b\x1f\x39\x45\x28\x7d\xd7\xd6\xff\x3f\xb7\xb2\x52\x82\x17\xdb\xb5\x2a\xfc\xa7\x2d\x44\xcd\x8f\x9c\x5c\x60\x1c\x45\xa3\xe5\x6b\x88\x1f\x7e\xb4\x99\xd4\xb9\x68\xe4\x42\x14\x73\xa9\xd0\xac\xf3\xe6\xa1\xa2\x07\x36\x5f\xa0\x13\xf9\xf2\x35\xed\x79\x6e\x1d\xc9\x94\x5b\x74\xc4\xd8\xa0\x75\x45\x2d\xc9\x90\xdd\x7a\xff\xf3\x55\xa5\x73\x7a\x19\x47\x23\xff\xc0\xe2\x76\xc9\x43\x0f\x90\x4c\xd0\x2f\xc8\xfb\x75\xbf\x57\xa8\xd0\x08\x87\x65\x2e\x95\x43\xa3\x44\xdd\xbf\x8b\xa3\x34\x8a\x96\xc2\x90\x2e\x59\xa7\xfd\xdf\x19\xfb\x6a\x76\xa5\x5c\x12\xd3\x9b\x78\x0c\x3f\x9e\xfc\x78\x32\x86\xf8\x8e\xd6\xa9\x96\xfd\x9d\x9d\x87\x1d\xd7\x65\x71\x1a\x8d\x1a\x44\x73\xa1\x5b\xe5\x9e\xd2\x40\x34\x96\x88\x8c\x21\xfe\xd0\x5a\x07\x33\xa9\x4a\x10\x0e\x6a\x14\xd6\x79\xfc\x5d\x08\xb5\x06\x5e\xd8\xc3\x04\x3b\x87\xd3\xec\x9e\xcc\xa1\x8b\xab\x1d\x29\x27\xce\x48\x55\x25\x71\x78\x19\x8f\x81\x8c\x4a\x7b\xe9\xeb\x24\x6c\x71\xda\x33\x7d\xce\xfd\xa4\x62\x0e\x4a\x2c\xd0\x36\x22\xf0\xd8\xe3\xd0\xbf\x24\xc2\x25\xce\x44\x5b\x33\x8f\x9b\x7e\x13\x47\x81\xb4\x44\x32\x83\xfb\xdb\xcb\xdb\x53\xd8\x1a\x08\xec\x5c\xb7\x75\x09\x0b\xf1\x10\x72\x4e\x29\x6d\x41\xc0\x47\xe8\xce\xec\x4b\xac\xc5\x7a\x32\x6f\x1d\x85\xec\x8e\x0a\xf9\xcd\x2b\x1b\x5e\xc5\x63\x20\x6b\xdc\xb4\x01\x78\xc0\x62\xa1\x95\x8f\x22\x5e\x09\xdd\x4a\x58\xcd\x51\x81\xc1\x02\xe5\x92\xe0\x6f\x72\xf5\xcb\xfd\xdb\x8f\x1f\x88\x5b\xca\xc8\x39\x21\xd0\x00\x67\x44\xf1\x60\x59\xeb\x9d\x9f\x78\x38\x21\xe2\xba\x35\x50\x4b\xe7\x6a\xe4\x64\x16\x10\x96\x10\x05\xae\xdc\x4b\x1b\x60\x00\x4b\x58\xa2\x99\x0a\x27\x17\x40\x87\x62\x62\x1e\xab\x50\x95\x8d\x96\xca\x65\x91\x5b\x37\x18\x58\x5a\x67\xda\xc2\xc1\x63\x34\xca\x73\x78\xaf\xad\x23\xf5\x12\x52\x90\x7b\x6b\x4a\xbc\x04\xc2\x8a\x00\x17\x8a\xb9\x50\x15\x96\xaf\x5e\x81\x24\x86\xa2\x5e\x89\xb5\x05\x2b\x66\xe8\x71\x43\x94\x59\x34\xea\x69\x58\xb6\x57\xc4\x84\xa9\x88\x98\x62\xad\x57\x30\x93\x58\x97\x7d\x6e\xf5\xf0\x5d\xeb\xe2\x81\x58\xce\xb1\x2e\x61\x8a\x33\x6d\x90\xa9\x91\xa6\xb4\xe9\x92\x6b\x16\x8d\x26\xa8\x06\xf1\x11\xfe\x16\xa2\xf9\xe2\x79\xfd\x26\x95\x8b\x46\x1f\x59\xcb\x58\xfe\xe9\xa2\xb7\xc6\x68\x63\xf7\x28\x7d\xf9\x2d\xc8\x3c\xba\xd6\xd5\x13\x3e\x83\xd7\x13\x27\xeb\xfa\x42\x2b\x27\x0a\x92\xec\x8e\xe3\x65\xaa\x75\x1d\x45\x23\x3e\x0c\x01\x56\xf6\xa1\x75\xf8\x35\xda\x44\xd1\xac\x55\x05\x24\x16\x8e\x59\xe5\x29\x94\x5a\xe1\xde\xee\x24\x25\x13\xd8\x8c\x76\x67\xd7\xba\x78\x48\xd8\x0f\x67\x68\x20\x3c\xfc\xa4\xea\xf0\xd8\x66\x07\xf9\x9f\xc1\x4c\xd4\x16\x89\x61\x9e\x7b\xef\x98\xf8\xfc\xe2\x3d\xc3\x42\x4c\x21\x4c\xa1\x12\x92\x4c\xcc\x59\x2a\xa6\x54\x13\x67\x4f\xa4\x1c\x50\x48\x56\xec\x72\xd9\x47\xb4\x8d\x56\x16\x3f\x53\x3a\x31\x63\x30\x70\x1c\x9e\xff\xd1\xa2\x75\xdf\x70\x06\x39\x83\x1a\x55\x62\x33\x32\x69\x0a\x3f\x9f\xc1\xf1\x16\xb8\x5e\xbc\x08\x2f\x3b\x53\xee\x2f\x78\x8c\x46\xa3\xd9\xc2\x65\xef\x1a\x23\x95\x9b\x25\xab\x71\x38\x5b\x1a\x8d\x46\xfe\xb4\xd1\x68\xc3\x5c\x9e\x51\xd6\x21\x0a\x9d\x56\xf6\x88\xe4\x39\x5c\xeb\x6a\x06\x85\x50\x2f\x1d\x4c\x11\x28\x05\x61\x09\xab\x39\xd5\xaa\x73\x5d\xb3\x9f\x52\x98\xd1\xe1\xa8\x04\x04\x7f\xe8\xd6\xd2\x0b\x01\x95\x36\x94\xf6\x14\x46\xa3\x4a\x83\xcd\x88\x5a\x12\x5f\x62\x51\x0b\x72\x27\x20\xfd\xb7\xc6\xd7\x65\x47\x36\x3f\xb2\xbe\xd6\x3d\x2a\xc1\x92\xbf\x53\xfc\x1d\x95\x01\x3c\xb0\xec\x7e\x77\x68\x7e\xdc\xe3\xe1\x18\x8e\x03\xfa\x8e\x87\xca\x1d\xef\x2b\x73\x3c\x50\x65\x1a\x3d\x51\x03\xbb\x43\x3a\x74\xa3\x8f\x84\x1e\x5c\x42\x58\x46\x21\xca\xef\xc0\xd9\x1e\x4b\x8f\x4f\x87\x9d\x87\xf6\xfd\xff\xbb\xce\x2a\x63\x1a\xef\x51\x94\x68\x12\x26\xe2\xbd\xf4\xf6\xd7\x34\x1a\x4d\xc7\x80\xc6\xc0\xe9\x19\x4b\x99\x7d\x10\xc6\xce\x45\x7d\xa5\x4a\x54\x2e\xb1\x63\x88\xc9\xff\xff\xe9\x38\x8f\x65\xa2\x69\x50\x95\x6f\x8d\x49\xd0\x98\x34\x1a\xfd\xee\x37\x9f\x41\xe0\x91\x4c\x0f\x2d\xf3\x9a\xe1\x05\x77\xda\x72\xf5\xc9\x85\xa5\x36\x0b\xe1\x3c\xa2\x25\x43\x15\xa5\x8c\x76\x68\x1d\x27\x06\xc6\x63\x5f\x8f\xcd\x85\x2a\x6b\x3a\xa2\xcf\x48\x4e\x3c\x60\xc0\xe6\x2d\xf1\x2d\x3e\x4f\x74\x6b\x8a\x1e\x56\x47\x97\x94\x34\xa1\xfb\x39\x90\x89\x34\x4d\x32\xf5\xf9\x60\xba\x0e\x0c\x07\xb4\x79\xd1\x96\xf6\x3e\x68\x0f\x8c\xcf\xcb\xc9\xfb\xa8\xa2\xf4\x85\xae\x8f\x25\x2a\xa8\xc9\x1b\xd8\x01\x9e\x81\x0f\xaf\xc5\x6f\x70\x01\x6f\x73\x93\xfd\x4d\x97\xeb\xec\xa2\xd6\x16\x3d\xe2\xfd\xdf\x1d\x83\x4a\xac\x55\xb3\xd5\xec\xae\x61\xd9\x59\x6e\x70\x75\x89\x64\x32\x93\x78\x09\xd2\xcc\xff\x4e\x5e\xac\x9a\xd4\xa3\xd6\xaa\xc9\x82\x21\xce\xce\x20\x8e\x19\x48\x86\x84\x28\x9a\x38\xb9\xcc\x92\xf8\x68\x79\x0a\xbf\x68\xd7\x99\xdf\x87\xb5\xd2\x60\x99\x40\x3c\x06\x9b\x75\x8a\x27\xea\x1b\xc0\xda\x22\x53\x64\xe0\xea\x13\xd9\xd9\x19\x28\x59\xf3\x8b\xd1\xf0\xf1\x5e\x56\x7b\xdc\x44\x23\x02\xac\xc1\x9a\x2f\xbd\xb8\xbf\x7d\xf7\x1d\xa3\xd9\xa1\x43\xbf\x55\xfe\xd0\xab\x34\xf3\x5f\x93\x17\xbd\x93\x3c\x76\x12\x9e\x0e\xa4\xdd\xa4\x5d\x14\xf4\xc4\x40\x94\xa5\xe5\xe8\x09\x3e\x5e\x4b\xeb\xc6\x20\x67\xfc\x4c\x5a\x6e\xf3\x95\xac\x33\xb0\xb0\xa0\xe2\x73\xea\xf1\x92\x1a\xd4\x7d\xd7\xd9\x89\x37\xda\xaf\x0d\x3b\x47\x20\xf6\x1f\x5b\x75\xd8\x2c\x24\xf2\xb3\xb0\x29\xe9\x9e\x70\x24\xfb\xef\x09\x2b\x37\x08\xcc\x50\x1e\xb0\xac\x93\x54\x57\xb0\x40\x6b\xa9\xbb\x21\xa9\x7b\x11\x49\xe4\x81\x98\x14\x11\x2f\x2d\x51\xe8\x7a\xcd\x15\x77\xac\x46\x37\xd4\xbe\x6b\x2a\x2a\x03\x19\x39\xe3\x06\x8d\xc3\x9a\x6b\xdd\x95\xb4\x48\x04\xa6\x58\xe8\x05\x91\x54\x15\xd7\x66\x42\xc1\x0f\x27\x27\xdd\x3e\xfb\x54\x17\x9c\x2c\x02\xb4\x78\x53\x8f\x41\x98\xca\x42\x96\x65\x5c\x23\xce\x44\x81\x8f\x9b\x6f\x2a\x1f\xe8\x04\x03\x85\x5d\xeb\x6a\x0c\xe4\xb7\x93\x90\x05\x3c\x3b\xcf\x27\xcb\xb2\x74\x98\xaf\xaf\x75\x95\xc2\xcf\x2c\xb4\x37\x80\x27\xc6\x9f\x5f\x5e\x9f\xfe\xb6\xd5\xf4\x21\x25\x3e\x63\xea\x49\x5b\x14\x68\xed\xac\xad\x27\x24\x92\xd3\x7b\x78\xf4\x6d\x85\x85\xcf\x7b\xc3\xa8\xe9\x9e\x1c\x08\x18\x0e\x09\x7a\xfb\x65\xcb\x95\x62\x65\xd3\x37\x65\x79\x0e\xb7\xad\xe1\xf6\x9a\x52\xaf\x56\xf5\xba\x2b\xca\xa7\xff\xc2\x82\x80\x84\x7f\xf1\x89\xa8\x9c\xe7\x33\x52\x9b\xec\x8b\x3a\xee\x1e\xee\x84\x61\x28\x63\x01\xbb\x34\x3d\x80\x90\x5a\x57\xd9\x3b\xe1\x44\x9d\xf8\xd6\xac\x31\x7a\x29\x4b\xec\x07\x15\xbe\x07\x89\xd9\x91\xa3\xd1\x3c\x08\xda\xe7\x3a\xbd\x8d\xcd\xa0\x84\xbd\x40\xe9\xe9\xcf\x92\x98\x83\x02\x2a\x74\x54\x0e\xc1\xbc\x8f\xef\xa3\x65\xcc\x04\x03\x13\x12\x74\xb7\x13\xfa\x19\xbc\xd1\x1d\x9a\xc5\xc5\x9c\xf8\x52\x13\x95\x50\x5b\x40\x12\x4c\xb8\x5f\xa7\xea\xc9\x77\xee\xd9\x8d\x76\x72\xb6\x4e\xfc\xf2\x31\x84\xee\x3d\x0b\xcd\x0f\x2d\xac\x34\x90\xb6\xbc\xa2\x46\xa3\x9f\x5e\xf9\xb5\xf4\x9d\x24\xbe\xf3\xfe\x18\x4f\x6a\xc4\x86\x84\xe5\x9a\xc8\xf7\x58\xa1\x4f\xc0\xaf\xd2\x51\x2c\x50\x25\xb4\x23\x2d\x91\x1f\x39\xb9\xc0\x8c\x77\x27\xfc\xf5\xb2\x35\x3c\x4b\x49\xf6\xd6\xc2\x31\xf8\xa5\x4c\x9c\xb7\x6a\x9b\xbd\xfd\x2a\x5d\x72\x42\xbf\x36\x49\x50\x8a\x37\xf5\xe9\x99\xb7\x36\x09\xbd\xc5\xc7\xe1\x5f\x6f\xa1\x68\x74\xb0\x5b\x38\x05\x67\x5a\x7a\x4b\x44\x2b\xdd\xe5\xd4\x5b\xc2\x0a\x9b\xbc\x60\x36\xe4\x2d\x9c\xc5\xde\x73\x9d\xf0\x8e\x14\x15\xf3\x4c\x29\x1e\x7b\xb5\x7d\x43\x62\xdd\x39\xcf\xe6\x30\x69\xea\xb9\x28\x2b\x71\x42\xef\x2b\xb8\xf4\xd0\x52\x46\xd0\xdd\xb5\xcc\xfd\xe0\x62\x3f\xe6\xda\x5d\xed\x33\x73\xea\x4f\xbf\xf5\x7e\xde\x7c\x2d\xad\x43\x75\xae\xca\x09\xad\x4c\x86\xd0\x14\x9f\x64\xfc\xdf\xe9\x11\x49\x7a\xdc\x68\x43\x05\xae\x92\x75\x4a\xa4\x2c\xd6\x48\x05\x4d\x07\x41\xef\x78\xc0\x51\xd7\x60\xe5\xb4\xe6\xb1\xa6\x1f\x32\xec\x8c\x07\x29\xa8\x1b\xed\x67\x1c\x6e\x8e\xd2\xec\x95\x67\x01\x93\x77\x2d\xe4\xfd\xa0\x43\x31\x42\x27\x72\xb2\x7b\xb9\x60\xe7\xf8\x61\xd7\x9f\x18\x43\xae\x14\xd4\xc2\x54\x08\x45\xdd\xf2\x78\xad\x0b\x40\x92\xaf\x6b\xcd\x2d\x65\xca\xc6\xa0\x73\x6b\x1e\x7c\x2a\x2b\x97\x98\x85\x16\xba\xb5\x63\x58\xa1\x4f\x3a\x3c\x8f\xa5\xf2\xcb\x62\xbd\xc4\x30\x42\x54\x7e\x92\xbc\x44\x43\x39\x48\x38\x58\xd0\xb1\x5e\x9f\x80\x6d\x8b\x39\x13\xe9\x0b\xd1\x86\xb0\x33\x08\x47\x90\xd9\x4b\xff\x13\xec\x05\x4a\xdf\x2a\xe4\xaf\x4f\xd2\xe3\xc1\xa9\x3c\xb2\xf6\x1b\xcf\xfe\x74\xe3\xbe\x42\x36\x11\xc7\xa6\x6e\xdd\x8e\xbe\x3e\x48\xd5\x3a\x64\x51\x27\x72\x21\x6b\x61\xea\x35\x9d\x59\x85\x51\xfb\xb4\x5d\x34\xd0\x6d\xb4\x3a\x4c\x7f\x9d\x2f\x77\x85\xd5\x8a\x27\xf4\x32\xa8\x9a\xe9\x04\x75\xdb\x8c\x0f\xda\xed\x7d\xfe\x98\x4f\xcf\xd8\xed\x79\xfe\x84\x87\x8e\x17\xf2\x13\x7b\xfc\xc1\x86\x3f\x8a\x46\x85\x56\x33\x59\xf5\x28\xbe\x9d\x3d\x66\x57\xea\xc2\xcb\x7d\xc1\x4b\xfe\x3d\xa8\x7f\xf2\x47\x77\x1a\x0a\x83\xe4\x9b\x9e\xf6\x1b\x5f\x3e\x11\xb8\xff\x53\x0d\xe0\x3d\xb0\xce\x48\x2a\x54\xee\x9e\x1a\x83\x33\x88\xc3\x35\x07\x1d\x2f\x5f\xaa\x32\xdb\x8e\xcd\xb2\xc6\x68\xa7\xa7\xed\xac\x9f\x7f\xf6\x62\xf7\xa3\x4c\xaa\x25\xdf\xe9\x4e\x64\xcf\xe1\x2f\x08\xce\xe4\x9e\x15\x3c\xcf\xe1\x52\xb7\xb4\x85\xef\x15\xbc\x0b\xac\xb4\x79\xf0\x9d\x4e\x17\x55\x5d\x84\xa3\x81\xa5\xbf\x85\xf2\x0e\xb0\xdc\x13\x3b\xbb\x0c\xd3\xbf\x75\x92\x66\x8c\x37\x26\xdc\x5a\x25\xe9\x9b\xff\x9d\xdc\x15\xba\x3d\x56\xfb\x52\x6f\x0b\xfb\x9d\xac\xb6\xbf\xe7\x3f\xfd\xa6\x65\xc8\x35\x33\xcd\xfe\x63\x38\x44\xd8\xbd\x6e\xf4\x8a\xa4\xf2\xae\x26\x55\x81\x09\xbf\x4f\x83\x3b\xeb\xd6\x75\x2f\x39\xe5\xf5\xc1\xe9\x33\x00\x36\x96\x28\x55\xe8\x3e\x77\x37\x1c\x6f\x3b\xdc\x49\xbc\x36\x52\xdf\x7b\x60\x63\xb3\x6b\xa4\xfa\xe5\xe9\xdc\x65\x34\x35\x28\x1e\xba\x4e\x83\xdd\xdb\x0f\x34\x8e\x96\xf9\xd1\x12\xe6\xc2\xc2\xd1\x72\x00\x68\xc9\xd1\x32\x1d\xc3\x6a\x2e\x8b\x39\x85\x29\xdf\xac\x71\xdd\x7b\xb4\x04\x61\xc3\xf5\x0e\x96\x19\x7c\x16\x3c\xe6\xe3\x31\xc8\x2e\x26\x92\x6f\x50\xd5\xdc\x36\xd9\x9f\x0e\x3c\xb0\xb1\xe9\xd8\x0b\x2f\xad\x4b\xf6\x07\x1d\x9b\x28\x78\x8f\x1f\xfb\x1a\x6c\xc8\xdf\x4a\xbe\x4d\x51\x50\x08\xbe\x83\x44\x83\x2f\x2d\x58\x62\xd7\x18\xdd\x88\x8a\x83\x21\x8c\x73\xb9\x81\x0b\x1e\xc6\xb4\x14\xae\x7c\x35\x68\x1c\x96\x5d\x76\x09\x6d\xc5\x56\x7e\x6e\x2a\xbc\x3d\x25\x59\xe0\xe4\x0d\x48\xf8\x09\x5e\xff\xf0\x06\xe4\x77\xdf\x7d\x8b\x6d\x88\x04\x36\x8c\x15\x42\x55\x48\x67\x0d\x6d\xe1\xc0\x10\xe7\xce\xe1\xa2\xf1\x51\xd0\x57\x16\x70\x44\x09\x18\x1b\xae\x6d\xc2\xb3\x89\x54\x55\x8d\x09\x36\x21\x33\xa7\xc1\xaa\x07\x5d\xa8\x2f\xec\x0f\xca\xd8\xcf\x18\xe9\xe4\xdb\x0b\xb4\xad\x0e\x84\x05\xe1\x67\xca\x33\x98\x84\x3e\x06\x05\xf9\x84\x1a\x4e\x4f\x6a\xf9\x80\x10\x87\xcb\xda\x47\xd9\x6c\x4e\x1f\x29\xc7\x6f\x62\x9f\x84\xff\x4c\x3f\x03\x1c\xba\xea\x1a\xa3\x94\x58\xda\x70\x75\x40\x9a\xea\x05\xda\x87\x81\x0b\x6d\x30\xa1\xfe\xb7\x23\xba\x75\xb3\x34\xfb\x05\x5d\xb2\x75\xb5\xe5\x6b\x7a\x70\xdb\xf0\x6d\xe8\xe3\x26\x8d\x3a\xeb\x0d\x78\x3d\x6e\x0e\xb6\xab\x03\x2b\x6d\xf1\xc3\x5f\x24\xee\x78\x0c\x8f\x02\x29\x9e\x08\x49\x9e\x77\x7a\x0f\x2f\x61\x58\x49\xce\xc0\x08\x49\x9b\x7f\x1f\x83\xb5\x03\x3f\xe9\x28\x67\x93\x76\x4a\x62\xfa\x01\xa8\x5f\x28\xb6\xeb\xac\xcd\xce\xcb\xd2\xa0\xb5\x18\x1c\x2b\xac\x69\x76\xd6\xdc\x69\x13\x48\x8c\x46\xb2\xe1\xdb\xa8\xd3\x33\x50\xe8\xb2\xff\xd6\x52\x51\x45\x4c\xcf\x12\x91\x5d\xdd\x0d\x3b\xcb\xa4\xe1\x9d\x29\xfb\x20\x29\x2d\xbb\x52\x16\x8d\xdb\xad\xf0\x82\xf1\xd9\x5f\x3d\x71\xbf\x21\x4c\x37\x36\xd1\xf0\xbc\xbe\xce\xdb\xf1\x67\xbe\x42\xf6\x8e\x28\xfc\x59\xe0\x25\xbe\xe4\x32\xcf\x19\xe9\x6b\xa5\xbb\xdb\xc9\x3d\x5f\xdd\x3b\xdb\x55\x7b\x61\xed\x6e\xb5\xd7\x45\x48\xdf\x7a\x3f\xa9\xfb\xa6\xba\x5c\x1f\x1c\x39\x86\x19\xca\x9d\xb6\x8e\x14\x75\x89\xd6\x51\x8b\xe0\x3b\x02\x1e\xc9\x9c\x86\xea\xe0\xfd\xb6\x57\xd8\xfc\xdb\x74\xc9\x83\xc5\x85\x67\xb1\x4d\x91\xc3\x04\x69\xd0\x36\xbd\x44\x5c\x4f\x93\x0c\x09\x7e\xb7\xad\xda\x77\xf2\x3c\xdf\xd6\x8e\x81\xaf\x71\x29\x83\x7f\xf4\xf3\x33\x3a\x58\x7a\x50\x9c\xa1\x17\x7f\x16\xfc\xef\x05\x4e\xa1\xdd\xa6\xf1\x00\x38\x43\x8f\x86\xa3\x3f\x3a\x31\xf7\xbc\x76\x50\x2b\x91\xe0\xbb\x83\xbf\xa1\x7a\xcf\xc0\x5f\x1e\x67\x24\xdf\x79\x5d\x27\xfd\xf2\xbf\x22\x24\xc7\x9c\x09\x7d\x13\xff\xa3\x02\x78\x79\xb4\x7c\x79\xca\xff\x7f\x4e\x4c\x1e\x21\x9a\xed\x00\x35\x1a\x79\xc1\xd8\xec\x9f\x54\xb0\x4a\xe2\x65\x7e\xb1\x32\x7f\x45\xb0\xb6\x23\xb3\x95\x8e\x32\xe8\x01\x11\xbd\x4b\x7a\x3b\x3d\x23\xb0\xe7\x75\x70\xc6\xb2\x32\xdb\xd9\x63\xb4\x89\xfe\x27\x00\x00\xff\xff\x9d\xec\x70\xb1\xf8\x23\x00\x00") - -func testImagesNettestNettestGoBytes() ([]byte, error) { - return bindataRead( - _testImagesNettestNettestGo, - "test/images/nettest/nettest.go", - ) -} - -func testImagesNettestNettestGo() (*asset, error) { - bytes, err := testImagesNettestNettestGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nettest/nettest.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNettestRcJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x92\xcd\x6a\xc3\x30\x10\x84\xef\x7e\x0a\xa1\x73\x9c\x3f\x4a\x09\x06\x1f\x4a\x5e\xc0\x94\xd2\x4b\xe9\x61\x23\x6f\x83\x88\x2c\x19\x69\x93\x10\x82\xdf\xbd\xac\x12\x27\x8e\xe2\xd2\xa3\x57\xb3\xdf\x8c\x46\x3e\x67\x42\xc8\x9d\xb6\xb5\x2c\x84\x7c\xc7\xd6\x68\x05\xa4\x9d\x5d\x3b\x4b\xde\x19\x83\x5e\x4e\x58\x02\xad\xfe\x44\x1f\xb4\xb3\x2c\x3c\x2c\x2e\xd3\x06\x09\x6a\x20\x90\x85\x60\x90\x10\xd2\x42\x83\xac\xb0\x48\x84\x81\x72\xf5\xc8\x11\x42\x1a\xd8\xa0\x09\xb7\x8d\xe7\x1d\x19\xe7\x5d\x26\x44\x17\x4d\x42\x8b\xea\x6e\xe0\x2f\x19\x19\xb0\xbc\x12\x03\x1a\x54\xe4\xfc\xff\xcc\xeb\x02\x61\xd3\x1a\x20\x1c\x2e\x3c\x5d\x65\x3c\xec\xdf\xf0\x3e\xf4\xc0\x28\x0d\x1f\x27\xdc\x08\x68\x8b\x9e\xb1\x5f\x03\xec\xd0\x62\x60\x72\xc4\x4d\x40\x7f\xb8\x15\x78\x13\xe8\x06\xb6\x51\xb1\x55\x7e\xaa\xdd\x6c\xb7\xdf\xa0\xb7\x48\x18\x72\x5c\x62\x1e\xeb\x8f\x9a\x30\xeb\x5f\x03\x9a\xfa\xf5\xa5\x58\x4c\xe7\xa3\xac\x6a\x6f\x4c\xe5\x8c\x56\x27\xa6\xbe\x99\x23\x9c\x42\x2a\x04\xbf\x4d\x73\xc7\x79\xce\x19\xb5\xc2\xb2\xef\x64\xf2\xa4\x68\x9d\xa7\x72\x35\x5f\xa5\xe6\x7c\xc6\x97\x0d\x2d\x28\x2c\x6b\xfc\x81\xbd\x19\xdd\x47\xf4\xa1\x5c\xca\x87\x83\xef\x24\x1f\x9b\x8c\x05\x3c\x27\xdf\xc3\x87\xa8\x9c\x27\x59\x08\x8e\x96\xba\x32\xd1\x3b\x72\xca\x19\xee\xe4\x63\x5d\xc9\x44\xd1\x3d\xc6\xc9\xc6\x4e\xfa\x69\x77\xff\xb3\xb3\x2e\xfb\x0d\x00\x00\xff\xff\x58\x37\xde\x80\x7b\x03\x00\x00") - -func testImagesNettestRcJsonBytes() ([]byte, error) { - return bindataRead( - _testImagesNettestRcJson, - "test/images/nettest/rc.json", - ) -} - -func testImagesNettestRcJson() (*asset, error) { - bytes, err := testImagesNettestRcJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nettest/rc.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNettestServiceJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x8e\xb1\xae\xc2\x30\x0c\x45\xf7\x7c\x85\xe5\xb9\x43\xdf\x56\x75\x7d\x3f\x50\x09\xc4\x82\x18\x4c\x6a\xa1\x88\x34\x89\x12\xab\x0b\xca\xbf\xa3\x84\x40\x3b\x30\x30\x45\xba\xf7\x9c\x1b\x3f\x14\x00\xde\x8d\x9b\x71\x04\x3c\x70\x5c\x8d\x66\xec\x4a\x48\xc1\x9c\x38\x26\xe3\x5d\xa9\xd6\xbf\x57\xba\xb0\xd0\x4c\x42\x38\x42\x51\x01\xd0\xd1\xc2\x85\x70\x2c\xc2\x49\x2a\x06\x80\x96\xae\x6c\xd3\x07\xfb\x02\xd6\x3c\x2b\x80\x5c\x97\x53\x60\xbd\xad\x06\x1f\xa5\xd8\xe7\x66\xbf\x57\x5a\x85\x23\x0c\xfd\xd0\x77\xbb\x34\x7a\xf1\xda\xdb\xf2\xc3\xf1\x7f\xc2\x5d\x25\x14\x6f\x2c\xd3\xa6\xb5\x2a\xd7\xf7\xd2\x0e\x4e\x6c\x59\x8b\x8f\xbf\x9d\xac\xb2\x7a\x06\x00\x00\xff\xff\x9a\x6c\x4e\x6b\x3b\x01\x00\x00") - -func testImagesNettestServiceJsonBytes() ([]byte, error) { - return bindataRead( - _testImagesNettestServiceJson, - "test/images/nettest/service.json", - ) -} - -func testImagesNettestServiceJson() (*asset, error) { - bytes, err := testImagesNettestServiceJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nettest/service.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNettestSlowPodJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x90\xc1\x6a\xf3\x30\x10\x84\xef\x7e\x0a\xb1\x67\x2b\xb1\x7f\x7e\x4a\x30\xe4\xd4\x17\xf0\xa1\xf4\x52\x7a\x58\x5b\x8b\x2b\x62\x6b\x8d\xb4\x89\x29\xc1\xef\x5e\xa4\x3a\x89\xd2\x9b\x34\x33\xfb\x8d\x56\xd7\x42\x29\x38\x59\x67\xa0\x51\xd0\xb2\x81\x32\x0a\x38\xdb\x77\xf2\xc1\xb2\x8b\xf2\xa5\xfe\x55\x27\x12\x34\x28\x08\x8d\x8a\x63\x4a\x81\xc3\x89\x62\x22\x8c\xbc\xe8\x79\x9b\x56\x0a\x46\xec\x68\x0c\xf7\x5c\x96\x74\x24\x42\x41\x20\xe9\x6b\xa1\xd4\x9a\xd0\x61\xa6\xfe\x81\xed\xd9\x09\x5a\x47\x3e\x22\x3e\x36\xc4\x0d\x95\xc1\x16\xea\x02\xf9\x0b\xf9\xad\x37\x99\x76\xc2\x21\xb9\x43\xef\x77\x96\xf7\xa7\x73\x47\xde\x91\x50\xd0\xf4\x8f\x74\x6c\xd7\x29\x13\xf6\xdb\x63\x34\x4e\xe6\xe5\x7f\x53\xef\xaa\x9c\x83\x7e\xc8\xeb\x93\xa6\x63\x9d\xed\xe9\x78\x5b\xa3\x7c\x72\x0d\x8d\xf8\xad\xc3\xd7\x59\x0c\x2f\xee\x58\x57\x70\xb7\x3f\x33\xf2\xcc\x5e\xfe\xa2\xaf\xd9\x39\xff\x81\x96\xbd\x40\xa3\x0e\xd5\xa1\x2a\x9f\x23\xb3\x67\xe1\x9e\xc7\xb8\xea\xdb\x6b\x0b\x99\xbb\x3e\x6a\x8b\x5c\x89\xb7\xb5\x58\x8b\x9f\x00\x00\x00\xff\xff\xe5\x3e\x28\xd8\xf5\x01\x00\x00") - -func testImagesNettestSlowPodJsonBytes() ([]byte, error) { - return bindataRead( - _testImagesNettestSlowPodJson, - "test/images/nettest/slow-pod.json", - ) -} - -func testImagesNettestSlowPodJson() (*asset, error) { - bytes, err := testImagesNettestSlowPodJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nettest/slow-pod.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNettestSlowRcJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x92\x31\x6f\xf2\x30\x10\x86\xf7\xfc\x0a\xcb\x33\x81\xf0\xe9\x6b\x85\x90\x98\x18\xba\xa2\xb6\xea\x52\x75\x38\x9c\x13\xb5\x70\x7c\xd1\xf9\x00\x55\x28\xff\xbd\x72\x08\xc5\x18\xaa\x8e\x5c\x1e\xbf\xef\xe3\xc3\xc7\x42\x29\xbd\xb5\xbe\xd6\x73\xa5\x9f\xb1\x75\xd6\x80\x58\xf2\x4b\xf2\xc2\xe4\x1c\xb2\x1e\x45\x04\x5a\xfb\x86\x1c\x2c\xf9\x08\xee\xa7\xa7\x69\x83\x02\x35\x08\xe8\xb9\x8a\x41\x4a\x69\x0f\x0d\x46\x22\x38\x3a\x94\x6c\x7a\x4c\x29\xed\x60\x8d\x2e\xfc\x60\x09\xe8\x51\x04\x83\xe8\x7e\xde\x15\x4a\x75\x7d\x72\x68\xd1\x5c\x52\xf9\x24\x16\x03\x66\x43\x62\x40\x87\x46\x88\xff\xce\x1c\x0e\x08\x36\xad\x03\xc1\xf4\xc0\x8d\xff\x7d\xd9\xdf\xc3\xcf\xd2\x49\x51\x2e\x3f\x94\x73\x63\x7d\xbf\xd9\x27\x06\x83\x2b\x64\x4b\xf5\x0b\x1a\xf2\x75\x6c\x7a\x18\x5d\x58\x43\x5e\xc0\x7a\xe4\xf8\xe1\x3d\x51\x48\x75\x12\xa1\x03\xae\x03\xf2\x7e\xf8\xa7\x12\xc0\x36\xb0\xe9\x89\x8d\xe1\xb1\xa5\xc9\x76\xb7\x46\xf6\x28\x18\x4a\xfc\x87\x65\xbc\x45\xd9\x33\x61\x32\x5c\xaa\x84\xa6\x7e\xfc\x3f\x9f\x8e\xab\x3c\x0b\x78\x93\xeb\xf4\xf3\x32\x56\x5b\x83\x8b\xf3\x5a\x46\x37\x44\x8d\x0e\xbe\xca\xf0\xb9\x93\x9a\x0e\x7e\x31\xad\xf4\x15\xf2\x91\x35\xb5\xc4\x72\xaf\xea\x98\xfd\x4e\x37\xb5\x22\x96\xf8\x36\xaa\x59\x95\xf7\xc7\x44\x26\x21\x43\x2e\xae\xe2\x75\xb9\xd2\x19\xd1\x5d\xeb\x14\xf7\xbe\x9c\xa7\xdd\xe5\x99\x16\x5d\xf1\x1d\x00\x00\xff\xff\x49\xdb\x13\x5a\x3d\x03\x00\x00") - -func testImagesNettestSlowRcJsonBytes() ([]byte, error) { - return bindataRead( - _testImagesNettestSlowRcJson, - "test/images/nettest/slow-rc.json", - ) -} - -func testImagesNettestSlowRcJson() (*asset, error) { - bytes, err := testImagesNettestSlowRcJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nettest/slow-rc.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNoSnatTestBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x0a\x10\x00\x00\xff\xff\xe5\x8d\xa8\xc0\x5c\x00\x00\x00") - -func testImagesNoSnatTestBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesNoSnatTestBaseimage, - "test/images/no-snat-test/BASEIMAGE", - ) -} - -func testImagesNoSnatTestBaseimage() (*asset, error) { - bytes, err := testImagesNoSnatTestBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/no-snat-test/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNoSnatTestDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6f\x9b\x30\x14\x85\xdf\xfd\x2b\x8e\xe0\x65\x93\x12\xc8\xf2\x32\x69\x7b\x62\x29\xdd\x50\x5b\xa8\x02\x5d\x15\x4d\x7b\x70\xe0\x06\xae\x44\x6c\x66\x5f\x46\xf3\xef\x27\xd2\x54\x6a\x34\x3f\xfa\x7c\xbe\xfe\x7c\x1c\x62\x63\x87\x93\xe3\xb6\x13\xac\x57\x9f\x3e\xa3\xea\x08\x77\xe3\x9e\x9c\x21\x21\x8f\x64\x94\xce\x3a\x1f\xa9\x50\x85\xb8\xe7\x9a\x8c\xa7\x06\xa3\x69\xc8\x41\x3a\x42\x32\xe8\xba\xa3\xb7\x64\x81\x9f\xe4\x3c\x5b\x83\x75\xb4\xc2\x87\x19\x08\x2e\x51\xf0\xf1\xab\x0a\x71\xb2\x23\x8e\xfa\x04\x63\x05\xa3\x27\x48\xc7\x1e\x07\xee\x09\xf4\x52\xd3\x20\x60\x83\xda\x1e\x87\x9e\xb5\xa9\x09\x13\x4b\x77\xbe\xe6\x32\x24\x52\x21\x76\x97\x11\x76\x2f\x9a\x0d\x34\x6a\x3b\x9c\x60\x0f\xef\x39\x68\x39\x0b\xcf\xab\x13\x19\xbe\xc4\xf1\x34\x4d\x91\x3e\xcb\x46\xd6\xb5\x71\xff\x0a\xfa\xf8\x3e\xdb\xa4\x79\x99\x2e\xd7\xd1\xea\x7c\xe4\xc9\xf4\xe4\x3d\x1c\xfd\x19\xd9\x51\x83\xfd\x09\x7a\x18\x7a\xae\xf5\xbe\x27\xf4\x7a\x82\x75\xd0\xad\x23\x6a\x20\x76\xf6\x9d\x1c\x0b\x9b\x76\x01\x6f\x0f\x32\x69\x47\x2a\x44\xc3\x5e\x1c\xef\x47\xb9\x2a\xeb\xcd\x8e\xfd\x15\x60\x0d\xb4\x41\x90\x94\xc8\xca\x00\xdf\x92\x32\x2b\x17\x2a\xc4\x73\x56\xfd\x28\x9e\x2a\x3c\x27\xdb\x6d\x92\x57\x59\x5a\xa2\xd8\x62\x53\xe4\x37\x59\x95\x15\x79\x89\xe2\x16\x49\xbe\xc3\x5d\x96\xdf\x2c\x40\x2c\x1d\x39\xd0\xcb\xe0\x66\x7f\xeb\xc0\x73\x8d\xd4\xcc\x9d\x95\x44\x57\x02\x07\xfb\x2a\xe4\x07\xaa\xf9\xc0\x35\x7a\x6d\xda\x51\xb7\x84\xd6\xfe\x25\x67\xd8\xb4\x18\xc8\x1d\xd9\xcf\x9f\xe9\xa1\x4d\xa3\x42\xf4\x7c\x64\xd1\x72\xde\xf9\xef\x51\x91\x52\xb7\xdb\xe2\x61\xd6\x4f\xb3\x87\xe4\x7b\xaa\xd4\xa6\x78\xdc\xc1\xd8\xa5\x37\x5a\x96\x42\x5e\x10\x2b\x95\xe6\xd5\x76\xf7\x58\x64\x79\x85\x5f\x41\xfc\x3e\x0d\x7e\xab\x7f\x01\x00\x00\xff\xff\x75\x3f\x3d\x6e\x8e\x02\x00\x00") - -func testImagesNoSnatTestDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesNoSnatTestDockerfile, - "test/images/no-snat-test/Dockerfile", - ) -} - -func testImagesNoSnatTestDockerfile() (*asset, error) { - bytes, err := testImagesNoSnatTestDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/no-snat-test/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNoSnatTestMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xd1\x6a\xdb\x4c\x10\x85\xaf\xff\x7d\x8a\x83\x95\x0b\x1b\x6c\x39\x7f\x28\x2d\xa4\x84\xa2\xda\x6e\x22\x12\xa4\x22\x29\x09\xb9\x0a\x2b\x69\x2c\x0d\xc8\xbb\xea\xee\xa8\x8a\xdf\xbe\xc8\x49\xa0\xa1\x7b\xb7\x73\xce\xcc\x7e\x7b\x26\xc0\xc6\xf6\x47\xc7\x4d\x2b\xb8\x38\xff\xff\x0b\x8a\x96\x70\x3b\x94\xe4\x0c\x09\x79\x44\x83\xb4\xd6\xf9\x50\x05\x2a\xc0\x1d\x57\x64\x3c\xd5\x18\x4c\x4d\x0e\xd2\x12\xa2\x5e\x57\x2d\xbd\x2b\x4b\x3c\x90\xf3\x6c\x0d\x2e\xc2\x73\xcc\x27\xc3\xec\x4d\x9a\x2d\xbe\xaa\x00\x47\x3b\xe0\xa0\x8f\x30\x56\x30\x78\x82\xb4\xec\xb1\xe7\x8e\x40\x2f\x15\xf5\x02\x36\xa8\xec\xa1\xef\x58\x9b\x8a\x30\xb2\xb4\xa7\x67\xde\x86\x84\x2a\xc0\xd3\xdb\x08\x5b\x8a\x66\x03\x8d\xca\xf6\x47\xd8\xfd\xdf\x3e\x68\x39\x01\x4f\xa7\x15\xe9\x2f\xd7\xeb\x71\x1c\x43\x7d\x82\x0d\xad\x6b\xd6\xdd\xab\xd1\xaf\xef\xe2\xcd\x2e\xc9\x77\xab\x8b\xf0\xfc\xd4\x72\x6f\x3a\xf2\x1e\x8e\x7e\x0d\xec\xa8\x46\x79\x84\xee\xfb\x8e\x2b\x5d\x76\x84\x4e\x8f\xb0\x0e\xba\x71\x44\x35\xc4\x4e\xbc\xa3\x63\x61\xd3\x2c\xe1\xed\x5e\x46\xed\x48\x05\xa8\xd9\x8b\xe3\x72\x90\x0f\x61\xbd\xd3\xb1\xff\x60\xb0\x06\xda\x60\x16\xe5\x88\xf3\x19\xbe\x47\x79\x9c\x2f\x55\x80\xc7\xb8\xb8\x49\xef\x0b\x3c\x46\x59\x16\x25\x45\xbc\xcb\x91\x66\xd8\xa4\xc9\x36\x2e\xe2\x34\xc9\x91\xfe\x40\x94\x3c\xe1\x36\x4e\xb6\x4b\x10\x4b\x4b\x0e\xf4\xd2\xbb\x89\xdf\x3a\xf0\x14\x23\xd5\x53\x66\x39\xd1\x07\x80\xbd\x7d\x05\xf2\x3d\x55\xbc\xe7\x0a\x9d\x36\xcd\xa0\x1b\x42\x63\x7f\x93\x33\x6c\x1a\xf4\xe4\x0e\xec\xa7\x65\x7a\x68\x53\xab\x00\x1d\x1f\x58\xb4\x9c\x2a\xff\x7c\x2a\x54\x2a\xcf\x36\xf9\x95\xb1\x2b\x6f\xb4\xac\x84\xbc\xa8\x28\xdb\xdc\xe0\xdb\x15\xf4\xa1\xfe\xfc\x49\x15\x51\x76\xbd\x2b\xa6\xfb\xd9\x7c\x73\x9f\x6d\xe3\x6c\xa1\xae\xd3\xbb\x28\xb9\x7e\x7e\xd8\x65\x79\x9c\x26\x93\xd6\xe9\x53\x6b\x9e\x6d\x9e\xb7\x71\x86\xc9\x6c\xac\xd4\xec\x70\x36\xf7\x2d\x75\x1d\xfa\xb1\x5e\x2c\x14\xbd\xf4\xd6\x89\x52\x25\x9b\x4b\xf5\x5f\x18\xae\xf9\xa0\x1b\x5a\x0d\xc2\x5d\xe8\x5b\x94\x6c\x70\x36\x9f\x90\x16\x4a\x85\x3f\x6f\xd2\xe4\xe9\x72\x2a\xaa\x3f\x01\x00\x00\xff\xff\x01\x93\xec\xa5\xf2\x02\x00\x00") - -func testImagesNoSnatTestMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesNoSnatTestMakefile, - "test/images/no-snat-test/Makefile", - ) -} - -func testImagesNoSnatTestMakefile() (*asset, error) { - bytes, err := testImagesNoSnatTestMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/no-snat-test/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNoSnatTestVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesNoSnatTestVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesNoSnatTestVersion, - "test/images/no-snat-test/VERSION", - ) -} - -func testImagesNoSnatTestVersion() (*asset, error) { - bytes, err := testImagesNoSnatTestVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/no-snat-test/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNoSnatTestMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x57\x6f\x6f\xdb\x38\xd2\x7f\x2d\x7e\x8a\xa9\x80\xec\x23\xe5\x51\x25\x37\x87\xc5\x15\x59\xe4\x00\x37\x4d\xae\xbe\xcd\x25\xb9\x38\xdd\x62\xd1\x2b\x16\x8c\x34\xb2\x78\x91\x48\x9a\xa4\xe2\x1a\xd9\x7c\xf7\xc3\x90\xb2\x1c\x27\xe9\xed\xf6\x45\x1b\x93\x1c\xce\xdf\xdf\xfc\x86\x2a\xf6\xd9\xb1\xd2\x6b\x23\x16\x8d\x83\x83\xc9\x9b\xbf\xc2\x75\x83\xf0\x73\x7f\x83\x46\xa2\x43\x0b\xd3\xde\x35\xca\xd8\x9c\xb1\x33\x51\xa2\xb4\x58\x41\x2f\x2b\x34\xe0\x1a\x84\xa9\xe6\x65\x83\x30\x9c\x64\xf0\x0b\x1a\x2b\x94\x84\x83\x7c\x02\x09\x09\xc4\xc3\x51\x9c\xfe\xc4\xd6\xaa\x87\x8e\xaf\x41\x2a\x07\xbd\x45\x70\x8d\xb0\x50\x8b\x16\x01\xbf\x96\xa8\x1d\x08\x09\xa5\xea\x74\x2b\xb8\x2c\x11\x56\xc2\x35\xde\xc8\xa0\x22\x67\xbf\x0e\x0a\xd4\x8d\xe3\x42\x02\x87\x52\xe9\x35\xa8\xfa\xb1\x14\x70\xc7\x18\x00\x40\xe3\x9c\x3e\x2c\x8a\xd5\x6a\x95\x73\xef\x65\xae\xcc\xa2\x68\x83\x94\x2d\xce\x66\xc7\x27\xe7\xf3\x93\xd7\x07\xf9\x84\xb1\x8f\xb2\x45\x6b\xc1\xe0\xb2\x17\x06\x2b\xb8\x59\x03\xd7\xba\x15\x25\xbf\x69\x11\x5a\xbe\x02\x65\x80\x2f\x0c\x62\x05\x4e\x91\x9f\x2b\x23\x9c\x90\x8b\x0c\xac\xaa\xdd\x8a\x1b\x64\x95\xb0\xce\x88\x9b\xde\xed\x24\x68\xe3\x95\xb0\xf0\x58\x40\x49\xe0\x12\xe2\xe9\x1c\x66\xf3\x18\xde\x4d\xe7\xb3\x79\xc6\x3e\xcd\xae\x3f\x5c\x7c\xbc\x86\x4f\xd3\xab\xab\xe9\xf9\xf5\xec\x64\x0e\x17\x57\x70\x7c\x71\xfe\x7e\x76\x3d\xbb\x38\x9f\xc3\xc5\x29\x4c\xcf\x7f\x85\x9f\x67\xe7\xef\x33\x40\xe1\x1a\x34\x80\x5f\xb5\x21\xdf\x95\x01\x41\xa9\xc3\x2a\x67\x73\xc4\x1d\xe3\xb5\x0a\xce\x58\x8d\xa5\xa8\x45\x09\x2d\x97\x8b\x9e\x2f\x10\x16\xea\x0e\x8d\x14\x72\x01\x1a\x4d\x27\x2c\x15\xcf\x02\x97\x15\x6b\x45\x27\x1c\x77\x7e\xfd\x2c\x9c\x9c\xed\x17\x8c\x69\x5e\xde\x92\x92\x8e\x0b\xc9\x98\xe8\xb4\x32\x0e\x12\x16\xc5\x75\xe7\x62\x16\xc5\x42\x15\x42\xf5\x4e\xb4\xb4\x90\xe8\x86\x3f\x05\x55\x86\x7e\x2b\x4b\xff\x53\x52\xe4\xc2\xc6\x8c\x45\xf1\x42\xb8\xa6\xbf\xc9\x4b\xd5\x15\x56\xd7\x6f\xfe\x52\xe8\xba\xe5\x8b\x98\x45\x65\x2b\xe8\x17\xc4\xb7\x6f\x6d\x2e\x54\x41\x30\x51\x12\xa5\x7b\x7d\xc3\x2d\x16\x65\x2b\x8a\x41\xf2\x1b\x12\xad\x22\x13\x29\x63\x45\x01\x42\xc3\x11\x38\x6e\x16\xe8\x7c\x6a\x8a\x55\xa3\x78\x27\x60\xd9\xa3\x59\x93\x80\xf1\x12\x06\x5d\x6f\x24\x56\x20\x34\x6d\xea\x70\x8d\x30\xab\x55\xf5\x7f\x76\xd8\x96\xdb\x6d\xa9\x2a\x0c\xfb\xcc\xad\x35\xe5\xc5\x2e\xaf\xd1\x3a\x34\x60\x9d\xe9\x4b\x07\xf7\x2c\xba\xa4\x24\x85\x98\xd9\x03\x63\x75\x2f\x4b\x90\xb8\xfa\xe7\x28\x9b\xa4\xb0\xff\xe8\xe6\x3d\x8b\x82\x23\xf0\xc3\x76\xf7\x9e\x45\x5e\xd1\x21\xc4\x6f\x27\x6f\x27\x71\xc6\xa2\x87\x51\x5b\xd2\x3d\x56\x90\xc2\xb4\xaa\x4e\x5b\xbe\xb0\x49\x6d\x61\xdf\x27\x34\xa7\xf5\x1c\x5d\x4a\xda\x6b\x9b\xcf\xbd\x3b\xbf\x70\x93\xfc\xd0\xe5\xa4\x37\x83\x98\x8a\x19\x67\x30\xae\x89\x15\x7c\x81\x9d\x02\x8b\xe6\x0e\xa1\x28\x1b\x2c\x6f\xa5\xb2\x92\x3b\x82\xcc\x98\x47\x94\x95\x56\x42\x3a\x0b\x4a\xe6\x71\x3a\x3a\x46\x38\x49\xbc\xcd\x0e\x0e\x8f\x9e\x46\xcd\xa2\x2e\x1f\x5d\x0d\x6e\x1e\xab\xae\xe3\xb2\x3a\x13\x12\x53\x36\x82\x20\x9f\x49\xe1\x82\x58\xca\x22\x2a\xac\xdf\x39\x53\x61\xa3\xc2\x1a\x0d\xf8\xed\xd3\xb6\xb7\xcd\xb0\xcf\x22\x51\x03\x1a\x43\x96\xbb\xfc\xaa\x97\x49\xfa\x93\x5f\xbf\x3a\x02\x29\x5a\xf2\x2a\xaa\x3b\x97\x9f\x6a\x23\xa4\xab\x13\x45\x69\xa9\xd0\x98\x0c\xe2\xbd\xbb\x7f\xcb\x38\x23\xe9\x94\x45\x91\xb2\xf9\xc9\x57\xe1\x92\x37\xe9\xff\xca\xba\xb7\x40\x57\x94\xaf\xe1\x00\x20\x61\x7d\x1b\x95\xbd\x31\x28\xdd\x00\xa4\xd9\xa5\x4f\x9f\x7c\x7e\x3e\x20\x6a\x76\x19\x14\xf4\x6d\xeb\x8f\x49\xd3\xe6\x86\xea\xdd\x86\x01\x51\xde\xb1\x48\x0b\x9d\x81\xba\xa5\x30\x95\xcd\xcf\x94\xba\xed\xf5\x89\xbc\x4b\xe2\xcb\x8b\xf7\xbf\xcd\x2e\xe3\xd4\x27\xe2\x95\xba\xf5\x11\x0f\xd0\xa2\xc0\x4f\xc8\xd5\x7a\x23\x47\xca\xe0\x8e\x1b\x58\x71\xeb\x09\x9b\x58\x86\x5c\x12\x72\x63\x4b\x18\x25\x3b\x94\x2e\xf6\x79\x88\xe4\xb7\x0c\x9f\x5f\xbc\x3f\xf9\x53\x96\x07\xc1\xef\x36\xed\x93\x73\xc7\x5b\x51\x71\x47\xc4\xc7\xdd\x4e\x86\xb8\x41\x6a\x79\x5e\x55\x44\x94\x68\x73\xef\x87\x44\x97\x5f\x72\x63\x71\x76\x99\x68\xa1\x53\x38\xda\xe2\xe0\x8f\xb3\x52\x2a\x49\x23\x08\x2b\xd8\x5b\x66\xb0\x6a\x44\xd9\x80\x08\xde\x72\xe9\x0b\x1a\xac\xc5\x19\xb9\x12\x12\xf4\xc4\xa8\xfc\x63\xa3\x4f\x13\xf2\x1d\x56\xe5\x60\xd5\xe7\xc6\xe0\x42\x78\x32\x69\xb8\xac\x5a\x34\x96\x45\xc4\xc1\xf9\x07\xbf\x3c\xed\x65\x99\xc4\x43\xf3\xc6\xa4\x97\x7e\xa4\x2f\xc9\x3c\xea\x78\xe2\x86\xdb\xe3\xed\x3a\xf1\xc0\x23\xb3\x69\x30\x6a\xb5\x90\xd0\xeb\x30\x78\x88\x30\xcc\xc8\x64\x5e\xf1\x19\xb9\x24\xa7\xb2\x9a\xd3\x61\x12\x1f\xc6\xff\xbf\x21\x1b\x29\x5a\xcf\x1a\x9e\x45\x07\x9f\x81\xba\x2c\xf1\x37\xaf\xd0\x6a\x25\x2d\x7e\x32\xc2\xa1\xc9\x60\x7f\xd8\x5d\xf6\x68\x5d\x3a\xf4\xe3\x7f\x94\x90\x3e\x8f\x36\x41\x63\x2c\x7c\xfe\xe2\x7b\x31\x03\x8b\x7a\xe0\xdf\x74\xf8\x4b\xe9\xb7\xce\x58\x4f\x0d\xfc\x16\x93\xcf\x5f\xc2\x41\x06\x2d\x4a\x7f\x3d\x4d\x59\x44\xa3\x42\x64\x1b\x0e\x31\x5c\x2e\x10\xbc\x6a\xaa\x1e\xdd\xff\x2c\xbe\xc0\x11\x6d\x85\x02\x26\xa1\xec\x43\xcc\xc3\x98\xcb\xff\xa1\x84\x4c\x48\xda\x7b\xe2\xc3\x2c\x0a\x78\xd7\x8b\xb6\xb2\xf0\x98\x51\x87\xb8\x33\xe8\xad\x9f\xcf\xaa\x0a\x88\x56\x95\x87\xb3\xaa\x47\x96\x68\x55\xe9\x07\xf5\xc0\xb2\x4f\xab\x02\x9b\x60\xa4\xd8\x46\xbe\xc9\x6a\xa0\xa6\x7f\xf5\x68\x04\xda\x91\xc1\x29\x54\xe4\x65\x03\xda\xa8\x3b\x51\xf9\x19\x98\x81\x41\xab\xe1\x60\x32\x01\x51\x03\x6f\xdb\xb0\xbe\x51\x15\xdd\xec\xb8\x2b\x9b\x30\x06\x2f\x87\xe9\x98\xc1\x8f\x93\x09\x28\x7a\xa5\xac\x84\xc5\x31\x13\xbe\x90\x2b\x78\xb1\x94\x06\x97\x4f\xca\xe9\xb3\xeb\xd3\x7c\x78\xb4\x29\xe2\xfd\x03\x8b\x22\xa1\xfd\xd6\x26\xaf\x73\xdd\x0a\x97\x18\x5c\xe6\x1f\xaf\xce\x72\x0a\x68\x9d\xa4\xf9\xdf\xd1\x25\xb1\xd0\x36\x4e\x33\x88\x33\xa2\x0b\x5f\xc6\xdf\x32\x4a\xe1\x58\x45\x52\x45\x66\x1e\x8d\x08\x5f\x89\x84\x82\x18\x71\xfd\x6c\x5c\x0c\x7e\x1d\xd1\x5b\x11\x65\xe5\x81\x32\x4e\x09\x2a\xbd\xff\x27\xea\x2d\x8a\xe0\x6f\x30\x09\x57\x57\xb9\x0f\xf9\x03\xf2\x0a\x4d\xf2\xe3\x64\xe2\xef\x3c\x1e\x40\x2b\x1a\x3c\xd4\xca\x4f\x90\x4c\x81\x40\x9c\x7a\xf9\x90\xd1\xc1\xd0\xae\xca\x03\xaf\xf2\x61\xc0\x97\x3f\x09\xb3\x85\x52\x74\x85\x9d\x72\x38\xad\x2a\x03\x42\x3a\x35\xec\x87\x52\x64\xcf\x24\xc2\xbd\x81\x5b\x36\xc3\x46\xc8\x52\x75\x04\xcc\x52\x49\x89\xe5\x16\x7f\x01\x42\xdf\x57\xe0\x17\xe3\xde\x75\x63\xd3\x29\x1b\xa8\x0a\xbd\x01\x2b\x75\x05\xbd\xf6\xb8\x41\x3b\x46\x41\xcf\x14\x5f\xb9\xde\xa2\xf5\xc8\x77\x0a\x2a\x51\xd7\x48\x2d\x23\x68\x50\xcc\xcf\xa7\xd7\x50\x1b\xd5\x05\x8c\x82\x56\xce\x1f\xb5\x50\x73\xd1\xf6\x06\xa1\x53\x15\xda\x10\xd5\x06\x0f\x63\x33\x7d\xab\xb1\xc6\x89\xdf\x9b\x96\x80\x44\xa1\xcd\x87\xd0\xe2\xe1\x9b\x64\xcf\x6e\xd9\xd6\xf3\x34\x79\x3d\x32\x8b\xcf\x0e\x01\xb7\x37\x6d\x3a\x3e\x5b\x5e\x3d\x9b\x14\x68\x8c\x27\x98\xf0\xe0\x21\x15\xf9\x3b\x55\xad\xf3\xe3\x56\x59\x24\xf2\xb9\x51\xd5\x7a\xd4\x1a\x5e\xe2\xf9\x15\xf2\x6a\xda\xb6\xc9\x28\xfe\x67\x2c\x98\x17\x7b\x2d\xac\x12\xb2\x42\xdd\x75\x38\x0c\x78\x2f\x3c\xcc\xb5\xdf\x7f\xf7\xd8\xa7\x2d\x3f\xeb\x26\xdf\x9a\x74\x33\xe9\xe7\xf7\xe3\x37\x37\xec\x2d\x43\x75\xf6\x96\x71\x06\xbb\xc6\x42\x66\x82\x67\xbe\x8d\x85\xb6\x9f\x27\x5f\x36\xf6\x29\x14\xaa\xcf\x7d\x68\x3f\xff\x9c\x3f\xf2\x55\xba\xdf\x76\xcd\x8e\xfd\xab\x5d\xbb\xaf\x8e\xa0\x5b\x13\x91\x85\x75\x46\xd7\xbb\x35\x9c\x0f\xdc\xbb\xb7\x84\xd7\x1e\x3e\x84\xd2\x1d\x8e\x18\x5a\xf1\xbb\x2d\xd0\xe7\xdb\x4b\x06\x08\xb5\xbd\xc4\xaf\x1a\x4b\x17\xee\x26\x5a\x59\x2b\xe8\xb3\x34\x9c\x37\x46\xf5\x8b\x66\x47\x48\x3a\x34\x35\x2f\x91\xbe\x32\xa9\x55\x57\x7c\x1d\xda\x9c\xcb\x80\x74\x9a\x21\xe9\x0b\xbe\x6f\xa7\x95\x14\x2d\x7b\x60\xff\x0d\x00\x00\xff\xff\xeb\x69\xd6\x82\x1c\x10\x00\x00") - -func testImagesNoSnatTestMainGoBytes() ([]byte, error) { - return bindataRead( - _testImagesNoSnatTestMainGo, - "test/images/no-snat-test/main.go", - ) -} - -func testImagesNoSnatTestMainGo() (*asset, error) { - bytes, err := testImagesNoSnatTestMainGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/no-snat-test/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNoSnatTestProxyBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x0a\x10\x00\x00\xff\xff\xe5\x8d\xa8\xc0\x5c\x00\x00\x00") - -func testImagesNoSnatTestProxyBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesNoSnatTestProxyBaseimage, - "test/images/no-snat-test-proxy/BASEIMAGE", - ) -} - -func testImagesNoSnatTestProxyBaseimage() (*asset, error) { - bytes, err := testImagesNoSnatTestProxyBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/no-snat-test-proxy/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNoSnatTestProxyDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6f\x9b\x30\x14\x85\xdf\xfd\x2b\x8e\xc2\xcb\x26\x25\xd0\xf5\x65\xd2\xf6\xc4\x52\xba\xa1\xb6\x50\x05\xba\x2a\x9a\xf6\xe0\xc0\x0d\x5c\x89\xd8\x9e\x7d\x19\xe5\xdf\x4f\xa4\xad\xb4\xaa\x7e\xf4\xfd\x7c\xfc\xf9\x38\xc2\xd6\xba\xd9\x73\xd7\x0b\x2e\x2f\x3e\x7d\x46\xdd\x13\x6e\xc6\x03\x79\x43\x42\x01\xe9\x28\xbd\xf5\x21\x56\x91\x8a\x70\xcb\x0d\x99\x40\x2d\x46\xd3\x92\x87\xf4\x84\xd4\xe9\xa6\xa7\xd7\xc9\x1a\x3f\xc9\x07\xb6\x06\x97\xf1\x05\x3e\x2c\xc0\xea\x65\xb4\xfa\xf8\x55\x45\x98\xed\x88\x93\x9e\x61\xac\x60\x0c\x04\xe9\x39\xe0\xc8\x03\x81\x9e\x1a\x72\x02\x36\x68\xec\xc9\x0d\xac\x4d\x43\x98\x58\xfa\xf3\x35\x2f\x21\xb1\x8a\xb0\x7f\x89\xb0\x07\xd1\x6c\xa0\xd1\x58\x37\xc3\x1e\xff\xe7\xa0\xe5\x2c\xbc\xac\x5e\xc4\x7d\x49\x92\x69\x9a\x62\x7d\x96\x8d\xad\xef\x92\xe1\x19\x0c\xc9\x6d\xbe\xcd\x8a\x2a\xdb\x5c\xc6\x17\xe7\x23\x0f\x66\xa0\x10\xe0\xe9\xcf\xc8\x9e\x5a\x1c\x66\x68\xe7\x06\x6e\xf4\x61\x20\x0c\x7a\x82\xf5\xd0\x9d\x27\x6a\x21\x76\xf1\x9d\x3c\x0b\x9b\x6e\x8d\x60\x8f\x32\x69\x4f\x2a\x42\xcb\x41\x3c\x1f\x46\x79\x53\xd6\xab\x1d\x87\x37\x80\x35\xd0\x06\xab\xb4\x42\x5e\xad\xf0\x2d\xad\xf2\x6a\xad\x22\x3c\xe6\xf5\x8f\xf2\xa1\xc6\x63\xba\xdb\xa5\x45\x9d\x67\x15\xca\x1d\xb6\x65\x71\x95\xd7\x79\x59\x54\x28\xaf\x91\x16\x7b\xdc\xe4\xc5\xd5\x1a\xc4\xd2\x93\x07\x3d\x39\xbf\xf8\x5b\x0f\x5e\x6a\xa4\x76\xe9\xac\x22\x7a\x23\x70\xb4\xcf\x42\xc1\x51\xc3\x47\x6e\x30\x68\xd3\x8d\xba\x23\x74\xf6\x2f\x79\xc3\xa6\x83\x23\x7f\xe2\xb0\x7c\x66\x80\x36\xad\x8a\x30\xf0\x89\x45\xcb\x79\xe7\xdd\xa3\x62\xa5\xae\x77\xe5\xdd\xa2\x9f\xe5\x77\xe9\xf7\x4c\xa9\x6d\x79\xbf\x87\xb1\x9b\x60\xb4\x6c\x84\x82\x6c\x9c\xb7\x4f\x33\x12\xa5\xb2\xa2\xde\xed\xef\xcb\xbc\xa8\xf1\x6b\x95\xbc\x67\x56\xbf\xd5\xbf\x00\x00\x00\xff\xff\x8a\x33\xf7\x0c\x9a\x02\x00\x00") - -func testImagesNoSnatTestProxyDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesNoSnatTestProxyDockerfile, - "test/images/no-snat-test-proxy/Dockerfile", - ) -} - -func testImagesNoSnatTestProxyDockerfile() (*asset, error) { - bytes, err := testImagesNoSnatTestProxyDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/no-snat-test-proxy/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNoSnatTestProxyMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6b\xe3\x38\x14\x85\x9f\x57\xbf\xe2\x10\xf7\x21\x81\xc4\xe9\x96\x65\x17\xba\x94\xc1\x93\x64\x5a\xd3\x62\x0f\xb6\xdb\xd2\xa7\x22\xdb\x37\xf6\x05\x47\xd2\x48\xf2\x38\xf9\xf7\x83\xd2\x16\xa6\x8c\xde\x74\xcf\xd1\xd1\xa7\xa3\x08\x1b\x6d\x4e\x96\xbb\xde\xe3\xea\xf2\xef\xff\x50\xf5\x84\xfb\xb1\x26\xab\xc8\x93\x43\x32\xfa\x5e\x5b\x17\x8b\x48\x44\x78\xe0\x86\x94\xa3\x16\xa3\x6a\xc9\xc2\xf7\x84\xc4\xc8\xa6\xa7\x0f\x65\x89\x27\xb2\x8e\xb5\xc2\x55\x7c\x89\x79\x30\xcc\xde\xa5\xd9\xe2\x7f\x11\xe1\xa4\x47\x1c\xe4\x09\x4a\x7b\x8c\x8e\xe0\x7b\x76\xd8\xf3\x40\xa0\x63\x43\xc6\x83\x15\x1a\x7d\x30\x03\x4b\xd5\x10\x26\xf6\xfd\xf9\x9a\xf7\x90\x58\x44\x78\x79\x8f\xd0\xb5\x97\xac\x20\xd1\x68\x73\x82\xde\xff\xee\x83\xf4\x67\xe0\xb0\x7a\xef\xcd\xf5\x7a\x3d\x4d\x53\x2c\xcf\xb0\xb1\xb6\xdd\x7a\x78\x33\xba\xf5\x43\xba\xd9\x65\xe5\x6e\x75\x15\x5f\x9e\x8f\x3c\xaa\x81\x9c\x83\xa5\x1f\x23\x5b\x6a\x51\x9f\x20\x8d\x19\xb8\x91\xf5\x40\x18\xe4\x04\x6d\x21\x3b\x4b\xd4\xc2\xeb\xc0\x3b\x59\xf6\xac\xba\x25\x9c\xde\xfb\x49\x5a\x12\x11\x5a\x76\xde\x72\x3d\xfa\x4f\x65\x7d\xd0\xb1\xfb\x64\xd0\x0a\x52\x61\x96\x94\x48\xcb\x19\xbe\x26\x65\x5a\x2e\x45\x84\xe7\xb4\xba\xcb\x1f\x2b\x3c\x27\x45\x91\x64\x55\xba\x2b\x91\x17\xd8\xe4\xd9\x36\xad\xd2\x3c\x2b\x91\x7f\x43\x92\xbd\xe0\x3e\xcd\xb6\x4b\x10\xfb\x9e\x2c\xe8\x68\x6c\xe0\xd7\x16\x1c\x6a\xa4\x36\x74\x56\x12\x7d\x02\xd8\xeb\x37\x20\x67\xa8\xe1\x3d\x37\x18\xa4\xea\x46\xd9\x11\x3a\xfd\x93\xac\x62\xd5\xc1\x90\x3d\xb0\x0b\x9f\xe9\x20\x55\x2b\x22\x0c\x7c\x60\x2f\xfd\x79\xf2\xc7\xa3\x62\x21\xca\x62\x53\xde\x28\xbd\x72\x4a\xfa\x95\x27\xe7\x57\xc6\xea\xe3\x49\x24\xc5\xe6\x0e\x5f\x6e\x20\x0f\xed\xbf\xff\x88\x2a\x29\x6e\x77\x55\xd8\x5f\xcc\x37\x8f\xc5\x36\x2d\x16\xe2\x36\x7f\x48\xb2\xdb\xd7\xa7\x5d\x51\xa6\x79\x16\xb4\x41\x86\x80\x10\xf9\xba\x4d\x0b\x04\xb3\xd2\xbe\x65\x8b\x8b\xb9\xeb\x69\x18\x60\xa6\x76\xb1\x10\x74\x34\xda\x7a\x21\x6a\x56\xd7\xe2\xaf\x38\x5e\xf3\x41\x76\xb4\x1a\x3d\x0f\xb1\xeb\x51\xb3\xc2\xc5\x3c\x80\x2d\x84\x88\xbf\xdf\xe5\xd9\xcb\x75\x18\x8a\x5f\x01\x00\x00\xff\xff\xc6\x55\xc4\x74\xf8\x02\x00\x00") - -func testImagesNoSnatTestProxyMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesNoSnatTestProxyMakefile, - "test/images/no-snat-test-proxy/Makefile", - ) -} - -func testImagesNoSnatTestProxyMakefile() (*asset, error) { - bytes, err := testImagesNoSnatTestProxyMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/no-snat-test-proxy/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNoSnatTestProxyVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesNoSnatTestProxyVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesNoSnatTestProxyVersion, - "test/images/no-snat-test-proxy/VERSION", - ) -} - -func testImagesNoSnatTestProxyVersion() (*asset, error) { - bytes, err := testImagesNoSnatTestProxyVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/no-snat-test-proxy/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNoSnatTestProxyMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x56\x7f\x4f\xdc\xb8\x16\xfd\x3b\xfe\x14\xf7\x59\xa2\x2f\xe1\xa5\x0e\x50\x55\xef\x89\x0a\x3d\x4d\x29\x6c\x67\xcb\x42\x77\x06\x5a\x55\xdd\x4a\x78\x92\x9b\x8c\x97\xc4\x36\xb6\xc3\x30\x42\x7c\xf7\xd5\xf5\x84\xd9\xe1\x47\xb5\xff\x40\x6c\x5f\x9f\x73\xee\xb9\xd7\xf6\x14\xdb\xec\xd0\xd8\xa5\x53\xcd\x3c\xc0\xde\xce\xee\x7f\xe1\x7c\x8e\xf0\xa9\x9f\xa1\xd3\x18\xd0\xc3\xa8\x0f\x73\xe3\xbc\x60\xec\x44\x95\xa8\x3d\x56\xd0\xeb\x0a\x1d\x84\x39\xc2\xc8\xca\x72\x8e\x30\xac\xe4\xf0\x05\x9d\x57\x46\xc3\x9e\xd8\x81\x94\x02\xf8\xb0\xc4\xb3\x77\x6c\x69\x7a\xe8\xe4\x12\xb4\x09\xd0\x7b\x84\x30\x57\x1e\x6a\xd5\x22\xe0\x6d\x89\x36\x80\xd2\x50\x9a\xce\xb6\x4a\xea\x12\x61\xa1\xc2\x3c\x92\x0c\x10\x82\x7d\x1b\x00\xcc\x2c\x48\xa5\x41\x42\x69\xec\x12\x4c\xbd\x19\x05\x32\x30\x06\x00\x30\x0f\xc1\xee\x17\xc5\x62\xb1\x10\x32\xaa\x14\xc6\x35\x45\xbb\x8a\xf2\xc5\xc9\xf8\xf0\xe8\x74\x7a\xf4\x7a\x4f\xec\x30\x76\xa1\x5b\xf4\x1e\x1c\x5e\xf7\xca\x61\x05\xb3\x25\x48\x6b\x5b\x55\xca\x59\x8b\xd0\xca\x05\x18\x07\xb2\x71\x88\x15\x04\x43\x3a\x17\x4e\x05\xa5\x9b\x1c\xbc\xa9\xc3\x42\x3a\x64\x95\xf2\xc1\xa9\x59\x1f\x1e\x19\xf4\xa0\x4a\x79\xd8\x0c\x30\x1a\xa4\x06\x3e\x9a\xc2\x78\xca\xe1\xfd\x68\x3a\x9e\xe6\xec\xeb\xf8\xfc\xe3\xd9\xc5\x39\x7c\x1d\x4d\x26\xa3\xd3\xf3\xf1\xd1\x14\xce\x26\x70\x78\x76\xfa\x61\x7c\x3e\x3e\x3b\x9d\xc2\xd9\x31\x8c\x4e\xbf\xc1\xa7\xf1\xe9\x87\x1c\x50\x85\x39\x3a\xc0\x5b\xeb\x48\xbb\x71\xa0\xc8\x3a\xac\x04\x9b\x22\x3e\x22\xaf\xcd\x4a\x8c\xb7\x58\xaa\x5a\x95\xd0\x4a\xdd\xf4\xb2\x41\x68\xcc\x0d\x3a\xad\x74\x03\x16\x5d\xa7\x3c\x15\xcf\x83\xd4\x15\x6b\x55\xa7\x82\x0c\x71\xfc\x2c\x1d\xc1\xb6\x0b\xc6\xac\x2c\xaf\x08\xa4\x93\x4a\x33\xa6\x3a\x6b\x5c\x80\x94\x25\xbc\xee\x02\x67\x09\x57\xa6\x50\xa6\x0f\xaa\xa5\x81\xc6\x50\x50\x49\xe8\xdb\x78\xfa\x4b\x6e\xe8\xc6\x73\xc6\x12\xde\xa8\x30\xef\x67\xa2\x34\x5d\xe1\x6d\xbd\xfb\xa6\xb0\x75\x2b\x1b\xce\x92\xb2\x55\xf4\x05\xfc\xea\x7f\x5e\x28\x53\x50\x7f\x18\x8d\x3a\xbc\x9e\x49\x8f\x45\xd9\xaa\x62\x88\xfc\x49\x44\x6b\x88\x22\x63\xac\x28\xe0\x9c\x1a\xee\xb3\xa9\xfe\xed\xa1\x28\xe7\x58\x5e\x69\xe3\xb5\x0c\x10\xe4\x15\x7a\xb8\x0c\xd2\x35\x18\x2e\x29\x7d\xb8\x54\xd6\x5f\x82\x74\x4d\xdf\xa1\x0e\x3e\x8f\x93\xd7\x3d\x3a\x85\x1e\xee\x56\x91\xf7\x9b\x20\xff\x57\xd6\x1f\xdc\x29\xeb\xef\x19\x0b\x4b\x4b\xae\xf8\xeb\x73\xf4\xe1\xb3\x33\xb7\x4b\xf0\xc1\xf5\x65\x80\x3b\x96\x7c\x26\x97\x56\xb9\xb3\x7b\xc6\xea\x5e\x97\xa0\x71\xf1\xdb\x66\x78\x9a\xc1\xf6\xe3\xfd\x77\x2c\x71\x18\x7a\xa7\xe1\xd5\xa3\x85\x3b\x96\x44\xc4\x7d\xe0\x6f\x76\xf7\xde\xbc\xe5\x39\x4b\xee\xd7\xb8\x69\xf7\x04\x27\x83\x51\x55\x1d\xb7\xb2\xf1\x69\xed\x61\x3b\xba\x2c\x68\x3c\xc5\x90\x11\x49\xed\xc5\x34\x6a\xfb\x22\x5d\xfa\xaa\x13\x84\x9d\x03\xa7\xd2\xf2\x1c\xd6\x63\xba\x23\x62\xb9\x83\x01\x8f\xee\x06\x1f\x1b\x8a\xba\xb2\x46\xe9\x00\x46\x0b\x9e\xad\xe5\x50\xa3\xa4\x91\xa6\x83\xfd\x83\x17\xb2\x66\x49\x27\xd6\x02\x57\xe2\x0e\x4d\xd7\x49\x5d\x9d\x28\x8d\x19\x5b\xf7\x83\x18\x6b\x15\x56\x61\x19\x4b\xa8\xc6\x71\xe6\xc4\xac\x26\x2a\xac\xd1\x41\x9c\x3e\x6e\x7b\x3f\x1f\xe6\x59\xa2\x6a\x40\xe7\x88\xbc\x13\x93\x5e\xa7\xd9\xbb\x38\xfe\xd7\x01\x68\xd5\x92\xb0\xa4\xee\x82\x38\xb6\x4e\xe9\x50\xa7\x86\xcc\xa8\xd0\xb9\x1c\xf8\xd6\xcd\x1f\x9a\xe7\x14\x9d\xb1\x24\x31\x5e\x1c\xdd\xaa\x90\xee\x66\xff\x60\x77\x24\xa1\x5d\xc6\x11\x7c\x51\x80\xc3\x46\xf9\x80\x0e\xe6\x52\x57\x2d\x3a\x96\xd0\xb1\x10\x1f\xe3\xe8\xb8\xd7\x65\xca\x37\xbd\xe4\x39\x6c\x8c\x28\x87\xa2\x00\x6f\x95\x86\xde\xae\x0e\x35\xd9\xef\xd6\xed\x11\xc1\x4e\x88\x41\x8f\x74\x35\xa5\xc5\x94\xef\xf3\xff\x3c\x94\x4e\xab\x36\x16\x24\xf6\xe8\x20\x01\x48\x7d\x1a\x77\x4e\xd0\x5b\xa3\x3d\x7e\x75\x2a\xa0\xcb\x61\x7b\x98\xbd\xee\xd1\x13\x7b\xcc\xf3\x4f\xa3\xf4\x11\xa5\xe4\x53\x74\xce\xc3\xf7\x1f\x31\xc1\x1c\x3c\xda\xa1\xb5\xb3\xe1\x3f\x25\xed\x83\xf3\xd1\x72\x79\x85\xe9\xf7\x1f\xab\x85\x1c\x5a\xd4\x71\x7b\x96\xb1\x84\x6e\x28\x95\x3f\xd4\xc6\x49\xdd\x20\x44\x68\x2a\x09\xed\xff\xae\x7e\xc0\x01\x4d\x89\x48\x9c\x46\xdf\x1f\x72\x1e\x6e\x12\xf1\xab\x51\x3a\xa5\xe8\xa8\xe4\xef\xbe\xdb\x30\xf0\x62\x72\x92\x5a\x65\x73\x50\xd6\xbf\x20\x75\x00\xa4\x26\x98\x0e\x4d\xc0\x87\x87\x64\xcb\x3f\x3b\xee\x5b\x9e\xe7\xf0\x80\xf6\x22\x5d\xba\x80\x17\x6d\x75\x78\xfd\xc4\x5a\x62\xef\x5d\x4b\xe9\x3f\x91\xeb\xf0\x5a\x5c\x4c\x4e\xc4\xef\x3d\xba\x65\x9a\x89\x5f\x30\xa4\x7c\x75\x03\xf1\x2c\x42\x3d\x5f\x56\xd6\x73\xf2\xd5\xa1\xb7\x6b\x5b\x23\x1f\x2d\xf7\xae\xcd\xd6\x67\x61\xa3\xf7\x17\x22\xea\xfb\x88\xb2\x42\x97\xbe\xdd\xd9\xc9\x9e\x1c\x88\x45\x0e\x7c\xd5\xcb\x74\x15\x2e\xc9\xb4\xad\xeb\x88\xbf\x0f\x5b\x37\x3c\x87\xde\xb5\x0f\x67\xe4\x1e\xb0\xf5\x18\x71\x67\xa6\x5a\xae\x55\xac\x9e\x04\x31\x41\x59\x8d\xda\x36\x25\x85\xe2\xbd\xa9\x96\xc4\xf5\x5c\xd2\xcb\x9a\x7e\x22\xca\xa1\xac\x48\x13\xf1\xd1\xcf\x02\x37\xb8\x0e\xb5\x33\xdd\xcf\x95\x6e\x4a\xa5\xd3\xb5\x2a\x56\xb5\x3a\x5d\xb2\x43\xf0\x41\x86\xde\x43\x69\x2a\x8c\xef\x40\xc4\x97\x4f\x1e\x11\xa3\xe3\x06\xa5\x03\x3a\x2d\x5b\x7a\x67\x9e\xeb\x8f\xd9\x4e\x23\xdc\xa1\xa9\x30\xdb\x88\x48\x67\x83\x09\xf7\x43\x6b\x0f\xbe\x88\xc3\xd6\x78\x4c\xa9\xbd\xfe\x0a\x00\x00\xff\xff\x83\x03\xb6\x45\xac\x09\x00\x00") - -func testImagesNoSnatTestProxyMainGoBytes() ([]byte, error) { - return bindataRead( - _testImagesNoSnatTestProxyMainGo, - "test/images/no-snat-test-proxy/main.go", - ) -} - -func testImagesNoSnatTestProxyMainGo() (*asset, error) { - bytes, err := testImagesNoSnatTestProxyMainGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/no-snat-test-proxy/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNodePerfNpbEpBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\x49\x4d\xca\x4c\xcc\xb3\x2a\x2e\x29\x4a\x2d\x49\xce\xd0\x2d\xce\xc9\xcc\xe5\x4a\x2c\xca\x35\x33\xb1\x05\x93\x65\x16\xfa\xd8\x54\x14\x14\x24\x9b\x99\xe4\xa4\xda\x42\x69\xac\x6a\x00\x01\x00\x00\xff\xff\xa4\x03\xe7\x0b\x60\x00\x00\x00") - -func testImagesNodePerfNpbEpBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesNodePerfNpbEpBaseimage, - "test/images/node-perf/npb-ep/BASEIMAGE", - ) -} - -func testImagesNodePerfNpbEpBaseimage() (*asset, error) { - bytes, err := testImagesNodePerfNpbEpBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/node-perf/npb-ep/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNodePerfNpbEpDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\xed\x6a\xdb\x48\x14\xfd\x3f\x4f\x71\xd6\x2e\xa1\x2d\x91\xd4\x8f\xa5\x94\x86\x2c\x28\xb6\xbb\x15\x75\x64\xaf\xe4\xb4\x84\xed\x62\x46\xd2\x95\x34\x5b\x69\x46\x9d\x19\xc5\x76\x4b\xdf\x7d\x19\xd9\x31\x49\x36\x3f\x2a\x10\x0c\xf7\xf3\xcc\x9d\x73\xee\x18\x13\xd5\xed\xb4\xa8\x6a\x8b\x57\x2f\x5e\xbe\xc5\xaa\x26\x7c\xec\x33\xd2\x92\x2c\x19\x84\xbd\xad\x95\x36\x3e\x1b\xb3\x31\xe6\x22\x27\x69\xa8\x40\x2f\x0b\xd2\xb0\x35\x21\xec\x78\x5e\xd3\xad\xe7\x14\x9f\x48\x1b\xa1\x24\x5e\xf9\x2f\xf0\xd4\x05\x8c\x0e\xae\xd1\xb3\x33\x36\xc6\x4e\xf5\x68\xf9\x0e\x52\x59\xf4\x86\x60\x6b\x61\x50\x8a\x86\x40\xdb\x9c\x3a\x0b\x21\x91\xab\xb6\x6b\x04\x97\x39\x61\x23\x6c\x3d\xb4\x39\x14\xf1\xd9\x18\xd7\x87\x12\x2a\xb3\x5c\x48\x70\xe4\xaa\xdb\x41\x95\x77\xe3\xc0\xed\x00\xd8\x7d\xb5\xb5\xdd\xbb\x20\xd8\x6c\x36\x3e\x1f\xc0\xfa\x4a\x57\x41\xb3\x0f\x34\xc1\x3c\x9a\xcc\xe2\x74\xe6\xbd\xf2\x5f\x0c\x29\x57\xb2\x21\x63\xa0\xe9\x5b\x2f\x34\x15\xc8\x76\xe0\x5d\xd7\x88\x9c\x67\x0d\xa1\xe1\x1b\x28\x0d\x5e\x69\xa2\x02\x56\x39\xbc\x1b\x2d\xac\x90\xd5\x29\x8c\x2a\xed\x86\x6b\x62\x63\x14\xc2\x58\x2d\xb2\xde\xde\x1b\xd6\x2d\x3a\x61\xee\x05\x28\x09\x2e\x31\x0a\x53\x44\xe9\x08\x17\x61\x1a\xa5\xa7\x6c\x8c\xcf\xd1\xea\xc3\xe2\x6a\x85\xcf\x61\x92\x84\xf1\x2a\x9a\xa5\x58\x24\x98\x2c\xe2\x69\xb4\x8a\x16\x71\x8a\xc5\x7b\x84\xf1\x35\x3e\x46\xf1\xf4\x14\x24\x6c\x4d\x1a\xb4\xed\xb4\xc3\xaf\x34\x84\x1b\x23\x15\x6e\x66\x29\xd1\x3d\x00\xa5\xda\x03\x32\x1d\xe5\xa2\x14\x39\x1a\x2e\xab\x9e\x57\x84\x4a\xdd\x90\x96\x42\x56\xe8\x48\xb7\xc2\xb8\xc7\x34\xe0\xb2\x60\x63\x34\xa2\x15\x96\xdb\xc1\xf2\xbf\x4b\xf9\x8c\xbd\x4f\x16\x97\x0e\xfe\x2c\xba\x0c\xff\x9c\x81\x1b\x64\xbd\x68\x8a\xb5\x54\x05\xad\x3b\xd2\xe5\x5a\x76\xd9\x9a\x3a\xc6\x26\xc9\x22\x4d\xd7\x17\x57\xd1\x7c\xba\x9e\x2c\x96\xd7\xf8\x46\x6d\xef\xfd\x35\xbb\xbc\x0a\x93\xc9\x07\xcf\xb8\x2e\x39\x82\xde\xe8\x20\x13\x32\x60\x2c\xb9\x8a\xc1\x3b\xeb\x55\x64\xd1\x77\x05\xb7\x84\x93\x93\xa3\x45\x48\x63\x79\xd3\xc0\xdb\xed\x3b\x7a\x64\x0c\x49\x2b\x78\x83\xaa\x54\xda\x6a\x2e\x19\x0b\xa7\xd3\xbb\x5c\x90\xdc\xb8\x9f\xfb\x95\xba\x09\xb8\x31\x64\x4d\x20\xbb\x2c\x88\x97\x17\xaf\xfd\xd7\xfe\x4b\xdf\x72\xed\x57\xdf\xe1\x0f\xbd\x2d\xd7\xd8\x7e\x2f\xf1\xc0\xcb\xd8\xe7\x45\xf2\x71\x1a\x25\xf0\x8f\x89\x87\x83\xb7\xb8\x5c\x0e\xa9\xa2\xc4\xdf\x78\xf2\x94\xeb\xbc\x7e\x86\xdf\xce\x31\xda\xbe\x7d\xb3\x7e\xf3\xfb\x08\xff\x9c\xb9\xf9\x49\x7c\x61\x8e\xa6\x4e\x56\x26\xf0\xda\xbc\x55\x05\x35\xe7\x2d\x15\xa2\x6f\x83\xa0\x42\xae\x64\x29\xaa\x20\x0e\x53\xdf\xf0\xb6\x6b\xc8\x04\x2d\xff\x4a\x7e\x41\xa5\x5f\xe5\xf9\x7a\xfb\xf6\x0d\xfe\xb8\x8d\xba\xf5\x9c\xe1\x0b\xa3\xc6\xd0\xa1\x78\xde\xfd\x52\x99\x47\x8a\x94\x62\xb8\x84\x33\x61\xb6\xc4\x64\x1e\xa6\xe9\xf9\x94\xb1\xfd\xde\x70\x3c\x71\x1c\x38\xaa\xa5\x11\x99\xe6\x5a\x90\xc1\x53\x53\x73\x67\x51\xd9\xbf\x94\xdb\x41\xe3\xe6\x99\x53\x8c\x13\xac\xbc\x21\x29\x48\x5a\x34\x2a\x1f\x08\x05\xa3\x60\x6b\x6e\x21\x2c\x72\x2e\x91\x91\x93\xb5\xa0\x02\x42\x5a\xe7\x72\xa2\x6a\xf9\xb0\x1d\xa4\xd3\x3d\x69\x27\xbd\x81\xc3\x94\x2b\x59\xec\x1f\x1e\xc6\xf2\x8a\xf6\x4f\xd6\x7e\x2d\x84\x86\xd7\x21\x68\x44\xe6\x0d\x4b\xe2\xe4\x04\xa5\x90\xc5\x9e\x58\x8d\xc8\xe0\x49\xde\x12\x46\xcf\x7d\xa3\xfc\xe7\x23\x78\xb4\xa5\xdc\x0d\xeb\xc7\xcf\x3b\x59\x5f\xce\x1e\x52\x9b\xb1\x81\xb4\x9e\x57\x6a\xd5\x9e\x3f\x4e\x72\x3c\x46\x88\x81\xcd\xd4\xf9\x53\x7f\x8b\xe0\x97\x8a\x1c\x51\x1c\x4f\x6c\x16\x7f\xc2\x7c\xba\x9e\x47\x17\x49\x98\x5c\xaf\x97\xe1\xea\xc3\xf9\xe8\xc9\x8f\x07\xa6\x9f\xef\x8e\x19\x23\xc6\x66\xf1\x2a\xb9\x5e\x2e\xa2\x78\x85\x43\x7f\xf6\x5f\x00\x00\x00\xff\xff\xea\x09\x88\x58\xfa\x05\x00\x00") - -func testImagesNodePerfNpbEpDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesNodePerfNpbEpDockerfile, - "test/images/node-perf/npb-ep/Dockerfile", - ) -} - -func testImagesNodePerfNpbEpDockerfile() (*asset, error) { - bytes, err := testImagesNodePerfNpbEpDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/node-perf/npb-ep/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNodePerfNpbEpVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesNodePerfNpbEpVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesNodePerfNpbEpVersion, - "test/images/node-perf/npb-ep/VERSION", - ) -} - -func testImagesNodePerfNpbEpVersion() (*asset, error) { - bytes, err := testImagesNodePerfNpbEpVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/node-perf/npb-ep/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNodePerfNpbIsBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\x49\x4d\xca\x4c\xcc\xb3\x2a\x2e\x29\x4a\x2d\x49\xce\xd0\x2d\xce\xc9\xcc\xe5\x4a\x2c\xca\x35\x33\xb1\x05\x93\x65\x16\xfa\xd8\x54\x14\x14\x24\x9b\x99\xe4\xa4\xda\x42\x69\xac\x6a\x00\x01\x00\x00\xff\xff\xa4\x03\xe7\x0b\x60\x00\x00\x00") - -func testImagesNodePerfNpbIsBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesNodePerfNpbIsBaseimage, - "test/images/node-perf/npb-is/BASEIMAGE", - ) -} - -func testImagesNodePerfNpbIsBaseimage() (*asset, error) { - bytes, err := testImagesNodePerfNpbIsBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/node-perf/npb-is/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNodePerfNpbIsDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\x7f\x6b\xdb\x48\x10\xfd\x7f\x3f\xc5\x3b\xbb\x84\xb6\x44\x52\x7f\x1c\xa5\x34\xe4\x40\xb1\xdd\xab\xa8\x23\xe7\x24\xa7\x25\x5c\x0e\xb3\x92\x46\xd2\x5e\xa4\x5d\x75\x77\x15\xdb\x2d\xfd\xee\xc7\xca\x8e\x49\x72\xf9\xa3\x06\x83\x98\x79\x3b\xf3\xf6\xed\xbc\x19\x63\xa2\xba\xad\x16\x55\x6d\xf1\xe6\xd5\xeb\xf7\x58\xd6\x84\xcf\x7d\x46\x5a\x92\x25\x83\xb0\xb7\xb5\xd2\xc6\x67\x63\x36\xc6\x5c\xe4\x24\x0d\x15\xe8\x65\x41\x1a\xb6\x26\x84\x1d\xcf\x6b\xba\xcb\x1c\xe3\x0b\x69\x23\x94\xc4\x1b\xff\x15\x9e\x3b\xc0\x68\x9f\x1a\xbd\x38\x61\x63\x6c\x55\x8f\x96\x6f\x21\x95\x45\x6f\x08\xb6\x16\x06\xa5\x68\x08\xb4\xc9\xa9\xb3\x10\x12\xb9\x6a\xbb\x46\x70\x99\x13\xd6\xc2\xd6\x43\x9b\x7d\x11\x9f\x8d\x71\xb5\x2f\xa1\x32\xcb\x85\x04\x47\xae\xba\x2d\x54\x79\x1f\x07\x6e\x07\xc2\xee\x57\x5b\xdb\x7d\x08\x82\xf5\x7a\xed\xf3\x81\xac\xaf\x74\x15\x34\x3b\xa0\x09\xe6\xd1\x64\x16\xa7\x33\xef\x8d\xff\x6a\x38\x72\x29\x1b\x32\x06\x9a\xbe\xf5\x42\x53\x81\x6c\x0b\xde\x75\x8d\xc8\x79\xd6\x10\x1a\xbe\x86\xd2\xe0\x95\x26\x2a\x60\x95\xe3\xbb\xd6\xc2\x0a\x59\x1d\xc3\xa8\xd2\xae\xb9\x26\x36\x46\x21\x8c\xd5\x22\xeb\xed\x03\xb1\xee\xd8\x09\xf3\x00\xa0\x24\xb8\xc4\x28\x4c\x11\xa5\x23\x9c\x85\x69\x94\x1e\xb3\x31\xbe\x46\xcb\x4f\x8b\xcb\x25\xbe\x86\x49\x12\xc6\xcb\x68\x96\x62\x91\x60\xb2\x88\xa7\xd1\x32\x5a\xc4\x29\x16\x1f\x11\xc6\x57\xf8\x1c\xc5\xd3\x63\x90\xb0\x35\x69\xd0\xa6\xd3\x8e\xbf\xd2\x10\x4e\x46\x2a\x9c\x66\x29\xd1\x03\x02\xa5\xda\x11\x32\x1d\xe5\xa2\x14\x39\x1a\x2e\xab\x9e\x57\x84\x4a\xdd\x92\x96\x42\x56\xe8\x48\xb7\xc2\xb8\xc7\x34\xe0\xb2\x60\x63\x34\xa2\x15\x96\xdb\x21\xf2\xbf\x4b\xf9\x8c\x7d\x4c\x16\xe7\x8e\xfe\x2c\x3a\x0f\xff\x9c\x81\x1b\x64\xbd\x68\x8a\x95\x54\x05\xad\x3a\xd2\xe5\x4a\x76\xd9\x4a\x18\xc6\x26\xc9\x22\x4d\x57\x67\x97\xd1\x7c\xba\x9a\x2c\x2e\xae\xf0\x8d\xda\xde\xfb\x6b\x76\x7e\x19\x26\x93\x4f\x9e\x71\x5d\x72\x04\xbd\xd1\x41\x26\x64\xc0\x58\x72\x19\x83\x77\xd6\xab\xc8\xa2\xef\x0a\x6e\x09\x47\x47\x87\x88\x90\xc6\xf2\xa6\x81\xb7\xdd\x75\xf4\xc8\x18\x92\x56\xf0\x06\x55\xa9\xb4\xd5\x5c\x32\x16\x4e\xa7\xf7\x67\x41\x72\xe3\xfe\xdc\xaf\xd4\x6d\xc0\x8d\x21\x6b\x02\xd9\x65\x41\x7c\x71\xf6\xd6\x7f\xeb\xbf\xf6\x2d\xd7\x7e\xf5\x1d\xfe\xd0\xdb\x72\x8d\xcd\xf7\x12\x8f\xb2\x8c\x7d\x5d\x24\x9f\xa7\x51\x02\xff\x70\x70\xff\xe1\x2d\xce\x2f\x18\x1b\x63\xa2\xc9\xb1\x1d\x78\x21\x57\xb2\x14\x15\x32\x6e\x76\xcf\xee\xf4\xe3\x3a\xaf\x85\xa5\xdc\xf6\x9a\x9c\xd0\x7b\xa8\x4b\xad\x95\xbe\x69\x14\x2f\x76\x1c\x44\x89\xbf\xf1\xec\xb9\xc3\xbf\xc0\x6f\xa7\x18\x6d\xde\xbf\x5b\xbd\xfb\x7d\x84\x7f\x4e\x1c\x5a\xe2\x9a\xb9\x79\x77\xa5\x4d\xe0\xb5\x79\xab\x0a\x6a\x4e\x5b\x2a\x44\xdf\x06\x41\xb5\x6f\x1e\xc4\x61\xea\x1b\xde\x76\x0d\x99\xa0\xe5\x37\xe4\x17\x54\xfa\x55\x9e\xaf\x36\xef\xdf\xe1\x8f\x3b\xd4\x5d\xe6\x04\xd7\x8c\x1a\x43\xfb\xe2\x79\xf7\x4b\x65\x9e\x28\x52\x8a\xe1\x12\x2e\x84\x28\xc5\x64\x1e\xa6\xe9\xe9\x74\x50\x48\x75\x5b\x37\x70\xee\xc6\x07\xdb\x35\x22\xd3\x5c\x0b\x32\x78\x6e\x6a\xee\x22\x2a\xfb\x97\x72\x3b\x2c\x0b\xf3\xc2\x59\xcf\x39\x5f\xde\x92\x14\x24\x2d\x1a\x95\x0f\x93\x09\xa3\x60\x6b\x6e\x21\x2c\x72\x2e\x91\x91\xdb\x0f\x82\x0a\x08\x69\x5d\xca\xb9\xb3\xe5\xc3\x9a\x91\x6e\x81\x90\x76\x1e\x1e\xcc\x40\xb9\x3a\xc8\x6f\x2c\xaf\x68\xa7\x7b\x7b\x53\x08\x0d\xaf\x43\xd0\x88\xcc\x1b\xb6\xcd\xd1\x11\x4a\x21\x8b\xdd\x84\x36\x22\x83\x27\x79\x4b\x18\xbd\xf4\x8d\xf2\x5f\x8e\xe0\xd1\x86\x72\x27\xd6\x8f\x9f\xf7\x4e\x5d\x9f\x3c\xf6\x08\x63\xc3\xf4\x7b\x5e\xa9\x55\x7b\xfa\xb4\x5b\xf0\xd4\x64\x0d\xb6\x10\xc6\x9f\xfa\x1b\x04\xbf\x54\xe4\xc0\xe2\xf0\xc5\x66\xf1\x17\xcc\xa7\xab\x79\x74\x96\x84\xc9\xd5\xea\x22\x5c\x7e\x3a\x1d\x3d\xfb\xf1\x28\xf4\xf3\xc3\xe1\xc4\x88\xb1\x59\xbc\x4c\xae\x2e\x16\x51\xbc\xc4\xbe\x3f\xfb\x2f\x00\x00\xff\xff\x9c\xe9\x74\xe7\x43\x06\x00\x00") - -func testImagesNodePerfNpbIsDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesNodePerfNpbIsDockerfile, - "test/images/node-perf/npb-is/Dockerfile", - ) -} - -func testImagesNodePerfNpbIsDockerfile() (*asset, error) { - bytes, err := testImagesNodePerfNpbIsDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/node-perf/npb-is/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNodePerfNpbIsVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesNodePerfNpbIsVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesNodePerfNpbIsVersion, - "test/images/node-perf/npb-is/VERSION", - ) -} - -func testImagesNodePerfNpbIsVersion() (*asset, error) { - bytes, err := testImagesNodePerfNpbIsVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/node-perf/npb-is/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNodePerfTfWideDeepBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x2d\xa8\x2c\xc9\xc8\xcf\xb3\x32\xd6\x33\xd3\x2d\xce\xc9\xcc\xd5\x2d\x2e\x29\x4a\x2d\x49\xce\xe0\x02\x04\x00\x00\xff\xff\x3f\x88\x4e\x3e\x1e\x00\x00\x00") - -func testImagesNodePerfTfWideDeepBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesNodePerfTfWideDeepBaseimage, - "test/images/node-perf/tf-wide-deep/BASEIMAGE", - ) -} - -func testImagesNodePerfTfWideDeepBaseimage() (*asset, error) { - bytes, err := testImagesNodePerfTfWideDeepBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/node-perf/tf-wide-deep/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNodePerfTfWideDeepDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x91\x51\x6f\xa5\x36\x10\x85\xdf\xfd\x2b\x8e\xc2\x2a\x6a\xa5\x5c\xc8\xe6\xa9\x4d\x9f\x68\xc2\xf6\xa2\x6c\x20\x02\xb2\xd1\x95\x2a\x55\xbe\x30\xc0\x48\x60\xbb\xb6\x09\x61\x7f\x7d\x05\xb9\xbb\x69\xba\xe5\x09\xcf\x39\x73\xfc\x79\x26\xc0\x8d\x36\x8b\xe5\xae\xf7\xb8\xba\xfc\xf8\x0b\xaa\x9e\x70\x37\x1d\xc9\x2a\xf2\xe4\x10\x4f\xbe\xd7\xd6\x85\x22\x10\x01\x3e\x73\x4d\xca\x51\x83\x49\x35\x64\xe1\x7b\x42\x6c\x64\xdd\xd3\x37\xe5\x02\x5f\xc8\x3a\xd6\x0a\x57\xe1\x25\x7e\x5a\x0d\x67\x27\xe9\xec\xe7\xdf\x44\x80\x45\x4f\x18\xe5\x02\xa5\x3d\x26\x47\xf0\x3d\x3b\xb4\x3c\x10\xe8\xa5\x26\xe3\xc1\x0a\xb5\x1e\xcd\xc0\x52\xd5\x84\x99\x7d\xbf\x5d\x73\x0a\x09\x45\x80\xc3\x29\x42\x1f\xbd\x64\x05\x89\x5a\x9b\x05\xba\xfd\xb7\x0f\xd2\x6f\xc0\xeb\xd7\x7b\x6f\xae\xa3\x68\x9e\xe7\x50\x6e\xb0\xa1\xb6\x5d\x34\xbc\x1a\x5d\xf4\x39\xbd\x49\xb2\x32\xd9\x5d\x85\x97\x5b\xcb\xa3\x1a\xc8\x39\x58\xfa\x7b\x62\x4b\x0d\x8e\x0b\xa4\x31\x03\xd7\xf2\x38\x10\x06\x39\x43\x5b\xc8\xce\x12\x35\xf0\x7a\xe5\x9d\x2d\x7b\x56\xdd\x05\x9c\x6e\xfd\x2c\x2d\x89\x00\x0d\x3b\x6f\xf9\x38\xf9\x77\xc3\xfa\x46\xc7\xee\x9d\x41\x2b\x48\x85\xb3\xb8\x44\x5a\x9e\xe1\xf7\xb8\x4c\xcb\x0b\x11\xe0\x29\xad\xf6\xf9\x63\x85\xa7\xb8\x28\xe2\xac\x4a\x93\x12\x79\x81\x9b\x3c\xbb\x4d\xab\x34\xcf\x4a\xe4\x9f\x10\x67\x07\xdc\xa5\xd9\xed\x05\x88\x7d\x4f\x16\xf4\x62\xec\xca\xaf\x2d\x78\x1d\x23\x35\xeb\xcc\x4a\xa2\x77\x00\xad\x7e\x05\x72\x86\x6a\x6e\xb9\xc6\x20\x55\x37\xc9\x8e\xd0\xe9\x67\xb2\x8a\x55\x07\x43\x76\x64\xb7\x2e\xd3\x41\xaa\x46\x04\x18\x78\x64\x2f\xfd\x56\xf9\xe1\x51\xa1\x10\x9f\x8a\xfc\x7e\xc5\x4f\xd2\xfb\xf8\x8f\x44\x88\xe2\x31\x83\x34\x7e\xd7\x91\xc7\x64\x1a\xe9\x09\xe7\xe7\xdf\x2b\xac\x9c\x97\xc3\x80\xdd\x82\x79\x3d\x7b\x1e\x69\x6b\x31\x6c\xbe\x8b\x9e\x94\xd3\xb6\x1d\xf4\xfc\x1a\xb7\x39\xd7\x8d\xba\xeb\x28\xea\xd8\xf7\xd3\x31\xac\xf5\x18\xbd\xf9\xa2\x51\x37\x34\xb8\x48\xda\xba\xe7\x67\x8a\x9e\x3f\x86\xbf\x86\x97\xa1\x97\x36\xec\xbe\xe2\x4f\x71\x7e\x0e\x2f\x2d\x5e\xbe\xb6\xf8\x1f\xc9\x8e\xd8\xfd\x47\x10\xe2\x29\x2f\xee\x6e\xd3\x02\x1f\xf6\xf9\x7d\x72\xca\xdf\x6d\x96\x48\xb7\x2d\xd7\x2c\x87\x68\xe6\x86\xfe\x6a\x88\x8c\x48\xb2\x2f\x78\x38\x54\xfb\x3c\x7b\x88\xab\x3d\x3e\xbc\xfd\x5f\xff\x18\x20\x44\x92\x55\xc5\xe1\x21\x4f\xb3\x0a\x66\xf1\xbd\x56\x08\xdf\xc2\x42\xb3\x88\x7f\x02\x00\x00\xff\xff\x06\xf0\xbf\xba\xa2\x03\x00\x00") - -func testImagesNodePerfTfWideDeepDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesNodePerfTfWideDeepDockerfile, - "test/images/node-perf/tf-wide-deep/Dockerfile", - ) -} - -func testImagesNodePerfTfWideDeepDockerfile() (*asset, error) { - bytes, err := testImagesNodePerfTfWideDeepDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/node-perf/tf-wide-deep/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNodePerfTfWideDeepVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesNodePerfTfWideDeepVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesNodePerfTfWideDeepVersion, - "test/images/node-perf/tf-wide-deep/VERSION", - ) -} - -func testImagesNodePerfTfWideDeepVersion() (*asset, error) { - bytes, err := testImagesNodePerfTfWideDeepVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/node-perf/tf-wide-deep/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNonewprivsGitignore = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xca\xcb\x2b\xe0\x02\x04\x00\x00\xff\xff\xee\x29\x1e\x77\x04\x00\x00\x00") - -func testImagesNonewprivsGitignoreBytes() ([]byte, error) { - return bindataRead( - _testImagesNonewprivsGitignore, - "test/images/nonewprivs/.gitignore", - ) -} - -func testImagesNonewprivsGitignore() (*asset, error) { - bytes, err := testImagesNonewprivsGitignoreBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nonewprivs/.gitignore", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNonewprivsBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x0a\x10\x00\x00\xff\xff\xe5\x8d\xa8\xc0\x5c\x00\x00\x00") - -func testImagesNonewprivsBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesNonewprivsBaseimage, - "test/images/nonewprivs/BASEIMAGE", - ) -} - -func testImagesNonewprivsBaseimage() (*asset, error) { - bytes, err := testImagesNonewprivsBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nonewprivs/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNonewprivsDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x91\x51\x6f\xd3\x30\x14\x85\xdf\xfd\x2b\x8e\x9a\x17\x10\x5d\x32\xf6\x82\x04\x4f\x59\xda\xb1\x68\x6b\x02\x49\xcb\x34\x21\x34\xb9\xce\x6d\x72\xa5\xd4\xf6\x6c\x87\xac\xff\x1e\x25\xdb\x24\x26\xf0\xe3\x3d\xc7\xc7\x9f\xcf\x8d\x90\x19\x7b\x72\xdc\x76\x01\x17\xe7\x1f\x3f\x61\xdb\x11\x6e\x86\x3d\x39\x4d\x81\x3c\xd2\x21\x74\xc6\xf9\x58\x44\x22\xc2\x2d\x2b\xd2\x9e\x1a\x0c\xba\x21\x87\xd0\x11\x52\x2b\x55\x47\xaf\xca\x12\x3f\xc8\x79\x36\x1a\x17\xf1\x39\xde\x4d\x86\xc5\x8b\xb4\x78\xff\x45\x44\x38\x99\x01\x47\x79\x82\x36\x01\x83\x27\x84\x8e\x3d\x0e\xdc\x13\xe8\x49\x91\x0d\x60\x0d\x65\x8e\xb6\x67\xa9\x15\x61\xe4\xd0\xcd\xcf\xbc\x84\xc4\x22\xc2\xfd\x4b\x84\xd9\x07\xc9\x1a\x12\xca\xd8\x13\xcc\xe1\x6f\x1f\x64\x98\x81\xa7\xd3\x85\x60\x3f\x27\xc9\x38\x8e\xb1\x9c\x61\x63\xe3\xda\xa4\x7f\x36\xfa\xe4\x36\xcf\xd6\x45\xbd\x3e\xbb\x88\xcf\xe7\x2b\x3b\xdd\x93\xf7\x70\xf4\x38\xb0\xa3\x06\xfb\x13\xa4\xb5\x3d\x2b\xb9\xef\x09\xbd\x1c\x61\x1c\x64\xeb\x88\x1a\x04\x33\xf1\x8e\x8e\x03\xeb\x76\x09\x6f\x0e\x61\x94\x8e\x44\x84\x86\x7d\x70\xbc\x1f\xc2\x9b\xb2\x5e\xe9\xd8\xbf\x31\x18\x0d\xa9\xb1\x48\x6b\xe4\xf5\x02\x97\x69\x9d\xd7\x4b\x11\xe1\x2e\xdf\x5e\x97\xbb\x2d\xee\xd2\xaa\x4a\x8b\x6d\xbe\xae\x51\x56\xc8\xca\x62\x95\x6f\xf3\xb2\xa8\x51\x5e\x21\x2d\xee\x71\x93\x17\xab\x25\x88\x43\x47\x0e\xf4\x64\xdd\xc4\x6f\x1c\x78\xaa\x91\x9a\xa9\xb3\x9a\xe8\x0d\xc0\xc1\x3c\x03\x79\x4b\x8a\x0f\xac\xd0\x4b\xdd\x0e\xb2\x25\xb4\xe6\x37\x39\xcd\xba\x85\x25\x77\x64\x3f\x2d\xd3\x43\xea\x46\x44\xe8\xf9\xc8\x41\x86\x79\xf2\xcf\xa7\x62\x21\xae\xaa\x72\x33\xe1\xaf\xf3\x4d\xfa\x75\x2d\x44\x56\x95\x75\xfd\x70\xb9\xcb\x6f\x57\x0f\x59\xf9\xed\x1e\x8f\x74\x1c\xce\xbe\xaf\x37\xbb\xb4\xca\xae\xcf\xfc\x94\xa5\x90\x0c\xde\x25\x7b\xd6\x89\x10\xb3\x49\x6b\xfb\x3c\xeb\x8d\x92\xfd\xac\x68\x6d\x45\xb5\x2b\xa0\xba\xa3\x69\xf0\xc1\xff\x4f\x17\xd9\x66\x85\x9f\x0b\xad\xed\xe2\x97\xf8\x13\x00\x00\xff\xff\x4c\xe3\xad\xa9\xd6\x02\x00\x00") - -func testImagesNonewprivsDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesNonewprivsDockerfile, - "test/images/nonewprivs/Dockerfile", - ) -} - -func testImagesNonewprivsDockerfile() (*asset, error) { - bytes, err := testImagesNonewprivsDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nonewprivs/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNonewprivsMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6b\xdb\x3e\x14\xc5\x9f\xff\xfa\x14\x87\xb8\x0f\x09\xa4\x4e\xff\x65\x6c\xd0\x51\x86\x97\x64\xad\x69\xb1\x87\xed\xb6\xf4\xa9\xc8\xf6\x8d\x7d\xc1\x91\x34\x49\x9e\x9b\x6f\x3f\x94\xb6\xb0\x30\xbd\xe9\x9e\xa3\xa3\x9f\x8e\x22\xac\xb5\x39\x58\xee\x7a\x8f\xcb\x8b\xff\xbf\xa0\xea\x09\x77\x63\x4d\x56\x91\x27\x87\x64\xf4\xbd\xb6\x2e\x16\x91\x88\x70\xcf\x0d\x29\x47\x2d\x46\xd5\x92\x85\xef\x09\x89\x91\x4d\x4f\x1f\xca\x12\x8f\x64\x1d\x6b\x85\xcb\xf8\x02\xf3\x60\x98\xbd\x4b\xb3\xc5\x57\x11\xe1\xa0\x47\xec\xe5\x01\x4a\x7b\x8c\x8e\xe0\x7b\x76\xd8\xf1\x40\xa0\xd7\x86\x8c\x07\x2b\x34\x7a\x6f\x06\x96\xaa\x21\x4c\xec\xfb\xe3\x35\xef\x21\xb1\x88\xf0\xfc\x1e\xa1\x6b\x2f\x59\x41\xa2\xd1\xe6\x00\xbd\xfb\xdb\x07\xe9\x8f\xc0\x61\xf5\xde\x9b\xab\xd5\x6a\x9a\xa6\x58\x1e\x61\x63\x6d\xbb\xd5\xf0\x66\x74\xab\xfb\x74\xbd\xcd\xca\xed\xf9\x65\x7c\x71\x3c\xf2\xa0\x06\x72\x0e\x96\x7e\x8d\x6c\xa9\x45\x7d\x80\x34\x66\xe0\x46\xd6\x03\x61\x90\x13\xb4\x85\xec\x2c\x51\x0b\xaf\x03\xef\x64\xd9\xb3\xea\x96\x70\x7a\xe7\x27\x69\x49\x44\x68\xd9\x79\xcb\xf5\xe8\x4f\xca\xfa\xa0\x63\x77\x62\xd0\x0a\x52\x61\x96\x94\x48\xcb\x19\xbe\x27\x65\x5a\x2e\x45\x84\xa7\xb4\xba\xcd\x1f\x2a\x3c\x25\x45\x91\x64\x55\xba\x2d\x91\x17\x58\xe7\xd9\x26\xad\xd2\x3c\x2b\x91\xff\x40\x92\x3d\xe3\x2e\xcd\x36\x4b\x10\xfb\x9e\x2c\xe8\xd5\xd8\xc0\xaf\x2d\x38\xd4\x48\x6d\xe8\xac\x24\x3a\x01\xd8\xe9\x37\x20\x67\xa8\xe1\x1d\x37\x18\xa4\xea\x46\xd9\x11\x3a\xfd\x9b\xac\x62\xd5\xc1\x90\xdd\xb3\x0b\x9f\xe9\x20\x55\x2b\x22\x0c\xbc\x67\x2f\xfd\x71\xf2\xcf\xa3\x62\x21\xca\x62\x5d\xe2\x1a\x4a\x19\x91\x14\xeb\x5b\x7c\xbb\x86\xdc\xb7\x9f\x3f\x89\x2a\x29\x6e\xb6\x55\xd8\x9f\xcd\xd7\x0f\xc5\x26\x2d\x16\xe2\x26\xbf\x4f\xb2\x9b\x97\xc7\x6d\x51\xa6\x79\x16\xb4\x41\x7a\x72\x3e\xa4\xbc\x6c\xd2\x02\xc1\xac\xb4\x6f\xd9\xe2\x6c\xee\x7a\x1a\x06\x98\xa9\x5d\x2c\x04\xbd\x1a\x6d\xbd\x10\x35\xab\x2b\xf1\x5f\x1c\xaf\x78\x2f\x3b\x3a\x1f\x3d\x0f\xb1\xeb\x51\xb3\xc2\xd9\x3c\xb0\x2c\x84\x88\x7f\xde\xe6\xd9\xf3\x55\x18\x8a\x3f\x01\x00\x00\xff\xff\x65\x96\x76\xa8\xeb\x02\x00\x00") - -func testImagesNonewprivsMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesNonewprivsMakefile, - "test/images/nonewprivs/Makefile", - ) -} - -func testImagesNonewprivsMakefile() (*asset, error) { - bytes, err := testImagesNonewprivsMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nonewprivs/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNonewprivsVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesNonewprivsVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesNonewprivsVersion, - "test/images/nonewprivs/VERSION", - ) -} - -func testImagesNonewprivsVersion() (*asset, error) { - bytes, err := testImagesNonewprivsVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nonewprivs/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesNonewprivsNnpGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x6b\xdb\x4c\x10\x86\xcf\x99\x5f\xf1\x22\xf8\xc0\x0e\xfe\xe4\x34\x97\x42\x7a\x52\x13\xb7\x15\x09\x76\xb1\x9c\x86\x40\x2f\x6b\x69\x24\x0d\x95\x76\xb7\xbb\xa3\x28\xa6\xf4\xbf\x17\x39\x2e\x24\xf4\xb8\xcc\xc3\x3b\xcf\xbe\xb3\x3c\xa7\x6b\xe7\x0f\x41\x9a\x56\x71\x79\xf1\xee\x3d\x76\x2d\xe3\x76\xd8\x73\xb0\xac\x1c\x91\x0d\xda\xba\x10\x53\xa2\x3b\x29\xd9\x46\xae\x30\xd8\x8a\x03\xb4\x65\x64\xde\x94\x2d\xe3\x34\x59\xe0\x1b\x87\x28\xce\xe2\x32\xbd\xc0\x6c\x02\x92\xd3\x28\x99\x7f\xa0\x83\x1b\xd0\x9b\x03\xac\x53\x0c\x91\xa1\xad\x44\xd4\xd2\x31\xf8\xb9\x64\xaf\x10\x8b\xd2\xf5\xbe\x13\x63\x4b\xc6\x28\xda\x1e\x97\x9c\x22\x52\x7a\x3c\x05\xb8\xbd\x1a\xb1\x30\x28\x9d\x3f\xc0\xd5\xaf\x29\x18\x25\x02\x80\x56\xd5\x5f\x2d\x97\xe3\x38\xa6\xe6\x68\x99\xba\xd0\x2c\xbb\x17\x2a\x2e\xef\xf2\xeb\xd5\xba\x58\xfd\x7f\x99\x5e\x10\xdd\xdb\x8e\x63\x44\xe0\x9f\x83\x04\xae\xb0\x3f\xc0\x78\xdf\x49\x69\xf6\x1d\xa3\x33\x23\x5c\x80\x69\x02\x73\x05\x75\x93\xe7\x18\x44\xc5\x36\x0b\x44\x57\xeb\x68\x02\x53\x25\x51\x83\xec\x07\x7d\x53\xd0\x5f\x2b\x89\x78\x0d\x38\x0b\x63\x91\x64\x05\xf2\x22\xc1\xc7\xac\xc8\x8b\x05\x3d\xe4\xbb\x2f\x9b\xfb\x1d\x1e\xb2\xed\x36\x5b\xef\xf2\x55\x81\xcd\x16\xd7\x9b\xf5\x4d\xbe\xcb\x37\xeb\x02\x9b\x4f\xc8\xd6\x8f\xb8\xcd\xd7\x37\x0b\xb0\x68\xcb\x01\xfc\xec\xc3\xe4\xee\x02\x64\xaa\x8e\xab\x94\x0a\xe6\x37\xcb\x6b\xf7\x22\x13\x3d\x97\x52\x4b\x89\xce\xd8\x66\x30\x0d\xa3\x71\x4f\x1c\xac\xd8\x06\x9e\x43\x2f\x71\x3a\x5e\x84\xb1\x15\x75\xd2\x8b\x1a\x3d\xbe\xff\xf9\x4e\x4a\xe7\x4b\x22\x6f\xca\x1f\x53\x48\x6f\xc4\x12\x49\xef\x5d\x50\xcc\xe8\x2c\xa9\x7b\x4d\xe8\x2c\x71\x31\xa1\x39\x51\x3d\xd8\xf2\xc8\xcc\xe6\xf8\x45\x67\x75\xaf\xe9\xd7\x20\x56\xeb\x59\xb2\xaa\x6b\x2e\x55\x9e\x18\x83\x54\x57\xf8\xaf\xfa\x6e\x93\x05\x5c\x4c\x3f\xb3\xf2\x20\xd5\x6c\x3e\xa7\xdf\xf4\x27\x00\x00\xff\xff\x1d\x9d\xa7\x78\xa3\x02\x00\x00") - -func testImagesNonewprivsNnpGoBytes() ([]byte, error) { - return bindataRead( - _testImagesNonewprivsNnpGo, - "test/images/nonewprivs/nnp.go", - ) -} - -func testImagesNonewprivsNnpGo() (*asset, error) { - bytes, err := testImagesNonewprivsNnpGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/nonewprivs/nnp.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsPeerFinderBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\xcd\xb6\x28\xd6\x4b\x4f\x2e\xd2\xcb\xcc\xd7\x4f\x49\x4d\xca\x4c\xcc\xd3\x4d\x4a\x2c\x4e\xd5\x05\x4b\x5a\x19\xe8\x99\xe8\x19\x72\x25\x16\xe5\xe2\x54\x56\x94\x8b\x50\x84\xc7\x34\x90\x24\x54\x61\x41\x41\xb2\x99\x49\x4e\x2a\x2e\xa5\x50\x69\xa8\x62\x40\x00\x00\x00\xff\xff\xa7\xc3\x7f\x2e\xa4\x00\x00\x00") - -func testImagesPetsPeerFinderBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsPeerFinderBaseimage, - "test/images/pets/peer-finder/BASEIMAGE", - ) -} - -func testImagesPetsPeerFinderBaseimage() (*asset, error) { - bytes, err := testImagesPetsPeerFinderBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/peer-finder/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsPeerFinderDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x3c\x14\x86\xef\xfd\x2b\x5e\x35\x37\xdf\x27\xb5\x0d\x63\x12\xd3\xb6\xab\x50\xc2\x88\x80\x84\x25\xe9\x58\x35\x4d\xc8\x49\x4e\x93\x23\xb9\x76\xb0\x9d\x85\xfe\xfb\x29\x01\x24\xd0\x7c\xe9\xf3\xf8\xf5\xe3\xd7\x01\x36\xa6\x3f\x5a\x6e\x3b\x8f\xd3\x93\x0f\x67\x28\x3b\xc2\xf5\x50\x91\xd5\xe4\xc9\x21\x1a\x7c\x67\xac\x5b\x8b\x40\x04\xb8\xe1\x9a\xb4\xa3\x06\x83\x6e\xc8\xc2\x77\x84\xa8\x97\x75\x47\xaf\x93\x25\x7e\x90\x75\x6c\x34\x4e\xd7\x27\xf8\x6f\x02\x16\x2f\xa3\xc5\xff\x5f\x45\x80\xa3\x19\x70\x90\x47\x68\xe3\x31\x38\x82\xef\xd8\x61\xcf\x8a\x40\x4f\x35\xf5\x1e\xac\x51\x9b\x43\xaf\x58\xea\x9a\x30\xb2\xef\xe6\x6b\x5e\x42\xd6\x22\xc0\xee\x25\xc2\x54\x5e\xb2\x86\x44\x6d\xfa\x23\xcc\xfe\x2d\x07\xe9\x67\xe1\x69\x75\xde\xf7\x5f\xc2\x70\x1c\xc7\xb5\x9c\x65\xd7\xc6\xb6\xa1\x7a\x06\x5d\x78\x93\x6c\xe2\xb4\x88\x57\xa7\xeb\x93\xf9\xc8\x56\x2b\x72\x0e\x96\x1e\x07\xb6\xd4\xa0\x3a\x42\xf6\xbd\xe2\x5a\x56\x8a\xa0\xe4\x08\x63\x21\x5b\x4b\xd4\xc0\x9b\xc9\x77\xb4\xec\x59\xb7\x4b\x38\xb3\xf7\xa3\xb4\x24\x02\x34\xec\xbc\xe5\x6a\xf0\xef\xca\x7a\xb5\x63\xf7\x0e\x30\x1a\x52\x63\x11\x15\x48\x8a\x05\xce\xa3\x22\x29\x96\x22\xc0\x7d\x52\x5e\x65\xdb\x12\xf7\x51\x9e\x47\x69\x99\xc4\x05\xb2\x1c\x9b\x2c\xbd\x48\xca\x24\x4b\x0b\x64\x97\x88\xd2\x1d\xae\x93\xf4\x62\x09\x62\xdf\x91\x05\x3d\xf5\x76\xf2\x37\x16\x3c\xd5\x48\xcd\xd4\x59\x41\xf4\x4e\x60\x6f\x9e\x85\x5c\x4f\x35\xef\xb9\x86\x92\xba\x1d\x64\x4b\x68\xcd\x1f\xb2\x9a\x75\x8b\x9e\xec\x81\xdd\xf4\x99\x0e\x52\x37\x22\x80\xe2\x03\x7b\xe9\xe7\x9d\x7f\x1e\xb5\x16\xe2\x32\xcf\x6e\x27\xfd\x38\xb9\x8d\xbe\xc5\x42\x6c\xf2\xac\x28\x1e\xce\xb7\xc9\xcd\xc5\xc3\x26\xbb\xdb\xe1\x91\x0e\xc3\xea\x7b\x7c\xbb\x8d\xf2\xcd\xd5\xca\x4d\x59\x35\xc2\xc1\xd9\xb0\x62\x1d\x0a\x91\x6f\x53\xd4\x8a\xa4\x5e\xb1\x76\x5e\x2a\x85\xb1\x25\x8f\x4a\xba\x0e\x8d\x76\x83\x67\xe5\x84\x98\xa3\x7a\x22\xbb\xda\xf3\x6c\x11\x0a\x11\xff\xbc\xcb\x8a\x18\x9f\x3f\x7e\x3a\x13\x71\x5a\xe6\xbb\xbb\x2c\x49\x4b\xfc\x5a\x84\x6f\xc0\xc5\x6f\xf1\x37\x00\x00\xff\xff\x66\xf8\xdc\x16\xef\x02\x00\x00") - -func testImagesPetsPeerFinderDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsPeerFinderDockerfile, - "test/images/pets/peer-finder/Dockerfile", - ) -} - -func testImagesPetsPeerFinderDockerfile() (*asset, error) { - bytes, err := testImagesPetsPeerFinderDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/peer-finder/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsPeerFinderMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x4f\xdc\x30\x14\x84\xcf\xf5\xaf\x18\x6d\x38\x80\xb4\x24\x14\x55\x1c\xa8\x50\x95\xee\x6e\x21\x02\x25\x55\x12\x40\x9c\x90\x93\xbc\x4d\x9e\x94\xb5\x5d\xdb\x69\xd8\x7f\x5f\x79\x01\x09\x54\xdf\xfc\x66\x3c\xfe\x3c\x8e\xb0\xd2\x66\x6f\xb9\x1f\x3c\xce\xcf\xbe\x5e\xa0\x1e\x08\xb7\x53\x43\x56\x91\x27\x87\x74\xf2\x83\xb6\x2e\x16\x91\x88\x70\xc7\x2d\x29\x47\x1d\x26\xd5\x91\x85\x1f\x08\xa9\x91\xed\x40\xef\xca\x12\x0f\x64\x1d\x6b\x85\xf3\xf8\x0c\xc7\xc1\xb0\x78\x93\x16\x27\xdf\x45\x84\xbd\x9e\xb0\x93\x7b\x28\xed\x31\x39\x82\x1f\xd8\x61\xcb\x23\x81\x5e\x5a\x32\x1e\xac\xd0\xea\x9d\x19\x59\xaa\x96\x30\xb3\x1f\x0e\xd7\xbc\x85\xc4\x22\xc2\xd3\x5b\x84\x6e\xbc\x64\x05\x89\x56\x9b\x3d\xf4\xf6\xa3\x0f\xd2\x1f\x80\xc3\x1a\xbc\x37\x97\x49\x32\xcf\x73\x2c\x0f\xb0\xb1\xb6\x7d\x32\xbe\x1a\x5d\x72\x97\xad\x36\x79\xb5\x39\x3d\x8f\xcf\x0e\x47\xee\xd5\x48\xce\xc1\xd2\x9f\x89\x2d\x75\x68\xf6\x90\xc6\x8c\xdc\xca\x66\x24\x8c\x72\x86\xb6\x90\xbd\x25\xea\xe0\x75\xe0\x9d\x2d\x7b\x56\xfd\x12\x4e\x6f\xfd\x2c\x2d\x89\x08\x1d\x3b\x6f\xb9\x99\xfc\xa7\xb2\xde\xe9\xd8\x7d\x32\x68\x05\xa9\xb0\x48\x2b\x64\xd5\x02\x3f\xd3\x2a\xab\x96\x22\xc2\x63\x56\xdf\x14\xf7\x35\x1e\xd3\xb2\x4c\xf3\x3a\xdb\x54\x28\x4a\xac\x8a\x7c\x9d\xd5\x59\x91\x57\x28\x7e\x21\xcd\x9f\x70\x9b\xe5\xeb\x25\x88\xfd\x40\x16\xf4\x62\x6c\xe0\xd7\x16\x1c\x6a\xa4\x2e\x74\x56\x11\x7d\x02\xd8\xea\x57\x20\x67\xa8\xe5\x2d\xb7\x18\xa5\xea\x27\xd9\x13\x7a\xfd\x97\xac\x62\xd5\xc3\x90\xdd\xb1\x0b\x9f\xe9\x20\x55\x27\x22\x8c\xbc\x63\x2f\xfd\x61\xf2\xdf\xa3\x62\x21\xaa\x72\x55\xe1\x0a\x86\xc8\x9e\x6e\x39\x18\x44\x5a\xae\x6e\xf0\xe3\x0a\x72\xd7\x5d\x7c\x13\x75\x5a\x5e\x6f\xea\xb0\x3f\x3a\x5e\xdd\x97\xeb\xac\x3c\x11\xd7\xc5\x5d\x9a\x5f\x3f\x3f\x6c\xca\x2a\x2b\xf2\xa0\x8d\xd2\x93\xf3\x21\xed\x79\x9d\x95\x87\x40\xef\x92\x8f\xa9\xf4\x62\xb4\xf5\x42\x34\xac\x2e\xc5\x97\x38\x4e\xe2\x38\xe1\x9d\xec\xe9\x74\xf2\x3c\xc6\x6e\x40\xc3\x0a\x47\xc7\x01\xe8\x44\x88\xf8\xf7\x4d\x91\x3f\x5d\x86\xa1\xf8\x17\x00\x00\xff\xff\x87\xc5\xa6\xda\xf0\x02\x00\x00") - -func testImagesPetsPeerFinderMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsPeerFinderMakefile, - "test/images/pets/peer-finder/Makefile", - ) -} - -func testImagesPetsPeerFinderMakefile() (*asset, error) { - bytes, err := testImagesPetsPeerFinderMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/peer-finder/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsPeerFinderVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe6\x02\x04\x00\x00\xff\xff\x1c\xa7\xbe\x4f\x04\x00\x00\x00") - -func testImagesPetsPeerFinderVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsPeerFinderVersion, - "test/images/pets/peer-finder/VERSION", - ) -} - -func testImagesPetsPeerFinderVersion() (*asset, error) { - bytes, err := testImagesPetsPeerFinderVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/peer-finder/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsPeerFinderPeerFinderGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x58\x6d\x73\xdb\xb8\xf1\x7f\x2d\x7e\x8a\x0d\x67\x72\x7f\x52\x47\x53\x49\xfe\x9d\x4e\xeb\xd4\xbd\xd1\xd9\xce\x45\xbd\x9c\xec\xb1\x9c\x64\xae\xb1\xe7\x0e\x26\x57\x14\xc6\x24\xc0\x03\x40\xc9\xaa\xe3\xef\xde\x59\x00\x7c\xb0\xe4\xb4\x93\x6b\xdf\x34\x33\xb1\x04\x60\xb1\xfb\xdb\xe7\x85\x26\xe3\xe0\x58\xd6\x5b\xc5\x8b\x95\x81\x57\x2f\x5e\xfe\x01\x2e\x57\x08\x3f\x36\x37\xa8\x04\x1a\xd4\x30\x6d\xcc\x4a\x2a\x9d\x06\xc1\x3b\x9e\xa1\xd0\x98\x43\x23\x72\x54\x60\x56\x08\xd3\x9a\x65\x2b\x04\x7f\x92\xc0\x07\x54\x9a\x4b\x01\xaf\xd2\x17\x10\x11\x41\xe8\x8f\xc2\xf8\x75\xb0\x95\x0d\x54\x6c\x0b\x42\x1a\x68\x34\x82\x59\x71\x0d\x4b\x5e\x22\xe0\x5d\x86\xb5\x01\x2e\x20\x93\x55\x5d\x72\x26\x32\x84\x0d\x37\x2b\x2b\xc4\xb3\x48\x83\x9f\x3d\x03\x79\x63\x18\x17\xc0\x20\x93\xf5\x16\xe4\x72\x48\x05\xcc\x04\x01\x00\xc0\xca\x98\xfa\x70\x32\xd9\x6c\x36\x29\xb3\x28\x53\xa9\x8a\x49\xe9\xa8\xf4\xe4\xdd\xec\xf8\x74\xbe\x38\x3d\x78\x95\xbe\x08\x82\xf7\xa2\x44\xad\x41\xe1\x6f\x0d\x57\x98\xc3\xcd\x16\x58\x5d\x97\x3c\x63\x37\x25\x42\xc9\x36\x20\x15\xb0\x42\x21\xe6\x60\x24\xe1\xdc\x28\x6e\xb8\x28\x12\xd0\x72\x69\x36\x4c\x61\x90\x73\x6d\x14\xbf\x69\xcc\x23\x03\xb5\xa8\xb8\x86\x21\x81\x14\xc0\x04\x84\xd3\x05\xcc\x16\x21\x7c\x3f\x5d\xcc\x16\x49\xf0\x71\x76\xf9\xf6\xec\xfd\x25\x7c\x9c\x5e\x5c\x4c\xe7\x97\xb3\xd3\x05\x9c\x5d\xc0\xf1\xd9\xfc\x64\x76\x39\x3b\x9b\x2f\xe0\xec\x0d\x4c\xe7\x3f\xc3\x8f\xb3\xf9\x49\x02\xc8\xcd\x0a\x15\xe0\x5d\xad\x08\xbb\x54\xc0\xc9\x74\x98\xa7\xc1\x02\xf1\x91\xf0\xa5\x74\x60\x74\x8d\x19\x5f\xf2\x0c\x4a\x26\x8a\x86\x15\x08\x85\x5c\xa3\x12\x5c\x14\x50\xa3\xaa\xb8\x26\xe7\x69\x60\x22\x0f\x4a\x5e\x71\xc3\x8c\x5d\xef\xa9\x93\x06\xe3\x49\x10\x4c\x26\x30\x05\x5d\xb1\xb2\x84\xc6\xf0\x92\x9b\x2d\xd4\x4a\x16\x8a\x55\x64\xa4\x52\xca\xdb\xa6\x86\x95\xd4\x46\xb0\x0a\x35\xf9\x09\x45\x5e\x4b\x2e\x8c\x06\xeb\x3e\x8d\x6a\xcd\x33\x4c\x83\x9a\x65\xb7\x04\xa7\x62\x5c\x04\x01\xaf\x6a\xa9\x0c\x44\xc1\x28\x5c\x96\xac\x08\xe9\xb3\x32\xf4\xc1\xe5\x84\x4b\x92\x45\x8b\x52\xda\x23\x81\xf6\x48\x6a\xf7\x77\x82\x77\x98\xd1\x57\x85\x05\xde\xd5\xf4\x4d\x4b\x65\x49\xc8\xfc\xa2\xb0\x74\x86\x57\x18\x06\xc1\x28\xbc\xfd\x93\x4e\xb9\x9c\xb0\x9a\x57\x2c\x5b\x71\x81\x6a\x3b\xa9\x6f\x8b\x09\x09\x99\x68\x34\x3a\x0c\xe2\x20\xc8\xa4\xd0\x16\x50\x2d\xcb\xf2\x1c\x15\x97\x39\x1c\xc1\x4b\x18\x03\x31\x4a\x17\x98\x49\x91\x13\xe1\x9a\x29\x22\x93\xe2\x78\xc5\x44\x81\x00\x47\x40\x2a\xa4\x0b\x2b\x3a\x0a\xa5\x38\xc8\xec\x49\x98\x40\x48\xff\x17\x99\xe2\xb5\x21\x7b\xa9\x46\x50\x58\xb8\xe3\x04\xaa\x46\x1b\x60\x99\xcd\x0b\x06\x02\x37\x50\x72\x81\xa0\xb1\x66\x8a\x51\x08\x95\x5c\x1b\xb2\x69\x8d\xa8\x34\xac\x39\x03\x6d\x72\x2e\xd2\x30\x26\xf9\x0b\xc3\x94\x81\xa7\xe4\x6b\x3a\xf9\xa2\x78\x7b\xfa\x1f\x4a\xd7\xeb\x0c\xdc\xbf\x1d\xe9\xde\xdf\xad\xf0\x1f\xba\xe0\xf3\x07\xa0\x50\xd7\x52\x68\x4e\x59\xd7\x06\xed\xc9\x7c\x01\x0a\x33\xa9\x72\xdd\xa6\x7a\x2e\x29\x50\x5c\xfd\xa8\x65\x4e\xc9\xe5\x45\xdb\x48\xab\x59\x86\xbb\xa2\x85\x6e\xa5\x52\x79\xeb\xc9\x86\x3c\x54\x23\x2c\x1a\x2e\x52\x98\x2d\xa1\x11\x3e\x5f\x30\x4f\xac\xd8\xf3\xb3\x93\x5f\xe6\xd3\x9f\x4e\x17\xe7\xd3\xe3\x53\x40\xb1\x06\x72\x37\xd7\x54\xcc\x72\x2b\xde\x03\xdb\xd7\xdc\x1d\x0c\x21\x1c\x97\x8d\x36\xa8\xe0\xc4\x5d\xd9\xac\x78\xb6\x6a\x79\x51\xfd\x31\x3d\x4d\x02\x7c\x69\x8b\xa6\x46\x03\x46\x71\xd4\xe4\xb0\x1c\x0d\xa5\xac\x40\xe0\x06\x96\x4a\x56\x30\x41\x93\x4d\x14\x6a\x59\xae\xd3\x4c\x8a\xa5\xad\xad\x84\x2b\x0e\x82\x65\x23\x32\x9f\x92\x91\x5e\x67\x73\x56\x21\xb8\x7c\x88\x21\xa2\x38\xf7\x50\x13\x40\xa5\xa4\x8a\xe1\x3e\x18\xf5\xd9\x7a\x78\x04\x96\x66\x8e\x1b\xaf\x51\x1c\x8c\x7e\x49\x40\xab\xf5\x85\x73\x8d\xbd\x47\x74\x02\x4d\xfa\xce\xca\x59\x5c\x7c\x88\x42\xaf\xb2\x17\x19\x07\x23\xbe\xb4\x94\xcf\x8e\x40\xf0\x92\xa4\x8c\x14\x9a\x46\x89\xbe\x36\x58\x56\xc1\xe8\x21\x18\x51\x08\x0c\xa5\x10\x7f\x65\xf3\xaa\x17\x6c\x59\x4c\x26\xb6\x6b\x2d\x2e\x3e\x74\xa1\x82\x22\xf7\x55\x26\x4c\xc3\x2e\x98\x94\x94\xc6\x87\x4f\x30\x1a\x61\x4d\x1c\x97\x95\x49\x17\xb5\xe2\xc2\x2c\xa3\xf0\xf9\x3a\x1c\x08\x4c\x2f\x99\x2a\xd0\x7c\x3a\x2c\x51\x44\xbb\xbb\xf1\xc1\xcb\xeb\x98\xb8\xb4\xc0\xd3\x99\xd0\xa8\x4c\x84\x75\x6c\xe1\xef\x2b\x26\x78\x19\x3c\x78\x67\xe8\x15\x96\xe5\x59\x63\x22\x8d\x22\x5f\x50\xf2\x24\xa0\x5d\x3a\xb6\x8e\xb9\x0f\x46\xa5\x2c\xd2\x73\x8f\x8d\x2a\x1b\x17\xc5\x21\x3c\x5f\xbb\xe6\x68\x53\x8e\x96\x61\x7b\x35\x81\x8e\x5b\x1c\x04\xa3\xac\xb2\x36\xa3\x8b\xe9\xb1\xac\x2a\x26\xf2\xc8\x11\x52\x9a\x3a\x99\xde\x6f\x59\x95\xa7\xf6\xde\x39\xaf\x31\x7a\xd2\x51\x84\xe5\x0d\x33\xac\x5c\x46\xe1\x1b\xc6\x4b\xd7\x0c\x0b\x34\x0e\x08\xd4\xbc\x46\x8f\x06\x95\x72\x36\xd0\x26\x97\x8d\xd9\x95\x22\x1b\xf3\x3b\xc5\xc8\xc6\x3c\x25\xc7\xaa\x9a\xda\xa2\x17\x91\xe2\xae\x18\x7d\x54\xdc\x60\xf4\xe9\xfa\x66\x6b\xb0\x37\x73\xdc\xea\x9e\x1e\x97\x52\xa3\xa5\x1f\x62\x74\x1d\x26\xbd\x40\x96\x4f\xcb\x32\x72\x42\xbf\x02\x29\x59\xbb\x31\x08\xcf\xd7\x04\xd2\xb2\xdd\xf5\x91\xcb\x21\x62\x3b\x54\xa1\xf3\x75\x34\x20\x88\xbb\x80\xa1\xa0\x8d\x6c\x50\xd8\xd2\x72\xce\x94\x07\x2f\x6c\x82\x8e\xbb\xa2\x66\xa1\x0a\x0d\x47\x47\x10\x86\x16\x28\x2d\x40\xea\xf4\x07\x34\x28\xd6\x51\xf8\xa8\x92\x85\xce\x53\x7c\x09\x63\xaa\xdc\xee\xd6\xe7\xcf\x3d\x87\xcf\x9f\x21\x1a\x77\x2d\xcd\xed\x7d\xf3\x0d\x8c\xdb\x2e\x63\x77\xe2\x3d\x8b\xcc\x84\x1d\xe6\xd0\x20\x30\x55\xe8\xa4\x1d\xaf\xe0\xa0\xeb\x82\x34\x69\x4c\xa4\xb2\x3b\xbe\xf3\x1c\xb4\xbd\x80\x89\x1c\x0e\x84\x1d\x6c\x98\xe8\xaa\x2d\x25\xf2\x23\xf4\x69\xe8\xad\xd7\x0e\x1a\x9d\x1f\xa5\x4e\xdf\xfa\xbd\xaf\x0d\xb4\x96\xd7\x21\x3c\xd7\xc3\x68\x26\x04\xae\x7a\x0c\x0a\x68\x10\x50\xfd\x99\x2d\xdb\xb6\xc4\xb5\x2d\xd6\xb5\x92\x6b\x9e\xdb\xde\xa1\xb6\x2d\xe3\xb6\x54\x0f\xaa\xb4\xb3\xbc\xbf\xdb\xbb\xcc\x51\x1c\x4b\xb1\xfc\x7e\x6b\x50\x3f\x15\x9d\x6f\x78\x89\x51\xb8\x5b\xf5\xc9\x1e\x83\xdb\xb6\x76\xbb\x70\xda\x61\x49\x74\xfb\x46\xe9\xad\x12\x85\xef\x85\x9d\x7f\x69\x3a\x40\x96\xef\xf5\x17\x2b\x89\x4c\x6f\xed\xa2\x10\xc6\x6e\xe6\x4a\x2f\xec\x87\x63\xff\x28\x0e\xc9\x50\xd4\x1c\xa8\xcb\x92\x27\x59\xdf\xca\x99\xb1\xed\x49\x43\xc9\x6f\xfd\xec\x3f\x4e\xf5\x3a\x4b\xc7\x63\xba\xa8\xbc\x5f\x8f\xc0\xcb\x38\x96\x55\x4d\xfa\xff\x7a\x35\x8d\xd2\xf1\x95\x88\xc7\x1a\x99\xca\x56\x57\xfa\xfe\x65\xf2\x40\x5b\xf6\x4b\x3c\x8e\xbe\x3b\xff\x4b\x21\x59\xf9\xd7\x4f\xec\xe0\x1f\xd3\x83\xbf\xbf\x38\xf8\xf3\xc1\xf5\xfd\xcb\xe4\x8f\xff\xff\x60\xf9\x47\xfb\xfb\x57\x69\x3c\xee\x77\xaf\xef\x5f\xd1\x66\xfc\xab\x55\x17\xb0\xd4\xf8\x75\xca\xfc\x57\xb5\xf8\x1d\x90\xff\x8d\x9f\x1f\x45\x7f\xa6\x90\x19\x1a\xc4\x8a\xa6\x64\xdd\xeb\x82\x4b\xf1\xa8\xe0\x3a\xaf\x17\x4a\x36\xf5\xdc\xce\xf6\xd4\x98\x31\x5d\x34\x37\x78\xe7\x76\x22\x1f\x85\x4d\x69\xfc\xe1\x1b\x4e\xf5\x97\x02\x71\xd1\xdc\x54\xcc\x64\xab\x41\x40\x12\x35\xd9\xf0\x36\x81\x75\xdf\xe5\xfd\x7d\x0b\x97\x2f\xa1\x97\xf7\xe9\xf6\xda\x46\x15\x59\xc4\x47\xd6\x7e\xac\x59\x07\x9d\x74\x39\xd9\x15\x23\x47\xc8\x35\x60\x55\x9b\xad\xa3\x1c\x24\xf5\x11\xac\xed\xde\xd0\xd3\x96\xd5\xdc\xbf\xfe\x32\x29\xd6\xa8\x8c\x77\x2b\x70\x61\x24\x08\x3d\x88\xd5\x1d\x76\x42\xc3\xb7\x76\x08\xf9\xb6\xe5\x6c\xff\xde\x28\x64\xb7\x81\x5f\x3e\xf8\x72\xd4\xb6\xfa\x93\x76\xb8\xcb\x5b\x0d\x8c\x84\x1b\x74\xe5\xa8\xe7\x4e\xd5\x7f\x80\xf3\x91\x58\xff\xda\x49\xff\x26\xb9\x88\x3e\x5d\xbb\xe5\xbd\xd0\x09\x84\x7a\x9d\x85\x49\x5b\x73\x1e\x12\x02\xe7\x8b\xe8\x5e\x13\x18\xb2\xfc\x1f\x6a\x06\xd5\xd6\x42\x3e\xfc\x92\x19\xfa\x66\x41\xea\x0e\x4d\xda\x99\xc3\xcf\x62\xd4\x59\xbd\x6e\xd6\x3c\x7e\xbb\x8f\xb3\x76\x03\x3a\xab\xec\xf8\x72\x2e\xa1\xd5\x08\x74\x53\xdb\x37\x7a\x02\xbd\xda\x76\x9a\x2b\x4b\x72\x2f\x73\xa7\xdd\x43\x2c\xed\x86\x86\xb8\x1b\x88\x05\x6e\xce\xe9\xd1\x95\xf8\xb7\xd7\x13\xb3\x79\xb2\xb7\xf3\xba\xc5\xfd\x8c\x70\xbf\xf6\xcf\xd6\x12\xb1\x8e\xfa\x27\xad\xf3\x5a\xcf\xdf\x55\x2a\xff\x68\x20\x3b\xfd\x8b\x8e\x71\x3e\x9c\x9f\x7d\x91\x18\x65\x52\x18\x2e\x1a\xec\x8b\x50\xcb\x3c\x3d\xfd\xad\x61\x65\x64\x35\x88\x29\xa6\x9e\x75\x27\x6f\x99\x8e\x9c\xfb\xe2\x7d\xf6\x6f\xd9\x1a\x6d\x77\x5d\xca\x46\xe4\x50\x6d\x35\x96\x4b\x1a\xf3\xed\x7b\x74\x8b\x26\xbd\x12\x3f\x6d\xe1\xed\xa0\x7f\x5f\x09\x5a\xe9\x96\xc8\xb7\x74\x27\x21\x79\x1c\x1e\x1d\x86\x77\x5c\x1b\x32\x23\xbd\x5e\xe2\xa7\x54\x21\xe0\x44\xe4\x5e\x3c\x8f\x6e\x51\x48\x48\x65\xfc\x7b\x4a\x47\x2d\x69\xbc\x13\x16\x74\xc7\xc1\x6e\xea\x9c\xde\xd4\x57\x62\xc3\x34\x3c\x5f\x5f\x09\x21\x37\xae\xda\xd6\x8f\xd0\xec\x08\xb2\x92\xba\x47\xc4\x50\x8f\x56\x64\x02\xe1\x95\x08\xe3\x41\x0c\x8d\x5c\xcc\xf4\xa0\xbf\x10\xc0\x0f\x76\xa6\xb9\x3c\x3b\x39\x3b\x84\xd3\x3b\x6e\xa8\x68\x9a\x15\x2a\xfc\x3f\x1a\x6e\xfa\xe0\xfd\x2e\xd8\xd7\x69\xc9\xed\xcf\x45\x78\x67\x7f\x21\x0b\x69\x80\xfd\x67\x00\x00\x00\xff\xff\x80\xe8\x6d\x84\x65\x14\x00\x00") - -func testImagesPetsPeerFinderPeerFinderGoBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsPeerFinderPeerFinderGo, - "test/images/pets/peer-finder/peer-finder.go", - ) -} - -func testImagesPetsPeerFinderPeerFinderGo() (*asset, error) { - bytes, err := testImagesPetsPeerFinderPeerFinderGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/peer-finder/peer-finder.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsRedisInstallerBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\xcd\xb6\x28\xd6\x4b\x4f\x2e\xd2\xcb\xcc\xd7\x4f\x49\x4d\xca\x4c\xcc\xd3\x4d\x4a\x2c\x4e\xd5\x05\x4b\x5a\x19\xe8\x99\xe8\x19\x72\x25\x16\xe5\xe2\x54\x56\x94\x8b\x50\x84\xc7\x34\x90\x24\x54\x61\x41\x41\xb2\x99\x49\x4e\x2a\x2e\xa5\x50\x69\xa8\x62\x40\x00\x00\x00\xff\xff\xa7\xc3\x7f\x2e\xa4\x00\x00\x00") - -func testImagesPetsRedisInstallerBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsRedisInstallerBaseimage, - "test/images/pets/redis-installer/BASEIMAGE", - ) -} - -func testImagesPetsRedisInstallerBaseimage() (*asset, error) { - bytes, err := testImagesPetsRedisInstallerBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/redis-installer/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsRedisInstallerDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x53\x61\x6f\xdb\x36\x14\xfc\xce\x5f\x71\xb0\x81\x6e\x03\x22\x29\xf3\xd0\x15\xc8\xb0\x0f\x8a\xed\xae\x42\x13\xa9\xb3\x9c\x15\xc1\x36\x04\x94\xf4\x2c\x71\x95\x48\x85\xa4\xa2\x38\xbf\x7e\x20\x65\x37\x0e\x12\x7d\x12\xc8\x7b\xef\xdd\xdd\x3b\xce\xb1\x54\xfd\x5e\x8b\xba\xb1\x58\x9c\xff\xfc\x2b\xb6\x0d\xe1\xf3\x50\x90\x96\x64\xc9\x20\x1e\x6c\xa3\xb4\x09\xd9\x9c\xcd\x71\x25\x4a\x92\x86\x2a\x0c\xb2\x22\x0d\xdb\x10\xe2\x9e\x97\x0d\x1d\x6f\xce\xf0\x17\x69\x23\x94\xc4\x22\x3c\xc7\x8f\x0e\x30\x3b\x5c\xcd\x7e\xfa\x8d\xcd\xb1\x57\x03\x3a\xbe\x87\x54\x16\x83\x21\xd8\x46\x18\xec\x44\x4b\xa0\xc7\x92\x7a\x0b\x21\x51\xaa\xae\x6f\x05\x97\x25\x61\x14\xb6\xf1\x63\x0e\x4d\x42\x36\xc7\xed\xa1\x85\x2a\x2c\x17\x12\x1c\xa5\xea\xf7\x50\xbb\x53\x1c\xb8\xf5\x84\xdd\xd7\x58\xdb\x5f\x44\xd1\x38\x8e\x21\xf7\x64\x43\xa5\xeb\xa8\x9d\x80\x26\xba\x4a\x96\xeb\x34\x5f\x07\x8b\xf0\xdc\x97\xdc\xc8\x96\x8c\x81\xa6\xfb\x41\x68\xaa\x50\xec\xc1\xfb\xbe\x15\x25\x2f\x5a\x42\xcb\x47\x28\x0d\x5e\x6b\xa2\x0a\x56\x39\xbe\xa3\x16\x56\xc8\xfa\x0c\x46\xed\xec\xc8\x35\xb1\x39\x2a\x61\xac\x16\xc5\x60\x5f\x98\x75\x64\x27\xcc\x0b\x80\x92\xe0\x12\xb3\x38\x47\x92\xcf\x70\x19\xe7\x49\x7e\xc6\xe6\xf8\x9a\x6c\x3f\x65\x37\x5b\x7c\x8d\x37\x9b\x38\xdd\x26\xeb\x1c\xd9\x06\xcb\x2c\x5d\x25\xdb\x24\x4b\x73\x64\x1f\x11\xa7\xb7\xf8\x9c\xa4\xab\x33\x90\xb0\x0d\x69\xd0\x63\xaf\x1d\x7f\xa5\x21\x9c\x8d\x54\x39\xcf\x72\xa2\x17\x04\x76\x6a\x22\x64\x7a\x2a\xc5\x4e\x94\x68\xb9\xac\x07\x5e\x13\x6a\xf5\x40\x5a\x0a\x59\xa3\x27\xdd\x09\xe3\x96\x69\xc0\x65\xc5\xe6\x68\x45\x27\x2c\xb7\xfe\xe4\x95\xa8\x90\xb1\x39\xb6\xd9\x2a\xbb\x40\x4d\x16\x5a\x54\x6e\x27\x05\x37\x0d\x2a\xea\x49\x56\x24\xcb\xbd\x6b\x04\x33\x0a\x5b\x36\xce\xbc\xbe\x75\x1b\x2c\x06\xb3\x2f\xd4\xa3\xe3\xe9\xc2\x67\xb9\xc6\xf3\x29\x78\x6b\x14\x2a\x45\x46\xfe\x60\x61\x88\x3a\x57\xe8\xa7\x1b\xeb\xba\xb9\xb4\x38\xc5\x42\xc9\x90\x7d\xdc\x64\xd7\xce\xc0\x75\x72\x1d\xff\xb1\x66\x6c\xb9\xc9\xf2\xfc\xee\xf2\x26\xb9\x5a\xdd\x2d\xb3\x2f\xb7\xb8\xa7\x6e\x08\xfe\x5c\x5f\xdf\xc4\x9b\xe5\xa7\xc0\x38\x35\x25\xa2\xc1\xe8\xa8\x10\x32\x7a\x96\xf0\xdf\x60\xa6\x80\xfa\x21\x5c\x57\xd0\x54\x09\x83\xb1\x21\xe9\x54\x6b\xbf\x44\x25\x27\x2b\x7f\x09\x17\xe1\x79\xc8\x36\x37\x29\xca\x96\xb8\x0c\x84\x34\x96\xb7\x2d\x46\x67\x45\xc7\xbf\x11\xea\xb2\x44\x2b\x8a\x32\xa8\xe8\xc1\xbb\xc2\x0e\x6b\xd9\xac\xe3\xd5\xf5\x3a\xec\x2a\x5f\xee\x0b\x82\xfb\x0c\x91\x9f\x17\x4c\x9d\x2d\xd7\x61\xfd\x74\x4c\x72\xa5\x46\xd9\x2a\x5e\x85\x1e\x12\x0a\x15\x69\x6a\x89\xbb\x30\xbf\x51\xf4\xee\x1d\xfe\x61\xee\x1d\x38\x5f\x83\xc7\xa7\xdd\x9b\xad\x83\x25\x22\xdb\xf5\x91\x83\xeb\xee\x2d\x88\xe3\xbb\x74\xe2\xa0\x06\x0b\x7a\x14\xc6\x85\xde\xed\xd6\xa0\xa0\x9d\x72\x8e\x4c\xaa\x7d\x42\xd8\xdc\x2d\xcb\x53\x36\x17\x51\x54\x0b\xdb\x0c\x45\x58\xaa\x2e\xe2\xd2\x0a\x4d\x4f\xd3\x88\x48\x18\x33\x90\x89\x3e\x2c\x16\x93\x7d\xd5\xc4\xe3\x64\xbe\xa3\xe4\x2d\x74\x4f\xc6\xdb\xeb\x4f\xbe\x55\x42\x23\xe8\x0f\x54\x9f\x65\x7a\xe8\xd1\xff\x24\xcd\xb7\xf1\xd5\xd5\xdd\x65\x92\xfe\xfe\x0a\xf8\xf0\x6a\xd4\xf4\x1f\x96\x4a\x1e\x5d\x3a\x3d\xf9\x5e\xa9\x3b\x04\x7a\xf7\xaa\x9a\xb1\x78\xb5\x82\x92\x2e\x56\xda\x86\xa6\x41\xc4\x98\x4f\x5d\x4f\xa4\x83\x9d\xf0\x4f\x26\xf2\xa8\x03\xc1\x09\xe4\x85\x37\x9d\xaa\x10\x94\xf8\xf0\xfe\x3d\xa2\xd3\xeb\x17\x0d\x4f\x3a\xb1\x75\xba\xdd\xdc\x7e\xc9\x92\x74\x8b\xbf\x67\x27\x25\xb3\x7f\xd9\xff\x01\x00\x00\xff\xff\xde\x32\xe7\xc3\xd6\x05\x00\x00") - -func testImagesPetsRedisInstallerDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsRedisInstallerDockerfile, - "test/images/pets/redis-installer/Dockerfile", - ) -} - -func testImagesPetsRedisInstallerDockerfile() (*asset, error) { - bytes, err := testImagesPetsRedisInstallerDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/redis-installer/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsRedisInstallerMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x4f\xdc\x30\x14\x84\xcf\xf5\xaf\x18\x6d\x38\x80\xb4\x24\x14\x55\x1c\xa8\x50\x95\xee\x6e\x21\x02\x25\x55\x12\x40\x9c\x90\x93\xbc\x4d\x9e\x94\xb5\x5d\xdb\x69\xd8\x7f\x5f\x79\x01\x09\x54\xdf\xfc\x66\x3c\xfe\x3c\x8e\xb0\xd2\x66\x6f\xb9\x1f\x3c\xce\xcf\xbe\x5e\xa0\x1e\x08\xb7\x53\x43\x56\x91\x27\x87\x74\xf2\x83\xb6\x2e\x16\x91\x88\x70\xc7\x2d\x29\x47\x1d\x26\xd5\x91\x85\x1f\x08\xa9\x91\xed\x40\xef\xca\x12\x0f\x64\x1d\x6b\x85\xf3\xf8\x0c\xc7\xc1\xb0\x78\x93\x16\x27\xdf\x45\x84\xbd\x9e\xb0\x93\x7b\x28\xed\x31\x39\x82\x1f\xd8\x61\xcb\x23\x81\x5e\x5a\x32\x1e\xac\xd0\xea\x9d\x19\x59\xaa\x96\x30\xb3\x1f\x0e\xd7\xbc\x85\xc4\x22\xc2\xd3\x5b\x84\x6e\xbc\x64\x05\x89\x56\x9b\x3d\xf4\xf6\xa3\x0f\xd2\x1f\x80\xc3\x1a\xbc\x37\x97\x49\x32\xcf\x73\x2c\x0f\xb0\xb1\xb6\x7d\x32\xbe\x1a\x5d\x72\x97\xad\x36\x79\xb5\x39\x3d\x8f\xcf\x0e\x47\xee\xd5\x48\xce\xc1\xd2\x9f\x89\x2d\x75\x68\xf6\x90\xc6\x8c\xdc\xca\x66\x24\x8c\x72\x86\xb6\x90\xbd\x25\xea\xe0\x75\xe0\x9d\x2d\x7b\x56\xfd\x12\x4e\x6f\xfd\x2c\x2d\x89\x08\x1d\x3b\x6f\xb9\x99\xfc\xa7\xb2\xde\xe9\xd8\x7d\x32\x68\x05\xa9\xb0\x48\x2b\x64\xd5\x02\x3f\xd3\x2a\xab\x96\x22\xc2\x63\x56\xdf\x14\xf7\x35\x1e\xd3\xb2\x4c\xf3\x3a\xdb\x54\x28\x4a\xac\x8a\x7c\x9d\xd5\x59\x91\x57\x28\x7e\x21\xcd\x9f\x70\x9b\xe5\xeb\x25\x88\xfd\x40\x16\xf4\x62\x6c\xe0\xd7\x16\x1c\x6a\xa4\x2e\x74\x56\x11\x7d\x02\xd8\xea\x57\x20\x67\xa8\xe5\x2d\xb7\x18\xa5\xea\x27\xd9\x13\x7a\xfd\x97\xac\x62\xd5\xc3\x90\xdd\xb1\x0b\x9f\xe9\x20\x55\x27\x22\x8c\xbc\x63\x2f\xfd\x61\xf2\xdf\xa3\x62\x21\xaa\x72\x55\xe1\x0a\x86\xc8\x9e\x6e\x39\x18\x44\x5a\xae\x6e\xf0\xe3\x0a\x72\xd7\x5d\x7c\x13\x75\x5a\x5e\x6f\xea\xb0\x3f\x3a\x5e\xdd\x97\xeb\xac\x3c\x11\xd7\xc5\x5d\x9a\x5f\x3f\x3f\x6c\xca\x2a\x2b\xf2\xa0\x8d\xd2\x93\xf3\x21\xed\x79\x9d\x95\x87\x40\xef\x92\x8f\xa9\xf4\x62\xb4\xf5\x42\x34\xac\x2e\xc5\x97\x38\x4e\xe2\x38\xe1\x9d\xec\xe9\x74\xf2\x3c\xc6\x6e\x40\xc3\x0a\x47\xc7\x01\xe8\x44\x88\xf8\xf7\x4d\x91\x3f\x5d\x86\xa1\xf8\x17\x00\x00\xff\xff\x87\xc5\xa6\xda\xf0\x02\x00\x00") - -func testImagesPetsRedisInstallerMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsRedisInstallerMakefile, - "test/images/pets/redis-installer/Makefile", - ) -} - -func testImagesPetsRedisInstallerMakefile() (*asset, error) { - bytes, err := testImagesPetsRedisInstallerMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/redis-installer/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsRedisInstallerVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe6\x02\x04\x00\x00\xff\xff\x1c\xa7\xbe\x4f\x04\x00\x00\x00") - -func testImagesPetsRedisInstallerVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsRedisInstallerVersion, - "test/images/pets/redis-installer/VERSION", - ) -} - -func testImagesPetsRedisInstallerVersion() (*asset, error) { - bytes, err := testImagesPetsRedisInstallerVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/redis-installer/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsRedisInstallerInstallSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x92\x41\x6f\xe3\x36\x10\x85\xef\xfc\x15\xaf\x52\x0e\xdd\x20\x92\xd2\x14\xe8\xa1\x81\x81\xba\x89\x8b\x0a\x71\x6d\xc0\x72\x12\xec\x69\x41\x4b\x63\x69\x10\x99\x64\x49\x2a\x8a\x91\xe6\xbf\x17\x94\xad\x76\x9d\xb4\x3d\xd4\x27\x8b\x6f\x38\xfc\xe6\xbd\x89\xbf\xc9\x36\xac\xb2\x8d\x74\x8d\x10\x31\x6e\xb4\xd9\x5b\xae\x1b\x8f\xab\xcb\xef\x7e\xc0\xba\x21\xdc\x75\x1b\xb2\x8a\x3c\x39\x4c\x3b\xdf\x68\xeb\x52\x11\x8b\x18\x73\x2e\x49\x39\xaa\xd0\xa9\x8a\x2c\x7c\x43\x98\x1a\x59\x36\x34\x2a\x17\x78\x20\xeb\x58\x2b\x5c\xa5\x97\xf8\x36\x14\x44\x47\x29\xfa\x74\x2d\x62\xec\x75\x87\x9d\xdc\x43\x69\x8f\xce\x11\x7c\xc3\x0e\x5b\x6e\x09\xf4\x52\x92\xf1\x60\x85\x52\xef\x4c\xcb\x52\x95\x84\x9e\x7d\x33\x3c\x73\x6c\x92\x8a\x18\x9f\x8f\x2d\xf4\xc6\x4b\x56\x90\x28\xb5\xd9\x43\x6f\xbf\xae\x83\xf4\x03\x70\xf8\x35\xde\x9b\x1f\xb3\xac\xef\xfb\x54\x0e\xb0\xa9\xb6\x75\xd6\x1e\x0a\x5d\x36\xcf\x6f\x66\x8b\x62\x96\x5c\xa5\x97\xc3\x95\x7b\xd5\x92\x73\xb0\xf4\x7b\xc7\x96\x2a\x6c\xf6\x90\xc6\xb4\x5c\xca\x4d\x4b\x68\x65\x0f\x6d\x21\x6b\x4b\x54\xc1\xeb\xc0\xdb\x5b\xf6\xac\xea\x0b\x38\xbd\xf5\xbd\xb4\x24\x62\x54\xec\xbc\xe5\x4d\xe7\x4f\xcc\x1a\xe9\xd8\x9d\x14\x68\x05\xa9\x10\x4d\x0b\xe4\x45\x84\x9f\xa7\x45\x5e\x5c\x88\x18\x8f\xf9\xfa\xd7\xe5\xfd\x1a\x8f\xd3\xd5\x6a\xba\x58\xe7\xb3\x02\xcb\x15\x6e\x96\x8b\xdb\x7c\x9d\x2f\x17\x05\x96\xbf\x60\xba\xf8\x8c\xbb\x7c\x71\x7b\x01\x62\xdf\x90\x05\xbd\x18\x1b\xf8\xb5\x05\x07\x1b\xa9\x0a\x9e\x15\x44\x27\x00\x5b\x7d\x00\x72\x86\x4a\xde\x72\x89\x56\xaa\xba\x93\x35\xa1\xd6\xcf\x64\x15\xab\x1a\x86\xec\x8e\x5d\x08\xd3\x41\xaa\x4a\xc4\x68\x79\xc7\x5e\xfa\xe1\xe4\xc3\x50\x69\xd8\xa5\x75\x88\xf3\x59\xb7\xdd\x6e\x18\x52\x3a\xd7\xed\x0e\x3e\xd1\x0b\x3b\x1f\xfa\x84\x73\xd7\xc8\x60\xed\x90\xae\x91\x96\x94\x1f\xf3\x63\xc5\x5e\xc4\x28\xb5\x0a\xe1\x92\x4d\x91\xfb\xf1\xcb\x0d\x15\x96\x2a\x76\x60\xe5\xbc\x6c\xdb\x01\x26\x15\xf9\xa2\x58\x4f\xe7\xf3\x2f\x0f\xcb\xf9\xfd\x6f\xb3\x49\x94\x69\xe3\xa3\xff\xc9\x13\xde\x30\x44\x36\xd9\x72\x18\x51\xc4\x03\xd3\xbf\x11\x69\x95\x38\x2f\xad\xcf\xca\x46\xaa\x9a\x82\xb0\xe5\xba\xb3\x03\x18\x5c\x69\xd9\x78\x97\x8a\xc7\xe5\xea\xee\xcb\x6d\xbe\x9a\x44\x59\xaf\xed\x53\x52\xb1\x8d\x84\x78\x98\xad\x8a\x7c\xb9\x98\x44\xdf\xa7\x57\xe9\x65\x24\x44\x88\x85\xc3\x4a\x45\x67\x3f\x45\xa2\xd2\xa2\x94\x8e\x70\x16\x8e\x44\x58\xe5\x84\x27\xe7\x7f\x24\xc9\x71\xf8\x84\x95\xd7\x93\xf3\x4f\x83\xf4\xde\x82\xb3\x57\x8e\xcf\x27\x6f\xd1\x20\xba\x86\xb7\x7e\xf8\x77\x7d\x7d\x68\xd4\x0f\x8d\x46\x96\xb1\xc9\xdf\x98\xff\x7d\xfd\x58\x1e\xa3\x53\x4f\x4a\xf7\x0a\xda\x84\x79\xc7\x12\x72\xb2\x14\x95\x56\x24\x04\x95\x8d\x1e\xc3\x0a\x4b\x75\xf0\x67\x34\x06\x61\x02\x44\x67\xaf\xe3\xc3\x6f\x91\xd8\x3d\x55\x6c\x91\x98\x77\xc7\xa5\x41\x36\x9a\x9d\xba\xe6\x54\xcd\x06\xf9\xab\xd4\xde\xcb\x1f\x38\x86\x2d\x4a\xa2\xb3\xd7\x63\x06\x6f\xd1\x5f\x2c\xa7\x4e\xbe\x23\xfa\x28\x3e\x23\x3b\xac\xe4\x3f\xa8\x07\x45\xfc\x19\x00\x00\xff\xff\xce\xa7\x2e\xcb\x71\x05\x00\x00") - -func testImagesPetsRedisInstallerInstallShBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsRedisInstallerInstallSh, - "test/images/pets/redis-installer/install.sh", - ) -} - -func testImagesPetsRedisInstallerInstallSh() (*asset, error) { - bytes, err := testImagesPetsRedisInstallerInstallShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/redis-installer/install.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsRedisInstallerOnStartSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x54\x71\x6f\xdb\xb6\x17\xfc\x9f\x9f\xe2\x7e\x92\x81\xb4\x81\x2d\xf7\xd7\x01\x1d\xd6\xc2\x18\xbc\xc4\x6d\x8d\xb6\x76\x10\xbb\x2b\x8a\xae\x03\x68\xe9\x49\xe2\x40\x93\x1a\x49\x59\x15\x92\x7c\xf7\xe1\x51\xf6\x96\xa4\x9b\xff\xb0\x2d\x8a\x8f\xef\xee\xde\xf1\xd2\xff\x4d\x5b\xef\xa6\x3b\x65\xa6\x64\x0e\xd8\x49\x5f\x0b\x91\xe2\xc2\x36\xbd\x53\x55\x1d\xf0\xfc\xd9\xff\x5f\x60\x5b\x13\xde\xb5\x3b\x72\x86\x02\x79\xcc\xdb\x50\x5b\xe7\x33\x91\x8a\x14\xef\x55\x4e\xc6\x53\x81\xd6\x14\xe4\x10\x6a\xc2\xbc\x91\x79\x4d\xa7\x37\x63\xfc\x4a\xce\x2b\x6b\xf0\x3c\x7b\x86\x27\xbc\x21\x39\xbe\x4a\x9e\xbe\x12\x29\x7a\xdb\x62\x2f\x7b\x18\x1b\xd0\x7a\x42\xa8\x95\x47\xa9\x34\x81\xbe\xe5\xd4\x04\x28\x83\xdc\xee\x1b\xad\xa4\xc9\x09\x9d\x0a\x75\x6c\x73\x3c\x24\x13\x29\x3e\x1f\x8f\xb0\xbb\x20\x95\x81\x44\x6e\x9b\x1e\xb6\xbc\xbf\x0f\x32\x44\xc0\xfc\xa9\x43\x68\x5e\x4e\xa7\x5d\xd7\x65\x32\x82\xcd\xac\xab\xa6\x7a\xd8\xe8\xa7\xef\x97\x17\x8b\xd5\x66\x31\x79\x9e\x3d\x8b\x25\x1f\x8d\x26\xef\xe1\xe8\xcf\x56\x39\x2a\xb0\xeb\x21\x9b\x46\xab\x5c\xee\x34\x41\xcb\x0e\xd6\x41\x56\x8e\xa8\x40\xb0\x8c\xb7\x73\x2a\x28\x53\x8d\xe1\x6d\x19\x3a\xe9\x48\xa4\x28\x94\x0f\x4e\xed\xda\xf0\x40\xac\x13\x3a\xe5\x1f\x6c\xb0\x06\xd2\x20\x99\x6f\xb0\xdc\x24\xf8\x65\xbe\x59\x6e\xc6\x22\xc5\xa7\xe5\xf6\xed\xfa\xe3\x16\x9f\xe6\xd7\xd7\xf3\xd5\x76\xb9\xd8\x60\x7d\x8d\x8b\xf5\xea\x72\xb9\x5d\xae\x57\x1b\xac\x5f\x63\xbe\xfa\x8c\x77\xcb\xd5\xe5\x18\xa4\x42\x4d\x0e\xf4\xad\x71\x8c\xdf\x3a\x28\x96\x91\x0a\xd6\x6c\x43\xf4\x00\x40\x69\x07\x40\xbe\xa1\x5c\x95\x2a\x87\x96\xa6\x6a\x65\x45\xa8\xec\x81\x9c\x51\xa6\x42\x43\x6e\xaf\x3c\x0f\xd3\x43\x9a\x42\xa4\xd0\x6a\xaf\x82\x0c\x71\xe5\x3b\x52\x99\x10\x9e\x02\x26\x24\xc4\xc5\xeb\x37\xb3\xa9\x6d\xc2\xd4\x51\xa1\xfc\xf0\x9d\xe5\xd6\x94\xe2\xed\x7a\xb3\x5d\xcd\x3f\x2c\x66\xa3\x27\xb5\xf5\xc1\xc8\x3d\x3d\x15\x97\xf3\xed\xfc\x72\x79\x3d\x4b\xa6\x85\x0c\x32\x11\x29\xae\xac\x0b\xac\x4a\x57\xab\xbc\x46\xac\x87\x56\x3e\x90\xf1\x11\x7a\x6e\x8d\xa1\x3c\x02\xc9\xc4\xd5\xfa\x7a\x3b\x7b\xf1\xc3\x8f\x3f\xb1\x99\xaf\x18\x39\x1d\xc8\xf5\xd6\x10\x76\x6d\x80\x6d\x9d\x27\x5d\xf2\xac\x3c\x11\x54\xf4\x89\xa3\x33\x0f\x89\xbd\xf4\x81\x5c\x86\xb5\xd1\x3d\xb8\xa0\xa1\x00\x1f\xa4\x0b\x3e\x3a\x08\x12\x41\xed\x89\x27\xcb\x85\x1d\xa1\xb0\xe6\x2c\xc4\x83\x4e\xd5\xbc\x9a\x4b\x03\xe9\x7d\xbb\x1f\x54\x6e\xac\x57\x0c\x8e\xe7\xcc\xed\x33\xd1\xd5\x6c\x71\x47\xb2\xc0\xc4\x49\xbc\x5f\xae\x16\xaf\x50\x58\xc1\xfe\x54\x25\xbe\x7c\x41\x32\xba\xe1\xd5\xbb\x04\xb3\x19\xce\x93\xd1\xcd\x49\xaa\xbb\xe4\x1c\x5f\xbf\xbe\xe2\x83\x4d\xdc\xcf\x1f\xbe\x83\x13\x85\x09\x21\xf1\xb7\xbf\xef\x94\x29\xb2\xf3\xd1\x2d\xff\xe2\x78\xce\x6d\x82\xd1\xcd\xc5\xeb\x37\x77\xb1\x86\x34\x77\x41\x32\x7a\xf2\x78\x2e\x93\x5c\x2b\x4c\x6a\x8c\xb8\x0a\xca\x94\x16\xb7\xa8\x1c\x35\x70\x56\x13\x6e\x63\xab\x33\x3f\xfe\xcd\x8d\xc6\xe3\xb3\xa7\x09\x66\x48\xf8\xcd\xcb\x81\x7d\x82\xc7\xd0\x52\x6c\xd7\x97\xeb\x97\xf8\x60\x1d\x33\x66\x97\xe7\x41\x1d\xf8\x7f\x45\xdf\x7e\xfe\x0f\x0a\x29\xbc\x96\x07\xb2\x25\xf3\x38\xfe\x3d\x51\xc1\xe8\x86\x67\xfc\x88\x52\xa9\x44\x61\x0d\x89\xe8\xee\x10\x75\x67\xfb\xa0\x50\x8e\xf2\x60\x5d\x1f\x9d\x22\x9b\x86\x0c\xdf\x30\xdd\x43\xdb\x8a\x8d\x0c\x6f\x64\xe3\x6b\x1b\x62\xee\xf8\x0c\x5b\xce\x20\x5f\xdb\x56\xb3\xc9\x77\x3c\xda\x86\x53\x8c\xfd\x16\x70\xb0\x9a\xe7\x7a\xb4\xdd\xb0\x9a\xf7\x99\x78\x88\x3f\x3b\x2f\x94\x03\x83\xe7\xdf\xd1\xcd\xd1\xd3\xf7\x30\x8b\x34\x46\xeb\x63\x40\xca\xc7\xfc\x08\x64\x62\x8b\x68\x5d\x6c\x16\x5b\xd8\x86\x5c\xbc\x6b\x19\x3e\xa9\x50\xdb\x36\x0c\x61\xe9\x29\xc4\xb4\x11\xe9\xf1\x62\xfc\xd1\xfa\xf0\x37\x27\xcf\xd0\x95\x2d\x54\x2e\xb5\xee\x8f\x17\x88\x6d\xc8\xfd\xbc\x2c\x07\x22\x12\x79\x0c\xc2\x81\x7a\xa7\xb4\x16\x29\x1a\x67\x8b\x36\x27\x8e\xa2\x01\x24\xd7\x64\xd2\x96\x43\x3e\x2b\x13\x35\xe6\x6b\xac\xaa\x96\x93\xf1\x24\xf7\x63\x2d\xfe\xa9\x8e\x82\xdc\x7b\xec\xc9\x3f\x10\x64\x11\xd9\x32\x7f\x42\x70\xaa\xaa\xc8\x71\xd6\xa0\xf4\xbd\xc9\x33\x5c\x53\x6e\xf7\x7b\x32\x05\x37\xa3\x52\xb6\x3a\x30\x97\x24\x8a\xe4\x29\x4f\xc6\x03\x41\x91\x7e\x4f\x71\x7e\x75\x8a\xed\x63\x4c\xfc\x1b\xc6\xd8\xe7\x1e\xc8\xe1\x59\xea\x4e\xf6\xf7\x81\x8a\xbf\x02\x00\x00\xff\xff\x87\x36\x00\xd3\x3a\x07\x00\x00") - -func testImagesPetsRedisInstallerOnStartShBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsRedisInstallerOnStartSh, - "test/images/pets/redis-installer/on-start.sh", - ) -} - -func testImagesPetsRedisInstallerOnStartSh() (*asset, error) { - bytes, err := testImagesPetsRedisInstallerOnStartShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/redis-installer/on-start.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsZookeeperInstallerBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\xcd\xb6\x28\xd6\x4b\x4f\x2e\xd2\xcb\xcc\xd7\x4f\x49\x4d\xca\x4c\xcc\xd3\x4d\x4a\x2c\x4e\xd5\x05\x4b\x5a\x19\xe8\x99\xe8\x19\x72\x25\x16\xe5\xe2\x54\x56\x94\x8b\x50\x84\xc7\x34\x90\x24\x54\x61\x41\x41\xb2\x99\x49\x4e\x2a\x2e\xa5\x50\x69\xa8\x62\x40\x00\x00\x00\xff\xff\xa7\xc3\x7f\x2e\xa4\x00\x00\x00") - -func testImagesPetsZookeeperInstallerBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsZookeeperInstallerBaseimage, - "test/images/pets/zookeeper-installer/BASEIMAGE", - ) -} - -func testImagesPetsZookeeperInstallerBaseimage() (*asset, error) { - bytes, err := testImagesPetsZookeeperInstallerBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsZookeeperInstallerDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\x51\x6f\xdb\x36\x14\x85\xdf\xf9\x2b\x0e\x2c\xa0\xdb\x80\x48\xca\x32\x64\x03\xba\x27\xd5\x56\x57\xa1\x89\xd4\x49\xf6\x8a\x60\x1b\x0a\x4a\xba\x96\x88\x49\x24\x43\x52\x51\x9c\x5f\x3f\x50\x76\x50\x07\x2b\x32\x3f\x19\xe4\x3d\x87\xe7\x7e\xf7\x2a\xc0\x5a\xe9\x83\x11\x5d\xef\x70\x75\xf9\xe3\xcf\xd8\xf6\x84\x8f\x53\x4d\x46\x92\x23\x8b\x64\x72\xbd\x32\x36\x62\x01\x0b\x70\x23\x1a\x92\x96\x5a\x4c\xb2\x25\x03\xd7\x13\x12\xcd\x9b\x9e\x9e\x6f\x2e\xf0\x07\x19\x2b\x94\xc4\x55\x74\x89\xef\x7d\xc1\xea\x74\xb5\xfa\xe1\x57\x16\xe0\xa0\x26\x8c\xfc\x00\xa9\x1c\x26\x4b\x70\xbd\xb0\xd8\x8b\x81\x40\x8f\x0d\x69\x07\x21\xd1\xa8\x51\x0f\x82\xcb\x86\x30\x0b\xd7\x2f\xcf\x9c\x4c\x22\x16\xe0\xee\x64\xa1\x6a\xc7\x85\x04\x47\xa3\xf4\x01\x6a\x7f\x5e\x07\xee\x96\xc0\xfe\xd7\x3b\xa7\xdf\xc6\xf1\x3c\xcf\x11\x5f\xc2\x46\xca\x74\xf1\x70\x2c\xb4\xf1\x4d\xb6\x4e\xf3\x2a\x0d\xaf\xa2\xcb\x45\xb2\x93\x03\x59\x0b\x43\xf7\x93\x30\xd4\xa2\x3e\x80\x6b\x3d\x88\x86\xd7\x03\x61\xe0\x33\x94\x01\xef\x0c\x51\x0b\xa7\x7c\xde\xd9\x08\x27\x64\x77\x01\xab\xf6\x6e\xe6\x86\x58\x80\x56\x58\x67\x44\x3d\xb9\x17\xb0\x9e\xd3\x09\xfb\xa2\x40\x49\x70\x89\x55\x52\x21\xab\x56\x78\x97\x54\x59\x75\xc1\x02\x7c\xce\xb6\x1f\x8a\xdd\x16\x9f\x93\xb2\x4c\xf2\x6d\x96\x56\x28\x4a\xac\x8b\x7c\x93\x6d\xb3\x22\xaf\x50\xbc\x47\x92\xdf\xe1\x63\x96\x6f\x2e\x40\xc2\xf5\x64\x40\x8f\xda\xf8\xfc\xca\x40\x78\x8c\xd4\x7a\x66\x15\xd1\x8b\x00\x7b\x75\x0c\x64\x35\x35\x62\x2f\x1a\x0c\x5c\x76\x13\xef\x08\x9d\x7a\x20\x23\x85\xec\xa0\xc9\x8c\xc2\xfa\x61\x5a\x70\xd9\xb2\x00\x83\x18\x85\xe3\x6e\x39\xf9\x4f\x53\x11\x63\x01\xb6\xc5\xa6\x78\x8b\x8e\x1c\x8c\x68\xfd\x4c\x6a\x6e\x7b\xb4\xa4\x49\xb6\x24\x9b\x83\x37\x82\x9d\x85\x6b\x7a\x0f\x4f\x0f\x7e\x82\xf5\x64\x0f\xb5\x7a\xf4\x39\xfd\xf2\x39\x6e\xf0\xf5\x14\x7c\xb0\x0a\xad\x22\x2b\xbf\x73\xb0\x44\xa3\x17\x2e\xaf\x5b\xe7\xdd\xfc\xb6\xf8\x8e\x85\x92\x11\x7b\x5f\x16\xb7\x1e\x60\x9a\xdd\x26\xbf\xa5\x8c\xad\xcb\xa2\xaa\xbe\xbc\xdb\x65\x37\x9b\x2f\xeb\xe2\xd3\x1d\xee\x69\x9c\xc2\xdf\xd3\xdb\x5d\x52\xae\x3f\x84\xd6\x77\xd3\x20\x9e\xac\x89\x6b\x21\x63\xc6\xca\x5d\x8e\x66\x20\x2e\x43\x21\xad\xe3\xc3\x80\xd9\x77\xb3\xb4\x21\xc9\x35\xdc\x31\x96\x6c\x36\x50\xd2\x8b\x8d\x8b\x6c\x8f\x98\xb1\xc5\x5b\x13\x99\x70\x2f\x16\x30\x31\x3b\x51\x2f\xd3\x64\x73\x9b\x46\x63\xbb\x58\x2f\x66\xe1\x3d\xc2\x02\xf1\x93\x52\xff\x10\x69\x32\xe1\x4f\xd1\x75\x74\x19\xf2\x41\xf7\x3c\x72\xdc\x44\xdd\xd3\xf3\xd2\x72\xd3\xf4\xe2\x81\xce\x17\xd7\x2f\xce\x57\xed\xb7\x5d\x5e\xf7\x7e\xf3\x06\x7f\x31\xff\x65\x78\xd2\xe1\xe3\xd3\xfe\x7f\xb2\x84\x6b\xc4\x6e\xd4\xb1\x17\x8e\x0f\xc7\xff\xdf\x14\x9c\xf9\xf8\x5a\x33\xbe\x6e\x7c\x24\x79\xe2\x7c\x04\xb9\xe0\xef\x47\xd5\x22\x6c\xf0\xcb\xf5\x35\xe2\xf3\xeb\x17\xd0\xcf\x68\xb3\x34\xdf\x96\x77\x9f\x8a\x2c\xdf\xe2\xcf\xd5\x99\x64\xf5\x37\xfb\x37\x00\x00\xff\xff\x8c\xf2\x2f\xf3\xe0\x04\x00\x00") - -func testImagesPetsZookeeperInstallerDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsZookeeperInstallerDockerfile, - "test/images/pets/zookeeper-installer/Dockerfile", - ) -} - -func testImagesPetsZookeeperInstallerDockerfile() (*asset, error) { - bytes, err := testImagesPetsZookeeperInstallerDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsZookeeperInstallerMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x4f\xdc\x30\x14\x84\xcf\xf5\xaf\x18\x6d\x38\x80\xb4\x24\x14\x55\x1c\xa8\x50\x95\xee\x6e\x21\x02\x25\x55\x12\x40\x9c\x90\x93\xbc\x4d\x9e\x94\xb5\x5d\xdb\x69\xd8\x7f\x5f\x79\x01\x09\x54\xdf\xfc\x66\x3c\xfe\x3c\x8e\xb0\xd2\x66\x6f\xb9\x1f\x3c\xce\xcf\xbe\x5e\xa0\x1e\x08\xb7\x53\x43\x56\x91\x27\x87\x74\xf2\x83\xb6\x2e\x16\x91\x88\x70\xc7\x2d\x29\x47\x1d\x26\xd5\x91\x85\x1f\x08\xa9\x91\xed\x40\xef\xca\x12\x0f\x64\x1d\x6b\x85\xf3\xf8\x0c\xc7\xc1\xb0\x78\x93\x16\x27\xdf\x45\x84\xbd\x9e\xb0\x93\x7b\x28\xed\x31\x39\x82\x1f\xd8\x61\xcb\x23\x81\x5e\x5a\x32\x1e\xac\xd0\xea\x9d\x19\x59\xaa\x96\x30\xb3\x1f\x0e\xd7\xbc\x85\xc4\x22\xc2\xd3\x5b\x84\x6e\xbc\x64\x05\x89\x56\x9b\x3d\xf4\xf6\xa3\x0f\xd2\x1f\x80\xc3\x1a\xbc\x37\x97\x49\x32\xcf\x73\x2c\x0f\xb0\xb1\xb6\x7d\x32\xbe\x1a\x5d\x72\x97\xad\x36\x79\xb5\x39\x3d\x8f\xcf\x0e\x47\xee\xd5\x48\xce\xc1\xd2\x9f\x89\x2d\x75\x68\xf6\x90\xc6\x8c\xdc\xca\x66\x24\x8c\x72\x86\xb6\x90\xbd\x25\xea\xe0\x75\xe0\x9d\x2d\x7b\x56\xfd\x12\x4e\x6f\xfd\x2c\x2d\x89\x08\x1d\x3b\x6f\xb9\x99\xfc\xa7\xb2\xde\xe9\xd8\x7d\x32\x68\x05\xa9\xb0\x48\x2b\x64\xd5\x02\x3f\xd3\x2a\xab\x96\x22\xc2\x63\x56\xdf\x14\xf7\x35\x1e\xd3\xb2\x4c\xf3\x3a\xdb\x54\x28\x4a\xac\x8a\x7c\x9d\xd5\x59\x91\x57\x28\x7e\x21\xcd\x9f\x70\x9b\xe5\xeb\x25\x88\xfd\x40\x16\xf4\x62\x6c\xe0\xd7\x16\x1c\x6a\xa4\x2e\x74\x56\x11\x7d\x02\xd8\xea\x57\x20\x67\xa8\xe5\x2d\xb7\x18\xa5\xea\x27\xd9\x13\x7a\xfd\x97\xac\x62\xd5\xc3\x90\xdd\xb1\x0b\x9f\xe9\x20\x55\x27\x22\x8c\xbc\x63\x2f\xfd\x61\xf2\xdf\xa3\x62\x21\xaa\x72\x55\xe1\x0a\x86\xc8\x9e\x6e\x39\x18\x44\x5a\xae\x6e\xf0\xe3\x0a\x72\xd7\x5d\x7c\x13\x75\x5a\x5e\x6f\xea\xb0\x3f\x3a\x5e\xdd\x97\xeb\xac\x3c\x11\xd7\xc5\x5d\x9a\x5f\x3f\x3f\x6c\xca\x2a\x2b\xf2\xa0\x8d\xd2\x93\xf3\x21\xed\x79\x9d\x95\x87\x40\xef\x92\x8f\xa9\xf4\x62\xb4\xf5\x42\x34\xac\x2e\xc5\x97\x38\x4e\xe2\x38\xe1\x9d\xec\xe9\x74\xf2\x3c\xc6\x6e\x40\xc3\x0a\x47\xc7\x01\xe8\x44\x88\xf8\xf7\x4d\x91\x3f\x5d\x86\xa1\xf8\x17\x00\x00\xff\xff\x87\xc5\xa6\xda\xf0\x02\x00\x00") - -func testImagesPetsZookeeperInstallerMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsZookeeperInstallerMakefile, - "test/images/pets/zookeeper-installer/Makefile", - ) -} - -func testImagesPetsZookeeperInstallerMakefile() (*asset, error) { - bytes, err := testImagesPetsZookeeperInstallerMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsZookeeperInstallerVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe6\x02\x04\x00\x00\xff\xff\x1c\xa7\xbe\x4f\x04\x00\x00\x00") - -func testImagesPetsZookeeperInstallerVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsZookeeperInstallerVersion, - "test/images/pets/zookeeper-installer/VERSION", - ) -} - -func testImagesPetsZookeeperInstallerVersion() (*asset, error) { - bytes, err := testImagesPetsZookeeperInstallerVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsZookeeperInstallerInstallSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x55\x5f\x6f\xdb\xc6\x13\x7c\xbf\x4f\x31\x21\xf5\x10\x07\x22\xe5\xe4\x97\x5f\x51\xc4\x51\x5a\xd5\x56\x50\x22\xae\x04\x88\x4a\x82\x20\x08\x82\x13\xb9\x14\xb7\xa6\xee\xd8\xbb\xa3\x68\xd7\xf5\x77\x2f\x8e\x92\x6c\xcb\x7f\x82\xa4\x7a\x12\xb9\x73\xbb\x73\x33\xbb\xcb\xf0\x09\x06\x0b\x56\x83\x85\xb4\xa5\x10\x21\x8e\x75\x7d\x61\x78\x59\x3a\xbc\x38\x7c\xfe\x13\xe6\x25\xe1\x5d\xb3\x20\xa3\xc8\x91\xc5\xa8\x71\xa5\x36\x36\x16\xa1\x08\x71\xca\x19\x29\x4b\x39\x1a\x95\x93\x81\x2b\x09\xa3\x5a\x66\x25\xed\x22\x7d\x7c\x20\x63\x59\x2b\xbc\x88\x0f\xf1\xd4\x03\x82\x6d\x28\x38\x38\x12\x21\x2e\x74\x83\x95\xbc\x80\xd2\x0e\x8d\x25\xb8\x92\x2d\x0a\xae\x08\x74\x9e\x51\xed\xc0\x0a\x99\x5e\xd5\x15\x4b\x95\x11\x5a\x76\x65\x57\x66\x9b\x24\x16\x21\x3e\x6d\x53\xe8\x85\x93\xac\x20\x91\xe9\xfa\x02\xba\xb8\x8d\x83\x74\x1d\x61\xff\x2b\x9d\xab\x5f\x0d\x06\x6d\xdb\xc6\xb2\x23\x1b\x6b\xb3\x1c\x54\x1b\xa0\x1d\x9c\x26\xc7\xe3\x49\x3a\x8e\x5e\xc4\x87\xdd\x91\xf7\xaa\x22\x6b\x61\xe8\xaf\x86\x0d\xe5\x58\x5c\x40\xd6\x75\xc5\x99\x5c\x54\x84\x4a\xb6\xd0\x06\x72\x69\x88\x72\x38\xed\xf9\xb6\x86\x1d\xab\x65\x1f\x56\x17\xae\x95\x86\x44\x88\x9c\xad\x33\xbc\x68\xdc\x9e\x58\x3b\x76\x6c\xf7\x00\x5a\x41\x2a\x04\xa3\x14\x49\x1a\xe0\xb7\x51\x9a\xa4\x7d\x11\xe2\x63\x32\xff\x7d\xfa\x7e\x8e\x8f\xa3\xd9\x6c\x34\x99\x27\xe3\x14\xd3\x19\x8e\xa7\x93\x93\x64\x9e\x4c\x27\x29\xa6\x6f\x31\x9a\x7c\xc2\xbb\x64\x72\xd2\x07\xb1\x2b\xc9\x80\xce\x6b\xe3\xf9\x6b\x03\xf6\x32\x52\xee\x35\x4b\x89\xf6\x08\x14\x7a\x43\xc8\xd6\x94\x71\xc1\x19\x2a\xa9\x96\x8d\x5c\x12\x96\x7a\x4d\x46\xb1\x5a\xa2\x26\xb3\x62\xeb\xcd\xb4\x90\x2a\x17\x21\x2a\x5e\xb1\x93\xae\x7b\x73\xef\x52\xb1\xef\xa5\xb9\xb7\x73\xad\xab\x66\xd5\x5d\x52\x5a\xdb\xac\x36\x3a\xd1\x39\x5b\xe7\xf3\xf8\xf7\xb6\x94\x5e\xda\xce\xdd\x5a\x1a\x52\x6e\xe7\x1f\x2b\x76\x22\x44\xa6\x95\x37\x97\x4c\x8c\xc4\xed\x9e\x6c\x87\xf8\x5b\xeb\x33\xa2\x9a\x0c\x58\x59\x27\xab\xaa\x23\x14\x8b\x64\x92\xce\x47\xa7\xa7\x5f\x3f\x4c\x4f\xdf\xff\x31\x1e\x06\x03\x5d\xbb\xe0\x3f\x72\xf2\x75\x6a\x22\x13\x15\xec\xaf\x29\xc2\x8e\xd7\x63\xac\xb4\x8a\xac\x93\xc6\x0d\xb2\x52\xaa\x25\xf9\x40\xc1\xcb\xc6\x74\xc4\x60\x33\xc3\xb5\xb3\xb1\xf8\x38\x9d\xbd\x3b\x49\x66\x37\x04\x5b\x6d\xce\xa2\x9c\x4d\xc7\x72\x64\xbd\x04\xa3\xda\x70\x15\x75\x73\xc8\x16\xff\x8b\x5f\xc6\x3f\xfb\x3f\x9e\x4f\x25\x1d\x59\x07\xeb\x7c\x1f\xf6\xb1\x68\x1c\xd6\x9b\x59\xf3\xc0\xff\xc7\x87\xd0\xaa\x95\xc6\xfb\x24\xab\x4a\xb7\xc8\x2f\x94\x5c\x71\x06\x43\x7b\x84\x62\xf1\x61\x3c\x4b\x93\xe9\x64\x18\x74\xc7\x22\x59\xd5\xa5\x0c\x84\xf0\x3d\xc1\xbe\x9f\x83\xde\xaf\x81\xc8\xb5\xc8\xa4\x25\xf4\xfc\x2b\xe1\xe7\x28\xe2\xe1\xb3\x7f\xa2\x68\xab\x7a\xc4\xca\xe9\xe1\xb3\x83\x2e\x74\x57\xfb\xde\x25\x87\xcf\x86\x57\x41\x17\xb4\x25\x17\xae\xfb\x77\x74\xb4\x49\xd4\x76\x89\x76\xd7\xdf\x25\xb9\xab\xcf\xb7\x93\x6c\x0f\x85\x68\xd4\x99\xd2\xad\x82\xae\xfd\xed\x76\x10\xb2\x32\x13\xb9\x56\x24\x04\x65\xa5\xde\xf5\x8a\xef\xeb\x8d\x1a\x3b\x5f\xe0\xef\x81\xa0\x77\xb9\x5f\xfe\x2a\x10\xab\xb3\x9c\x0d\xa2\xfa\xc1\x60\x56\x63\xb0\xf3\x3d\xb6\xe5\x43\x98\x41\x07\xba\xd5\x46\x0f\x83\xee\xf1\xbb\x6e\xf0\x28\xe8\x5d\x6e\xbd\xba\x0a\xae\x79\xee\x6b\x7d\x87\xe7\xfd\xe0\x1a\x83\x9b\x89\x79\x00\x71\x13\xf5\x74\xbf\x09\x18\x78\xe5\xfc\xe3\x57\x2b\x57\x75\x45\x71\x56\x2c\xbf\xf3\x84\x87\x76\xb3\x38\x3d\x99\xbe\x42\x5a\xea\xa6\xca\xaf\x1b\x74\x6b\xc8\x82\xe0\x78\x33\x98\xbe\xdf\xb7\xcd\xfd\x8b\x48\xde\xa6\xc3\x20\x0e\x60\x48\xe6\x88\x8c\xc4\x6c\x7c\x3a\x1e\xa5\x63\xbc\x7e\xfd\x1a\xb7\x25\x12\x5c\xe0\x33\x7a\x4f\xfd\x0a\xf4\x81\x2d\xee\xf3\xf3\x2f\x57\xc1\x01\xa2\xa5\xc3\x4b\x7c\x39\xf2\xc9\x37\x6d\xd2\x09\xff\x88\xda\xb6\xa9\x6b\x6d\x9c\x7d\x6c\x8a\xfa\x20\x25\x17\x9d\x5f\xec\x6e\xb2\x05\xd6\x49\x95\xcb\x4a\x2b\x1a\xfb\x38\xe5\xc3\x42\x56\x96\x02\xbc\x79\xf3\x23\x52\xdd\x24\xdc\xd6\x3f\xee\x8a\xbf\xe5\x8a\x86\xdf\x9f\x26\xde\x1e\xfe\xd1\xea\x05\xdf\x78\xd5\x6d\x4f\xbf\x36\x51\xca\xec\xac\x0f\x45\x2e\x93\xce\xbf\xc9\xb4\x5a\x93\x62\xbf\xbc\x9d\x46\x29\xd7\x7e\x7b\xdf\x59\xd1\xd7\x1b\x53\x84\x48\xd0\xca\x0d\x56\xae\x35\xe7\x68\xac\x57\x4f\x22\x6b\xac\xd3\xab\xdb\x7b\x7d\xe5\x3f\x44\x7f\x36\xd6\x6d\xbf\x53\x6c\x63\xa4\x7a\xf3\x9d\x67\x17\x8b\xc9\xf1\xb0\xf7\xb4\x2d\x39\x2b\xa1\xb2\x83\x8d\xed\x41\xef\x72\x72\x7c\x15\xe0\xc9\x10\x41\x70\xdf\x66\x7f\xd6\x97\x53\xd9\xe3\x83\xe4\xc1\x9b\x19\xe8\x32\x3d\x04\x29\x58\xfc\x1b\x00\x00\xff\xff\xe4\x56\x7f\xab\x3f\x09\x00\x00") - -func testImagesPetsZookeeperInstallerInstallShBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsZookeeperInstallerInstallSh, - "test/images/pets/zookeeper-installer/install.sh", - ) -} - -func testImagesPetsZookeeperInstallerInstallSh() (*asset, error) { - bytes, err := testImagesPetsZookeeperInstallerInstallShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/install.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPetsZookeeperInstallerOnStartSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\x7f\x6f\xdb\x38\x12\xfd\x5f\x9f\xe2\xad\x6c\xa0\x3f\x2e\x96\x93\xf4\xee\x10\xb8\x75\x70\x6e\xe2\xee\x1a\x6d\x93\x45\x9c\x6e\x51\x14\x41\x41\x4b\x63\x8b\x5b\x8a\x54\x49\x2a\xaa\x9b\xf5\x77\x3f\x0c\x25\xd9\x4e\x6e\xbb\x87\x05\x9a\xfc\x63\x49\xe4\x70\xe6\xcd\x9b\x37\xc3\xde\x4f\x18\x2e\xa4\x1e\x2e\x84\xcb\xa3\xa8\x87\x33\x53\xae\xad\x5c\xe5\x1e\xc7\x87\x47\xff\xc6\x75\x4e\x78\x5d\x2d\xc8\x6a\xf2\xe4\x30\xa9\x7c\x6e\xac\x4b\xa2\x5e\xd4\xc3\x1b\x99\x92\x76\x94\xa1\xd2\x19\x59\xf8\x9c\x30\x29\x45\x9a\x53\xf7\xe5\x00\xbf\x91\x75\xd2\x68\x1c\x27\x87\x78\xcc\x0b\xe2\xf6\x53\xfc\xe4\x79\xd4\xc3\xda\x54\x28\xc4\x1a\xda\x78\x54\x8e\xe0\x73\xe9\xb0\x94\x8a\x40\x5f\x53\x2a\x3d\xa4\x46\x6a\x8a\x52\x49\xa1\x53\x42\x2d\x7d\x1e\x8e\x69\x8d\x24\x51\x0f\x1f\x5a\x13\x66\xe1\x85\xd4\x10\x48\x4d\xb9\x86\x59\xee\xaf\x83\xf0\xc1\x61\xfe\xcb\xbd\x2f\x47\xc3\x61\x5d\xd7\x89\x08\xce\x26\xc6\xae\x86\xaa\x59\xe8\x86\x6f\x66\x67\xd3\x8b\xf9\x74\x70\x9c\x1c\x86\x2d\xef\xb4\x22\xe7\x60\xe9\x4b\x25\x2d\x65\x58\xac\x21\xca\x52\xc9\x54\x2c\x14\x41\x89\x1a\xc6\x42\xac\x2c\x51\x06\x6f\xd8\xdf\xda\x4a\x2f\xf5\xea\x00\xce\x2c\x7d\x2d\x2c\x45\x3d\x64\xd2\x79\x2b\x17\x95\xbf\x07\x56\xe7\x9d\x74\xf7\x16\x18\x0d\xa1\x11\x4f\xe6\x98\xcd\x63\xbc\x9c\xcc\x67\xf3\x83\xa8\x87\xf7\xb3\xeb\x5f\x2e\xdf\x5d\xe3\xfd\xe4\xea\x6a\x72\x71\x3d\x9b\xce\x71\x79\x85\xb3\xcb\x8b\xf3\xd9\xf5\xec\xf2\x62\x8e\xcb\x57\x98\x5c\x7c\xc0\xeb\xd9\xc5\xf9\x01\x48\xfa\x9c\x2c\xe8\x6b\x69\xd9\x7f\x63\x21\x19\x46\xca\x18\xb3\x39\xd1\x3d\x07\x96\xa6\x71\xc8\x95\x94\xca\xa5\x4c\xa1\x84\x5e\x55\x62\x45\x58\x99\x5b\xb2\x5a\xea\x15\x4a\xb2\x85\x74\x9c\x4c\x07\xa1\xb3\xa8\x07\x25\x0b\xe9\x85\x0f\x6f\xfe\x27\xa8\x24\x8a\x1c\x79\x0c\xc8\xa0\x94\x25\x2d\x85\x54\xcc\xae\x6b\x4e\xb0\x4b\xad\x2c\x3d\x52\xa3\x97\x72\x55\x59\x72\xf8\x66\xcc\x67\xa2\x92\x2c\x52\x55\x39\x4f\x16\x05\x15\x0b\xb2\x70\xb9\x2c\x83\x7b\xb7\x2d\x91\xcc\x72\xb7\x38\xea\xe1\x74\x8c\x67\xc9\xbf\x92\xc3\x04\x33\x0f\x97\x9b\x4a\x65\x81\x4c\x0b\x62\x3e\x65\x3b\xc6\x18\x3d\x48\x73\xa1\x57\x94\xb8\xbc\x73\x40\xea\x86\x70\xf4\x55\x14\xa5\x0a\x6c\x9a\x38\x3e\x61\x52\x5a\xa9\x06\x81\xff\xd2\xe1\x59\xf2\xcf\xe4\x84\x7f\xb0\x1d\x25\x3c\x39\x0f\xe7\x39\xff\x09\x87\xf4\xd2\xf8\x1c\x43\x53\x7a\x86\x05\x43\x5f\x94\xc3\x5d\x38\xc2\x12\x84\x73\x55\xd1\xd0\x63\x41\xb8\x35\xaa\x2a\xc8\xc1\xe5\xc2\xee\x3b\x58\x0a\x4b\xda\x27\x01\xa3\x90\x91\x42\x78\xf6\x85\x44\x9a\x43\x49\x4d\x8d\xbb\x84\x6c\xad\x45\x21\xd3\x16\xbe\xa6\x5a\xa4\x1b\x45\x3d\x38\xb2\xb7\x64\x93\x17\x47\x58\x08\x0e\x5e\xea\x8c\xbe\x9e\x8e\x5f\x34\xef\x07\x99\x76\x03\x2d\x0a\x3a\x1d\xbd\x28\x89\x2c\x4a\x63\xfd\xe9\xe8\x05\x29\x4a\x39\x89\xcd\xf3\xc7\x91\x35\x8a\x6e\x9e\x7f\x7c\x91\x2a\x49\xda\x87\xb7\x10\x59\xc6\x34\x3a\x1d\xdd\xec\xbf\x3e\x8d\x7a\x78\x70\x58\x07\x53\x73\x64\xf3\x12\x3e\x17\x1e\x85\xf0\x69\x4e\xcd\x57\xc9\xcb\x91\x09\x2f\x32\x69\x87\xc5\x5a\x32\x9d\xf6\x9c\xea\xac\x84\xb3\x8d\x46\x9d\xcb\x34\x07\x7f\x77\x2c\x07\x45\xa5\x65\x2a\x3c\x31\xa2\xa1\xf4\x78\x4d\x55\x66\x9c\x1a\x36\x74\x3f\xa2\x7b\xc6\x02\x29\x98\x4f\x8a\x04\x33\xb6\x5b\x1a\xf5\xd0\x46\x8e\x54\x68\xce\x13\xb3\xd7\x1b\x98\x45\x13\xca\x01\x27\xc8\xcb\x54\x96\x42\x7b\x56\x81\x8c\x96\xa2\x52\x9e\xcf\xfb\x33\xa4\xf8\x54\x53\xb2\x69\xa1\x02\x31\xda\xf5\x8e\x8d\x1e\x26\xe1\xff\xc1\xde\xef\x84\xbd\x07\xa7\x48\x59\x14\x1d\xda\x4d\xa9\xd1\xba\x71\xdf\x45\xd1\xd9\xab\x9f\xc7\xcc\xc2\x1d\xf9\x86\xcc\x10\x7e\x4c\xd2\xe5\x2a\x69\x69\xc3\xeb\x3e\xbd\x9c\xbc\xfe\xcb\xb5\x0b\xf1\x39\x7a\xfb\xe1\xd3\xec\xfc\xd3\xab\xd9\x9b\xe9\xf8\x3e\xa7\x9b\x7c\xfd\x72\x39\xbf\xbe\x98\xbc\x9d\x8e\xfb\x8f\x73\xe3\x3c\xf3\xea\x49\x14\xd5\x39\xb3\xd1\x92\xc8\x30\xb0\x02\x6f\x66\x17\xd3\xe7\xc8\x4c\xc4\xc2\xfb\xeb\x74\x7a\x35\x1f\x3f\x8e\xfb\x77\xe1\xd7\xc7\xff\xdc\x6c\x62\xf4\x79\xc9\x93\x28\x33\x9a\xb8\x96\xce\x8d\x7e\x14\x30\x0c\x51\x2f\xa5\x75\xbe\x53\x02\xc1\xb2\xb3\x4d\x47\x24\x97\xf8\x88\xfe\x5d\x6f\x6b\x0b\x03\xfa\x82\x23\xdc\x3c\xe7\xad\x3a\x9c\xd8\xc3\x7b\x82\x6e\x95\x99\x65\x99\x60\xaa\x8e\x94\x5d\xf1\x2b\xe9\x42\x9d\x35\x76\x1d\xa4\xf6\x06\xbb\xe0\x93\xd6\xd2\x85\x61\xbe\x31\x91\xc3\xae\xae\x69\x09\x55\x8b\x35\x93\x52\xea\x54\x66\x7b\x1d\xaa\x03\x05\x32\x6b\x4c\x50\x9a\x1b\x1c\xe1\x14\x71\xff\x6e\x67\x7e\x13\xef\x3e\xc6\x6d\xfd\x1e\x8d\x3b\x88\x0e\x6f\x36\xa3\xe3\x93\x93\x93\xd1\xb3\x93\x93\x93\xe7\xc7\x47\x27\x47\x71\x63\xe0\xec\xd5\xcf\xed\xce\x1e\xae\x2f\xcf\x2f\x47\xf8\xf6\x79\xde\x54\xb9\xd4\xd2\x4b\xa1\xe4\x37\xda\xd6\xa2\x58\x12\x6a\xb1\x66\x14\x72\xa1\x33\x45\x68\xa4\x30\x70\xb1\xad\xc2\xd6\xd8\x82\x52\xc1\x8d\xd8\x71\xb7\x58\xb3\xcc\x59\x6e\x66\xa8\xa5\x52\x48\x2d\x71\xd5\x09\x68\xaa\xbb\x7d\x07\x78\xf9\xee\x1a\xb2\x69\xb7\x95\x63\x05\x0f\xb6\xb3\xd6\x60\x69\x32\x78\x2a\x4a\x15\xea\x35\xa7\x35\x8a\x30\x5c\x90\xce\x50\x95\x0d\x5e\xc7\x9d\xb1\xd0\x59\xb0\xb0\x92\x96\x70\xa5\x92\x1e\x0b\x2b\xa4\x6e\x01\xfc\x2a\x7d\xb4\x94\x4c\x93\xe9\x2d\xd9\x35\x5c\xb5\x70\xf4\xa5\xe2\x4a\x68\x39\x22\x1d\x73\x87\xb2\x07\x64\x09\x56\x4b\x6b\x0a\xe3\x1b\x2e\x88\xfd\x62\x8e\x1a\xf0\x77\xc8\x72\x79\x6c\xe2\x48\x8e\x0f\xa3\x37\xd3\xc9\xf9\xf4\x6a\xdc\xef\xd8\x1e\xb1\x74\x04\x9d\x92\x1a\xf7\x98\xbc\xa5\xb9\x22\x0f\x39\x96\xff\x38\x0a\x4f\x4c\xd3\x8f\xbc\x92\x37\x6d\x62\x8c\xc7\x78\x1a\xf7\xef\x3a\x7b\x9b\xf8\x29\x6e\xf6\x29\x8b\x86\x7a\xe3\xbe\xdc\x3d\x36\x65\xd6\x58\x68\xdf\x06\x97\xfb\xf2\x3b\x6c\x7a\xc0\xa7\xfe\x9d\xdc\x74\xfb\x77\x74\x1a\x75\xe8\x74\xbc\x7a\x10\x7e\x30\xa3\x1c\xb5\x16\x9b\x40\xfa\x8f\x83\x65\x67\x6f\x2d\xfe\x08\x4d\x6f\xa8\xd3\xbd\xf0\xd8\x14\xfe\xc0\xca\x52\x89\xb7\x26\xa3\x27\x18\x23\xe6\x1f\xa3\x56\x70\xe3\x87\xe1\x02\x2d\xc6\x5b\x23\xed\x87\xa5\xfc\x1b\xb1\xec\xa5\xf3\x2f\xc2\x59\xca\xad\xd0\xec\x3a\x74\x1d\x24\x27\x10\x3d\xb0\xd1\x54\x1e\xac\x70\x10\x7a\x5d\x8b\x75\xd2\x0d\x2d\x05\x09\xed\x82\x7e\x6c\x4b\xbb\x16\x8e\xf7\xb6\x7d\x39\xd0\x82\xd5\x24\x69\xc4\xe9\x27\x0c\x96\x0f\xd3\xb3\x27\x4f\x4c\x67\x1c\xb5\x84\xbe\xe4\xe9\xf6\xfb\xcd\x3d\x88\x97\x27\x0d\xd9\x0d\x39\x7c\xee\x82\x50\x98\x4c\x2e\x25\x65\x3c\x6c\xb6\x92\xa9\x85\x8a\x7a\xb0\xb4\x9d\xae\x82\x02\xba\xa6\xf8\xcb\x92\xd8\x59\x6b\xaa\x55\x23\x53\x71\xb7\x30\x0e\x8d\x55\xe8\x2c\x89\xd2\x12\x3b\xe4\x9a\x9f\x9b\x30\xbb\xfd\x18\xa1\xf9\xa1\x22\xf3\xa3\x04\xe6\x41\x37\xe4\x0b\x51\x17\x68\x18\x18\xd9\xc5\x1d\x06\xef\x69\x2f\x0d\x5d\x83\x69\x86\xe7\x75\xf0\xb1\x9d\x02\xba\x6b\x48\x21\xc2\x4c\x2b\x1c\x94\xd1\x2b\x08\x9e\x52\x78\x3c\xa7\x47\x0e\x5f\x2a\x63\xab\x22\xc1\x24\x4d\x8d\xcd\x18\x06\xdf\xa4\x32\x33\x69\x03\x2b\x03\xd1\xcd\x53\x0e\xbf\x57\xce\xb7\xad\x47\x99\x3a\x1c\x1d\xf5\x70\x6b\x3c\x1d\x40\xfa\x47\x0e\xce\x33\x8c\xbb\xaf\xac\x7c\xa5\x71\xd4\x71\xaa\x4d\xc9\x41\x80\x42\x7a\x7c\xd6\xa6\x0e\x07\x45\x3d\x26\xa5\x0b\xa9\x68\x04\x75\x1b\x00\x4f\xf4\x05\x5f\x78\x96\xd6\x14\x78\x2a\xbd\x7b\xda\x9a\x4b\xa2\xc9\xf9\xf9\xa7\xf9\xf4\xea\x37\xae\xe1\xae\x4a\x5b\x11\x6b\xc5\xeb\x3b\x85\xda\x4e\x41\xa3\x50\xb0\x7f\x9e\x81\x33\x25\x19\xfe\x8e\xa4\x18\x38\xae\xa8\x46\x31\x36\x71\xd8\x89\x01\x8f\x0b\x71\xff\x6e\xe7\xc7\x26\xe6\x54\xfd\x6a\xcd\x6d\xdb\xb2\x6b\x7a\x74\x4b\x10\xa9\xaf\x84\x52\x6b\xfc\x6e\xa4\xa6\x66\xc4\xb0\x95\x0e\xb7\x9b\xf6\xda\x11\xcd\xae\xa7\x57\x13\xbe\x4e\x8d\x0f\xa3\x4a\x7b\xa9\x3a\xc9\x6b\x1d\xd8\x89\x9e\x32\xa9\x50\x2c\x05\xf7\x44\xef\x81\x1f\x38\xc5\x30\xa3\xdb\xa1\xae\x94\x7a\xd2\xb6\x88\x46\xbb\xb7\x07\xdd\xa0\x16\xe1\xc2\x18\xc6\xd2\x66\x8a\xcd\xba\xe3\x98\x56\x6b\x9d\x62\x21\xd2\xcf\xfc\xb0\x3d\x34\x02\x9c\x22\x2a\xc1\x6d\x86\x5b\xce\xce\xf1\xed\xaf\xd0\x82\x9a\x39\x69\xfb\x2e\x4c\x49\xc7\x87\xf7\xc6\xa4\x56\x89\xf6\xf4\xf1\xff\x56\x83\x29\xa3\xff\x06\x00\x00\xff\xff\x55\x87\x8c\x2d\x38\x10\x00\x00") - -func testImagesPetsZookeeperInstallerOnStartShBytes() ([]byte, error) { - return bindataRead( - _testImagesPetsZookeeperInstallerOnStartSh, - "test/images/pets/zookeeper-installer/on-start.sh", - ) -} - -func testImagesPetsZookeeperInstallerOnStartSh() (*asset, error) { - bytes, err := testImagesPetsZookeeperInstallerOnStartShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/pets/zookeeper-installer/on-start.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPortForwardTesterGitignore = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xc8\x2f\x2a\x49\xcb\x2f\x2a\x4f\x2c\x4a\x29\x49\x2d\x2e\x49\x2d\xe2\x02\x04\x00\x00\xff\xff\x7c\x93\x26\x90\x12\x00\x00\x00") - -func testImagesPortForwardTesterGitignoreBytes() ([]byte, error) { - return bindataRead( - _testImagesPortForwardTesterGitignore, - "test/images/port-forward-tester/.gitignore", - ) -} - -func testImagesPortForwardTesterGitignore() (*asset, error) { - bytes, err := testImagesPortForwardTesterGitignoreBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/port-forward-tester/.gitignore", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPortForwardTesterDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x91\x41\x6f\x9b\x40\x10\x85\xef\xfb\x2b\x9e\xe0\xd2\x4a\x2e\x4e\x23\xf5\xd2\x9e\xa8\xed\xa8\x28\x29\x54\x86\x34\xb2\xaa\x1e\xd6\x30\xc0\x48\x78\x77\xbb\x3b\x94\xf8\xdf\x57\x38\x8e\x54\xcb\xe1\xf8\xe6\x63\xf6\xdb\xb7\x31\x56\xd6\x1d\x3d\x77\xbd\xe0\xf6\xe6\xe3\x27\x54\x3d\xe1\x7e\xdc\x93\x37\x24\x14\x90\x8e\xd2\x5b\x1f\x12\x15\xab\x18\x0f\x5c\x93\x09\xd4\x60\x34\x0d\x79\x48\x4f\x48\x9d\xae\x7b\x7a\x9d\x2c\xf0\x93\x7c\x60\x6b\x70\x9b\xdc\xe0\xdd\x0c\x44\xe7\x51\xf4\xfe\x8b\x8a\x71\xb4\x23\x0e\xfa\x08\x63\x05\x63\x20\x48\xcf\x01\x2d\x0f\x04\x7a\xae\xc9\x09\xd8\xa0\xb6\x07\x37\xb0\x36\x35\x61\x62\xe9\x4f\xc7\x9c\x97\x24\x2a\xc6\xee\xbc\xc2\xee\x45\xb3\x81\x46\x6d\xdd\x11\xb6\xfd\x9f\x83\x96\x93\xf0\xfc\xf5\x22\xee\xf3\x72\x39\x4d\x53\xa2\x4f\xb2\x89\xf5\xdd\x72\x78\x01\xc3\xf2\x21\x5b\x6d\xf2\x72\xf3\xe1\x36\xb9\x39\xfd\xf2\x68\x06\x0a\x01\x9e\xfe\x8c\xec\xa9\xc1\xfe\x08\xed\xdc\xc0\xb5\xde\x0f\x84\x41\x4f\xb0\x1e\xba\xf3\x44\x0d\xc4\xce\xbe\x93\x67\x61\xd3\x2d\x10\x6c\x2b\x93\xf6\xa4\x62\x34\x1c\xc4\xf3\x7e\x94\x8b\xb2\x5e\xed\x38\x5c\x00\xd6\x40\x1b\x44\x69\x89\xac\x8c\xf0\x35\x2d\xb3\x72\xa1\x62\x3c\x65\xd5\xb7\xe2\xb1\xc2\x53\xba\xdd\xa6\x79\x95\x6d\x4a\x14\x5b\xac\x8a\x7c\x9d\x55\x59\x91\x97\x28\xee\x90\xe6\x3b\xdc\x67\xf9\x7a\x01\x62\xe9\xc9\x83\x9e\x9d\x9f\xfd\xad\x07\xcf\x35\x52\x33\x77\x56\x12\x5d\x08\xb4\xf6\x45\x28\x38\xaa\xb9\xe5\x1a\x83\x36\xdd\xa8\x3b\x42\x67\xff\x92\x37\x6c\x3a\x38\xf2\x07\x0e\xf3\x63\x06\x68\xd3\xa8\x18\x03\x1f\x58\xb4\x9c\x92\xab\x4b\x25\x4a\xdd\x6d\x8b\xef\x08\xb5\xd7\x52\xf7\x2a\x5d\xaf\xe1\xac\x97\xd6\xfa\x49\xfb\x46\x28\x08\xf9\xeb\xe4\x6d\x2e\xe9\xec\x9b\xa1\xda\xe4\xd5\x76\xf7\xa3\xc8\xf2\x0a\xbf\xa2\xe5\x15\x12\xfd\x56\xff\x02\x00\x00\xff\xff\xbd\x68\x34\x86\xd1\x02\x00\x00") - -func testImagesPortForwardTesterDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesPortForwardTesterDockerfile, - "test/images/port-forward-tester/Dockerfile", - ) -} - -func testImagesPortForwardTesterDockerfile() (*asset, error) { - bytes, err := testImagesPortForwardTesterDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/port-forward-tester/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPortForwardTesterMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x3e\x14\xc5\x9f\xff\xfe\x14\x47\x0d\x0f\xad\x54\x52\xfe\x68\xe2\x81\x09\x4d\x59\xdb\x41\x04\x4a\xa6\x24\x80\x78\x42\x4e\x72\x9b\x5c\x29\xb5\x3d\xdb\x59\xe8\xb7\x9f\x5c\x40\x5a\x35\xbf\xf9\xde\x73\xcf\xfd\xf9\x38\xc2\x5a\x9b\x83\xe5\xae\xf7\xb8\xbc\xf8\xff\x0a\x55\x4f\xb8\x1f\x6b\xb2\x8a\x3c\x39\x24\xa3\xef\xb5\x75\xb1\x88\x44\x84\x07\x6e\x48\x39\x6a\x31\xaa\x96\x2c\x7c\x4f\x48\x8c\x6c\x7a\xfa\xec\x2c\xf1\x44\xd6\xb1\x56\xb8\x8c\x2f\x30\x0f\x82\xd9\x47\x6b\xb6\xf8\x2a\x22\x1c\xf4\x88\xbd\x3c\x40\x69\x8f\xd1\x11\x7c\xcf\x0e\x3b\x1e\x08\xf4\xd6\x90\xf1\x60\x85\x46\xef\xcd\xc0\x52\x35\x84\x89\x7d\x7f\x5c\xf3\x61\x12\x8b\x08\x2f\x1f\x16\xba\xf6\x92\x15\x24\x1a\x6d\x0e\xd0\xbb\xbf\x75\x90\xfe\x08\x1c\x4e\xef\xbd\xb9\x5e\xad\xa6\x69\x8a\xe5\x11\x36\xd6\xb6\x5b\x0d\xef\x42\xb7\x7a\x48\xd7\xdb\xac\xdc\x9e\x5f\xc6\x17\xc7\x91\x47\x35\x90\x73\xb0\xf4\x6b\x64\x4b\x2d\xea\x03\xa4\x31\x03\x37\xb2\x1e\x08\x83\x9c\xa0\x2d\x64\x67\x89\x5a\x78\x1d\x78\x27\xcb\x9e\x55\xb7\x84\xd3\x3b\x3f\x49\x4b\x22\x42\xcb\xce\x5b\xae\x47\x7f\x12\xd6\x27\x1d\xbb\x13\x81\x56\x90\x0a\xb3\xa4\x44\x5a\xce\xf0\x3d\x29\xd3\x72\x29\x22\x3c\xa7\xd5\x5d\xfe\x58\xe1\x39\x29\x8a\x24\xab\xd2\x6d\x89\xbc\xc0\x3a\xcf\x36\x69\x95\xe6\x59\x89\xfc\x07\x92\xec\x05\xf7\x69\xb6\x59\x82\xd8\xf7\x64\x41\x6f\xc6\x06\x7e\x6d\xc1\x21\x46\x6a\x43\x66\x25\xd1\x09\xc0\x4e\xbf\x03\x39\x43\x0d\xef\xb8\xc1\x20\x55\x37\xca\x8e\xd0\xe9\xdf\x64\x15\xab\x0e\x86\xec\x9e\x5d\xf8\x4c\x07\xa9\x5a\x11\x61\xe0\x3d\x7b\xe9\x8f\x95\x7f\x1e\x15\x0b\x51\x16\xeb\xf2\xc6\x68\xeb\x77\xda\x4e\xd2\xb6\x9e\x9c\x27\x2b\x92\x62\x7d\x87\x6f\x37\x90\xfb\xf6\xea\x8b\xa8\x92\xe2\x76\x5b\x85\xfb\xd9\x7c\xfd\x58\x6c\xd2\x62\x21\x6e\xf3\x87\x24\xbb\x7d\x7d\xda\x16\x65\x9a\x67\xa1\x37\xc8\x30\x1c\x1c\x5f\x37\x69\x81\x20\x56\xda\xb7\x6c\x71\x36\x77\x3d\x0d\x03\xcc\xd4\x2e\x16\x82\xde\xc2\x3e\x21\x6a\x56\xd7\xe2\xbf\x38\x5e\xf1\x5e\x76\x74\x3e\x7a\x1e\x62\xd7\xa3\x66\x85\xb3\x79\xe0\x5a\x08\x11\xff\xbc\xcb\xb3\x97\xeb\x50\x14\x7f\x02\x00\x00\xff\xff\xf2\x15\xa7\xc8\xf7\x02\x00\x00") - -func testImagesPortForwardTesterMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesPortForwardTesterMakefile, - "test/images/port-forward-tester/Makefile", - ) -} - -func testImagesPortForwardTesterMakefile() (*asset, error) { - bytes, err := testImagesPortForwardTesterMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/port-forward-tester/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPortForwardTesterVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesPortForwardTesterVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesPortForwardTesterVersion, - "test/images/port-forward-tester/VERSION", - ) -} - -func testImagesPortForwardTesterVersion() (*asset, error) { - bytes, err := testImagesPortForwardTesterVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/port-forward-tester/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPortForwardTesterPortforwardtesterGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x57\x7f\x73\xdb\xb8\x11\xfd\x5b\xfc\x14\x1b\xce\x64\x4a\xdd\x49\x94\xec\xdc\xcd\xf4\x9c\xba\x1d\xc5\xd2\xf5\xd4\x73\x6d\x8f\xa4\x5c\x7a\xfd\x31\x19\x08\x5c\x92\x18\x83\x00\x03\x2c\xa5\xa8\x1d\xf7\xb3\x77\x16\xa4\x64\x29\xb6\x7b\xf9\x27\xb1\x88\xc5\xdb\xc5\xe2\xed\xe2\xed\xe8\x9b\xe8\xca\xd6\x3b\xa7\x8a\x92\xe0\x7c\x7c\xf6\x3d\xac\x4a\x84\x9f\x9b\x35\x3a\x83\x84\x1e\x26\x0d\x95\xd6\xf9\x34\x8a\xae\x95\x44\xe3\x31\x83\xc6\x64\xe8\x80\x4a\x84\x49\x2d\x64\x89\xd0\xad\x0c\xe0\x17\x74\x5e\x59\x03\xe7\xe9\x18\x12\x36\x88\xbb\xa5\xb8\xff\x36\xda\xd9\x06\x2a\xb1\x03\x63\x09\x1a\x8f\x40\xa5\xf2\x90\x2b\x8d\x80\x9f\x25\xd6\x04\xca\x80\xb4\x55\xad\x95\x30\x12\x61\xab\xa8\x0c\x4e\x3a\x88\x34\xfa\xb5\x03\xb0\x6b\x12\xca\x80\x00\x69\xeb\x1d\xd8\xfc\xd8\x0a\x04\x45\x11\x00\x40\x49\x54\x5f\x8c\x46\xdb\xed\x36\x15\x21\xca\xd4\xba\x62\xa4\x5b\x2b\x3f\xba\x9e\x5f\xcd\x6e\x96\xb3\xe1\x79\x3a\x8e\xa2\xf7\x46\xa3\xf7\xe0\xf0\x53\xa3\x1c\x66\xb0\xde\x81\xa8\x6b\xad\xa4\x58\x6b\x04\x2d\xb6\x60\x1d\x88\xc2\x21\x66\x40\x96\xe3\xdc\x3a\x45\xca\x14\x03\xf0\x36\xa7\xad\x70\x18\x65\xca\x93\x53\xeb\x86\x4e\x12\xb4\x8f\x4a\x79\x38\x36\xb0\x06\x84\x81\x78\xb2\x84\xf9\x32\x86\x77\x93\xe5\x7c\x39\x88\x3e\xcc\x57\x3f\xdd\xbe\x5f\xc1\x87\xc9\x62\x31\xb9\x59\xcd\x67\x4b\xb8\x5d\xc0\xd5\xed\xcd\x74\xbe\x9a\xdf\xde\x2c\xe1\xf6\x47\x98\xdc\xfc\x0a\x3f\xcf\x6f\xa6\x03\x40\x45\x25\x3a\xc0\xcf\xb5\xe3\xd8\xad\x03\xc5\xa9\xc3\x2c\x8d\x96\x88\x27\xce\x73\xdb\x06\xe3\x6b\x94\x2a\x57\x12\xb4\x30\x45\x23\x0a\x84\xc2\x6e\xd0\x19\x65\x0a\xa8\xd1\x55\xca\xf3\xe5\x79\x10\x26\x8b\xb4\xaa\x14\x09\x0a\xbf\x9f\x1c\x27\x8d\xbe\x19\x45\xd1\x68\x04\x13\x20\x65\x76\xb0\x56\x46\xb8\x5d\xeb\x07\x3d\x05\x3c\xeb\x88\x3f\x6c\x85\xcb\x94\x29\xd2\x40\xab\xdc\x6a\x6d\xb7\xbc\x8c\x66\xa3\x9c\x35\x15\x1a\x82\x8d\x70\x8a\x13\xed\x19\x51\x5a\x43\xce\xea\xe0\xad\x85\xfd\x9d\x07\x6d\x0b\x25\x2f\xa2\xd1\x88\x2d\xde\xcd\x6f\xa6\x1f\xef\x6e\x17\x2b\x18\x06\xab\xd5\xd5\x5d\xeb\x8d\x6c\xa0\xd5\xfe\xb4\x5a\x79\x42\x83\x8e\xf7\xcc\xfe\x76\x37\xbb\x5a\xcd\xa6\x1f\xaf\xae\xe7\xb3\x9b\xd5\xc7\xe9\x64\x35\x81\x21\x64\x82\x04\x50\x29\x08\xb6\x4c\xc2\x1a\x65\x40\x71\x28\x51\x6d\x10\x72\x67\xab\x00\x25\xb5\x42\x43\x6f\x03\xf9\xd6\x08\x71\x9c\x32\xe8\xd5\x4f\xef\x6f\x7e\x5e\xc2\x10\x4a\xbb\x85\x4a\x98\x1d\xc8\xb2\x31\xf7\x9e\x19\x19\x90\xb7\x08\xbe\xb4\x8d\xce\xc0\xa3\x09\xcc\x79\x04\x3b\x00\x7c\x5c\xce\xff\x3e\xeb\x40\xb4\x70\x05\x02\x0a\x59\xb6\x50\xfb\xed\x6b\x7c\x34\x9f\xdf\xac\x66\x8b\x5f\x26\xd7\xdd\xe9\x33\xd4\x62\xc7\x8c\x5c\x23\x6d\x11\x4d\x70\x15\x32\x7c\x40\xe9\xf2\x76\x6d\x0b\xa8\xd0\x7b\x51\xa0\x07\xe1\x30\x70\x98\xd0\x70\x5c\x9e\x32\xdb\x10\x88\xf6\x32\x6c\xe3\xc1\x53\xb0\xeb\x8a\xeb\x70\x13\xf8\x19\x65\xc3\xac\x08\x19\x58\xa1\x27\x90\x36\x43\x90\xc2\x80\x43\x72\x0a\x37\x5d\x61\xf3\x45\x0a\x65\xd0\xb5\xf7\xc7\xa4\x82\x8d\xd0\x2a\x13\x84\x6d\xce\x19\xb8\x4d\x3a\x66\x8c\xb6\xc6\x52\x6c\x14\x13\xd9\x03\x89\xfb\xc0\x22\x2d\x24\xa6\x51\x2d\xe4\x3d\xd3\xb5\x12\xca\x44\x91\xaa\xc2\x75\x27\x51\x2f\xce\x2b\x8a\xa3\x5e\x6c\x30\xfc\x67\x3d\xff\xeb\xc9\x49\x6b\x36\xdd\x9f\xca\x14\xe1\x2b\xa9\x0a\xe3\xa8\x1f\x45\x79\x63\x24\x14\x48\x33\xb3\x99\x1b\x4a\x8c\xa8\x10\x5a\xbb\x3e\x28\x43\xf0\x9f\xa8\xe7\xe1\xe2\x12\xac\x4f\xff\x8c\x84\x66\x13\x4c\xfa\x51\x6f\x23\x74\x83\x03\x40\xe7\x78\xb9\xf3\x92\x4e\xc8\xaa\xc4\xf7\xa3\x9e\xca\xc3\xd2\xab\x4b\x30\x4a\x33\x4a\x2f\xaf\x28\xbd\x73\xca\x50\x9e\xc4\x33\xe7\xac\x83\x5a\x38\xcf\xc7\x7a\xed\xe1\xf5\xa7\x0b\x78\xbd\xf9\xa7\x89\x07\xc0\xf8\x03\xf0\x01\xba\x1f\xf5\x7a\xd6\xa7\xb3\xcf\x8a\x92\xb3\x7e\xd4\x7b\x88\x7a\x0e\xa9\x71\x06\x82\xfb\xe8\x21\x94\x1d\x89\x7b\x34\x2d\x3d\x0d\xd2\x88\x5b\xdd\xc8\xa3\xdb\xa0\x4b\x0b\xbb\xaf\x13\xe7\x69\xb2\xb1\x2a\xe3\x66\x3a\x6d\x59\xe2\x43\xce\x45\x65\x1b\x43\xe1\x6a\x55\x85\x81\xa5\x1a\xb1\x06\x91\x13\x3a\x90\xda\x86\x18\xa9\x0c\xa4\x63\x92\x20\x78\x95\x21\x6f\x10\xa1\xda\xa4\x35\x06\x25\xb3\x00\xd6\x98\x5b\x87\xc7\x9b\x00\x0d\x29\x87\xe0\xad\xbc\x47\x0a\x34\x79\xb7\x6b\x3d\x84\x86\xb9\x45\x50\x46\x3a\x14\xbe\x6d\x52\xb2\xe4\x00\xfd\x23\x25\xda\xfa\x00\x8f\x4c\xbf\xc6\xc1\x8f\xf3\x1b\x06\x61\xfe\xd4\xce\x4a\xf4\x1e\x3d\x28\xe2\xa7\xc3\x08\xdd\x56\x5a\x17\x06\x95\xb8\xdb\x1b\xb5\x1d\xaf\x59\x7b\xfc\xd4\x30\xde\x62\xb9\x62\x98\x90\xb4\x7d\xb8\xe2\xf8\x28\xe1\xbd\xb9\x37\x76\x6b\xa0\x31\x0e\x45\x16\xa0\x5b\x9e\x33\xa1\x17\xcb\x15\x07\x55\x79\x2e\x18\x2b\x65\xe3\xa0\xb2\x9e\xf4\x8e\xbb\xf9\xbb\xe5\x14\xfc\xce\x13\x56\x3e\x85\x64\x62\x32\xf8\xa0\x4c\x66\xb7\xfe\x4f\xfd\x03\x00\x67\x9b\xab\x4c\x79\xf0\xb6\xc2\x2d\x1f\x58\xb8\xb5\x22\xc7\xcd\x33\xf9\xaf\x16\x84\x46\xee\x40\x38\xdb\x70\xbb\x28\x91\xf9\x6f\x90\xfa\x69\x24\xad\xf1\xf4\xcc\x95\x5e\xc2\xf7\xe3\x31\x7c\x13\xb0\xd3\xbf\x2a\xad\x95\x47\x69\x4d\xd6\xf1\x9c\x0b\x26\xe9\x33\x1b\xd7\xca\x64\x93\x2c\x0b\x6f\xc5\x09\xbb\xe3\xd0\x4f\x27\xd3\xe9\x62\xb6\x5c\xc6\x2d\x91\x8f\x8d\x2f\x2f\x21\x8e\x03\x9f\x4f\xbe\x42\xac\xad\x14\xba\xb4\x9e\x4b\xef\xa1\x75\x70\xc7\x75\xf9\x0c\x3a\x77\x6b\x86\x16\x59\xe6\x0e\x15\x64\x90\xd2\x05\x7a\xab\x37\xb8\xba\xba\x63\xe0\x24\x26\x59\x73\x41\x20\xa5\x7f\xb1\xca\xfc\x64\x3d\x31\x64\x72\xe4\x79\x00\x7b\x47\xfd\xaf\x2c\x3a\x17\x7c\x28\x53\x1c\x0a\xee\xf9\x3a\xdb\xbf\x17\x27\x01\x5e\x87\x8f\xab\xab\xbb\x7d\x6c\x7c\x84\xaf\x74\xdc\x02\xfe\xa6\xe3\xa8\xc7\x24\x3c\x78\xdd\x87\x91\x4e\x24\x8b\x22\x76\xfd\x95\xfe\x44\xd8\xc0\xbc\x7e\x64\xf5\x6f\xb9\x3e\xa0\x68\x93\xc4\xad\x47\xcc\xf6\x25\xf8\x08\x13\xf7\xa3\xa8\xb7\xef\xd5\x57\x61\x75\xca\x75\x77\x7a\xd7\xcf\xbd\xb2\x1d\xa3\x34\x9a\xe4\xe9\xfe\x3e\xfc\x11\xc6\x2d\xb7\x9a\x9c\xc1\x2a\x71\x8f\xc9\x3f\xfe\xb5\xde\x11\x0e\x5e\xda\xc3\xc7\xe0\xf2\x3c\x64\x8c\xc3\x4c\x17\x28\xb2\x64\xdd\xe4\xbc\xaa\x72\x08\xf5\xfb\xea\xf2\x45\xbf\xec\xf3\x34\x85\x9d\x51\xfb\xfe\x8b\x0c\x5e\xb3\x0c\x64\x01\xdc\x75\x0c\xde\x3b\x80\x75\x43\x50\x58\xe2\x55\x65\x3c\xa1\xc8\x52\x0e\xe3\xb2\xcb\xf2\x0b\xee\x06\x70\x08\x98\xe3\x3b\xdc\xc2\x39\xff\x7a\x68\x23\x7e\x26\xbb\xaf\x2e\xbb\x97\x29\x1c\xec\xa5\x98\x1f\x23\xfe\x74\x14\xdf\xa7\x93\xb8\x9e\x82\x0f\x8e\xa1\x9f\x46\xf6\xe6\x38\xb2\x53\xe2\x9d\x84\xc0\x69\x67\x83\x2f\x79\xf6\x70\xcc\x50\xe6\xd6\xa2\xd5\x54\xd9\x21\x94\x3d\xc9\xb8\xc9\xc6\xfb\x42\x68\xf5\xd3\xc5\xe5\xd1\x03\x1d\xb7\x32\x8b\x4d\xc2\xf2\x52\xfd\x1b\x9f\xb3\x08\x3a\xea\x60\x35\x37\x84\x6e\x23\xf4\xb3\x96\x7b\x09\x15\x58\xdd\xa6\x61\xcf\xe6\x4e\x31\xa4\x0b\xac\x51\x50\x12\x7f\x8e\x07\x70\x70\xdb\x8f\x7a\x59\x67\xd7\x72\x34\x79\xdc\xcc\x50\xac\x3c\x15\xaf\x8e\xdf\x82\x82\x3f\x74\x72\xf0\x2d\xa8\x6f\xbf\x0d\x99\xeb\x04\xd7\x29\x71\x3f\xf0\x03\x9b\x64\x01\x22\xa4\x7b\x2f\xcb\x5e\x5d\x3e\x7a\xfe\xff\x7c\x6d\xdf\xe8\x97\x09\xbb\x75\xb6\x5d\x7f\x8e\xb2\x07\x1f\x03\x38\x8e\xef\x84\x0d\xdf\x7d\x25\x1b\xc2\x59\x5e\xa2\x83\xca\x41\x7d\x7b\x76\x48\x4b\xbb\x3b\xbc\x5b\x4b\x16\x07\x49\xf8\x73\xda\xb8\x30\x74\x24\x27\xb7\xd8\x7f\xe6\x85\xeb\x60\x9f\x34\xb1\x65\xd9\x50\x68\x82\x19\xbf\xe4\x5f\xb4\xb0\xd1\x08\x3c\x12\x68\x65\x0a\x9e\x68\xba\x07\x99\x2c\xe4\xba\xf1\x25\xac\x9b\x3c\x47\xe7\xd3\xf6\xbd\xee\xe4\x92\xcd\x73\x25\x95\xd0\xb0\x15\x3b\xee\xb1\x36\x0c\x34\x7b\x35\x5f\x58\x10\xb5\x82\xcc\x4a\x9f\xc2\xbb\x86\x82\x0f\x9e\xcc\x30\x68\xec\x76\x9c\xd9\xf0\x58\xcc\x5a\x45\x79\xd9\x74\x43\xd6\xb6\xc4\x30\xc0\x05\xb1\x1c\xc4\x1d\x94\x82\x67\xaf\x1d\x0f\x72\x42\x12\xcb\x0a\x16\x18\x2c\x02\x28\xb7\xae\xf2\x01\x3b\xe1\x11\x99\xa1\x59\xf5\xf9\x8b\xd1\x88\xf5\xb7\xc3\x8d\x42\x1e\x74\x6b\x5f\x5b\x4a\xa5\xad\x46\x3f\x7c\xff\xe6\x7c\x3c\xfe\xee\x4d\x3f\x6d\x1f\x98\x74\x89\x74\x1d\xce\x9d\x0c\xcf\xba\x5c\xfc\x18\x4e\x1d\x44\xd7\xa3\x0e\x92\x1a\x85\xd1\xbb\xc1\xd1\xb4\xb6\x77\xb5\xd6\xb6\x48\x4d\x88\x5b\x8b\xb5\x4f\x8d\x1e\x09\x47\x4a\x6a\xf4\xa3\xf3\xf1\xf8\x87\xd1\xf8\x6c\x74\xf6\xfb\x11\x95\x38\x6c\x34\xa9\x4a\x10\x0e\xbd\xfd\xd8\xa6\x7b\x58\x8b\x02\x87\xd6\x0d\xb7\xe5\x6e\xa8\xfc\xb0\xda\x0d\x49\xd6\x43\x63\x69\xe8\x50\x87\x09\xf0\x22\x44\x75\x96\x06\x81\x86\x1d\xaf\x4b\xa1\x73\xd6\x9e\xc7\x52\xad\x54\xb2\x0c\x93\x8e\x07\xc1\x02\x11\x78\x42\xc0\x36\xf9\xe7\x29\x14\x3c\xbd\xed\x75\xa4\xad\xb0\x15\xba\x47\x93\x1d\x1f\x99\x75\x25\xdb\xbf\xd9\xbb\x6b\xf3\x50\xd5\x1a\xe9\x38\x21\x5d\xfa\xae\xd8\xa6\x2d\xd6\x7e\x74\xcc\xdb\x27\xa2\xac\x7f\xbc\x23\xe9\x7f\x49\xd0\xa9\x35\x18\xf7\xa3\x87\xe8\x7f\x01\x00\x00\xff\xff\x5b\x12\xa6\xd0\x7b\x11\x00\x00") - -func testImagesPortForwardTesterPortforwardtesterGoBytes() ([]byte, error) { - return bindataRead( - _testImagesPortForwardTesterPortforwardtesterGo, - "test/images/port-forward-tester/portforwardtester.go", - ) -} - -func testImagesPortForwardTesterPortforwardtesterGo() (*asset, error) { - bytes, err := testImagesPortForwardTesterPortforwardtesterGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/port-forward-tester/portforwardtester.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPorterGitignore = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2a\xc8\x2f\x2a\x49\x2d\xe2\xd2\x2b\x49\x4c\xe7\x02\x04\x00\x00\xff\xff\x65\xbd\xf7\x98\x0c\x00\x00\x00") - -func testImagesPorterGitignoreBytes() ([]byte, error) { - return bindataRead( - _testImagesPorterGitignore, - "test/images/porter/.gitignore", - ) -} - -func testImagesPorterGitignore() (*asset, error) { - bytes, err := testImagesPorterGitignoreBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/porter/.gitignore", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPorterDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xc1\x6e\xdb\x3c\x10\x84\xef\x7c\x8a\x81\x75\xf9\x7f\xc0\x95\xd3\x1c\x7a\x68\x4f\x6a\xec\xa0\x42\x52\xa9\xb0\x94\x06\x41\xd1\x03\x4d\xad\xa5\x45\x65\x92\x25\x57\x55\xf4\xf6\x85\x14\x07\xa8\x5b\x5e\x88\xdd\x19\x2e\x3f\x0e\x13\xdc\x38\x3f\x05\x6e\x3b\xc1\xf5\xd5\xdb\x77\xa8\x3b\xc2\xdd\x70\xa0\x60\x49\x28\x22\x1b\xa4\x73\x21\xa6\x2a\x51\x09\xee\xd9\x90\x8d\xd4\x60\xb0\x0d\x05\x48\x47\xc8\xbc\x36\x1d\xbd\x2a\x6b\x7c\xa5\x10\xd9\x59\x5c\xa7\x57\xf8\x6f\x36\xac\xce\xd2\xea\xff\x0f\x2a\xc1\xe4\x06\x9c\xf4\x04\xeb\x04\x43\x24\x48\xc7\x11\x47\xee\x09\xf4\x6c\xc8\x0b\xd8\xc2\xb8\x93\xef\x59\x5b\x43\x18\x59\xba\xe5\x9a\xf3\x90\x54\x25\x78\x3a\x8f\x70\x07\xd1\x6c\xa1\x61\x9c\x9f\xe0\x8e\x7f\xfa\xa0\x65\x01\x9e\x57\x27\xe2\xdf\x6f\x36\xe3\x38\xa6\x7a\x81\x4d\x5d\x68\x37\xfd\x8b\x31\x6e\xee\xf3\x9b\x5d\x51\xed\xde\x5c\xa7\x57\xcb\x91\x07\xdb\x53\x8c\x08\xf4\x73\xe0\x40\x0d\x0e\x13\xb4\xf7\x3d\x1b\x7d\xe8\x09\xbd\x1e\xe1\x02\x74\x1b\x88\x1a\x88\x9b\x79\xc7\xc0\xc2\xb6\x5d\x23\xba\xa3\x8c\x3a\x90\x4a\xd0\x70\x94\xc0\x87\x41\x2e\xc2\x7a\xa5\xe3\x78\x61\x70\x16\xda\x62\x95\x55\xc8\xab\x15\x3e\x66\x55\x5e\xad\x55\x82\xc7\xbc\xfe\x54\x3e\xd4\x78\xcc\xf6\xfb\xac\xa8\xf3\x5d\x85\x72\x8f\x9b\xb2\xd8\xe6\x75\x5e\x16\x15\xca\x5b\x64\xc5\x13\xee\xf2\x62\xbb\x06\xb1\x74\x14\x40\xcf\x3e\xcc\xfc\x2e\x80\xe7\x18\xa9\x99\x33\xab\x88\x2e\x00\x8e\xee\x05\x28\x7a\x32\x7c\x64\x83\x5e\xdb\x76\xd0\x2d\xa1\x75\xbf\x28\x58\xb6\x2d\x3c\x85\x13\xc7\xf9\x33\x23\xb4\x6d\x54\x82\x9e\x4f\x2c\x5a\x96\xce\x3f\x8f\x4a\x95\xba\xdd\x97\x9f\x11\x4d\xd0\x62\x3a\x95\x6d\xb7\xe8\x9d\xd1\x7d\xe7\xa2\xa4\x26\xc8\x65\xf5\x97\xfe\x83\xa6\xcb\x6a\xd1\xbd\x0b\x42\xe1\xbc\xa9\x5d\x51\xef\x9f\xbe\x94\x79\x51\xe3\xdb\x6a\xf3\xd2\x5c\x7d\x57\xbf\x03\x00\x00\xff\xff\x3e\x28\xa0\x11\xc2\x02\x00\x00") - -func testImagesPorterDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesPorterDockerfile, - "test/images/porter/Dockerfile", - ) -} - -func testImagesPorterDockerfile() (*asset, error) { - bytes, err := testImagesPorterDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/porter/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPorterMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x3e\x14\xc5\x9f\xff\xfe\x14\x47\x0d\x0f\xad\x54\x52\xfe\x68\xe2\x81\x09\x4d\x59\xdb\x41\x04\x4a\xa6\x24\x80\x78\x42\x4e\x72\x9b\x5c\x29\xb5\x3d\xdb\x59\xe8\xb7\x9f\x5c\x40\x5a\xb5\xbc\xe5\x9e\xe3\x73\x7f\x3e\x8e\xb0\xd6\xe6\x60\xb9\xeb\x3d\x2e\x2f\xfe\xbf\x42\xd5\x13\xee\xc7\x9a\xac\x22\x4f\x0e\xc9\xe8\x7b\x6d\x5d\x2c\x22\x11\xe1\x81\x1b\x52\x8e\x5a\x8c\xaa\x25\x0b\xdf\x13\x12\x23\x9b\x9e\x3e\x95\x25\x9e\xc8\x3a\xd6\x0a\x97\xf1\x05\xe6\xc1\x30\xfb\x90\x66\x8b\xaf\x22\xc2\x41\x8f\xd8\xcb\x03\x94\xf6\x18\x1d\xc1\xf7\xec\xb0\xe3\x81\x40\x6f\x0d\x19\x0f\x56\x68\xf4\xde\x0c\x2c\x55\x43\x98\xd8\xf7\xc7\x35\x1f\x21\xb1\x88\xf0\xf2\x11\xa1\x6b\x2f\x59\x41\xa2\xd1\xe6\x00\xbd\xfb\xdb\x07\xe9\x8f\xc0\xe1\xeb\xbd\x37\xd7\xab\xd5\x34\x4d\xb1\x3c\xc2\xc6\xda\x76\xab\xe1\xdd\xe8\x56\x0f\xe9\x7a\x9b\x95\xdb\xf3\xcb\xf8\xe2\x78\xe4\x51\x0d\xe4\x1c\x2c\xfd\x1a\xd9\x52\x8b\xfa\x00\x69\xcc\xc0\x8d\xac\x07\xc2\x20\x27\x68\x0b\xd9\x59\xa2\x16\x5e\x07\xde\xc9\xb2\x67\xd5\x2d\xe1\xf4\xce\x4f\xd2\x92\x88\xd0\xb2\xf3\x96\xeb\xd1\x9f\x94\xf5\x49\xc7\xee\xc4\xa0\x15\xa4\xc2\x2c\x29\x91\x96\x33\x7c\x4f\xca\xb4\x5c\x8a\x08\xcf\x69\x75\x97\x3f\x56\x78\x4e\x8a\x22\xc9\xaa\x74\x5b\x22\x2f\xb0\xce\xb3\x4d\x5a\xa5\x79\x56\x22\xff\x81\x24\x7b\xc1\x7d\x9a\x6d\x96\x20\xf6\x3d\x59\xd0\x9b\xb1\x81\x5f\x5b\x70\xa8\x91\xda\xd0\x59\x49\x74\x02\xb0\xd3\xef\x40\xce\x50\xc3\x3b\x6e\x30\x48\xd5\x8d\xb2\x23\x74\xfa\x37\x59\xc5\xaa\x83\x21\xbb\x67\x17\x1e\xd3\x41\xaa\x56\x44\x18\x78\xcf\x5e\xfa\xe3\xe4\x9f\x4b\xc5\x42\x94\xc5\xba\xbc\x31\xda\x7a\xb2\x22\x29\xd6\x77\xf8\x76\x03\xb9\x6f\xaf\xbe\x88\x2a\x29\x6e\xb7\x55\xf8\x3f\x9b\xaf\x1f\x8b\x4d\x5a\x2c\xc4\x6d\xfe\x90\x64\xb7\xaf\x4f\xdb\xa2\x4c\xf3\x2c\x68\x83\xf4\xe4\x7c\x88\x79\xdd\xa4\x05\x82\x59\x69\xdf\xb2\xc5\xd9\xdc\xf5\x34\x0c\x30\x53\xbb\x58\x08\x7a\x0b\x4b\x84\xa8\x59\x5d\x8b\xff\xe2\x78\xc5\x7b\xd9\xd1\xf9\xe8\x79\x88\x5d\x8f\x9a\x15\xce\xe6\x01\x66\x21\x44\xfc\xf3\x2e\xcf\x5e\xae\xc3\x50\xfc\x09\x00\x00\xff\xff\xac\x29\xe8\xdb\xec\x02\x00\x00") - -func testImagesPorterMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesPorterMakefile, - "test/images/porter/Makefile", - ) -} - -func testImagesPorterMakefile() (*asset, error) { - bytes, err := testImagesPorterMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/porter/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPorterVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesPorterVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesPorterVersion, - "test/images/porter/VERSION", - ) -} - -func testImagesPorterVersion() (*asset, error) { - bytes, err := testImagesPorterVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/porter/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPorterLocalhostCrt = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x94\x4b\xaf\xba\x48\x1b\xc4\xf7\x7c\x8a\x77\x6f\xde\x78\x01\x01\x17\xb3\x78\x9a\x6e\x6e\xd2\x4a\x23\x08\xb2\xa3\x3d\x02\xc2\x01\x14\x90\x56\x3e\xfd\xe4\x7f\x26\x99\x4c\xe6\x52\xcb\xa7\x92\x7a\x16\xf5\x4b\xfd\xff\x97\x10\xb1\x9c\xc3\xff\x0c\x12\x84\x8e\xe9\x18\x10\x92\x9f\xab\x44\x1d\x07\x5b\xa1\x61\x40\x61\x15\x20\x1c\x04\x85\x13\xc0\x11\xe0\xb5\xd9\xbe\xf1\xf0\xc9\xca\x43\x8a\x4e\xc9\x10\xc5\xe5\x20\x30\xbb\xb8\xfb\x2e\x75\xca\xe9\x7a\x00\x46\x3c\xc4\x40\x48\xa4\x22\x8c\x82\x62\xc1\x3a\x22\x46\x49\x6d\x16\x1f\xc6\xf4\x84\x30\x9f\xa1\x30\xc5\x4a\xa6\x18\xde\x14\x13\x41\x31\x08\x8a\x51\x66\x81\xfe\xa1\xb8\x58\x51\x4c\x3e\xc7\x90\x6c\xa4\x1f\xc3\xec\xc4\x7f\x07\x19\x06\x9c\x9c\xbf\x7f\x47\x88\x01\x2e\x0a\xe2\x4b\x80\x0d\x03\x58\x67\x14\x05\x41\xe0\xca\xbc\x6b\xf4\xd8\xb6\xcc\xd0\xe2\x64\xb8\x6d\x6a\x95\x97\xc0\xde\x55\xfb\x76\xa7\xef\x95\xbc\xc0\x6d\xd1\xb7\x3d\x0f\xa3\xe4\xa5\xce\x62\x5d\x2f\xb9\xd4\xd6\xeb\x75\x6a\xe7\x4e\xea\x3f\x5a\xab\xfb\x9c\x48\x7c\xf1\x9e\x36\xba\x07\x77\x3a\x59\x22\x28\x2c\x78\xc9\x56\x3f\xe6\x72\x93\xdf\x9c\xb6\x1a\xd6\xd9\x2d\x31\x6f\x8f\x2c\xb9\x6a\xfb\xa0\x51\xb8\x34\x2f\x73\x21\x03\x12\x93\xcb\x76\xbd\x2b\x76\x8b\x84\xeb\x73\xfa\x44\xd1\xa3\xf3\xd2\xb9\xaa\x22\x1c\xd6\x9b\xcd\xe3\x00\xa7\x5d\x42\xab\xe0\x74\x8c\x46\x6f\xf6\xc9\xc5\xde\xe6\x9e\xba\x26\x93\xe4\x6a\x26\xd6\x46\x71\x6f\xb3\x88\xa7\x10\xb1\xa9\x58\xb7\x83\x47\xbc\x51\xd7\xc6\x05\xef\x76\xaa\xf2\x50\x1f\x8b\x59\xd3\x0a\x35\x44\x99\xea\xfb\xb7\xf9\xdc\x7e\xcd\x4d\x20\x9b\xab\xb3\x6f\x9f\xa5\xc0\xf3\x8f\x5f\xbb\xe2\x29\x78\x67\x5e\xcb\xb2\x93\x67\x55\x4f\x0f\x5c\xe9\xdb\x7d\xb1\xce\x3f\xfc\x95\x1d\xfd\xa4\x11\x68\x8f\x83\x3a\x63\x14\xe6\xef\x16\x9f\x6f\x1b\x45\xed\xdf\xea\x51\x15\x85\xc4\xdd\xfd\xf4\xce\x92\xe9\x7e\xab\xae\x7b\xea\xbf\xd2\x15\xc1\xd5\x7b\xee\x62\xbb\x6a\x4b\xb5\xeb\xee\xc7\xc8\x00\x41\x00\xb2\x43\x47\xad\x8b\xc0\xc5\x05\x9f\x83\x95\x0f\xcc\x5e\x22\x60\x58\x82\x62\x5f\x53\x44\x7f\xd5\xf7\xe5\x32\x46\x29\x74\x96\x61\x0c\x16\xb0\xc8\x44\x82\x22\x0a\xfa\x8f\x47\x04\x41\x4b\xc1\x4c\x0a\x14\x41\xae\x0b\xef\x8f\xa0\x40\x42\xc6\x55\xb8\x17\xc7\x4b\x93\xb2\xe4\x09\x1a\xd2\xd3\xb6\xe2\x9b\x8d\x8d\x6c\x1d\x00\x2c\x9b\xc0\xbf\x89\xfc\xc9\x85\xf4\x17\x2c\xf1\x0f\x0b\x56\x22\xda\xe5\x34\x31\x58\xd9\x98\xc7\x7a\xdc\x86\x10\x3f\xa6\x19\xf2\xec\xa8\x56\xaa\x80\x01\x0b\x75\xa0\xe3\x95\xe1\x6e\xfa\xbc\x6a\x89\xc9\xa6\x51\xa7\x2e\x62\x7a\xb6\x6e\x8c\x6f\x64\x25\xd3\x2d\xce\x70\x2f\xf3\x48\x97\x65\xe7\xcc\x1c\x14\x4e\x83\xd7\x78\x0d\xdb\x8d\x9b\x4b\xdf\x8f\x9c\xc4\x9f\xbc\x18\xe6\xa7\xb5\x57\x0c\x4d\xaa\x1d\xfe\x89\x92\x9b\x46\xcc\xbb\x1b\xfb\x1a\xac\xe2\xa7\xb8\xdb\xe3\x91\xf2\x5a\xaf\x74\x45\x5f\x1a\xcd\x7d\xef\x28\x78\xfb\x58\x5c\x8a\xe4\x5c\xbc\x7a\x7f\xed\xb0\xed\xa8\xed\xd8\x32\xc5\x1f\x2c\x11\x77\x5c\xd8\xa3\x3b\xf5\x46\xb7\x4b\xed\xec\xda\x18\xba\xba\xbd\x75\x6e\x6a\xa9\x83\xb5\x89\xbe\x55\xc5\x71\xc6\xe0\x82\x53\xde\x6f\xb7\xd1\xfe\x7c\x77\xf5\x5e\x5f\x33\x55\x6b\x0f\xc6\xb4\xd4\xb1\x94\x2b\xcb\xfd\x26\x5f\x34\x77\xff\x9c\x85\xd4\x83\xef\x6f\x75\x36\x42\x4d\x77\x16\xf2\xfd\xe4\xfb\x47\xf9\x63\x34\xde\x72\x13\x7d\x3d\x94\x6c\xbd\x72\x9f\x7d\x3e\x2d\x4a\x9e\xeb\xa3\x82\xa3\xeb\xf3\x7b\x96\x94\xc4\xec\x23\x7b\x78\x04\x38\xbd\x5a\x89\xe9\x78\x2d\x0c\x87\xe3\x23\xdf\x6b\x51\x13\x45\x2b\x51\x73\xb3\x28\x6b\xe7\x37\xe9\x67\x3e\xc8\x01\xff\x73\x52\x7e\x0f\x00\x00\xff\xff\x75\xaa\xd9\x75\x6f\x04\x00\x00") - -func testImagesPorterLocalhostCrtBytes() ([]byte, error) { - return bindataRead( - _testImagesPorterLocalhostCrt, - "test/images/porter/localhost.crt", - ) -} - -func testImagesPorterLocalhostCrt() (*asset, error) { - bytes, err := testImagesPorterLocalhostCrtBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/porter/localhost.crt", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPorterLocalhostKey = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\xd5\xa7\x12\xa4\x00\x02\x04\x50\xcf\x57\xac\xa7\xae\xc8\x49\x9c\x20\xc3\x90\x33\x8c\x23\x0f\x39\xc7\xaf\xbf\xda\xd5\xd7\xb6\x4d\x8b\xae\x7a\xff\xf9\x1b\x4e\x94\x55\xf3\x8f\xeb\xb1\x7f\x6c\x57\x0d\x59\x5f\xfc\xa3\x89\xc9\xbf\x06\x30\x54\x55\x9c\x6a\x95\x63\x59\x8d\x67\x1d\x91\x1d\x8b\xa3\xc9\xee\x24\x4f\x42\xe3\xbb\x79\x37\x95\xfa\xf3\x21\x72\x82\x6c\x55\xe2\x00\xc6\x7e\x85\x5b\x25\x7f\x94\xfb\x6e\xba\x25\xb5\xda\x42\x04\xf8\xcc\x51\xfa\x71\xd8\x15\xf4\xaf\x03\x87\x3c\x6d\x3f\xaa\xfb\xad\x8f\x29\x97\x3f\xb2\xfa\xd0\x19\x27\xb3\x09\x4f\xe5\xe9\x81\x40\xe5\x97\xc1\x9b\xd2\x7a\xc3\x99\xc8\x43\xb2\x9f\x8b\x77\x9b\x65\x20\xfb\x9d\x36\x03\x09\x39\xab\xf0\x74\x2f\xa0\xdb\x28\x60\x44\x71\xbe\xe6\x30\x49\xde\x50\xef\xa3\x65\x99\x8e\x69\xf9\x59\xda\xc1\x9c\x8e\xe4\x8f\x29\xa9\x84\x07\x9f\x06\xed\xd6\x55\x4f\x9f\x2b\x10\x78\xf4\xb8\x05\xf6\x81\xf1\x5a\x31\xbb\x7b\xc7\xb9\x3c\x28\x44\xe5\xb5\x39\x07\xf6\x1e\x18\x71\xb4\xd8\xda\x8c\xcb\x48\xd9\xe7\x21\xcc\x86\xb4\x4e\x34\x43\x99\x51\x81\x59\x5f\x25\x8f\xdd\x00\xa0\x8b\x50\xdc\x68\x02\x43\xf9\x95\x3b\xea\xf0\x91\xe5\xb6\xb2\xd7\xbb\x43\xce\xe6\xc8\x17\x21\x84\x3e\x07\x31\xe1\x4c\x99\xb1\xe2\x64\xca\xee\xcc\x5e\x82\x15\xe5\x66\x48\x65\xed\x72\x2a\x13\x05\xac\x3c\xb7\x75\x0b\x24\xcd\x25\xf8\x21\xcd\x6b\xba\x40\x62\x74\x1c\xcb\x56\xac\x5f\x52\x5a\xa5\xb2\x34\x8d\x4a\x38\xaa\xc0\x3a\x2c\xc7\x4e\x2a\xc7\xca\xc8\xe5\x0e\x91\xef\x90\xc7\xdc\xb2\x85\x0e\xa0\x43\xfe\xb4\x55\x7f\x86\x24\x86\x10\xe6\x6c\xbd\xa4\xc9\x55\xe1\x5b\x9c\xb9\x74\x69\xd9\x10\xe0\x1d\x63\x10\xe4\x81\xec\xcd\xaf\xa6\xd7\xe6\xc1\x05\xd5\x0b\x1b\xcb\xa7\xb1\xe3\x28\xea\xd2\x01\xf2\x0c\xb4\x9f\xf7\xcc\xa0\xb9\x1f\xf6\x81\x42\x85\x79\x2a\x6c\xf4\xab\xf4\x71\x46\x8e\xc1\x7d\x90\xb1\x61\xad\x77\xb3\x74\xfc\x7e\x43\xee\x96\x5f\x3b\xfc\x0a\x35\xed\x11\xd3\x81\xca\x53\x17\x03\xb1\x21\x3b\xe7\x6f\x2f\x9a\xee\xfe\x71\x0a\xa7\x0e\x92\xf6\x2e\xc3\xba\x69\xaf\xc2\x58\xd8\x94\xf6\x73\xcc\x2b\xbe\xaa\x14\x68\x2a\x18\xdd\xb0\x1a\x59\xd1\x7a\xa0\xe7\xd9\x5c\x4f\x3e\xed\xf4\x02\x4c\x9a\x8d\xe9\xbb\x5b\x78\x06\x77\x14\x19\x8c\x10\x89\xd3\x2f\x42\x7d\x19\x17\xb4\xce\x25\x38\x23\x9d\xbf\x79\x9d\x8e\xb9\x4a\x2e\x88\x4e\x54\x3d\x2c\xd6\x39\xd4\xec\xd5\x5d\x9b\x37\xc3\xbe\x00\xce\xcf\x92\x19\x27\xcc\xd4\x6e\x1c\xab\xaf\x73\xb3\x2c\xf5\xef\x6d\xa7\xbb\xf7\xa5\xa3\x80\x83\x50\xba\x38\xa3\xb7\x90\x73\x74\x84\x9e\xec\x2b\x7d\x7b\xed\x96\x61\xf5\x1c\x5a\xee\x52\x19\x2a\x05\xce\xce\xf0\x7a\x3a\xe0\xeb\x44\x64\xe1\xc8\x94\x7e\x4c\x3b\xbf\xd8\xa8\x8d\x75\xb6\x5a\xca\x8d\x9d\x0f\xa9\x74\x2a\xd5\x4e\xfb\x86\x75\x11\xad\xe7\x43\x8f\x1c\xae\x3a\x5a\x96\x4c\x8e\xe5\xda\x03\x03\xec\x79\x36\xb4\x73\x03\x7e\x1a\x1a\xdc\xbf\x57\x2f\x54\xa9\x6f\xdb\x64\xb0\x9c\xca\xc8\xe1\x9a\xca\x14\x35\xf6\xf7\x45\xfe\xd6\xdd\x3c\x62\xac\x83\x08\x7d\xe3\x6d\x0e\x14\x53\xea\xf9\x14\xf0\x89\xe0\x5b\xc7\x57\x41\x6a\xc1\x09\x67\x39\xc8\x60\x9a\xca\x26\x90\xd3\xac\x4d\x32\x88\xb0\x50\x6a\xe4\x19\x80\x89\xc0\xd5\x2c\x3e\x2f\xf9\x73\x3d\xd3\xae\xe1\xdb\xbf\xc5\x97\x0d\x42\x80\xc5\xa5\xed\x62\x7e\x96\x6d\x6e\xb4\x89\x0c\xce\x52\xe3\x95\x09\x06\x75\x12\x5c\x57\xa7\x11\xb1\x8b\xd5\x14\x8c\x52\x19\x18\x31\x25\x47\xe7\x5e\x8d\xdb\x63\x99\x03\x85\x5f\xb1\x2e\xce\x91\xfc\x80\x10\x14\xaa\x26\xee\xf6\xae\xc2\xaa\xc5\x7b\xf1\x5e\x23\xca\x69\x50\xd7\x0b\x6c\x6f\x3b\xac\x6a\x55\x50\x5a\x3b\xf0\x3e\xd3\x93\xd2\xdb\x6d\x07\x27\x21\x12\xe1\x41\x15\x27\x29\xe6\xcd\x28\x22\x40\xb5\x6d\x86\x2c\xbc\x1b\xde\xe7\x21\x2a\xfb\x58\x36\xd6\x84\xcf\x64\xb5\x86\xac\x6d\x8e\x30\x48\xc3\x5b\x67\x0a\xd3\x7c\x9d\x70\x0f\x23\xf5\x19\x83\x93\xd2\x9d\x1c\xed\x3a\xf3\x34\xd3\x36\x31\x00\x47\x95\xf0\x44\x54\xa2\xfc\xa6\x11\xfe\x6d\xcb\xe1\x9a\x41\x4d\x53\xf9\x49\x09\xec\xf1\x93\x8c\xd4\x85\x5d\x14\x31\xf7\xf1\xf7\x65\xec\x70\xa2\x2d\x51\x3d\x73\x92\x0c\x87\x22\xe7\xbb\xc7\xeb\x80\x13\x12\x74\x69\x64\xe6\xb0\xf3\xa9\xe6\xe3\x3d\x8e\x02\x1d\xa4\x7e\x43\x42\x01\x47\xd5\xab\xe0\xfb\x9d\x49\x0b\xb8\xd8\xcb\x25\xb8\xc8\xcf\xb7\x57\x2f\x8c\xa4\x66\xc9\xce\xd6\x9b\x1a\x9d\xa1\x80\x4f\x7d\x0b\x3b\x5a\x12\x3f\x12\xf5\x72\x47\xe0\x2a\x67\x56\x4a\x47\xe3\x6a\xe5\x3b\xe5\x45\x3b\x36\x87\x88\xef\x08\x42\x45\xae\xb5\x17\xc6\x87\xb1\xd6\x79\x74\x50\x71\xc9\xe8\xd3\xdb\x63\x59\x05\x64\xc8\xf3\xc2\xf1\xaa\x9f\xe9\x42\xf6\x58\x0c\x11\xa7\x1f\x5f\x61\x10\xbe\xc5\x57\x2a\x27\x06\x42\xc8\xf0\x72\xee\xa0\x3c\xad\x11\xb4\x03\x97\x64\x46\xef\x43\x0c\x10\xb5\x4c\x89\x6a\x80\x83\x01\x6c\x25\x1e\x50\xf3\x43\x86\xe8\x2e\x53\x28\x94\x0c\x51\x68\xfc\x08\x28\xd5\xf4\x46\x89\xa5\x05\x94\x25\x54\xae\x71\xfa\x0b\xad\x70\xb0\xdb\x03\xb7\x78\x55\x33\x3a\x31\x9d\x79\xa0\xde\x25\x9c\x08\x10\xea\xfa\x63\x27\x99\xb5\xaa\x71\x64\x2d\xb6\xf5\x16\xcd\xff\x4a\x84\x4e\xf1\x9f\x8f\xc2\x25\xc9\x74\xed\x79\x51\x6b\x05\x57\x89\x7a\x64\x83\x65\xe4\xd6\xb1\x1d\x79\xd4\x16\x1d\xac\x48\x52\x30\xe0\xf9\x42\xb5\xc2\xda\x3d\x76\xab\x61\xc9\x27\xec\xd9\xb3\x49\x2d\xe1\x8f\x79\xed\x55\xda\xab\xf8\xd5\xbb\x96\xa4\x6a\xea\x29\xee\x40\x35\x09\x22\xaf\x85\xc9\x96\xf4\x99\x0f\xdd\x98\xa6\x94\x00\x18\xb3\xf0\xca\xb3\x3b\x6c\x4b\x6e\x71\x10\xfe\x31\x31\x94\x49\x0b\x53\x45\xf4\x6d\xb4\x97\x87\x60\xf4\x97\xbb\x05\x03\xfa\x44\x29\x4e\xb1\x64\x42\x85\xf9\x7f\x81\x7f\xa4\x88\xa6\xf0\xff\xa9\xf9\x5f\x00\x00\x00\xff\xff\x45\x85\x28\xa6\x8b\x06\x00\x00") - -func testImagesPorterLocalhostKeyBytes() ([]byte, error) { - return bindataRead( - _testImagesPorterLocalhostKey, - "test/images/porter/localhost.key", - ) -} - -func testImagesPorterLocalhostKey() (*asset, error) { - bytes, err := testImagesPorterLocalhostKeyBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/porter/localhost.key", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPorterPodJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x93\xd1\xab\xda\x30\x14\xc6\x9f\xed\x5f\x11\xf2\x6c\x8d\x9d\x65\x48\xe9\xfa\x32\x3a\x18\x13\x26\x2a\xc2\x98\x43\x62\x7b\xb4\xa1\x6d\x52\x92\xe8\x90\x4b\xff\xf7\x4b\xdb\x8b\xa6\xb7\x0a\xd6\x7b\x9f\x8c\xe7\x7c\xf9\x9d\x8f\xd3\x2f\x2f\x16\x42\x38\x65\x3c\xc6\x1e\xc2\x73\x11\xe3\x61\x55\xa0\x05\x5b\x83\x54\x4c\xf0\xaa\x7c\x72\x9a\x6a\x0e\x9a\xc6\x54\x53\xec\xa1\xea\x1a\x42\x98\xd3\x1c\x2a\x45\x21\xa4\x06\x89\x2d\x84\xca\x5a\xa9\x0a\x88\xae\xaa\x48\x70\x4d\x19\x07\xa9\xb0\x87\xfe\xd6\x35\xf4\xd6\xbb\x45\x19\x5e\x3b\x2c\xa7\x87\xba\x75\x88\xe4\x88\x09\x92\x1e\x77\x20\x39\x68\x50\x36\x7c\x01\x5b\x83\xd2\x76\xad\x51\xa4\xb9\x6c\xd3\x3c\xfe\xea\x7a\xce\x68\x6c\x62\x80\x9f\x8c\xc9\xed\xe9\x2d\x07\xcb\x70\xb1\x0e\xb7\xf3\xdf\x8b\xd5\x76\x6a\x12\x6a\xd1\x89\x66\xc7\x5a\xb5\x17\x02\x1b\xad\x72\xd8\x0f\xec\xdc\x05\xfb\x89\xce\xb3\xc0\x4f\x80\xc6\x81\x4f\x9a\x9f\x9d\x88\xcf\x81\x4f\x51\x22\x61\xff\x6d\x83\x89\x84\xff\x92\x69\xc8\x61\x83\x83\xe6\xac\x81\xa3\x8c\xf1\xd4\x27\x34\xf0\x49\xa3\x27\x35\xe9\x39\x97\xab\xd9\xb2\x71\xea\xba\x93\xbb\x56\x75\xa6\xd0\xd3\x7b\x30\x26\xb8\x1f\x5a\x86\xce\x94\x6d\x2e\xa4\x72\xf5\x29\x4b\x19\x5c\x1c\x7f\x0f\x17\xab\xed\x8f\x9f\xb3\xb0\x65\x74\x70\xf5\x49\x32\x11\xd1\x2c\x11\x4a\x8f\x22\xa9\x7b\xd2\x7f\x85\x7f\x1e\x85\xa7\x70\x6e\xc1\x2f\xe7\x7f\x46\xd2\xab\x57\xa0\x1e\xcb\x7a\xd1\x4d\xf8\xe5\xa1\xce\x85\xd4\xd8\x43\xd3\x71\xcf\xcf\x5b\x74\xc3\xdd\x61\x3a\x7d\x99\x37\x62\xf8\x1e\xea\xba\x93\xfe\xd4\x4e\xf4\xba\x54\xf7\xf6\xc2\x2d\xb3\x52\xfd\x2b\xad\xd2\x7a\x0d\x00\x00\xff\xff\xa9\x2b\x1f\x51\x4a\x05\x00\x00") - -func testImagesPorterPodJsonBytes() ([]byte, error) { - return bindataRead( - _testImagesPorterPodJson, - "test/images/porter/pod.json", - ) -} - -func testImagesPorterPodJson() (*asset, error) { - bytes, err := testImagesPorterPodJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/porter/pod.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesPorterPorterGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\x55\x5f\x6f\xdb\xb6\x17\x7d\x16\x3f\xc5\x81\x80\xfe\x7e\x72\xa7\x49\x69\x80\xbd\xb8\xf0\x83\x97\x3a\x8b\x51\xc3\x09\x2c\xf5\x1f\x86\x22\xa0\xa5\x2b\x89\x88\x4c\x2a\x24\x65\x57\x28\xf2\xdd\x07\x4a\x72\xea\x34\xd9\xb0\xd7\xc1\x80\x6d\x92\x87\xe7\x9e\x7b\xee\xbd\x52\xfc\x9a\x5d\xa8\xa6\xd3\xa2\xac\x2c\xce\xcf\xde\xfc\x86\xb4\x22\xbc\x6f\xb7\xa4\x25\x59\x32\x98\xb7\xb6\x52\xda\x44\x8c\xad\x44\x46\xd2\x50\x8e\x56\xe6\xa4\x61\x2b\xc2\xbc\xe1\x59\x45\x18\x4f\x42\x7c\x24\x6d\x84\x92\x38\x8f\xce\x10\x38\x80\x3f\x1e\xf9\x93\xb7\xac\x53\x2d\x76\xbc\x83\x54\x16\xad\x21\xd8\x4a\x18\x14\xa2\x26\xd0\xb7\x8c\x1a\x0b\x21\x91\xa9\x5d\x53\x0b\x2e\x33\xc2\x41\xd8\xaa\x0f\x32\x52\x44\xec\xcb\x48\xa0\xb6\x96\x0b\x09\x8e\x4c\x35\x1d\x54\x71\x8a\x02\xb7\x8c\x01\x40\x65\x6d\x33\x8d\xe3\xc3\xe1\x10\xf1\x5e\x65\xa4\x74\x19\xd7\x03\xca\xc4\xab\xe5\xc5\x62\x9d\x2c\x7e\x3d\x8f\xce\x18\xfb\x20\x6b\x32\x06\x9a\xee\x5b\xa1\x29\xc7\xb6\x03\x6f\x9a\x5a\x64\x7c\x5b\x13\x6a\x7e\x80\xd2\xe0\xa5\x26\xca\x61\x95\xd3\x79\xd0\xc2\x0a\x59\x86\x30\xaa\xb0\x07\xae\x89\xe5\xc2\x58\x2d\xb6\xad\x7d\x62\xd0\x51\x95\x30\x38\x05\x28\x09\x2e\xe1\xcf\x13\x2c\x13\x1f\xbf\xcf\x93\x65\x12\xb2\x4f\xcb\xf4\xea\xfa\x43\x8a\x4f\xf3\xcd\x66\xbe\x4e\x97\x8b\x04\xd7\x1b\x5c\x5c\xaf\xdf\x2d\xd3\xe5\xf5\x3a\xc1\xf5\x25\xe6\xeb\x2f\x78\xbf\x5c\xbf\x0b\x41\xc2\x56\xa4\x41\xdf\x1a\xed\xb4\x2b\x0d\xe1\xac\xa3\x3c\x62\x09\xd1\x93\xe0\x85\x1a\xc4\x98\x86\x32\x51\x88\x0c\x35\x97\x65\xcb\x4b\x42\xa9\xf6\xa4\xa5\x90\x25\x1a\xd2\x3b\x61\x5c\xf1\x0c\xb8\xcc\x59\x2d\x76\xc2\x72\xdb\xaf\x9f\xa5\x13\xb1\xd7\x31\x63\x71\x8c\x39\xac\x90\x1d\xb6\x42\x72\xdd\x0d\x71\xc8\xd8\x9e\x4f\x69\x6b\x22\x16\xc7\x0e\xb6\x21\x9e\x1b\x90\xdc\x63\xcf\xb5\x79\xdb\x03\x69\x4f\xba\x73\xeb\x63\x01\x0b\xa5\x77\x48\x16\x9b\x8f\x8b\xdb\x9b\xeb\x4d\x7a\xfb\x39\xc4\xa1\x22\x4d\xf8\xec\xdc\xe3\xd8\xf3\x5a\xe4\x8e\xcd\x51\x43\xb6\xbb\x2d\xe9\xb0\x5f\x90\x86\xb1\x5c\x5b\xa7\x1c\x57\x69\x7a\x03\x43\x7a\x4f\x1a\x87\x4a\x64\xd5\xb0\x30\x7d\x8c\x51\xc2\xff\x8d\x63\x6b\xc9\xb1\x09\x09\x4d\xa6\x51\xce\x28\xab\xc0\x65\x87\xfb\x96\x74\x17\xb1\x86\x67\x77\xce\xa4\x1d\x17\x92\x31\xb1\xeb\xe3\x06\xcc\xf3\x8b\x9d\xf5\x99\xe7\xd7\xaa\x74\x3f\x92\x6c\xec\x9a\xcd\xfd\x57\xc6\x7d\xbb\x3a\xcb\xd2\xf8\x6c\xc2\x58\xa6\xa4\xb1\x68\x34\x15\xe2\x1b\x66\xf0\x4f\x12\xf4\xc7\x43\x5b\x9b\x9b\x9f\xce\xd3\x55\x72\xc4\xb0\xa2\x95\x59\xaf\x21\x98\xe0\x3b\xf3\x9c\x77\xb7\x21\xf6\x77\x98\xce\xa0\xb9\x2c\x09\xca\x44\x0b\xb9\x17\x5a\x8d\x10\x2f\x8e\x71\xd3\xda\xc1\x62\x5b\xb9\x72\x6c\xa9\x50\x7a\xe8\x8a\x42\x68\x63\x31\x83\x11\xa5\x74\xd9\x37\xce\xb9\x3f\xcf\xbe\x86\x7d\xdd\xfb\xcb\x27\x17\xa9\x76\xdd\x7b\x44\xbd\xf9\x8a\x80\xf6\x24\x21\xfa\x9a\x69\x02\xd7\x84\x5d\x5b\x5b\xd1\xd4\x84\xd9\x70\x3d\xab\xb8\xe6\x99\x25\x6d\x26\x11\xf3\xbc\xfe\xaa\x53\x3b\xfa\x12\x25\x4d\x2d\xec\x3a\xd8\xdf\x85\xf0\x67\x7e\x88\xf3\x09\xf3\xbc\x3b\xea\x1c\xe6\xa8\x86\x79\x5e\x5f\xa2\x1f\x7b\x6f\xdc\x9e\x28\x1e\x59\xae\xf8\x68\x5b\x70\x47\x5d\x38\x5a\x3c\xe4\xef\xf5\xa5\x3a\x89\x98\x6a\xb1\x7b\x01\xec\xa0\xa5\x1a\x1a\xe4\x46\x69\x1b\xb8\x7b\xe1\xd0\x1b\xee\xf0\xe1\x1f\x23\x3e\xd6\xed\x5f\x06\xfd\x81\x3f\x8d\x9b\xae\x92\xbf\x09\xfd\xc0\x98\x67\xa8\xa6\xcc\xe2\xfb\x03\x7b\x18\x3b\xe1\x45\xb1\x63\xcc\x5e\x48\x6f\xf5\xff\x5c\x47\x46\x49\x3f\x06\x4e\xdc\x3c\xcf\xf5\x14\xfe\x59\xd4\x7f\xa6\x3e\x7e\xe9\x27\x27\x64\x9e\x77\xc5\x65\x5e\x93\x9e\xf6\x4f\xcc\x68\x5c\x5d\xb6\x32\x0b\x5c\xbc\xe0\x30\xec\x6f\xc6\x19\xf9\xa4\x85\x75\x73\xa7\xf1\x7a\xdc\xbf\x6f\xc9\xd8\xd1\x82\x62\x67\xa3\xcb\x46\x0b\x69\x83\xc3\x69\x32\x93\xd0\xa5\xe3\xd5\xaa\x8c\x6e\xdc\x69\x11\xf8\xe3\x88\x2a\x39\xcc\xf3\xab\x7b\x14\x5c\xd4\x94\x4f\xf1\x6a\xef\x0f\x73\x1d\xc2\x44\x2b\x61\x2c\xc9\xb9\xcc\xfb\x5c\x82\xc9\xe4\xa9\x11\x2f\xb8\xf7\x1f\xf1\x22\x23\x6d\x2f\xdd\xcb\x6f\x3a\x73\x03\xfc\x07\x59\x92\xfb\xc0\xbf\x58\x6c\xd2\xdb\xcb\xe5\x6a\xe1\x4f\x98\xeb\xbd\x9a\x64\x70\x84\x4e\x30\x9b\xe1\xac\x67\x7f\xbc\x3d\x83\x5f\xab\x8c\xd7\x95\x32\x36\xca\xb4\x7b\x30\x3d\x30\x37\x4c\x2f\x70\xbf\x5f\x7c\xf9\x99\x7a\x04\x9e\x30\x1f\xaf\x3e\x21\xbe\xa3\xce\x7f\x56\x41\x5b\x1b\x3c\xaf\x62\xff\xda\x3e\xca\x9b\xbd\xba\x0f\x31\x32\xce\x5e\x2e\xf1\x11\xfa\x88\x7b\x5e\xf5\x74\x95\x04\xcf\x60\x7d\x27\xfc\x15\x00\x00\xff\xff\x16\x58\xd5\x52\xbe\x08\x00\x00") - -func testImagesPorterPorterGoBytes() ([]byte, error) { - return bindataRead( - _testImagesPorterPorterGo, - "test/images/porter/porter.go", - ) -} - -func testImagesPorterPorterGo() (*asset, error) { - bytes, err := testImagesPorterPorterGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/porter/porter.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesRedisBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x0a\x10\x00\x00\xff\xff\xe5\x8d\xa8\xc0\x5c\x00\x00\x00") - -func testImagesRedisBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesRedisBaseimage, - "test/images/redis/BASEIMAGE", - ) -} - -func testImagesRedisBaseimage() (*asset, error) { - bytes, err := testImagesRedisBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/redis/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesRedisDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x51\x6f\x9b\x3e\x14\xc5\xdf\xfd\x29\x8e\xe0\xe5\xff\x97\x02\x74\x9d\xb4\x6a\xdb\x13\x25\x74\x45\x4d\xa0\x83\xa4\x5d\x35\x4d\x95\x63\x6e\xc0\x1a\xb1\xa9\x6d\x4a\xf3\xed\x27\x68\xab\xad\x9b\x9f\x6c\xdf\xe3\xe3\x9f\x8f\xaf\x8f\x44\xf7\x47\x23\x9b\xd6\xe1\xf4\xe4\xdd\x19\x36\x2d\xe1\x6a\xd8\x91\x51\xe4\xc8\x22\x1e\x5c\xab\x8d\x0d\x99\xcf\x7c\xac\xa4\x20\x65\xa9\xc6\xa0\x6a\x32\x70\x2d\x21\xee\xb9\x68\xe9\xb5\xb2\xc0\x0d\x19\x2b\xb5\xc2\x69\x78\x82\xff\x26\x81\xf7\x52\xf2\xfe\xff\xcc\x7c\x1c\xf5\x80\x03\x3f\x42\x69\x87\xc1\x12\x5c\x2b\x2d\xf6\xb2\x23\xd0\x93\xa0\xde\x41\x2a\x08\x7d\xe8\x3b\xc9\x95\x20\x8c\xd2\xb5\xf3\x35\x2f\x26\x21\xf3\x71\xf7\x62\xa1\x77\x8e\x4b\x05\x0e\xa1\xfb\x23\xf4\xfe\x4f\x1d\xb8\x9b\x81\xa7\xd1\x3a\xd7\x7f\x8a\xa2\x71\x1c\x43\x3e\xc3\x86\xda\x34\x51\xf7\x2c\xb4\xd1\x2a\x4b\xd2\xbc\x4a\x83\xd3\xf0\x64\x3e\xb2\x55\x1d\x59\x0b\x43\x0f\x83\x34\x54\x63\x77\x04\xef\xfb\x4e\x0a\xbe\xeb\x08\x1d\x1f\xa1\x0d\x78\x63\x88\x6a\x38\x3d\xf1\x8e\x46\x3a\xa9\x9a\x05\xac\xde\xbb\x91\x1b\x62\x3e\x6a\x69\x9d\x91\xbb\xc1\xbd\x09\xeb\x95\x4e\xda\x37\x02\xad\xc0\x15\xbc\xb8\x42\x56\x79\x38\x8f\xab\xac\x5a\x30\x1f\xb7\xd9\xe6\xb2\xd8\x6e\x70\x1b\x97\x65\x9c\x6f\xb2\xb4\x42\x51\x22\x29\xf2\x65\xb6\xc9\x8a\xbc\x42\x71\x81\x38\xbf\xc3\x55\x96\x2f\x17\x20\xe9\x5a\x32\xa0\xa7\xde\x4c\xfc\xda\x40\x4e\x31\x52\x3d\x65\x56\x11\xbd\x01\xd8\xeb\x67\x20\xdb\x93\x90\x7b\x29\xd0\x71\xd5\x0c\xbc\x21\x34\xfa\x91\x8c\x92\xaa\x41\x4f\xe6\x20\xed\xf4\x99\x16\x5c\xd5\xcc\x47\x27\x0f\xd2\x71\x37\xef\xfc\xf3\xa8\x90\xb1\x8b\xb2\x58\x4f\xf8\x69\xb6\x8e\xbf\xa4\x8c\x25\x65\x51\x55\xf7\xe7\xdb\x6c\xb5\xbc\x4f\x8a\xeb\x3b\x3c\xd0\x61\x08\xbe\xa6\xeb\x6d\x5c\x26\x97\x81\x9d\xbc\x04\xa2\xc1\x9a\x68\x27\x55\xc4\x58\xb9\xcd\xc1\xfb\x9f\xe0\x75\x8d\x20\x50\x3a\x10\x73\x73\x19\xaa\xa5\x65\x6c\xb6\x98\xe7\xa1\xd0\x6a\x8f\x88\x9c\x88\x7e\xaf\x19\x4b\xbf\x5d\x17\x55\x8a\x0f\xef\xcf\x3e\xb2\x9b\x62\xb5\x5d\xa7\x88\x6a\xee\x38\x63\xc9\x7a\x89\xef\xde\xac\x0d\x2c\x99\x47\x32\xde\x02\xde\x5f\x06\xde\x0f\xf6\x2b\x00\x00\xff\xff\xa7\x31\xc7\x9f\x0e\x03\x00\x00") - -func testImagesRedisDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesRedisDockerfile, - "test/images/redis/Dockerfile", - ) -} - -func testImagesRedisDockerfile() (*asset, error) { - bytes, err := testImagesRedisDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/redis/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesRedisVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesRedisVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesRedisVersion, - "test/images/redis/VERSION", - ) -} - -func testImagesRedisVersion() (*asset, error) { - bytes, err := testImagesRedisVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/redis/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesRedisRedisConf = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xca\xcc\x4b\x51\x30\xd0\x03\x43\xae\x94\xcc\x22\x05\xfd\x94\xc4\x92\x44\x2e\x40\x00\x00\x00\xff\xff\xcd\x81\x31\xc0\x17\x00\x00\x00") - -func testImagesRedisRedisConfBytes() ([]byte, error) { - return bindataRead( - _testImagesRedisRedisConf, - "test/images/redis/redis.conf", - ) -} - -func testImagesRedisRedisConf() (*asset, error) { - bytes, err := testImagesRedisRedisConfBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/redis/redis.conf", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerGitignore = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xce\xcf\x2b\x2e\xcd\x4d\x2d\xe2\x82\x32\x74\x93\x0b\x4a\xf5\x91\xd8\x20\xf1\x92\xa2\xfc\x9c\x9c\xd4\x22\x7d\x04\x93\x0b\x10\x00\x00\xff\xff\x1b\x0f\x16\x78\x37\x00\x00\x00") - -func testImagesResourceConsumerGitignoreBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerGitignore, - "test/images/resource-consumer/.gitignore", - ) -} - -func testImagesResourceConsumerGitignore() (*asset, error) { - bytes, err := testImagesResourceConsumerGitignoreBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/.gitignore", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\xcd\xb6\x28\xd6\x4b\x4f\x2e\xd2\xcb\xcc\xd7\x4f\x49\x4d\xca\x4c\xcc\xd3\x4d\x4a\x2c\x4e\xd5\x05\x4b\x5a\x19\xe8\x99\xe8\x19\x72\x25\x16\xe5\xe2\x54\x56\x94\x8b\x50\x84\xc7\x34\x90\x24\x54\x61\x41\x41\xb2\x99\x49\x4e\x2a\x2e\xa5\x50\x69\xa8\x62\x40\x00\x00\x00\xff\xff\xa7\xc3\x7f\x2e\xa4\x00\x00\x00") - -func testImagesResourceConsumerBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerBaseimage, - "test/images/resource-consumer/BASEIMAGE", - ) -} - -func testImagesResourceConsumerBaseimage() (*asset, error) { - bytes, err := testImagesResourceConsumerBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xdf\x6e\x9b\x4c\x10\xc5\xef\xf7\x29\x8e\xcc\xcd\xf7\x49\x36\xb8\xb9\xa8\xa2\xf6\x8a\xd8\xa4\x41\x49\x20\x05\xdc\xd4\xaa\xaa\x68\xbd\x8c\x61\x24\xbc\x4b\x76\x97\x12\xbf\x7d\x85\xf3\x47\x89\xca\x15\x3b\x73\xe6\xec\x6f\xce\x06\x58\x99\xfe\x68\xb9\x69\x3d\xce\x96\x9f\x3e\xa3\x6a\x09\xd7\xc3\x8e\xac\x26\x4f\x0e\xf1\xe0\x5b\x63\x5d\x28\x02\x11\xe0\x86\x15\x69\x47\x35\x06\x5d\x93\x85\x6f\x09\x71\x2f\x55\x4b\xaf\x9d\x39\x7e\x90\x75\x6c\x34\xce\xc2\x25\xfe\x9b\x04\xb3\x97\xd6\xec\xff\xaf\x22\xc0\xd1\x0c\x38\xc8\x23\xb4\xf1\x18\x1c\xc1\xb7\xec\xb0\xe7\x8e\x40\x4f\x8a\x7a\x0f\xd6\x50\xe6\xd0\x77\x2c\xb5\x22\x8c\xec\xdb\xd3\x35\x2f\x26\xa1\x08\xb0\x7d\xb1\x30\x3b\x2f\x59\x43\x42\x99\xfe\x08\xb3\x7f\xaf\x83\xf4\x27\xe0\xe9\x6b\xbd\xef\xbf\x44\xd1\x38\x8e\xa1\x3c\xc1\x86\xc6\x36\x51\xf7\x2c\x74\xd1\x4d\xba\x4a\xb2\x32\x59\x9c\x85\xcb\xd3\xc8\x46\x77\xe4\x1c\x2c\x3d\x0e\x6c\xa9\xc6\xee\x08\xd9\xf7\x1d\x2b\xb9\xeb\x08\x9d\x1c\x61\x2c\x64\x63\x89\x6a\x78\x33\xf1\x8e\x96\x3d\xeb\x66\x0e\x67\xf6\x7e\x94\x96\x44\x80\x9a\x9d\xb7\xbc\x1b\xfc\x87\xb0\x5e\xe9\xd8\x7d\x10\x18\x0d\xa9\x31\x8b\x4b\xa4\xe5\x0c\x17\x71\x99\x96\x73\x11\xe0\x3e\xad\xae\xf2\x4d\x85\xfb\xb8\x28\xe2\xac\x4a\x93\x12\x79\x81\x55\x9e\xad\xd3\x2a\xcd\xb3\x12\xf9\x25\xe2\x6c\x8b\xeb\x34\x5b\xcf\x41\xec\x5b\xb2\xa0\xa7\xde\x4e\xfc\xc6\x82\xa7\x18\xa9\x9e\x32\x2b\x89\x3e\x00\xec\xcd\x33\x90\xeb\x49\xf1\x9e\x15\x3a\xa9\x9b\x41\x36\x84\xc6\xfc\x21\xab\x59\x37\xe8\xc9\x1e\xd8\x4d\x8f\xe9\x20\x75\x2d\x02\x74\x7c\x60\x2f\xfd\xa9\xf2\xcf\x52\xa1\x10\x97\x45\x7e\x3b\xe1\x27\xe9\x6d\xfc\x2d\x11\x62\x55\xe4\x65\xf9\x70\xb1\x49\x6f\xd6\x0f\xab\xfc\x6e\x8b\x47\x3a\x0c\x8b\xef\xc9\xed\x26\x2e\x56\x57\x0b\x37\x79\x29\x44\x83\xb3\xd1\x8e\x75\x24\x44\xb1\xc9\xa0\x3a\x92\x7a\xc1\xda\x79\xd9\x75\x70\x7e\xda\x46\x88\x78\xbd\x86\x32\xda\x0d\x07\xb2\x88\x5e\xff\xde\x97\x17\xaa\x1f\xde\x3a\xd3\x41\x24\x3f\xef\xf2\x32\xc1\xf9\xf2\x7c\x29\x92\xac\x2a\xb6\x77\x79\x9a\x55\xf8\x35\x7b\x9b\x9f\xfd\x16\x7f\x03\x00\x00\xff\xff\x2a\x33\xb6\x05\x00\x03\x00\x00") - -func testImagesResourceConsumerDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerDockerfile, - "test/images/resource-consumer/Dockerfile", - ) -} - -func testImagesResourceConsumerDockerfile() (*asset, error) { - bytes, err := testImagesResourceConsumerDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x30\x14\x85\x9f\xe7\x5f\x71\xd4\xf0\xd0\x4a\x25\x65\x68\xe2\x81\x09\x4d\x59\xdb\x41\x04\x4a\xa6\xa4\x80\x78\x42\x4e\x72\x9b\x5c\x29\xb1\x3d\xdb\x59\xe8\xbf\x9f\x5c\x40\x02\x2d\x4f\x37\xf7\x1c\xdf\xfb\xf9\x38\xc2\x5a\x9b\x83\xe5\xb6\xf3\x38\x3f\xfb\x7a\x81\x5d\x47\xb8\x1d\x2b\xb2\x8a\x3c\x39\x24\xa3\xef\xb4\x75\xb1\x88\x44\x84\x3b\xae\x49\x39\x6a\x30\xaa\x86\x2c\x7c\x47\x48\x8c\xac\x3b\x7a\x57\x96\x78\x20\xeb\x58\x2b\x9c\xc7\x67\x98\x07\xc3\xec\x4d\x9a\x2d\xbe\x8b\x08\x07\x3d\x62\x90\x07\x28\xed\x31\x3a\x82\xef\xd8\x61\xcf\x3d\x81\x5e\x6a\x32\x1e\xac\x50\xeb\xc1\xf4\x2c\x55\x4d\x98\xd8\x77\xc7\x35\x6f\x43\x62\x11\xe1\xe9\x6d\x84\xae\xbc\x64\x05\x89\x5a\x9b\x03\xf4\xfe\xa3\x0f\xd2\x1f\x81\xc3\xd7\x79\x6f\x2e\x57\xab\x69\x9a\x62\x79\x84\x8d\xb5\x6d\x57\xfd\xab\xd1\xad\xee\xd2\xf5\x36\x2b\xb7\xa7\xe7\xf1\xd9\xf1\xc8\xbd\xea\xc9\x39\x58\xfa\x33\xb2\xa5\x06\xd5\x01\xd2\x98\x9e\x6b\x59\xf5\x84\x5e\x4e\xd0\x16\xb2\xb5\x44\x0d\xbc\x0e\xbc\x93\x65\xcf\xaa\x5d\xc2\xe9\xbd\x9f\xa4\x25\x11\xa1\x61\xe7\x2d\x57\xa3\xff\x14\xd6\x3b\x1d\xbb\x4f\x06\xad\x20\x15\x66\x49\x89\xb4\x9c\xe1\x67\x52\xa6\xe5\x52\x44\x78\x4c\x77\x37\xf9\xfd\x0e\x8f\x49\x51\x24\xd9\x2e\xdd\x96\xc8\x0b\xac\xf3\x6c\x93\xee\xd2\x3c\x2b\x91\xff\x42\x92\x3d\xe1\x36\xcd\x36\x4b\x10\xfb\x8e\x2c\xe8\xc5\xd8\xc0\xaf\x2d\x38\xc4\x48\x4d\xc8\xac\x24\xfa\x04\xb0\xd7\xaf\x40\xce\x50\xcd\x7b\xae\xd1\x4b\xd5\x8e\xb2\x25\xb4\xfa\x2f\x59\xc5\xaa\x85\x21\x3b\xb0\x0b\x8f\xe9\x20\x55\x23\x22\xf4\x3c\xb0\x97\xfe\xd8\xf9\xef\x52\xb1\x10\x65\xb1\x2e\x71\x85\x5a\x2b\x37\x0e\x64\xdf\x8b\xd3\xda\x8c\xab\x0f\xb5\x48\x8a\xf5\x0d\x7e\x5c\x41\x0e\xcd\xc5\x37\xb1\x4b\x8a\xeb\xed\x2e\xfc\x9f\xcc\xd7\xf7\xc5\x26\x2d\x16\xe2\x3a\xbf\x4b\xb2\xeb\xe7\x87\x6d\x51\xa6\x79\x16\xb4\x5e\x7a\x72\x3e\xac\x78\xde\xa4\x05\x82\x59\x69\xdf\xb0\xc5\xc9\xdc\x75\xd4\xf7\x30\x53\xb3\x58\x08\x7a\x31\xda\x7a\x21\x2a\x56\x97\xe2\x4b\x1c\xaf\x78\x90\x2d\x9d\x8e\x9e\xfb\xd8\x75\xa8\x58\xe1\x64\x1e\x40\x17\x42\xc4\xbf\x6f\xf2\xec\xe9\x32\x34\xc5\xbf\x00\x00\x00\xff\xff\x77\xfc\xfb\xba\x08\x03\x00\x00") - -func testImagesResourceConsumerMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerMakefile, - "test/images/resource-consumer/Makefile", - ) -} - -func testImagesResourceConsumerMakefile() (*asset, error) { - bytes, err := testImagesResourceConsumerMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe5\x02\x04\x00\x00\xff\xff\x9a\x00\xe4\x19\x04\x00\x00\x00") - -func testImagesResourceConsumerVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerVersion, - "test/images/resource-consumer/VERSION", - ) -} - -func testImagesResourceConsumerVersion() (*asset, error) { - bytes, err := testImagesResourceConsumerVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerCommonCommonGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x94\x41\x73\xdb\x36\x10\x85\xcf\xc4\xaf\xd8\xc1\x29\xc9\xd8\xa4\xeb\x43\x0f\xed\xf8\x40\xcb\x76\xca\x49\x44\xb9\xa6\xdc\x4c\x8e\x10\xb8\x22\x31\x26\x00\x06\x58\x84\x51\x7e\x7d\x07\x14\x65\x49\x96\xcc\x9b\xf4\xbe\xf7\x76\xdf\x52\xa3\xec\x13\x9b\xd9\x7e\xe3\x54\xd3\x12\x5c\x5f\xfd\xf1\x27\x2c\x5b\x84\x2f\x61\x85\xce\x20\xa1\x87\x3c\x50\x6b\x9d\x4f\x19\xfb\xaa\x24\x1a\x8f\x35\x04\x53\xa3\x03\x6a\x11\xf2\x5e\xc8\x16\x61\x52\x2e\xe0\x3f\x74\x5e\x59\x03\xd7\xe9\x15\x7c\x88\x00\x9f\x24\xfe\xf1\x6f\xb6\xb1\x01\xb4\xd8\x80\xb1\x04\xc1\x23\x50\xab\x3c\xac\x55\x87\x80\xbf\x24\xf6\x04\xca\x80\xb4\xba\xef\x94\x30\x12\x61\x50\xd4\x8e\x43\xa6\x88\x94\x7d\x9f\x02\xec\x8a\x84\x32\x20\x40\xda\x7e\x03\x76\x7d\x48\x81\x20\xc6\x00\x00\x5a\xa2\xfe\xaf\x2c\x1b\x86\x21\x15\xe3\x96\xa9\x75\x4d\xd6\x6d\x29\x9f\x7d\x2d\x66\xf7\x65\x75\x7f\x79\x9d\x5e\x31\xf6\x6c\x3a\xf4\x1e\x1c\xfe\x08\xca\x61\x0d\xab\x0d\x88\xbe\xef\x94\x14\xab\x0e\xa1\x13\x03\x58\x07\xa2\x71\x88\x35\x90\x8d\x7b\x0e\x4e\x91\x32\xcd\x05\x78\xbb\xa6\x41\x38\x64\xb5\xf2\xe4\xd4\x2a\xd0\xd1\x81\x76\x5b\x29\x0f\x87\x80\x35\x20\x0c\xf0\xbc\x82\xa2\xe2\x70\x9b\x57\x45\x75\xc1\xbe\x15\xcb\x7f\x16\xcf\x4b\xf8\x96\x3f\x3d\xe5\xe5\xb2\xb8\xaf\x60\xf1\x04\xb3\x45\x79\x57\x2c\x8b\x45\x59\xc1\xe2\x01\xf2\xf2\x3b\x7c\x29\xca\xbb\x0b\x40\x45\x2d\x3a\xc0\x5f\xbd\x8b\xbb\x5b\x07\x2a\x9e\x0e\xeb\x94\x55\x88\x47\xc3\xd7\x76\xbb\x8c\xef\x51\xaa\xb5\x92\xd0\x09\xd3\x04\xd1\x20\x34\xf6\x27\x3a\xa3\x4c\x03\x3d\x3a\xad\x7c\x7c\x79\x1e\x84\xa9\x59\xa7\xb4\x22\x41\xe3\xe7\x93\x3a\x29\xfb\x94\x31\xd6\x0b\xf9\x12\x43\xa4\xd5\xda\x1a\xc6\xb2\x0c\x66\xd6\x78\x12\x86\xe2\x2d\x3b\x41\xdb\x73\x3d\x3a\xab\x91\x5a\x0c\x1e\x34\x92\x53\xd2\xa7\x4c\x46\x10\x3e\xb0\x24\x3a\x82\xc6\xd9\xe3\x73\x5e\xd7\x63\x93\xed\x73\x03\x3c\xdb\x6b\xfc\x15\x9c\xa3\x7e\x17\x9c\xa3\xe6\x2c\xb9\x0d\xba\x9f\x8f\x73\x4e\xc1\xbd\xc6\x59\xf2\x19\x69\x16\x9c\x43\x43\x15\x09\x0a\x7e\x87\x47\xf0\xad\xc6\x59\xb2\xf5\xf9\xe3\xd0\x29\x77\xea\xc5\x19\x4b\xe6\xaa\xeb\x94\xb4\x0e\xfd\xbf\x01\xdd\x06\x8e\x9e\x1b\xe0\xfa\x55\x1f\x33\x1b\xb1\xda\xd0\x59\x76\x84\x77\xfa\xeb\xfc\x52\x68\x7c\x27\x78\xd7\xeb\x0e\x3b\x12\xe7\x02\x27\xb0\x8e\x7a\xe4\x82\x1b\x5f\x70\x85\xf2\x94\x8e\xdc\x5e\xe7\x2c\x79\xc2\x1f\x01\x3d\x55\xea\x37\x16\xe6\x6d\xc9\x1b\xe0\x6e\xaf\xcf\x0f\x2b\x1e\xfb\xde\xf4\x7d\xe3\x3b\x68\x7b\x60\x9b\x05\x4f\x56\x6f\xeb\x9f\x1d\xb7\x3f\xfe\xad\xa8\x27\xe3\x99\xde\xb7\xa2\x86\xc9\x96\x42\x69\x09\x04\x3c\x2e\xaa\xe5\xee\x3b\xce\x92\x67\xf3\x62\xec\x60\x1e\x82\x91\xb1\xf8\xb1\x3d\x6c\x45\x58\x4f\x2a\x67\x49\x61\xa4\x75\x0e\x25\xed\x1c\xb9\x6b\x82\x46\x43\x91\x57\x3b\xf1\xd5\x01\x62\x92\x39\x4b\x4a\x4b\x9f\xd5\x4f\x34\x27\xce\x68\x8d\xff\x90\x4d\x54\xcf\x59\x59\xf2\xe0\x84\xc6\xc1\xba\x97\xf8\x63\x88\x7c\x6b\x9d\xfa\x6d\x0d\x89\xee\xb2\xb7\xf5\xa5\x08\x64\xbd\x14\x9d\x32\x0d\x67\x1f\xd9\xff\x01\x00\x00\xff\xff\xe1\xe8\xc2\x46\xe3\x05\x00\x00") - -func testImagesResourceConsumerCommonCommonGoBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerCommonCommonGo, - "test/images/resource-consumer/common/common.go", - ) -} - -func testImagesResourceConsumerCommonCommonGo() (*asset, error) { - bytes, err := testImagesResourceConsumerCommonCommonGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/common/common.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerConsumeCpuConsume_cpuGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x52\x5d\x6f\xa3\x46\x14\x7d\x66\x7e\xc5\x11\x4f\x90\x78\xc1\x89\xda\x4a\xdd\x24\x0f\x6e\x92\xb6\xd6\x6e\x9d\x28\x38\x5d\xed\xe3\x78\xb8\xc0\x68\x61\x86\x9d\xb9\xc4\xb1\xaa\xfc\xf7\x6a\xc0\x49\xec\x56\x2d\x2f\xc0\xb9\x5f\xe7\xdc\x73\xf3\x13\x71\x6d\xfb\x9d\xd3\x75\xc3\x38\x9f\x9f\xfd\x88\x75\x43\xf8\x34\x6c\xc8\x19\x62\xf2\x58\x0c\xdc\x58\xe7\x33\x21\x3e\x6b\x45\xc6\x53\x89\xc1\x94\xe4\xc0\x0d\x61\xd1\x4b\xd5\x10\xf6\x91\x19\xfe\x24\xe7\xb5\x35\x38\xcf\xe6\x48\x42\x42\xbc\x0f\xc5\xe9\x85\xd8\xd9\x01\x9d\xdc\xc1\x58\xc6\xe0\x09\xdc\x68\x8f\x4a\xb7\x04\x7a\x56\xd4\x33\xb4\x81\xb2\x5d\xdf\x6a\x69\x14\x61\xab\xb9\x19\x87\xec\x5b\x64\xe2\xeb\xbe\x81\xdd\xb0\xd4\x06\x12\xca\xf6\x3b\xd8\xea\x30\x0b\x92\x85\x00\x80\x86\xb9\xff\x98\xe7\xdb\xed\x36\x93\x23\xcb\xcc\xba\x3a\x6f\xa7\x2c\x9f\x7f\x5e\x5e\xdf\xae\x8a\xdb\x0f\xe7\xd9\x5c\x88\x47\xd3\x92\xf7\x70\xf4\x7d\xd0\x8e\x4a\x6c\x76\x90\x7d\xdf\x6a\x25\x37\x2d\xa1\x95\x5b\x58\x07\x59\x3b\xa2\x12\x6c\x03\xcf\xad\xd3\xac\x4d\x3d\x83\xb7\x15\x6f\xa5\x23\x51\x6a\xcf\x4e\x6f\x06\x3e\x5a\xd0\x2b\x2b\xed\x71\x98\x60\x0d\xa4\x41\xbc\x28\xb0\x2c\x62\xfc\xb2\x28\x96\xc5\x4c\x7c\x59\xae\x7f\xbf\x7b\x5c\xe3\xcb\xe2\xe1\x61\xb1\x5a\x2f\x6f\x0b\xdc\x3d\xe0\xfa\x6e\x75\xb3\x5c\x2f\xef\x56\x05\xee\x7e\xc5\x62\xf5\x15\x9f\x96\xab\x9b\x19\x48\x73\x43\x0e\xf4\xdc\xbb\xc0\xdd\x3a\xe8\xb0\x3a\x2a\x33\x51\x10\x1d\x0d\xaf\xec\x44\xc6\xf7\xa4\x74\xa5\x15\x5a\x69\xea\x41\xd6\x84\xda\x3e\x91\x33\xda\xd4\xe8\xc9\x75\xda\x07\xf3\x3c\xa4\x29\x45\xab\x3b\xcd\x92\xc7\xff\x7f\xc9\xc9\xc4\x49\x2e\x44\x2f\xd5\xb7\xd0\xa4\x93\xda\x08\xa1\xbb\xde\x3a\x46\x22\xa2\xb8\x6a\x65\x1d\x8b\x28\xee\x24\x37\xe1\xcd\xba\xa3\x58\x88\x28\xde\x68\xde\x0c\xea\x1b\xf1\xe8\xc5\x86\x1c\xeb\x6e\xf0\x3f\xe7\x7e\xe7\x99\x3a\xcf\x92\x63\x91\x0a\xa1\xac\xf1\x0c\xdf\x12\xf5\xb8\x42\xa8\xce\x6e\x06\x37\x92\x49\xce\xe6\x29\x4e\x26\xec\x0f\xdd\xb6\xda\x93\xb2\xa6\x14\xa2\x1a\x8c\x42\x69\x0b\xdb\x11\x37\xda\xd4\x49\x8a\xbf\x44\x14\x94\x6b\x7c\xbc\xc2\xd9\x05\x34\x2e\x71\x36\x9f\x9e\x0b\xe8\xd3\xd3\x90\x10\x3d\x87\x68\xd5\x5a\xc9\x3f\xfd\x90\xcc\xd3\x11\x39\xbd\x42\xa0\x9e\x15\xdf\x1d\x8f\xd8\x8b\x78\x11\xe2\x49\xba\xa0\xae\x0b\x53\x95\x75\xe4\x81\x50\x29\xeb\x6c\x69\x38\x89\xdf\xf1\x78\x86\xf9\x0c\x07\x00\xcc\xd0\x6d\xc8\xc5\xa9\x88\xca\xbd\x8e\x82\xd4\x51\xf5\x2b\xfe\xc1\x93\xda\xd7\xbf\x42\xa3\xd8\x70\x73\x93\x54\x1f\xa7\x61\x47\xa3\xde\xb0\xf9\xbd\xd0\xd0\xe9\x5e\x3a\x4f\x49\x2a\xa2\x3c\x87\xb2\xe6\x89\x1c\xe3\x80\x05\xdb\xe0\xb2\x22\xc3\xb2\xa6\x43\x21\xf7\x8a\x0f\xb7\x70\xf2\x1e\x49\x91\xbf\xc1\x67\xf3\x03\xfe\x21\xff\xd8\x98\x93\x03\x69\x6f\x16\x15\x93\x3b\x91\x67\xe9\xf8\xad\x66\x65\xb7\x81\x65\xa5\x9d\x1f\xc1\x77\xfb\xb3\xdf\x88\xef\x9d\x55\xd7\xf7\x8f\x85\xec\xfa\x76\x54\x33\x9e\xef\xd8\x4d\x1b\x45\xc9\xd8\x2b\xc5\x25\xde\xb8\x04\x1f\x55\x3f\xfc\x67\xab\xc5\x13\x39\x59\x53\x32\x0e\x9c\xfd\xff\xb8\x7f\x86\x1f\xfb\x30\x3a\x49\xb3\xe9\x23\x1c\x88\xae\xa0\xfa\x21\x5b\x5b\x96\x6d\x58\xdd\x25\x8e\x57\x19\xe8\x44\x47\xa7\x28\xa2\xe8\x05\xd4\x7a\x9a\x62\x93\x98\x70\xde\xc9\x78\xe4\x63\x7c\xba\xb2\xbf\x03\x00\x00\xff\xff\xa6\x15\x1f\xf2\x8f\x05\x00\x00") - -func testImagesResourceConsumerConsumeCpuConsume_cpuGoBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerConsumeCpuConsume_cpuGo, - "test/images/resource-consumer/consume-cpu/consume_cpu.go", - ) -} - -func testImagesResourceConsumerConsumeCpuConsume_cpuGo() (*asset, error) { - bytes, err := testImagesResourceConsumerConsumeCpuConsume_cpuGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/consume-cpu/consume_cpu.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerControllerBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\x2a\x2d\xae\x4c\xca\xaf\xe0\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x12\x33\x33\xb1\x05\x93\x65\x16\x70\xd1\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x0d\x17\x2f\x36\xb6\x34\xa8\xb0\x05\x93\x70\x31\x40\x00\x00\x00\xff\xff\xc9\xd8\x77\x8f\x64\x00\x00\x00") - -func testImagesResourceConsumerControllerBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerControllerBaseimage, - "test/images/resource-consumer/controller/BASEIMAGE", - ) -} - -func testImagesResourceConsumerControllerBaseimage() (*asset, error) { - bytes, err := testImagesResourceConsumerControllerBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/controller/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerControllerDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x41\x6f\xd3\x30\x14\xc7\xef\xfe\x14\x7f\x25\x17\x90\x4a\x5a\x7a\x40\x13\x9c\x42\x9b\x41\xb4\x2d\x99\x9a\x8c\x51\x21\x0e\x6e\xf2\x9a\x3c\xc9\xb5\x8d\xed\x90\xf5\xdb\xa3\x74\x9d\x58\x35\x9f\x2c\xbf\x9f\x9f\x7f\xfe\xbf\x18\x2b\x63\x8f\x8e\xbb\x3e\x60\xb9\xf8\xf8\x09\x75\x4f\xb8\x19\x76\xe4\x34\x05\xf2\x48\x87\xd0\x1b\xe7\x13\x11\x8b\x18\xb7\xdc\x90\xf6\xd4\x62\xd0\x2d\x39\x84\x9e\x90\x5a\xd9\xf4\xf4\x52\x99\xe1\x07\x39\xcf\x46\x63\x99\x2c\xf0\x6e\x02\xa2\x73\x29\x7a\xff\x45\xc4\x38\x9a\x01\x07\x79\x84\x36\x01\x83\x27\x84\x9e\x3d\xf6\xac\x08\xf4\xd4\x90\x0d\x60\x8d\xc6\x1c\xac\x62\xa9\x1b\xc2\xc8\xa1\x3f\x3d\x73\x6e\x92\x88\x18\xdb\x73\x0b\xb3\x0b\x92\x35\x24\x1a\x63\x8f\x30\xfb\xd7\x1c\x64\x38\x09\x4f\xab\x0f\xc1\x7e\x9e\xcf\xc7\x71\x4c\xe4\x49\x36\x31\xae\x9b\xab\x67\xd0\xcf\x6f\xf3\x55\x56\x54\xd9\x87\x65\xb2\x38\x5d\x79\xd0\x8a\xbc\x87\xa3\x3f\x03\x3b\x6a\xb1\x3b\x42\x5a\xab\xb8\x91\x3b\x45\x50\x72\x84\x71\x90\x9d\x23\x6a\x11\xcc\xe4\x3b\x3a\x0e\xac\xbb\x19\xbc\xd9\x87\x51\x3a\x12\x31\x5a\xf6\xc1\xf1\x6e\x08\x17\x61\xbd\xd8\xb1\xbf\x00\x8c\x86\xd4\x88\xd2\x0a\x79\x15\xe1\x6b\x5a\xe5\xd5\x4c\xc4\x78\xcc\xeb\xef\xe5\x43\x8d\xc7\x74\xb3\x49\x8b\x3a\xcf\x2a\x94\x1b\xac\xca\x62\x9d\xd7\x79\x59\x54\x28\xaf\x91\x16\x5b\xdc\xe4\xc5\x7a\x06\xe2\xd0\x93\x03\x3d\x59\x37\xf9\x1b\x07\x9e\x62\xa4\x76\xca\xac\x22\xba\x10\xd8\x9b\x67\x21\x6f\xa9\xe1\x3d\x37\x50\x52\x77\x83\xec\x08\x9d\xf9\x4b\x4e\xb3\xee\x60\xc9\x1d\xd8\x4f\xc3\xf4\x90\xba\x15\x31\x14\x1f\x38\xc8\x70\x3a\x79\xf3\xa9\x44\x88\xeb\x4d\x79\x37\xe9\x67\xf9\x5d\xfa\x2d\x13\xe9\x7a\x8d\xc6\xe8\xe0\x8c\x52\xe4\x30\xff\xbf\x17\xd9\xcf\xfb\xb2\xca\x70\xb5\xb8\x5a\x88\xac\xa8\x37\xdb\xfb\x32\x2f\x6a\xfc\x8a\x5e\x41\xd1\x6f\xf1\x2f\x00\x00\xff\xff\x35\x44\xf7\x2e\x9d\x02\x00\x00") - -func testImagesResourceConsumerControllerDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerControllerDockerfile, - "test/images/resource-consumer/controller/Dockerfile", - ) -} - -func testImagesResourceConsumerControllerDockerfile() (*asset, error) { - bytes, err := testImagesResourceConsumerControllerDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/controller/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerControllerMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6b\xdb\x3e\x14\xc5\x9f\xff\xfa\x14\x87\x38\x0f\x09\xa4\x76\xff\x65\x6c\xd0\x51\x86\x97\x64\xad\x69\xb1\x87\xed\xb6\xf4\xa9\xc8\xf6\x8d\x7d\x41\x96\x3c\x49\x9e\x9b\x6f\x3f\x9c\xb6\xb0\x32\xbd\xe9\x9e\xa3\xa3\x9f\x8e\x02\x6c\xcd\x70\xb4\xdc\x76\x1e\x17\xe7\xff\x7f\x41\xd9\x11\x6e\xc7\x8a\xac\x26\x4f\x0e\xf1\xe8\x3b\x63\x5d\x28\x02\x11\xe0\x8e\x6b\xd2\x8e\x1a\x8c\xba\x21\x0b\xdf\x11\xe2\x41\xd6\x1d\xbd\x2b\x1b\x3c\x90\x75\x6c\x34\x2e\xc2\x73\xac\x66\xc3\xe2\x4d\x5a\xac\xbf\x8a\x00\x47\x33\xa2\x97\x47\x68\xe3\x31\x3a\x82\xef\xd8\xe1\xc0\x8a\x40\x2f\x35\x0d\x1e\xac\x51\x9b\x7e\x50\x2c\x75\x4d\x98\xd8\x77\xa7\x6b\xde\x42\x42\x11\xe0\xe9\x2d\xc2\x54\x5e\xb2\x86\x44\x6d\x86\x23\xcc\xe1\x6f\x1f\xa4\x3f\x01\xcf\xab\xf3\x7e\xb8\x8c\xa2\x69\x9a\x42\x79\x82\x0d\x8d\x6d\x23\xf5\x6a\x74\xd1\x5d\xb2\xdd\xa7\xc5\xfe\xec\x22\x3c\x3f\x1d\xb9\xd7\x8a\x9c\x83\xa5\x5f\x23\x5b\x6a\x50\x1d\x21\x87\x41\x71\x2d\x2b\x45\x50\x72\x82\xb1\x90\xad\x25\x6a\xe0\xcd\xcc\x3b\x59\xf6\xac\xdb\x0d\x9c\x39\xf8\x49\x5a\x12\x01\x1a\x76\xde\x72\x35\xfa\x0f\x65\xbd\xd3\xb1\xfb\x60\x30\x1a\x52\x63\x11\x17\x48\x8a\x05\xbe\xc7\x45\x52\x6c\x44\x80\xc7\xa4\xbc\xc9\xee\x4b\x3c\xc6\x79\x1e\xa7\x65\xb2\x2f\x90\xe5\xd8\x66\xe9\x2e\x29\x93\x2c\x2d\x90\xfd\x40\x9c\x3e\xe1\x36\x49\x77\x1b\x10\xfb\x8e\x2c\xe8\x65\xb0\x33\xbf\xb1\xe0\xb9\x46\x6a\xe6\xce\x0a\xa2\x0f\x00\x07\xf3\x0a\xe4\x06\xaa\xf9\xc0\x35\x94\xd4\xed\x28\x5b\x42\x6b\x7e\x93\xd5\xac\x5b\x0c\x64\x7b\x76\xf3\x67\x3a\x48\xdd\x88\x00\x8a\x7b\xf6\xd2\x9f\x26\xff\x3c\x2a\x14\xa2\xc8\xb7\xc5\x55\x6d\xb4\xb7\x46\x29\xb2\x22\xce\xb7\x37\xf8\x76\x05\xd9\x37\x9f\x3f\x89\x32\xce\xaf\xf7\xe5\xbc\x5f\xae\xb6\xf7\xf9\x2e\xc9\xd7\xe2\x3a\xbb\x8b\xd3\xeb\xe7\x87\x7d\x5e\x24\x59\x3a\x6b\x4a\x7a\x72\x7e\x8e\x7a\xde\x25\x39\xae\x60\xc9\x99\xd1\xd6\x74\x56\x1b\xed\xc6\x9e\x6c\xb4\x5c\x69\xe3\x1b\xb6\x58\xae\x5c\x47\x4a\x61\x98\x9a\xf5\x5a\xd0\xcb\x60\xac\x17\xa2\x62\x7d\x29\xfe\x0b\xc3\x28\x0c\x23\xee\x65\x4b\x67\xa3\x67\x15\xba\x0e\x15\x6b\x2c\x57\x33\xe5\x5a\x88\xf0\xe7\x4d\x96\x3e\x5d\xce\x43\xf1\x27\x00\x00\xff\xff\x4d\xe9\x92\xe8\x05\x03\x00\x00") - -func testImagesResourceConsumerControllerMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerControllerMakefile, - "test/images/resource-consumer/controller/Makefile", - ) -} - -func testImagesResourceConsumerControllerMakefile() (*asset, error) { - bytes, err := testImagesResourceConsumerControllerMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/controller/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerControllerVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesResourceConsumerControllerVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerControllerVersion, - "test/images/resource-consumer/controller/VERSION", - ) -} - -func testImagesResourceConsumerControllerVersion() (*asset, error) { - bytes, err := testImagesResourceConsumerControllerVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/controller/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerControllerControllerGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xe4\x59\x6d\x6f\xdb\x38\x12\xfe\x6c\xfd\x8a\x59\x01\x39\x58\x59\x55\x4a\xfb\xe1\x50\xa4\x9b\x03\xdc\xb4\xe9\x1a\x1b\x27\xb9\x38\xd9\x62\x81\x03\x0e\x0c\x35\xb6\x89\x4a\xa4\x4a\x52\x71\x7d\xd9\xfc\xf7\x03\xa9\x17\x4b\xb2\x64\xbb\x49\x76\xef\x0e\xd7\x0f\x75\xa4\x19\xce\xeb\xa3\x67\x28\x2a\x3c\x74\x4e\x45\xba\x92\x6c\xbe\xd0\xf0\xe6\xe8\xf5\x5f\xe1\x66\x81\xf0\x4b\x76\x87\x92\xa3\x46\x05\xa3\x4c\x2f\x84\x54\x81\xe3\x9c\x33\x8a\x5c\x61\x04\x19\x8f\x50\x82\x5e\x20\x8c\x52\x42\x17\x08\x85\xc4\x87\x5f\x51\x2a\x26\x38\xbc\x09\x8e\x60\x68\x14\xdc\x42\xe4\x7a\xef\x9c\x95\xc8\x20\x21\x2b\xe0\x42\x43\xa6\x10\xf4\x82\x29\x98\xb1\x18\x01\xbf\x51\x4c\x35\x30\x0e\x54\x24\x69\xcc\x08\xa7\x08\x4b\xa6\x17\xd6\x49\x61\x22\x70\x7e\x2b\x0c\x88\x3b\x4d\x18\x07\x02\x54\xa4\x2b\x10\xb3\xba\x16\x10\xed\x38\x00\x00\x0b\xad\xd3\xe3\x30\x5c\x2e\x97\x01\xb1\x51\x06\x42\xce\xc3\x38\xd7\x52\xe1\xf9\xf8\xf4\xe3\xc5\xf4\xe3\xab\x37\xc1\x91\xe3\xdc\xf2\x18\x95\x02\x89\x5f\x33\x26\x31\x82\xbb\x15\x90\x34\x8d\x19\x25\x77\x31\x42\x4c\x96\x20\x24\x90\xb9\x44\x8c\x40\x0b\x13\xe7\x52\x32\xcd\xf8\xdc\x07\x25\x66\x7a\x49\x24\x3a\x11\x53\x5a\xb2\xbb\x4c\x37\x0a\x54\x46\xc5\x14\xd4\x15\x04\x07\xc2\xc1\x1d\x4d\x61\x3c\x75\xe1\xfd\x68\x3a\x9e\xfa\xce\xe7\xf1\xcd\xcf\x97\xb7\x37\xf0\x79\x74\x7d\x3d\xba\xb8\x19\x7f\x9c\xc2\xe5\x35\x9c\x5e\x5e\x7c\x18\xdf\x8c\x2f\x2f\xa6\x70\x79\x06\xa3\x8b\xdf\xe0\x97\xf1\xc5\x07\x1f\x90\xe9\x05\x4a\xc0\x6f\xa9\x34\xb1\x0b\x09\xcc\x94\x0e\xa3\xc0\x99\x22\x36\x9c\xcf\x44\x1e\x8c\x4a\x91\xb2\x19\xa3\x10\x13\x3e\xcf\xc8\x1c\x61\x2e\xee\x51\x72\xc6\xe7\x90\xa2\x4c\x98\x32\xcd\x53\x40\x78\xe4\xc4\x2c\x61\x9a\x68\x7b\xbd\x91\x4e\xe0\x1c\x86\x8e\x93\x12\xfa\xc5\x18\x49\x08\xe3\x8e\xc3\x92\x54\x48\x0d\x43\x67\xe0\xce\x62\x32\x77\xcd\x6f\xa2\xcd\x4f\x2c\xec\x15\x47\x1d\x9a\xa6\x94\x7f\x67\x32\x36\x7f\x2a\x2d\xa9\xe0\xf7\xf6\xcf\x15\xa7\xae\xe3\x0c\xdc\x2f\x6f\x55\xc0\x44\xf8\xa5\x42\x61\xa8\x51\xe9\x90\x25\x64\x8e\x2a\x94\xa8\x44\x26\x29\xbe\xa2\x82\xab\x2c\x41\x19\x52\x91\x24\x82\xbb\x8e\xe7\x38\xf7\x44\x82\x0d\xe4\x04\x4c\x18\xc1\x98\xeb\xa1\x6b\x6e\xb8\x3e\xbc\x3d\x7a\x7b\xe4\x83\x7b\x65\xc4\x3c\x4b\xee\x50\x06\xae\x67\x57\x94\x96\xae\xda\x2b\x4b\xc1\xab\x5e\x13\x06\x7f\xa5\x96\x6a\xdb\x9b\xa2\xbc\x67\x14\x2f\x48\x82\xa5\xd9\xa9\x96\x8c\xcf\x6b\x96\x55\xae\xf3\x8a\x93\x04\x5d\x1f\xdc\x8d\xf4\xcc\x4d\x6b\x41\xcc\xa0\x50\x36\x0e\xcc\x33\x60\x3a\x57\xea\xef\x15\x85\x4a\x09\xdd\x2f\x14\xab\x69\x5c\x47\x38\x23\x59\xac\xcb\x28\x72\x0b\xdf\x13\x8a\x33\xcb\x38\xb5\x28\x19\x7a\xf0\xe0\x0c\xac\xef\x2b\x22\x15\x0e\x3d\x67\x90\xcc\x25\x1c\x9f\x00\xc7\xe5\xa9\xe0\x5a\x8a\x38\x46\x69\xee\xc7\x62\x1e\x9c\x11\x4d\xe2\xa1\x01\x4d\x70\xce\x94\x46\x3e\xe2\x91\x49\x06\x87\xb3\x44\x07\xd3\x54\x32\xae\x67\x43\xf7\xf8\x20\x72\x7d\x38\x34\x2d\xf2\x7c\x48\xe6\xd2\xf3\x9c\x47\xc7\xd1\xab\x34\x8f\x2e\x37\x0a\x4a\xcb\x8c\x6a\x13\x81\x44\x95\x0a\xae\xf0\xb3\x64\x1a\xe5\xb9\xa0\x5f\xc0\x60\x2f\x98\x64\x1a\xbf\x39\x83\x25\x61\xfa\x93\x14\x59\x0a\xd5\x3f\x2b\xfe\x5c\xde\x37\xd6\x6d\x52\xad\xa8\xe1\xb0\xe6\xee\xc1\x19\x50\x93\xd9\x5f\xd6\xf7\x1e\x1e\x8d\x6f\x9d\x49\x0e\xb4\xb2\x31\xa4\xf5\x65\x1e\xd8\x04\x7f\xbe\xb9\xb9\x1a\x2e\x2d\x89\x05\xd7\x8d\x68\x7d\x43\x53\x70\x58\x48\xbe\x66\xa8\xb4\xad\x2a\x9b\x19\x41\x30\x41\xbd\x10\x11\xfc\x70\x02\xee\xd5\xe5\xf4\xc6\x35\xa2\x81\x55\xfe\x28\xa5\x90\xc3\xa5\x0f\xf9\xd3\x12\xbc\x27\x51\xb1\xde\xcf\xfd\x4c\x35\xd1\x99\x5a\xdf\xf6\x9c\x41\x11\xad\x33\x78\x74\x06\x61\x08\x29\x91\xca\xf4\xd9\x58\xb6\x6c\x89\x4a\x43\x44\x34\x31\x94\x01\xb7\xd7\xe7\xf6\xc2\xc6\x82\xd2\xb6\xd5\x84\x64\x5b\x7d\x26\x64\x32\xf4\xde\xd9\xfb\x3f\x9c\x00\x67\x71\x47\x64\x28\x65\x71\xe1\xed\x1d\xd3\x82\xf0\x28\xae\x10\x77\x7a\x75\x5b\x95\xe2\xf6\xfa\x3c\xb8\x22\x7a\x01\x27\x27\x65\xce\xa7\x95\xd6\x28\x8a\x2c\x6f\x9a\x20\x68\x90\x1b\x59\x4b\x4d\x30\xc6\x84\x89\x7a\x97\xcb\x09\x26\x7b\xb8\x9c\x60\xb2\xc5\xe5\x04\x93\xbd\x5c\xde\x65\x49\x3a\x41\x2d\x19\xdd\xe6\xf2\x7d\xa5\xd5\xe5\x72\x2d\xdd\xe2\xb2\x13\x31\xb7\xfc\x0b\x17\x4b\x7e\x96\x71\x6a\x06\x43\xa3\x45\x17\x42\x9f\x89\x8c\x47\x5e\x2f\xae\x37\x6b\xdc\x0d\xef\xaf\x19\xca\x15\x64\x32\x0e\x7e\x25\x71\x86\xca\xa2\x3b\x0c\x61\x8e\xda\x8c\x5c\xf3\x18\x9b\x1f\x0b\x3b\x33\xd9\xea\x9d\x8f\x32\x69\x67\xd6\x14\x69\x4e\x6e\x06\x83\xd6\x60\xf0\x09\xf5\xb0\xc8\xe3\xc3\x5a\xeb\xef\x46\x66\x58\x88\xc5\x31\xa3\x42\xa2\xda\xb2\x6e\x52\x29\x95\xcb\x8a\x67\x60\xca\xfe\x85\x63\x3e\xd9\xc7\xc6\x75\xf7\x8a\xd2\x20\x9b\xc1\x66\x0e\x27\x27\xe0\xba\xf0\xfb\xef\xb0\x11\x65\x25\xd9\x1e\x48\xae\xd6\xcb\x04\x17\x42\x7f\x62\xf7\x58\x35\x76\x24\xe7\x59\x82\x7c\x3f\x5e\xb0\xbd\x31\x13\x1c\x65\xc1\x05\xc3\xbc\x43\x2a\xdf\x2a\x69\xe5\x6d\x6b\x93\x5f\xcf\xd7\x06\x66\xca\x56\x6c\x0a\x82\x91\x16\x6c\xb8\x51\x90\x46\xbf\xfc\x5a\x55\xba\xd7\xb7\xab\xd6\xdf\x37\xbf\xaf\x8e\xdd\x86\xb7\x16\x7d\xa3\x99\xb9\x8d\x82\xfb\x1a\xcd\x6c\x4b\xb6\x06\xb1\x53\x0d\x7e\x3a\x81\xa3\xfe\x66\x8f\x39\x15\x52\x22\xd5\x4f\xec\x36\x15\x19\xd7\xa6\x14\xeb\xf8\x21\xec\x8b\xc5\x8e\xda\xb6\xf6\x2b\xb0\x36\x0e\x7b\xd7\x98\xe1\x7e\x56\x0c\xf7\xa5\x0f\xee\xf5\x29\x24\x84\x93\x39\xca\x63\x50\xc8\x23\x03\xe9\x83\xfb\xd2\xa7\xc5\x59\x81\x2e\x73\xbb\xe6\x09\x09\x5d\xd8\xd1\xf4\xba\x9a\x56\x7d\xba\xff\xe0\xae\x9f\xc7\xd5\x0b\x02\x23\xb0\xf5\x60\xb3\x5c\x13\xfe\x56\x14\x9a\x06\xd5\x96\x21\x18\x45\xd1\xd0\x4a\x3d\x2b\x30\xf1\xae\x39\xaf\xa8\xa9\xca\xfb\xb1\xdd\x59\x0d\x3a\x9e\xe5\x64\x4b\xf8\xaa\xdf\xeb\x6b\xe3\x71\x2e\x20\x77\x7a\xc9\x71\xc3\x6f\x4e\xf8\x66\xe0\x6f\x18\xaf\x1b\x33\xfb\x9c\xe1\x9e\x44\x6e\x27\xd7\x8b\x12\xb9\x9d\xa7\x4f\x27\x72\x9c\x93\xbb\x95\xde\xce\xe3\xa5\x4e\x37\x8d\xef\x61\xe1\xba\x73\xc1\x9e\x24\xde\xb2\xdf\xc3\xe1\x9d\x5a\xff\x15\x14\xde\x6e\xd0\x53\x29\xbc\xcc\xd0\x5f\x97\xa4\x87\xc0\x9b\xb5\xe8\x6d\x58\xfb\x61\xda\x6e\x75\x5b\xb9\x77\x93\x77\xd3\x76\x1f\x29\x7f\x9f\xd6\x9f\xc6\xdc\x95\xc3\x36\x71\x97\x82\x1a\x6f\x57\xba\xdd\xb4\xbd\x5e\xf1\x3c\xd6\x9e\xbc\xdf\xcd\xd6\x93\xf7\xfd\x2c\x5d\xc7\xc0\x73\x48\x7a\x82\xc9\x4e\x92\x5e\xfb\x7a\x31\x8e\x5e\xbb\x7d\x49\x8e\xae\x6f\xf5\x5f\x86\xa3\xdb\x76\xcd\x63\x6c\x7e\x7b\x78\xd6\x88\x2e\x48\x82\x25\x33\x46\x18\x6b\xb2\x8d\xd0\x8d\xbc\x52\x7e\xea\x0c\xa8\x75\xeb\x34\x53\x5a\x24\x79\x20\xfb\xf1\x79\x7d\xc5\xbe\x84\x6e\x2b\x50\x5d\xd7\x93\xec\x22\xf7\x8e\x98\xfe\xb3\xec\x1e\xce\x62\x41\x4a\x92\xdf\xec\xf0\xf3\xa9\xde\x56\xc4\xcf\x0b\xd3\xb3\x6a\x5d\xb3\xfe\x06\xfa\x7d\x55\xdc\x49\xf0\x9b\x25\xdf\xc9\xf0\xb5\x60\x3b\x79\x7b\xd3\xff\x4e\xb5\x3f\x8b\xdf\x6d\xe8\x4d\x6e\xaf\x87\xb1\x26\xf7\x5c\xb1\x83\xd8\x9b\xea\x4f\x60\xf6\xbb\x2c\x49\x81\x5a\x2b\xe5\xf3\x71\xb7\x32\x4a\xdd\x24\x6f\xd5\xad\x42\x0f\xc3\xb7\x61\xf0\xac\x7d\x78\xcd\x96\xc9\x27\x29\xac\xee\xf2\xfa\x72\x1b\xf2\x9e\x00\x9e\x4f\xfb\x7d\x6f\x1b\xbd\x07\x89\x56\x5e\x7f\x85\x6e\xf8\x37\xec\x90\x1f\xd9\x0a\x09\xcc\x20\xe6\xe8\x1d\x30\xf8\xa9\x5a\xf9\x0e\xd8\x8f\x3f\xda\xdc\x77\xbe\x77\xf4\xb8\xb0\x29\xee\x91\x4e\x63\x2e\xef\x4c\xa7\x73\x42\x3f\x2f\x9b\xe6\x84\xee\xf6\xb0\x6f\x32\x4d\x00\x74\x67\x53\x3c\x35\x39\x55\xd7\x93\x2b\xc9\xf4\xc5\xda\xd4\x83\xc6\x4d\x3f\x8d\xf4\xa8\x44\xa2\x4b\x1b\xf2\xf6\xfa\x7c\xa8\xb2\xd9\x8c\x7d\x2b\x22\xf6\xca\xad\xc3\x43\x75\xe4\xdd\x38\xb3\x2f\x3e\xcf\x1d\xa8\xe0\x40\x05\xea\x9e\x06\x34\xce\x94\x46\x19\xc4\x82\x92\xf8\xf8\x20\x3a\x50\xae\x6f\x0b\xd8\xfe\x84\xd1\x7d\xd7\x7e\x96\xa8\x89\xae\x84\xd4\x3e\xe4\x21\xd9\xe7\x25\x0c\xa1\x0f\x9e\x56\xa0\x9a\xa7\xda\xf6\x7d\x27\xcd\x8a\xed\x67\x6a\x2a\xd0\xdf\xd6\x6e\xcc\xf7\xf4\x75\x7d\x3c\xc1\xb8\xee\xee\x63\x84\x33\x94\x50\x7f\xee\x3f\x08\x6e\xbf\x96\xe4\xfb\xb5\xe3\x93\x8e\xf2\xf7\x1d\x71\x7b\xce\xe0\x9f\x7e\x79\x1e\x6f\x43\xba\x12\x4a\xdb\xf3\x78\x6b\xcd\xaf\x6d\xff\x1e\xba\x4f\x3a\x8f\xe1\xa1\x9c\xac\x63\x2d\x48\xed\x44\xcd\x7b\xac\xc6\x57\x7b\x23\xd6\x5e\x54\x07\xd2\xe3\xa3\x67\x78\x6d\xf3\x3b\x4c\x60\xfe\x1b\x7a\xeb\x12\x74\xa8\xdc\xf2\xb8\x50\x2a\xbe\x33\xd4\xbe\x27\xb4\x47\xd5\x19\x61\x71\xfe\xd1\x96\x0a\xce\x91\xd6\x5f\x29\xe4\x71\x39\x6f\x50\xca\xd6\xf9\x77\xdb\x4e\x51\xd5\x08\x0e\xa2\xf6\xa1\x51\xad\x18\x9d\x38\x5b\x13\x47\x1f\xce\x12\x4c\x84\x5c\x7d\x2f\xd4\xea\x84\xd4\x47\x21\xe5\xbb\xdb\x1f\x89\xb4\xf5\x97\x8d\x27\x21\xad\x71\x78\xb2\x01\xb4\x52\xfa\x7f\x89\xb3\x32\xf9\x1c\x66\x55\x29\xba\xd9\xac\xbe\xcf\xec\xe3\xb3\xc6\x7e\xec\x7b\x99\x6d\x8f\x99\x45\x6b\x3a\xf6\x8b\x75\x39\xbd\xf2\x8d\xe6\x1f\x82\xc2\x8d\x8f\x5d\x3b\x51\xe8\x0c\x06\x5d\x38\x6c\xbc\xab\x1e\xc3\x43\x3b\x99\x27\x22\x70\xbd\xaa\x7a\xb7\xdd\xd0\x37\x92\xff\x3d\xac\x9a\xca\x63\x54\xc2\xe9\x40\xd9\x0d\x7c\x94\x6f\xe0\x5b\xb5\x2b\x10\x60\xa0\xfb\xef\x00\x00\x00\xff\xff\x91\x34\x1e\x44\x71\x24\x00\x00") - -func testImagesResourceConsumerControllerControllerGoBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerControllerControllerGo, - "test/images/resource-consumer/controller/controller.go", - ) -} - -func testImagesResourceConsumerControllerControllerGo() (*asset, error) { - bytes, err := testImagesResourceConsumerControllerControllerGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/controller/controller.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerResource_consumerGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x91\x51\x6b\xdb\x4a\x10\x85\x9f\xb3\xbf\xe2\x20\xb8\x20\x05\x5d\xd9\x37\x70\x21\xa4\xe4\x41\x75\x12\x22\x12\xec\x60\x39\x0d\x79\x5c\x4b\x23\x69\xa9\xb4\xbb\xdd\x1d\x45\x31\xa5\xff\xbd\xac\xe2\x42\x42\xdb\xa7\x65\x74\xce\xcc\xf9\x34\xb3\x38\x15\x2b\x63\x0f\x4e\xb5\x1d\xe3\x6c\xf9\xdf\xff\xd8\x75\x84\xbb\x71\x4f\x4e\x13\x93\x47\x3e\x72\x67\x9c\xcf\x84\xb8\x57\x15\x69\x4f\x35\x46\x5d\x93\x03\x77\x84\xdc\xca\xaa\x23\x1c\x95\x14\x5f\xc8\x79\x65\x34\xce\xb2\x25\xe2\x60\x88\x8e\x52\x94\x7c\x12\x07\x33\x62\x90\x07\x68\xc3\x18\x3d\x81\x3b\xe5\xd1\xa8\x9e\x40\xaf\x15\x59\x86\xd2\xa8\xcc\x60\x7b\x25\x75\x45\x98\x14\x77\x73\xc8\x71\x44\x26\x9e\x8f\x03\xcc\x9e\xa5\xd2\x90\xa8\x8c\x3d\xc0\x34\xef\x5d\x90\x2c\x04\x00\x74\xcc\xf6\x62\xb1\x98\xa6\x29\x93\x33\x65\x66\x5c\xbb\xe8\xdf\x5c\x7e\x71\x5f\xac\xae\xd7\xe5\xf5\xbf\x67\xd9\x52\x88\x47\xdd\x93\xf7\x70\xf4\x6d\x54\x8e\x6a\xec\x0f\x90\xd6\xf6\xaa\x92\xfb\x9e\xd0\xcb\x09\xc6\x41\xb6\x8e\xa8\x06\x9b\xc0\x39\x39\xc5\x4a\xb7\x29\xbc\x69\x78\x92\x8e\x44\xad\x3c\x3b\xb5\x1f\xf9\xc3\x82\x7e\x51\x29\x8f\xf7\x06\xa3\x21\x35\xa2\xbc\x44\x51\x46\xf8\x9c\x97\x45\x99\x8a\xa7\x62\x77\xbb\x79\xdc\xe1\x29\xdf\x6e\xf3\xf5\xae\xb8\x2e\xb1\xd9\x62\xb5\x59\x5f\x15\xbb\x62\xb3\x2e\xb1\xb9\x41\xbe\x7e\xc6\x5d\xb1\xbe\x4a\x41\x8a\x3b\x72\xa0\x57\xeb\x02\xbb\x71\x50\x61\x75\x54\x67\xa2\x24\xfa\x10\xde\x98\x37\x18\x6f\xa9\x52\x8d\xaa\xd0\x4b\xdd\x8e\xb2\x25\xb4\xe6\x85\x9c\x56\xba\x85\x25\x37\x28\x1f\x8e\xe7\x21\x75\x2d\x7a\x35\x28\x96\x3c\xd7\xbf\xfd\x4e\x26\x4e\x17\x42\x58\x59\x7d\x0d\x43\x06\xa9\xb4\x10\x6a\xb0\xc6\x31\x62\x71\x12\x35\xbd\x6c\xa3\xf0\x0e\x1c\x9e\xde\xcc\x95\x26\x5e\x84\xa3\x44\x22\x11\xe2\x45\x3a\xcc\xfe\x4b\x04\x77\x56\x68\x8e\xa3\xf0\x21\x4a\x71\xbe\x3c\x5f\xa6\x88\x1e\x82\xac\xc7\x61\x4f\x2e\x8b\x12\x21\x9a\x51\x57\x73\x56\x9c\xe0\xbb\x38\x99\xdb\x1e\xa4\xf3\x14\x27\xe2\xc4\x91\x37\xa3\xab\x68\x65\xb4\x1f\x07\x72\xb7\x52\xd7\x3d\x39\x5c\x5c\x62\x4d\xd3\xf6\xcf\x6a\x68\xec\x4d\x9b\xdd\x48\x96\x7d\x1c\xd8\xb2\x7b\xe5\x99\x74\xae\xeb\x92\xdc\x0b\xc5\xcd\xc0\x59\x69\x9d\xd2\xdc\xc4\xd1\xc5\x3f\x75\x94\xe2\x34\x50\x26\x29\xfe\x92\x98\x24\xe2\x87\xf8\x19\x00\x00\xff\xff\x8b\x9d\x03\xcd\x55\x03\x00\x00") - -func testImagesResourceConsumerResource_consumerGoBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerResource_consumerGo, - "test/images/resource-consumer/resource_consumer.go", - ) -} - -func testImagesResourceConsumerResource_consumerGo() (*asset, error) { - bytes, err := testImagesResourceConsumerResource_consumerGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/resource_consumer.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerResource_consumer_handlerGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x58\x6f\x6f\xdb\xbe\x11\x7e\x6d\x7e\x8a\xab\x86\xfc\x60\x65\xaa\xd4\x5f\xd1\x15\x43\x0a\xbf\x70\xd3\xa4\x31\x9a\x38\x5e\xec\x34\x28\xba\x62\xa0\xa5\x93\x4c\x58\x22\x55\x92\x8a\xeb\xa5\xf9\xee\x03\x29\xd9\x96\xff\xc8\xf9\xb3\xa2\x5b\x5f\xd4\x96\x79\xba\xbb\xe7\xe1\x3d\x77\x64\x82\x43\x72\x2c\xf2\xb9\x64\xc9\x44\xc3\xeb\x57\x7f\xfe\x0d\x46\x13\x84\x4f\xc5\x18\x25\x47\x8d\x0a\xba\x85\x9e\x08\xa9\x7c\x42\xce\x59\x88\x5c\x61\x04\x05\x8f\x50\x82\x9e\x20\x74\x73\x1a\x4e\x10\xaa\x15\x0f\x3e\xa3\x54\x4c\x70\x78\xed\xbf\x82\xb6\x31\x70\xaa\x25\xc7\x7d\x47\xe6\xa2\x80\x8c\xce\x81\x0b\x0d\x85\x42\xd0\x13\xa6\x20\x66\x29\x02\xfe\x08\x31\xd7\xc0\x38\x84\x22\xcb\x53\x46\x79\x88\x30\x63\x7a\x62\x83\x54\x2e\x7c\xf2\xa5\x72\x20\xc6\x9a\x32\x0e\x14\x42\x91\xcf\x41\xc4\x75\x2b\xa0\x9a\x10\x00\x80\x89\xd6\xf9\x51\x10\xcc\x66\x33\x9f\xda\x2c\x7d\x21\x93\x20\x2d\xad\x54\x70\xde\x3b\x3e\xe9\x0f\x4f\x5e\xbe\xf6\x5f\x11\x72\xcd\x53\x54\x0a\x24\x7e\x2f\x98\xc4\x08\xc6\x73\xa0\x79\x9e\xb2\x90\x8e\x53\x84\x94\xce\x40\x48\xa0\x89\x44\x8c\x40\x0b\x93\xe7\x4c\x32\xcd\x78\xe2\x81\x12\xb1\x9e\x51\x89\x24\x62\x4a\x4b\x36\x2e\xf4\x1a\x41\x8b\xac\x98\x82\xba\x81\xe0\x40\x39\x38\xdd\x21\xf4\x86\x0e\xbc\xef\x0e\x7b\x43\x8f\xdc\xf4\x46\x67\x97\xd7\x23\xb8\xe9\x5e\x5d\x75\xfb\xa3\xde\xc9\x10\x2e\xaf\xe0\xf8\xb2\xff\xa1\x37\xea\x5d\xf6\x87\x70\x79\x0a\xdd\xfe\x17\xf8\xd4\xeb\x7f\xf0\x00\x99\x9e\xa0\x04\xfc\x91\x4b\x93\xbb\x90\xc0\x0c\x75\x18\xf9\x64\x88\xb8\x16\x3c\x16\x65\x32\x2a\xc7\x90\xc5\x2c\x84\x94\xf2\xa4\xa0\x09\x42\x22\x6e\x51\x72\xc6\x13\xc8\x51\x66\x4c\x99\xcd\x53\x40\x79\x44\x52\x96\x31\x4d\xb5\x7d\xde\x82\xe3\x93\xc3\x80\x90\x9c\x86\x53\xe3\x24\xa3\x8c\x13\xc2\xb2\x5c\x48\x0d\x6d\xd2\x72\xe2\x4c\x3b\xa4\xe5\x70\xd4\x81\xd9\x85\xc5\xf7\x42\xa6\xe6\xab\xd2\x32\x14\xfc\xd6\x7e\x9d\xf3\xd0\x7c\x6a\x96\xa1\x43\x48\xcb\x99\xfe\x5d\xf9\x4c\x04\xd3\x65\xf9\x05\x1a\x95\x0e\x58\x46\x13\x54\x81\x44\x25\x0a\x19\xe2\xcb\x50\x70\x55\x64\x28\x83\x50\x64\x99\xe0\x0e\x71\x09\x09\x02\xb8\xaa\xd6\x8f\xab\xe5\x33\xca\xa3\x14\x25\x4c\x44\x1a\x29\xc8\x50\x4b\x16\x2a\xcb\x06\x85\x85\x2f\x58\xf8\xf2\x89\x9e\xe7\xd8\xe8\x43\x69\x59\x84\x1a\xee\x48\x6b\xe1\xc7\xfc\xcb\x68\xfe\xd5\xec\x2a\x4f\xbe\xc5\xa9\xa0\xfa\xed\x9b\xe5\xfa\xb9\x08\xa7\x60\x00\xfa\x17\x85\xc6\x1f\xe4\xde\xa6\xd8\xc7\x59\x53\x84\x50\x22\x35\x82\xa3\x3c\x02\xc6\x99\x66\x34\x65\xff\x36\xcf\x8d\x39\x69\x01\x11\xc6\xb4\x48\xb5\xf2\x49\x5c\xf0\x70\x8f\xfb\xb6\x0b\x87\x4d\x7e\xee\x48\x4b\xa2\x2e\x24\x87\x3f\x1a\x4c\xee\x2a\x50\x47\x3b\x10\xdf\xdd\xdf\x1b\x70\x36\x7e\x7b\x52\xb9\x6c\x8a\xe5\xc2\x10\xe5\x2d\x9e\x8d\x46\x83\xf6\xcc\x6a\xd4\xbf\x42\x95\x0b\xae\xf0\x46\x32\x8d\xd2\x33\x2a\x84\xc3\x6a\xe5\x7b\x81\x4a\xbb\x26\xc1\x20\x80\xd2\xb7\xa9\x78\xa1\x4c\xc9\x2e\x36\x82\x71\x18\x48\x91\xa1\x9e\x60\x61\xb7\x37\xa3\x1a\xda\x63\xa1\x27\xf0\xf1\x64\x04\x7f\xc0\xe0\x72\x38\x72\x49\x8b\xc5\xc6\xb7\x7f\x7d\x75\xee\x0f\xa8\x9e\x40\xa7\x03\x65\xfd\xf8\x17\xa5\xa7\x6e\x14\x59\x2d\xdd\x91\x56\xab\x02\xe2\x97\x9f\x95\x41\x7b\xe6\x92\x56\xc5\x15\x69\xdd\x2f\x5d\x5e\xa0\x9e\x88\x08\x5e\x74\xc0\x31\xb1\x9c\xd2\x83\x81\x70\x22\xa5\x90\xed\x99\xb7\x88\xf4\x9e\x46\x15\x2a\xaf\x44\x3f\xd4\x54\x17\x6a\xf5\xf3\x46\x80\x20\x80\x9c\x4a\x0b\xd7\x78\xb6\x2d\x0a\x95\x86\x88\x6a\x6a\x2b\xe5\xfa\xea\xdc\x3e\xd8\x5c\x50\x4a\x38\xea\xd8\x94\x06\x54\x2a\x3c\x15\x32\x6b\xbb\xef\xec\xef\x2f\x3a\xc0\x59\xba\x23\x33\x94\xb2\x7a\x70\x1f\x9d\x53\xb5\x15\x95\x76\x8e\x07\xd7\xfb\xd8\x3d\x5e\x5a\x35\x13\xbc\xb2\x31\x29\x19\x47\x26\xf7\x87\x02\x5f\x60\xf6\x88\xc0\x17\x98\x3d\x18\xf8\x02\xb3\x47\x05\x4e\x50\x1f\x17\x52\x22\xd7\x25\x49\xfb\xc2\x7f\xdc\xb0\x6d\x4e\x62\xd3\x72\xab\xce\x56\x09\x8c\x8b\x2c\x2f\xab\x71\x5f\xe8\xf7\x4b\xab\xe6\xa0\x2b\x9b\x3d\xc8\xd7\x4b\x25\xce\xb4\x3f\xcc\x25\xe3\x3a\x6e\x3b\x07\xea\x08\x0e\x94\xb3\x2c\xed\x6b\x3e\xe5\x62\xc6\x4f\x0b\x1e\x9a\xb1\xe1\xad\xe5\xb6\x5e\x5a\x7d\xa1\x4f\x45\xc1\x23\xf7\x29\x8d\x63\xbb\x50\x76\xf7\x8f\xef\x05\xca\x39\x14\x32\xf5\x3f\xd3\xb4\x40\xb5\x68\x1f\x09\x6a\x33\xb2\xa1\xec\x5e\xa5\x82\xcc\x2c\xa8\x17\x71\x54\x48\x3b\xf3\x86\x18\x0e\x4b\xb3\xa3\x4e\xe9\xd0\xec\x66\xbb\x42\xfa\x61\x65\xf5\x0f\xb3\xe6\x92\x56\xc6\xd2\x94\x85\x42\xa2\xda\xf3\xde\xc5\xd2\x68\xf1\x1a\x8b\x61\x3b\x64\xa7\x03\x8e\x03\x3f\x7f\xc2\x96\xd3\x72\xa5\xb1\xb9\xf4\x85\xfe\xc8\x6e\x71\xb9\x05\x5d\x99\x14\x19\xf2\xc7\xb5\x1a\xcb\x91\x19\xcc\x28\xab\xf6\xd2\x2e\x99\x52\xe5\x91\x47\x2b\x77\x1f\x5d\x5e\x1d\x88\x4d\xcc\x50\x50\xcd\x7a\xbf\xab\x05\x6b\x6f\x21\x5d\xe3\xcd\xab\xc1\xdd\xfd\xfe\x26\x1d\x5b\xfc\x95\xaf\x55\x8d\x6e\x8d\xbf\xb5\x95\x46\xfe\x7a\x3c\x14\x52\x62\xa8\x9f\x49\x60\x22\xa0\x56\x9e\x75\x68\xb5\x24\x5d\xd2\x32\x32\x3a\xb5\x32\x4a\x79\x2d\xfc\x56\x9f\xfc\xfa\xe7\xd1\xb7\x1d\xe6\x75\xc7\x8d\x95\xb5\xf9\xd2\xda\x56\x35\xd6\xf1\x73\xe5\x68\xdb\xe7\x2f\x95\xa3\x6d\xed\xcf\x97\x23\x26\x74\x3c\xd7\xfb\xd5\xb8\xb0\x79\xa4\x18\x37\x5c\xfe\x1f\x69\x71\x93\xab\xe7\x6a\x71\x81\xd0\x5b\x81\x6d\x50\xe2\x3a\x17\x0f\x0b\x71\xdd\xdd\xef\xd3\xa1\xa9\xcb\x1a\xac\xa7\xc8\x70\x75\x6a\x68\x92\xe1\xca\x6f\x53\x45\xfd\x26\x11\x6e\x1f\x1f\x76\x49\xd1\x0a\x6f\xcb\x74\x47\x96\xce\x0d\xb5\x77\xc2\x23\x7b\x53\x37\xb7\x4a\x34\xe4\x63\xf4\xc2\x59\xb3\xae\x71\xd6\x70\xd4\x29\x99\x7b\x32\x9e\xe5\x69\xbb\x11\xc6\xe2\x24\x53\xbb\x6b\xf9\xe6\x3f\x03\x27\xc2\xd8\xdc\xf9\x76\x58\x5c\xf3\xb4\xb2\x31\xe2\x99\x7a\x70\x6b\x4f\xcb\x94\x27\xb8\x69\x6f\x8b\x73\x05\x35\xb6\xbc\xfc\x05\xce\x4e\xce\x07\x70\x60\xae\x1c\xb1\x80\x0c\x95\xa2\x09\xfa\xff\xe4\x8e\x07\x53\x77\xe7\x0b\xa3\x2f\x83\x13\xf3\x42\x42\x8b\x04\x9b\x0d\x0f\x14\x1c\xc4\xe5\xb2\x07\xb7\xae\x29\xe3\x27\xb0\xb6\x3a\x13\xb6\xcb\xf4\xab\xa6\xea\x41\x84\xa9\x69\xab\xe5\x45\x6d\x55\x7f\x60\x2e\xdc\xcb\xca\x7b\x90\x51\x16\xc3\xbf\x3c\x10\x53\xc3\xd6\x86\xdd\xd7\xf2\xf3\xdb\x3b\xb3\x5c\x3f\x63\x6e\xac\xc3\x5f\x3b\x65\x32\xa4\x75\x0f\x98\x2a\xdc\x6b\xbc\xb2\xdd\x9d\xd8\x72\x23\x49\xcb\x22\x19\xa6\x88\xf9\xb2\xa7\x99\x9f\xf7\xc1\x69\x8a\xfa\x72\x19\x76\x6f\xcc\x27\x97\x73\xfd\xa0\xfd\x6b\x66\xe4\xa6\xdf\xc5\x1f\x1d\x1a\xe6\x9c\x59\xea\xd3\x0c\x17\x6d\xc9\xa2\xdc\x37\x50\xcd\xfa\xd2\xf8\xb9\x33\xf8\xa1\x71\x6a\x13\x5e\x3e\xd7\x73\xfa\xdf\x8e\xd6\xc0\xca\xa5\x9a\xb0\xdb\x4c\xff\xf7\x73\xd6\x42\xad\xb4\xb9\xf5\x56\x79\x6f\x37\x19\xb4\x6b\x94\x78\xf0\xf6\xcd\x83\x53\xb6\xe6\xf0\x37\x4c\xd8\x85\x46\xb6\x9a\x4f\x85\xcc\x5b\x6f\x32\x75\x26\xdc\xc3\x52\xb5\x18\x0a\x73\x07\x6c\x1a\xc4\x5b\x97\xd8\xc6\x41\x5c\x86\x6d\xac\xf7\xad\x31\x5c\xe6\xb7\xab\xda\x9f\x3b\xb1\xff\x13\x00\x00\xff\xff\x25\xcb\xc3\xb1\x47\x17\x00\x00") - -func testImagesResourceConsumerResource_consumer_handlerGoBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerResource_consumer_handlerGo, - "test/images/resource-consumer/resource_consumer_handler.go", - ) -} - -func testImagesResourceConsumerResource_consumer_handlerGo() (*asset, error) { - bytes, err := testImagesResourceConsumerResource_consumer_handlerGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/resource_consumer_handler.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesResourceConsumerUtilsGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x55\x5d\x8f\xda\x46\x14\x7d\x66\x7e\xc5\x91\xa5\x48\x90\x82\xbd\x8b\xd4\x97\xad\xf6\x81\x90\x6d\x8b\x92\x85\x68\xcd\x36\xca\xe3\x30\xbe\xd8\xa3\x7a\x66\xdc\xf9\x80\x45\x55\xfe\x7b\x35\xe6\xcb\xb0\xda\x2a\x79\x31\xc3\xdc\x73\xee\x3d\xf7\x9e\x6b\xc8\xde\xb3\xa9\x69\x76\x56\x96\x95\xc7\xf8\xe6\xf6\x57\x2c\x2b\xc2\xa7\xb0\x22\xab\xc9\x93\xc3\x24\xf8\xca\x58\x97\x32\xf6\x59\x0a\xd2\x8e\x0a\x04\x5d\x90\x85\xaf\x08\x93\x86\x8b\x8a\x70\x88\x0c\xf1\x17\x59\x27\x8d\xc6\x38\xbd\x41\x3f\x02\x92\x43\x28\x19\xfc\xc6\x76\x26\x40\xf1\x1d\xb4\xf1\x08\x8e\xe0\x2b\xe9\xb0\x96\x35\x81\x5e\x04\x35\x1e\x52\x43\x18\xd5\xd4\x92\x6b\x41\xd8\x4a\x5f\xb5\x45\x0e\x29\x52\xf6\xed\x90\xc0\xac\x3c\x97\x1a\x1c\xc2\x34\x3b\x98\x75\x17\x05\xee\x19\x03\x80\xca\xfb\xe6\x2e\xcb\xb6\xdb\x6d\xca\x5b\x95\xa9\xb1\x65\x56\xef\x51\x2e\xfb\x3c\x9b\x3e\xcc\xf3\x87\xd1\x38\xbd\x61\xec\x59\xd7\xe4\x1c\x2c\xfd\x13\xa4\xa5\x02\xab\x1d\x78\xd3\xd4\x52\xf0\x55\x4d\xa8\xf9\x16\xc6\x82\x97\x96\xa8\x80\x37\x51\xe7\xd6\x4a\x2f\x75\x39\x84\x33\x6b\xbf\xe5\x96\x58\x21\x9d\xb7\x72\x15\xfc\xc5\x80\x8e\xaa\xa4\x43\x17\x60\x34\xb8\x46\x32\xc9\x31\xcb\x13\x7c\x98\xe4\xb3\x7c\xc8\xbe\xce\x96\x7f\x2e\x9e\x97\xf8\x3a\x79\x7a\x9a\xcc\x97\xb3\x87\x1c\x8b\x27\x4c\x17\xf3\x8f\xb3\xe5\x6c\x31\xcf\xb1\xf8\x1d\x93\xf9\x37\x7c\x9a\xcd\x3f\x0e\x41\xd2\x57\x64\x41\x2f\x8d\x8d\xda\x8d\x85\x8c\xa3\xa3\x22\x65\x39\xd1\x45\xf1\xb5\xd9\x8b\x71\x0d\x09\xb9\x96\x02\x35\xd7\x65\xe0\x25\xa1\x34\x1b\xb2\x5a\xea\x12\x0d\x59\x25\x5d\x34\xcf\x81\xeb\x82\xd5\x52\x49\xcf\x7d\xfb\xfd\x55\x3b\x29\x7b\x9f\x31\xd6\x70\xf1\x77\x4c\xa2\xb8\xd4\x8c\x49\xd5\x18\xeb\xd1\x67\xbd\x64\xad\x7c\xc2\x7a\x49\x6d\xca\xf8\x61\x5c\x46\x2f\x24\xe2\xd1\x79\x2b\x8c\xde\x24\x6c\xc0\x98\x30\xda\xb5\xf0\x78\x08\x8a\xa6\x5f\x9e\x3f\x48\xcd\xed\x0e\xf7\x48\xd2\xec\x70\x3b\x12\x4d\xe8\x9e\x93\x13\xfe\x91\xd4\x19\xef\x7c\x1c\x42\x9b\x37\xcb\x30\x3d\x65\xc4\x01\xec\xc0\x51\xca\x0d\x69\xe8\xa0\x56\x64\xe3\xd2\x28\x59\xd7\x52\x18\x4b\xee\x7a\x40\x54\xa0\x08\xb6\x6d\x3e\x65\xeb\xa0\x45\x27\x63\xbf\x43\x93\xda\x0f\x4f\xc8\x9c\x44\xbc\x18\xe0\x5f\xd6\xab\x4d\x99\x7e\xb1\x52\xfb\x75\x3f\xe9\x88\x39\x53\xef\xf0\x6e\x73\x41\x8d\x17\xc9\xb0\x83\xb8\x88\x0e\x58\x2f\xcb\x20\x2c\xf1\xb8\x74\xd0\xb4\x3d\x36\x06\xd1\x04\x34\xd6\x08\x72\x8e\xf5\xb8\x2d\x6f\x71\x77\x8f\xb5\xf2\x69\xde\x1c\x04\x8c\xce\x49\xef\xdf\x15\x17\x45\x06\x2d\x65\xfc\x9a\x72\xac\x3d\x72\x24\xf6\xa4\x4b\x35\x67\xcf\x22\x37\xda\x9b\x4e\x8d\x52\x5c\x17\xfd\x6b\x3b\x87\x88\xaa\xda\xe7\xf8\x82\x99\x3e\x05\xdd\x1f\xb0\xef\x5d\xcb\x1e\x49\xfd\xaf\x65\x54\xf2\xd5\xce\xff\x84\x63\x8f\xa4\xfa\x67\xd6\xcf\x18\x16\xa5\x9c\x98\x6f\xfa\x75\x04\x5c\x0f\xe8\x14\xc8\xbd\x8d\x96\xdd\xdd\xe3\xb0\xfc\xe9\xcc\x1b\x7e\xd6\x34\xc0\x2f\x48\x1e\x13\xd6\xeb\xf0\xdf\xe0\xfc\xd8\x42\x28\x52\xc6\xee\xce\x3b\x71\x7e\x5d\xde\xb2\xea\xf4\x26\x0d\x91\x8c\x54\x32\x44\x72\x1b\x1f\xa3\xd1\x46\x8d\x5a\x8d\xdd\x46\xf7\xda\x8e\xe1\x8a\xeb\x32\x62\x6f\x5a\x82\xbf\xdc\x93\x3d\x74\xd0\x95\x70\xe1\xf9\x1f\xe4\xa7\xc1\x5a\xd2\x3e\xf7\xdc\x07\x87\x76\xfd\x1c\x4c\xf0\xe0\xd0\x66\x64\x9a\x83\x99\xd7\xc8\xfe\x2b\xd3\xae\x11\xc9\x7e\x42\xf1\xaf\x26\xfe\x2c\x92\x22\xed\xa9\x60\xdf\xd9\x7f\x01\x00\x00\xff\xff\x36\xd7\xfc\x69\xf0\x06\x00\x00") - -func testImagesResourceConsumerUtilsGoBytes() ([]byte, error) { - return bindataRead( - _testImagesResourceConsumerUtilsGo, - "test/images/resource-consumer/utils.go", - ) -} - -func testImagesResourceConsumerUtilsGo() (*asset, error) { - bytes, err := testImagesResourceConsumerUtilsGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/resource-consumer/utils.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesSampleApiserverBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\xb3\xe0\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\xaa\xd8\xd8\xd2\xa0\xc2\x16\x4c\x22\x0b\x03\x02\x00\x00\xff\xff\x68\xd4\xb7\x61\x73\x00\x00\x00") - -func testImagesSampleApiserverBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesSampleApiserverBaseimage, - "test/images/sample-apiserver/BASEIMAGE", - ) -} - -func testImagesSampleApiserverBaseimage() (*asset, error) { - bytes, err := testImagesSampleApiserverBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/sample-apiserver/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesSampleApiserverDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x54\x5d\x6f\xdb\x36\x14\x7d\xd7\xaf\x38\xb0\x82\x62\x03\x22\xc9\xce\x3a\x24\x48\x91\x07\xc5\x71\x1d\xa1\xa9\x15\x58\x4e\x8b\x60\x1d\x0c\x9a\xba\x96\x38\xcb\xa4\x46\x52\x51\x8c\xa2\xff\x7d\x20\xed\x66\x09\xfc\x50\x3d\x51\xbc\x5f\xe7\x9e\x73\x2f\x43\x8c\x55\xbb\xd3\xa2\xaa\x2d\xce\x86\xa3\x0b\x2c\x6a\xc2\xa7\x6e\x45\x5a\x92\x25\x83\xb4\xb3\xb5\xd2\x26\x0e\xc2\x20\xc4\x9d\xe0\x24\x0d\x95\xe8\x64\x49\x1a\xb6\x26\xa4\x2d\xe3\x35\xfd\xb4\x9c\xe2\x0b\x69\x23\x94\xc4\x59\x3c\xc4\x6f\xce\x61\x70\x30\x0d\x7e\xff\x10\x84\xd8\xa9\x0e\x5b\xb6\x83\x54\x16\x9d\x21\xd8\x5a\x18\xac\x45\x43\xa0\x67\x4e\xad\x85\x90\xe0\x6a\xdb\x36\x82\x49\x4e\xe8\x85\xad\x7d\x99\x43\x92\x38\x08\xf1\x78\x48\xa1\x56\x96\x09\x09\x06\xae\xda\x1d\xd4\xfa\xb5\x1f\x98\xf5\x80\xdd\x57\x5b\xdb\x5e\x26\x49\xdf\xf7\x31\xf3\x60\x63\xa5\xab\xa4\xd9\x3b\x9a\xe4\x2e\x1b\x4f\x66\xc5\x24\x3a\x8b\x87\x3e\xe4\x41\x36\x64\x0c\x34\xfd\xdb\x09\x4d\x25\x56\x3b\xb0\xb6\x6d\x04\x67\xab\x86\xd0\xb0\x1e\x4a\x83\x55\x9a\xa8\x84\x55\x0e\x6f\xaf\x85\x15\xb2\x3a\x85\x51\x6b\xdb\x33\x4d\x41\x88\x52\x18\xab\xc5\xaa\xb3\x6f\xc8\xfa\x89\x4e\x98\x37\x0e\x4a\x82\x49\x0c\xd2\x02\x59\x31\xc0\x75\x5a\x64\xc5\x69\x10\xe2\x6b\xb6\xb8\xcd\x1f\x16\xf8\x9a\xce\xe7\xe9\x6c\x91\x4d\x0a\xe4\x73\x8c\xf3\xd9\x4d\xb6\xc8\xf2\x59\x81\xfc\x23\xd2\xd9\x23\x3e\x65\xb3\x9b\x53\x90\xb0\x35\x69\xd0\x73\xab\x1d\x7e\xa5\x21\x1c\x8d\x54\x3a\xce\x0a\xa2\x37\x00\xd6\x6a\x0f\xc8\xb4\xc4\xc5\x5a\x70\x34\x4c\x56\x1d\xab\x08\x95\x7a\x22\x2d\x85\xac\xd0\x92\xde\x0a\xe3\xc4\x34\x60\xb2\x0c\x42\x34\x62\x2b\x2c\xb3\xfe\xe6\xa8\xa9\x38\x08\x3e\xce\xf3\xcf\xd8\x5c\x98\xb8\xe2\x3a\x16\x2a\xd9\x74\x2b\x8a\xb8\x56\xc6\x5c\x3e\x8d\xe2\xd1\x30\x7e\x1f\x8d\xc0\x0c\x56\x9d\x68\xca\xe5\xe6\xc2\x2c\x47\xcb\xd1\x70\x69\xd8\xb6\x6d\x68\xc9\x5a\x61\x48\x3f\x91\x0e\x82\xc9\xec\x0b\xa6\xf9\x7d\xba\xb8\x45\x52\xa9\x60\xfe\x30\xc3\x76\x53\x0a\x8d\xa8\xc5\xc9\xf7\xbd\xe5\x47\x62\x34\x7f\xf5\xb7\x12\xd2\xc7\xf9\xa8\x93\xfd\xad\xbb\xbc\x3c\x71\xa7\x20\x08\xfd\x64\xd3\x19\x81\x55\x95\xa6\x8a\x59\xc7\x01\x19\x8b\x9e\x39\xba\x44\x25\x24\x6b\x9a\x1d\x58\x59\x52\xe9\x74\x0d\xff\x1c\xfe\xf1\xfe\xdc\xf5\xee\x05\x23\x23\x2a\xb9\x17\xdd\x87\xb1\x95\x68\x84\xdd\xb9\x7f\xdd\xb9\x39\x1c\xc5\xe7\x41\x88\x7d\x37\xd1\x4b\x37\x2e\x93\xa4\x9e\x34\x34\x35\xc4\x0c\x99\x18\xad\x3f\xc0\xd0\x1e\x90\x4f\x27\xd9\x96\x4a\x0c\x8a\x5a\x75\x4d\x89\x15\xc1\xcf\x9b\x55\x30\x5d\xdb\x2a\x6d\x3d\xd7\xa3\xf8\x1c\x85\x2f\x10\x84\x48\xef\x33\x14\xfb\x1a\x9d\x71\x8a\x39\x0f\xde\x69\x4d\xd2\x22\x7d\x69\x72\xe0\xf9\xab\x14\x2a\xb2\x88\x4a\x2f\x90\x50\xc9\x11\xce\x6f\x81\xdb\x96\x77\xef\xc0\xcb\xb7\x24\x27\xbf\x8c\xa8\x84\x05\xaf\x89\x6f\x54\x67\x11\x45\x56\x33\xbe\x39\x50\x9a\x1c\xba\x8e\xdc\x00\xfc\x1f\x31\x9e\xe6\xcb\xc9\x2c\xbd\xbe\x9b\xdc\x5c\x0d\x31\xcd\xf3\xe2\xaa\x11\xb2\x7b\xc6\x34\x4f\xe7\xe3\xdb\xab\xeb\xb4\x98\xb8\x83\xc3\x2d\xa4\xb1\xac\x69\x10\x3b\x11\xdd\xe4\x32\xbd\x3d\x7d\x6d\xe8\x0c\x19\x54\xca\xa9\x9d\xf8\x2c\x4b\xef\x61\x14\xfe\xe9\x8c\xc5\x5a\xc8\xd2\x73\xe3\xdf\x19\x27\xa7\x7f\x31\x84\xf5\x52\xd6\x04\xad\x94\x85\x51\x41\x88\x9e\xc0\x99\x7c\xb1\xbb\x76\xd6\x5a\x6d\xf7\xcf\x94\xad\xb5\xea\xc1\x7a\xb6\x03\x57\xd2\x3d\x3e\x4e\xdd\xad\xdb\x1a\xef\xc4\x60\x2c\x93\x25\xd3\x25\x1a\xc5\xfd\x9e\x78\xea\x7d\xfd\x64\x8f\x0f\x91\xd3\xf9\x78\x48\x22\x7a\x26\x0e\xde\xe2\xfb\x0f\x24\xf8\xf6\xe1\xb0\x4c\x8e\x86\xec\x73\x3a\x9d\x04\xe3\xfc\xfe\x11\x51\xe4\x0a\x5d\xfd\x62\x7f\x70\xac\xd4\xd1\x8d\xdb\xb1\xc5\xfc\xf1\x3e\xcf\x66\x0b\xfc\x35\x38\xb2\x0f\xfe\x0e\xfe\x0b\x00\x00\xff\xff\x10\x1e\x9b\x61\x1a\x06\x00\x00") - -func testImagesSampleApiserverDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesSampleApiserverDockerfile, - "test/images/sample-apiserver/Dockerfile", - ) -} - -func testImagesSampleApiserverDockerfile() (*asset, error) { - bytes, err := testImagesSampleApiserverDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/sample-apiserver/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesSampleApiserverVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\x34\xe0\x02\x04\x00\x00\xff\xff\x6c\xee\xb4\x00\x05\x00\x00\x00") - -func testImagesSampleApiserverVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesSampleApiserverVersion, - "test/images/sample-apiserver/VERSION", - ) -} - -func testImagesSampleApiserverVersion() (*asset, error) { - bytes, err := testImagesSampleApiserverVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/sample-apiserver/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesSampleDevicePluginBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\xb3\xe0\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\xaa\xd8\xd8\xd2\xa0\xc2\x16\x4c\x22\x0b\x03\x02\x00\x00\xff\xff\x68\xd4\xb7\x61\x73\x00\x00\x00") - -func testImagesSampleDevicePluginBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesSampleDevicePluginBaseimage, - "test/images/sample-device-plugin/BASEIMAGE", - ) -} - -func testImagesSampleDevicePluginBaseimage() (*asset, error) { - bytes, err := testImagesSampleDevicePluginBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/sample-device-plugin/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesSampleDevicePluginDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x91\xc1\x6e\xdb\x3a\x10\x45\xf7\xfc\x8a\x0b\x69\xf3\x1e\xe0\xc8\xae\x57\x45\xbb\x52\x6d\xa5\x15\x92\x48\x85\xa5\x34\x30\x8a\x2e\x68\x69\x2c\x0d\x40\x93\x2c\x49\x45\xf1\xdf\x17\x52\x1c\xa0\x46\xca\xe5\xcc\xe1\xf0\xf0\x4e\x8c\x8d\xb1\x67\xc7\x5d\x1f\xb0\x5e\x7d\xf8\x88\xba\x27\xdc\x0d\x07\x72\x9a\x02\x79\xa4\x43\xe8\x8d\xf3\x89\x88\x45\x8c\x7b\x6e\x48\x7b\x6a\x31\xe8\x96\x1c\x42\x4f\x48\xad\x6c\x7a\x7a\xeb\x2c\xf0\x83\x9c\x67\xa3\xb1\x4e\x56\xf8\x6f\x02\xa2\x4b\x2b\xfa\xff\xb3\x88\x71\x36\x03\x4e\xf2\x0c\x6d\x02\x06\x4f\x08\x3d\x7b\x1c\x59\x11\xe8\xa5\x21\x1b\xc0\x1a\x8d\x39\x59\xc5\x52\x37\x84\x91\x43\x3f\x3f\x73\x19\x92\x88\x18\xfb\xcb\x08\x73\x08\x92\x35\x24\x1a\x63\xcf\x30\xc7\xbf\x39\xc8\x30\x0b\x4f\xa7\x0f\xc1\x7e\x5a\x2e\xc7\x71\x4c\xe4\x2c\x9b\x18\xd7\x2d\xd5\x2b\xe8\x97\xf7\xf9\x26\x2b\xaa\xec\x66\x9d\xac\xe6\x2b\x8f\x5a\x91\xf7\x70\xf4\x7b\x60\x47\x2d\x0e\x67\x48\x6b\x15\x37\xf2\xa0\x08\x4a\x8e\x30\x0e\xb2\x73\x44\x2d\x82\x99\x7c\x47\xc7\x81\x75\xb7\x80\x37\xc7\x30\x4a\x47\x22\x46\xcb\x3e\x38\x3e\x0c\xe1\x2a\xac\x37\x3b\xf6\x57\x80\xd1\x90\x1a\x51\x5a\x21\xaf\x22\x7c\x49\xab\xbc\x5a\x88\x18\x4f\x79\xfd\xad\x7c\xac\xf1\x94\xee\x76\x69\x51\xe7\x59\x85\x72\x87\x4d\x59\x6c\xf3\x3a\x2f\x8b\x0a\xe5\x2d\xd2\x62\x8f\xbb\xbc\xd8\x2e\x40\x1c\x7a\x72\xa0\x17\xeb\x26\x7f\xe3\xc0\x53\x8c\xd4\x4e\x99\x55\x44\x57\x02\x47\xf3\x2a\xe4\x2d\x35\x7c\xe4\x06\x4a\xea\x6e\x90\x1d\xa1\x33\xcf\xe4\x34\xeb\x0e\x96\xdc\x89\xfd\xb4\x4c\x0f\xa9\x5b\x11\x43\xf1\x89\x83\x0c\x73\xe5\xdd\xa7\x12\x21\x6e\x77\xe5\xc3\xa4\x9f\xe5\x0f\xe9\xd7\x4c\xa4\xdb\x2d\xbc\x3c\x59\x45\x2d\x3d\x73\x43\x56\x0d\x1d\x6b\x2c\xdf\xd7\x44\x56\xd4\xbb\xfd\xf7\x32\x2f\x6a\xfc\x8c\xfe\x01\x44\x0b\x44\x37\x52\x79\xa3\x4c\x17\x8c\x0f\x2d\x39\x17\xfd\x12\x7f\x02\x00\x00\xff\xff\x0c\xd0\xf5\xa1\xbd\x02\x00\x00") - -func testImagesSampleDevicePluginDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesSampleDevicePluginDockerfile, - "test/images/sample-device-plugin/Dockerfile", - ) -} - -func testImagesSampleDevicePluginDockerfile() (*asset, error) { - bytes, err := testImagesSampleDevicePluginDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/sample-device-plugin/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesSampleDevicePluginMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x30\x14\x85\x9f\xe7\x5f\x71\xd4\xf0\xd0\x4a\x25\x65\x68\x9a\x26\x26\x34\x65\x6d\x07\x11\x28\x99\x92\x02\xe2\x09\x39\xc9\x6d\x72\x25\xc7\xf6\x6c\x87\xd0\x7f\x3f\xa5\x80\x34\x34\xbf\xf9\x9e\xe3\xe3\xcf\xc7\x11\xd6\xc6\x1e\x1c\xb7\x5d\xc0\xf9\xd9\xe7\x6f\xd8\x75\x84\x9b\xa1\x22\xa7\x29\x90\x47\x32\x84\xce\x38\x1f\x8b\x48\x44\xb8\xe5\x9a\xb4\xa7\x06\x83\x6e\xc8\x21\x74\x84\xc4\xca\xba\xa3\x77\x65\x89\x7b\x72\x9e\x8d\xc6\x79\x7c\x86\xf9\x64\x98\xbd\x49\xb3\xc5\x77\x11\xe1\x60\x06\xf4\xf2\x00\x6d\x02\x06\x4f\x08\x1d\x7b\xec\x59\x11\xe8\xa5\x26\x1b\xc0\x1a\xb5\xe9\xad\x62\xa9\x6b\xc2\xc8\xa1\x3b\x5e\xf3\x16\x12\x8b\x08\x8f\x6f\x11\xa6\x0a\x92\x35\x24\x6a\x63\x0f\x30\xfb\x7f\x7d\x90\xe1\x08\x3c\xad\x2e\x04\x7b\xb1\x5a\x8d\xe3\x18\xcb\x23\x6c\x6c\x5c\xbb\x52\xaf\x46\xbf\xba\x4d\xd7\xdb\xac\xdc\x9e\x9e\xc7\x67\xc7\x23\x77\x5a\x91\xf7\x70\xf4\x67\x60\x47\x0d\xaa\x03\xa4\xb5\x8a\x6b\x59\x29\x82\x92\x23\x8c\x83\x6c\x1d\x51\x83\x60\x26\xde\xd1\x71\x60\xdd\x2e\xe1\xcd\x3e\x8c\xd2\x91\x88\xd0\xb0\x0f\x8e\xab\x21\x7c\x28\xeb\x9d\x8e\xfd\x07\x83\xd1\x90\x1a\xb3\xa4\x44\x5a\xce\xf0\x33\x29\xd3\x72\x29\x22\x3c\xa4\xbb\xeb\xfc\x6e\x87\x87\xa4\x28\x92\x6c\x97\x6e\x4b\xe4\x05\xd6\x79\xb6\x49\x77\x69\x9e\x95\xc8\x7f\x21\xc9\x1e\x71\x93\x66\x9b\x25\x88\x43\x47\x0e\xf4\x62\xdd\xc4\x6f\x1c\x78\xaa\x91\x9a\xa9\xb3\x92\xe8\x03\xc0\xde\xbc\x02\x79\x4b\x35\xef\xb9\x86\x92\xba\x1d\x64\x4b\x68\xcd\x33\x39\xcd\xba\x85\x25\xd7\xb3\x9f\x3e\xd3\x43\xea\x46\x44\x50\xdc\x73\x90\xe1\x38\xf9\xef\x51\xb1\x10\x65\xb1\x2e\x2f\xbd\xec\xad\xa2\x86\x9e\xb9\x26\xab\x86\x96\xb5\x48\x8a\xf5\x35\x7e\x5c\x42\xf6\xcd\xd7\x2f\x62\x97\x14\x57\xdb\xdd\xb4\x3f\x99\xaf\xef\x8a\x4d\x5a\x2c\xc4\x55\x7e\x9b\x64\x57\x4f\xf7\xdb\xa2\x4c\xf3\x6c\xd2\x94\x0c\xe4\xc3\x14\xf9\xb4\x49\x0b\x4c\x66\x6d\x42\xc3\x0e\x27\x73\xdf\x91\x52\xb0\x63\xb3\x58\x08\x7a\xb1\xc6\x05\x21\x2a\xd6\x17\xe2\x53\x1c\xaf\xb8\x97\x2d\x9d\x0e\x81\x55\xec\x3b\x54\xac\x71\x32\x9f\xc0\x16\x42\xc4\xbf\xaf\xf3\xec\xf1\x62\x1a\x8a\xbf\x01\x00\x00\xff\xff\xae\x13\x55\xb4\xf8\x02\x00\x00") - -func testImagesSampleDevicePluginMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesSampleDevicePluginMakefile, - "test/images/sample-device-plugin/Makefile", - ) -} - -func testImagesSampleDevicePluginMakefile() (*asset, error) { - bytes, err := testImagesSampleDevicePluginMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/sample-device-plugin/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesSampleDevicePluginVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesSampleDevicePluginVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesSampleDevicePluginVersion, - "test/images/sample-device-plugin/VERSION", - ) -} - -func testImagesSampleDevicePluginVersion() (*asset, error) { - bytes, err := testImagesSampleDevicePluginVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/sample-device-plugin/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesSampleDevicePluginSampledevicepluginGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x56\x4f\x6f\xdb\x3e\x12\x3d\x9b\x9f\x62\x42\xa0\x81\x9c\xaa\x52\x93\x53\xe1\xc2\x07\x6f\x9c\xb6\xda\x74\x9d\xc0\x4e\xb6\x28\x8a\xa2\xa0\xa5\x91\x4c\x58\x22\x59\x92\xb2\x63\x04\xfe\xee\x0b\x52\xb2\x2d\x3b\x29\xba\xc0\x2f\x87\x20\xe2\xcc\xbc\x79\xf3\xe7\x91\x89\x2f\xc8\xb5\x54\x1b\xcd\x8b\x85\x85\xab\xf7\x97\x1f\xe0\x61\x81\x70\x5b\xcf\x51\x0b\xb4\x68\x60\x54\xdb\x85\xd4\x26\x22\xe4\x2b\x4f\x51\x18\xcc\xa0\x16\x19\x6a\xb0\x0b\x84\x91\x62\xe9\x02\xa1\xb5\x84\xf0\x5f\xd4\x86\x4b\x01\x57\xd1\x7b\x08\x9c\x03\x6d\x4d\xb4\xff\x91\x6c\x64\x0d\x15\xdb\x80\x90\x16\x6a\x83\x60\x17\xdc\x40\xce\x4b\x04\x7c\x4a\x51\x59\xe0\x02\x52\x59\xa9\x92\x33\x91\x22\xac\xb9\x5d\xf8\x24\x2d\x44\x44\xbe\xb7\x00\x72\x6e\x19\x17\xc0\x20\x95\x6a\x03\x32\xef\x7a\x01\xb3\x84\x00\x00\x2c\xac\x55\x83\x38\x5e\xaf\xd7\x11\xf3\x2c\x23\xa9\x8b\xb8\x6c\xbc\x4c\xfc\x35\xb9\xbe\x99\xcc\x6e\xde\x5d\x45\xef\x09\x79\x14\x25\x1a\x03\x1a\x7f\xd7\x5c\x63\x06\xf3\x0d\x30\xa5\x4a\x9e\xb2\x79\x89\x50\xb2\x35\x48\x0d\xac\xd0\x88\x19\x58\xe9\x78\xae\x35\xb7\x5c\x14\x21\x18\x99\xdb\x35\xd3\x48\x32\x6e\xac\xe6\xf3\xda\x1e\x35\x68\xc7\x8a\x1b\xe8\x3a\x48\x01\x4c\x00\x1d\xcd\x20\x99\x51\xf8\xd7\x68\x96\xcc\x42\xf2\x2d\x79\xf8\x72\xf7\xf8\x00\xdf\x46\xd3\xe9\x68\xf2\x90\xdc\xcc\xe0\x6e\x0a\xd7\x77\x93\x71\xf2\x90\xdc\x4d\x66\x70\xf7\x09\x46\x93\xef\x70\x9b\x4c\xc6\x21\x20\xb7\x0b\xd4\x80\x4f\x4a\x3b\xee\x52\x03\x77\xad\xc3\x2c\x22\x33\xc4\xa3\xe4\xb9\x6c\xc8\x18\x85\x29\xcf\x79\x0a\x25\x13\x45\xcd\x0a\x84\x42\xae\x50\x0b\x2e\x0a\x50\xa8\x2b\x6e\xdc\xf0\x0c\x30\x91\x91\x92\x57\xdc\x32\xeb\xbf\x5f\x94\x13\x91\x8b\x98\x10\xc5\xd2\xa5\x03\xa9\x18\x17\x84\xf0\x4a\x49\x6d\x21\x20\x3d\x9a\x57\x96\x92\x1e\x95\xc6\xfd\x56\xcc\x2e\x62\x37\x65\xf7\x87\x3b\xb0\xbc\x42\x4a\x48\x8f\x2e\x3f\x98\x88\xcb\x78\x59\xca\x82\x92\x9e\x2a\xeb\x82\x0b\xa6\x38\xec\x0d\xfb\x25\x8c\xd5\xb2\xf0\x9f\x25\xda\x98\x29\x6e\xe2\x0c\x57\x3c\xc5\x26\x26\x5e\x5d\xce\xd1\xb2\x4b\x4a\x7a\x59\xf5\xb7\xe8\xb4\x6a\x63\x2b\x26\x58\x81\x9a\x92\x3e\x21\xa9\x14\xc6\x53\xd7\x68\x64\xad\x53\x9c\xb0\x0a\x61\x08\x14\x9f\x58\xa5\x4a\x8c\x52\x59\xc5\x3b\x9b\x8f\x88\x63\x30\xb6\x9e\x8f\xca\x52\xa6\x9f\x6a\x91\x42\xaa\x91\x39\xb9\x30\x91\x81\x46\x5b\x6b\xd7\x47\x67\xf5\x3d\x04\x8d\x46\xc9\xee\x2c\xb8\x50\xb5\xdd\x79\xa0\x5f\x3d\x34\x96\xe4\x0e\xeb\x08\x39\xd0\x70\xb1\xef\x4d\x34\x6a\x03\xa6\x8d\x7f\x08\x19\xae\x0c\x54\x4c\xfd\x70\xcb\x25\x8a\x9f\x07\xd7\xb1\x2f\xb3\x0f\xc1\xab\xe1\x0d\x9d\x10\x50\x6b\xa9\xfb\xf0\x4c\x7a\x2b\xa6\xf7\x34\x0d\xfc\x39\x86\xf4\x5c\x0d\xbf\x42\xc7\x19\x06\x43\xd0\x4c\x14\x08\x3a\xba\x96\xc2\xc9\x12\x75\xcb\xcd\x38\xd0\xde\xbe\xf0\xc1\x10\xce\x0f\xa0\x7b\xe7\x53\xf4\xe7\x2d\xe9\x75\x12\x38\xa0\x64\xdc\x49\x83\xbf\xdb\xc2\x4c\x32\x6e\x32\xf4\x32\x5c\x85\x20\x97\xce\xc9\x75\xe3\xc7\x3e\xec\xa7\xb3\xf2\x1c\xce\xe4\xb2\xf1\xec\x35\x93\x01\xc1\xcb\x10\xf2\xca\x46\x37\xae\xfa\x3c\xa0\x5c\xac\x58\xc9\xb3\xe3\x89\x79\x94\xe6\x1a\x12\x52\xbc\xc3\x27\x6e\x9c\xe6\xa1\xd9\x1f\x78\x63\x68\x87\x62\xdf\xe1\x6f\x49\x9b\x31\xc3\x55\xf4\x05\x59\x69\x17\x70\x36\xec\xf4\xb2\x39\xdb\xfc\x43\x36\xb5\x58\xb4\x38\x0d\x95\xc1\x9f\xb9\xc4\x71\xbb\x99\x90\xb3\x25\xee\xa8\x3b\x39\x3a\x6b\xee\x34\xe9\xfa\xb6\xd3\x67\xf4\x6f\xc9\x45\x40\x63\x5b\x29\xea\x77\x2b\x72\x68\x3b\xa0\x12\x99\x80\x9c\x6b\x63\xdb\x32\x51\x6b\x17\x2d\x4d\x34\xc5\x4a\xae\x70\x54\x96\x81\xc7\xec\x7f\xf4\xb6\xb3\xa1\x2b\xee\x2f\xd5\xe6\x8c\x97\xcd\xbd\xda\x26\x38\x21\x0a\xb9\x96\x15\x28\x8d\x2b\x2e\x6b\x03\xba\x16\x6d\xbd\xa8\x75\xa7\xd2\x3c\xec\xd0\xb9\xf6\x35\xb7\x5c\x3a\x64\x5b\x42\xe7\xe7\x70\x26\x4d\x94\x98\x1b\x37\xd3\xc0\x01\xfd\xff\x24\x5f\x6f\xe7\xeb\x9c\xa2\xeb\x52\x1a\x0c\x9a\x16\xee\xa4\x10\xfd\x47\xd6\xc2\x1a\x18\xba\x47\x06\x45\x16\x9c\x18\xc2\xae\x50\xfc\x51\xc3\x6d\xaf\x99\x7b\x66\x17\x03\xf0\xc5\x85\xde\xf2\x45\x1a\xdb\x1c\xfa\x9f\x83\x65\xeb\xc8\x6c\x3b\x32\x34\x5d\x99\xee\xb4\xfe\x82\xc8\x6b\x5e\xe1\xfe\x72\xe8\x13\x5f\x5e\xdb\xaa\x73\x7d\xf0\x10\xbc\x24\x5b\xd2\x5c\x62\xee\x55\x08\x7c\x5b\xfd\x15\x35\x18\xc2\x8f\x9f\x17\xa7\xb7\x93\x2b\xec\x39\x19\x0f\x80\x8e\x71\xf5\xee\x92\x86\xd0\x28\x64\xf0\x52\x33\xdb\xf0\xc8\xf7\xea\x6f\xbe\x8e\x62\x63\x98\xc9\x74\x69\xc6\x7c\xb7\x1b\x9f\xd1\xa2\x58\x05\xf4\xfe\xeb\xe3\xe7\x64\xf2\x6b\x76\x77\x7d\xfb\x6b\x9c\x4c\x69\x9f\xf4\xdc\x53\x14\x25\x22\x97\x79\x40\x8f\x63\xdb\xf1\x1e\x1f\xf6\x89\xdb\xab\x93\x24\xc3\x21\x50\xea\xb7\xc9\xa3\xed\x16\xe8\xa6\x52\x76\x73\xe2\xeb\x52\xb6\x6d\x74\x7c\x7b\x46\xa6\x4b\xf4\x83\x74\x54\x4f\x70\xdf\x02\x8d\x33\x15\x51\x78\xeb\x17\x73\xa6\x34\x17\x36\x0f\xe8\x9b\x8c\x86\xe0\xde\xd4\x68\x22\xd7\x41\x3f\x7a\x14\xfc\x29\xe8\xbb\x8d\xcb\xd4\xa5\xbf\x13\xab\x68\x82\xeb\xa6\xdf\xf7\x0d\xa6\xad\xe7\x81\x9b\x8a\xfb\xf7\x65\x97\xd2\xcf\x77\xff\xf8\x85\x90\xb3\xd2\x8f\xfa\x20\xf3\x4c\x5d\x46\x33\xcb\xb4\x0d\x5e\xca\x5b\x31\xc1\x53\x2f\x24\xe2\x4b\xf1\xbe\x68\x0f\xaf\xd8\xd1\x9b\xf6\x02\x76\x8a\x05\x37\x16\x75\x70\x18\xe5\x6d\xf3\x60\xcf\x3c\xc1\x53\x72\xa7\x7b\xd4\xd4\x75\xff\xea\xcd\xd3\xa1\xe6\x9b\x8c\x25\xa6\x16\x9e\xb7\x64\x4b\xfe\x17\x00\x00\xff\xff\x83\x9c\xa8\x82\xfd\x0a\x00\x00") - -func testImagesSampleDevicePluginSampledevicepluginGoBytes() ([]byte, error) { - return bindataRead( - _testImagesSampleDevicePluginSampledevicepluginGo, - "test/images/sample-device-plugin/sampledeviceplugin.go", - ) -} - -func testImagesSampleDevicePluginSampledevicepluginGo() (*asset, error) { - bytes, err := testImagesSampleDevicePluginSampledevicepluginGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/sample-device-plugin/sampledeviceplugin.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesServeHostnameBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\x2a\x2d\xae\x4c\xca\xaf\xe0\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x12\x33\x33\xb1\x05\x93\x65\x16\x70\xd1\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x0d\x17\x2f\x36\xb6\x34\xa8\xb0\x05\x93\x70\x31\x40\x00\x00\x00\xff\xff\xc9\xd8\x77\x8f\x64\x00\x00\x00") - -func testImagesServeHostnameBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesServeHostnameBaseimage, - "test/images/serve-hostname/BASEIMAGE", - ) -} - -func testImagesServeHostnameBaseimage() (*asset, error) { - bytes, err := testImagesServeHostnameBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/serve-hostname/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesServeHostnameDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6f\x9b\x3c\x14\x86\xef\xfd\x2b\x5e\xc1\xcd\xf7\x49\x19\x64\x99\xd4\x69\xdb\x15\x4b\xe9\x86\xda\x42\x14\xe8\xba\x68\x9a\x26\x07\x4e\xe0\x48\xc4\xf6\x6c\x53\x9a\x7f\x3f\x41\x53\x69\xd1\x7c\xe9\xf3\xf8\xf5\xe3\xd7\x21\xd6\xda\x9c\x2c\xb7\x9d\xc7\x6a\xf9\xf6\x0a\x55\x47\xb8\x1d\xf6\x64\x15\x79\x72\x48\x06\xdf\x69\xeb\x22\x11\x8a\x10\x77\x5c\x93\x72\xd4\x60\x50\x0d\x59\xf8\x8e\x90\x18\x59\x77\xf4\x3a\x59\xe0\x1b\x59\xc7\x5a\x61\x15\x2d\xf1\xdf\x04\x04\xe7\x51\xf0\xff\x27\x11\xe2\xa4\x07\x1c\xe5\x09\x4a\x7b\x0c\x8e\xe0\x3b\x76\x38\x70\x4f\xa0\xe7\x9a\x8c\x07\x2b\xd4\xfa\x68\x7a\x96\xaa\x26\x8c\xec\xbb\xf9\x9a\x73\x48\x24\x42\xec\xce\x11\x7a\xef\x25\x2b\x48\xd4\xda\x9c\xa0\x0f\x7f\x73\x90\x7e\x16\x9e\x56\xe7\xbd\xf9\x18\xc7\xe3\x38\x46\x72\x96\x8d\xb4\x6d\xe3\xfe\x05\x74\xf1\x5d\xb6\x4e\xf3\x32\x7d\xb3\x8a\x96\xf3\x91\x07\xd5\x93\x73\xb0\xf4\x7b\x60\x4b\x0d\xf6\x27\x48\x63\x7a\xae\xe5\xbe\x27\xf4\x72\x84\xb6\x90\xad\x25\x6a\xe0\xf5\xe4\x3b\x5a\xf6\xac\xda\x05\x9c\x3e\xf8\x51\x5a\x12\x21\x1a\x76\xde\xf2\x7e\xf0\x17\x65\xbd\xda\xb1\xbb\x00\xb4\x82\x54\x08\x92\x12\x59\x19\xe0\x73\x52\x66\xe5\x42\x84\x78\xcc\xaa\xaf\xc5\x43\x85\xc7\x64\xbb\x4d\xf2\x2a\x4b\x4b\x14\x5b\xac\x8b\xfc\x3a\xab\xb2\x22\x2f\x51\xdc\x20\xc9\x77\xb8\xcd\xf2\xeb\x05\x88\x7d\x47\x16\xf4\x6c\xec\xe4\xaf\x2d\x78\xaa\x91\x9a\xa9\xb3\x92\xe8\x42\xe0\xa0\x5f\x84\x9c\xa1\x9a\x0f\x5c\xa3\x97\xaa\x1d\x64\x4b\x68\xf5\x13\x59\xc5\xaa\x85\x21\x7b\x64\x37\x7d\xa6\x83\x54\x8d\x08\xd1\xf3\x91\xbd\xf4\xf3\xce\x3f\x8f\x8a\x84\xb8\xd9\x16\xf7\x93\x7e\x9a\xdd\x27\x5f\x52\xb1\x2e\x36\x3b\x38\xb2\x4f\xf4\xab\xd3\xce\x2b\x79\x24\xc4\x22\xfd\xbe\x29\xca\x14\x1f\xde\xbd\xbf\x12\x69\x5e\x6d\x77\x9b\x22\xcb\x2b\xfc\x08\xe2\x4b\x34\xf8\x29\xfe\x04\x00\x00\xff\xff\xc2\xc1\x27\x26\x9c\x02\x00\x00") - -func testImagesServeHostnameDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesServeHostnameDockerfile, - "test/images/serve-hostname/Dockerfile", - ) -} - -func testImagesServeHostnameDockerfile() (*asset, error) { - bytes, err := testImagesServeHostnameDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/serve-hostname/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesServeHostnameMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x30\x14\x85\x9f\xe7\x5f\x71\xd4\xf0\xd0\x4a\x25\x65\x68\xe2\x81\x09\x4d\x59\xdb\x41\x04\x4a\xa6\xa4\x80\x78\x42\x4e\x72\x9b\x5c\x29\xb1\x33\xfb\x86\xd0\x7f\x3f\xa5\x80\x34\x34\xbf\xf9\x9e\xe3\xe3\xcf\xc7\x01\xd6\xb6\x3f\x38\xae\x1b\xc1\xf9\xd9\xd7\x0b\xec\x1a\xc2\xed\x50\x90\x33\x24\xe4\x11\x0d\xd2\x58\xe7\x43\x15\xa8\x00\x77\x5c\x92\xf1\x54\x61\x30\x15\x39\x48\x43\x88\x7a\x5d\x36\xf4\xa1\x2c\xf1\x40\xce\xb3\x35\x38\x0f\xcf\x30\x9f\x0c\xb3\x77\x69\xb6\xf8\xae\x02\x1c\xec\x80\x4e\x1f\x60\xac\x60\xf0\x04\x69\xd8\x63\xcf\x2d\x81\x5e\x4b\xea\x05\x6c\x50\xda\xae\x6f\x59\x9b\x92\x30\xb2\x34\xc7\x6b\xde\x43\x42\x15\xe0\xe9\x3d\xc2\x16\xa2\xd9\x40\xa3\xb4\xfd\x01\x76\xff\xaf\x0f\x5a\x8e\xc0\xd3\x6a\x44\xfa\xcb\xd5\x6a\x1c\xc7\x50\x1f\x61\x43\xeb\xea\x55\xfb\x66\xf4\xab\xbb\x78\xbd\x4d\xf2\xed\xe9\x79\x78\x76\x3c\x72\x6f\x5a\xf2\x1e\x8e\xfe\x0c\xec\xa8\x42\x71\x80\xee\xfb\x96\x4b\x5d\xb4\x84\x56\x8f\xb0\x0e\xba\x76\x44\x15\xc4\x4e\xbc\xa3\x63\x61\x53\x2f\xe1\xed\x5e\x46\xed\x48\x05\xa8\xd8\x8b\xe3\x62\x90\x4f\x65\x7d\xd0\xb1\xff\x64\xb0\x06\xda\x60\x16\xe5\x88\xf3\x19\x7e\x46\x79\x9c\x2f\x55\x80\xc7\x78\x77\x93\xde\xef\xf0\x18\x65\x59\x94\xec\xe2\x6d\x8e\x34\xc3\x3a\x4d\x36\xf1\x2e\x4e\x93\x1c\xe9\x2f\x44\xc9\x13\x6e\xe3\x64\xb3\x04\xb1\x34\xe4\x40\xaf\xbd\x9b\xf8\xad\x03\x4f\x35\x52\x35\x75\x96\x13\x7d\x02\xd8\xdb\x37\x20\xdf\x53\xc9\x7b\x2e\xd1\x6a\x53\x0f\xba\x26\xd4\xf6\x85\x9c\x61\x53\xa3\x27\xd7\xb1\x9f\x3e\xd3\x43\x9b\x4a\x05\x68\xb9\x63\xd1\x72\x9c\xfc\xf7\xa8\x50\xa9\x3c\x5b\xe7\x57\x9e\xdc\x0b\x3d\x37\xd6\x8b\xd1\x1d\xa9\x28\x5b\xdf\xe0\xc7\x15\x74\x57\x5d\x7c\x53\xbb\x28\xbb\xde\xee\xa6\xfd\xc9\x7c\x7d\x9f\x6d\xe2\x6c\xa1\xae\xd3\xbb\x28\xb9\x7e\x7e\xd8\x66\x79\x9c\x26\x93\xd6\x6a\x21\x2f\x53\xdc\xf3\x26\xce\x30\x99\x8d\x95\x8a\x1d\x4e\xe6\xbe\xa1\xb6\x45\x3f\x56\x8b\x85\xa2\xd7\xde\x3a\x51\xaa\x60\x73\xa9\xbe\x84\xe1\x8a\x3b\x5d\xd3\xe9\x20\xdc\x86\xbe\x41\xc1\x06\x27\xf3\x09\x6a\xa1\x54\xf8\xfb\x26\x4d\x9e\x2e\xa7\xa1\xfa\x1b\x00\x00\xff\xff\x03\xe4\x65\x21\xf4\x02\x00\x00") - -func testImagesServeHostnameMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesServeHostnameMakefile, - "test/images/serve-hostname/Makefile", - ) -} - -func testImagesServeHostnameMakefile() (*asset, error) { - bytes, err := testImagesServeHostnameMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/serve-hostname/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesServeHostnameVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe2\x02\x04\x00\x00\xff\xff\x5d\x96\xa5\x56\x04\x00\x00\x00") - -func testImagesServeHostnameVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesServeHostnameVersion, - "test/images/serve-hostname/VERSION", - ) -} - -func testImagesServeHostnameVersion() (*asset, error) { - bytes, err := testImagesServeHostnameVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/serve-hostname/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesServeHostnameServe_hostnameGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x56\x6d\x8f\xdb\xb8\x11\xfe\x2c\xfe\x8a\xa9\x80\xa4\x92\xa1\x48\x9b\xb4\x48\xd1\x6d\xf3\xc1\xd9\x97\xae\x91\x74\xd7\xb0\xbc\x0d\x82\x34\x28\x68\x69\x64\xb3\x4b\x91\x3a\x92\x5a\xc7\xb8\xec\x7f\x3f\x0c\x29\x7b\xed\x7d\xb9\xbb\x00\xf7\xc5\x96\xa8\x79\x66\x1e\xce\xf3\xf0\xa5\x18\xb1\x13\xdd\x6d\x8c\x58\xae\x1c\xbc\x39\x7a\xfd\x57\x98\xaf\x10\x3e\xf4\x0b\x34\x0a\x1d\x5a\x18\xf7\x6e\xa5\x8d\xcd\x19\xfb\x28\x2a\x54\x16\x6b\xe8\x55\x8d\x06\xdc\x0a\x61\xdc\xf1\x6a\x85\x30\x7c\xc9\xe0\x3f\x68\xac\xd0\x0a\xde\xe4\x47\x90\x50\x40\x3c\x7c\x8a\xd3\x7f\xb0\x8d\xee\xa1\xe5\x1b\x50\xda\x41\x6f\x11\xdc\x4a\x58\x68\x84\x44\xc0\x6f\x15\x76\x0e\x84\x82\x4a\xb7\x9d\x14\x5c\x55\x08\x6b\xe1\x56\xbe\xc8\x90\x22\x67\x9f\x87\x04\x7a\xe1\xb8\x50\xc0\xa1\xd2\xdd\x06\x74\xb3\x1f\x05\xdc\x31\x06\x00\xb0\x72\xae\x3b\x2e\x8a\xf5\x7a\x9d\x73\xcf\x32\xd7\x66\x59\xc8\x10\x65\x8b\x8f\x93\x93\xb3\xcb\xf2\xec\xd5\x9b\xfc\x88\xb1\x6b\x25\xd1\x5a\x30\xf8\x53\x2f\x0c\xd6\xb0\xd8\x00\xef\x3a\x29\x2a\xbe\x90\x08\x92\xaf\x41\x1b\xe0\x4b\x83\x58\x83\xd3\xc4\x73\x6d\x84\x13\x6a\x99\x81\xd5\x8d\x5b\x73\x83\xac\x16\xd6\x19\xb1\xe8\xdd\x41\x83\xb6\xac\x84\x85\xfd\x00\xad\x80\x2b\x88\xc7\x25\x4c\xca\x18\xde\x8f\xcb\x49\x99\xb1\x4f\x93\xf9\xc5\xd5\xf5\x1c\x3e\x8d\x67\xb3\xf1\xe5\x7c\x72\x56\xc2\xd5\x0c\x4e\xae\x2e\x4f\x27\xf3\xc9\xd5\x65\x09\x57\xe7\x30\xbe\xfc\x0c\x1f\x26\x97\xa7\x19\xa0\x70\x2b\x34\x80\xdf\x3a\x43\xdc\xb5\x01\x41\xad\xc3\x3a\x67\x25\xe2\x41\xf1\x46\x07\x32\xb6\xc3\x4a\x34\xa2\x02\xc9\xd5\xb2\xe7\x4b\x84\xa5\xbe\x45\xa3\x84\x5a\x42\x87\xa6\x15\x96\xc4\xb3\xc0\x55\xcd\xa4\x68\x85\xe3\xce\xbf\x3f\x9a\x4e\xce\x46\x05\x63\x45\x01\x63\xb0\x2d\x97\x12\x7a\x27\xa4\x70\x1b\x6a\xce\xff\x7b\xeb\xc0\xa2\xb9\x0d\x1c\x56\xda\x3a\xc5\x5b\xa4\x29\xcf\x4f\xa6\x94\xbb\xd0\x06\xae\x4f\xa7\x39\xeb\x78\x75\x43\x2c\x5a\x2e\x14\x63\xa2\xed\xb4\x71\x90\xb0\x28\x6e\x24\x5f\xc6\xf4\xdf\x3a\xfa\x93\xda\xbf\x29\x74\xc3\x5f\x41\xe2\xd2\xb3\xb6\xe1\xb7\xb0\x62\xa9\xb8\xa4\x17\xbb\xb1\x15\x97\xfe\xd1\x89\x16\x63\x96\x32\x76\xcb\x0d\xe5\xad\x35\x31\x00\x78\x07\x54\x20\x7f\xaf\xb5\x4c\x62\x57\x75\x71\x06\x0d\x97\xe4\xdf\xb8\xf4\xc4\x0d\x29\x7e\x8b\x86\x18\xe7\x71\x4a\xc8\xeb\xd3\x47\xc8\xbe\xfe\x15\x24\x4d\x30\x20\x2f\xe6\xf3\xe9\x03\xa4\xa7\x9f\x81\x33\xfd\x3d\x92\xc2\x06\xc4\x89\xd4\x16\x0f\x11\x15\x0d\xed\x55\x0b\x21\x95\x56\x0a\x2b\x12\x89\xf4\x03\xe4\xd5\xca\xe7\xf1\x4e\x46\xeb\x28\x9d\x6f\xea\x3d\xf5\x89\x72\x49\x4c\x63\x71\x06\x7f\xff\xcb\xdf\xde\x66\x10\x4f\x29\x42\xf5\xed\x02\x0d\x11\x48\x19\x6b\x7a\x55\x79\x55\x92\x14\x7e\x66\x91\x07\x4e\xb9\xb1\x98\xa4\x2c\x12\x0d\x8c\x86\x59\xbd\x7c\x09\xc9\x28\x74\xf5\xfb\x77\x1a\xbd\x3e\x9d\x7a\x44\x24\xf5\x32\x3f\xe7\x8e\xcb\x26\x89\x4f\xb8\xfa\xf3\x60\x09\xdf\xd1\x82\x7a\xd9\xea\x1a\xc9\x0c\x81\x6f\x78\x73\xc1\xa5\xe4\x16\x2f\x5d\xca\xa2\x3b\xc6\xa2\xad\x85\x32\x40\x63\xe0\xf8\x1d\x68\x9b\x5f\x0c\x63\x03\x21\xfa\xf0\xa7\x77\xa0\x84\x7c\x54\xfd\xcc\x18\x6d\xa0\x31\xba\x3d\xc4\x1d\xc3\x0b\x1b\xfb\x94\x43\x99\x30\x2f\x9a\x8b\x4f\x21\xac\x43\x85\x66\x57\x54\xa1\xcb\x3f\xfa\xc1\x9d\x67\x5a\x97\x97\x9d\x11\xca\x35\x49\x7c\xfc\xa2\x8e\x33\x18\x51\x67\xd3\x94\x45\x4f\x90\x7a\x8e\xd5\x5e\xe2\x43\x52\xd1\x1d\x8b\xa2\xa5\x06\x52\x23\x08\x11\x45\xb4\x94\xfd\x43\x44\xda\xef\xc8\x6d\xd9\xe6\xe3\x8a\x76\x52\xea\x4a\xf4\x24\x87\x67\x59\x6c\x81\x87\x0c\x02\x87\x00\x9a\x0e\x33\xa5\x0e\x0d\xfe\x0a\x50\x0f\x20\x3a\xf9\x0c\x5b\xed\x70\x5c\xd7\x26\x49\xf3\xd2\x19\xa1\x96\x49\x9a\xee\xe8\xe6\x9f\x8c\x70\x98\x7c\xf9\xba\xd8\x38\x4c\xb6\xb2\xee\x07\x78\x5b\x07\xf6\x54\xf8\x2e\xf1\xda\x0c\xd2\x90\x6d\x68\x12\xbc\xae\x0f\x65\x99\xa1\xd5\xf2\x16\xaf\x4f\xa7\xbe\xf4\x76\x61\xfe\x71\xf2\x3c\x28\xf0\x84\x4c\x56\x57\x37\x4f\x58\xe5\xfa\x74\xba\xa5\x43\xac\x7f\xac\xf2\x7d\x8a\xdf\xf6\x05\xed\x70\x8b\xbe\x69\xd0\xc0\x97\xd7\x6f\x7d\x83\x0f\xed\xf2\xbf\x0c\x2a\x29\xc6\xfb\xad\x23\xce\xf9\x0c\x79\x7d\x6e\x74\x9b\x04\xf4\x97\xa3\xe3\xaf\x3f\x6e\x9e\x5d\x92\xdf\x61\x1f\x52\xf1\x09\xfb\x04\x6e\x0f\x4c\xe3\x19\x7a\xd3\xcc\xf5\x23\xdb\xec\x40\xcf\xd8\xc5\x6f\x2c\xc4\x9b\x76\xdb\xfc\x82\xab\x5a\xe2\x39\xb5\x2c\x2e\xc8\x1d\xf4\xb4\xf6\xb7\x04\x92\xb7\xd3\xca\xa2\xaf\x64\x32\x30\x30\x1a\xc6\x3d\xcd\xf4\x5e\xa5\xed\x24\xf6\x37\xd9\xbd\x59\x98\xbd\x15\x90\x32\x16\xba\x38\xda\x6e\xe8\xa1\x87\x74\x6a\xd6\x75\xb8\xfc\xac\x90\xfb\x93\x55\xd3\x11\x5d\x21\x3d\xf8\x8d\xde\xef\x83\x7b\x9b\x3b\x6f\x1c\x1a\xbf\x83\xd2\x51\x4d\x1f\x87\xda\xb9\x4f\xb9\xce\x2f\x7c\xa2\x24\xcd\xc7\x75\x9d\xc4\x27\x3b\x64\x9c\xc1\x70\x74\x0c\x4d\xf2\xa6\x68\x5d\x7e\x3e\x2c\x8c\x75\x06\xb1\xa7\xbe\x6b\x2b\xf5\x31\x7d\x6c\xb0\xa2\x80\x59\xaf\x20\x5c\xbb\xa4\xb6\xbd\x41\xb0\x3a\xf4\x2f\x18\x75\xac\xea\x70\x92\xd5\x1a\x2d\xed\xf8\x0b\xa9\xab\x9b\x03\x7f\x27\x4f\x84\x27\xcf\xae\xd3\x8c\x9c\xe7\x9d\xb0\x15\x76\x5f\x82\x72\xe8\x06\x9d\x7d\x74\x80\xbd\xa8\xf3\xff\xaa\x1d\x96\x45\xe1\x46\x60\xc9\xe8\x2d\xbf\xc1\xa4\x5a\x71\x45\x27\x40\xe9\xc7\x77\x01\xf9\xa5\x76\xa2\xd9\x24\x43\x78\x06\xc3\xfd\x21\x2f\x27\xff\x9a\x9f\xcd\xfe\x1d\x02\x29\xcb\x3f\x5f\x0d\x31\x0f\x78\xac\x7a\x47\x57\x41\xa8\xf5\x7a\xab\x94\xc1\x0a\x85\x67\x17\x20\xb4\x2a\x02\x3b\x2b\x96\xe9\x21\x7e\xbc\xe6\xfe\x2a\x09\x9d\xae\xa1\x46\x89\xa4\x1b\x05\xa7\x2c\xa2\x53\x30\x2f\x25\x62\x97\xbc\x3d\x82\x11\x84\x77\xac\xb4\xaa\x53\x76\xc7\x7e\x09\x00\x00\xff\xff\x3f\x25\xf4\x01\xbc\x0b\x00\x00") - -func testImagesServeHostnameServe_hostnameGoBytes() ([]byte, error) { - return bindataRead( - _testImagesServeHostnameServe_hostnameGo, - "test/images/serve-hostname/serve_hostname.go", - ) -} - -func testImagesServeHostnameServe_hostnameGo() (*asset, error) { - bytes, err := testImagesServeHostnameServe_hostnameGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/serve-hostname/serve_hostname.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesTestWebserverDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6f\x9b\x30\x14\x85\xdf\xfd\x2b\x8e\xe0\x65\x93\x52\xc8\xaa\x3d\x4c\xdb\x13\x4b\xa9\x86\xda\x41\x15\xe8\xba\x68\xda\x83\x81\x1b\xb8\x12\xb1\x99\x7d\x29\xcd\xbf\x9f\x48\x53\x69\xd1\xfc\xe8\xfb\xf9\xf8\xf3\x71\x88\x8d\x1d\x8f\x8e\xbb\x5e\x70\xbd\xfe\xf0\x11\x55\x4f\xb8\x9b\x6a\x72\x86\x84\x3c\x92\x49\x7a\xeb\x7c\xa4\x42\x15\xe2\x9e\x1b\x32\x9e\x5a\x4c\xa6\x25\x07\xe9\x09\xc9\xa8\x9b\x9e\xde\x26\x2b\xfc\x20\xe7\xd9\x1a\x5c\x47\x6b\xbc\x5b\x80\xe0\x3c\x0a\xde\x7f\x51\x21\x8e\x76\xc2\x41\x1f\x61\xac\x60\xf2\x04\xe9\xd9\x63\xcf\x03\x81\x5e\x1a\x1a\x05\x6c\xd0\xd8\xc3\x38\xb0\x36\x0d\x61\x66\xe9\x4f\xd7\x9c\x43\x22\x15\x62\x77\x8e\xb0\xb5\x68\x36\xd0\x68\xec\x78\x84\xdd\xff\xcb\x41\xcb\x49\x78\x59\xbd\xc8\xf8\x39\x8e\xe7\x79\x8e\xf4\x49\x36\xb2\xae\x8b\x87\x57\xd0\xc7\xf7\xd9\x26\xcd\xcb\xf4\xea\x3a\x5a\x9f\x8e\x3c\x9a\x81\xbc\x87\xa3\x3f\x13\x3b\x6a\x51\x1f\xa1\xc7\x71\xe0\x46\xd7\x03\x61\xd0\x33\xac\x83\xee\x1c\x51\x0b\xb1\x8b\xef\xec\x58\xd8\x74\x2b\x78\xbb\x97\x59\x3b\x52\x21\x5a\xf6\xe2\xb8\x9e\xe4\xa2\xac\x37\x3b\xf6\x17\x80\x35\xd0\x06\x41\x52\x22\x2b\x03\x7c\x4d\xca\xac\x5c\xa9\x10\x4f\x59\xf5\xad\x78\xac\xf0\x94\x6c\xb7\x49\x5e\x65\x69\x89\x62\x8b\x4d\x91\xdf\x64\x55\x56\xe4\x25\x8a\x5b\x24\xf9\x0e\x77\x59\x7e\xb3\x02\xb1\xf4\xe4\x40\x2f\xa3\x5b\xfc\xad\x03\x2f\x35\x52\xbb\x74\x56\x12\x5d\x08\xec\xed\xab\x90\x1f\xa9\xe1\x3d\x37\x18\xb4\xe9\x26\xdd\x11\x3a\xfb\x4c\xce\xb0\xe9\x30\x92\x3b\xb0\x5f\x3e\xd3\x43\x9b\x56\x85\x18\xf8\xc0\xa2\xe5\xb4\xf3\xdf\xa3\x22\xa5\x6e\xb7\xc5\x77\xf8\xc6\x69\x69\x7a\xa5\x36\xc5\xc3\x0e\x42\x5e\xae\x66\xaa\x3d\xb9\x67\x72\x88\x55\xfa\xf3\xa1\x28\x53\x7c\x5a\xab\x34\xaf\xb6\xbb\x87\x22\xcb\x2b\xfc\x0a\xe2\x4b\x30\xf8\xad\xfe\x06\x00\x00\xff\xff\x4e\xc8\xe3\xbf\x99\x02\x00\x00") - -func testImagesTestWebserverDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesTestWebserverDockerfile, - "test/images/test-webserver/Dockerfile", - ) -} - -func testImagesTestWebserverDockerfile() (*asset, error) { - bytes, err := testImagesTestWebserverDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/test-webserver/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesTestWebserverMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x30\x14\x85\x9f\xe7\x5f\x71\xd4\xf0\xd0\x4a\x25\x65\x68\xda\x24\x26\x34\x65\x6d\x07\x11\x28\x99\x92\x00\xe2\x09\x39\xc9\x6d\x72\xa5\xd4\xf6\x6c\x87\xd0\x7f\x3f\xb9\x80\x34\x34\xbf\xf9\x9e\xe3\xe3\xcf\xc7\x11\xd6\xda\x1c\x2c\x77\xbd\xc7\xf9\xd9\xe7\x6f\xa8\x7a\xc2\xcd\x58\x93\x55\xe4\xc9\x21\x19\x7d\xaf\xad\x8b\x45\x24\x22\xdc\x72\x43\xca\x51\x8b\x51\xb5\x64\xe1\x7b\x42\x62\x64\xd3\xd3\xbb\xb2\xc4\x3d\x59\xc7\x5a\xe1\x3c\x3e\xc3\x3c\x18\x66\x6f\xd2\x6c\xf1\x5d\x44\x38\xe8\x11\x7b\x79\x80\xd2\x1e\xa3\x23\xf8\x9e\x1d\x76\x3c\x10\xe8\xa5\x21\xe3\xc1\x0a\x8d\xde\x9b\x81\xa5\x6a\x08\x13\xfb\xfe\x78\xcd\x5b\x48\x2c\x22\x3c\xbe\x45\xe8\xda\x4b\x56\x90\x68\xb4\x39\x40\xef\xfe\xf5\x41\xfa\x23\x70\x58\xbd\xf7\xe6\x62\xb5\x9a\xa6\x29\x96\x47\xd8\x58\xdb\x6e\x35\xbc\x1a\xdd\xea\x36\x5d\x6f\xb3\x72\x7b\x7a\x1e\x9f\x1d\x8f\xdc\xa9\x81\x9c\x83\xa5\x3f\x23\x5b\x6a\x51\x1f\x20\x8d\x19\xb8\x91\xf5\x40\x18\xe4\x04\x6d\x21\x3b\x4b\xd4\xc2\xeb\xc0\x3b\x59\xf6\xac\xba\x25\x9c\xde\xf9\x49\x5a\x12\x11\x5a\x76\xde\x72\x3d\xfa\x0f\x65\xbd\xd3\xb1\xfb\x60\xd0\x0a\x52\x61\x96\x94\x48\xcb\x19\x7e\x26\x65\x5a\x2e\x45\x84\x87\xb4\xba\xce\xef\x2a\x3c\x24\x45\x91\x64\x55\xba\x2d\x91\x17\x58\xe7\xd9\x26\xad\xd2\x3c\x2b\x91\xff\x42\x92\x3d\xe2\x26\xcd\x36\x4b\x10\xfb\x9e\x2c\xe8\xc5\xd8\xc0\xaf\x2d\x38\xd4\x48\x6d\xe8\xac\x24\xfa\x00\xb0\xd3\xaf\x40\xce\x50\xc3\x3b\x6e\x30\x48\xd5\x8d\xb2\x23\x74\xfa\x99\xac\x62\xd5\xc1\x90\xdd\xb3\x0b\x9f\xe9\x20\x55\x2b\x22\x0c\xbc\x67\x2f\xfd\x71\xf2\xdf\xa3\x62\x21\xca\x62\x5d\xe2\x12\x9e\x9c\x3f\x9d\xa8\x76\x64\x9f\xc9\x8a\xa4\x58\x5f\xe3\xc7\x25\xe4\xbe\xfd\xfa\x45\x54\x49\x71\xb5\xad\xc2\xfe\x64\xbe\xbe\x2b\x36\x69\xb1\x10\x57\xf9\x6d\x92\x5d\x3d\xdd\x6f\x8b\x32\xcd\xb3\xa0\x0d\x32\x84\x84\xc0\xa7\x4d\x5a\x20\x98\x95\xf6\x2d\x5b\x9c\xcc\x5d\x4f\xc3\x00\x33\xb5\x8b\x85\xa0\x17\xa3\xad\x17\xa2\x66\x75\x21\x3e\xc5\xf1\x8a\xf7\xb2\xa3\xd3\xd1\xf3\x10\xbb\x1e\x35\x2b\x9c\xcc\x03\xd6\x42\x88\xf8\xf7\x75\x9e\x3d\x5e\x84\xa1\xf8\x1b\x00\x00\xff\xff\x2d\xf9\x16\x32\xf6\x02\x00\x00") - -func testImagesTestWebserverMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesTestWebserverMakefile, - "test/images/test-webserver/Makefile", - ) -} - -func testImagesTestWebserverMakefile() (*asset, error) { - bytes, err := testImagesTestWebserverMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/test-webserver/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesTestWebserverVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesTestWebserverVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesTestWebserverVersion, - "test/images/test-webserver/VERSION", - ) -} - -func testImagesTestWebserverVersion() (*asset, error) { - bytes, err := testImagesTestWebserverVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/test-webserver/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesTestWebserverTestWebserverGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\x4d\x6f\xe3\x36\x10\x3d\x9b\xbf\x62\x20\xa0\xa8\x1c\xe8\x23\x4d\xf7\x50\xa4\xd8\x83\x6a\x27\x8d\x91\xc4\x36\x22\xa5\xd9\x3d\xd2\xd2\x48\x1e\x84\x26\x15\x72\x14\xc5\x58\xe4\xbf\x17\xa4\xbd\x8b\x04\xbb\x87\x9c\x28\x72\xde\x9b\x37\x9c\x79\x62\x7e\x22\x66\xa6\xdf\x5b\xea\xb6\x0c\x67\xa7\x7f\x7c\x82\x6a\x8b\x70\x3d\x6c\xd0\x6a\x64\x74\x50\x0c\xbc\x35\xd6\x65\x42\xdc\x50\x8d\xda\x61\x03\x83\x6e\xd0\x02\x6f\x11\x8a\x5e\xd6\x5b\x84\x63\x24\x81\xff\xd0\x3a\x32\x1a\xce\xb2\x53\x88\x3d\x20\x3a\x86\xa2\xe9\xdf\x62\x6f\x06\xd8\xc9\x3d\x68\xc3\x30\x38\x04\xde\x92\x83\x96\x14\x02\xbe\xd4\xd8\x33\x90\x86\xda\xec\x7a\x45\x52\xd7\x08\x23\xf1\x36\x88\x1c\x53\x64\xe2\xeb\x31\x81\xd9\xb0\x24\x0d\x12\x6a\xd3\xef\xc1\xb4\x6f\x51\x20\x59\x08\x00\x80\x2d\x73\x7f\x9e\xe7\xe3\x38\x66\x32\x54\x99\x19\xdb\xe5\xea\x80\x72\xf9\xcd\x62\x76\xb1\x2c\x2f\xd2\xb3\xec\x54\x88\x7b\xad\xd0\x39\xb0\xf8\x34\x90\xc5\x06\x36\x7b\x90\x7d\xaf\xa8\x96\x1b\x85\xa0\xe4\x08\xc6\x82\xec\x2c\x62\x03\x6c\x7c\x9d\xa3\x25\x26\xdd\x25\xe0\x4c\xcb\xa3\xb4\x28\x1a\x72\x6c\x69\x33\xf0\xbb\x06\x7d\xaf\x8a\x1c\xbc\x05\x18\x0d\x52\x43\x54\x94\xb0\x28\x23\xf8\xa7\x28\x17\x65\x22\x1e\x16\xd5\xd5\xea\xbe\x82\x87\xe2\xee\xae\x58\x56\x8b\x8b\x12\x56\x77\x30\x5b\x2d\xe7\x8b\x6a\xb1\x5a\x96\xb0\xba\x84\x62\xf9\x15\xae\x17\xcb\x79\x02\x48\xbc\x45\x0b\xf8\xd2\x5b\x5f\xbb\xb1\x40\xbe\x75\xd8\x64\xa2\x44\x7c\x27\xde\x9a\x43\x31\xae\xc7\x9a\x5a\xaa\x41\x49\xdd\x0d\xb2\x43\xe8\xcc\x33\x5a\x4d\xba\x83\x1e\xed\x8e\x9c\x1f\x9e\x03\xa9\x1b\xa1\x68\x47\x2c\x39\xec\x7f\xba\x4e\x26\x4e\x72\x21\xf2\x1c\x0a\x60\xd2\x7b\x18\x71\x03\x0e\xed\x73\x40\x49\x3e\x7c\x3b\x90\xe0\x7c\x8a\x3a\x0c\x39\x13\xbd\xac\x1f\xbd\xe8\x4e\x92\x16\x82\x76\xbd\xb1\x0c\xb1\x98\x44\xad\x92\x5d\xe4\xd7\x1d\xfb\x45\x99\xb0\xd3\xc8\xb9\x1f\x62\x24\xa6\x42\x3c\x4b\xeb\xa1\x81\xf2\x19\x3c\x21\x5b\x68\x8e\x23\x7f\x10\x25\xf0\xd7\x69\x02\xd1\xda\x07\xf5\xb0\xdb\xa0\xcd\xa2\xa9\x67\xb5\x83\xae\x83\x5c\x3c\x85\x6f\x62\x12\x68\x6b\x69\x1d\xc6\x53\x21\x26\xad\x83\xf3\xcf\xc1\x27\x59\xc9\x96\xfa\xb5\xc5\x96\x5e\xe2\x28\x8f\x92\xc3\xe9\x25\x29\x2c\xc3\xb5\xe2\xb0\x9f\x93\xf5\xd1\xe9\xd4\xb3\xc3\xc9\x95\xd4\x8d\xc2\xcb\x41\xd7\x07\x9a\x17\x8c\xc7\x03\xfb\x0e\x5d\x6f\xb4\xc3\x07\x4b\x8c\x36\x01\x0b\x27\xc7\xf3\xa7\x01\x1d\x87\x8a\x26\x63\x76\x85\xb2\x41\x1b\x4f\xb3\x12\x39\x8e\x66\xde\xa9\xe9\xcc\x68\xb6\x46\x45\x09\x44\xbd\xa5\x67\xc9\x18\x4d\xc5\x64\x92\xe7\xb0\x44\x6c\xb0\x09\x13\x55\xa6\x96\x0a\x7a\x6b\x5e\xf6\xde\x94\x6f\x7f\xd9\xf5\xe2\xc7\x38\x0c\x8c\xc6\x3e\x66\xbf\x90\x2a\xea\x1a\x9d\xfb\xae\x95\x16\x4a\x99\x31\x5d\x59\xea\x48\x7b\xe1\x93\x20\xf9\x21\xd2\xcc\x62\x83\x9a\x49\x2a\xe7\x99\x6c\x07\xfc\x38\xf9\x16\x79\x6b\x9a\x40\xfc\xf7\xa2\x4a\x60\xbd\x2a\xab\x04\x56\xeb\x60\xf9\x8f\xa7\x39\x40\x42\x9a\xf9\xb2\x4a\xbe\xa4\xb7\x2f\xe9\x1d\x3e\x55\xe6\x11\x75\x72\x8d\xd8\xa7\x85\xa2\x67\x4c\xee\x1d\xda\xb4\xe8\x50\x73\xf2\x25\x3d\x8e\x02\x9b\xf4\x81\x78\x9b\xbc\x6b\x7e\xe2\x57\xd4\x9c\x56\xfb\xfe\x47\xfb\xe7\xe4\xc2\x93\xb0\x68\xd3\x5b\xd3\x50\x4b\xd8\xa4\x25\xf9\xd7\xca\x19\x18\xfa\x46\x32\xa6\x0d\xee\x0c\x90\xd3\xbf\x33\x6c\xac\x97\xf7\xcf\xc9\x9f\xa7\x9f\x9c\x98\x4c\xec\xf1\x2a\xd9\x1c\x55\x1c\xfd\x94\x25\xc8\xb4\x2e\x0b\xa6\xbb\xaa\xaa\x75\x3c\x26\x60\xa7\x62\xf2\xea\x1d\xd7\x19\x50\xa6\xcb\x2e\x25\x4b\x75\x30\xe4\x0d\x39\x46\x5d\xe8\x26\x10\xe2\x76\xc7\x59\xd9\x5b\xd2\xdc\xc6\xd1\xf9\x6f\x4d\x94\xc0\x89\xff\x41\xa6\x09\x68\x52\xc1\xb5\x0e\x15\xd6\x0c\xdf\x5e\xc5\xab\xf8\x3f\x00\x00\xff\xff\x14\x70\xd3\x85\xfb\x05\x00\x00") - -func testImagesTestWebserverTestWebserverGoBytes() ([]byte, error) { - return bindataRead( - _testImagesTestWebserverTestWebserverGo, - "test/images/test-webserver/test-webserver.go", - ) -} - -func testImagesTestWebserverTestWebserverGo() (*asset, error) { - bytes, err := testImagesTestWebserverTestWebserverGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/test-webserver/test-webserver.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeGlusterBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\x4b\x4d\xc9\x2f\x4a\xb4\x32\xb2\xe0\x4a\x2c\xca\x35\x33\xb1\x05\x93\x65\x16\xfa\x08\xf1\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x8d\x24\x03\x08\x00\x00\xff\xff\x54\x51\xbe\x21\x42\x00\x00\x00") - -func testImagesVolumeGlusterBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeGlusterBaseimage, - "test/images/volume/gluster/BASEIMAGE", - ) -} - -func testImagesVolumeGlusterBaseimage() (*asset, error) { - bytes, err := testImagesVolumeGlusterBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/gluster/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeGlusterDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x6f\xe2\x38\x10\xc7\xdf\xfd\x29\xfe\x22\x52\x75\x27\x41\x42\x11\xd7\xd3\xdd\x3d\xa5\x90\x5e\xa3\xb6\x49\x2f\x81\xeb\xa2\xd5\xaa\x32\xc9\x90\x58\x72\xec\xd4\x76\xa0\x7c\xfb\x55\x02\xdd\x5d\x76\xfd\x64\xcd\xfc\x66\xe6\xe7\xb1\x87\x85\x6e\x8f\x46\x54\xb5\xc3\x6c\x7a\x7d\x83\x55\x4d\x78\xe8\xb6\x64\x14\x39\xb2\x08\x3b\x57\x6b\x63\x7d\xe6\x31\x0f\x8f\xa2\x20\x65\xa9\x44\xa7\x4a\x32\x70\x35\x21\x6c\x79\x51\xd3\x47\x66\x8c\xff\xc9\x58\xa1\x15\x66\xfe\x14\xbf\xf5\xc0\xe8\x9c\x1a\xfd\xfe\x0f\xf3\x70\xd4\x1d\x1a\x7e\x84\xd2\x0e\x9d\x25\xb8\x5a\x58\xec\x84\x24\xd0\x7b\x41\xad\x83\x50\x28\x74\xd3\x4a\xc1\x55\x41\x38\x08\x57\x0f\x63\xce\x4d\x7c\xe6\x61\x73\x6e\xa1\xb7\x8e\x0b\x05\x8e\x42\xb7\x47\xe8\xdd\x8f\x1c\xb8\x1b\x84\xfb\x53\x3b\xd7\xfe\x1d\x04\x87\xc3\xc1\xe7\x83\xac\xaf\x4d\x15\xc8\x13\x68\x83\xc7\x78\x11\x25\x79\x34\x99\xf9\xd3\xa1\x64\xad\x24\x59\x0b\x43\x6f\x9d\x30\x54\x62\x7b\x04\x6f\x5b\x29\x0a\xbe\x95\x04\xc9\x0f\xd0\x06\xbc\x32\x44\x25\x9c\xee\x7d\x0f\x46\x38\xa1\xaa\x31\xac\xde\xb9\x03\x37\xc4\x3c\x94\xc2\x3a\x23\xb6\x9d\xbb\x58\xd6\x87\x9d\xb0\x17\x80\x56\xe0\x0a\xa3\x30\x47\x9c\x8f\x70\x1b\xe6\x71\x3e\x66\x1e\x5e\xe2\xd5\x7d\xba\x5e\xe1\x25\xcc\xb2\x30\x59\xc5\x51\x8e\x34\xc3\x22\x4d\x96\xf1\x2a\x4e\x93\x1c\xe9\x1d\xc2\x64\x83\x87\x38\x59\x8e\x41\xc2\xd5\x64\x40\xef\xad\xe9\xfd\xb5\x81\xe8\xd7\x48\x65\xbf\xb3\x9c\xe8\x42\x60\xa7\x4f\x42\xb6\xa5\x42\xec\x44\x01\xc9\x55\xd5\xf1\x8a\x50\xe9\x3d\x19\x25\x54\x85\x96\x4c\x23\x6c\xff\x99\x16\x5c\x95\xcc\x83\x14\x8d\x70\xdc\x0d\x91\x5f\x1e\xe5\x33\x76\x97\xa5\x4f\xbd\x7e\x14\x3f\x85\xff\x46\x8c\x2d\xb2\x34\xcf\x5f\x6f\xd7\xf1\xe3\xf2\x75\x91\x3e\x6f\xf0\x46\x4d\x37\xf9\x2f\x7a\x5a\x87\xd9\xe2\x7e\x62\xfb\x5e\x05\x82\xce\x9a\x60\x2b\x54\xc0\x58\xb6\x4e\x70\xec\x1a\x4c\x8e\x10\xca\x3a\x2e\x25\x6a\x6d\x9d\xe2\x0d\xa1\x92\x9d\x75\x64\x76\x76\x62\xc9\xec\xc9\xe0\xea\x6a\x60\x0b\x49\x5c\x81\x4b\xc9\xc2\xe5\xf2\x83\x2a\xfd\xbd\x96\x08\xc8\x15\xc1\xb7\xba\x60\x00\x4c\xa7\x5e\xcf\x21\xdf\xd6\xa7\xe1\x52\x17\x5c\x9e\x14\x7a\x44\xa8\x92\xde\xfd\xda\x35\x12\xc1\x5e\xcb\x60\xd0\x2a\xea\x46\x97\xb8\x99\xcf\x4f\xb1\xef\x0c\x63\xd1\xa7\xe7\x34\x8f\x30\x9b\x4f\xa7\x7f\x06\xae\x68\x31\xff\xeb\xfa\x8f\x59\x7f\x63\x2c\x4a\x56\xd9\xe6\x39\x8d\x93\x15\x3e\x8f\x7e\x1a\x76\xa9\x32\xfa\xc2\xbe\x06\x00\x00\xff\xff\xce\x58\xe0\x12\x8c\x03\x00\x00") - -func testImagesVolumeGlusterDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeGlusterDockerfile, - "test/images/volume/gluster/Dockerfile", - ) -} - -func testImagesVolumeGlusterDockerfile() (*asset, error) { - bytes, err := testImagesVolumeGlusterDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/gluster/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeGlusterVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesVolumeGlusterVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeGlusterVersion, - "test/images/volume/gluster/VERSION", - ) -} - -func testImagesVolumeGlusterVersion() (*asset, error) { - bytes, err := testImagesVolumeGlusterVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/gluster/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeGlusterGlusterdVol = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x90\x41\x4e\xc3\x30\x10\x45\xf7\x3e\xc5\x57\xb3\x01\xa9\x4e\x29\x82\x05\xf7\xe0\x02\xae\x3d\x49\x47\xb5\x3d\xd1\x78\x92\xaa\xb7\x47\x69\x05\x08\xa9\x20\xb6\x5f\x6f\xde\x1f\xfd\x0e\xef\x47\x6e\xe0\x86\x44\x43\x98\xb3\x61\xcc\x73\x33\xd2\xd4\x2f\x92\xf1\xc0\x35\xe6\x1e\x51\x4a\xa1\x6a\x94\x20\xb3\xe1\x10\x1a\xf9\x49\xd4\x1e\xb7\xae\xc3\x99\xed\x88\x90\x12\x25\x6c\x74\x8a\x3e\xcc\x76\xf4\x21\x67\x39\x7b\xae\x8d\xe2\xac\x04\xa9\x1b\x98\xe0\x9a\x22\x4a\xad\x14\x8d\xa5\xba\x0e\x83\x4a\x41\x95\xea\x27\xe5\x85\x33\x8d\x94\xb0\xaa\x5b\xef\xdc\x22\x79\x2e\x84\x12\x6a\x18\x69\xed\x77\x00\x60\x97\x89\x50\xc6\x62\xbb\xcf\x4f\xaf\xb1\x4c\xab\x11\x67\xd1\x13\xd7\xd1\x27\x56\x8a\x26\x7a\xc1\x6e\x09\xba\xcb\x7c\xb8\x8b\x9b\x86\xda\xd6\x3e\x7f\xd5\x36\x89\x27\xb2\xad\xa6\x12\xee\x52\xfd\x0d\xe8\x4f\x44\x53\xc8\xbc\x90\x37\x2e\x84\xfd\xd3\x3f\x69\xae\x46\xba\x84\x8c\xe7\x3f\x0f\x94\x42\xf2\x43\xe0\xec\xb3\x8c\x90\x61\x70\xdd\x37\xfd\xb5\x3e\x5e\xde\xf6\xaf\x3f\x44\xbf\xcf\xef\xa8\x26\x7f\xdb\xd3\x7d\x04\x00\x00\xff\xff\xbe\xa1\x56\x52\xf3\x01\x00\x00") - -func testImagesVolumeGlusterGlusterdVolBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeGlusterGlusterdVol, - "test/images/volume/gluster/glusterd.vol", - ) -} - -func testImagesVolumeGlusterGlusterdVol() (*asset, error) { - bytes, err := testImagesVolumeGlusterGlusterdVolBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/gluster/glusterd.vol", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeGlusterIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xf2\x48\xcd\xc9\xc9\x57\x48\x2b\xca\xcf\x55\x70\xcf\x29\x2d\x2e\x49\x2d\x72\x0b\x56\xe4\x02\x04\x00\x00\xff\xff\xed\xdd\x63\xe1\x16\x00\x00\x00") - -func testImagesVolumeGlusterIndexHtmlBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeGlusterIndexHtml, - "test/images/volume/gluster/index.html", - ) -} - -func testImagesVolumeGlusterIndexHtml() (*asset, error) { - bytes, err := testImagesVolumeGlusterIndexHtmlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/gluster/index.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeGlusterRun_glusterSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x53\xd1\x6e\xe3\x36\x10\x7c\xe7\x57\x4c\xad\x3c\x24\x45\x24\xa5\x01\x82\x02\x77\x38\xa0\x6e\xe2\xa2\xc2\x5d\x6d\xc0\xf2\xf5\x70\x4f\x35\x2d\xad\x24\xe2\x28\x92\x25\x97\x56\x8c\xa2\xff\x5e\x48\x76\xe2\x33\x52\xbd\x69\x76\x76\x67\x76\x48\x26\x3f\xe4\x31\xf8\x7c\xa7\x4c\x4e\x66\x8f\x9d\x0c\x9d\x10\x09\x1e\xad\x3b\x78\xd5\x76\x8c\xfb\xbb\x9f\x1e\xb0\xe9\x08\x1f\xe3\x8e\xbc\x21\xa6\x80\x79\xe4\xce\xfa\x90\x89\x44\x24\xf8\xa4\x2a\x32\x81\x6a\x44\x53\x93\x07\x77\x84\xb9\x93\x55\x47\x2f\x95\x5b\xfc\x49\x3e\x28\x6b\x70\x9f\xdd\xe1\x7a\x24\xcc\x4e\xa5\xd9\xcd\x7b\x91\xe0\x60\x23\x7a\x79\x80\xb1\x8c\x18\x08\xdc\xa9\x80\x46\x69\x02\x3d\x57\xe4\x18\xca\xa0\xb2\xbd\xd3\x4a\x9a\x8a\x30\x28\xee\x26\x99\xd3\x90\x4c\x24\xf8\x7a\x1a\x61\x77\x2c\x95\x81\x44\x65\xdd\x01\xb6\xf9\x9e\x07\xc9\x93\xe1\xf1\xeb\x98\xdd\xbb\x3c\x1f\x86\x21\x93\x93\xd9\xcc\xfa\x36\xd7\x47\x62\xc8\x3f\x15\x8f\x8b\x65\xb9\x48\xef\xb3\xbb\xa9\xe5\xb3\xd1\x14\x02\x3c\xfd\x1d\x95\xa7\x1a\xbb\x03\xa4\x73\x5a\x55\x72\xa7\x09\x5a\x0e\xb0\x1e\xb2\xf5\x44\x35\xd8\x8e\x7e\x07\xaf\x58\x99\xf6\x16\xc1\x36\x3c\x48\x4f\x22\x41\xad\x02\x7b\xb5\x8b\x7c\x11\xd6\x8b\x3b\x15\x2e\x08\xd6\x40\x1a\xcc\xe6\x25\x8a\x72\x86\x5f\xe7\x65\x51\xde\x8a\x04\x5f\x8a\xcd\xef\xab\xcf\x1b\x7c\x99\xaf\xd7\xf3\xe5\xa6\x58\x94\x58\xad\xf1\xb8\x5a\x3e\x15\x9b\x62\xb5\x2c\xb1\xfa\x0d\xf3\xe5\x57\x7c\x2c\x96\x4f\xb7\x20\xc5\x1d\x79\xd0\xb3\xf3\xa3\x7f\xeb\xa1\xc6\x18\xa9\x1e\x33\x2b\x89\x2e\x0c\x34\xf6\x68\x28\x38\xaa\x54\xa3\x2a\x68\x69\xda\x28\x5b\x42\x6b\xf7\xe4\x8d\x32\x2d\x1c\xf9\x5e\x85\xf1\x30\x03\xa4\xa9\x45\x02\xad\x7a\xc5\x92\x27\xe4\xcd\x52\x99\x10\x4f\xc5\xfa\xc3\xb6\xff\xc6\xd4\x3b\xa4\xf5\x56\x88\x26\x9a\x6a\xa4\x23\xb0\xf4\x7c\x7d\x23\xfe\x11\xe3\x89\xf4\x36\x1a\x46\xca\xe0\xde\x35\x01\x4c\x81\x71\xf5\x54\xac\xa7\x62\xd5\xf5\xb6\xc6\xcf\x0f\x0f\xdf\x41\x0e\xf9\xde\xea\xfc\xc7\x09\xca\x27\x6c\xba\xca\x61\xbc\xcb\xad\x8e\x81\xc9\xd7\x48\x1d\x72\x1f\xcf\x40\xe6\x54\x3d\x71\x4f\x00\xf6\x56\xc7\x9e\x50\x79\x92\x4c\x93\xec\x5f\x7b\xab\xb1\xed\x6c\x60\x23\x7b\x42\xaa\xb6\xef\x46\x89\x31\x9f\x8a\xfe\xaf\x77\x5a\xe4\xb5\x55\xfc\x7b\xb1\xa3\x75\xaf\x2b\xbe\xb4\xa5\x69\x6f\x6b\xfa\x10\x2a\xaf\x1c\x9f\x87\x58\x77\x96\x3f\x6b\x7d\x53\x5a\xe3\xea\xba\x92\xfc\x76\x91\x9b\x89\x11\x8f\xd1\xbd\x26\xe3\x7b\xa4\xbe\x39\xff\xd3\xb3\x62\xdc\x8d\xb6\x04\x7b\xe9\x8e\x4a\x9b\xc5\xfa\x0f\x21\x8e\xce\x67\x57\xbf\xcc\x84\x18\xba\xf1\xc5\xb1\x8f\xf4\x1e\xb5\x9d\x3a\x83\x26\x72\x78\x10\xb5\x35\x24\xc4\x7f\x01\x00\x00\xff\xff\x41\xbb\x27\x88\x2b\x04\x00\x00") - -func testImagesVolumeGlusterRun_glusterShBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeGlusterRun_glusterSh, - "test/images/volume/gluster/run_gluster.sh", - ) -} - -func testImagesVolumeGlusterRun_glusterSh() (*asset, error) { - bytes, err := testImagesVolumeGlusterRun_glusterShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/gluster/run_gluster.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeIscsiBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\x4b\x4d\xc9\x2f\x4a\xb4\x32\xb2\xe0\x4a\x2c\xca\x35\x33\xb1\x05\x93\x65\x16\xfa\x08\xf1\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x8d\x24\x03\x08\x00\x00\xff\xff\x54\x51\xbe\x21\x42\x00\x00\x00") - -func testImagesVolumeIscsiBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeIscsiBaseimage, - "test/images/volume/iscsi/BASEIMAGE", - ) -} - -func testImagesVolumeIscsiBaseimage() (*asset, error) { - bytes, err := testImagesVolumeIscsiBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/iscsi/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeIscsiDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x93\xd1\x6f\xdb\x36\x10\xc6\xdf\xf9\x57\x7c\xb3\x80\xa2\x05\x62\xc9\x71\xbb\xac\xc8\x90\x07\xd7\x71\x57\xad\x89\x95\x59\xce\xba\x60\x18\x0c\x9a\x3a\x4b\x5c\x29\x52\x21\x4f\x75\xbc\xbf\x7e\x90\xe4\xa4\x4b\xfb\x3a\xbd\x48\xe2\x7d\xbc\xfb\xf1\xee\x63\x84\xb9\x6b\x0e\x5e\x97\x15\x63\x3a\x39\x3d\xc3\xba\x22\x7c\x6c\xb7\xe4\x2d\x31\x05\xcc\x5a\xae\x9c\x0f\xb1\x88\x44\x84\x2b\xad\xc8\x06\x2a\xd0\xda\x82\x3c\xb8\x22\xcc\x1a\xa9\x2a\x7a\x8c\x9c\xe0\x77\xf2\x41\x3b\x8b\x69\x3c\xc1\xcb\x4e\x30\x3a\x86\x46\xaf\x7e\x16\x11\x0e\xae\x45\x2d\x0f\xb0\x8e\xd1\x06\x02\x57\x3a\x60\xa7\x0d\x81\x1e\x14\x35\x0c\x6d\xa1\x5c\xdd\x18\x2d\xad\x22\xec\x35\x57\x7d\x99\x63\x92\x58\x44\xb8\x3b\xa6\x70\x5b\x96\xda\x42\x42\xb9\xe6\x00\xb7\xfb\xaf\x0e\x92\x7b\xe0\xee\xa9\x98\x9b\xf3\x24\xd9\xef\xf7\xb1\xec\x61\x63\xe7\xcb\xc4\x0c\xc2\x90\x5c\xa5\xf3\xc5\x32\x5f\x8c\xa7\xf1\xa4\xdf\x72\x6b\x0d\x85\x00\x4f\xf7\xad\xf6\x54\x60\x7b\x80\x6c\x1a\xa3\x95\xdc\x1a\x82\x91\x7b\x38\x0f\x59\x7a\xa2\x02\xec\x3a\xde\xbd\xd7\xac\x6d\x79\x82\xe0\x76\xbc\x97\x9e\x44\x84\x42\x07\xf6\x7a\xdb\xf2\xb3\x66\x3d\xd2\xe9\xf0\x4c\xe0\x2c\xa4\xc5\x68\x96\x23\xcd\x47\x78\x37\xcb\xd3\xfc\x44\x44\xf8\x94\xae\x3f\x64\xb7\x6b\x7c\x9a\xad\x56\xb3\xe5\x3a\x5d\xe4\xc8\x56\x98\x67\xcb\xcb\x74\x9d\x66\xcb\x1c\xd9\x7b\xcc\x96\x77\xf8\x98\x2e\x2f\x4f\x40\x9a\x2b\xf2\xa0\x87\xc6\x77\xfc\xce\x43\x77\x6d\xa4\xa2\xeb\x59\x4e\xf4\x0c\x60\xe7\x06\xa0\xd0\x90\xd2\x3b\xad\x60\xa4\x2d\x5b\x59\x12\x4a\xf7\x85\xbc\xd5\xb6\x44\x43\xbe\xd6\xa1\x1b\x66\x80\xb4\x85\x88\x60\x74\xad\x59\x72\xbf\xf2\xdd\xa1\x62\x21\xde\xaf\xb2\xeb\x0e\x7f\x91\x5e\xcf\x7e\x59\x08\x31\x5f\x65\x79\xbe\x79\x77\x9b\x5e\x5d\x6e\xe6\xd9\xcd\x1d\xee\xa9\x6e\xc7\xbf\x2d\xae\x6f\x67\xab\xf9\x87\x71\xe8\x72\x29\x24\x6d\xf0\xc9\x56\xdb\x44\x88\xd5\xed\x12\x87\xb6\x86\xb6\x81\xa5\x31\x18\x1f\xa0\x83\x0a\x7a\xac\xad\x66\x2d\xd9\xf9\x71\xcb\xda\x04\xb0\xf4\x25\xb1\x32\x1a\x96\x78\xcc\xce\x99\x80\xc0\x5e\x2a\x42\xe3\x9d\x6a\xc2\xb8\x3b\x40\xa8\x75\x50\x78\xf1\xa2\xcf\xa9\x0c\x49\x0b\x69\x8c\x98\x5d\x5e\xc2\xb7\x76\xd3\xa7\x2e\xe2\x50\x0d\x08\xc6\x29\x69\x06\x90\x4e\xf1\x54\xd2\xca\x9a\xe2\x5e\x8b\x84\x58\x25\xfd\xe7\xa0\xd9\x1a\xa7\x3e\xc7\x2c\x7d\x5c\xfe\x83\x44\x88\x08\xeb\xce\xcf\xbf\xe6\xd9\x72\x30\xf5\x5e\x06\x94\x64\xc9\x4b\x1e\xac\xf4\x15\xfc\xd1\xda\x81\x3a\xc3\xd7\xd2\x16\xe1\x5c\x44\x48\xb6\x52\x7d\x0e\xec\x3c\x85\xa4\x4b\xa1\x1d\x94\x27\xc9\x34\x14\x43\xd2\xbf\x3a\xe1\x80\x34\x04\x45\x84\x08\x0b\xdb\x5b\xb4\xa0\xda\xa1\x76\x05\xe1\xa5\x75\x90\x2d\x57\x64\x59\xab\x7e\x6e\x3f\xbc\x3a\x7f\xda\x9a\xe8\x7b\x1b\x4f\x27\x93\xd7\xe3\xc9\x69\x77\x25\x62\xa3\x6d\xfb\x30\xee\x63\xf1\x6e\x7a\x1a\x3f\xbc\x3d\x3b\x7b\x73\x1e\x6c\xfc\x66\x3b\x91\x92\x7e\x7c\xfb\x66\xf7\x93\x4a\xb8\x29\x4f\x11\x88\x21\xf9\x68\xe0\x6f\x6a\x5c\x4c\x7a\x84\x4d\x87\xb0\xe9\xee\x06\x6d\x1a\xef\x98\x14\x5f\x4c\x9e\x9a\xb1\xb1\x5d\x54\x2a\x13\x2e\x4e\xa1\xba\x5b\xb9\x29\x0e\x56\xd6\x5a\x1d\x17\xff\x0f\xcc\xc4\xb4\x36\x3c\xb6\xef\xfb\xc6\x3e\xb5\x32\xc8\x2f\xa4\x9c\xdd\xe9\xb2\x9f\xea\xd7\xdf\xf8\xef\xe0\xec\x30\xf5\x61\x70\x89\x10\x8b\x3f\x6e\xb2\x7c\x81\xd7\xd3\xb3\x49\xc2\xaa\x11\x62\xb1\x5c\xaf\xee\x6e\xb2\x74\xb9\xc6\x9f\xa3\x6f\x9c\xf4\xcc\x66\xa3\xbf\xc4\xbf\x01\x00\x00\xff\xff\x25\xb2\x72\x1e\x6e\x05\x00\x00") - -func testImagesVolumeIscsiDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeIscsiDockerfile, - "test/images/volume/iscsi/Dockerfile", - ) -} - -func testImagesVolumeIscsiDockerfile() (*asset, error) { - bytes, err := testImagesVolumeIscsiDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/iscsi/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeIscsiVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesVolumeIscsiVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeIscsiVersion, - "test/images/volume/iscsi/VERSION", - ) -} - -func testImagesVolumeIscsiVersion() (*asset, error) { - bytes, err := testImagesVolumeIscsiVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/iscsi/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeIscsiBlockTarGz = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xdd\x6b\x54\x93\x57\xda\x37\x70\x14\x05\xcf\xf4\xa0\xb5\x88\x0a\x33\xb6\x46\x45\x85\x16\x05\x29\xa7\xda\x8e\x07\x50\x4c\x4b\x55\x6c\x15\xf0\x08\x45\x04\x54\x10\x50\x08\x11\xa9\x75\x2a\x55\x2c\xa8\x20\x08\xa9\x0a\x44\x86\xa3\x82\xa2\x40\x40\x44\x45\x04\x44\xc3\x31\x40\x08\x0a\x02\x37\x47\x31\x81\x90\x84\x24\xef\x7a\x3a\x6f\xf7\xfd\xe5\x7d\xd7\x9a\x79\xd6\xb4\xe9\xcc\xfc\x7f\x9f\xba\xae\x3b\xfb\xda\xd7\xbe\xf6\x9d\xbd\xfd\xd0\x15\x0c\x23\x26\x69\xdd\x1a\xa6\xbe\xd6\xd2\xee\x6b\x0e\x8c\xed\x74\xfe\xfa\xd1\x50\xa0\xbb\xf9\x5f\x3e\x7f\xab\x64\xed\xdb\xab\x4a\xa6\x7c\xdb\x78\xe0\xb3\xf1\x37\x9e\xcd\xda\x9c\xfd\x97\x2f\xb3\x0f\x3a\xfd\x29\x5b\xe0\x28\x58\x9f\x7d\x63\xe6\x97\x6f\xcf\x7a\xb8\xbc\x67\xf2\xc3\xef\x1b\xdf\x2e\xb8\x22\xf0\x3c\xcd\x1f\x9a\xe0\xb9\x7a\xf1\x92\xf5\x8c\x56\xa6\x91\xeb\xea\x9b\x3f\xaf\xfd\xeb\x61\x5b\xce\x0e\x51\x95\xb5\x22\x58\xd4\x57\x79\x81\xc7\x90\x79\x30\x05\x05\xea\x5a\x85\xaf\x6d\x61\x40\xd9\x50\xd9\xbc\x40\x81\xa8\x7d\x0a\xdb\xee\xc5\x9d\xf6\x56\xe9\xd0\x47\x65\xf3\xfd\xee\x27\xee\x61\x36\xfa\x8d\x0d\xe5\x35\xf5\xd9\xba\x4b\x87\xca\xfa\x04\xb9\x42\xc3\xce\xea\xde\x8f\xbb\x38\x81\x6d\x1d\x7e\xdb\x9b\x2f\x17\xb0\xd5\x61\x7a\x23\xf9\x7a\xc3\x73\xdb\xd4\xf1\xba\x29\xce\x3e\xde\x67\x79\xad\xee\xe2\x3b\x1e\xbe\xde\xad\x21\x25\xee\x39\x47\x1e\x76\xf5\xf3\x6c\x7a\x5e\x57\x75\x96\xfb\xde\xed\x48\xac\xab\xef\xe4\x6f\x60\x1e\x6b\xaf\xdf\x97\x95\xa6\x78\x13\xe3\xaa\x2a\xf2\x4a\x09\xa7\xea\x3d\xad\xfa\x93\x22\x98\x21\x5d\x55\x23\x3b\xba\x36\x45\xb2\x1e\x24\x36\xd8\x8c\xcd\x60\xde\x1d\x28\x55\x8b\xb9\x87\x2a\xb4\x3d\x12\x5c\xe6\xb1\x46\xca\xbb\x5a\xda\x47\xf2\x2c\x03\x07\x79\x23\x63\xcc\xa2\xb8\x0c\xbd\x91\xd7\x97\xbd\xec\xe4\x03\xd5\x77\x65\xc2\x44\x59\x92\xf3\xdc\x96\xa3\x2f\x13\x9d\x85\x57\x5d\x43\x3a\x14\x89\x2e\x43\xbd\xa3\x22\xff\xeb\xcc\xee\xbf\xea\x95\x99\xe8\xa8\x1d\xad\x64\xd3\xf3\x8d\xe7\x5d\x6c\x3d\x74\xed\xd4\xbc\x22\x9e\x60\x58\x55\x1d\xf9\x44\xec\xbf\xed\x93\x97\x8f\x86\x5d\xda\x94\x1c\x5f\xe1\x72\x03\xa6\x15\xf5\x38\x3e\xa4\x4d\x9c\x10\x2d\x36\xa3\xb2\xa3\xf5\x86\x54\xe1\x47\xd9\x4d\x96\x41\x7f\x95\xba\xc5\x72\xec\x4f\xb9\xfc\xcf\x7f\x9c\x97\x72\x13\x22\x66\x0c\xa9\x22\xfe\xe7\x23\x11\x7a\x43\xaa\xb1\x5b\x09\x01\xfc\x0b\x45\xea\xeb\x19\x21\xca\xed\x32\x79\xde\x8c\xa1\xe1\x2e\xa5\x67\x57\x80\xb3\x4a\x95\x91\xd8\xe5\xc9\x35\x7c\x29\x2b\xb1\x66\x5a\xe9\xea\x0d\x85\x74\x1c\x6d\xd2\x3f\x15\x14\xfa\x65\xe2\x2f\x29\x42\x3a\x8f\x36\xd9\x37\xb4\xc8\xee\x75\xa5\x7b\x73\x93\x13\xd7\xc6\x1d\x61\x3f\x53\x7f\x37\xde\x70\x4d\xc0\xad\xda\x9a\xf5\x39\x3e\x8a\x53\x5b\xe6\xd6\x3b\x31\x17\x54\xe5\xf7\x1b\x6e\x3d\x74\xe6\xe2\xb1\x39\x9e\xf5\xde\xea\xec\xd3\xa5\xdb\x7b\x3c\x93\xbe\xce\x53\x96\x2e\xb1\x4d\xf9\x65\x58\xb3\x5d\xfa\xcb\x3d\x24\x78\xf6\xdb\x54\xee\x4f\xee\xc2\x11\xbd\xb4\x3b\xee\x1b\x6c\xce\xac\xe8\xbd\xcd\xde\xf6\xf0\xa7\x65\xc3\x2b\xf8\xe9\xcd\xaa\x5d\xb3\x1a\xf6\xff\xfa\x78\xf4\x0e\x49\xe9\x95\xf7\xeb\x8c\x21\x21\x64\xcc\x91\x6f\x7e\x4d\x99\xd9\xfc\x6b\x19\x43\x93\x49\x22\x4e\x23\x09\xda\xd3\xc1\x16\x12\x5c\x4c\x4f\xe9\x45\x2a\x0a\x25\xd9\xa7\x93\xec\x3e\x74\xa2\x54\x32\xc6\x82\x94\x79\xe7\x10\x19\xe3\x48\xc6\x7c\x43\x62\x5f\xd2\x43\xbc\xc9\xca\x72\xc9\xca\x98\xbe\x24\xf8\x23\x09\x56\x1f\x20\xc1\x74\x3a\xe8\x43\x66\xfc\x9a\x64\xaf\x22\x6d\xf5\x79\x4e\xaa\xb4\xa4\x97\x4b\x1a\x73\xc8\x9f\x8c\x59\x46\xc6\x04\x90\xb6\xce\xad\xf9\xf5\x83\x37\xb8\x64\xcf\x1a\xc9\xdc\xed\x74\x33\xea\x48\x46\x7a\x27\xe8\xa6\xe7\xd1\x45\x3a\x92\xc7\x3f\xd0\xf5\x34\x90\x22\x65\x24\xe8\xf6\x8c\x04\x4f\xd2\x89\x48\xb3\xee\xb8\x90\x44\xfd\xa4\xf2\x01\x32\xe6\x50\x19\xa9\xd2\x8a\xbc\x97\x2d\x77\xc9\x22\x22\x48\xe9\x45\x77\x48\x70\x39\x99\x27\x90\xde\x94\x28\x92\xc8\x84\x0e\xde\x24\xc1\x02\x3a\x3b\x8f\x24\xaa\x20\x15\x15\x5d\x25\x41\x63\x3a\xf8\x37\x12\x4c\x22\x89\xb2\x48\x8f\x46\xe3\x48\x30\x38\x97\xbc\xe1\xde\x64\xbd\x0d\xf4\x94\x39\x24\x91\x2b\xdd\x38\x11\x69\xdc\x74\x12\x14\xd1\x6f\xab\x23\x09\x4a\xc9\x94\xdd\x24\xc6\x20\x9b\x7f\x99\x4f\x9a\xb9\x9f\xcc\xed\x49\x3e\xc8\xa5\x3f\x48\xde\xb1\x43\x1c\x52\xb9\xe2\x36\x79\x2c\x20\x8f\x8b\xe9\xc7\x64\x74\x1f\xe9\xea\xaa\xb4\x5f\x57\xb3\xdb\x8d\x4c\xa8\x22\x43\x72\x48\xff\x9e\x7a\x92\x21\x79\xa4\x01\x85\xe4\x83\xda\xa4\xc6\x2e\xfa\x80\xf0\x23\x19\xb5\xc9\xd6\x2f\x27\x67\x4e\xd0\x4e\xf2\x38\x8f\x6e\xb9\x17\x1d\x24\x2d\x0f\x09\x26\xc1\x40\xf2\x49\xeb\xeb\xa4\x0c\x3a\x51\x38\xa9\x77\x3e\xe9\xe4\xd0\x33\x52\xe5\x29\x3a\xa5\x07\x19\x43\x1f\x92\x45\xa4\x19\x2f\x0b\xe8\x20\xfd\x2d\x7c\x9b\xde\x5a\xfa\x98\x7b\x4c\xb2\x0f\x92\xc3\x6b\x94\xee\xa0\x21\xbd\xde\xcd\x64\x4a\x3d\xb2\x51\x63\x5f\x90\xe0\x35\x32\x65\x28\xfd\xf5\x58\x47\x1a\x17\x9a\x4b\x82\x65\x74\xb0\x90\x04\x19\x74\xf0\x26\x09\x72\x49\x70\x3e\x39\x56\x86\x6a\xc8\x32\xec\xe8\x60\x0e\x09\x5e\x23\xa3\xef\x93\x55\x94\x91\x82\xad\x33\xc9\xe3\x21\x32\x84\x49\x16\x39\x7a\x97\x8c\xe1\xd0\xe7\xe9\x49\x12\x74\xa3\xcf\xd3\x64\x12\x64\xd0\xed\x38\x4c\xda\x11\x4d\xaf\x27\x99\x4c\xe9\x4c\xf7\x28\x83\x04\x1b\xe8\x20\x5d\xbb\x05\x1d\xa4\x77\xb5\x9c\x54\x5c\x2c\x24\x2b\x3f\x4f\xea\x10\x91\x77\x7c\x54\x48\x07\xe9\x5d\x55\x92\xa0\x1d\xbd\xe0\x52\x3a\x48\xdf\x97\xed\x24\x48\x1f\x7a\x89\x4d\x64\x4a\xfa\xd2\xa1\xbf\xd1\xd6\x74\xed\x97\x48\x99\x6c\xfa\x2d\xe6\xd2\x41\x72\xd5\x0f\x75\xd1\x41\xfa\xd2\x89\xa1\x83\xe4\x8a\x18\xa2\x6f\x2f\x0f\x7a\x4a\xfa\xd5\xbe\x4b\xc6\x54\xd3\xeb\xed\x25\x63\x8a\x49\x67\x82\xe8\x7b\x59\x44\x6f\x1b\x7d\x31\x4c\x25\xeb\x75\xa5\x8f\xbf\xab\x24\xd1\x6c\x32\x79\x61\x12\x99\x3c\x99\x4c\x6e\x42\x26\x0f\x3a\x4a\xcf\x43\xc6\x54\xd2\x6d\x25\xdb\xeb\x4a\x2f\x5c\x8f\xe4\xc9\x22\xaf\x59\xd0\x16\x92\x27\x8d\x1e\x43\xbf\xf7\x4d\x24\xe5\x06\xba\x72\xfa\x6e\x8c\x24\x29\xd5\xb5\x24\x28\x27\x63\x2c\xc8\x71\x54\x78\x83\x2c\x87\x3e\xec\xd5\xf4\xbf\x71\x4c\xe8\x20\xfd\x1e\x74\x92\x44\xf4\x09\x38\xb6\x9d\x14\xbc\x9d\x14\xdc\x4a\x6f\xf9\x08\x19\x43\x9f\x85\x85\xf4\x9d\xe4\x42\xe6\x19\x24\x37\x4d\x10\x93\xa4\x24\xad\xd6\x5f\x97\x1c\x5d\x73\x92\x7a\xf9\xcb\x3f\x34\x2e\x28\x7d\xf7\xa9\xb7\x0b\xd4\xf5\x0f\x7f\xb9\x09\xac\x14\xa2\xa7\xaa\xbc\x1c\x75\x7f\xc4\xdf\xc7\x38\x3f\x77\xcc\x7c\x99\x35\x58\x30\x7d\x07\x6b\x39\x6f\xa4\x4e\xa9\x1f\x92\xe4\x52\x37\x18\xf4\xfa\x79\xfb\x9b\x2d\xd6\xb2\x65\x31\x2d\xe2\x37\xb6\x51\x5e\x21\xca\x7e\x71\x69\xa6\xb1\x62\x38\xd0\xbc\x79\x30\xd8\x51\x69\x77\x7f\xbb\x32\x72\xbc\xa1\x8e\xae\xe1\x65\xc3\x80\xc1\xa6\xe1\xb0\x62\xf5\x6d\xf3\xe6\x75\xae\xb7\xd8\x23\x99\xfd\x7a\xca\x39\x99\xae\xb3\xeb\xa4\x1c\xa1\xf3\x88\xd2\x23\xd8\x8f\x67\x5c\x38\xe0\x2d\x53\x89\x47\x24\x67\x25\x4f\x25\x99\x92\x01\x49\xa2\x3f\x55\xbf\xcf\x44\x74\x20\xb9\x3f\x57\x2c\x1a\x95\xaa\x46\xc7\x54\x05\x4f\x3b\x9f\x84\x2a\x33\xe4\xb7\x47\x8b\x22\xf9\x99\x9f\x8f\x69\xab\xa6\x66\x0e\xc7\x32\x72\x4b\xc7\x5c\x27\x68\xfd\x37\x69\x53\x87\xf5\xfb\x77\xb8\x7b\x29\xba\xd5\xa3\x41\xc1\x8a\xee\xb9\x0d\x95\x65\x9c\x3b\x96\xbb\x83\x07\x55\xe2\x19\x2d\x2f\x7f\x54\x76\x0d\x5a\x65\x24\x7a\x9b\x57\x8b\x2c\x77\xf7\x56\xb2\xb8\x09\xa1\x25\xcf\xa5\x36\x07\xeb\x5b\xd3\x86\xbf\xd2\xcd\xbc\xda\x24\x9b\x25\x55\x77\x26\x48\x07\x0c\xb7\x3d\xc8\x4c\x53\xbc\xab\x95\x69\x3e\xa2\xd7\x7b\x93\xbd\x2d\x46\x59\x9a\xdf\x67\x58\xbf\x4f\x9d\xbd\x5c\x71\xea\x88\xc0\x2e\xbd\x42\xb5\xcb\xe5\xef\x8f\xf8\x23\xf5\xee\x39\x39\x47\x07\xf3\x8e\x97\xf2\x57\xf2\x5f\x50\x7b\xf8\x65\x29\x0b\xcc\x63\xd4\xfa\x61\x55\x9d\xdf\x50\xed\xfc\x5b\x35\x65\xdc\xde\xa4\xde\x14\x66\x63\x2d\x67\x56\xd3\x01\xdb\xc5\xac\xc3\xf2\xf3\xfe\x3c\x7f\xa5\x7f\xb8\x7f\xa9\x24\x95\x5a\x4b\x3d\xa2\x16\xa6\x26\x5f\xe3\x3b\xd6\x70\x93\x99\x4c\xce\x4f\xb6\x66\xac\xad\xf2\x3e\xff\x1c\x7f\xb1\x7f\x84\xc4\x92\xf2\xfb\x4a\xf9\xfc\xbb\xed\x29\x42\x2a\x36\x97\x31\x2f\xfe\xec\x86\x3c\x87\x32\xee\xbb\xfc\x8c\x1a\x6f\xfe\x0f\x94\x98\xdf\xc5\x35\x59\xef\x16\xeb\x13\xef\x13\xe3\xc3\x19\x38\x37\x10\x3b\x70\x7e\xe0\x72\xd1\x22\xd6\xa1\xfc\x0d\xf9\x5e\xf2\x28\x49\x32\x55\xc1\x17\xf2\x85\x35\x31\xdc\xac\xf5\x6e\x97\x8a\x96\x24\x9c\x2f\xfa\x84\xe5\x98\xbf\x4e\xde\x24\x39\x42\x25\x52\xae\x54\x6f\x8d\x45\x92\xef\x46\xd1\xf9\x81\x84\x63\x9f\x58\x26\x44\x6d\x72\xe4\x26\xd7\xd4\xe8\x53\xb6\x54\x11\x55\xe9\x5f\xec\xaf\xde\xcc\xae\xed\x49\xcf\x35\xe9\x67\x7a\x70\xfd\xf8\x77\xa9\x42\x7f\xa3\x04\x4e\x91\xa5\x8d\x91\xcb\xb9\xf9\xb1\x45\x1f\xb2\xbc\xe4\xb7\x25\xfd\x94\x15\x3f\x9c\x5f\x22\x69\x93\x9c\x93\x3c\x93\x64\x4b\x12\xa8\x17\x54\x01\x3f\x90\x3b\x68\x1f\xb9\x5e\x14\x3f\xff\x52\x91\x09\x8b\x2d\x0f\x93\x5c\x97\x84\x53\xa7\xf8\xd7\x6a\xf4\xb8\x86\xf6\x76\x71\xa1\x4b\x95\x41\xf2\x1f\x24\xd1\x14\x97\xbf\x87\xcf\xe4\x72\xec\xed\xe2\xd7\xe6\x9b\xda\x98\xdb\x2c\xb7\xb1\xb5\xf9\x93\x72\x87\x5c\x26\x99\x4a\xcd\xae\x31\x49\x66\xa4\xb8\x6d\x62\x3a\x14\x47\x85\xae\x54\x7e\x23\x1f\x96\x18\x50\x16\x35\xbe\xc9\x0c\xae\x68\x13\xd3\xbe\x38\x3a\xd4\x42\xe9\x2a\x57\x4a\x74\x29\xbd\x1a\xc3\x64\xbb\x4d\xb3\x93\xb9\x29\xdc\x64\x2e\xd7\x23\xc9\x23\xc5\xce\x9e\x1d\xa7\x5a\xaa\x3c\x2a\x8f\x90\xc4\x50\x59\xfc\x1c\x7e\x4e\x8d\x1f\xdf\xaf\x46\xcc\x77\xe3\x16\xdb\x57\x33\xd9\xf1\xaa\xe5\x3c\x23\x9e\x29\x6f\x11\x6f\x15\xef\x03\xde\x0a\xde\x52\x9e\xb5\x92\x15\x47\xbd\x94\x9c\x96\xe8\x51\x17\xa8\x2d\x54\x1d\xb5\x92\xba\x45\x45\x49\xf2\x25\x91\x14\x87\xdf\x5b\x63\xc0\x37\xa8\x89\xe7\xdb\x71\xd9\xf6\xea\xb8\xd6\xcb\xad\x51\xaa\x65\xbc\x95\xbc\x65\x3c\x1b\xde\x02\x9e\x19\xcf\x98\x67\xc5\x63\xb8\xc4\x99\x0b\x94\xf5\x5b\x59\xd9\xca\xfc\x0c\x69\x62\xfc\xec\xcb\xca\x73\x71\x72\x85\xe5\xd8\x1c\x93\x74\x5f\xbd\x18\xef\x9c\x44\x4e\xa0\xbc\xd5\x4c\x9a\xc0\x2e\x61\x87\xea\xbf\x66\x3f\x96\x29\x36\x09\x8b\x07\x7f\x34\x93\x26\x84\x36\xf1\xaa\xed\x0e\xa9\x17\x4b\xad\x94\xb5\xda\x52\x5b\xe9\x03\xb1\xb4\xdf\x46\x76\xbe\x46\xda\xc9\xd0\xbb\x1c\xd4\x3a\x90\xa6\xf0\xfb\xef\xfa\x1e\xc3\xff\x65\x9b\xdf\xf2\x4a\xc2\x0b\x96\xe6\x99\x3d\x15\xb2\xb7\x5a\x89\x93\xac\x12\xfd\x1b\x16\x64\x0e\x30\x27\x69\xba\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\x9f\x36\x91\x20\x75\x4f\xdd\xa2\xab\xa6\x53\xee\x99\x05\x9b\x4d\xd8\xf8\x69\xee\xcd\xe7\xb1\x4e\xfd\xf5\x6b\x0f\x4c\xdb\x9d\x76\xe6\x82\xcb\x9b\x49\x01\x4d\x8e\x7b\xa6\x18\x97\xcc\x5e\x3f\xc1\xf8\xc6\xcc\x66\xef\x03\xc3\xb3\x76\x3c\xff\x2c\x7e\x73\xea\xcc\xfa\x77\xd7\xee\xfa\xfc\xf0\xc9\xb7\xfc\x57\x17\xf9\x5a\x4e\x93\x26\xca\x76\x2d\xef\x9b\xa6\xe9\xf5\x00\x68\x10\x43\xbc\x4a\xd6\x62\xde\x60\xb2\xa2\xaa\x42\xea\x9d\xa3\xbe\xee\xd9\x24\x53\xbd\x39\xe7\x51\x51\xfa\xa6\x4a\xd5\xa0\xeb\x68\x16\x2f\x14\x19\x0c\x18\xd4\x87\x8b\xfc\x8c\xed\x39\x75\x67\x76\xac\xb3\xb7\x4f\xb1\x28\x76\xd3\xe7\x14\x88\x5f\x52\xa3\xcd\x23\xfd\x79\x5d\x79\x6a\xbe\x67\x93\xdd\x05\xbd\x6a\xdb\x62\xe9\x8b\x1e\x61\x60\x96\xdd\xf0\xab\xba\xd1\x8a\x5b\xe1\xf1\xce\xec\x23\xe2\xae\x51\x0f\xbd\x09\x53\xb7\xbe\xd1\x75\x71\xc8\xef\x28\x7b\xc8\xa8\xb8\xe6\x4e\x1d\x2c\x4e\xb4\xa5\xa2\xcc\x62\x66\x14\x8d\x3f\xa5\x08\x58\x30\x18\xe4\x14\x55\x77\xeb\x1a\x4b\xf0\x64\x13\xdf\x7b\x4b\xa7\xa2\x92\x91\x9c\x55\x39\xe8\xce\xa0\x02\x8c\xc5\xd1\x95\x8c\x7d\x4e\x97\x38\xee\x0c\x2a\xe5\x82\x6c\x6c\xad\xbd\xfd\xd9\x04\x37\x5f\x3f\x95\x79\x97\xaf\x71\x57\x75\x88\x93\xf9\x59\x8e\xaf\x45\x0d\x63\x5f\x0e\x5f\x4a\x45\xf3\x9d\xe5\x09\x12\x7b\x41\xaa\x24\x5a\x62\x7f\x69\xb3\x3c\x92\x8a\x8e\x4a\x3f\x7f\xcd\x46\xd3\x2d\xd6\xac\xca\xf8\x84\x27\x19\x6b\xec\x6c\xef\x4d\xbe\x3c\x10\xa1\xab\x8e\x5e\x53\x7c\x46\xd3\x25\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xff\xcb\x3d\x66\x40\xcf\xcf\x3a\x5a\x5a\xdf\x85\xc5\x4e\x18\x4b\x9b\xa8\x5b\xb8\xde\xe8\xca\x96\x83\x9c\xe9\x9a\xae\x0b\xe0\x77\xe6\x53\xbe\xf5\x40\xd7\xb8\x69\x3d\x86\x7a\xb6\x02\xd7\x05\x9a\xae\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x5f\x6d\xa6\xd5\x91\xf4\x39\x6b\x66\xae\x1d\x37\xfa\xb4\x75\xda\xb8\x77\xdf\xca\x38\xb0\x22\x65\x73\xc1\xad\xb7\x0d\xc2\x1b\xf7\xef\xd9\x17\x63\x7d\x22\x21\xa0\x26\xf6\xbe\xc3\xeb\x89\xef\x94\x38\x2c\x7d\x18\x60\xb0\x9d\x35\xd1\x39\xf7\xd9\xc2\x2d\x4b\x4e\x0e\x7f\xf7\x65\xe3\xb9\x1f\x8d\x56\x3b\x77\x28\xbe\x2f\x35\x95\x56\xea\xf9\xed\x72\xd7\xf4\x6a\x00\xfe\x69\xc7\xd9\x95\xa5\x1d\x7b\xbe\xca\x4c\x34\x7e\x25\x6b\x4e\xe9\xb3\x5b\x94\x7c\x69\xd0\x64\xe4\xe8\xcd\x16\xb7\xa2\x26\x75\x48\xd6\x79\x41\xdf\x80\x2b\xdb\x8d\x2d\x54\x58\xe6\x45\xf9\x27\x5f\xf4\xb2\x8c\x8c\x8a\xdb\x98\xc5\xe6\xad\xb0\xf5\xeb\x15\xb4\x0f\xc5\xf4\xc7\x67\x55\xfb\xa8\xaf\x08\x57\x14\x2f\x19\xe4\x84\x1e\xeb\x12\xbe\x6a\xf6\x75\x0d\xed\xee\x89\x18\xe2\x1a\xeb\x5a\x64\xa9\xba\x3b\xa5\x43\x0d\xf3\x27\xbd\x97\xde\x39\xd1\xc5\xa1\xa9\xa3\x59\xb6\xae\xe2\xda\x4d\xff\x3b\x6e\x4c\x4e\x6e\x79\xea\x54\x5d\x76\x58\x29\x2b\xe7\x27\x5f\xeb\xd4\xf2\x9e\xa6\xe7\x45\x3e\xfb\x3e\xf4\xcc\xd3\xe9\x2c\xa8\x64\xdc\x32\x88\x15\x55\x39\xf0\x07\x66\x54\x32\x3f\xe6\xd4\x96\xdf\x1b\x5b\x61\x6c\x6f\x35\x2f\xb6\xfa\x23\x87\xfd\x87\xfb\xc6\x8e\x45\x2b\x2d\x04\x6c\xb3\x6c\x75\x25\xe3\x48\xfb\xa8\xcc\xdd\x8c\xe5\x64\xa1\x2b\x5f\xce\x72\x2a\x08\x0b\x65\xb0\x9c\x02\x75\xe4\xf6\xf2\xa4\x4d\x3a\x72\x29\x15\x1d\x97\x5e\x8b\xdf\x38\x48\x78\x7c\x66\x8d\x9d\xed\x3d\xdf\x55\x02\x43\x3d\x15\x23\x42\x35\x67\x9c\xa6\x6b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xdf\xd2\xf1\xc1\xbe\xda\xd5\xd3\xb5\xb4\x26\x69\x7f\x34\x79\xd4\x79\xea\x8c\xa0\x9f\x3e\xfd\x2c\xad\xcd\xd6\x40\xd3\x75\x01\xfc\x63\x5a\xa2\x32\x1a\x9f\x6a\xbf\x5f\x6b\x37\x3f\xe4\x26\x6f\xad\xa6\xab\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xc3\x5a\x14\xd0\xb3\x6d\xe5\xe9\x45\x3f\x8e\x7f\x9d\xc0\xd3\x1f\xbf\xd0\xe8\x1b\xc1\xb7\x1b\x53\x03\xbc\x16\x98\xeb\xdc\xa8\x7b\xf4\x64\xf9\xd1\x09\x56\xfd\x29\x1f\x9d\xbc\xd0\x36\xf5\x83\x13\x17\xb6\x9d\xee\x37\xbf\x2d\x9f\x92\xf9\xed\x15\xc7\xbf\x6d\x9e\xd2\x3b\xf9\x5a\xf6\x9f\xf4\x57\x9f\xc8\x7c\x2c\x9d\x7e\x6a\xd7\xc0\x25\xc3\xce\xfb\x95\x9a\x5e\x0d\xfc\x17\x51\xc7\x9e\x2a\x2f\x4b\xd9\x61\xe3\xfc\x44\x9c\xe7\x28\x60\x7f\xe1\x60\x26\x72\xeb\x13\xef\xbd\x5b\x1c\x72\x4b\x2d\x73\x5d\x9c\x23\x10\xf2\x54\x45\xaa\x7c\xa9\x9f\xcf\x87\x94\xc3\xf6\xcc\x57\xd6\x0e\xfb\x3f\xe6\xa9\x86\xf9\xa3\x95\x19\x1e\x91\x65\x6e\xb7\x7d\x8b\x6c\x0b\x94\xa7\x02\x6a\xc6\xfe\x56\xc8\x96\x53\x09\x81\x31\xbe\xc5\x47\x65\x57\xd2\x4c\x1e\x71\x32\xe7\xb6\x14\xca\xaf\xc5\x8b\xca\xdc\x82\x8d\xb6\x65\xc7\xcd\xf6\x5f\xec\x19\xed\xdb\x65\xb8\x2c\xf2\x09\xff\x45\xa8\x0d\x8b\xbf\x90\xbb\x7c\xee\xd8\xc4\x19\xd2\xaa\xb5\x45\x43\x49\x0b\xd3\xbc\xd6\x29\xf2\x2f\x5c\x48\x12\xce\x89\x1d\xfc\x98\x53\xeb\xb3\x33\xd4\xc2\xd8\xbe\xc0\xca\xd4\xae\x3c\xc4\x89\xa1\x2d\xae\x49\xff\xa0\xdf\x7f\xa7\x6d\xd9\xa2\xd4\xf2\x1b\xe2\x5e\xc7\x11\xd1\x5e\x75\xd5\x3d\x95\x19\xa7\xf6\x4c\x7b\x57\x7c\x95\xc4\x5e\x38\xb7\xbb\x40\x62\xdf\xaf\x23\x4f\x90\xd8\x0b\xf5\xbb\x19\x54\xf4\x27\xfa\xdd\x22\x2e\x73\xff\x4d\xa7\xc8\x11\x4d\xf7\x58\xb3\x4c\x7d\x03\xfe\x6c\xf1\x9e\x72\x54\xab\xf8\xc5\x5e\xb6\xf5\x28\x67\xa9\xdc\x6b\x82\xa6\x6b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7f\x0f\x45\x39\x5f\xe9\xae\xd4\xd2\x32\x9a\xf6\xe0\x83\x36\xb7\x65\xab\xda\xd6\x8c\x9f\x9c\x71\x42\x71\x40\xd3\x65\xc1\x7f\xb8\x83\x1b\x6e\xef\xb6\xd2\xdb\xf9\x85\x3a\xe8\x75\xf9\x08\x7e\xc6\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x37\xf7\x73\x63\x2a\xbb\x6e\xd1\xd5\x55\x53\xee\x05\x8e\xb8\x6f\x33\x1d\xf7\xfc\xc9\x23\xbb\xc5\x75\x3e\xde\x0f\x1e\x19\xdd\x6e\xda\x26\xf8\x30\x72\x27\x57\xb8\x22\x25\xfb\x9d\x90\xb0\xbf\x64\xbf\xb3\xe1\x86\xf0\xd1\x56\xb7\x92\x59\xcb\x72\x6f\x38\x24\x67\x27\x9a\x4e\x31\x88\x7a\xfb\x83\xee\xd3\x21\xa2\x83\xef\x77\x26\xca\x4a\x76\xc4\xea\x6b\x7a\x39\xf0\x87\xd7\x66\x28\x36\x92\x3d\x3b\x6f\xec\xe1\x70\x74\x24\x65\x71\xb0\x74\x83\xe7\x7b\x8a\xa9\xac\xf9\x91\x8a\x8a\x98\x60\xce\xc0\xc5\x8f\x39\x22\x19\x5f\xd4\xe0\x26\x0d\x7d\x9a\xb1\xd0\x45\x3f\x26\xcd\x32\x32\x2a\xae\x32\x93\xc5\x5b\x65\x79\x44\x4c\x5d\x2b\xef\xea\x37\xc8\xda\xe4\xab\xbe\x22\x5c\x51\xbc\x64\x30\x21\xe4\xb0\xa2\x3f\x79\x7b\x96\x5b\xe1\x60\x8f\xb8\xbc\xac\x42\x61\x91\xa5\xec\x7e\x4f\x3a\xd4\x30\x7f\xd2\xc5\xf4\xce\x89\x2e\xf6\x4d\x1d\xcd\x82\x53\xed\x5f\x7e\x6d\xd9\x98\xc5\x65\x36\x75\x3c\xb8\xab\x2c\xbe\x57\x52\x24\x78\x6c\x91\x58\xbb\xb7\x7f\xec\x45\x91\xcf\xbe\x0f\x3d\xf3\x74\x3a\x0b\x2a\x19\xb7\x0c\x62\x45\x55\x0e\xfc\x81\x19\x95\x4c\x33\x4e\x2d\x75\x6f\x6c\xa9\xb1\xbd\x95\x41\x6c\xf5\x47\x0e\xfb\x0f\x77\x8c\x1d\x8b\x56\x5a\x08\xd8\x66\xd9\xea\x4a\xc6\x91\xf6\x6e\x99\xbb\x19\xcb\xc9\x42\x57\xbe\x9c\xe5\x54\x10\x16\xca\x60\x39\x05\xea\xc8\x3d\xe5\x49\x9b\x74\xe5\x81\x54\x74\x5c\x7a\x7d\xa9\x8d\xa6\x9b\xac\x59\x4b\xe3\x0c\x2b\x86\xf7\xd9\xd9\xde\xf3\x5d\xd5\x6a\xa8\xa7\x62\x54\xa8\xf0\x7f\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xef\xeb\xf8\x60\x5f\xed\xea\xe9\x5a\x5a\x93\xb4\x3f\x9a\x3c\xea\x3c\x75\x46\xd0\x4f\x9f\x7e\x96\xd6\x66\x6b\xa0\xe9\xba\xe0\x8f\xa9\x25\x2a\xa3\xf1\xa9\xf6\xfb\xb5\x76\xf3\x43\x6e\xf2\xd6\x6a\xba\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x87\x2d\x0a\xe8\x71\x5b\x79\x7a\xd1\xd9\xf1\xaf\x13\x78\xfa\x27\x16\x1a\x7d\x23\x18\x65\x24\x37\x65\x9c\x69\x7c\xff\xc1\x56\x03\xe3\x82\x8e\xb7\xfb\x72\xe3\x1f\xcd\xdc\x7a\xc2\xe4\xdc\xa4\xad\xbb\x17\xdf\x6e\x6e\xec\x31\xbe\x73\x75\xcd\x81\x74\xa7\xc5\xe9\x8c\x1f\xef\x7f\xbf\x77\xc2\xe4\xfc\x3f\x8b\x2c\xe6\x7e\x7f\xd7\x23\xd4\x74\xb6\xbb\x8e\xa6\x97\x03\xbf\x95\xd1\x32\xeb\x8d\xb6\xe6\xaf\x7a\x04\x4e\x89\xc5\xde\x4f\x5a\xc3\x9d\xe2\x64\xaa\xdd\x1c\x46\x85\xf2\x55\x1a\x4f\x18\x9c\x5c\xe9\x1e\x58\x2c\x91\x0e\x37\xf0\x38\x7e\xc6\xf6\xce\x9b\xce\x7b\x59\x46\x46\xc5\x6d\xcc\x62\xf3\x56\xd8\xb2\x7a\x05\xed\x43\x5d\x19\xf1\x59\xd5\x07\x94\x7f\xff\x91\x03\xce\xb1\x63\x5d\xc2\x57\xcd\xbe\xae\xa1\xdd\x3d\x11\x43\x5c\x63\x85\x45\x96\xaa\xbb\xf3\x97\x1f\x39\x78\x2f\xbd\x73\xa2\x8b\x43\x53\x47\xf3\xdd\x75\x15\xd7\x6e\xfa\x67\xbb\x6d\xe0\xe4\x96\x97\x8b\x15\xec\xb0\x70\x56\x4e\xa2\xaf\x75\x6a\x79\xcf\xc9\x52\x96\xb0\xd2\x81\xef\x33\xa3\x32\xf0\x12\x73\xbf\x85\x69\x71\xf4\x85\x24\xa1\x7e\x2c\x67\xaf\x6d\x6a\x74\x98\xcc\x73\x6b\x54\xc0\x27\xa6\x9c\x3d\xe7\x6b\x3b\x1e\xcb\x6e\x2d\x54\xf8\xde\x54\xbb\xef\x54\x5f\x62\xf6\xc8\x9f\x8b\xab\xd6\xca\x93\x7c\xa6\x49\x5c\xe4\x49\x01\xda\xca\x00\x79\x92\x8f\x9e\x24\x5a\x62\x9f\x30\x4d\x32\x58\xc3\x58\xf9\x75\xea\xa9\x60\x4d\x37\x59\xb3\x62\x2d\xac\x2e\x1a\x44\x84\x86\x1c\x17\x1d\x2c\xb4\x9b\x3f\xc6\x7c\x4f\xb9\x72\xbc\xa6\x6b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xdf\x11\x09\x52\xc3\xe7\x68\x69\xbd\xa5\xb3\xfb\x9d\xd7\x59\xef\xcd\x7d\xfd\xe7\xb0\xef\xb6\x96\xb0\xcc\x35\x5d\x16\xfc\x4b\xdd\xf9\x70\xfb\x8d\x04\x5d\xd3\xeb\x6c\xeb\xd1\xbd\xc1\x67\x34\x5d\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xfe\xbe\xc0\x5f\x53\xf8\xb7\x70\x70\xc3\xed\xdd\x56\x7a\x3b\xbf\x50\x07\xbd\x2e\x1f\xc1\x5f\xea\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7f\xd2\xa2\x80\x9e\x9f\x75\xb4\xb4\xbe\x0b\x8b\x9d\x30\x96\x36\x51\xb7\x70\xbd\xd1\x95\x2d\x07\x39\xd3\x35\x5d\xd6\x7f\xa0\xb6\x8b\x07\x1e\x06\xcc\xbf\xf7\xb3\x6a\xa8\x2d\xba\x1f\x3f\x53\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\xab\x99\x56\x47\xbe\xd0\xd6\xd2\xba\xff\xe9\xc6\xf1\xaa\xba\x13\xda\xae\x1f\x9c\x7b\xb6\xe4\x4e\xb5\x8e\xa6\xcb\xfa\x43\xba\xb7\x4c\x70\xba\xdf\xfa\xf8\x6a\x65\x7b\x09\xa3\xd9\x6b\x82\xa6\xcb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x87\x9d\x4e\xf8\xe4\xfa\x38\x2d\xad\x5d\x46\x0b\xc7\xa9\xf7\x97\x8c\x33\x79\x67\xfd\xb7\xb3\x5a\x3c\xb4\x35\x5d\xd6\x6f\xe4\xf8\xf6\x9b\xb3\x9a\x8f\x6a\x85\xcb\xcb\xc2\x99\xb7\x1b\x26\x69\xba\x1c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xdf\x49\x9d\xed\xbc\x0b\x5a\x5a\xa5\xa6\x33\xcf\x9b\x56\xf8\x15\x59\x76\xbb\x79\x4e\x09\xd4\x99\x3f\xe1\x0f\xfc\xf3\xf7\x7b\x8f\x26\xd7\x24\x14\x1f\x31\xec\xae\x65\xbd\xb6\xae\x89\xf8\xfc\x2c\x65\xf1\x07\xae\x16\x00\x7e\x33\xd9\x15\xba\xcb\x7e\xd8\xb8\x4b\xeb\xfd\x73\xba\xff\x27\x00\x00\xff\xff\x31\x76\x74\x3e\xd5\xf6\x01\x00") - -func testImagesVolumeIscsiBlockTarGzBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeIscsiBlockTarGz, - "test/images/volume/iscsi/block.tar.gz", - ) -} - -func testImagesVolumeIscsiBlockTarGz() (*asset, error) { - bytes, err := testImagesVolumeIscsiBlockTarGzBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/iscsi/block.tar.gz", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeIscsiCreate_blockSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\xc1\x6f\xdb\x36\x18\xc5\xef\xfc\x2b\xde\xac\x1c\x12\x2c\x91\x6c\x03\xbb\x74\x70\x07\x27\xf1\x50\xa1\xb5\x03\x58\xea\xba\x9e\x56\x5a\xfa\x24\x11\xa1\x48\x8d\xfc\x64\xc7\x59\xf7\xbf\x0f\x94\x6c\xb4\x46\x0f\xd3\x51\x7c\x7c\xfc\xbd\xc7\x8f\xd1\x4f\x49\xef\x5d\xb2\x53\x26\x21\xb3\xc7\x4e\xfa\x46\x88\x08\x0f\xb6\x3b\x3a\x55\x37\x8c\xf9\x74\xf6\x0b\xf2\x86\xf0\xbe\xdf\x91\x33\xc4\xe4\xb1\xec\xb9\xb1\xce\xc7\x22\x12\x11\x3e\xa8\x82\x8c\xa7\x12\xbd\x29\xc9\x81\x1b\xc2\xb2\x93\x45\x43\xe7\x95\x5b\xfc\x41\xce\x2b\x6b\x30\x8f\xa7\xb8\x0e\x82\xc9\x69\x69\x72\xf3\xab\x88\x70\xb4\x3d\x5a\x79\x84\xb1\x8c\xde\x13\xb8\x51\x1e\x95\xd2\x04\x7a\x29\xa8\x63\x28\x83\xc2\xb6\x9d\x56\xd2\x14\x84\x83\xe2\x66\x38\xe6\x64\x12\x8b\x08\x9f\x4f\x16\x76\xc7\x52\x19\x48\x14\xb6\x3b\xc2\x56\xdf\xeb\x20\x79\x00\x0e\x5f\xc3\xdc\xbd\x49\x92\xc3\xe1\x10\xcb\x01\x36\xb6\xae\x4e\xf4\x28\xf4\xc9\x87\xf4\x61\xb5\xc9\x56\x77\xf3\x78\x3a\x6c\xf9\x68\x34\x79\x0f\x47\x7f\xf7\xca\x51\x89\xdd\x11\xb2\xeb\xb4\x2a\xe4\x4e\x13\xb4\x3c\xc0\x3a\xc8\xda\x11\x95\x60\x1b\x78\x0f\x4e\xb1\x32\xf5\x2d\xbc\xad\xf8\x20\x1d\x89\x08\xa5\xf2\xec\xd4\xae\xe7\x8b\xb2\xce\x74\xca\x5f\x08\xac\x81\x34\x98\x2c\x33\xa4\xd9\x04\xf7\xcb\x2c\xcd\x6e\x45\x84\x4f\x69\xfe\xee\xe9\x63\x8e\x4f\xcb\xed\x76\xb9\xc9\xd3\x55\x86\xa7\x2d\x1e\x9e\x36\x8f\x69\x9e\x3e\x6d\x32\x3c\xfd\x8e\xe5\xe6\x33\xde\xa7\x9b\xc7\x5b\x90\xe2\x86\x1c\xe8\xa5\x73\x81\xdf\x3a\xa8\x50\x23\x95\xa1\xb3\x8c\xe8\x02\xa0\xb2\x23\x90\xef\xa8\x50\x95\x2a\xa0\xa5\xa9\x7b\x59\x13\x6a\xbb\x27\x67\x94\xa9\xd1\x91\x6b\x95\x0f\x97\xe9\x21\x4d\x29\x22\x68\xd5\x2a\x96\x3c\xfc\xf9\x21\x54\x1c\x66\x69\xf5\xa2\x38\xc4\x09\xff\x2b\xe5\x3c\x83\x9c\xb3\x2e\x16\x9e\x18\x77\x24\xc4\x7a\x93\x3f\xa6\xdb\xc5\x97\xf6\x99\xa9\xed\x70\x57\x7e\x11\xa2\xd0\x24\x4d\xdf\x5d\xdf\x88\x7f\x44\xb8\xb0\x08\x6b\xf9\x4c\xf0\xbd\x23\x1c\x08\x8e\xb8\x77\xa3\xe5\x38\xa6\x14\x0e\x29\x6c\x49\x83\x7a\xbb\xca\x17\x57\xbf\x9d\x36\x66\x4a\x93\x61\x7d\x84\xa3\xd6\xee\x09\xb4\x27\x77\xe4\x26\xc4\x91\xa6\x84\xaa\x8d\x75\x34\x32\xf9\x61\x4b\xe0\xfa\x79\x34\x1a\x1e\x46\xdf\xda\xde\x30\xae\x46\x4e\xcc\xdf\x26\x25\xed\x13\xd3\x6b\xfd\x4d\xe3\xda\x52\xb9\xff\x93\x60\xa7\x6d\xf1\xfc\xc3\xea\xc0\x7e\xb5\x5d\xe5\xe2\x5f\x21\xd8\xc9\x0e\xa7\xf4\xc8\x57\xdb\x35\x56\x7f\xa6\xf9\xf0\x26\x1d\x49\x26\xcc\xe6\xd3\xf5\x3d\x4a\xda\xab\xf3\x5b\xa0\x17\x9e\x8b\x08\xd7\x7b\xab\xfb\x96\xfe\x52\x16\x4c\x9e\x3d\x4c\x18\x47\xc9\xd0\x24\x3d\x63\x36\x9d\xae\xef\x6f\x44\x59\x42\x55\x8b\x01\xe0\x95\x9c\x85\xad\x16\x23\x95\x27\x7a\x5e\xcc\xe6\x53\x14\x21\xed\x62\x86\x9d\x5f\xcc\xd6\xa2\x7d\xae\x7c\x1c\x4e\x18\xe1\x03\xc8\x32\x78\x98\x92\x5e\xe2\x86\x5b\x3d\x0c\x3c\x8b\xb1\xa3\x3b\x0b\x6d\x6d\x77\x0a\x7a\xaa\x43\x50\xd1\x58\x4c\xde\x91\xd6\x16\x95\xb3\x2d\x54\xf6\x90\xa5\x13\xbc\x3d\x2b\x92\x6f\x76\xe2\xb2\x6d\x21\xce\xb5\xc5\x2c\x5d\x5c\xbf\x7e\xdf\x1e\xbe\x7e\xc5\x1b\xc1\xd2\xa1\xa8\x5e\x2f\x55\x23\xec\x7f\x01\x00\x00\xff\xff\xc9\xa1\xfc\x59\xde\x04\x00\x00") - -func testImagesVolumeIscsiCreate_blockShBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeIscsiCreate_blockSh, - "test/images/volume/iscsi/create_block.sh", - ) -} - -func testImagesVolumeIscsiCreate_blockSh() (*asset, error) { - bytes, err := testImagesVolumeIscsiCreate_blockShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/iscsi/create_block.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeIscsiInitiatornameIscsi = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xf2\xcc\xcb\x2c\xc9\x4c\x2c\xc9\x2f\xf2\x4b\xcc\x4d\xb5\xcd\x2c\xcc\xd3\x33\xb4\xb4\x34\xd1\x35\x30\xd5\x4b\xce\xcf\xd5\x2b\x4a\x4d\xc9\x48\x2c\xb1\x4a\x4d\x32\xb5\x4c\x4b\x4a\x35\x4a\x36\x49\x36\xe5\x02\x04\x00\x00\xff\xff\x87\x5e\x2f\x31\x32\x00\x00\x00") - -func testImagesVolumeIscsiInitiatornameIscsiBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeIscsiInitiatornameIscsi, - "test/images/volume/iscsi/initiatorname.iscsi", - ) -} - -func testImagesVolumeIscsiInitiatornameIscsi() (*asset, error) { - bytes, err := testImagesVolumeIscsiInitiatornameIscsiBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/iscsi/initiatorname.iscsi", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeIscsiRun_iscsidSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x93\x4f\x8f\xdb\x36\x10\xc5\xef\xfc\x14\xaf\xd6\x25\x01\xd6\xd6\x76\x81\x00\x45\x83\x1e\xdc\xcd\x16\x15\x92\xda\xc0\xca\x69\x90\x23\x25\x8d\xa4\x69\x28\x92\x1d\x92\xd6\x1a\x45\xbf\x7b\xa1\x3f\x9b\xd6\xdd\x53\x7c\x32\xe6\xbd\x79\xfc\xf1\x11\xca\xbe\xcb\x53\x90\xbc\x62\x9b\x93\x3d\xa3\xd2\xa1\x57\x2a\xc3\xbd\xf3\x17\xe1\xae\x8f\xb8\xbb\xfd\xfe\x0d\x4e\x3d\xe1\x7d\xaa\x48\x2c\x45\x0a\xd8\xa7\xd8\x3b\x09\x3b\x95\xa9\x0c\x1f\xb8\x26\x1b\xa8\x41\xb2\x0d\x09\x62\x4f\xd8\x7b\x5d\xf7\xf4\xac\xdc\xe0\x77\x92\xc0\xce\xe2\x6e\x77\x8b\x57\x93\x61\xb3\x4a\x9b\xd7\x6f\x55\x86\x8b\x4b\x18\xf4\x05\xd6\x45\xa4\x40\x88\x3d\x07\xb4\x6c\x08\xf4\x54\x93\x8f\x60\x8b\xda\x0d\xde\xb0\xb6\x35\x61\xe4\xd8\xcf\xc7\xac\x21\x3b\x95\xe1\xf3\x1a\xe1\xaa\xa8\xd9\x42\xa3\x76\xfe\x02\xd7\xfe\xd7\x07\x1d\x67\xe0\xe9\xd7\xc7\xe8\x7f\xcc\xf3\x71\x1c\x77\x7a\x86\xdd\x39\xe9\x72\xb3\x18\x43\xfe\xa1\xb8\x7f\x38\x94\x0f\xdb\xbb\xdd\xed\xbc\xf2\xd1\x1a\x0a\x01\x42\x7f\x26\x16\x6a\x50\x5d\xa0\xbd\x37\x5c\xeb\xca\x10\x8c\x1e\xe1\x04\xba\x13\xa2\x06\xd1\x4d\xbc\xa3\x70\x64\xdb\xdd\x20\xb8\x36\x8e\x5a\x48\x65\x68\x38\x44\xe1\x2a\xc5\xab\xb2\x9e\xe9\x38\x5c\x19\x9c\x85\xb6\xd8\xec\x4b\x14\xe5\x06\x3f\xef\xcb\xa2\xbc\x51\x19\x3e\x15\xa7\x5f\x8f\x1f\x4f\xf8\xb4\x7f\x7c\xdc\x1f\x4e\xc5\x43\x89\xe3\x23\xee\x8f\x87\x77\xc5\xa9\x38\x1e\x4a\x1c\x7f\xc1\xfe\xf0\x19\xef\x8b\xc3\xbb\x1b\x10\xc7\x9e\x04\xf4\xe4\x65\xe2\x77\x02\x9e\x6a\xa4\x66\xea\xac\x24\xba\x02\x68\xdd\x02\x14\x3c\xd5\xdc\x72\x0d\xa3\x6d\x97\x74\x47\xe8\xdc\x99\xc4\xb2\xed\xe0\x49\x06\x0e\xd3\x63\x06\x68\xdb\xa8\x0c\x86\x07\x8e\x3a\xce\x93\x17\x97\xda\x29\xd5\x26\x5b\x4f\x2a\x42\xd4\x12\x5f\xbd\x56\x7f\xa9\xe9\x01\x32\x44\x2d\x1d\xc5\xda\x30\xec\x54\x5b\x53\xa5\x30\x2b\xc3\x97\x86\x05\xb9\x24\x9b\x7f\x9d\x4d\x7f\xb6\x8d\xa6\xc1\x59\x60\xbb\x0d\x97\x10\x69\x50\x6b\x50\x6d\x48\x0b\xb4\xbd\xc0\x0b\x9d\xd9\xa5\x80\xda\xd9\x96\xbb\x24\x33\xd7\x6c\xfb\xf7\xb4\xd9\xbe\x18\x16\x9f\x0c\x3f\x9d\x24\xd1\x73\x9c\x50\x88\x4e\xe8\x3a\x03\xad\xb8\x01\x41\x9f\x69\x19\xef\xfe\x08\x2f\x82\xd7\xc5\xc5\xf0\x9c\x36\xe8\x27\x1e\xd2\x00\xe3\x3a\x18\x3a\x93\x99\xe7\x1c\xea\xc0\x0d\xb6\x2d\xb6\x0d\x7e\x58\xbc\x54\xf7\x0e\x9b\x55\x99\xcb\xa2\x66\xa3\xfe\xbe\x6a\xd0\xf9\xaf\x05\x2e\xf6\x32\x3a\xef\xa7\x87\x59\xf6\x36\xb3\xf4\x85\x8d\xd1\xc6\xac\xb3\x6f\xba\xfe\xff\x20\x9c\xf7\xb4\x86\xd2\x13\x47\xdc\x4e\x3c\x2a\x8a\xf6\xb3\x88\xd3\xc3\xe3\x6f\x6a\x66\x55\x6a\xec\xa7\x2f\x36\x4a\xa2\xb7\x68\xdc\xbc\x13\x0c\x91\xc7\x1b\xd5\x38\x4b\xea\x9f\x00\x00\x00\xff\xff\xbf\x34\x05\x68\x6a\x04\x00\x00") - -func testImagesVolumeIscsiRun_iscsidShBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeIscsiRun_iscsidSh, - "test/images/volume/iscsi/run_iscsid.sh", - ) -} - -func testImagesVolumeIscsiRun_iscsidSh() (*asset, error) { - bytes, err := testImagesVolumeIscsiRun_iscsidShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/iscsi/run_iscsid.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeIscsiSaveconfigJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x96\xdf\x4f\xe3\x38\x10\xc7\xdf\xfb\x57\x58\x7e\xa6\x25\x4d\xd3\xb4\xf4\x8d\x83\x5b\x2d\x12\x2c\x2b\x8e\xd3\xdd\x69\x85\xac\xa9\x33\x09\x3e\x12\x3b\xd8\x63\x7e\xdc\x8a\xfb\xdb\x4f\x4e\x0a\x2d\x69\xc2\xa1\x4a\x95\xea\xef\x67\xc6\xe3\xf1\xcc\xb8\x3f\x47\x8c\xf1\x1c\xd6\x56\x49\x51\x99\xcc\x97\xe8\xf8\x8a\xfd\xb8\x39\x08\xeb\x8e\x8c\x85\x02\x85\x59\xff\x8d\x92\x1a\x61\xc4\x18\x63\x3f\x9b\x6f\xc6\x38\x10\x59\xb5\xf6\xd4\x18\xbd\xae\x32\xc6\xd7\xa5\x91\x77\xc2\xa9\x7f\x90\xaf\xd8\x7c\x1a\x1f\x6c\x25\xac\x7c\x09\x84\x62\x56\x4b\xbe\x62\xd3\x1e\x45\xc2\xe3\x80\x92\xd5\x86\xaf\x58\xd4\xa3\xe4\x1e\x84\x45\xc8\x3e\x90\x1f\xad\x22\x1c\x70\x5c\x99\x0c\x4b\x01\xa5\x02\x37\x40\x58\x74\x24\x2c\x1a\x3b\xb4\x05\x0d\x9a\x52\xed\x87\x6c\xea\x47\x37\x20\x79\x10\x4a\x53\x29\xef\x84\x24\x5b\x0e\x40\xcd\x91\x84\x04\x79\xbb\x77\x30\x9d\x1b\x2b\x51\xd4\x56\x28\xa7\xb2\x6e\x68\x6f\x22\xd4\x54\x77\xbd\x2b\x27\xb4\xd1\xd6\x50\x67\xbd\x82\x27\xe1\x75\x05\xb5\x68\xaf\x37\x43\x27\x85\x34\x5e\x53\xc7\xfb\x16\x2c\xd7\xf0\x46\x2c\xa7\x47\x71\x07\x6a\xe3\x77\x50\xa1\x28\x51\xf3\x15\x4b\xa2\xa3\x74\x87\x31\x35\xa9\x0a\x4a\xe1\x50\x92\xb1\xcd\x21\xd2\xd9\x32\xd9\x21\x6a\x25\x6a\x6b\x48\xe4\xc6\x56\xd0\x0d\xf8\x55\xa4\xe7\x1a\x3b\xd2\xbd\x47\x8f\x22\xc3\x9a\x6e\x83\xd7\x78\xb9\xa3\xb5\xa1\x17\x16\xb4\x2f\xc1\x2a\x7a\xee\x1c\x6f\x4f\x0f\x85\x53\xe8\x0a\x9b\x63\x46\x1b\xf0\xe5\xd5\x82\x67\xf8\xc0\x57\x9b\x9e\xe0\x6f\xab\x1a\x2a\xec\x59\xae\x4b\x5f\xa8\x90\x0a\x9e\xab\x12\x95\xd9\x2a\x9b\x6e\x9a\xc6\xe9\x72\xb1\x48\xb7\x79\xe2\x6d\x16\xd7\x20\xef\xf8\x8a\x91\xf5\xb8\x55\x1e\x1b\x4f\xf3\x78\x2a\xe7\x0b\x80\xf1\x51\x76\xb4\x1e\x27\x38\xcf\xc6\xb0\x9e\xc2\x78\x1e\x2f\x92\xe5\x22\x3f\x8a\x61\x36\xe3\x8d\xcd\xcb\x88\xb1\xb6\xf5\x09\x6c\x81\x7d\x2d\xdf\xce\x8a\xe0\x56\x39\xe9\xd4\x36\x3e\xaa\x8b\x2d\xbe\x6b\xc2\x3e\x98\x14\xad\xe6\xe9\x16\x35\x29\x09\xa4\x8c\x7e\x7f\x53\x0d\xd0\x54\xb8\xc8\x9e\x35\x54\x4a\x0a\x90\x65\xa7\x9e\x37\x69\xce\xc1\x97\x24\x64\x95\x39\xfd\x76\xb5\x69\x32\x80\x61\xb7\xab\x36\x6a\x65\x9a\x69\x20\x32\xe5\xa4\x79\x40\xfb\xdc\xbb\xd5\x2b\xd5\xe6\x3e\x54\x19\x4a\xea\xf1\x57\xa0\x46\x1b\x5a\x55\x07\x7a\x20\xf2\xd2\x14\x4a\x0b\x52\x15\x1a\xdf\xf4\xd2\xbc\x03\x68\x24\x95\xef\x00\x71\x47\xaf\xad\xc9\x3e\x17\x0f\x4d\x23\x51\xab\x9d\x32\x65\xbb\xa5\xca\xda\xd1\x01\xeb\x12\x3b\xa5\xd4\xc6\xe9\xf5\xfb\x1b\x66\x9d\x5b\x6e\x28\xa5\x33\x7c\xda\xdf\x7a\xef\x39\x09\x25\x74\x18\xaa\x36\x2c\xa3\x3b\x6c\xeb\xfd\xb0\xed\x87\x77\xa6\x2f\x3b\xbf\x6e\xde\x45\xb4\x9b\xd5\x1f\xef\xa5\x1a\x2c\x54\x48\x68\x7b\x0a\xee\xd8\xd3\xed\x05\xd2\xad\x09\xc3\x9c\x9f\x7c\x3d\xfe\x7e\xf0\xcd\x68\xe4\x9d\x64\x9d\x02\xc1\xa9\x2a\xd0\x35\xb1\x9e\x5c\x9d\xcc\xe2\x93\x41\xf0\xfb\xe9\xef\x67\xfa\xd2\x66\x68\x03\xfc\x17\xba\x3e\xe8\x37\xbc\xf7\xa8\x25\xfe\x0f\xd9\x96\xe8\xb5\xaa\x30\xbe\x42\x82\x76\x1e\xc4\xd1\x47\xdc\x1f\xa0\x9a\x28\xe3\x2e\xf4\xab\xb5\xc6\x5e\x61\x5b\xcb\xe7\xf8\x80\xa1\xec\xf9\x9e\xaf\x2f\xca\x3a\xfa\xc5\x5b\x47\xe7\xa8\x8b\xa6\x75\x78\x3a\x9f\xcf\xd2\x2e\xf8\x15\x21\x43\xfb\xa9\xb4\x9c\x7d\xb9\x00\x7b\x77\xa6\xdb\xc0\xa2\x64\xf9\x6f\xf0\x38\xef\xc7\xda\x6c\x7c\x33\x7b\x6a\x55\x61\xa6\x80\x30\xe4\x6f\x20\x61\x67\x5a\x91\x82\xf2\x2a\xbe\x1e\x00\x2e\xe0\xa9\x73\xb6\x38\x8d\xa7\x49\xd2\xc3\x9d\x18\xad\x51\x86\x41\x14\x0a\x87\x4f\x7b\x90\x4b\x4f\x8e\x40\x67\x4a\x17\x9b\x2d\xfb\xa8\x2b\x94\x0f\xed\x9d\x17\xe1\x69\xd8\x6e\x1d\x1e\xc2\x1e\xfe\xcf\x4a\x51\x2f\xdf\x1f\xea\xe5\xe7\x92\x7b\xf9\x61\x72\xaf\x9b\x29\x7f\xbc\xf9\xdf\xc3\xcf\xcf\x2e\x59\xbb\xc4\x07\xc7\x43\x6d\x2c\x41\xf9\x99\x39\x50\x0b\xc8\x32\x8b\xae\x71\x1d\x4d\x9a\x0f\xdf\x1b\x0a\xca\x35\xc1\xe5\x50\x3a\xdc\x13\xc3\x66\x7c\xc5\x66\x71\x1a\x7d\x72\x22\x10\x14\x61\x82\x8e\xba\xe4\x4d\xf7\x51\x54\xf7\x7a\x12\x47\xd1\x6c\x1c\x4d\x27\xc6\x16\x93\x52\x69\xff\x34\x6e\xde\xb4\x49\x1e\x4f\x27\x4f\xcb\x34\x4d\x56\x4e\x4f\x92\x75\x04\x80\xf3\x65\x92\x2f\xe4\xce\x2b\x39\x7a\x19\xfd\x17\x00\x00\xff\xff\x0d\x5b\x70\x3c\x3c\x0b\x00\x00") - -func testImagesVolumeIscsiSaveconfigJsonBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeIscsiSaveconfigJson, - "test/images/volume/iscsi/saveconfig.json", - ) -} - -func testImagesVolumeIscsiSaveconfigJson() (*asset, error) { - bytes, err := testImagesVolumeIscsiSaveconfigJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/iscsi/saveconfig.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeNfsBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\x4e\xcd\x2b\xc9\x2f\xb6\x32\xe7\x4a\x2c\xca\x35\x33\xb1\x05\x93\x65\x16\xfa\x70\xe1\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x8d\x90\x00\x04\x00\x00\xff\xff\x98\xf1\x32\xbf\x3f\x00\x00\x00") - -func testImagesVolumeNfsBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeNfsBaseimage, - "test/images/volume/nfs/BASEIMAGE", - ) -} - -func testImagesVolumeNfsBaseimage() (*asset, error) { - bytes, err := testImagesVolumeNfsBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/nfs/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeNfsDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x5f\x6f\xdb\x36\x14\xc5\xdf\xf9\x29\x0e\x24\xa0\xd8\x00\x5b\xf2\x82\xa0\xd8\x9f\x27\xd5\x56\x57\xa1\xb1\x94\x49\x76\xbb\x60\x28\x02\x5a\xba\x96\x88\x52\x24\x4b\x52\x73\xfc\xed\x07\xca\x69\xbd\xb4\x7c\xe3\x3d\x87\xe7\xfe\xee\x65\x8c\xb5\x36\x67\x2b\xfa\xc1\xe3\x66\xf5\xcb\x6b\xec\x06\xc2\xfb\xe9\x40\x56\x91\x27\x87\x6c\xf2\x83\xb6\x2e\x61\x31\x8b\x71\x27\x5a\x52\x8e\x3a\x4c\xaa\x23\x0b\x3f\x10\x32\xc3\xdb\x81\xbe\x2a\x0b\x7c\x20\xeb\x84\x56\xb8\x49\x56\xf8\x29\x18\xa2\x67\x29\xfa\xf9\x0f\x16\xe3\xac\x27\x8c\xfc\x0c\xa5\x3d\x26\x47\xf0\x83\x70\x38\x0a\x49\xa0\xa7\x96\x8c\x87\x50\x68\xf5\x68\xa4\xe0\xaa\x25\x9c\x84\x1f\xe6\x36\xcf\x21\x09\x8b\xf1\xf0\x1c\xa1\x0f\x9e\x0b\x05\x8e\x56\x9b\x33\xf4\xf1\xff\x3e\x70\x3f\x03\x87\x33\x78\x6f\x7e\x4f\xd3\xd3\xe9\x94\xf0\x19\x36\xd1\xb6\x4f\xe5\xc5\xe8\xd2\xbb\x62\x9d\x97\x4d\xbe\xbc\x49\x56\xf3\x93\xbd\x92\xe4\x1c\x2c\x7d\x99\x84\xa5\x0e\x87\x33\xb8\x31\x52\xb4\xfc\x20\x09\x92\x9f\xa0\x2d\x78\x6f\x89\x3a\x78\x1d\x78\x4f\x56\x78\xa1\xfa\x05\x9c\x3e\xfa\x13\xb7\xc4\x62\x74\xc2\x79\x2b\x0e\x93\x7f\xb1\xac\xaf\x74\xc2\xbd\x30\x68\x05\xae\x10\x65\x0d\x8a\x26\xc2\x9b\xac\x29\x9a\x05\x8b\xf1\xb1\xd8\xbd\xab\xf6\x3b\x7c\xcc\xea\x3a\x2b\x77\x45\xde\xa0\xaa\xb1\xae\xca\x4d\xb1\x2b\xaa\xb2\x41\xf5\x16\x59\xf9\x80\xf7\x45\xb9\x59\x80\x84\x1f\xc8\x82\x9e\x8c\x0d\xfc\xda\x42\x84\x35\x52\x17\x76\xd6\x10\xbd\x00\x38\xea\x0b\x90\x33\xd4\x8a\xa3\x68\x21\xb9\xea\x27\xde\x13\x7a\xfd\x2f\x59\x25\x54\x0f\x43\x76\x14\x2e\x7c\xa6\x03\x57\x1d\x8b\x21\xc5\x28\x3c\xf7\x73\xe5\x87\xa1\x12\xc6\xde\xd6\xd5\x36\xe0\xe7\xc5\x36\xfb\x33\x67\x6c\x5d\x57\x4d\xf3\xf8\x66\x5f\xdc\x6d\x1e\xd7\xd5\xfd\x03\xbe\xd0\x38\x2d\xff\xca\xb7\xfb\xac\x5e\xbf\x5b\xba\x90\xd5\x22\x9d\x9c\x4d\x0f\x42\xa5\xac\xde\x97\x38\x4f\x23\x96\x67\x08\xe5\x3c\x97\xf2\x2a\x1a\x07\x75\x74\xcb\xc9\x0b\xe9\xf0\xea\xd5\xec\x6b\x25\x71\x05\x2e\xe5\xfc\x72\xfc\xdc\x09\x8b\xa5\x41\x4a\x4f\x46\x5b\xef\x58\xb6\xd9\xc0\x4e\xea\x51\x1d\x5d\xe2\x86\x4b\x96\xd4\x2d\x97\x97\x76\x41\x16\xaa\xa3\xa7\x64\xf0\xa3\x44\xea\x47\x93\x5e\xef\x73\x66\x3b\x8c\xba\xc3\xeb\xdb\xdb\x1f\x54\x16\x63\xe4\xf6\xf3\xb7\x66\xe0\x0e\x1c\xa3\x9e\x94\x87\xd1\x42\x79\xf6\xa1\xba\xdb\x6f\xf3\x2b\x4d\x1c\xfe\x46\x3b\xba\x98\x3a\xdc\xac\x56\xb7\xbf\xa6\xbe\x35\x61\xbb\x61\xb8\x50\xba\xfd\x2d\x54\x58\xfe\xf7\x7d\xd5\xe4\xdf\xee\x57\x2f\x63\x79\xb9\xab\x1f\xee\xab\xa2\xdc\xe1\x9f\xe8\xbb\x91\xae\xc3\x46\x9f\xd8\x7a\xbb\x09\x8e\xe7\xf6\xd1\x02\x51\x1a\x7d\x62\xff\x05\x00\x00\xff\xff\xc0\x89\x51\x69\xf0\x03\x00\x00") - -func testImagesVolumeNfsDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeNfsDockerfile, - "test/images/volume/nfs/Dockerfile", - ) -} - -func testImagesVolumeNfsDockerfile() (*asset, error) { - bytes, err := testImagesVolumeNfsDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/nfs/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeNfsVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xe0\x02\x04\x00\x00\xff\xff\xdf\xf4\x93\x64\x04\x00\x00\x00") - -func testImagesVolumeNfsVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeNfsVersion, - "test/images/volume/nfs/VERSION", - ) -} - -func testImagesVolumeNfsVersion() (*asset, error) { - bytes, err := testImagesVolumeNfsVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/nfs/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeNfsIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xf2\x48\xcd\xc9\xc9\x57\x48\x2b\xca\xcf\x55\xf0\x73\x0b\x56\xe4\x02\x04\x00\x00\xff\xff\x3a\x50\xf2\x93\x10\x00\x00\x00") - -func testImagesVolumeNfsIndexHtmlBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeNfsIndexHtml, - "test/images/volume/nfs/index.html", - ) -} - -func testImagesVolumeNfsIndexHtml() (*asset, error) { - bytes, err := testImagesVolumeNfsIndexHtmlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/nfs/index.html", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeNfsRun_nfsSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x55\x61\x6f\xdb\x36\x10\xfd\xae\x5f\xf1\x26\xeb\x43\x3c\xd8\x96\x92\xb6\x2b\x90\xa0\xdd\xbc\x36\xc9\x8c\x76\x76\x11\xb9\x2d\x8a\xa1\x28\x68\xf2\x24\x11\x95\x49\x96\xa4\xec\x18\x45\xff\xfb\x40\xda\x71\xec\xa4\xe5\x87\x44\xe2\x3b\x1e\xdf\x7b\x77\x3a\xf7\x7e\xcb\x3b\x67\xf3\x85\x54\x39\xa9\x15\x16\xcc\x35\x49\xd2\xc3\x2b\x6d\x36\x56\xd6\x8d\xc7\x59\x71\xfa\x0c\xf3\x86\xf0\xa6\x5b\x90\x55\xe4\xc9\x61\xdc\xf9\x46\x5b\x37\x4a\x7a\x49\x0f\x6f\x25\x27\xe5\x48\xa0\x53\x82\x2c\x7c\x43\x18\x1b\xc6\x1b\xba\x43\x06\xf8\x40\xd6\x49\xad\x70\x36\x2a\x70\x12\x02\xd2\x1d\x94\xf6\x2f\x92\x1e\x36\xba\xc3\x92\x6d\xa0\xb4\x47\xe7\x08\xbe\x91\x0e\x95\x6c\x09\x74\xcb\xc9\x78\x48\x05\xae\x97\xa6\x95\x4c\x71\xc2\x5a\xfa\x26\x5e\xb3\x4b\x32\x4a\x7a\xf8\xb4\x4b\xa1\x17\x9e\x49\x05\x06\xae\xcd\x06\xba\x3a\x8c\x03\xf3\x91\x70\x58\x8d\xf7\xe6\x3c\xcf\xd7\xeb\xf5\x88\x45\xb2\x23\x6d\xeb\xbc\xdd\x06\xba\xfc\xed\xe4\xd5\xe5\xb4\xbc\x1c\x9e\x8d\x8a\x78\xe4\xbd\x6a\xc9\x39\x58\xfa\xd6\x49\x4b\x02\x8b\x0d\x98\x31\xad\xe4\x6c\xd1\x12\x5a\xb6\x86\xb6\x60\xb5\x25\x12\xf0\x3a\xf0\x5d\x5b\xe9\xa5\xaa\x07\x70\xba\xf2\x6b\x66\x29\xe9\x41\x48\xe7\xad\x5c\x74\xfe\xc8\xac\x3b\x76\xd2\x1d\x05\x68\x05\xa6\x90\x8e\x4b\x4c\xca\x14\x7f\x8f\xcb\x49\x39\x48\x7a\xf8\x38\x99\xff\x33\x7b\x3f\xc7\xc7\xf1\xcd\xcd\x78\x3a\x9f\x5c\x96\x98\xdd\xe0\xd5\x6c\xfa\x7a\x32\x9f\xcc\xa6\x25\x66\x57\x18\x4f\x3f\xe1\xcd\x64\xfa\x7a\x00\x92\xbe\x21\x0b\xba\x35\x36\xf0\xd7\x16\x32\xd8\x48\x22\x78\x56\x12\x1d\x11\xa8\xf4\x96\x90\x33\xc4\x65\x25\x39\x5a\xa6\xea\x8e\xd5\x84\x5a\xaf\xc8\x2a\xa9\x6a\x18\xb2\x4b\xe9\x42\x31\x1d\x98\x12\x49\x0f\xad\x5c\x4a\xcf\x7c\xdc\x79\x24\x6a\x94\x24\x55\xa7\x78\x40\xe1\x3c\xb3\xfe\xa4\x9f\x7c\x4f\x92\x50\x81\x4e\x39\xf2\xa8\xa5\x88\x6f\x3d\x30\x1e\x4b\x9d\x0e\xaf\xc3\x66\x0a\x6d\xc2\xa9\x08\xae\x9b\xd0\x0b\x35\x79\x6d\xbc\x43\x7a\x7d\x1e\xd1\x0b\x08\x1d\xe1\xb0\x38\x73\x84\xec\xbb\x36\xfe\x07\xa4\xda\x6f\x87\x75\xdd\x0f\x09\x5f\x64\xdf\x67\xef\xe6\xe3\x9b\xeb\x1f\x17\x17\x7b\x98\x1c\xe3\xf1\x45\x68\x45\xf1\xc1\x35\xb2\xf2\xc8\x4e\x4e\xb2\xd9\xbb\xf9\x64\xfa\x1a\x43\x9c\xf6\xfb\xc9\x8e\xa3\xb1\x64\x98\x25\xe4\xe4\x79\x4e\xb7\x46\x5b\xef\x22\x14\xac\x93\xa1\xec\x69\xf6\x57\x7a\x44\xac\x87\xca\x49\xf1\xa2\x38\x87\x22\x12\x24\x62\xe8\xf4\xaa\x5c\x3d\xbd\x67\xc1\x1b\x8d\x34\x93\xf8\xfd\xc4\xae\x07\xdb\xf0\x81\x54\x8e\x78\x67\x69\xa0\xf4\x17\xab\xb5\xff\xe2\xbe\x75\xcc\x35\xfd\x14\x2f\x5f\x3e\xbe\x3f\x2c\x59\xe1\x3f\x0c\x57\x41\x2c\x3e\xe3\x22\x94\xe1\xd8\x08\xde\x2c\xb5\x40\xf1\xbc\x40\x26\x1f\x00\xb5\x35\xc8\xc2\xc1\x03\xa4\x92\x07\x22\x96\x7a\x45\x90\x4a\xd0\xed\xa8\xf1\xcb\x36\x34\x79\x43\x96\xf6\x11\x71\x80\x70\x83\xdc\x2f\x4d\x7e\x10\x97\xc9\x3c\x39\xbe\xff\x8f\xa7\x4f\xc3\xee\x7d\xcc\x03\x1f\x4a\xb2\xab\xd0\x69\x99\x4c\xef\x4b\xb3\xf3\x3f\xb6\x10\xac\xe1\x0b\xa9\x44\x10\x2c\x7d\xf8\x6c\xc2\xdc\x88\x10\x09\x6c\xc8\xc7\xe0\x38\xd5\x5c\x60\x65\x0d\x97\xaa\xd2\x38\x3d\x7b\x3e\x2a\x46\xc5\xe8\x14\x2f\x91\x0b\x5a\xe5\xaa\x6b\xdb\x0b\xb8\x17\xd9\x9f\xc9\xde\xbf\xcc\x61\xa8\x08\x05\x3e\x1f\x1b\xb8\xe3\x16\x2e\x09\xe4\x76\x14\xd2\x3b\xf8\xe8\xb6\x48\x6e\xb8\x4e\x76\x26\xc6\xff\x4b\xdd\x29\x8f\xa1\x87\xaa\x9c\xd8\xfe\xc9\x8d\xd5\x3c\xaf\x5c\x1e\xde\xee\x14\x0e\x3f\xe0\xc9\x39\x48\xc5\xb9\x12\xda\xe4\xc9\x63\x35\xa3\x98\x4c\x60\x38\xc5\x59\x3c\x90\x3c\x88\xd9\x76\x46\xe5\x30\xb4\x77\x69\xaf\x71\x5a\x84\xa2\x59\x12\x1d\x27\xd4\x96\x71\x82\x97\x4b\x0a\x9b\xa7\x05\x1c\x71\xad\x84\xdb\x4e\xe7\x56\xaf\xc9\x79\xb0\x36\x3c\x88\xfe\x4f\x18\x44\x01\xdb\xa4\xf7\x2c\x1e\x87\x39\xcf\x02\xcf\xa1\xd2\x43\xa5\xbd\xac\x36\xc9\xbd\x97\xd3\xab\xf2\xae\x68\x69\xf2\xe3\x68\x4e\x68\x13\xc7\xc4\xa1\xef\xda\x98\xe0\xfb\xf4\xaa\x4c\x1f\xaa\xdd\xf3\x29\x7e\x69\x03\xeb\x7e\x09\x55\xdb\x74\x5f\x65\xdb\x22\x3b\x81\x91\x42\x57\x38\x30\x79\xab\xbe\xdb\xd6\xef\xb8\x64\x7b\x7e\x3f\xf9\x20\xe9\x56\x7a\x14\x41\x57\xe2\x2d\x33\x51\x14\xe6\x97\x37\xff\x26\xc9\xb6\x89\xc3\xa0\x08\x3f\xb4\xef\xeb\x76\x83\x86\xf1\xaf\xa1\x10\x42\x87\x5e\x6e\x82\x52\xa6\x04\xd6\x4c\xfa\x38\x2f\xca\xc9\x75\x3c\xbb\x1d\x84\xde\x76\xb4\x9f\x31\xae\x25\x32\x78\x96\xc4\xcf\xe4\xff\x00\x00\x00\xff\xff\x80\x3c\xc9\x1b\xcd\x07\x00\x00") - -func testImagesVolumeNfsRun_nfsShBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeNfsRun_nfsSh, - "test/images/volume/nfs/run_nfs.sh", - ) -} - -func testImagesVolumeNfsRun_nfsSh() (*asset, error) { - bytes, err := testImagesVolumeNfsRun_nfsShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/nfs/run_nfs.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeRbdBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\x4b\x4d\xc9\x2f\x4a\xb4\x32\x32\xe3\x4a\x2c\xca\x35\x33\xb1\x05\x93\x65\x16\xfa\x08\xf1\x82\x82\x64\x33\x93\x9c\x54\x5b\x28\x8d\x24\x03\x08\x00\x00\xff\xff\xf9\x78\x70\xe0\x42\x00\x00\x00") - -func testImagesVolumeRbdBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeRbdBaseimage, - "test/images/volume/rbd/BASEIMAGE", - ) -} - -func testImagesVolumeRbdBaseimage() (*asset, error) { - bytes, err := testImagesVolumeRbdBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/rbd/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeRbdDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x92\x5f\x8f\x9b\x38\x14\xc5\xdf\xfd\x29\x8e\x06\xa9\xda\x95\x12\x98\x9d\x87\xee\xbf\x97\x65\x12\xda\x41\x9d\x09\xb3\x90\x6c\x77\x9e\x2a\x63\x6e\xc0\x1a\xb0\x5d\xdb\x34\xa5\x9f\x7e\x65\x42\xa4\x66\x9b\x87\x58\x3e\xf7\xd8\xf7\x77\x8f\x89\xb0\xd1\x66\xb2\xb2\xed\x3c\xee\x6e\x7f\x79\x8b\x7d\x47\xf8\x30\xd6\x64\x15\x79\x72\x48\x47\xdf\x69\xeb\x62\x16\xb1\x08\x8f\x52\x90\x72\xd4\x60\x54\x0d\x59\xf8\x8e\x90\x1a\x2e\x3a\xba\x54\x56\xf8\x87\xac\x93\x5a\xe1\x2e\xbe\xc5\x4f\xc1\x70\xb3\x94\x6e\x7e\xfe\x93\x45\x98\xf4\x88\x81\x4f\x50\xda\x63\x74\x04\xdf\x49\x87\xa3\xec\x09\xf4\x55\x90\xf1\x90\x0a\x42\x0f\xa6\x97\x5c\x09\xc2\x49\xfa\x6e\x6e\xb3\x5c\x12\xb3\x08\x2f\xcb\x15\xba\xf6\x5c\x2a\x70\x08\x6d\x26\xe8\xe3\xf7\x3e\x70\x3f\x03\x87\x5f\xe7\xbd\xf9\x23\x49\x4e\xa7\x53\xcc\x67\xd8\x58\xdb\x36\xe9\xcf\x46\x97\x3c\xe6\x9b\x6c\x57\x65\xeb\xbb\xf8\x76\x3e\x72\x50\x3d\x39\x07\x4b\x9f\x47\x69\xa9\x41\x3d\x81\x1b\xd3\x4b\xc1\xeb\x9e\xd0\xf3\x13\xb4\x05\x6f\x2d\x51\x03\xaf\x03\xef\xc9\x4a\x2f\x55\xbb\x82\xd3\x47\x7f\xe2\x96\x58\x84\x46\x3a\x6f\x65\x3d\xfa\xab\xb0\x2e\x74\xd2\x5d\x19\xb4\x02\x57\xb8\x49\x2b\xe4\xd5\x0d\xee\xd3\x2a\xaf\x56\x2c\xc2\xc7\x7c\xff\x50\x1c\xf6\xf8\x98\x96\x65\xba\xdb\xe7\x59\x85\xa2\xc4\xa6\xd8\x6d\xf3\x7d\x5e\xec\x2a\x14\xef\x90\xee\x5e\xf0\x21\xdf\x6d\x57\x20\xe9\x3b\xb2\xa0\xaf\xc6\x06\x7e\x6d\x21\x43\x8c\xd4\x84\xcc\x2a\xa2\x2b\x80\xa3\x3e\x03\x39\x43\x42\x1e\xa5\x40\xcf\x55\x3b\xf2\x96\xd0\xea\x2f\x64\x95\x54\x2d\x0c\xd9\x41\xba\xf0\x98\x0e\x5c\x35\x2c\x42\x2f\x07\xe9\xb9\x9f\x95\x1f\x86\x8a\x19\x8b\xb0\xc9\x9e\x1f\xc0\xfb\x3e\xc4\xa2\x55\x08\xe2\x9e\xbb\xf3\x84\x72\x08\xd7\xd7\x13\x4a\x29\xb8\x6d\x34\x4a\x2d\x3a\xbe\x82\x3d\x6f\xff\x12\xdc\xf3\x7e\x72\x3e\x56\xe4\x63\xf5\x8d\xb1\x77\x65\xf1\x14\xc2\xc8\xf2\xa7\xf4\x7d\xc6\xd8\xa6\x2c\xaa\xea\xd3\xfd\x21\x7f\xdc\x7e\xda\x14\xcf\x2f\xf8\x4c\xc3\xb8\xfe\x3b\x7b\x3a\xa4\xe5\xe6\x61\xed\x02\x99\x40\x32\x3a\x9b\xd4\x52\x25\x6c\x69\x8e\x67\x2e\x5e\x79\x4b\x8e\x95\x87\x1d\xa6\x71\x80\x54\xce\x07\xc6\xf5\x84\x53\x4b\x1e\xce\x5b\x2e\x08\xc6\x0d\xd2\x09\x18\xab\x85\x71\x6b\xd5\x42\x90\xe9\xe6\xbf\xf5\x31\x7c\xaa\x6f\xde\xcc\xa7\x45\x4f\x5c\x85\x19\x43\x83\xf7\xe4\x61\xb4\xf5\x2e\xe4\xae\x1d\x35\x2c\xfb\xf7\xb9\xa8\x32\xbc\xfd\xf5\xb7\xdf\x19\x4b\xb7\x5b\xc4\x49\xad\xb5\x0f\x3d\x4c\xec\x3a\x5c\xed\x16\xc3\xa0\xd5\x5c\x3a\xaf\x17\xb1\x71\x67\x71\x5e\x17\x51\xbb\x66\x16\xcf\xeb\x22\x06\xc4\x58\x68\x75\x9c\x4b\xdf\xef\x16\xc3\x2b\x4d\x36\xbc\x68\xf2\x85\xdb\xa4\x97\xf5\xec\x09\xdd\x2e\x95\x0b\x68\xaf\xc5\x6b\xec\xb9\x8d\xdb\x6f\x48\x18\xdb\x3c\x6d\xff\xc7\xfb\x5f\x00\x00\x00\xff\xff\x45\x66\x33\x75\x2e\x04\x00\x00") - -func testImagesVolumeRbdDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeRbdDockerfile, - "test/images/volume/rbd/Dockerfile", - ) -} - -func testImagesVolumeRbdDockerfile() (*asset, error) { - bytes, err := testImagesVolumeRbdDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/rbd/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeRbdVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\xd0\x33\xe4\x02\x04\x00\x00\xff\xff\x29\x99\x65\xe4\x06\x00\x00\x00") - -func testImagesVolumeRbdVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeRbdVersion, - "test/images/volume/rbd/VERSION", - ) -} - -func testImagesVolumeRbdVersion() (*asset, error) { - bytes, err := testImagesVolumeRbdVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/rbd/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeRbdBlockTarGz = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\xdd\x79\x54\xd3\x57\xda\x07\xf0\x20\xd6\x68\x6d\xc5\x2e\x0e\x75\x5c\x42\x5b\x15\x2d\xa3\xb6\x15\x0c\x6b\xa2\x32\x55\xc1\x91\xb4\x58\x57\x96\x48\xad\x52\x16\x09\x0a\xb2\x84\x25\xa8\xed\xd8\xd1\xb1\x52\x22\xa2\x22\xc4\x56\x30\x65\x50\xa8\xa2\x2c\x09\x24\xa8\x43\x11\x65\xd1\x04\x45\x0c\x10\xea\x06\x91\x4d\x20\x10\x48\x48\xf2\x9e\xe9\x79\xbd\xbf\xf7\x3d\xe7\x9d\x73\xe6\x3d\x67\x66\xd2\x69\xbf\x9f\x3f\x9f\x5f\x9e\xe7\x3e\xf7\xe6\xde\xfb\xfb\x87\x13\x18\x87\x26\xd2\xe4\x43\x9a\xcd\x34\xeb\x6e\x55\xc2\x98\x4e\xe7\x5f\xdd\xdf\xd7\xa7\x93\xee\x38\xe1\x35\x69\xc1\x05\x5d\xda\xab\x4e\x4d\xe1\x4b\x37\x4c\x7a\x73\xc1\x82\x15\x2f\x26\xf4\x5d\x2f\x8d\x09\x08\x6f\x0a\x7d\x7d\xe5\x5b\xb3\x72\xa3\x77\x77\x7a\x1c\xfd\x78\x4a\x56\x74\xe4\x49\xcf\xc7\x89\x07\x3b\xc7\x02\x7f\x7f\x34\xda\x2e\xb8\x6b\xf4\xb7\x5d\x4b\x9b\x73\xaf\x7d\xf2\x38\x49\xde\x37\x5c\x5a\xa0\xee\xd2\x8f\xc9\xa4\xc9\x72\x55\x72\x83\xba\x40\x50\xf0\x9a\xae\xdb\x4d\xc3\xca\xe4\x9c\x6f\xdd\x55\x7b\x7b\x15\x77\x24\xca\xbf\xbb\x63\xdb\x11\x96\x7e\x1b\x8f\x11\xdf\xf8\x75\x75\xdb\xb3\xef\xb6\xf1\xe2\x6a\x2f\x54\x47\xc4\x30\xca\x0c\xc7\xdf\xe6\x5d\x0a\x91\xb2\xab\x18\x4d\x5f\xd4\xbb\x46\x99\x27\x05\x5f\x2a\x76\xd9\xa6\x96\x19\x45\xdd\x46\x53\x51\x07\xcd\xac\x6e\x61\x57\x6c\x0f\x8b\x6a\xbc\xc3\xcc\xb4\xaf\x08\x0d\x1b\xec\x2d\x62\x66\x9e\x3f\xc4\xe6\x31\x7a\x3e\xa2\xf3\x96\x36\x08\x1a\x54\x7d\x5b\x76\xee\x5c\x54\xda\xfe\x55\xdf\x7d\xc9\x33\xe3\x53\x59\x67\xc0\x62\x7e\xeb\x34\x85\x8b\xe6\x87\x10\xb7\x9e\x1c\x7a\x40\xff\xf9\x58\xa9\x3a\x93\xd7\x24\x1a\xbc\x97\x51\xae\xd7\xd2\xfd\x1f\xee\x34\xf7\x5f\x2b\xbd\x62\x52\xf6\xf9\xcd\xda\xf5\xe8\xfc\x11\x97\xa1\x79\x25\x92\xfe\x9d\x7d\xb1\xf7\xcd\x8f\x8a\x9a\xf5\x9f\xda\x70\xc7\xce\x31\xfd\x87\x1e\x37\xc8\xaa\xd2\xb3\xf9\x8f\xc5\xfe\xa6\x20\xa6\xa0\x36\xe0\x69\x96\x8d\xf1\x5e\xd1\x21\xc1\x6c\x73\xe6\x14\xad\xd5\xac\x81\xbc\x91\xba\x76\x79\x88\x3d\xf7\xb4\x54\xb1\x5c\x63\xdd\x94\x78\xef\x8a\x2a\x33\x80\x61\x1e\x7b\xe6\xce\xa1\xe7\x7a\x16\xac\x57\xbf\xc0\x32\x8d\xde\xad\xbb\xd8\x7f\x49\x38\xc5\xa3\xfb\x35\x51\xdf\xa9\x54\xae\x17\x3d\x2b\x32\xa5\x49\x24\x6c\x12\x67\x45\x4d\x79\xa6\x8f\x1a\x74\xd0\x9c\x8e\xb2\x79\xa6\x1f\x1c\xd0\x5f\x8a\x6a\xb3\x0a\x14\x24\x27\xcf\x9d\x15\x6d\xb2\x0a\x14\x09\x8a\x95\x3e\x92\xbf\x36\x31\x64\xe9\x0d\x02\x07\x91\xf9\xae\x15\xcb\x5c\xce\xea\x69\xe9\x4e\xe3\xca\xef\x0c\xba\xf7\x68\xad\xdd\xd9\xf6\x0d\xca\x7a\x17\x7a\x1c\x6b\xc0\xbd\xe7\xcf\xd6\xee\xec\xc5\x0d\xca\xfa\x78\x7a\x1c\x6b\xd0\xbd\x27\xc7\xa1\x3b\xf1\x41\xd4\xdd\x62\xa5\x2f\xe7\xed\x3a\x09\x5b\x63\x5e\xb1\xb7\xc1\x4e\xba\xe5\x69\x48\xce\xe6\x12\xe3\xb5\x77\xa6\x84\xe6\x89\xbf\xde\xd1\x3a\x6c\x93\x5f\xea\xbf\xc6\xe3\xb0\x63\x57\xb1\x60\x53\xd5\x95\x85\x43\x8e\x8a\x73\x2a\x53\xd0\x34\xd1\x9d\x9f\xd2\x7a\x18\x1b\x76\x8d\x1e\xe3\xff\x36\xe4\xee\x4e\xf3\xf7\x07\x3d\x49\x76\xc1\x2d\xf2\xf8\x33\x92\x3d\xcd\xef\xf9\x63\x96\x34\x37\x7b\xe5\xc9\x3d\x2a\xf6\xb9\x07\xde\x54\x49\xe5\xf3\x9c\xfe\x32\x12\xdc\x18\xf1\xbc\x8d\x91\x72\x32\x4e\xfe\xa5\x46\xe5\xea\xa2\x08\xc3\x81\xf5\xfe\x97\x49\xa1\x50\xaa\x90\x9a\x0c\x3e\x44\x72\x16\x7f\x46\x0a\x5d\x25\xc1\x30\x52\x28\xf1\x23\xd2\xa6\x13\x69\xb3\x80\x9a\xe4\xa6\xe7\x8f\x3f\x08\x7b\x5e\xc7\xb9\x9c\x8c\x7d\x88\x4a\x69\x25\x93\x98\x4b\x1a\x6a\x0a\x21\x63\x2b\xa8\x86\x48\xa1\xd2\x08\x32\x76\x46\x09\x99\x59\x21\xa9\xae\x27\x85\xb8\xb7\x49\xf5\x74\x12\x5c\x45\x26\xd1\x72\xfa\x79\xce\x27\xb1\xa4\xe4\xd7\xe4\x83\xcc\x70\xd2\xfa\x5f\x48\xf1\x4e\xd2\xd0\x8c\xcb\xcf\xeb\xcc\x24\xdf\xc4\xae\x70\x52\xe7\x30\x99\x63\x84\x82\x3c\xa6\xb6\xc6\x46\x92\x9d\xb8\x87\x04\x9b\xa8\xd6\x2e\x91\x11\xc3\xa8\x42\x77\x49\xa1\x41\xd2\x86\x1f\xf5\x9d\x04\x90\x42\x0b\xa9\x1c\xea\x3b\xe9\x22\x39\x85\x3c\xb2\x96\x6b\x49\x0e\x93\x1a\xbc\x98\x0c\x3e\x83\x14\x92\xe5\x91\x60\x0c\x59\x22\x75\x0b\xa9\x6e\x20\xd5\x79\xd4\xd7\x77\x97\x04\xdd\xa8\xea\x17\x48\x21\x15\x39\x00\xbd\x8d\xa4\x50\x07\xc9\x91\x52\x53\x4b\x20\x6d\x06\x50\x1d\x9d\x21\x85\xdc\x48\xb0\x97\x5a\x23\x1d\x29\x94\x40\x0a\xcd\x24\x7b\xfd\x36\x49\xf1\x21\x5b\xdd\x99\x6a\x2d\x87\x24\x0b\xa9\x0f\x92\x89\x39\x53\xe7\x28\x9b\x2c\x86\x8e\x5c\x01\xce\xe7\xc9\xe3\x36\xea\x31\xc9\xbe\x47\xed\x17\x3e\x99\x57\x1b\x19\x30\x89\x4a\xd9\x49\xbe\x27\x2e\xf9\xe0\x74\xf2\x38\xb8\xf8\xf9\xb4\xba\xc9\x17\xea\x9c\x4f\x86\xa6\x2e\x27\x19\x75\x7f\x74\x93\x61\x0c\xe4\xec\xb8\x93\x73\xf0\x20\x81\xca\x29\x21\xc1\xbd\x64\x44\x1b\x32\xc5\xb8\x48\xd2\x90\x0b\xf5\x98\x4c\x31\x8e\xba\xc6\x74\x64\xa7\xbb\x9f\x23\x25\x0d\x64\x51\x67\xb7\x91\x33\xfa\x25\xe9\x8d\x41\xbe\x92\xb8\x4f\x49\x21\x1b\x32\xdd\xb1\x0f\xa9\x20\x99\xc5\xd8\x6a\x12\x3c\x42\x7d\x92\x5c\x44\x55\x67\xc8\xd4\x92\xa9\x9b\xe8\x36\xe9\x9d\x4d\xdd\x15\x42\x12\x3c\x42\x6d\xe5\x3c\xd2\x9c\x88\xba\x63\x4f\x50\x41\xf2\x55\x8d\x94\x91\x60\x35\xe9\xc3\xbd\x80\x0c\xd9\x4f\xaa\x73\xa8\x3b\x96\x7a\x29\x90\x36\x76\x51\xd7\xdc\x6b\x64\xb5\xb2\xc9\x39\xe9\x7f\x44\x52\xb8\x54\x9d\x2a\x12\x14\x93\x3d\x3f\xe6\x4b\x0a\xad\x23\x85\x92\xcb\x48\x43\x1b\xa9\x85\xa1\xb6\x75\x08\xd5\x25\xd9\x5b\x71\x2b\x49\xa1\x25\x54\x21\x6a\xaf\x37\x51\x41\xea\x68\x32\xa9\x20\xb5\x35\x37\x93\xea\x72\xea\x05\xe0\x46\x05\x55\x24\x98\x40\x82\x0d\x64\xd9\xe3\x7c\x48\x1f\x51\xd4\xca\x34\x91\x9c\x31\xb2\x08\x83\x64\x6a\x81\xe4\x0d\xdb\x4f\xbd\xcf\x6c\xc9\xd6\x2c\x2f\x25\xbd\xe9\x48\x49\x13\x75\x2e\x6c\x48\x30\x90\xdc\xe6\xfd\xd4\xcb\x29\x83\x2a\x44\xed\xad\x69\xa4\xf5\x42\xf2\x26\x89\x5b\x4f\x5a\xcf\xa7\x4a\x52\x6f\xf2\xfb\xa4\x64\x13\x29\x39\x46\xbd\x6b\xbb\x48\x4e\x1b\x35\x9f\x6a\x32\x0e\x8f\x1a\x67\x1d\xc9\x11\x51\x1b\x21\x84\x0a\x52\xd5\xe3\x49\x90\x4b\x7d\x72\x3b\x15\x24\x9f\xac\xa5\x96\x95\x5a\x22\x09\x99\x6e\x1d\xd5\x06\x75\x6a\x32\x49\x4e\x09\x39\x0b\xe5\xd4\x8e\xe1\x51\xf3\xa1\xae\x81\xaf\x48\x8e\x9c\xbc\xf3\x47\xa8\xd7\x4b\x2c\x75\xb8\x3d\x49\x97\xd4\x5d\x67\xa2\xee\x70\x11\x15\xa4\x76\x3b\x97\x04\xdb\xa8\xad\x97\x4d\xaa\x0b\xc8\x39\x8e\xe3\x91\xea\x06\x2a\x87\xbc\x3f\xfa\xf7\x92\x1c\xea\x62\x4a\xfc\x8e\x8c\x73\x8d\x2c\x07\x83\x2c\x47\xe9\xf3\x0d\xf5\xbb\x87\xcf\xa2\x57\xb8\x32\xb3\xb8\x7f\xab\x59\x7c\xd1\x7c\xbe\x5b\xe0\x60\x50\xbb\xca\xff\x56\x23\x3c\xd8\xac\x6a\x36\xc7\x0c\xcb\x93\x92\x7f\xca\x69\xf7\x75\xed\xf6\x35\x99\x64\xaa\xca\xed\x1d\xfb\x1c\x02\xee\x32\xae\x88\x55\xb9\xc6\xaf\xe8\x22\x97\x45\x5b\xaa\x06\xd5\x83\xc3\xd2\xc0\x46\x71\xd4\xe1\xbe\xf2\xf8\xe4\x7b\x7b\xbc\xe4\xe6\xfa\x1d\x86\x6d\x7d\xeb\x04\x2b\xe3\x0a\xd9\xf3\x9f\x2d\x88\xac\xf7\x1c\xb8\xd6\x1b\x20\x65\xf5\x77\xf1\xc2\x8a\x92\x3a\x73\x0d\xb1\x7d\xf7\x4d\x0d\xea\x03\x37\xef\xc6\x0f\x19\x83\x75\x73\x93\xcc\xcd\x6d\xfe\xc6\x4f\xfa\x74\xb2\x44\x73\xbc\x40\xbf\x4c\xbf\x55\xff\xa1\x3e\x52\xbf\x5a\xb2\xb5\xeb\x6a\xac\x3a\x3c\xb7\xe7\xd2\xa0\x7a\xa4\xcf\xf4\x28\xd1\x78\x87\x71\x65\x91\xa6\x8b\xd7\xf4\xe4\xdb\x12\x45\x81\xf5\xd8\x64\xd3\xe4\x02\xc3\x80\xf0\x08\xfb\x7a\xd3\x5b\xb4\x5f\x15\xb3\x4d\xb8\xd8\x93\xe9\xa7\x5a\x35\x66\x50\xa9\x54\xab\x1e\x95\xae\x68\x93\xdd\x78\x92\xda\xe3\x61\xa8\x6f\x11\x18\xd7\xe9\xb2\x2e\xeb\x1e\xf1\x8b\x9b\xcb\x93\x3b\x52\xcf\x2b\x87\xb3\x13\x6f\x34\xaf\x6a\x09\x33\x6b\x12\x16\x29\x6d\x66\x95\x1e\x0d\xed\xb0\x55\x9b\xa5\xb1\x2c\x89\x60\xeb\x2b\xd2\x45\x5d\x36\xb4\xd2\xda\x7b\xec\x73\x37\x4d\x41\x01\xc3\x36\x5d\x17\x05\x9b\x32\x8c\xd7\x24\xdd\x8c\xbb\xdb\xcd\xdf\x2f\x32\x1c\xd8\xd3\xfc\xd3\x23\x2f\x95\x5f\x66\x5d\xfd\x93\x33\xea\x71\x53\xbc\x33\xd6\xd0\xc5\x0d\xde\x19\x9c\x03\xe1\x8b\xf4\x6e\xe3\x32\xeb\xa6\x29\x83\xc5\x0e\xb9\x0d\x5e\xa2\xcc\x82\x53\x2c\xde\x3a\xc1\xc6\xcf\x8a\xca\x42\x25\x5b\xf4\x63\xd1\x43\xda\x17\x34\x93\x95\x4e\x0a\xdb\xdc\xb0\xb3\x61\xb9\xd7\x7c\xd7\x1c\x10\x2f\xf6\x69\xf2\xe1\xa6\x15\x08\x65\x8e\x49\x9b\x25\x11\xfa\x81\xe8\x8a\x68\xa3\x76\x9a\xc6\x61\x9d\xf1\xce\xe7\x33\x72\x5a\x35\xd7\xa3\xaf\x45\x7f\xec\xea\xda\x3a\x7f\x96\xf0\xab\xb5\x4c\x1f\xa6\x57\x75\x6e\xa1\x37\x37\x4b\x36\xaf\xd5\x31\x69\xa7\x64\xb3\x24\x5e\xf2\x81\x5e\x12\x7d\x33\x3a\x3f\xba\x4b\x3b\xa4\x59\xaa\x99\xa1\xd8\xa9\x64\x9e\xe5\x79\x97\xac\x51\x9f\x8a\x10\xc9\xe6\x26\x85\x49\x3c\x25\xdb\xf4\xc5\xd1\xe2\xe8\x8e\xe8\x0c\x6d\x8f\xa6\x40\xe3\xa6\x88\x3d\x2b\xcd\x95\x8a\x13\x72\x1e\xae\xe3\xd8\xe7\xbc\xa6\xf4\xd2\x3c\x8a\xf6\x76\x75\x6a\x5d\xd2\xea\x90\x75\xac\x37\xab\x57\xf8\xb4\x70\x4b\x56\xf6\xf0\xd9\x24\x8d\x4c\x93\xac\xf9\x73\xf4\x8e\xfb\xa2\x7a\x6f\x75\xba\xcc\x2d\x2b\xab\x57\x34\x3b\x55\x66\x9f\xc4\xe3\x6f\xe5\x7f\xc8\x8f\x74\xb5\xf7\x98\xe3\xe1\x98\xc4\xe5\x6f\xd2\x9b\xb4\xcf\xb4\x5f\x6a\xad\x35\x5f\x6b\xe8\x4a\x9b\x5c\x86\x0f\x3b\x2d\xd9\xd1\xb8\x89\xff\xb1\xbe\x5f\xdb\xa9\x7d\x4d\x63\xaf\xdc\xa6\xe0\xe4\x8a\x7c\xd8\xc2\xe4\xa5\x46\x7f\x7e\x38\xdf\x9f\x9f\xc8\x5f\xa1\x1f\x75\x54\x94\x69\xfe\xa4\xf1\xd2\xd4\x68\x6c\x15\x8b\xcf\x8a\x73\xb8\xde\x9c\xb5\xf2\x53\xc9\x73\x8d\xa1\xfc\x2d\x7c\x3e\x7f\x25\x7f\x87\xfe\xb2\xb6\x4b\xc3\x54\xf0\xce\xaa\xbd\x1b\xbc\xe5\x59\xc9\xf6\xc6\x08\x7d\x85\xb6\x5b\x7b\x4a\xdb\xa2\x2d\xd7\x8e\x45\x07\xf2\x97\xf3\x83\xf8\x1f\xf1\x77\xe9\x8d\x5a\xba\xc6\x46\xb9\x46\xb1\x46\x79\x53\x71\x53\xe9\xa0\x70\x50\xe6\x2b\xf2\x95\x61\x8a\x30\x65\x97\x82\x91\xdb\x24\x66\xe6\xb0\x7d\x78\x7f\xe0\x79\x0b\xd2\x4c\x8e\xc6\xcd\xfa\x41\xad\xad\x66\xb1\x92\x9b\x7b\xa2\x9e\x23\xc8\x6a\x3b\xd5\x96\x66\x9a\x57\xe1\x54\xb1\xd0\xb8\x93\x9f\xc0\x5f\xa5\x97\x6a\x75\x9a\x2c\x0d\x43\x21\x55\xb0\xcf\x0a\xbc\xcd\xa7\x4c\x73\x2b\xdc\x2a\xec\x8d\x61\x7c\x1e\x9f\xcb\xff\x9f\xa7\xd2\x6e\xe7\x45\xc3\xf9\xf3\xfc\x6d\x86\x59\x7e\x0c\x0f\x26\xaf\xbc\xcf\x33\xec\x29\xa3\xa3\xfd\x66\x45\x9e\xcc\xc3\xbf\xb4\x8e\x9f\xfc\x64\x41\x82\x8f\x2a\xe1\x6e\xb3\xb9\xbf\x35\xc5\xec\x59\x7f\x3f\x41\x21\xab\x10\x67\x17\xeb\x8e\x0a\x8f\xb0\xbb\x4a\x93\xec\xdb\x0c\x47\x85\xc3\x0c\xc1\x0f\xbb\x82\x7b\x5a\xa3\xae\xfe\x49\xdc\x5d\xb3\xb8\x97\xdd\x5b\xdb\x9a\x31\x54\x3d\xd1\xd2\x07\x0b\x2c\x21\x71\x47\x59\xdd\x82\x84\xe1\xee\x30\x71\xf6\x85\x3e\x6d\xcc\x01\xbf\x96\x81\xd4\x9b\xfa\x6b\x56\x96\xee\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xef\x32\x1d\xce\xd2\x6f\x3c\xfc\xd6\xc1\x33\x34\xf7\x22\xa6\xe7\xad\xdf\x8f\x5f\x3e\xf5\xaf\xec\xf8\x09\x33\xdc\xce\x54\xa4\x7f\x31\xf1\x37\x99\xf4\xef\xbf\x5f\x37\xf9\xc4\x8a\x84\x19\x0e\x99\x39\x53\xfb\x5f\x08\x7f\xbd\xe5\xea\x8a\xa9\x97\x2e\x72\x3e\x7c\xdd\x21\x3f\xfa\x2a\xff\xea\xfc\xf0\xd5\x05\x53\xf7\x2d\xba\xae\x5b\x78\xe0\xc7\xb6\x25\xec\xe3\x93\xdd\xac\x2d\x3d\x25\x00\xcb\xa1\xef\x61\x8e\xb6\x2c\xb5\xf5\x71\xaa\x53\xea\x76\x16\x25\x89\x43\xee\x37\x9b\xc6\x52\x57\x1d\xba\x36\x30\x34\x5c\x32\x63\xed\x92\xac\x40\x03\xab\x85\x79\x8e\x2e\xef\x38\x96\xc6\xca\x3f\x54\xf6\x55\x5a\x5a\x0b\x7b\xf8\xf1\x93\x1e\xce\xc6\xea\xc2\xec\x72\x63\x64\x57\x9b\xa6\x50\xa0\x71\xec\x11\xdd\x60\x2e\x66\x65\x27\xea\x06\x6e\xf4\x77\xd8\x67\xcf\x8a\x8f\x1c\xed\x1f\xca\xca\xcc\x10\xec\x29\xea\x18\x09\xb6\x19\x1f\xb5\x61\x80\x1e\xb0\x5a\xf2\xa8\xfa\xc4\x81\x43\x67\x76\x04\xc5\xca\xd3\x58\x9a\xb4\x33\xc1\xb1\xb2\x71\x52\x43\x8c\x53\x5f\x9c\x6f\xda\xe3\xa8\x04\xc3\xc5\x63\x59\x39\x7e\xf9\xb5\xba\x13\x1c\x6f\xee\x09\xf5\x75\x1f\xc5\xce\x8f\x9f\xd8\x9f\xe0\xdc\xc8\x79\x5f\x9e\x9e\x95\xa3\xfa\x4b\x6d\x07\xd3\xdb\xfb\x62\xdf\x98\x77\xe6\x60\x89\x8b\xc0\xcf\x45\xf0\x44\x78\x51\x62\x4e\x74\xf3\x11\x1d\xdd\x95\xdb\xa7\xb4\xcf\x2d\xd4\x76\x69\x84\x17\x03\x35\xf6\x1a\xe1\xfb\x79\xda\x4c\x8d\x30\xed\x77\xe9\x15\x1e\x96\x5e\x64\xcb\xaa\x3d\x39\xfb\x46\x6e\x3c\x9b\x55\x69\x35\xb3\xf7\x10\xdd\x2c\x8c\x97\x1f\xb6\x74\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x7f\x7a\x26\xcc\x72\xfd\xce\x8a\x46\x0b\xb2\x9b\x67\x65\x0e\xbd\x62\xb5\xf8\xd5\xd5\x9f\x4d\x6b\x09\xc6\x9f\x35\xc0\xaf\x4c\x44\xcd\x86\xf0\x0e\xab\x97\x9e\x32\x6c\x58\xcd\x81\x6f\x5b\xba\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7f\xba\x2a\x1f\x63\xd1\x86\x97\xab\x82\x68\xac\x32\xf1\x37\x9f\x39\xec\xb3\x9b\xf8\x40\x94\x3c\xc1\x96\x99\x2f\x15\xee\x9f\x38\xa5\x84\x51\x79\x65\xed\xac\x39\xfb\x7b\x17\xf9\x2c\xea\xb1\x7b\x60\x1b\xf9\xd1\xb3\x29\x53\xf6\x9d\x16\x26\x1c\xfa\xd6\xd9\x65\xcf\x6b\x05\xbc\x3f\x5d\x5d\xb8\x73\xfc\x02\xfe\x07\xd9\xf6\xe5\x9f\x9f\x62\xb2\xaf\xef\x9d\x63\xe9\x09\x01\xfc\xbf\x99\x8f\xab\x6a\xaa\xcf\x9e\x72\xfb\xe8\xc6\xc3\x92\xb5\xcd\xb2\xf5\xde\x4b\x54\xa2\x9e\xc1\xad\x17\xe4\x89\x65\xc6\xc7\x5b\x16\x28\x35\xe9\x85\xc6\x24\xe3\x9e\xbe\x8e\x16\x5f\x45\xfa\x96\xfa\x0e\x77\xef\xd0\xdd\xba\xeb\xe2\x2e\x26\xdb\x7f\xb6\x3c\x4e\xab\x6f\x3d\xec\x66\xcf\x36\x7f\xd3\xea\x28\x7f\x87\xeb\x91\x20\x18\xab\x1b\x5c\xb3\x4a\x34\x3b\x61\x77\x67\x5b\xd5\x81\x8d\xb1\x11\x81\xa6\xdb\x75\xbd\x0f\x0b\x3d\xa6\xd6\x6e\xae\x9b\x2c\x49\xbd\x54\x53\xb2\x4e\x67\xbb\x6a\xfb\x4f\xbf\x73\x10\x22\xbc\x26\x8e\x35\x8d\x93\x1a\x76\x38\xa9\xe3\x7c\x85\x8f\x97\x24\x18\x24\xc7\xd2\x73\x02\x66\x1c\xef\x7b\x5f\xd4\x18\xb1\x35\xf9\x6d\x07\x2f\xe9\x7b\xef\xb2\x6b\x12\x7d\xed\xad\x07\xfd\x36\x7b\xdd\x3f\xbf\x77\x74\xe6\x99\x9c\x79\x86\xfa\x42\xc7\x66\x81\xd0\xc8\xb4\x36\x34\x24\xfa\x6e\xd4\x89\x78\x3f\x68\x84\xae\xb3\x3b\xa5\x5a\xaf\x9e\x09\xfa\x21\xad\x57\x00\xa3\xd3\x5e\x23\x74\x9d\xde\xc9\x54\xda\x3b\x6d\xfe\x4b\x42\x82\xa5\x57\xd9\xb2\x8e\x3b\x79\xa4\x4e\x1e\x4c\x4e\x4c\x51\x47\x7e\xcf\x9e\x3d\xc6\x79\x62\x74\x1a\x67\xe9\x9e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x5f\xaa\x32\x36\xe6\xe9\xe9\x09\x34\xda\xe7\x7b\x8f\x8f\x1f\xcb\x7f\x81\x5e\xbe\xda\xee\x9b\xf5\x91\xa2\x97\x2d\xdd\x17\xc0\x3f\xa4\x74\xae\xdf\x85\x2c\xfa\xbb\xdf\x09\xdc\x47\x3e\x4d\xc0\x6f\xf9\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x5d\xaf\xbb\x0d\x35\x6c\x71\x7a\xfd\x80\xd5\xc8\xa3\xec\x3f\x7e\x7b\x7e\xe2\x3e\xbb\x2f\x05\xfa\xe9\xfe\x2d\xe7\x7a\x7d\xa6\xbc\xe5\xdc\x92\x4c\xa3\x33\xf7\xa4\xbe\x24\x91\x3a\x97\x5d\xda\xff\x25\xb7\xf2\x83\x2b\x6e\xce\x13\xf7\xf9\xf4\x2e\x3c\xf8\xe0\x51\xe3\xda\x52\xd9\xdc\x17\x4b\x2e\xbd\x92\xd3\x39\x2d\x3e\xfb\xd9\xab\xbb\xdb\xc6\xec\xe8\x69\x96\x9e\x10\xfc\x7a\x8c\x6d\x8b\xb0\x67\x64\xee\xee\xfd\xfd\x82\x23\xea\xa5\xdb\x0d\x1b\x16\xd4\x85\x0b\x8a\x1b\xf6\x57\x99\x06\x1e\x0f\x67\x84\xe5\xfe\x41\xbc\x51\x36\xac\x1b\x6a\xaa\x10\x45\xad\xf1\xda\x78\x7f\x37\xab\xe3\x23\x5f\xa1\x74\x15\x2b\x40\x3e\xfa\xe3\xc0\x48\xd5\x99\xa6\xbe\x88\x16\x97\xd1\x51\x9b\x9e\xb3\xa3\xeb\x47\x9f\x36\x1b\x1e\xf2\xb2\xb9\xae\x7a\xed\x3d\xa1\xa7\x6e\x11\xab\x5c\x12\x35\x38\x70\x24\x22\x86\x21\xe8\xd9\xbb\xb5\x3e\x34\xf0\xd6\x17\x39\x6b\x65\x59\x12\xb9\xf3\x3b\x93\xa5\x86\x74\xad\x57\xe6\x4c\x56\xc5\xa0\xed\xbd\x56\x66\xfe\xe8\x0f\xc2\x93\xbf\x13\x35\xab\x9a\x2e\x9f\x9b\xd3\x73\xbf\x32\x31\x63\x34\x27\xc6\x7a\x70\xc6\x66\xaf\xfb\x87\xf7\x8e\x7a\x3d\x11\xba\x4e\x3f\xae\xbe\xe1\xad\x88\x78\xb9\xb6\xe3\x8d\xb9\x4e\xcd\xb1\xc9\xb9\x35\xa6\xcc\x6e\xf9\xf4\x7b\x82\x27\x42\x89\xc4\x9c\xb8\xc4\x47\xd4\xd8\xbf\x4c\x9d\xcb\x09\x65\xde\x2a\x14\x73\x9e\xea\x97\xb1\xbd\x44\x8d\x35\xcb\xe4\x27\x58\x79\x35\xbe\xad\xaa\x5f\xf7\xbf\x37\xa9\x3c\xa7\xd9\xeb\x7f\x5c\xf7\xd0\x7a\xec\x8f\xfb\x8d\xfd\xed\x82\xf7\xfb\x0a\x5f\xb1\x74\x4f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x1f\x42\x56\xb4\x8e\xee\x44\xa3\xd9\xbd\xf4\xd7\x39\xed\xdc\x85\xce\xed\x1f\x8c\x9b\x74\x7e\x9f\x21\xdc\xd2\x6d\xc1\x2f\x5b\xe5\xc2\xe6\x83\x3d\xee\x29\xcb\x8d\x0f\xaf\xd8\xab\xc2\xc6\x5b\xba\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x5f\xbe\xd3\xf7\xf2\x04\x77\xe6\x7f\xeb\xfc\x62\x65\xec\xf0\x8e\x4d\x8e\xaf\x2c\x9f\x3a\xee\x81\xc8\x7d\xff\xe1\xac\xdb\x6d\x37\x56\x8c\x3f\x54\x67\xbd\xe9\x5e\xde\x17\xe1\xdf\x54\x1c\x4e\x5f\xeb\xfb\xe5\xc8\xb8\xa5\x2f\x46\x04\xbd\x39\x71\x4b\xb3\xfd\xfc\x57\x1c\xf2\xa3\xaf\xf2\xaf\xce\x0f\x5f\xbd\x32\xf5\xb4\xc3\x40\xd2\xb5\xa0\xe3\x09\x4f\xe8\x51\x41\x3b\x2c\x3d\x23\xf8\xd9\x33\xbd\x17\x9b\xc6\x59\xeb\x22\xf7\xbf\x21\x8c\x5d\xdb\x5c\x16\xe0\xbd\x44\x25\xea\x1a\x88\xbc\x17\x20\xbb\x3f\xba\xbb\xe2\xa8\x46\xfb\xb4\xa9\x57\xd6\x2b\x19\x8c\x8a\x78\x6f\x7a\x46\x50\x59\xea\xa0\x5d\x5e\x4d\xc5\x36\x15\x33\x22\xa9\xfc\x7d\xfe\xe8\x48\x9d\x21\x33\x96\x93\x64\xf2\x94\x86\x24\xaf\x97\x25\x9b\x7e\x7c\xa4\xb2\xcd\x38\xc2\x76\xeb\xd7\x5e\x37\xae\x39\x52\xd0\xd3\x56\xae\x3d\x93\xd9\x5a\xcd\x4d\xb0\x3b\x5e\x74\xd2\x36\xfa\xcd\x10\x21\x4f\xcc\x78\x89\xbe\x3d\x88\x27\x4f\x63\x85\x08\xcf\x04\xc7\x98\xc7\x25\x18\x76\x38\xa9\xe3\x7c\x85\xb9\x45\x06\x83\xe4\x58\x7a\x4e\x40\xd7\x09\x46\x30\x2b\xef\x61\xf6\xe8\xe1\x73\x73\x7a\x56\x36\x8c\xcd\x19\xf4\xca\xd2\xd6\xf2\xb6\xcf\x0d\x29\xe1\x3f\x89\x7a\x29\xed\xe4\x4c\x67\xb9\xe2\x53\xf3\xda\x61\xb5\xb6\x9b\x3d\xe8\x15\xe0\x11\x27\x9b\x9e\xcb\x79\xfa\x9d\x98\x21\xe6\x3c\x2d\x15\x73\x39\xa2\xc6\xa1\xec\xe4\x34\x56\x9e\x30\x3b\x79\x49\x92\xaf\xb0\x4a\x22\xa7\x5b\x7a\x99\x2d\x2a\x65\xb3\xd2\xb3\xcc\xb9\xaf\x9a\x3e\xf2\xf2\x01\xc3\xc3\x2b\xe6\x4f\xdb\xb8\x6f\x5b\xba\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xb5\x49\x0c\x16\x4f\x09\xa5\xd1\x96\xbd\xf1\xa5\x57\xa5\x7c\x4b\x64\xe5\xa1\xf1\xaf\x6e\x79\x41\xd7\x6c\xe9\xb6\xe0\x67\x29\xc5\xef\xe2\x34\x55\x3c\x6d\xbf\xbe\x7a\x3f\xa7\xb8\x69\xa2\xa5\xdb\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7f\xd8\xb2\x0b\xeb\xcc\xe7\xd6\x7b\xee\x7a\x23\x85\xd3\x1b\x32\xff\xf2\xb4\xe5\x53\xc7\xf7\x73\xd8\xfb\x0f\x65\xde\x69\xad\x59\x3e\xfe\x80\xca\xa6\xbd\xfd\xec\x94\xb4\xe5\xb1\xb6\xf6\x19\x31\x53\xfb\x27\x97\xce\x8f\xa3\xd3\x97\xdf\xaa\x69\xfd\x76\xbe\x8f\x4f\xeb\xe7\x5d\x7e\xdf\x46\xae\x99\xb1\xfc\x60\xe0\xd7\x1d\x93\x16\xbf\xd9\x51\x67\xb3\xdb\x6e\x92\xa5\x67\x04\xff\x22\x95\xec\x27\x1b\x06\x2e\x2c\x08\x3e\x92\x31\xd0\xb9\x76\x5d\x31\xef\x98\xa2\x76\x38\x58\xdf\xc2\xed\x5e\xcc\x0d\x17\x94\x6d\xb9\x11\xcd\x1f\x0d\x13\x70\x05\xad\x06\x97\x92\x53\xd1\xdb\xf3\x4e\xdd\x8c\x3f\xda\xf8\xa8\xfe\x47\x4e\x53\x44\x62\xa9\x63\xb2\xe9\xd9\x1d\x55\x57\x09\x27\xf1\xbf\x7f\xe9\x20\x51\xdf\x7b\xaf\x2b\xd8\xf6\x88\xbb\x8b\x3e\x4e\xd3\xfb\x05\x7d\x63\x4c\x44\xe0\xe8\xed\xba\xde\x87\x85\x1e\x53\x6b\x37\xd7\x4d\x96\xa4\x5e\xaa\x29\x11\xea\x7e\xb3\x6a\x7b\x50\xac\xfc\x24\x2b\x44\xe8\x29\x8e\x31\x8d\x93\x1a\x76\x2c\x54\xc7\xf9\x0a\xd3\x95\x09\x06\x49\x76\x7a\x4e\x00\xe3\x78\xdf\xfb\xa2\xc6\x88\xad\xc9\x4b\x1c\xbc\xa4\x2e\xef\xb2\x6b\x12\x7d\xed\xad\x07\xfd\x36\x7b\xdd\x3f\xbf\x77\x74\xe6\x99\x9c\x79\x86\xfa\xc2\xa5\xcd\x02\xa1\x91\x69\x6d\x68\x48\xf4\x6d\x1a\x16\xf1\x7e\xd0\x08\x5d\x67\x77\x4a\xb5\x5e\x3d\x13\xf4\x87\xb5\x5e\xad\x6f\x74\xda\x6b\x84\xae\xd3\x3b\xd5\x62\x4e\xe8\x45\x7f\xdd\xb0\xa5\x97\xd9\xb2\xde\x0d\xe3\xdb\x75\x74\x18\x47\x68\xf2\x1f\xb7\x0a\xdc\x47\x44\xb5\x06\xfc\xc3\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x4f\x95\xd2\xd7\xdd\xb8\xfc\x65\x1a\x6d\xa2\xf5\x7b\x93\x46\x36\x4e\x9e\x12\xf7\xf5\xb2\x15\xf9\xed\xac\x19\x96\xee\x0b\xfe\x99\x22\xd7\x14\x7f\xe2\x66\xb3\xf5\x43\x73\xdc\xb3\x9a\xe1\xdf\x5a\x59\xba\x1d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xf7\x9b\x1f\xf3\xf4\xf4\x04\x1a\xed\xf3\xbd\xc7\xc7\x8f\xe5\xbf\x40\x2f\x5f\x6d\xf7\xcd\xfa\x48\xd1\xcb\x96\x6e\x0b\xfe\xb7\xf6\x63\xe1\x55\x31\xb3\x2b\x4f\x9b\xfa\xdb\x85\x3d\x4e\xe3\x2c\xdd\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xa7\x79\xdd\x6d\xcf\x87\xd6\x34\xda\xd5\x65\x7f\x18\x67\xba\xb3\xcf\x3a\x70\x4e\xea\xad\x77\x4a\x1b\x26\x58\xba\xad\x5f\x9e\xca\x85\xcd\x07\x7b\xdc\x53\x96\x1b\x1f\x5e\xb1\x57\xe1\x67\xea\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xdf\xeb\x60\x96\xeb\x77\x56\x34\x5a\x90\xdd\x3c\x2b\x73\xe8\x15\xab\xc5\xaf\xae\xfe\x6c\x5a\x4b\xb0\xb5\xa5\xdb\xfa\x39\x4a\xf1\xbb\x38\x4d\x15\x4f\xdb\xaf\xaf\xde\xcf\x29\x6e\x9a\x68\xe9\x76\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\x71\x55\x3e\xb3\x1a\x69\xb4\x94\x77\xa7\x0a\x53\x04\x97\xdb\x53\x6c\x27\xcd\xb9\xf4\x62\x6f\xd1\x2f\xf5\x5f\xd4\x97\x7c\xea\x50\x3c\x48\x9b\x30\x74\x84\x2e\x0a\x2f\x7c\xc5\xd2\xdd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x9b\xa4\x84\x8a\xbe\xf2\xa6\xa5\x04\xbd\xf1\xa2\xf7\xf1\xc7\x2e\xea\x99\xda\x42\xc7\x2f\xdc\xac\x6d\xc6\xfd\x7c\xff\x40\xe0\xfa\x80\xb7\xd8\x4d\xd0\xc5\xba\x95\x67\x68\x8f\x3f\x6b\x7b\x60\xa6\x92\x87\x1f\xeb\x07\xf8\x35\xda\x9a\x61\xe3\x3a\x33\xa0\x8a\xf6\x46\x2a\xfd\xbf\x02\x00\x00\xff\xff\x0b\x13\x25\x27\xf1\xf6\x01\x00") - -func testImagesVolumeRbdBlockTarGzBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeRbdBlockTarGz, - "test/images/volume/rbd/block.tar.gz", - ) -} - -func testImagesVolumeRbdBlockTarGz() (*asset, error) { - bytes, err := testImagesVolumeRbdBlockTarGzBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/rbd/block.tar.gz", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeRbdBootstrapSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x55\x4d\x8f\xdb\x36\x10\xbd\xeb\x57\xbc\xb5\x0f\x49\x00\x5b\xf2\x6e\xd3\xb4\x4d\x80\x02\xde\x8f\x22\x46\x52\x3b\x58\x6f\xba\xc8\xa9\xa1\xc4\x91\x45\x2c\xc5\x51\xf9\x61\xaf\x2e\xfd\xed\x05\x29\x39\x59\x37\x68\x50\x1f\x0c\x93\x9c\x8f\x37\x6f\xde\x8c\xa7\x67\x45\x70\xb6\x28\x95\x29\xc8\xec\x51\x0a\xd7\x64\xd9\x14\x57\xdc\xf5\x56\xed\x1a\x8f\x8b\xc5\xf9\x8f\xb8\x6b\x08\xef\x42\x49\xd6\x90\x27\x87\x65\xf0\x0d\x5b\x97\x67\xd3\x6c\x8a\xf7\xaa\x22\xe3\x48\x22\x18\x49\x16\xbe\x21\x2c\x3b\x51\x35\x74\x7c\x99\xe1\x0f\xb2\x4e\xb1\xc1\x45\xbe\xc0\xf3\x68\x30\x19\x9f\x26\x2f\xde\x64\x53\xf4\x1c\xd0\x8a\x1e\x86\x3d\x82\x23\xf8\x46\x39\xd4\x4a\x13\xe8\xb1\xa2\xce\x43\x19\x54\xdc\x76\x5a\x09\x53\x11\x0e\xca\x37\x29\xcd\x18\x24\xcf\xa6\xf8\x34\x86\xe0\xd2\x0b\x65\x20\x50\x71\xd7\x83\xeb\xa7\x76\x10\x3e\x01\x8e\x9f\xc6\xfb\xee\x75\x51\x1c\x0e\x87\x5c\x24\xb0\x39\xdb\x5d\xa1\x07\x43\x57\xbc\x5f\x5d\xdd\xac\xb7\x37\xf3\x8b\x7c\x91\x5c\x3e\x1a\x4d\xce\xc1\xd2\x5f\x41\x59\x92\x28\x7b\x88\xae\xd3\xaa\x12\xa5\x26\x68\x71\x00\x5b\x88\x9d\x25\x92\xf0\x1c\xf1\x1e\xac\xf2\xca\xec\x66\x70\x5c\xfb\x83\xb0\x94\x4d\x21\x95\xf3\x56\x95\xc1\x9f\x90\x75\x44\xa7\xdc\x89\x01\x1b\x08\x83\xc9\x72\x8b\xd5\x76\x82\xcb\xe5\x76\xb5\x9d\x65\x53\xdc\xaf\xee\xde\x6e\x3e\xde\xe1\x7e\x79\x7b\xbb\x5c\xdf\xad\x6e\xb6\xd8\xdc\xe2\x6a\xb3\xbe\x5e\xdd\xad\x36\xeb\x2d\x36\xbf\x61\xb9\xfe\x84\x77\xab\xf5\xf5\x0c\xa4\x7c\x43\x16\xf4\xd8\xd9\x88\x9f\x2d\x54\xa4\x91\x64\xe4\x6c\x4b\x74\x02\xa0\xe6\x01\x90\xeb\xa8\x52\xb5\xaa\xa0\x85\xd9\x05\xb1\x23\xec\x78\x4f\xd6\x28\xb3\x43\x47\xb6\x55\x2e\x36\xd3\x41\x18\x99\x4d\xa1\x55\xab\xbc\xf0\xe9\xe6\x9b\xa2\xf2\x2c\xd1\x77\xc9\xec\x9d\xb7\xa2\x73\x10\xb8\xba\xf9\xf0\x16\x8e\xec\x9e\x6c\x44\xb1\xf2\xa8\x2c\x89\x28\x2b\x7f\x60\x6c\xb6\xd7\x2e\xd6\xae\xb9\x12\x1a\xad\xa8\x1a\x65\x68\xf6\xc5\xe4\xf6\xf2\x1a\x1d\xb3\x8e\x49\x12\xa7\xc2\xc8\x58\x13\x5b\xef\xf0\xac\xd4\x5c\x3d\x3c\x83\xa4\xbd\xaa\x68\x30\x19\x34\x7a\x4f\x68\x83\x3b\x66\x42\x6d\xc9\x35\x43\xaa\xe8\x1f\xa5\xe6\x7a\xe7\xa9\x45\x74\x99\xa1\xa4\x4a\x44\x21\xba\x46\x75\x5d\x2c\x5b\xf9\x6c\x8a\x51\x57\x26\x2a\x8c\x2c\x0e\x1c\xb4\x84\x32\x31\xa6\x1b\x98\x54\x6d\x64\xab\xec\xf1\xf7\x0f\x8b\xc5\xef\x97\x31\x77\x1a\xa6\x21\x6b\x41\xbe\x2a\x2a\xea\x9a\xf4\x95\x57\x6c\xea\xcc\x35\xc8\xbf\x1e\x73\xd7\xe0\x73\xc3\xce\x1b\xd1\x12\xe6\xea\xf3\x30\x8a\xa6\x56\xbb\x60\x29\x61\x75\x5e\x58\x8f\xe8\x31\x6f\xd9\x0c\xfe\x2d\x9b\xff\xed\x79\xf1\x38\x38\xb3\x93\x59\xfb\x20\x95\xc5\xbc\x43\xb1\x17\xb6\xd0\xaa\x1c\xd0\xb1\x93\xe9\xc7\x7c\xf1\x5f\x0f\xe7\x43\x5e\x76\x32\xe6\x5d\x9c\x9c\xce\xbf\x87\xb9\x76\x68\xc9\x0b\x29\xbc\x18\x25\x30\x56\x20\x5d\x3e\x2c\x9e\x0f\x96\x3a\x11\xfd\x52\xab\xf7\xac\x43\x4b\x98\xd4\xcc\x13\x3c\x67\xa3\xfb\x61\xfa\xb5\xe8\xc9\xc6\xc6\xd4\x24\x7c\x88\x2d\x8b\xf4\x73\xec\xb8\x8b\x7b\x20\x9b\x1e\x67\x15\x86\x0e\x64\x51\x69\x45\xc6\xbb\x17\x51\x71\xeb\xcd\xdd\xcd\x6b\x1c\xe2\x13\x49\x5c\x51\xd7\xe0\x21\x6e\x36\x8d\x96\x65\xd0\x94\xf4\x17\xe3\x45\x3e\xe1\x1b\xe1\x61\x83\x71\xe9\x6a\x88\x73\x96\xd9\xf2\x28\x3b\xcc\xe7\xa9\xed\xf3\x11\xca\x57\x6c\x49\x8d\xa8\x99\x4f\xeb\x1a\x79\x18\x4a\xcb\xe2\x09\xec\xe4\xa0\xea\x51\x9f\x83\xc9\x9f\x89\xa6\x97\xdf\x35\xf9\xc2\xe6\x68\x56\xbb\x58\xf0\x31\xc7\xbf\x8d\x9e\xc4\x8d\x90\x42\xdc\xac\x92\x1e\xf3\xc6\xb7\x1a\xca\x78\x4e\x35\x8e\xc8\xd2\x68\x7a\xf1\x40\x71\x68\x0f\x4d\x5c\xc7\xc1\x78\xa5\x9f\xd8\x8c\x60\x24\x44\xc9\xfb\xb4\xc1\x5a\x0e\xc6\xc7\xa5\x18\x77\xd5\x39\x1c\x55\x1c\x07\xd4\x21\xb8\x20\xb4\xee\x41\x86\xc3\xae\x99\xa1\x0c\x1e\xde\xf6\x09\x40\xad\x0c\x79\xa5\xfb\x3c\x73\x9a\xa8\xc3\x79\x36\xa4\x3b\x1b\xa4\x5a\xc7\x51\x9c\xb7\xa7\xfa\x7e\xfd\xea\xa7\x9f\x7f\x41\xd1\x1a\xff\x06\x92\xb3\xb8\xd3\xa9\x6a\x18\x93\x7b\x91\x16\x6f\xda\x66\x23\x0d\x9e\x51\x12\x42\x37\x49\x66\xc7\x1c\x92\x0d\x65\x83\xcf\x5b\xd2\x9a\x93\x12\xce\x26\xf8\x35\x45\x2d\xbe\x32\x93\x55\x4d\xcb\x12\xaf\x5e\xbe\xfc\xe6\x25\xa4\x7a\xd3\x75\x36\xc6\x4a\x7a\x52\xf1\xbf\x42\xc8\x7e\x12\x5b\x1f\x11\x45\x38\x14\xe5\x3e\x54\xe6\x6d\xa0\x2f\xb8\x47\x40\x8b\x01\xd1\x3f\x01\x00\x00\xff\xff\xf4\x17\x84\x86\x91\x07\x00\x00") - -func testImagesVolumeRbdBootstrapShBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeRbdBootstrapSh, - "test/images/volume/rbd/bootstrap.sh", - ) -} - -func testImagesVolumeRbdBootstrapSh() (*asset, error) { - bytes, err := testImagesVolumeRbdBootstrapShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/rbd/bootstrap.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeRbdCephConfSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x93\x51\x4f\xe3\x38\x14\x85\xdf\xfd\x2b\xce\x36\xfb\xb0\x2b\x75\x93\x52\x01\x5a\xed\xaa\x23\x75\x0a\xa3\x89\x40\xad\x44\xca\x20\x84\x78\x70\x9c\x9b\xc4\xc8\xf1\xcd\xd8\x0e\x69\xe7\xd7\x8f\x92\x52\x31\x0c\xe4\xd1\xe7\xe4\xe6\xcb\x77\xe5\xe8\x8f\xa4\xf3\x2e\xc9\xb5\x4d\xc8\x3e\x23\x97\xbe\x16\x22\xc2\x8a\xdb\xbd\xd3\x55\x1d\x30\x9f\x9d\x9c\x61\x5b\x13\xae\xba\x9c\x9c\xa5\x40\x1e\xcb\x2e\xd4\xec\x7c\x2c\x22\x11\xe1\x5a\x2b\xb2\x9e\x0a\x74\xb6\x20\x87\x50\x13\x96\xad\x54\x35\x1d\x93\x29\xbe\x91\xf3\x9a\x2d\xe6\xf1\x0c\x7f\x0d\x85\xc9\x4b\x34\xf9\xfb\x7f\x11\x61\xcf\x1d\x1a\xb9\x87\xe5\x80\xce\x13\x42\xad\x3d\x4a\x6d\x08\xb4\x53\xd4\x06\x68\x0b\xc5\x4d\x6b\xb4\xb4\x8a\xd0\xeb\x50\x8f\x9f\x79\x19\x12\x8b\x08\xf7\x2f\x23\x38\x0f\x52\x5b\x48\x28\x6e\xf7\xe0\xf2\xd7\x1e\x64\x18\x81\x87\xa7\x0e\xa1\xfd\x2f\x49\xfa\xbe\x8f\xe5\x08\x1b\xb3\xab\x12\x73\x28\xfa\xe4\x3a\x5d\x5d\xae\xb3\xcb\x7f\xe6\xf1\x6c\x7c\xe5\xd6\x1a\xf2\x1e\x8e\xbe\x77\xda\x51\x81\x7c\x0f\xd9\xb6\x46\x2b\x99\x1b\x82\x91\x3d\xd8\x41\x56\x8e\xa8\x40\xe0\x81\xb7\x77\x3a\x68\x5b\x4d\xe1\xb9\x0c\xbd\x74\x24\x22\x14\xda\x07\xa7\xf3\x2e\xbc\x91\x75\xa4\xd3\xfe\x4d\x81\x2d\xa4\xc5\x64\x99\x21\xcd\x26\xf8\xbc\xcc\xd2\x6c\x2a\x22\xdc\xa5\xdb\xaf\x9b\xdb\x2d\xee\x96\x37\x37\xcb\xf5\x36\xbd\xcc\xb0\xb9\xc1\x6a\xb3\xbe\x48\xb7\xe9\x66\x9d\x61\xf3\x05\xcb\xf5\x3d\xae\xd2\xf5\xc5\x14\xa4\x43\x4d\x0e\xb4\x6b\xdd\xc0\xcf\x0e\x7a\xd0\x48\xc5\xe0\x2c\x23\x7a\x03\x50\xf2\x01\xc8\xb7\xa4\x74\xa9\x15\x8c\xb4\x55\x27\x2b\x42\xc5\xcf\xe4\xac\xb6\x15\x5a\x72\x8d\xf6\xc3\x32\x3d\xa4\x2d\x44\x04\xa3\x1b\x1d\x64\x18\x4f\xde\xfd\x54\x2c\x46\x7d\x2b\xb6\xa5\xae\x3a\x47\x1e\x09\x05\x95\x28\x6a\xeb\x58\xb1\x2d\x51\x3a\x6e\x20\x11\xa8\x69\x8d\x0c\xc3\x2a\x85\x20\x55\x33\x26\xe2\xa1\x32\x9c\x4b\xf3\x28\x64\x17\x6a\x28\xd3\xf9\x40\xee\x75\x05\x0b\x58\xb6\x74\x08\x3d\xb9\x67\xad\xe8\xe3\x50\x19\x4d\x36\xbc\xcb\xc4\x43\xc3\x36\x96\x8f\xa2\x66\x1f\xb0\xc0\xc0\x94\xf3\x4e\x34\x83\xf8\xa2\x70\x58\xe0\xcf\x13\x21\x1e\xd8\x17\x8f\x82\x7d\x81\x27\xee\x9c\x95\x06\x5e\xff\x20\x2c\x70\x32\xff\x57\x1c\x8f\x0a\xcd\x58\xa0\x94\xc6\xd3\x70\x79\xa4\x31\xdc\xc3\x75\x76\x54\xc6\x16\xb4\x0b\xa7\xe3\x8c\x46\xee\xc0\xf9\x13\xa9\x00\x2b\x1b\x82\x21\x8b\x05\xe6\x67\xe7\x1f\xa5\xbe\x95\xea\x58\x39\x3f\x3d\xa0\xc4\xb3\x03\xcc\x6f\xd0\x13\x7c\x7a\x35\xfb\xaa\x57\x88\x9f\x01\x00\x00\xff\xff\x07\xbb\xe8\x40\xdf\x03\x00\x00") - -func testImagesVolumeRbdCephConfShBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeRbdCephConfSh, - "test/images/volume/rbd/ceph.conf.sh", - ) -} - -func testImagesVolumeRbdCephConfSh() (*asset, error) { - bytes, err := testImagesVolumeRbdCephConfShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/rbd/ceph.conf.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeRbdCreate_blockSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x93\x51\x6f\xdb\xb6\x17\xc5\xdf\xf9\x29\x4e\xad\x00\x4d\xf0\x4f\x24\xdb\xc0\xff\xa5\x83\x3b\x38\x89\x87\x0a\xad\x1d\xc0\x56\xd7\xf5\x69\xa5\xa4\x2b\x89\x08\x45\x6a\xe4\x95\x1d\x67\xdd\x77\x1f\x28\xd9\x68\x82\x3e\x4c\x8f\xe2\xe1\xe1\xef\x9e\x7b\x6f\xf4\x26\xe9\xbd\x4b\x72\x65\x12\x32\x7b\xe4\xd2\x37\x42\x44\xb8\xb3\xdd\xd1\xa9\xba\x61\xcc\xa7\xb3\xff\x23\x6b\x08\x1f\xfb\x9c\x9c\x21\x26\x8f\x65\xcf\x8d\x75\x3e\x16\x91\x88\xf0\x49\x15\x64\x3c\x95\xe8\x4d\x49\x0e\xdc\x10\x96\x9d\x2c\x1a\x3a\x9f\x5c\xe3\x77\x72\x5e\x59\x83\x79\x3c\xc5\x65\x10\x4c\x4e\x47\x93\xab\x5f\x44\x84\xa3\xed\xd1\xca\x23\x8c\x65\xf4\x9e\xc0\x8d\xf2\xa8\x94\x26\xd0\x53\x41\x1d\x43\x19\x14\xb6\xed\xb4\x92\xa6\x20\x1c\x14\x37\xc3\x33\x27\x93\x58\x44\xf8\x7a\xb2\xb0\x39\x4b\x65\x20\x51\xd8\xee\x08\x5b\xbd\xd4\x41\xf2\x00\x1c\xbe\x86\xb9\x7b\x97\x24\x87\xc3\x21\x96\x03\x6c\x6c\x5d\x9d\xe8\x51\xe8\x93\x4f\xe9\xdd\x6a\xb3\x5b\xdd\xcc\xe3\xe9\x70\xe5\xb3\xd1\xe4\x3d\x1c\xfd\xd5\x2b\x47\x25\xf2\x23\x64\xd7\x69\x55\xc8\x5c\x13\xb4\x3c\xc0\x3a\xc8\xda\x11\x95\x60\x1b\x78\x0f\x4e\xb1\x32\xf5\x35\xbc\xad\xf8\x20\x1d\x89\x08\xa5\xf2\xec\x54\xde\xf3\xab\xb0\xce\x74\xca\xbf\x12\x58\x03\x69\x30\x59\xee\x90\xee\x26\xb8\x5d\xee\xd2\xdd\xb5\x88\xf0\x25\xcd\x3e\x3c\x7c\xce\xf0\x65\xb9\xdd\x2e\x37\x59\xba\xda\xe1\x61\x8b\xbb\x87\xcd\x7d\x9a\xa5\x0f\x9b\x1d\x1e\x7e\xc3\x72\xf3\x15\x1f\xd3\xcd\xfd\x35\x48\x71\x43\x0e\xf4\xd4\xb9\xc0\x6f\x1d\x54\x88\x91\xca\x90\xd9\x8e\xe8\x15\x40\x65\x47\x20\xdf\x51\xa1\x2a\x55\x40\x4b\x53\xf7\xb2\x26\xd4\x76\x4f\xce\x28\x53\xa3\x23\xd7\x2a\x1f\x9a\xe9\x21\x4d\x29\x22\x68\xd5\x2a\x96\x3c\xfc\xf9\xa9\xa8\x78\x98\x25\x47\x92\x09\xb9\xb6\xc5\x63\xcc\xd2\xc5\xf5\xf3\xd8\x43\x09\xdf\x4a\xad\x41\x4f\x3c\x1f\xfa\xed\x8f\x9e\xa9\x0d\x6c\x29\xa3\xed\x3d\x23\x27\xb8\xde\x40\x7a\x38\x6b\x19\x97\x6c\xd1\xda\xde\xf0\x68\xf0\xf6\xc6\x42\x5b\xdb\xbd\xbd\x7a\x13\x1e\x5a\x3d\x29\x0e\xb9\x05\x80\x4a\x39\xcf\x20\xe7\xac\x8b\x85\x27\xc6\x0d\x09\xb1\xde\x64\xf7\xe9\x76\xf1\xad\x7d\x64\x6a\x3b\xdc\x94\xdf\x84\x28\x34\x49\xd3\x77\x97\x57\xe2\x6f\x11\x26\x23\xc2\x5a\x3e\x12\x7c\xef\x08\x07\x82\x23\xee\xdd\x68\x39\xee\x03\x85\x47\x0a\x5b\xd2\xa0\xde\xae\xb2\xc5\xc5\xaf\xa7\x8b\x3b\xa5\xc9\xb0\x3e\xc2\x51\x6b\xf7\x04\xda\x93\x3b\x72\x13\x72\x93\xa6\x84\xaa\x8d\x75\x34\x32\xf9\xe1\x4a\xe0\xfa\xdf\x68\x34\x6c\x60\x3f\xd6\x76\x31\x72\x62\xfe\x3e\x29\x69\x9f\x98\x5e\xeb\x1f\x1a\xd7\x96\xca\xfd\x97\x64\x0c\xfb\xa7\xd3\x81\xfd\x62\xbb\xca\xc4\x3f\x42\xb0\x93\x1d\x4e\xd5\x23\x5b\x6d\xd7\x58\xfd\x91\x66\x2f\x1a\x36\x9b\x4f\xd7\xb7\x28\x69\xaf\xce\x4b\x17\x1a\x25\x22\x5c\xee\xad\xee\x5b\xfa\x53\x59\x30\x79\xf6\x30\x61\xee\x25\x43\x93\xf4\x8c\xd9\x74\xba\xbe\xbd\x12\x65\x09\x55\x2d\x06\x80\x67\x72\x16\xb6\x5a\x8c\x54\x9e\xe8\x71\x31\x9b\x4f\x51\x84\x6a\x17\x33\xe4\x7e\x31\x5b\x8b\xf6\xb1\xf2\xf1\x30\x0a\x83\x2c\x80\x2c\x83\x87\x29\xe9\x29\x6e\xb8\xd5\xc3\x66\xb1\x18\x33\x3a\x75\xfe\x54\xe8\x29\x0e\x41\x45\x63\x31\xf9\x40\x5a\x5b\x54\xce\xb6\xd8\xde\xde\x4f\xf0\xfe\x7c\x9e\xfc\x30\x13\xaf\xb3\x16\xe2\x1c\xda\x79\x42\x5f\x64\x87\xef\xdf\xf1\x4e\xb0\x74\x28\xaa\xe7\xd7\xaa\x11\xf5\xdf\x00\x00\x00\xff\xff\x95\xf5\xaf\x4a\x45\x05\x00\x00") - -func testImagesVolumeRbdCreate_blockShBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeRbdCreate_blockSh, - "test/images/volume/rbd/create_block.sh", - ) -} - -func testImagesVolumeRbdCreate_blockSh() (*asset, error) { - bytes, err := testImagesVolumeRbdCreate_blockShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/rbd/create_block.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeRbdKeyring = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8a\xce\xcd\xcf\xd3\x8b\xe5\x52\x80\x82\xec\xd4\x4a\x05\x5b\x05\xc7\x40\x97\xa0\x22\x6f\xbf\x30\xb3\x2a\x93\x50\xe7\x0c\x47\x47\xa7\xaa\x00\xc3\xa8\xca\xca\xe2\x90\x50\x93\x82\xac\xf4\x2c\x3f\xff\x34\xfd\x02\x63\x47\x5b\x5b\xae\xe8\xe4\x9c\xcc\xd4\xbc\x12\xbd\xc4\x94\xdc\xcc\x3c\x5c\xa6\x24\xb9\xa6\x96\x81\x4c\x71\xcd\x0d\x72\xd6\x2e\x08\xd7\xf7\x76\x0a\xf3\xa8\x48\x34\x28\xd7\x0f\xf0\xf7\xf4\x01\x99\x02\xd3\x96\x58\x9a\x99\xa2\x60\xab\x60\x00\x17\x48\x4e\x2c\x28\x56\xc8\x4d\x29\x56\xb0\x55\x50\x4a\xcc\xc9\xc9\x2f\x57\xd0\x52\x42\x93\xcc\xcf\xc3\x2d\x99\x5f\x9c\x82\x22\x09\x08\x00\x00\xff\xff\x71\x6c\x55\x44\xec\x00\x00\x00") - -func testImagesVolumeRbdKeyringBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeRbdKeyring, - "test/images/volume/rbd/keyring", - ) -} - -func testImagesVolumeRbdKeyring() (*asset, error) { - bytes, err := testImagesVolumeRbdKeyringBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/rbd/keyring", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeRbdMonSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x94\x5f\x6f\xdb\x36\x14\xc5\xdf\xf9\x29\xce\xac\x02\x4d\x80\xc8\x4a\x03\xec\x5f\xf7\xe4\xa5\x19\x66\xb4\xb3\x81\xd8\x5d\xd1\x47\x8a\xbc\x92\x2e\x22\x91\x1c\x79\x15\x55\x18\xf6\xdd\x07\xc9\x71\x61\x23\x1b\x8a\xf8\x85\x34\xcf\xb9\x87\x3f\x5e\x12\xca\xbe\x2b\xfa\x14\x8b\x92\x5d\x41\xee\x11\xa5\x4e\x8d\x52\x19\x6e\x7d\x18\x23\xd7\x8d\xe0\xe6\xfa\xcd\xf7\xd8\x37\x84\xf7\x7d\x49\xd1\x91\x50\xc2\xaa\x97\xc6\xc7\xb4\x54\x99\xca\xf0\x81\x0d\xb9\x44\x16\xbd\xb3\x14\x21\x0d\x61\x15\xb4\x69\xe8\xa8\x5c\xe1\x4f\x8a\x89\xbd\xc3\xcd\xf2\x1a\x17\x93\x61\xf1\x24\x2d\x2e\x7f\x51\x19\x46\xdf\xa3\xd3\x23\x9c\x17\xf4\x89\x20\x0d\x27\x54\xdc\x12\xe8\x8b\xa1\x20\x60\x07\xe3\xbb\xd0\xb2\x76\x86\x30\xb0\x34\xf3\x36\x4f\x21\x4b\x95\xe1\xf3\x53\x84\x2f\x45\xb3\x83\x86\xf1\x61\x84\xaf\x4e\x7d\xd0\x32\x03\x4f\xbf\x46\x24\xbc\x2d\x8a\x61\x18\x96\x7a\x86\x5d\xfa\x58\x17\xed\xc1\x98\x8a\x0f\xeb\xdb\xbb\xcd\xee\x2e\xbf\x59\x5e\xcf\x25\x1f\x5d\x4b\x29\x21\xd2\x5f\x3d\x47\xb2\x28\x47\xe8\x10\x5a\x36\xba\x6c\x09\xad\x1e\xe0\x23\x74\x1d\x89\x2c\xc4\x4f\xbc\x43\x64\x61\x57\x5f\x21\xf9\x4a\x06\x1d\x49\x65\xb0\x9c\x24\x72\xd9\xcb\x59\xb3\x8e\x74\x9c\xce\x0c\xde\x41\x3b\x2c\x56\x3b\xac\x77\x0b\xfc\xba\xda\xad\x77\x57\x2a\xc3\xa7\xf5\xfe\xf7\xed\xc7\x3d\x3e\xad\xee\xef\x57\x9b\xfd\xfa\x6e\x87\xed\x3d\x6e\xb7\x9b\x77\xeb\xfd\x7a\xbb\xd9\x61\xfb\x1b\x56\x9b\xcf\x78\xbf\xde\xbc\xbb\x02\xb1\x34\x14\x41\x5f\x42\x9c\xf8\x7d\x04\x4f\x6d\x24\x3b\xf5\x6c\x47\x74\x06\x50\xf9\x03\x50\x0a\x64\xb8\x62\x83\x56\xbb\xba\xd7\x35\xa1\xf6\x8f\x14\x1d\xbb\x1a\x81\x62\xc7\x69\xba\xcc\x04\xed\xac\xca\xd0\x72\xc7\xa2\x65\x5e\x79\x76\xa8\xa5\x9a\xdb\x77\xeb\x5d\xc5\x75\x1f\x69\x2e\x42\xab\x7b\x67\x9a\xe9\x0f\x1c\x0d\xf8\x63\xbb\x99\x5e\x92\xca\xd0\x79\xc7\xe2\x23\x12\x49\x1f\x54\xe7\x5d\xa7\x83\x78\xdf\x22\xcf\x4d\x24\x2d\x34\x4d\x5a\x5f\x96\x14\x91\xe7\x55\x62\x8b\xc5\xab\x8b\xbe\x67\x5b\x93\xbb\x5c\x20\xcf\xb5\xb5\xd0\x58\xbc\xfa\xfb\xcd\x3f\x8b\xb7\x3f\xfc\xf8\xd3\xcf\x28\x48\x4c\x61\x28\x34\xc5\x21\x4f\x75\x0f\x96\x23\x8a\x47\x1d\x8b\x96\xcb\xaf\xd2\x3c\xc9\xb5\x9a\x87\xce\x3b\xe4\x0c\x8d\x3c\xef\x1e\xaa\x34\x0d\x73\xf1\xb3\x34\xe4\x0f\xff\x11\xf5\x40\x63\x64\x57\x2b\x13\xfe\x5f\x7c\x01\xc1\x4b\xb6\x3e\x64\x7c\x25\x50\x19\x4c\xcb\xe4\xe4\xd0\x53\x5c\x34\xda\xd9\xf1\xf2\x1b\x64\xc7\x9d\xa6\xf2\xc3\xab\xe0\x04\xa1\x24\x18\x08\x83\x76\x02\xf1\x33\x26\x7c\xb2\xa8\x49\x4c\xec\x53\x33\x33\x79\x14\xd2\x85\x62\x5e\x30\x6a\x1e\x0e\x37\x68\x4f\x85\x73\x9f\x55\xd3\xe7\x23\x67\xbc\x4e\x45\x12\x0a\x30\x8d\xf7\x89\x5a\xd2\x15\x2a\x8e\x49\x1c\xae\x21\x63\x20\x34\x3e\xc9\x37\x2c\x3e\xd9\xe2\xf5\x59\xf8\x09\x84\x39\x15\x9e\xc1\x1e\x0f\x94\x4e\x0f\xc4\x67\x9e\x7f\x03\x00\x00\xff\xff\x24\x3c\x05\xf8\x2f\x05\x00\x00") - -func testImagesVolumeRbdMonShBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeRbdMonSh, - "test/images/volume/rbd/mon.sh", - ) -} - -func testImagesVolumeRbdMonSh() (*asset, error) { - bytes, err := testImagesVolumeRbdMonShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/rbd/mon.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesVolumeRbdOsdSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x92\xcf\x6f\x9b\x4e\x10\xc5\xef\xfc\x15\xef\x0b\x5f\x29\x6d\x65\x43\x12\xa9\x97\x56\x39\xb8\x4e\xaa\xa2\x44\xb6\x14\x9c\x46\x39\x2e\x30\xb0\x23\xaf\x77\xe9\xfe\x08\xb6\xaa\xfe\xef\xd5\x62\x47\x4a\xd4\x1e\xca\x05\x86\x79\x6f\xe6\xc3\x63\xb3\xff\x8a\xe0\x6c\x51\xb3\x2e\x48\x3f\xa3\x16\x4e\x26\x49\x86\xa5\x19\x0e\x96\x7b\xe9\x71\x79\x7e\xf1\x11\x1b\x49\xb8\x0d\x35\x59\x4d\x9e\x1c\x16\xc1\x4b\x63\x5d\x9e\x64\x49\x86\x3b\x6e\x48\x3b\x6a\x11\x74\x4b\x16\x5e\x12\x16\x83\x68\x24\xbd\x74\x66\xf8\x4e\xd6\xb1\xd1\xb8\xcc\xcf\xf1\x2e\x0a\xd2\x53\x2b\x7d\xff\x39\xc9\x70\x30\x01\x3b\x71\x80\x36\x1e\xc1\x11\xbc\x64\x87\x8e\x15\x81\xf6\x0d\x0d\x1e\xac\xd1\x98\xdd\xa0\x58\xe8\x86\x30\xb2\x97\xd3\x9a\xd3\x90\x3c\xc9\xf0\x74\x1a\x61\x6a\x2f\x58\x43\xa0\x31\xc3\x01\xa6\x7b\xad\x83\xf0\x13\x70\xbc\xa4\xf7\xc3\xa7\xa2\x18\xc7\x31\x17\x13\x6c\x6e\x6c\x5f\xa8\xa3\xd0\x15\x77\xe5\xf2\x66\x55\xdd\xcc\x2f\xf3\xf3\xc9\xf2\xa0\x15\x39\x07\x4b\x3f\x02\x5b\x6a\x51\x1f\x20\x86\x41\x71\x23\x6a\x45\x50\x62\x84\xb1\x10\xbd\x25\x6a\xe1\x4d\xe4\x1d\x2d\x7b\xd6\xfd\x0c\xce\x74\x7e\x14\x96\x92\x0c\x2d\x3b\x6f\xb9\x0e\xfe\x4d\x58\x2f\x74\xec\xde\x08\x8c\x86\xd0\x48\x17\x15\xca\x2a\xc5\x97\x45\x55\x56\xb3\x24\xc3\x63\xb9\xf9\xb6\x7e\xd8\xe0\x71\x71\x7f\xbf\x58\x6d\xca\x9b\x0a\xeb\x7b\x2c\xd7\xab\xeb\x72\x53\xae\x57\x15\xd6\x5f\xb1\x58\x3d\xe1\xb6\x5c\x5d\xcf\x40\xec\x25\x59\xd0\x7e\xb0\x91\xdf\x58\x70\x8c\x91\xda\x98\x59\x45\xf4\x06\xa0\x33\x47\x20\x37\x50\xc3\x1d\x37\x50\x42\xf7\x41\xf4\x84\xde\x3c\x93\xd5\xac\x7b\x0c\x64\x77\xec\xe2\xcf\x74\x10\xba\x4d\x32\x28\xde\xb1\x17\x7e\x7a\xf3\xc7\x47\xe5\xc9\x14\xdf\xd2\xe8\x8e\xfb\x60\x69\x32\x41\x89\xa0\x1b\x19\x0b\x68\x1a\xb1\xae\xae\xe3\x49\x4a\x1a\x1a\x24\x8c\x6b\xd1\x58\x12\x9e\xa6\x7a\x1e\xeb\x39\x23\xfd\xff\xe7\xc5\xaf\x14\xf3\xf9\x6e\xdb\xb9\xe9\xb6\xa5\xc3\xd1\x21\x82\x97\x10\x6d\x8b\xd4\xb8\x36\x3f\xea\xa2\xeb\x4c\x28\x65\x46\x7c\x38\xc3\xce\xe8\x97\xca\x8e\xfb\xb3\x69\x5e\xf1\x2c\x6c\xa1\xb8\x2e\xe2\x8c\xc2\xb8\x76\x7a\x98\x47\x7b\xb1\xa5\x83\x65\xdd\xa7\xaf\x89\x82\x3b\x2d\x39\x2e\xb8\x80\x35\xc6\x5f\xb5\xd4\x89\xa0\x3c\xa4\x71\xfe\x2a\xaa\x6b\xb3\xff\x2b\xf7\xf6\x1f\x37\xfe\x0e\x00\x00\xff\xff\x5d\x88\x53\x6c\x8f\x03\x00\x00") - -func testImagesVolumeRbdOsdShBytes() ([]byte, error) { - return bindataRead( - _testImagesVolumeRbdOsdSh, - "test/images/volume/rbd/osd.sh", - ) -} - -func testImagesVolumeRbdOsdSh() (*asset, error) { - bytes, err := testImagesVolumeRbdOsdShBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/volume/rbd/osd.sh", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookBaseimage = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\xcc\x4d\x31\x33\xb1\x4d\xcc\x29\xc8\xcc\x4b\xb5\x32\xd6\x33\xe3\x4a\x2c\xca\xb5\x4d\x2c\xca\x35\x36\x2a\x33\xd3\x47\x15\x06\xa9\x03\x91\x65\x16\xc8\x12\x05\x05\xc9\x66\x26\x39\xa9\xb6\x50\x1a\x59\x0a\x10\x00\x00\xff\xff\xe5\x8d\xa8\xc0\x5c\x00\x00\x00") - -func testImagesWebhookBaseimageBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookBaseimage, - "test/images/webhook/BASEIMAGE", - ) -} - -func testImagesWebhookBaseimage() (*asset, error) { - bytes, err := testImagesWebhookBaseimageBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/BASEIMAGE", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookDockerfile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\xc1\x8e\xd3\x30\x10\x86\xef\x7e\x8a\x5f\xc9\x05\xa4\x92\x96\x5e\x90\xe0\x14\xda\x2c\x44\xbb\x9b\xa0\x26\xcb\xaa\x42\x1c\x9c\x64\x1a\x8f\x48\x6d\x63\x3b\x64\xfb\xf6\x28\xdd\x56\xa2\xc2\x27\x6b\xe6\xf3\xf8\xf3\xef\x18\x1b\x63\x4f\x8e\x7b\x15\xb0\x5e\xbd\xff\x80\x5a\x11\xee\xc7\x86\x9c\xa6\x40\x1e\xe9\x18\x94\x71\x3e\x11\xb1\x88\xf1\xc0\x2d\x69\x4f\x1d\x46\xdd\x91\x43\x50\x84\xd4\xca\x56\xd1\xb5\xb3\xc0\x77\x72\x9e\x8d\xc6\x3a\x59\xe1\xcd\x0c\x44\x97\x56\xf4\xf6\x93\x88\x71\x32\x23\x8e\xf2\x04\x6d\x02\x46\x4f\x08\x8a\x3d\x0e\x3c\x10\xe8\xa5\x25\x1b\xc0\x1a\xad\x39\xda\x81\xa5\x6e\x09\x13\x07\x75\xbe\xe6\x32\x24\x11\x31\xf6\x97\x11\xa6\x09\x92\x35\x24\x5a\x63\x4f\x30\x87\x7f\x39\xc8\x70\x16\x9e\x97\x0a\xc1\x7e\x5c\x2e\xa7\x69\x4a\xe4\x59\x36\x31\xae\x5f\x0e\xaf\xa0\x5f\x3e\xe4\x9b\xac\xa8\xb2\x77\xeb\x64\x75\x3e\xf2\xa4\x07\xf2\x1e\x8e\x7e\x8f\xec\xa8\x43\x73\x82\xb4\x76\xe0\x56\x36\x03\x61\x90\x13\x8c\x83\xec\x1d\x51\x87\x60\x66\xdf\xc9\x71\x60\xdd\x2f\xe0\xcd\x21\x4c\xd2\x91\x88\xd1\xb1\x0f\x8e\x9b\x31\xdc\x84\x75\xb5\x63\x7f\x03\x18\x0d\xa9\x11\xa5\x15\xf2\x2a\xc2\xe7\xb4\xca\xab\x85\x88\xf1\x9c\xd7\x5f\xcb\xa7\x1a\xcf\xe9\x6e\x97\x16\x75\x9e\x55\x28\x77\xd8\x94\xc5\x36\xaf\xf3\xb2\xa8\x50\xde\x21\x2d\xf6\xb8\xcf\x8b\xed\x02\xc4\x41\x91\x03\xbd\x58\x37\xfb\x1b\x07\x9e\x63\xa4\x6e\xce\xac\x22\xba\x11\x38\x98\x57\x21\x6f\xa9\xe5\x03\xb7\x18\xa4\xee\x47\xd9\x13\x7a\xf3\x87\x9c\x66\xdd\xc3\x92\x3b\xb2\x9f\x3f\xd3\x43\xea\x4e\xc4\x18\xf8\xc8\x41\x86\x73\xe5\xbf\x47\x25\x42\xdc\xed\xca\xc7\x59\x3f\xcb\x1f\xd3\x2f\x99\x10\xe9\x76\x8b\x89\x1a\x65\xcc\x2f\x2c\x2f\x1b\x91\x15\xf5\x6e\xff\xad\xcc\x8b\x1a\x3f\xa2\x6b\x35\xfa\x29\xfe\x06\x00\x00\xff\xff\x09\xde\xc2\x41\x89\x02\x00\x00") - -func testImagesWebhookDockerfileBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookDockerfile, - "test/images/webhook/Dockerfile", - ) -} - -func testImagesWebhookDockerfile() (*asset, error) { - bytes, err := testImagesWebhookDockerfileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/Dockerfile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookMakefile = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x91\x51\x4f\xdb\x30\x14\x85\x9f\xe7\x5f\x71\xd4\xf0\xd0\x4a\x25\x65\x68\xda\x24\x26\x34\x65\x6d\x07\x11\x28\x99\x92\x00\xe2\x09\x39\xc9\x6d\x72\xb5\xd4\xf6\x6c\x67\xa1\xff\x7e\x72\x01\x69\x68\x7e\xf3\x3d\xc7\xc7\x9f\x8f\x23\xac\xb5\x39\x58\xee\x7a\x8f\xf3\xb3\x8f\x5f\x50\xf5\x84\x9b\xb1\x26\xab\xc8\x93\x43\x32\xfa\x5e\x5b\x17\x8b\x48\x44\xb8\xe5\x86\x94\xa3\x16\xa3\x6a\xc9\xc2\xf7\x84\xc4\xc8\xa6\xa7\x37\x65\x89\x7b\xb2\x8e\xb5\xc2\x79\x7c\x86\x79\x30\xcc\x5e\xa5\xd9\xe2\xab\x88\x70\xd0\x23\xf6\xf2\x00\xa5\x3d\x46\x47\xf0\x3d\x3b\xec\x78\x20\xd0\x73\x43\xc6\x83\x15\x1a\xbd\x37\x03\x4b\xd5\x10\x26\xf6\xfd\xf1\x9a\xd7\x90\x58\x44\x78\x7c\x8d\xd0\xb5\x97\xac\x20\xd1\x68\x73\x80\xde\xfd\xeb\x83\xf4\x47\xe0\xb0\x7a\xef\xcd\xc5\x6a\x35\x4d\x53\x2c\x8f\xb0\xb1\xb6\xdd\x6a\x78\x31\xba\xd5\x6d\xba\xde\x66\xe5\xf6\xf4\x3c\x3e\x3b\x1e\xb9\x53\x03\x39\x07\x4b\xbf\x47\xb6\xd4\xa2\x3e\x40\x1a\x33\x70\x23\xeb\x81\x30\xc8\x09\xda\x42\x76\x96\xa8\x85\xd7\x81\x77\xb2\xec\x59\x75\x4b\x38\xbd\xf3\x93\xb4\x24\x22\xb4\xec\xbc\xe5\x7a\xf4\xef\xca\x7a\xa3\x63\xf7\xce\xa0\x15\xa4\xc2\x2c\x29\x91\x96\x33\x7c\x4f\xca\xb4\x5c\x8a\x08\x0f\x69\x75\x9d\xdf\x55\x78\x48\x8a\x22\xc9\xaa\x74\x5b\x22\x2f\xb0\xce\xb3\x4d\x5a\xa5\x79\x56\x22\xff\x81\x24\x7b\xc4\x4d\x9a\x6d\x96\x20\xf6\x3d\x59\xd0\xb3\xb1\x81\x5f\x5b\x70\xa8\x91\xda\xd0\x59\x49\xf4\x0e\x60\xa7\x5f\x80\x9c\xa1\x86\x77\xdc\x60\x90\xaa\x1b\x65\x47\xe8\xf4\x1f\xb2\x8a\x55\x07\x43\x76\xcf\x2e\x7c\xa6\x83\x54\xad\x88\x30\xf0\x9e\xbd\xf4\xc7\xc9\x7f\x8f\x8a\x85\x28\x8b\x75\x79\x39\x51\xdd\x6b\xfd\x4b\x24\xc5\xfa\x1a\xdf\x2e\x21\xf7\xed\xe7\x4f\xa2\x4a\x8a\xab\x6d\x15\xf6\x27\xf3\xf5\x5d\xb1\x49\x8b\x85\xb8\xca\x6f\x93\xec\xea\xe9\x7e\x5b\x94\x69\x9e\x05\x6d\x90\x9e\x9c\x0f\x39\x4f\x9b\xb4\x40\x30\x2b\xed\x5b\xb6\x38\x99\xbb\x9e\x86\x01\x66\x6a\x17\x0b\x41\xcf\x46\x5b\x2f\x44\xcd\xea\x42\x7c\x88\xe3\x15\xef\x65\x47\xa7\xa3\xe7\x21\x76\x3d\x6a\x56\x38\x99\x07\x9a\x85\x10\xf1\xcf\xeb\x3c\x7b\xbc\x08\x43\xf1\x37\x00\x00\xff\xff\x84\x81\x26\x0b\xed\x02\x00\x00") - -func testImagesWebhookMakefileBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookMakefile, - "test/images/webhook/Makefile", - ) -} - -func testImagesWebhookMakefile() (*asset, error) { - bytes, err := testImagesWebhookMakefileBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/Makefile", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd4\x33\x34\x29\x33\xe4\x02\x04\x00\x00\xff\xff\x50\x11\x22\x3b\x07\x00\x00\x00") - -func testImagesWebhookVersionBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookVersion, - "test/images/webhook/VERSION", - ) -} - -func testImagesWebhookVersion() (*asset, error) { - bytes, err := testImagesWebhookVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/VERSION", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookAddlabelGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x92\xd1\x6f\xdb\x36\x10\xc6\x9f\xc5\xbf\xe2\xa6\x87\xc0\x0e\x5c\x29\xc9\x53\x91\xc1\x0f\x5a\x92\x62\x5e\x33\x7b\xb0\x9d\x16\x45\x10\xa0\x27\xf1\x2c\x31\xa1\x48\x96\xa4\xac\x1a\x81\xff\xf7\x81\xb4\xdd\x39\x4b\x86\xbd\x34\x2f\x81\x7c\x1f\xef\xfb\xdd\x77\x97\x9f\xb2\x2b\x6d\x36\x56\xd4\x8d\x87\x8b\xb3\xf3\xf7\xb0\x6c\x08\x3e\x76\x25\x59\x45\x9e\x1c\x14\x9d\x6f\xb4\x75\x19\x63\xb7\xa2\x22\xe5\x88\x43\xa7\x38\x59\xf0\x0d\x41\x61\xb0\x6a\x08\xf6\x95\x11\x7c\x22\xeb\x84\x56\x70\x91\x9d\xc1\x20\x08\xd2\x7d\x29\x1d\xfe\xca\x36\xba\x83\x16\x37\xa0\xb4\x87\xce\x11\xf8\x46\x38\x58\x09\x49\x40\xdf\x2b\x32\x1e\x84\x82\x4a\xb7\x46\x0a\x54\x15\x41\x2f\x7c\x13\x4d\xf6\x2d\x32\xf6\x65\xdf\x40\x97\x1e\x85\x02\x84\x4a\x9b\x0d\xe8\xd5\xb1\x0a\xd0\x33\x06\x00\xd0\x78\x6f\x2e\xf3\xbc\xef\xfb\x0c\x23\x65\xa6\x6d\x9d\xcb\x9d\xca\xe5\xb7\x93\xab\x9b\xe9\xe2\xe6\xdd\x45\x76\xc6\xd8\x9d\x92\xe4\x1c\x58\xfa\xd6\x09\x4b\x1c\xca\x0d\xa0\x31\x52\x54\x58\x4a\x02\x89\x3d\x68\x0b\x58\x5b\x22\x0e\x5e\x07\xce\xde\x0a\x2f\x54\x3d\x02\xa7\x57\xbe\x47\x4b\x8c\x0b\xe7\xad\x28\x3b\xff\x22\xa0\x03\x95\x70\x70\x2c\xd0\x0a\x50\x41\x5a\x2c\x60\xb2\x48\xe1\xb7\x62\x31\x59\x8c\xd8\xe7\xc9\xf2\xf7\xd9\xdd\x12\x3e\x17\xf3\x79\x31\x5d\x4e\x6e\x16\x30\x9b\xc3\xd5\x6c\x7a\x3d\x59\x4e\x66\xd3\x05\xcc\x3e\x40\x31\xfd\x02\x1f\x27\xd3\xeb\x11\x90\xf0\x0d\x59\xa0\xef\xc6\x06\x76\x6d\x41\x84\xe8\x88\x67\x6c\x41\xf4\xc2\x7c\xa5\x77\x30\xce\x50\x25\x56\xa2\x02\x89\xaa\xee\xb0\x26\xa8\xf5\x9a\xac\x12\xaa\x06\x43\xb6\x15\x2e\x2c\xcf\x01\x2a\xce\xa4\x68\x85\x47\x1f\xbf\x5f\x8d\x93\xb1\xd3\x9c\x31\x83\xd5\x53\x68\xd2\xa2\x50\x8c\x89\xd6\x68\xeb\x61\xc0\x92\x94\x54\xa5\xb9\x50\x75\xfe\xe8\xb4\x4a\x19\x4b\xd2\xa7\xf7\x2e\x13\x3a\x47\x23\x72\xe4\x7b\x9f\x7c\x7d\x5e\x92\xc7\xf3\x94\x25\x2d\x79\x5c\x9f\xc3\x91\xac\xc5\xaa\x11\x8a\xec\x26\x37\x4f\x75\xf8\xc1\xe5\x41\x94\xaf\x83\xfc\xa0\x7b\x92\xba\x4e\xd9\x90\xb1\x4a\x2b\x17\xad\x91\xf3\x0f\xc2\x3a\x7f\x8b\x25\xc9\xbf\xd0\x57\x0d\x84\xd0\x55\x0d\x63\xf8\x7a\x1f\xef\x22\xfe\x3d\x43\xaa\x4d\x7a\x09\x29\x72\x9e\x8e\x20\x35\xe8\x9b\xf0\x19\x4d\x38\x7a\xcc\x65\xe8\xe0\x42\x6d\x8d\xb2\xa3\xf4\x12\x9e\x83\x98\xf8\xbb\x58\x09\xe2\x0d\xb9\x74\xbb\xdd\x35\x7d\xf8\x1a\xcd\x0b\xce\x45\xc8\x0c\xe5\xcf\x22\xc8\x8f\x4d\x8f\x68\xa2\x3b\xfc\xe3\x3e\x64\x2c\xcf\xa1\xe0\x1c\x10\xa2\xf8\x3f\x78\xc3\xfd\x86\x4d\xea\xf2\x91\x2a\xcf\x56\x9d\xaa\x00\x39\x8f\xb8\x03\xb4\xb0\x5f\x4a\x56\x1c\xd6\x34\xa7\xb5\xa0\x7e\x08\xa7\x6f\x54\x9c\xd1\xe1\xbe\x9e\x59\x12\x56\x91\x7d\x1a\x5c\x0c\xb3\x89\x5a\xe9\x41\x5a\xa1\x94\x61\x68\xe4\x07\x80\x21\x4b\x74\xf9\x08\x97\xe3\x90\x47\x57\xf9\xf0\x6a\xbf\xf8\x6c\x16\x61\xfe\x24\x8f\x2c\x49\xae\xd1\x23\xb4\x68\xee\x77\xb9\x3d\xec\xfe\xb1\x64\xfb\xbc\x65\x89\xc5\x3e\xb4\x40\x9b\xcd\xe9\x5b\x47\xce\xef\xdf\x66\x73\xec\x59\x42\xd6\x86\x6a\x38\xbb\xec\x4e\xb5\x68\x5d\x83\x72\x60\xb1\x1f\xc1\x89\x2e\x1f\x87\x2c\x11\x2b\x08\xa2\x5f\xc6\xa0\x84\x8c\x08\x91\xfc\xc6\x5a\x6d\x07\x64\xed\x90\x25\x89\x25\xdf\x59\x05\x5e\xbf\x9a\x74\xaf\xd8\x32\x96\xd8\x18\xcb\x8f\x08\x2e\xc7\x6f\x25\xb7\x2b\x46\xee\x17\xf2\xac\x90\x52\xf7\xc4\x61\x0c\xde\x76\x14\xb1\x24\xa9\x81\x2e\x1f\x8f\xb2\xc8\xe2\x52\xdc\x10\xc6\x63\x38\x8b\xac\xff\xea\xb2\x3b\xaf\x31\xdc\x3f\x94\x1b\x4f\x83\xd7\xc7\x1f\x58\x81\xe4\x6e\x45\xff\xff\xfa\xad\xeb\x8d\xe3\x26\xc6\x1f\x4f\x18\x0b\xcb\x8d\xa1\x3f\x16\xb3\x69\xfc\x78\x35\xe0\x0f\x09\x8c\xe1\xc4\x78\x76\x08\xf5\xe4\xa5\x8e\x6d\xd9\xdf\x01\x00\x00\xff\xff\x8f\xd2\x3a\x08\x81\x06\x00\x00") - -func testImagesWebhookAddlabelGoBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookAddlabelGo, - "test/images/webhook/addlabel.go", - ) -} - -func testImagesWebhookAddlabelGo() (*asset, error) { - bytes, err := testImagesWebhookAddlabelGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/addlabel.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookAlwaysallowGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x52\x5d\x6f\xdb\x36\x14\x7d\x36\x7f\xc5\x81\x1e\x0a\x3b\x48\xa4\x24\x40\x81\x2d\x43\x1e\xb4\x24\xc5\x84\x76\x36\x60\xb9\x2d\xfa\x78\x2d\x5d\x4b\x84\x29\x92\x23\x29\xab\x46\x90\xff\x3e\x50\x72\x86\x64\x09\xfa\x64\x93\xf7\xe8\x7c\xdc\xc3\xec\x4c\xdc\x19\x7b\x74\xb2\x69\x03\xae\x2f\xaf\x7e\xc7\xa6\x65\x7c\xee\xb7\xec\x34\x07\xf6\xc8\xfb\xd0\x1a\xe7\x53\x21\xbe\xc8\x8a\xb5\xe7\x1a\xbd\xae\xd9\x21\xb4\x8c\xdc\x52\xd5\x32\x4e\x93\x73\x7c\x63\xe7\xa5\xd1\xb8\x4e\x2f\x31\x8f\x80\xe4\x34\x4a\x16\x7f\x88\xa3\xe9\xd1\xd1\x11\xda\x04\xf4\x9e\x11\x5a\xe9\xb1\x93\x8a\xc1\x3f\x2b\xb6\x01\x52\xa3\x32\x9d\x55\x92\x74\xc5\x18\x64\x68\x47\x91\x13\x45\x2a\x7e\x9c\x08\xcc\x36\x90\xd4\x20\x54\xc6\x1e\x61\x76\x2f\x51\xa0\x20\x04\x00\xb4\x21\xd8\x9b\x2c\x1b\x86\x21\xa5\xd1\x65\x6a\x5c\x93\xa9\x09\xe5\xb3\x2f\xc5\xdd\xc3\xb2\x7c\xb8\xb8\x4e\x2f\x85\xf8\xaa\x15\x7b\x0f\xc7\xff\xf4\xd2\x71\x8d\xed\x11\x64\xad\x92\x15\x6d\x15\x43\xd1\x00\xe3\x40\x8d\x63\xae\x11\x4c\xf4\x39\x38\x19\xa4\x6e\xce\xe1\xcd\x2e\x0c\xe4\x58\xd4\xd2\x07\x27\xb7\x7d\x78\xb5\xa0\x67\x57\xd2\xe3\x25\xc0\x68\x90\x46\x92\x97\x28\xca\x04\x7f\xe6\x65\x51\x9e\x8b\xef\xc5\xe6\xaf\xd5\xd7\x0d\xbe\xe7\xeb\x75\xbe\xdc\x14\x0f\x25\x56\x6b\xdc\xad\x96\xf7\xc5\xa6\x58\x2d\x4b\xac\x3e\x21\x5f\xfe\xc0\xe7\x62\x79\x7f\x0e\x96\xa1\x65\x07\xfe\x69\x5d\xf4\x6e\x1c\x64\x5c\x1d\xd7\xa9\x28\x99\x5f\x89\xef\xcc\x64\xc6\x5b\xae\xe4\x4e\x56\x50\xa4\x9b\x9e\x1a\x46\x63\x0e\xec\xb4\xd4\x0d\x2c\xbb\x4e\xfa\x58\x9e\x07\xe9\x5a\x28\xd9\xc9\x40\x61\x3c\xbf\x89\x93\x8a\xb3\x4c\x08\x4b\xd5\x3e\x92\x74\x24\xb5\x10\xb2\xb3\xc6\x05\xcc\xc5\x2c\x09\xb2\xe3\x44\x88\x59\xb2\xff\xcd\xa7\xd2\x64\x64\x65\x46\xf5\x89\x3e\x3b\x5c\x6d\x39\xd0\x55\x22\x66\x1d\x07\x3a\x5c\xe1\x05\xac\xa3\xaa\x95\x9a\xdd\x31\xb3\xfb\x26\x5e\xf8\x2c\x82\xb2\x43\x84\x3f\xe3\xf6\xca\x34\x89\x58\x08\x91\x65\x20\x35\xd0\xd1\xe7\x4a\x99\xe1\x9e\x15\x1d\x3f\xc9\x03\x97\x5c\x19\x5d\x7b\x78\xc5\x6c\xfd\x98\x7e\x27\x0f\x0c\x7f\xba\x27\x5d\x83\xe2\x17\x3e\xfe\x8c\xad\xb3\x0f\x1e\x1d\xd5\x1c\xeb\x9d\xde\x65\xaf\xab\x98\x3e\x15\xf1\xdf\xaf\x74\xe6\xe4\x70\xca\x94\xe6\xcf\x29\xd7\x7c\x90\x3c\x2c\x70\xf6\xce\xc4\x5b\x13\x5b\x79\x14\xb3\x98\x24\xfd\x36\xbf\x5e\xa4\x85\xde\x99\x79\x32\xa9\x5c\x8c\xe6\x2e\xe2\xfb\xbf\xa8\xa3\xd8\x94\x24\xb6\x14\xb3\x7c\x7c\x0e\x92\x2c\xc4\x2c\xae\x3a\x2d\xe3\x78\xfe\x11\x67\x98\x8e\xe3\x78\xf1\x96\xbe\x22\xa5\x22\xcb\x4b\x99\x48\xe2\x46\xb3\xff\x19\xbb\xb9\x7d\x2f\xcf\x34\x7c\x7c\xfa\x3f\x3c\x1d\x97\xc2\x35\x6e\x11\x5c\xcf\x6f\xc6\x6b\xf6\xbd\x0a\xb8\xc5\x87\xa9\xee\xb4\x0c\x14\x7a\xff\xf8\x37\x7b\x4f\x0d\xdf\x20\x19\xf7\x3d\xf0\xb6\x35\x66\xff\x5e\x31\xc9\xa8\x19\x7a\xa7\xf1\xe1\x35\xb9\x78\x12\xff\x06\x00\x00\xff\xff\xb8\x0c\x0d\x2f\xc0\x04\x00\x00") - -func testImagesWebhookAlwaysallowGoBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookAlwaysallowGo, - "test/images/webhook/alwaysallow.go", - ) -} - -func testImagesWebhookAlwaysallowGo() (*asset, error) { - bytes, err := testImagesWebhookAlwaysallowGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/alwaysallow.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookAlwaysdenyGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x92\x41\x6f\xea\x38\x14\x85\xd7\xf8\x57\x1c\x65\xf1\x04\x15\x2f\x29\xac\x9e\x3a\xea\x22\xd3\x76\x34\xd1\x7b\x03\x12\xa1\xad\xba\xbc\x24\x97\xc4\xc2\xb1\x3d\xb6\x43\x1a\x55\xfd\xef\xa3\x00\x1d\xc1\x6b\x77\x49\xce\xe7\x73\x8f\xcf\x4d\x72\x25\xee\x8c\xed\x9d\xac\xea\x80\xf9\xf5\xec\x07\xd6\x35\xe3\x67\xbb\x61\xa7\x39\xb0\x47\xda\x86\xda\x38\x1f\x0b\xf1\x4b\x16\xac\x3d\x97\x68\x75\xc9\x0e\xa1\x66\xa4\x96\x8a\x9a\x71\x52\xa6\x78\x62\xe7\xa5\xd1\x98\xc7\xd7\x18\x0f\x40\x74\x92\xa2\xc9\x1f\xa2\x37\x2d\x1a\xea\xa1\x4d\x40\xeb\x19\xa1\x96\x1e\x5b\xa9\x18\xfc\x5a\xb0\x0d\x90\x1a\x85\x69\xac\x92\xa4\x0b\x46\x27\x43\x7d\x18\x72\xb2\x88\xc5\xcb\xc9\xc0\x6c\x02\x49\x0d\x42\x61\x6c\x0f\xb3\x3d\xa7\x40\x41\x08\x00\xa8\x43\xb0\x37\x49\xd2\x75\x5d\x4c\x87\x94\xb1\x71\x55\xa2\x8e\x94\x4f\x7e\x65\x77\x0f\x8b\xfc\xe1\xfb\x3c\xbe\x16\xe2\x51\x2b\xf6\x1e\x8e\xff\x6d\xa5\xe3\x12\x9b\x1e\x64\xad\x92\x05\x6d\x14\x43\x51\x07\xe3\x40\x95\x63\x2e\x11\xcc\x90\xb3\x73\x32\x48\x5d\x4d\xe1\xcd\x36\x74\xe4\x58\x94\xd2\x07\x27\x37\x6d\xb8\x28\xe8\x23\x95\xf4\x38\x07\x8c\x06\x69\x44\x69\x8e\x2c\x8f\xf0\x67\x9a\x67\xf9\x54\x3c\x67\xeb\xbf\x97\x8f\x6b\x3c\xa7\xab\x55\xba\x58\x67\x0f\x39\x96\x2b\xdc\x2d\x17\xf7\xd9\x3a\x5b\x2e\x72\x2c\xff\x42\xba\x78\xc1\xcf\x6c\x71\x3f\x05\xcb\x50\xb3\x03\xbf\x5a\x37\x64\x37\x0e\x72\xa8\x8e\xcb\x58\xe4\xcc\x17\xc3\xb7\xe6\x18\xc6\x5b\x2e\xe4\x56\x16\x50\xa4\xab\x96\x2a\x46\x65\xf6\xec\xb4\xd4\x15\x2c\xbb\x46\xfa\x61\x79\x1e\xa4\x4b\xa1\x64\x23\x03\x85\xc3\xfb\xa7\xeb\xc4\xe2\x2a\x11\xc2\x52\xb1\x1b\x4c\x1a\x92\x5a\x08\xd9\x58\xe3\x02\xc6\x62\x14\xed\x7e\xf8\x58\x9a\x84\xac\x4c\xa8\x3c\xb9\x26\xfb\xd9\x86\x03\xcd\x22\x31\x6a\x38\xd0\x7e\x86\x33\xac\xa1\xa2\x96\x9a\x5d\x9f\xd8\x5d\x35\x7c\xf0\xc9\x00\x25\xfb\x01\xff\xe0\x76\xca\x54\x91\x98\x08\x91\x24\x20\xd5\x51\xef\xef\x59\xf7\x20\xa5\x0e\x8b\x63\x1f\x3c\x1a\x2a\x79\xd8\xd0\xf1\xd7\x6a\x75\x31\x5c\x20\x16\xc3\xd3\xd9\x99\x31\x39\x9c\xe2\xc4\xe9\x47\xc0\x15\xef\x25\x77\x13\x5c\x7d\xa1\x78\x6b\x86\x1e\xdf\xc4\x68\x08\x11\x3f\x8d\xe7\x93\x38\xd3\x5b\x33\x8e\x0a\x52\x6a\xa8\xef\x68\xfe\xbd\x64\xdd\x47\x13\x31\x72\x07\xb3\xff\x0f\xde\xdc\x7e\x35\xef\x28\xbe\xbd\xff\x8e\xc7\xa9\x52\xa6\xe3\x12\xb7\xd8\x92\xf2\xfc\x49\x5f\xb1\x6f\x55\xc0\x2d\xbe\x1d\xab\x8c\xf3\x40\xa1\xf5\x6f\xff\xb0\xf7\x54\xf1\x0d\xa2\xc3\xfd\x3b\xde\xd4\xc6\xec\x50\xb2\x96\xec\x2f\x8a\x8a\x0e\x43\x43\xeb\x34\xbe\x5d\x9a\x8b\x77\xf1\x5f\x00\x00\x00\xff\xff\xaf\xd9\xff\x1a\x13\x04\x00\x00") - -func testImagesWebhookAlwaysdenyGoBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookAlwaysdenyGo, - "test/images/webhook/alwaysdeny.go", - ) -} - -func testImagesWebhookAlwaysdenyGo() (*asset, error) { - bytes, err := testImagesWebhookAlwaysdenyGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/alwaysdeny.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookConfigGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x54\x41\x6f\xe3\x36\x13\x3d\x8b\xbf\xe2\x7d\x3a\x2c\xec\x7c\xb6\x94\x06\x58\x60\x37\xc5\x1e\x5c\x27\xc1\x1a\x09\xec\x45\xe4\xcd\x76\x51\xf4\x40\x4b\x23\x89\x30\x4d\xaa\xe4\x28\x8e\x10\xe4\xbf\x17\x94\x64\x24\x41\x7b\xe8\xcd\xe2\xbc\x79\x7c\xef\xcd\x98\xe9\x99\x58\xda\xa6\x73\xaa\xaa\x19\x17\xe7\xbf\x7c\xc2\xb6\x26\xdc\xb6\x3b\x72\x86\x98\x3c\x16\x2d\xd7\xd6\xf9\x44\x88\x3b\x95\x93\xf1\x54\xa0\x35\x05\x39\x70\x4d\x58\x34\x32\xaf\x09\x63\x65\x86\x07\x72\x5e\x59\x83\x8b\xe4\x1c\x93\x00\x88\xc7\x52\x3c\xfd\x55\x74\xb6\xc5\x41\x76\x30\x96\xd1\x7a\x02\xd7\xca\xa3\x54\x9a\x40\x4f\x39\x35\x0c\x65\x90\xdb\x43\xa3\x95\x34\x39\xe1\xa8\xb8\xee\x2f\x19\x29\x12\xf1\x73\x24\xb0\x3b\x96\xca\x40\x22\xb7\x4d\x07\x5b\xbe\x45\x41\xb2\x10\x00\x50\x33\x37\x97\x69\x7a\x3c\x1e\x13\xd9\xab\x4c\xac\xab\x52\x3d\xa0\x7c\x7a\xb7\x5a\x5e\xaf\xb3\xeb\xf9\x45\x72\x2e\xc4\x77\xa3\xc9\x7b\x38\xfa\xab\x55\x8e\x0a\xec\x3a\xc8\xa6\xd1\x2a\x97\x3b\x4d\xd0\xf2\x08\xeb\x20\x2b\x47\x54\x80\x6d\xd0\x79\x74\x8a\x95\xa9\x66\xf0\xb6\xe4\xa3\x74\x24\x0a\xe5\xd9\xa9\x5d\xcb\xef\x02\x3a\xa9\x52\x1e\x6f\x01\xd6\x40\x1a\xc4\x8b\x0c\xab\x2c\xc6\x6f\x8b\x6c\x95\xcd\xc4\x8f\xd5\xf6\xeb\xe6\xfb\x16\x3f\x16\xf7\xf7\x8b\xf5\x76\x75\x9d\x61\x73\x8f\xe5\x66\x7d\xb5\xda\xae\x36\xeb\x0c\x9b\x1b\x2c\xd6\x3f\x71\xbb\x5a\x5f\xcd\x40\x8a\x6b\x72\xa0\xa7\xc6\x05\xed\xd6\x41\x85\xe8\xa8\x48\x44\x46\xf4\xee\xf2\xd2\x0e\x62\x7c\x43\xb9\x2a\x55\x0e\x2d\x4d\xd5\xca\x8a\x50\xd9\x47\x72\x46\x99\x0a\x0d\xb9\x83\xf2\x61\x78\x1e\xd2\x14\x42\xab\x83\x62\xc9\xfd\xf7\x3f\xec\x24\xe2\x2c\x15\xa2\x91\xf9\x3e\x90\x1c\xa4\x32\x42\xa8\x43\x63\x1d\x63\x22\xa2\x38\x77\x5d\xc3\x36\x65\xed\x63\x11\xc5\xa5\x96\x55\x2c\x44\x14\xef\x3f\xf9\x44\xd9\x74\xaf\x6d\x15\x8b\xa9\x10\x69\x8a\xa5\x35\xa5\xaa\x90\x5b\x13\x26\xea\x07\x95\xe4\x1e\xc9\x0d\xeb\x73\xa4\x5d\x6d\xed\x7e\x8a\x9c\x1c\x07\x5d\xd8\x53\x97\x08\xee\x1a\x3a\xf5\x7a\x76\x6d\xce\x78\x16\xd1\x92\x1c\xdf\x84\x75\x0a\x39\x9b\x4a\x44\xb7\xd4\xf5\xdf\xa7\x83\x17\x21\xca\xd6\xe4\x98\xe4\x38\x1b\xba\xa7\x90\x45\x71\xa3\x65\xe5\x27\xd3\x40\x11\xb4\x26\x59\x8f\x7e\x90\x6e\xf2\x21\x4f\x4e\xa4\x33\xc4\xac\xfd\x3c\xe8\x98\x87\x9d\x8d\x67\x78\x57\x8c\xff\x2f\xa2\x28\xee\xaf\x1b\xdd\x84\x54\x83\x87\x82\x4a\xd9\x6a\xc6\xd3\xc7\xf3\xcf\x08\x1d\x61\x04\x92\x87\xb1\x7c\xdd\x6e\xbf\x65\x09\x26\xcb\x45\x6f\x71\x06\x55\x42\x9a\x6e\x16\x48\x02\xc8\xc8\xb0\x2e\x03\xb9\x2c\x99\xdc\x29\x9e\x80\x9e\x26\xf1\xf4\xdf\x34\x8f\xbe\x47\xc9\x8d\x53\x8f\x92\x69\xbe\xa7\xee\x55\xf9\x2b\xe4\x3f\x0a\x1f\x59\x42\xfe\x38\x48\xce\xeb\x80\x9a\xcf\xdf\x65\x12\xe4\x9c\x32\xce\xfb\x7c\xb7\x77\xd9\x64\xf8\x85\x53\xe0\x67\xac\x7d\x32\xce\xee\x59\x44\x7e\xd9\xdb\x26\xe7\x70\xf9\x05\xa1\x76\x67\x65\xf1\xfb\xc7\xf3\xcf\xb7\xd4\x7d\x93\xca\x8d\xfd\x6f\xb2\x1e\x0f\x46\x0b\x53\x11\xa9\xb2\xef\xff\xdf\x17\x18\xa5\x03\x69\x14\x76\x2c\xb9\x91\x2c\xf5\x84\x9c\x9b\x8a\xe8\x45\x44\x8e\xb8\x75\x06\x1f\x5e\xef\x0f\xc8\x37\x03\xf1\x97\xf8\xe3\xcf\xbe\xfa\x7a\xf6\xdc\xeb\x7b\x99\x89\x28\x4a\x53\x6c\x37\x57\x9b\xcb\xf0\x76\x79\x1c\x5a\x6e\xa5\x0e\x82\x31\xcc\xe5\x48\xc3\x0b\x11\xfe\xdb\xc7\x5a\xf2\xb0\xb2\x21\x47\xd9\xa8\x71\x68\xbe\xb6\xad\x2e\x02\x41\x32\x10\x2e\xb5\x22\xc3\xe1\x89\xbd\x04\x7a\xf7\xf7\xc3\x1b\xb4\x30\xc5\x03\x39\x55\x76\x03\xa2\x0f\x29\xb8\x78\x11\x7f\x07\x00\x00\xff\xff\x4e\xa3\x0c\x01\xb1\x05\x00\x00") - -func testImagesWebhookConfigGoBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookConfigGo, - "test/images/webhook/config.go", - ) -} - -func testImagesWebhookConfigGo() (*asset, error) { - bytes, err := testImagesWebhookConfigGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/config.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookConfigmapGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x55\xdf\x8f\x1a\x37\x10\x7e\x5e\xff\x15\x13\x4b\x3d\x41\xc4\xed\xe6\x78\x8a\x88\x78\xa0\x77\xd7\x96\x26\x85\x0a\x2e\x89\xa2\x28\x6a\x86\xdd\xd9\x5d\x97\xc5\x76\x6c\x2f\x1b\x8a\xf8\xdf\x2b\x7b\x81\x70\xc7\x35\x55\xd5\x3c\xe6\x74\x3c\xac\xe7\x9b\xf9\xc6\xdf\xfc\x70\xf2\x94\x5d\x2b\xbd\x31\xa2\x28\x1d\xf4\x9f\x5d\x3d\x87\xbb\x92\xe0\x65\xbd\x20\x23\xc9\x91\x85\x51\xed\x4a\x65\x6c\xcc\xd8\x2b\x91\x92\xb4\x94\x41\x2d\x33\x32\xe0\x4a\x82\x91\xc6\xb4\x24\xd8\x5b\x7a\xf0\x86\x8c\x15\x4a\x42\x3f\x7e\x06\x1d\x0f\xe0\x7b\x13\xef\xbe\x60\x1b\x55\xc3\x0a\x37\x20\x95\x83\xda\x12\xb8\x52\x58\xc8\x45\x45\x40\x9f\x53\xd2\x0e\x84\x84\x54\xad\x74\x25\x50\xa6\x04\x8d\x70\x65\x20\xd9\x87\x88\xd9\xbb\x7d\x00\xb5\x70\x28\x24\x20\xa4\x4a\x6f\x40\xe5\xa7\x28\x40\xc7\x18\x00\x40\xe9\x9c\x1e\x24\x49\xd3\x34\x31\x86\x2c\x63\x65\x8a\xa4\x6a\x51\x36\x79\x35\xbe\xbe\x9d\xcc\x6f\x2f\xfb\xf1\x33\xc6\x5e\xcb\x8a\xac\x05\x43\x9f\x6a\x61\x28\x83\xc5\x06\x50\xeb\x4a\xa4\xb8\xa8\x08\x2a\x6c\x40\x19\xc0\xc2\x10\x65\xe0\x94\xcf\xb3\x31\xc2\x09\x59\xf4\xc0\xaa\xdc\x35\x68\x88\x65\xc2\x3a\x23\x16\xb5\xbb\x27\xd0\x21\x2b\x61\xe1\x14\xa0\x24\xa0\x04\x3e\x9a\xc3\x78\xce\xe1\xc7\xd1\x7c\x3c\xef\xb1\xb7\xe3\xbb\x5f\xa6\xaf\xef\xe0\xed\x68\x36\x1b\x4d\xee\xc6\xb7\x73\x98\xce\xe0\x7a\x3a\xb9\x19\xdf\x8d\xa7\x93\x39\x4c\x7f\x82\xd1\xe4\x1d\xbc\x1c\x4f\x6e\x7a\x40\xc2\x95\x64\x80\x3e\x6b\xe3\x73\x57\x06\x84\x97\x8e\xb2\x98\xcd\x89\xee\x91\xe7\xaa\x4d\xc6\x6a\x4a\x45\x2e\x52\xa8\x50\x16\x35\x16\x04\x85\x5a\x93\x91\x42\x16\xa0\xc9\xac\x84\xf5\xc5\xb3\x80\x32\x63\x95\x58\x09\x87\x2e\x7c\x9f\x5d\x27\x66\x4f\x13\xc6\x34\xa6\x4b\x1f\x64\x85\x42\x32\x26\x56\x5a\x19\x07\x1d\x16\xf1\xe5\x73\x1b\x0b\x95\xa0\x16\x09\x66\xfb\xa8\xc9\xfa\x6a\x41\x0e\xaf\x38\x8b\x52\x65\x68\x7d\x05\xa7\x30\x7f\x94\xac\xbd\x71\x45\x0e\xef\x1b\x57\x98\x96\x42\x92\xd9\x24\x7a\x59\xf8\x03\x9b\x78\x50\x0b\x3f\xe0\x96\x95\x2a\x38\xeb\x32\x96\x2a\x69\x43\x16\xa9\x92\xb9\x28\x7e\x43\xfd\x3b\xba\xb4\xbc\x02\x2f\xbe\x2c\x60\x08\x1f\xdf\x87\xfe\x08\x7f\x5b\xe0\x4a\xf3\x01\x70\xcc\x32\xde\x03\xae\xd1\x95\xfe\x33\xc9\xd0\x61\xb2\xaa\x5b\x05\x2e\xad\xc3\x82\x2e\xaf\x3c\x62\x8d\x55\x4d\x1e\xb2\x21\xcb\x61\xd7\x86\xfa\xf0\xf1\x21\x5f\xff\x1b\xf0\xf5\xbf\xc6\xd7\x65\x2c\x49\x20\x23\xb9\x81\x96\x79\x85\xda\xb6\x33\x73\x2c\xf3\x92\x36\x97\xc1\x1f\x34\x0a\x13\xb3\xbc\x96\x29\xf8\x8a\xb8\xeb\x43\xb2\xb6\x83\x06\xf6\xa5\x89\x47\x87\x62\xcd\x68\x2d\xa8\xe9\xc2\xd3\x47\x2c\x56\x2b\xdf\x53\x5b\x16\x79\xcd\xe3\x37\x9d\x7e\x37\x1e\xcb\x5c\x75\x78\x88\xec\xa7\xe2\x24\x23\xde\x3d\x51\x66\x46\x56\xd5\x26\x25\x18\x0c\xa1\xad\x73\xfc\xb3\x51\xb5\xde\x6f\x8d\x83\x79\x1b\x0e\x07\xc0\xf9\x71\xa1\x0c\x80\xaf\xbd\xfc\x07\xc8\x00\xf8\x09\xc7\x8e\x45\x22\x07\x34\xf1\x8c\x3e\xd5\x64\x5d\x7c\x24\x7a\x32\x84\x73\xf6\x2d\x8b\xda\xdc\x6f\x8d\x51\x26\xef\x70\xfa\xac\x29\x75\x60\x0e\x00\xa7\x60\x41\xf0\x83\xe5\xbd\x73\xef\x2e\x8b\x22\x43\xae\x36\x12\xa4\xa8\x58\xb4\x63\x2c\x32\xd8\xf8\x2b\x9d\x24\x30\x5d\xfc\x49\xa9\x8b\x67\xd8\x1c\xae\xbf\x42\xed\x31\x6d\xef\xc7\x47\xfd\xb7\x3b\x16\x65\x64\xc9\x08\xac\xc4\x5f\x64\x5a\x4c\x46\xa9\x8d\x5f\x4b\xb1\x26\x63\xb1\xba\x39\xb1\x77\xba\xe1\xae\x7f\xf4\xfc\x3f\x99\x80\x3f\xf5\x8f\x6f\xc8\xbb\x77\x0c\x36\x3d\x9f\x60\x0f\x2e\x8e\xfc\xdd\x17\xc1\xe3\xc9\xd0\x1b\x1e\xa8\xd0\x21\x63\x4e\xae\xe6\xd4\x59\xc5\xf7\x88\x1d\x8b\x4c\xe8\x8e\x63\x27\x0c\x86\x8f\x35\x50\x6b\xdc\x9e\xc1\xe3\x51\x55\xa9\x86\x32\x18\x82\x33\x35\xb1\xc8\x2f\xa7\x65\x0f\xd6\x3e\x8e\x41\x59\xd0\x97\xee\x89\x6f\xd0\x61\x48\x54\xe4\xb0\x84\xe1\x10\x78\x43\x8b\x52\xa9\xe5\x25\xf5\xe9\xd2\x91\x75\x1c\x2e\x2e\x60\x7d\xcf\x94\x09\x8b\x9e\x83\x07\xcf\x7f\xa6\xcf\xb1\xb2\xf4\x08\x62\x46\xb6\xae\x1c\x0c\xe1\x62\xdf\xa3\x73\x87\xae\xb6\x21\x58\x34\x23\xb4\xa1\x1d\xfd\x36\xfc\x52\xd9\x54\x49\xff\x24\xf9\x55\xd9\xa0\xf4\x1b\x7e\x49\x1b\xbf\x47\xa1\x9d\xdf\x9e\x77\xde\xb1\xf0\x0b\x92\x04\x95\x2f\xee\x33\xb3\x1d\x6b\x47\x34\xec\x01\xba\x3e\x36\xf8\x37\x9c\xd1\x76\xc5\x7c\x1f\xd1\xef\x23\xfa\x1f\x46\x54\xe4\x0f\x66\xf2\x3d\x3f\x7d\xaa\x8c\xe3\x1f\xc2\x04\x86\x27\x6a\xcb\xce\x26\x2a\xbc\x88\x30\x84\xf7\x1f\x16\x1b\x47\x9d\x07\x2f\x73\x9b\xf1\xbf\x70\x84\xe7\xf7\x7f\xb0\xf4\xbb\x6d\x1f\x68\x77\x2a\x46\x30\xdd\x6d\x34\xfd\x3a\x9f\x4e\xc2\xc7\x99\x16\x47\x88\x5f\x08\xda\xb1\xaf\x0c\xef\xdf\x01\x00\x00\xff\xff\x12\xef\x76\x56\x4b\x0b\x00\x00") - -func testImagesWebhookConfigmapGoBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookConfigmapGo, - "test/images/webhook/configmap.go", - ) -} - -func testImagesWebhookConfigmapGo() (*asset, error) { - bytes, err := testImagesWebhookConfigmapGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/configmap.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookCrdGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x55\x51\x6f\x22\x37\x10\x7e\x5e\xff\x8a\xb9\x95\x7a\x82\x13\xf1\x26\x79\x3a\x11\xf1\x40\x21\x6d\xd1\xa5\x20\x01\xb9\xe8\x54\x55\x95\xd9\x9d\xdd\x75\xf1\xda\x7b\x63\x2f\x1b\x8a\xf2\xdf\x2b\x9b\x25\x05\x25\xf7\x52\x29\x8a\xc0\xf3\xcd\xcc\xf7\xcd\x7c\x36\xc9\x27\x36\x31\xf5\x9e\x64\x51\x3a\xb8\xbd\xbe\xf9\x0c\xeb\x12\xe1\x4b\xb3\x41\xd2\xe8\xd0\xc2\xb8\x71\xa5\x21\xcb\x19\x7b\x90\x29\x6a\x8b\x19\x34\x3a\x43\x02\x57\x22\x8c\x6b\x91\x96\x08\x5d\x64\x00\x5f\x91\xac\x34\x1a\x6e\xf9\x35\xf4\x3c\x20\xee\x42\x71\xff\x8e\xed\x4d\x03\x95\xd8\x83\x36\x0e\x1a\x8b\xe0\x4a\x69\x21\x97\x0a\x01\x9f\x53\xac\x1d\x48\x0d\xa9\xa9\x6a\x25\x85\x4e\x11\x5a\xe9\xca\xd0\xa4\x2b\xc1\xd9\xb7\xae\x80\xd9\x38\x21\x35\x08\x48\x4d\xbd\x07\x93\x9f\xa3\x40\x38\xc6\x00\x00\x4a\xe7\xea\x61\x92\xb4\x6d\xcb\x45\x60\xc9\x0d\x15\x89\x3a\xa2\x6c\xf2\x30\x9b\xdc\xcf\x57\xf7\x57\xb7\xfc\x9a\xb1\x47\xad\xd0\x5a\x20\xfc\xde\x48\xc2\x0c\x36\x7b\x10\x75\xad\x64\x2a\x36\x0a\x41\x89\x16\x0c\x81\x28\x08\x31\x03\x67\x3c\xcf\x96\xa4\x93\xba\x18\x80\x35\xb9\x6b\x05\x21\xcb\xa4\x75\x24\x37\x8d\xbb\x18\xd0\x89\x95\xb4\x70\x0e\x30\x1a\x84\x86\x78\xbc\x82\xd9\x2a\x86\x9f\xc7\xab\xd9\x6a\xc0\x9e\x66\xeb\xdf\x16\x8f\x6b\x78\x1a\x2f\x97\xe3\xf9\x7a\x76\xbf\x82\xc5\x12\x26\x8b\xf9\x74\xb6\x9e\x2d\xe6\x2b\x58\xfc\x02\xe3\xf9\x37\xf8\x32\x9b\x4f\x07\x80\xd2\x95\x48\x80\xcf\x35\x79\xee\x86\x40\xfa\xd1\x61\xc6\xd9\x0a\xf1\xa2\x79\x6e\x8e\x64\x6c\x8d\xa9\xcc\x65\x0a\x4a\xe8\xa2\x11\x05\x42\x61\x76\x48\x5a\xea\x02\x6a\xa4\x4a\x5a\xbf\x3c\x0b\x42\x67\x4c\xc9\x4a\x3a\xe1\xc2\xf7\x37\x72\x38\xfb\x94\x30\x56\x8b\x74\xeb\x8b\x54\x42\x6a\xc6\x64\x55\x1b\x72\xd0\x63\x51\x9c\x57\x2e\x66\x2c\x12\xb5\xc4\x67\x87\x3a\x14\xdd\xdd\x6c\xd0\x89\x1b\x88\xb7\x9f\x2d\x97\x26\xb9\x08\x5e\x89\x5a\x5a\xa4\x1d\x52\x52\x6f\x0b\x1f\xb3\x97\x80\xa4\x4b\x8f\x59\x54\xa1\x13\xbb\x8b\x3a\x95\x48\x4b\xa9\x91\xf6\xff\x25\x7b\x50\xb2\xbb\xf1\x2c\xce\x80\x89\xc8\x3a\x8d\x67\xf5\x4e\xf1\xad\x32\x45\xcc\xfa\x8c\x25\x09\xac\x83\x33\x1b\x9d\x7a\xfd\x7e\xc4\x98\x3a\x0b\x42\x29\x98\x2c\xa7\x16\x6c\xb3\xa9\xa4\x73\x9d\x19\x9c\xff\xbf\x41\xb8\x20\xcc\xbb\xaa\x5d\x9f\x50\x74\x31\x5d\x0c\xe1\xa9\x44\xfd\x23\xa8\x77\x89\xc8\x32\xcc\xa0\xf5\xf6\x57\x0a\x74\xe7\xb8\xa6\xce\x84\x3b\xdd\x98\x8e\x17\x67\xfe\x13\x78\x4d\x6e\xb2\x9c\xf6\x04\x41\xd7\x8d\x8f\x4f\x3a\x97\xb8\x93\xd8\xf6\xe1\xd3\x3b\x11\x5b\x1b\x6f\x8e\x03\x8b\xbc\x74\xfe\xb5\x77\xdb\xe7\x33\x9d\x9b\x5e\x1c\x4a\x7a\x7b\x43\x4a\x59\xdc\x67\x51\x4a\xd9\x12\xad\x69\x28\x45\x18\x8e\xe0\xb8\x02\xfe\x2b\x99\xa6\xee\x6e\xfc\x29\x7c\x08\x87\x43\x88\xdf\x93\x18\xbf\x3e\x10\x43\x88\x4f\x1b\x18\xc0\x29\x77\x08\x71\xda\x58\x67\x2a\xea\x0e\x32\xcc\xa5\x96\xc1\x83\xf1\x0b\x8b\x64\x0e\x82\xf8\x12\xbf\x37\x68\x1d\x7f\x25\xf4\x61\x04\xe7\xfc\x0e\x2c\x8a\x90\xc8\xf3\xcc\x2b\xc7\xef\x89\x0c\xe5\xbd\xf8\xb8\x44\x38\x95\xee\x76\xf6\x93\x8d\x07\xe7\xd9\x7d\x16\x1d\xa7\x11\xd2\x7a\x48\xe4\x4f\x08\x5d\x43\x1a\x9c\x79\x33\xbd\x0e\xf1\xc2\x58\x44\xa2\xf5\x3d\xcf\x18\x2e\x36\x7f\x63\xea\xf8\x52\xb4\x61\x82\x21\xfa\xce\x95\xe0\x93\x20\xfa\x44\x61\xfa\x2a\xfa\xf0\xc2\xa2\x0c\x2d\x92\x14\x4a\xfe\x83\x41\x52\x6a\x32\x4c\x2d\x7f\xd4\x72\x87\x64\x85\x9a\x9e\xc5\x7b\xfd\x30\xa3\xbf\x06\xfe\xaf\x1b\xc1\x79\x3e\x9f\xa2\x4f\xef\x91\x68\x07\xa0\xa5\x1a\xc0\xc7\x94\xb2\xfe\x5d\xc0\x7e\x18\xf9\xa3\x30\xbd\xff\x35\x80\x88\x82\xd5\x5e\x6d\x35\x1c\xbd\xe7\xc6\x63\xf0\xf0\x06\xce\xc7\x4a\x99\x16\x33\x18\x81\xa3\x06\x59\x10\xb2\x1b\x80\xd9\x06\xd1\x94\xf1\x07\xb1\x41\x65\xff\x88\x5b\xdc\x94\xc6\x6c\xaf\xf0\x16\xaf\x1c\x5a\x17\xff\x79\xe7\x51\x9e\xb7\x4f\x81\xd1\x08\x5e\x31\x99\xb4\xc2\xd7\x8d\x43\xf8\xc7\x2d\x73\xa1\x2c\xbe\x83\x58\xa2\x6d\x94\x83\x11\x7c\xec\x1c\xbf\x72\xc2\x35\xf6\xf0\x3b\x5a\x2b\x0a\xef\x57\xff\x26\xfa\xd5\xa6\x46\xfb\x9f\x24\xff\x54\xb6\x42\xfb\x97\x41\x79\xbe\xde\xb5\x7e\x36\x41\x6f\x18\xe1\xc7\xcb\x16\xec\x85\xfd\x1b\x00\x00\xff\xff\x03\xe3\xb1\xf0\x81\x07\x00\x00") - -func testImagesWebhookCrdGoBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookCrdGo, - "test/images/webhook/crd.go", - ) -} - -func testImagesWebhookCrdGo() (*asset, error) { - bytes, err := testImagesWebhookCrdGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/crd.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookCustomresourceGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x56\x51\x6f\xda\x48\x17\x7d\xf6\xfc\x8a\xfb\xf9\x21\x82\x8a\xd8\x81\xa7\x2a\x9f\x78\x60\x93\xac\x96\x6d\x17\x56\x40\x5a\x55\x51\xa4\x5e\xc6\x17\x7b\x8a\x3d\xe3\xce\x5c\xe3\xa2\x88\xff\xbe\x9a\xc1\xe9\x86\x26\xad\xb4\xda\xdd\xb7\x8d\x14\x21\x73\xcf\xdc\x73\xee\xb9\x07\x86\xf4\x95\xb8\x32\xf5\xde\xaa\xbc\x60\x18\x5d\x0c\x5f\xc3\xaa\x20\x78\xd3\xac\xc9\x6a\x62\x72\x30\x69\xb8\x30\xd6\x25\x42\xbc\x55\x92\xb4\xa3\x0c\x1a\x9d\x91\x05\x2e\x08\x26\x35\xca\x82\xa0\xab\x0c\xe0\x1d\x59\xa7\x8c\x86\x51\x72\x01\x3d\x0f\x88\xbb\x52\xdc\xff\xbf\xd8\x9b\x06\x2a\xdc\x83\x36\x0c\x8d\x23\xe0\x42\x39\xd8\xa8\x92\x80\xbe\x48\xaa\x19\x94\x06\x69\xaa\xba\x54\xa8\x25\x41\xab\xb8\x08\x24\x5d\x8b\x44\x7c\xe8\x1a\x98\x35\xa3\xd2\x80\x20\x4d\xbd\x07\xb3\x79\x8a\x02\x64\x21\x00\x00\x0a\xe6\xfa\x32\x4d\xdb\xb6\x4d\x30\xa8\x4c\x8c\xcd\xd3\xf2\x88\x72\xe9\xdb\xe9\xd5\xcd\x6c\x79\x73\x3e\x4a\x2e\x84\xb8\xd5\x25\x39\x07\x96\x3e\x37\xca\x52\x06\xeb\x3d\x60\x5d\x97\x4a\xe2\xba\x24\x28\xb1\x05\x63\x01\x73\x4b\x94\x01\x1b\xaf\xb3\xb5\x8a\x95\xce\x07\xe0\xcc\x86\x5b\xb4\x24\x32\xe5\xd8\xaa\x75\xc3\x27\x06\x3d\xaa\x52\x0e\x9e\x02\x8c\x06\xd4\x10\x4f\x96\x30\x5d\xc6\xf0\xd3\x64\x39\x5d\x0e\xc4\xfb\xe9\xea\x97\xf9\xed\x0a\xde\x4f\x16\x8b\xc9\x6c\x35\xbd\x59\xc2\x7c\x01\x57\xf3\xd9\xf5\x74\x35\x9d\xcf\x96\x30\xff\x19\x26\xb3\x0f\xf0\x66\x3a\xbb\x1e\x00\x29\x2e\xc8\x02\x7d\xa9\xad\xd7\x6e\x2c\x28\x6f\x1d\x65\x89\x58\x12\x9d\x90\x6f\xcc\x51\x8c\xab\x49\xaa\x8d\x92\x50\xa2\xce\x1b\xcc\x09\x72\xb3\x23\xab\x95\xce\xa1\x26\x5b\x29\xe7\x97\xe7\x00\x75\x26\x4a\x55\x29\x46\x0e\xcf\xcf\xc6\x49\xc4\xab\x54\x88\x1a\xe5\xd6\x37\xa9\x50\x69\x21\x54\x55\x1b\xcb\xd0\x13\x51\x4c\x5a\x9a\x4c\xe9\x3c\xfd\xe4\x8c\x8e\x85\x88\x2a\x62\xdc\x0d\x21\xde\xbe\x76\x89\x32\x29\xd6\xaa\x42\x59\x28\x4d\x76\x9f\xd6\xdb\xdc\xbf\xe1\x52\x0f\x4a\x77\x43\x8f\x7f\x02\x4c\x31\xeb\x74\xa5\xbb\xe1\x9a\x18\x87\xf1\x9f\xf5\x6d\x69\xf2\x58\xf4\x85\x90\x46\xbb\xc0\x2d\x1b\xc7\xa6\x5a\x90\x33\x8d\x95\xf4\x3b\xb2\x2c\x86\xe0\x7d\xd7\x39\x8c\xe1\xe3\x5d\x88\x46\xf8\x7b\x80\xd8\xd4\xf1\x25\xc4\x98\x65\xf1\x00\xe2\x1a\xb9\xf0\x8f\x69\x86\x8c\x69\xd5\x1c\x87\x3f\x77\x8c\x39\x9d\x0f\x3d\x62\x87\x65\x43\x1e\xb2\x27\x17\xc3\xe1\xd8\xea\xfe\xe3\x8b\xa4\xa3\x7f\x80\x74\xf4\x23\xd2\xbe\x10\x9b\x46\x4b\x08\x67\xe8\xea\x44\x41\x0f\x2d\x74\x66\x25\x93\x47\xfb\x16\xb4\x53\xd4\xf6\xe1\xd5\x0b\x15\x57\x1b\x9f\x93\x07\x11\x79\x47\x93\x77\xbd\x51\x3f\x99\xea\x8d\xe9\xc5\x47\x49\x3a\x87\xe3\x8c\x60\x3b\x8a\xb8\x2f\x22\x69\xe1\x72\xec\xe7\x6c\x24\xfb\xb3\xdd\x9a\x93\xf9\xfa\x13\x49\xfe\x8d\x18\x45\x14\x5d\x23\x23\x54\x58\xdf\x1d\xfd\xb8\x3f\xbe\x88\xe8\xf0\x70\x10\x22\xb2\xd8\xfa\x1e\x68\x93\x05\x7d\x6e\xc8\x71\x77\x38\x59\x60\x2b\x22\xb2\x81\xc1\xa7\x28\xb9\xd5\x15\x5a\x57\x60\xd9\xb3\xd8\x0e\xe0\x4c\xda\xbe\x88\xd4\x06\x3c\xe6\x7f\x63\xd0\xaa\x0c\x12\x82\xfe\x1b\x6b\x8d\xed\x91\xf5\x90\xc8\x12\x37\x56\x03\x9b\x67\xf3\x76\x88\xa0\x23\x98\xf3\xd5\x88\xcb\xf1\x4b\xfe\x1d\x8b\x0f\x87\x6f\xe1\xc9\xa4\x2c\x4d\x4b\x19\x8c\x81\x6d\x43\x22\xe8\x92\x36\xf1\xa3\xdf\xc5\x4f\x97\x6a\x39\xbe\x87\xf1\xb8\x5b\xe6\x43\x50\x77\xd2\x29\x64\x07\xc6\x70\x77\xbf\xde\x33\xf5\x5e\x4a\x73\x50\xfc\x5d\x86\x90\xd5\xbf\xcb\x31\x3a\x72\xd4\xfc\xd4\x88\x50\x59\xed\x6b\xfa\x75\x39\x9f\x85\x87\x67\x3e\x7c\x85\xc0\x18\xce\x6a\x16\x8f\xde\x9f\x9d\xe2\xc4\xa1\xcb\xae\xff\x68\xf3\xbf\x16\xdd\xd0\xfd\xbf\xec\xfe\xb5\xec\x46\xfe\xae\xd8\x0e\x60\xe7\xfb\x58\xd4\x39\x3d\xe6\x2c\x48\x54\x1b\xd8\x86\x70\xb5\xb4\x2e\x8c\xd9\x9e\xd3\x88\xce\x99\x1c\xc7\x70\x76\x06\xbb\x93\x52\xa6\x1c\xfa\xe6\xc7\x10\x7e\x9f\x77\x83\xa5\xa3\x17\x10\x0b\x72\x4d\xc9\x3e\x4a\xdd\x6e\x96\x8c\xdc\xb8\xd0\x2c\x5a\x10\x3a\xa3\x2f\x21\xf6\xb7\xd2\x37\xfb\x05\x69\xb4\xff\x81\xe0\x2f\xae\x16\xb5\xbf\x6f\xfd\xd7\x6b\x3c\xf0\x27\x0f\x22\xfc\x1f\x7e\x10\xce\x3f\x02\x00\x00\xff\xff\x38\x30\xcb\x33\x13\x09\x00\x00") - -func testImagesWebhookCustomresourceGoBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookCustomresourceGo, - "test/images/webhook/customresource.go", - ) -} - -func testImagesWebhookCustomresourceGo() (*asset, error) { - bytes, err := testImagesWebhookCustomresourceGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/customresource.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookMainGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\x6d\x8f\xdb\xb8\x11\xfe\x6c\xfe\x8a\x39\x01\x09\xe4\x40\x2b\x25\xe9\x15\x38\xf8\xe0\x0f\x4e\x9c\x34\xc6\xed\xcb\xc1\xf6\x5e\x70\x28\x8a\x82\x16\xc7\x32\xbb\x14\xa9\x92\x94\x7d\x6e\xb0\xff\xbd\x18\x52\xf6\x3a\x5e\x3b\x9b\x76\x2f\x08\xe0\x95\x38\xf3\xcc\xdb\x33\x8f\xa4\xe2\x15\x7b\x6f\x9a\xad\x95\xd5\xca\xc3\xdb\xd7\x6f\x7e\x82\xf9\x0a\xe1\x97\x76\x81\x56\xa3\x47\x07\xa3\xd6\xaf\x8c\x75\x39\x63\x97\xb2\x44\xed\x50\x40\xab\x05\x5a\xf0\x2b\x84\x51\xc3\xcb\x15\x42\x77\x92\xc1\x6f\x68\x9d\x34\x1a\xde\xe6\xaf\x21\x25\x83\xa4\x3b\x4a\xfa\x3f\xb3\xad\x69\xa1\xe6\x5b\xd0\xc6\x43\xeb\x10\xfc\x4a\x3a\x58\x4a\x85\x80\x7f\x94\xd8\x78\x90\x1a\x4a\x53\x37\x4a\x72\x5d\x22\x6c\xa4\x5f\x85\x20\x1d\x44\xce\x7e\xef\x00\xcc\xc2\x73\xa9\x81\x43\x69\x9a\x2d\x98\xe5\xa1\x15\x70\xcf\x18\x00\xc0\xca\xfb\x66\x50\x14\x9b\xcd\x26\xe7\x21\xcb\xdc\xd8\xaa\x50\xd1\xca\x15\x97\x93\xf7\x1f\xae\x67\x1f\x2e\xde\xe6\xaf\x19\xbb\xd5\x0a\x9d\x03\x8b\xff\x6e\xa5\x45\x01\x8b\x2d\xf0\xa6\x51\xb2\xe4\x0b\x85\xa0\xf8\x06\x8c\x05\x5e\x59\x44\x01\xde\x50\x9e\x1b\x2b\xbd\xd4\x55\x06\xce\x2c\xfd\x86\x5b\x64\x42\x3a\x6f\xe5\xa2\xf5\x5f\x35\x68\x97\x95\x74\x70\x68\x60\x34\x70\x0d\xc9\x68\x06\x93\x59\x02\xef\x46\xb3\xc9\x2c\x63\x9f\x27\xf3\x4f\x37\xb7\x73\xf8\x3c\x9a\x4e\x47\xd7\xf3\xc9\x87\x19\xdc\x4c\xe1\xfd\xcd\xf5\x78\x32\x9f\xdc\x5c\xcf\xe0\xe6\x23\x8c\xae\x7f\x87\x5f\x26\xd7\xe3\x0c\x50\xfa\x15\x5a\xc0\x3f\x1a\x4b\xb9\x1b\x0b\x92\x5a\x87\x22\x67\x33\xc4\xaf\x82\x2f\x4d\x4c\xc6\x35\x58\xca\xa5\x2c\x41\x71\x5d\xb5\xbc\x42\xa8\xcc\x1a\xad\x96\xba\x82\x06\x6d\x2d\x1d\x0d\xcf\x01\xd7\x82\x29\x59\x4b\xcf\x7d\xb8\x7e\x54\x4e\xce\x5e\x15\x8c\x35\xbc\xbc\x23\x90\x9a\x4b\xcd\x98\xac\x1b\x63\x3d\xa4\xac\x97\xa0\x2e\x8d\x90\xba\x2a\xfe\xe5\x8c\x4e\x58\x2f\x59\x2a\x5e\x85\xdf\xda\xd3\x8f\x34\x85\x34\xad\x97\x8a\x2e\x34\xfa\x82\x66\x95\x30\xd6\x4b\xee\x7e\x72\xb9\x34\x05\x6f\x64\xc1\x45\x97\x4f\xb1\x7e\xb3\x40\xcf\xdf\x24\xac\x57\xa3\xe7\xeb\x37\x70\x60\x56\xf3\x72\x25\x35\xda\x6d\xd1\xdc\x55\x74\xc3\x15\x64\x54\xac\xc9\x7c\x67\x77\xa7\x0c\x85\x2f\x0a\x98\xdf\x8c\x6f\x06\xe0\xed\x36\x92\x4f\xc9\x85\xe5\x74\x61\xc0\x21\x82\x5c\x82\xf4\x50\xa1\x46\xcb\x89\xfa\xa5\xb1\x16\x4b\x0f\x54\x06\x34\xdc\x97\xab\x00\x42\xd9\xba\x41\x51\x54\xd2\xaf\xda\x45\x5e\x9a\xba\xa8\xb9\xf7\x0b\x2e\xad\x08\x25\x47\xd3\x3e\x63\x45\x01\xde\x8c\x76\x85\x4c\xd1\x35\xa6\x23\x03\x87\x15\xaa\x06\x2d\x2c\x5b\x5d\x52\x97\x29\x87\xd2\x22\xf7\x48\xcc\x78\xe4\x43\x50\x61\x21\xb8\x06\xac\x17\x28\x04\x0a\x40\x6b\x8d\x65\x84\x70\x2a\x4c\x8a\xd6\x46\x93\x3e\xbc\xea\x7a\x98\x3f\x4e\xe6\x0b\xeb\x59\xf4\xad\xd5\xf0\xf2\xac\xd1\x17\xd6\xeb\x4d\xd1\xb5\xca\x0f\xe0\x65\x1c\x42\x3e\xf3\xdc\xb7\x8e\x4e\x7a\x57\xe8\x1c\xaf\x70\x40\xd1\xf2\x0f\x14\x31\xed\x67\xac\xd7\xbb\xcf\x58\xef\x9e\xdd\x87\x3e\xd0\x38\xfd\x47\x4a\x55\xba\x40\x25\xbf\x6d\x10\x36\x18\x94\x80\x08\xca\x95\xa2\x55\x36\xad\x85\x35\x57\x52\x70\x6f\x6c\xa0\x22\xd4\xad\x0f\x17\x2c\xb8\x3c\x00\x51\xe1\xe9\x89\x9c\xd7\x12\x37\xdf\x2a\x39\xe4\xe3\xd0\xae\x11\x56\x5c\x0b\x85\x31\x21\x1a\x2b\x10\x87\x69\x1a\x66\x09\x3c\xe8\x01\x3a\x0f\x8d\x95\xb4\x41\x26\x98\xd3\xb2\x78\x43\x73\x08\x99\x10\xd6\x6e\x86\x71\x14\x01\x39\xdd\x04\xbc\x7c\x17\xf3\xb3\x95\x1e\x6d\x06\x16\x5e\x75\xf7\x03\x74\x16\x41\x1e\x8a\xea\xd3\x3c\xd6\xdc\xc2\xc2\x88\x2d\xfc\xfd\x1f\x8b\xad\x47\xd6\x93\x4b\xb0\xf9\x3b\xba\xf3\xc3\x10\xb4\x54\x64\x44\x37\x05\xf7\x3c\xa3\xae\xc3\x60\x08\x71\xa5\xf2\x29\x72\x31\x52\x2a\x8d\x0e\xfd\x9f\xc3\xf1\xf0\xc1\xad\x17\x90\x87\xc1\x97\x66\x44\x23\x0a\xb4\x5e\xa3\x95\xcb\x6d\x68\x45\x69\xb4\x47\xed\xe3\x8c\x88\xad\x65\xd9\xd2\x4a\xb0\x5e\x77\x32\xa7\x83\xc1\x10\x6c\xfe\x09\xb9\x40\x9b\xff\x0d\x7d\x9a\xbc\x8f\x87\x17\x74\x9a\xf4\x43\xda\x87\xf6\x3f\x0c\x21\xe9\x64\x95\xba\x15\xd5\x21\xe4\x44\x0b\x1a\x89\xb3\x4c\x93\x03\x97\xe1\x0b\x97\x91\xc2\xd1\x12\x3e\xf2\xcc\x0e\xc1\xfb\xac\xd7\xd1\x38\xd6\x13\x10\x7f\x4b\xdf\xf6\xf3\x89\x5e\x9a\x74\x59\xfb\x7c\xd6\x58\xa9\xfd\x32\x4d\xc2\xd0\x69\x8c\xdd\x7c\x07\xf0\xc2\x25\x59\xe8\x78\xbf\x1f\x7b\x41\xcf\xc0\x23\x46\x81\x5f\x71\x0f\x1b\xee\xc0\x85\xd6\x98\xd0\xa9\x0d\x2e\x56\xc6\xdc\xd1\x0e\x05\x2c\x14\xc7\x6e\x83\x21\x9c\xe1\xe8\x97\xfb\xa7\x82\x49\xa5\x60\x81\x10\x0b\x43\x41\x51\x22\x9d\xfe\xc7\x20\x02\x1d\x5a\xc9\x95\xfc\x0f\x06\xaa\x94\x46\x60\xe9\xf2\x5b\x2d\xd7\x68\x1d\x57\xe3\x83\xf3\x34\x0e\xee\x9f\x19\xfd\xef\xa8\x75\xe8\x9f\x8f\x91\xdc\x53\x6a\x57\x46\xac\xca\xe0\xe5\xb9\xe2\x3b\xf6\x1d\x90\xf6\x61\xd2\x24\x4f\x71\x6a\x27\x4b\xda\x6f\x0e\x0c\xcf\x89\x5b\x9f\xf5\xee\x01\x55\xd4\x30\x6a\x64\xc3\x9d\x0b\xbb\xb9\xdb\xa6\xef\x83\x0f\xe6\xe9\xd9\x1a\xf6\x0b\x32\x8d\x32\x19\x9e\xa4\xbc\x46\xb8\x9d\x8c\xcf\x4e\x64\x8f\x9f\xdf\x4e\xc6\x30\x84\x73\xe8\x3b\x21\x20\xb3\x27\x68\xeb\x30\x8a\xcf\x2e\xe2\x00\x5e\xac\x93\x0c\x9e\x4a\x20\x50\x9a\x8c\xde\x6d\x3d\xba\xfd\x48\x69\x85\xf2\x2b\x6e\xdd\x8a\xab\xf4\x0c\x46\x64\xc2\x53\x13\xbc\xdf\xf1\xa5\x43\xde\xe4\x41\xec\xd2\x7d\xcc\xef\x60\x41\x78\x4a\x3c\xa8\xe7\x48\x6d\xf8\xd6\x8d\x94\x32\x9b\x31\x2a\xbe\xfd\x28\xd7\x38\xc3\xd2\x68\xe1\xbe\x53\x58\x83\x8e\x76\x4a\x9c\x81\xcd\x80\x9f\x87\xec\x9f\x0a\x3e\x46\xbd\x7d\x5e\x2c\x42\x38\x86\x16\xe2\x92\x2f\x50\xfd\xdf\xc0\x9d\xff\x11\xec\xaf\xe6\x19\x7d\x21\xf2\x13\xc0\x71\xaa\xde\x87\x57\xab\xea\x39\xe0\x02\xf5\x76\xd6\xbd\x74\x46\xc0\x1a\xb5\x3f\x8a\x74\x45\x8f\xf7\x67\xd5\x50\xef\x11\x8e\xa0\xdf\x1b\xbd\x94\x55\xcd\x9b\xe7\xb5\x27\xc2\x5c\xf1\xe6\x18\x3f\xa6\xfe\xfc\x28\xf5\x11\xce\x71\x19\xad\xf3\xa6\x9e\xa2\x33\xad\x2d\xbf\xf7\xd5\xe2\x4c\x29\x5f\x41\x9d\x2e\xe7\x4f\x89\x56\x9f\xc0\x3a\x2e\x6b\x3a\x7e\x5e\x2d\xd3\xf1\x03\x22\x7d\x84\xa4\xc1\x2e\x88\xcb\x44\x4b\xff\x51\xf1\xca\xa5\x5a\xaa\x7e\x7c\xa5\x2a\x43\x7f\x21\xb6\x39\xbc\xca\x2c\x65\x95\x73\x21\xa2\x61\x9f\xf5\xe8\x3b\x25\xff\x95\x5b\x87\x29\xa9\x66\x48\xe1\x53\x78\x45\xa4\xa7\x49\x9a\x14\x71\xb3\x2f\x38\xc9\xc8\x85\x20\x1d\xb9\xf8\x2b\xbd\x3b\x3c\xa5\x5a\xfd\x6f\x80\xd1\x92\x7c\x0d\x11\x95\xe3\x94\x87\x10\x17\x8a\x04\x60\x6f\xbf\x17\x84\x13\xd6\x8d\x11\xfb\xdc\xe2\x72\x9c\x31\x2a\x78\xd8\xcd\x3d\xe8\xe1\xea\x9f\x74\x0a\xc3\x95\xba\xba\x38\x0c\x71\x75\xb0\x85\x27\x7c\xca\x3d\xbb\x77\x0e\x87\x7c\xff\x56\x90\xc7\x9e\xc7\x7b\x77\x3a\x60\xe0\xde\x85\xed\xc8\xb7\x8f\x7a\x44\xc9\x6f\x46\x3e\x0d\x71\x6a\x4f\x4e\xa7\x60\xc5\x3e\x2c\x91\x35\x72\x38\x3c\x25\x5f\x06\xeb\x59\xb8\xa6\x47\xe2\x48\x08\x3b\x80\xf0\x2f\x19\xfc\xf8\xe3\x5f\x12\xfa\x80\x9a\x5f\xce\x62\x91\x83\x8e\xbc\xf3\xcb\x59\x1a\xff\xea\x87\x6f\xab\x0e\x30\xbf\x94\xce\xa3\x1e\x69\x11\x00\xc9\x2a\x49\x32\x48\x12\xda\x8f\xff\x06\x00\x00\xff\xff\x53\xd3\x9c\x6d\xe2\x11\x00\x00") - -func testImagesWebhookMainGoBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookMainGo, - "test/images/webhook/main.go", - ) -} - -func testImagesWebhookMainGo() (*asset, error) { - bytes, err := testImagesWebhookMainGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/main.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookPatch_testGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xdc\x56\x4b\x6f\xdb\x38\x10\x3e\x8b\xbf\x62\xaa\xc5\x16\x76\xe1\x48\x4d\x4e\x85\x17\x3d\x78\x93\x14\xeb\x3e\xec\x22\x76\xb6\x28\xd2\x60\x41\x53\x63\x89\x89\x44\xb2\x24\x15\xc7\x28\xfc\xdf\x17\xa3\x47\x2c\xe7\x55\x2f\xd0\xd3\x1e\x62\x49\x9c\x8f\xf3\x7d\x33\x43\xce\x24\x7e\xc5\x8e\xb5\x59\x5b\x99\x66\x1e\x8e\x5e\x1f\xbe\x81\x79\x86\xf0\xa1\x5c\xa0\x55\xe8\xd1\xc1\xa8\xf4\x99\xb6\x2e\x62\xec\xa3\x14\xa8\x1c\x26\x50\xaa\x04\x2d\xf8\x0c\x61\x64\xb8\xc8\x10\x1a\xcb\x00\xfe\x46\xeb\xa4\x56\x70\x14\xbd\x86\x1e\x01\xc2\xc6\x14\xf6\xff\x60\x6b\x5d\x42\xc1\xd7\xa0\xb4\x87\xd2\x21\xf8\x4c\x3a\x58\xca\x1c\x01\x6f\x05\x1a\x0f\x52\x81\xd0\x85\xc9\x25\x57\x02\x61\x25\x7d\x56\x91\x34\x2e\x22\xf6\xb5\x71\xa0\x17\x9e\x4b\x05\x1c\x84\x36\x6b\xd0\xcb\x2e\x0a\xb8\x67\x0c\x00\x20\xf3\xde\x0c\xe3\x78\xb5\x5a\x45\xbc\x52\x19\x69\x9b\xc6\x79\x8d\x72\xf1\xc7\xf1\xf1\xe9\x64\x76\x7a\x70\x14\xbd\x66\xec\x5c\xe5\xe8\x1c\x58\xfc\x5e\x4a\x8b\x09\x2c\xd6\xc0\x8d\xc9\xa5\xe0\x8b\x1c\x21\xe7\x2b\xd0\x16\x78\x6a\x11\x13\xf0\x9a\x74\xae\xac\xf4\x52\xa5\x03\x70\x7a\xe9\x57\xdc\x22\x4b\xa4\xf3\x56\x2e\x4a\xbf\x93\xa0\x56\x95\x74\xd0\x05\x68\x05\x5c\x41\x38\x9a\xc1\x78\x16\xc2\x9f\xa3\xd9\x78\x36\x60\x5f\xc6\xf3\xbf\xa6\xe7\x73\xf8\x32\x3a\x3b\x1b\x4d\xe6\xe3\xd3\x19\x4c\xcf\xe0\x78\x3a\x39\x19\xcf\xc7\xd3\xc9\x0c\xa6\xef\x60\x34\xf9\x0a\x1f\xc6\x93\x93\x01\xa0\xf4\x19\x5a\xc0\x5b\x63\x49\xbb\xb6\x20\x29\x75\x98\x44\x6c\x86\xb8\x43\xbe\xd4\xb5\x18\x67\x50\xc8\xa5\x14\x90\x73\x95\x96\x3c\x45\x48\xf5\x0d\x5a\x25\x55\x0a\x06\x6d\x21\x1d\x15\xcf\x01\x57\x09\xcb\x65\x21\x3d\xf7\xd5\xf7\x83\x70\x22\xf6\x2a\x66\xcc\x70\x71\x4d\x4e\x0a\x2e\x15\x63\xb2\x30\xda\x7a\xe8\xb1\x20\x44\x25\x74\x22\x55\x1a\x5f\x39\xad\x42\x16\x84\x16\x97\x39\x0a\x4f\xaf\x1e\x1d\x25\x2e\x64\x2c\x20\xab\xe1\x5e\x64\x10\xa6\xd2\x67\xe5\x22\x12\xba\x88\xf1\x86\x2b\x93\xdd\x56\x7b\x0f\x2a\x73\xc8\x02\xa1\x2d\xde\x1c\x42\x78\xfd\xc6\x45\x52\xc7\xdc\xc8\x98\x96\xe2\x9b\x43\xf2\xb9\x5d\x2d\xb8\xc8\xa4\x42\xbb\x8e\xcd\x75\x4a\x0b\x2e\x2e\xd0\xf3\xf8\xe6\x30\x2e\x95\xf3\xb6\x14\xbe\xb4\x98\x84\xac\xcf\xd8\xb2\x54\x02\xe6\xe8\xfc\x67\x22\x41\xd7\xf3\xf0\xaa\x51\x17\xcd\xfb\xf0\x83\x05\xf4\x75\xcc\x1d\x3a\x18\xbe\x85\x8b\xcb\x7a\x3f\x19\x82\x5a\x36\x00\x50\x49\x55\xca\x82\x40\x2a\xe9\x25\xcf\x01\xa4\xf2\x68\x97\x5c\xe0\x8f\x0d\x0b\x02\xbc\x35\x28\xa8\xe2\xbb\xcb\x5e\x13\x31\xdc\x43\x6f\xc8\x35\xfd\xd5\xfe\x87\x20\xb4\x5a\xca\xf4\x13\x37\x95\xc4\xc3\x01\x99\x1a\x22\x32\x52\x4e\xa2\xe3\x16\x53\x6d\x0c\x4e\xb8\xe7\x43\x28\xb8\xb9\xa8\xa5\x5d\xd6\x8f\xda\x18\x84\x45\x59\x17\xf5\xc0\x79\x6e\x7d\x38\x84\x70\x8d\x2e\xac\x1c\x07\x9b\xea\x51\xff\xb6\xba\x87\xf0\xf2\xd7\xf0\x40\x97\x69\xd7\x9e\xe2\xc1\xe1\x93\x4a\xaa\x9f\xa7\x73\x72\xf4\xff\xcd\xc9\xd1\x73\x39\xb9\x97\x14\xa3\x13\x37\x56\xd2\x1f\x6b\x45\xad\x11\x6d\x95\x9c\x47\x73\xf3\x59\x27\xb5\xa0\x99\x41\xd1\x5d\xa5\xef\x46\xea\x8e\x2b\x37\x84\x8b\xcb\x6d\xc0\xf5\xe2\x8f\xcd\x3e\xf9\xf9\x45\x5c\x35\x30\x68\x9f\xc1\xb8\xe0\x29\x52\xfa\x00\xc2\x15\x2e\x32\xad\xaf\x0f\x78\x92\x60\x72\x20\xc9\xd2\x26\x34\x08\x26\xbc\x68\x70\x0f\x80\x4a\xfa\x03\xd1\x32\x6c\x77\x9c\xa1\xd3\xa5\x15\xe8\xee\xd4\xb6\x2b\x67\xf5\x70\x28\x50\x79\xd7\x46\xdf\x46\x7e\xf7\xbc\x77\x70\x37\x2c\xa0\xde\xfb\xcf\x00\xa8\x95\x08\xee\x90\x3a\x89\xe5\x2a\x45\xd8\x36\x17\x8a\x4b\x2f\xae\xde\xcf\x06\x80\xd6\x12\x82\x7a\x5f\xf4\x89\x5b\x97\xf1\xbc\xd7\x6e\x8d\x9a\x4a\xf6\xa9\xdb\x2c\x2b\xe8\x8b\xb7\xa0\x64\x5e\x39\x08\x7c\xf4\x8e\x7b\x9e\xf7\xd0\x5a\x42\x6c\xda\x2e\x35\x5d\x5c\xed\xf8\xad\x16\xa3\x13\x14\x3a\xc1\xea\x94\xf4\x2e\x2e\x17\x6b\x8f\x5b\x9e\x0a\xd1\xdf\x97\xa6\xe5\xc1\xa4\x13\x40\xcb\x1c\x8d\x8c\xc9\xd7\xbd\x2a\xba\xfd\x75\xeb\xc5\xd5\x7c\x6d\xea\x5c\xd5\x93\x23\xa2\xef\xe9\xf2\xd1\x5c\x10\x9a\x9a\x69\x07\x3d\xc1\x55\xaf\x71\xd2\x8f\xc6\x6d\x8b\xed\x11\x9a\xe8\x9b\x04\x9f\xab\xa2\x49\x71\x27\x80\xc6\xdb\xfe\x62\xe5\x12\x5e\xb4\xbc\x27\x88\xe6\xf4\x7b\xc9\xf3\x5e\xe3\x66\x5b\xf8\xa8\xbd\x1d\xfd\xd6\xd3\xa9\xb5\xda\x2e\x7b\xe1\x37\x75\x37\x24\x7e\xff\xed\xe6\x9b\x1a\x40\xaa\x3d\xbd\x86\x8f\xec\xde\x11\x48\x23\x83\xb1\x4d\x67\x94\xbd\x9f\x4d\x27\x55\x51\xdf\x69\x7b\xde\x19\x78\x0f\x67\x9b\xa8\xea\xf4\xb2\x3b\x15\xa3\xee\x0e\x12\x39\x5d\x5c\xa1\xf0\x3b\x1d\xad\x33\xaf\xaa\x30\xc2\x6b\xa9\x92\xb0\xb9\x63\x10\xce\x74\x81\x3e\xa3\xf9\x5e\x5d\x84\x90\x1b\xd9\xfc\x4b\x48\xcd\xcc\xe9\x02\x53\xab\x4b\x43\x73\xbb\x06\x24\xdc\xf3\xf0\x59\x86\x67\xfb\x73\xf7\xa6\x09\xfb\xd4\x0d\x12\x54\xac\x87\xd5\xdc\x2d\x26\x9d\xe4\xff\x76\x61\xee\x4d\xe7\xfe\x5e\x24\x3f\xbf\x2c\x14\x47\xff\x0e\x37\x5d\x5c\x11\xe6\xe9\x3a\x6d\xd8\x4f\xcf\xf4\xcb\xad\xaf\xfd\x34\xb6\xa7\x8d\x06\x1a\xb1\x3f\x5d\x9e\x67\x87\xda\x73\x53\x9e\xd2\xfd\xf8\xd5\xd9\x8a\x8d\xea\x03\x78\x51\x9f\x92\xcb\x01\x74\x75\xf5\x1b\xe9\xfb\x5c\xa3\xee\xbe\x01\x3c\x49\x50\x05\xbf\x61\xff\x06\x00\x00\xff\xff\x14\x92\x20\x7b\x13\x0d\x00\x00") - -func testImagesWebhookPatch_testGoBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookPatch_testGo, - "test/images/webhook/patch_test.go", - ) -} - -func testImagesWebhookPatch_testGo() (*asset, error) { - bytes, err := testImagesWebhookPatch_testGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/patch_test.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookPodsGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x57\x5f\x6f\xdb\xc8\x11\x7f\xe6\x7e\x8a\xf1\x16\x97\x93\x52\x8a\x8c\xfd\x74\x90\xab\x07\x35\x49\x5b\xf5\x52\x3b\x30\x9d\x3b\x1c\xd2\xe0\xb2\x22\x47\xe4\xd6\xe4\xee\xde\xee\x52\x8a\xaa\xd3\x77\x2f\x66\x49\xc9\x52\xac\xe0\x9a\xd4\x29\xfa\x50\x20\x40\xa0\x9d\x7f\xbf\xf9\xf7\xe3\x38\x7d\xca\x9e\x6b\xb3\xb6\xb2\xac\x3c\x5c\x3c\x3b\xff\x0e\x6e\x2b\x84\xef\xdb\x39\x5a\x85\x1e\x1d\x4c\x5b\x5f\x69\xeb\x12\xc6\x5e\xc9\x1c\x95\xc3\x02\x5a\x55\xa0\x05\x5f\x21\x4c\x8d\xc8\x2b\x84\x5e\x12\xc3\x0f\x68\x9d\xd4\x0a\x2e\x92\x67\x30\x20\x05\xde\x8b\xf8\xf0\x92\xad\x75\x0b\x8d\x58\x83\xd2\x1e\x5a\x87\xe0\x2b\xe9\x60\x21\x6b\x04\xfc\x90\xa3\xf1\x20\x15\xe4\xba\x31\xb5\x14\x2a\x47\x58\x49\x5f\x85\x20\xbd\x8b\x84\xfd\xd4\x3b\xd0\x73\x2f\xa4\x02\x01\xb9\x36\x6b\xd0\x8b\x43\x2d\x10\x9e\x31\x00\x80\xca\x7b\x33\x4e\xd3\xd5\x6a\x95\x88\x80\x32\xd1\xb6\x4c\xeb\x4e\xcb\xa5\xaf\x66\xcf\x5f\x5e\x65\x2f\x47\x17\xc9\x33\xc6\xde\xa8\x1a\x9d\x03\x8b\xbf\xb4\xd2\x62\x01\xf3\x35\x08\x63\x6a\x99\x8b\x79\x8d\x50\x8b\x15\x68\x0b\xa2\xb4\x88\x05\x78\x4d\x38\x57\x56\x7a\xa9\xca\x18\x9c\x5e\xf8\x95\xb0\xc8\x0a\xe9\xbc\x95\xf3\xd6\x1f\x15\x68\x87\x4a\x3a\x38\x54\xd0\x0a\x84\x02\x3e\xcd\x60\x96\x71\xf8\xe3\x34\x9b\x65\x31\xfb\x71\x76\xfb\x97\xeb\x37\xb7\xf0\xe3\xf4\xe6\x66\x7a\x75\x3b\x7b\x99\xc1\xf5\x0d\x3c\xbf\xbe\x7a\x31\xbb\x9d\x5d\x5f\x65\x70\xfd\x27\x98\x5e\xfd\x04\xdf\xcf\xae\x5e\xc4\x80\xd2\x57\x68\x01\x3f\x18\x4b\xd8\xb5\x05\x49\xa5\xc3\x22\x61\x19\xe2\x51\xf0\x85\xee\xc0\x38\x83\xb9\x5c\xc8\x1c\x6a\xa1\xca\x56\x94\x08\xa5\x5e\xa2\x55\x52\x95\x60\xd0\x36\xd2\x51\xf3\x1c\x08\x55\xb0\x5a\x36\xd2\x0b\x1f\x7e\x3f\x48\x27\x61\x4f\x53\xc6\x8c\xc8\xef\xc8\x49\x23\xa4\x62\x4c\x36\x46\x5b\x0f\x03\x16\xf1\x45\xe3\x39\x8b\x38\xa5\xab\x4a\xc7\x19\x8b\x72\x6d\x71\x79\x0e\xfc\xee\x3b\x97\x48\x9d\x0a\x23\x53\x7a\x4a\x97\xe7\x9c\x45\x0d\x7a\x71\x2c\x6c\x44\x5e\x49\x85\x76\x9d\x9a\xbb\x92\x1e\x5c\x4a\x4a\x41\x9d\x45\x87\x5e\x44\xd1\xa3\x4e\x97\xe7\x73\xf4\x82\xfc\xed\xe4\x77\xb5\x2e\x39\x1b\x32\x96\x6b\xe5\x02\x32\xa3\x0b\x37\x53\xd2\x3f\xd7\x8a\x26\x08\xed\x6b\xe1\xf3\x0a\x3a\xa0\x30\x81\xf7\x6f\x59\x14\xc1\x86\x6b\xc3\xc7\x5c\x14\x05\x8f\xb9\x11\xbe\xe2\x63\x9e\x52\xed\x52\x79\x68\xeb\x78\xcc\x97\xa2\x6e\x91\x8f\xdf\x6e\xb8\x6c\x44\x89\x7c\xcc\x57\x38\xaf\xb4\xbe\x1b\x89\xa2\xc0\x62\xd4\xbd\xc6\x5c\x89\xe6\x84\x50\x49\x3f\xca\x77\xee\x78\xcc\x2d\x3a\xdd\xda\x1c\x1d\x1f\x6f\xb6\xdb\x77\x5b\x16\xbd\x7b\x4f\xf8\xd3\x14\xb4\xaa\xd7\x20\xea\x5a\xaf\x80\x92\xa0\x29\x34\x6d\x5d\x43\x08\xe0\x60\x61\x75\x73\xdf\x5e\x8b\x25\xcd\xda\x3a\x61\x8b\x56\xe5\x40\x35\xf2\xaf\x75\xe1\x06\xc2\x42\x5f\xa6\x64\xba\x2b\xdc\x0d\x2e\x25\xae\x86\xf0\xf4\x84\xc4\x19\x4d\xf3\xb3\x61\x11\xd5\x32\xf9\x61\x70\x31\x4c\x66\x6a\xa1\x07\x3c\xf8\xf4\x61\x70\x74\xe1\xf8\x30\xd4\xf6\xa6\xc7\x0f\xe3\x09\x74\x4d\x4d\xfe\x6c\x75\x6b\x7a\x56\xd8\x89\x37\xe1\x71\x0c\x9c\xef\x09\x63\x0c\x7c\x79\xce\x63\xd8\xa9\x8c\x81\x07\xbf\x5b\x16\xc9\x05\x08\x9b\xdc\xe0\x2f\x2d\x3a\x9f\xec\x43\x9c\x4d\xe0\x30\xe2\x86\x45\x11\x5a\x4b\x91\x17\x8d\x4f\x5e\x5a\xab\xed\x62\xc0\xf1\x83\xc1\xdc\xc3\xae\xb0\x54\xb6\x39\xc2\x37\x8e\xc7\x87\xd6\x43\x16\x75\x09\x06\xb3\x01\x5a\x4b\x2f\x16\x7d\x6b\x15\x78\xfd\xa0\x20\xbd\xc6\x96\xb1\xc8\x8a\x15\xc5\x3c\x40\x78\x3d\xff\x07\xe6\x3e\xb9\x11\xab\x50\x13\x92\x76\xd3\x9f\xbc\xd6\xc5\x66\xcb\xa2\x02\x1d\x5a\x29\x6a\xf9\x4f\xb4\x9d\xb4\xc0\xdc\x25\x6f\x94\x5c\xa2\x75\xa2\x7e\x71\x20\x1f\x0c\x43\x01\x7e\x8e\xe9\x5f\x9f\xdf\xa1\x7d\xf2\x02\xc9\x7c\x60\xc5\x2a\x06\x25\xeb\x18\x9e\x18\x5d\x0c\x2f\x83\xee\xd9\x84\x9e\x42\x69\xbe\x28\xbb\xc8\x86\xd1\xd8\x8f\xc1\x78\x72\x6a\x7a\x3a\xe1\xe6\x81\x7a\x32\xa5\x69\xc5\x02\x26\xe0\x6d\x8b\x8c\x45\x4b\x61\xa1\x71\x65\xbf\x6e\x21\xb1\x65\x0c\xfa\x8e\x1c\x1b\x5d\x24\xaf\xc4\x1c\x6b\xf7\x76\xbf\x25\x78\x81\x23\x8f\xce\xf3\x77\x97\xa4\x45\x79\x90\x09\x4c\x26\xb0\xd7\x29\xa4\x0b\x5b\xc1\x83\xf8\xd3\x10\x16\xa2\x76\x48\x1a\x04\x60\x12\x60\xfc\x1e\x38\x51\x1a\xf5\xa8\x5f\x42\x62\xba\x95\x50\x44\xd0\x35\x61\xb9\x04\xce\x22\x2a\xc4\x41\x5c\x21\xfd\x68\x41\xfd\x44\xfb\x9f\xc5\xb4\xbb\xb2\xba\x4a\xb7\x75\x11\xbe\x8a\x73\x04\x87\xca\x77\x71\xa3\x3f\x8c\x1a\x71\x87\x83\xbc\x12\x0a\xa4\xf2\x43\x48\x53\xc8\x6a\x44\x03\x3d\x00\x18\x81\xd2\xa0\x55\xb0\xea\x48\x21\x7c\x53\xc9\x42\x61\xdd\x61\xdf\xb2\x88\xf8\xff\xe7\x18\xf6\x54\x43\x05\xb7\x42\x95\x01\x48\x92\x19\xcc\x93\x7b\x56\xdb\xd5\xb9\x67\xef\x9d\xc4\x0d\xf6\xe6\xc9\x95\x68\x30\x3e\xd1\x83\xe1\x23\x37\xe1\x1e\x30\xf1\xe7\xbe\x1b\x1d\x29\x9c\x7d\x22\xcc\x86\x3d\x40\x70\x83\xae\xad\x3d\x4c\xe0\x49\xcf\x4a\x99\x17\xbe\x75\x9b\xbf\xa1\x73\xa2\xc4\xf1\x3e\xd7\x5b\x2b\x9b\xcc\x88\x1c\x07\x8d\x2b\x87\xdb\x7e\x09\xc2\xa2\x3c\x39\xf6\xc9\xb6\xac\x23\xd7\xa6\xf5\xc2\xe3\x23\xb3\x6b\x70\xfa\xbf\x45\xae\xf7\x0c\xf2\x59\xb4\xda\x57\x4f\xc9\xfa\xff\x7c\xf9\x79\x7c\x49\x79\xd0\x7a\xd2\xb2\x1d\x51\x9e\xd7\xa3\x39\x8e\xba\xb9\x2b\xf8\xa9\x79\xef\xae\x9a\x09\xbc\x7d\x37\x5f\x7b\x1c\x9c\xbe\x7a\x28\x29\xe3\x0f\x41\x86\xe7\xdb\xb5\xc1\xbf\x66\xd7\x57\xe1\xc7\x27\x5c\x93\x0e\x6d\x93\xf1\xbf\xb1\x21\x69\x0a\x05\xaa\x75\xd6\x1f\x26\x53\xef\x45\x5e\x35\xa8\x3c\x3d\x4b\x74\xf0\xfe\xae\x9d\x63\xee\x6b\x10\x41\x04\x5d\x6e\xdd\x0f\x2c\x46\x34\x0f\x23\x09\xa3\x7c\xb2\xa7\x82\x73\x1e\xce\x21\x0b\x74\xab\x2f\x45\x4d\xce\xf2\x5a\xd2\x7f\xb6\x9b\x28\xd7\x9f\x3d\xa7\x23\x3f\xe2\x96\x56\x42\x15\x35\x6d\x69\x87\xf7\x70\x5f\x8f\xf7\x2a\xb4\xf0\x6c\x02\xfc\x61\x7a\xbb\xfe\x75\x15\xfc\xf4\xb8\xf4\xc3\x31\x0e\xb3\xd1\x11\xd3\x57\xe4\x04\x8c\x41\xf4\x5f\xe5\x9d\x42\x7c\x8a\x28\x2e\x21\xe4\x25\x3e\xf7\xfc\x8a\xa1\xd4\xbe\xe3\x0b\x72\xfc\xc5\xf7\xd7\x21\x56\xde\x95\x95\x1f\x01\xcd\xda\xf9\x67\x62\x75\xed\xfc\xab\xc1\xfd\x37\xe8\xaf\x1b\xd4\x6b\xd3\xfd\xe1\x75\xc4\x85\x47\xa2\xff\x0e\x31\x1e\x85\x7c\x2c\x96\xfc\x68\x8d\xa8\x07\x99\xb1\x52\xf9\xc5\x80\x7f\x1c\x73\xf2\xcd\xef\x96\x7f\x57\xdd\x67\xe5\x18\x4c\x97\xcf\xd9\xc7\xef\x49\xe6\x0b\xa9\xe0\xd7\x5f\x1f\x58\xdc\x9f\x38\x61\x15\x0f\x08\xe5\xcb\x57\xf0\xb7\x8d\x58\x14\xed\xed\xc2\xf9\x13\xb3\x28\xea\xee\x91\xf1\xc7\xe7\x08\x5d\x46\xfb\x93\x84\xdf\x93\x0a\xfd\xad\xa7\x0b\xf8\xf6\x21\x7b\x7c\x0b\xd2\x85\xc3\x51\x74\x31\x38\x79\xdf\xc6\x84\x6d\xcb\xfe\x15\x00\x00\xff\xff\xae\x07\x77\x2a\xda\x11\x00\x00") - -func testImagesWebhookPodsGoBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookPodsGo, - "test/images/webhook/pods.go", - ) -} - -func testImagesWebhookPodsGo() (*asset, error) { - bytes, err := testImagesWebhookPodsGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/pods.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testImagesWebhookSchemeGo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x92\x41\x4f\xdb\x4e\x10\xc5\xcf\xec\xa7\x78\xca\x29\x41\xf9\xdb\xc0\x09\xfd\x2b\x0e\x6e\x00\xd5\x82\x26\x12\x0e\x45\x1c\x37\xeb\x89\x3d\xc2\xde\xdd\xee\xae\x63\xd2\x8a\xef\x5e\x39\x31\xc5\x14\x5a\xb5\x47\xcf\xfb\xcd\x9b\xb7\xe3\x89\x0f\xc5\xcc\xd8\xad\xe3\xa2\x0c\x38\x39\x3a\x3e\xc5\xb2\x24\x5c\x35\x2b\x72\x9a\x02\x79\x24\x4d\x28\x8d\xf3\x91\x10\xd7\xac\x48\x7b\xca\xd1\xe8\x9c\x1c\x42\x49\x48\xac\x54\x25\xa1\x57\xa6\xf8\x42\xce\xb3\xd1\x38\x89\x8e\x30\xee\x80\x51\x2f\x8d\x26\x1f\xc4\xd6\x34\xa8\xe5\x16\xda\x04\x34\x9e\x10\x4a\xf6\x58\x73\x45\xa0\x47\x45\x36\x80\x35\x94\xa9\x6d\xc5\x52\x2b\x42\xcb\xa1\xdc\x0d\xe9\x2d\x22\x71\xdf\x1b\x98\x55\x90\xac\x21\xa1\x8c\xdd\xc2\xac\x87\x14\x64\x10\x02\x00\xca\x10\xec\xff\x71\xdc\xb6\x6d\x24\x77\x29\x23\xe3\x8a\xb8\xda\x53\x3e\xbe\x4e\x67\x17\xf3\xec\xe2\xbf\x93\xe8\x48\x88\x5b\x5d\x91\xf7\x70\xf4\xb5\x61\x47\x39\x56\x5b\x48\x6b\x2b\x56\x72\x55\x11\x2a\xd9\xc2\x38\xc8\xc2\x11\xe5\x08\xa6\xcb\xd9\x3a\x0e\xac\x8b\x29\xbc\x59\x87\x56\x3a\x12\x39\xfb\xe0\x78\xd5\x84\x57\x0b\x7a\x4e\xc5\x1e\x43\xc0\x68\x48\x8d\x51\x92\x21\xcd\x46\xf8\x98\x64\x69\x36\x15\x77\xe9\xf2\xd3\xe2\x76\x89\xbb\xe4\xe6\x26\x99\x2f\xd3\x8b\x0c\x8b\x1b\xcc\x16\xf3\xf3\x74\x99\x2e\xe6\x19\x16\x97\x48\xe6\xf7\xb8\x4a\xe7\xe7\x53\x10\x87\x92\x1c\xe8\xd1\xba\x2e\xbb\x71\xe0\x6e\x75\x94\x47\x22\x23\x7a\x35\x7c\x6d\xf6\x61\xbc\x25\xc5\x6b\x56\xa8\xa4\x2e\x1a\x59\x10\x0a\xb3\x21\xa7\x59\x17\xb0\xe4\x6a\xf6\xdd\xcf\xf3\x90\x3a\x17\x15\xd7\x1c\x64\xd8\x7d\xbf\x79\x4e\x24\x0e\x63\x21\xac\x54\x0f\x9d\x49\x2d\x59\x0b\xc1\xb5\x35\x2e\x60\x2c\x0e\x64\xde\x3b\x6d\x8e\x57\x14\xe4\x31\x46\x0f\xa7\x3e\x62\x13\x4b\xcb\xf1\x4f\x31\xee\xd5\xd1\xa0\xc1\x51\xd1\x2d\x69\x37\xf6\x8f\xcd\x43\x70\x60\xa4\x8c\xa3\xcd\xeb\x96\xae\x14\x6f\x3a\x71\x50\xad\xa5\x2a\x59\x93\xdb\xc6\xf6\xa1\x88\x5d\xa3\x03\xd7\xf4\x17\x48\xec\xc9\xb1\xac\xf8\x1b\xb9\x91\x38\x68\x02\x57\xbd\x80\xdf\x76\x76\xd0\xcb\x84\x89\x10\x1b\xe9\xe0\x55\x49\x35\xe1\x0c\xbd\x10\xcd\xa9\xcd\x76\xb5\xf1\x64\x07\x28\x93\x93\xf2\x38\xc3\xcb\xc0\x8e\x99\x75\xe5\x4b\xa9\x82\x71\xdb\xf1\xde\x64\x22\xc4\xba\xd1\x0a\xac\x39\x8c\x27\xf8\xde\x6d\x33\x5f\x9a\xde\xed\x99\x79\xea\xa9\xb7\x1a\x0e\x9f\x33\xec\xcb\x3b\x8b\xc1\xcb\xa2\xcf\x8d\x0f\xe3\xfd\x62\xa3\xe4\xad\xf5\xe4\x1d\xfa\xd7\x03\xf8\xe7\xbe\x77\xee\xe0\x7d\x8f\x27\xf1\x23\x00\x00\xff\xff\xea\xb2\x43\x2f\xc0\x04\x00\x00") - -func testImagesWebhookSchemeGoBytes() ([]byte, error) { - return bindataRead( - _testImagesWebhookSchemeGo, - "test/images/webhook/scheme.go", - ) -} - -func testImagesWebhookSchemeGo() (*asset, error) { - bytes, err := testImagesWebhookSchemeGoBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/images/webhook/scheme.go", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminDaemonYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x8e\x31\x4e\x04\x31\x0c\x45\xfb\x9c\xc2\x17\x18\xed\x52\x6e\x6a\x4a\x0a\x24\x24\x7a\x93\xf9\x62\x22\x26\x71\x64\x9b\x15\xc7\x47\x61\x86\xec\x20\x81\x70\x15\xe5\xdb\xef\x7d\x6e\xf9\x19\x6a\x59\x6a\x24\x6e\xcd\x4e\xd7\xbb\xf0\x96\xeb\x1c\xe9\x9e\x51\xa4\x3e\xc1\x43\x81\xf3\xcc\xce\x31\x10\x55\x2e\x88\xd4\x54\x0a\x7c\xc1\xbb\x4d\x55\x66\x4c\xf8\x68\xa2\x0e\x0d\xd6\x90\xfa\x9a\x61\x45\x72\xd1\xfe\x26\x2a\xec\x69\x79\xe0\x17\xac\xb6\x7d\x10\xcd\x5f\xf4\x8d\x34\x18\x81\xc8\x51\xda\xca\x8e\xfd\xf0\x60\xee\xf3\x8f\x7d\x5b\x5a\x7f\x88\xfe\x56\x11\x7d\xb7\xed\x93\xa4\x3a\xe7\x0a\x1d\x97\xd3\xae\x4b\x83\x94\x0b\xbf\xee\xfe\xd3\xad\xc4\x88\x7b\x8b\x83\x77\xba\x31\x1f\x45\x3d\xd2\xe5\x7c\x39\x8f\x94\x68\x11\xf3\x5f\x83\x4d\x6b\xd0\x2b\xb4\x33\xc3\x67\x00\x00\x00\xff\xff\xb0\x5f\x4e\x5d\xa5\x01\x00\x00") - -func testFixturesDocYamlAdminDaemonYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminDaemonYaml, - "test/fixtures/doc-yaml/admin/daemon.yaml", - ) -} - -func testFixturesDocYamlAdminDaemonYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminDaemonYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/daemon.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminHighAvailabilityEtcdYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x94\x3f\x6f\xdb\x3c\x10\x87\x77\x7d\x0a\x0e\xef\x2a\xc9\xf6\x3b\x24\xe1\x56\x34\x1e\x82\x22\xb6\xd1\x16\x01\x3a\x05\x34\x75\x88\x09\x53\xa4\x70\x3c\xa9\x08\x8a\x7c\xf7\x82\x92\x42\xfd\xb3\x65\xa8\xa3\x78\xfc\x3d\x3c\x1f\x1f\x5a\x14\xea\x05\xd0\x29\x6b\x38\xab\xd6\xd1\x59\x99\x8c\xb3\x83\xcd\xa2\x1c\x48\x64\x82\x04\x8f\x18\x33\x22\x07\xce\x80\x64\x16\x3b\xc0\x0a\x30\x72\x05\x48\x5f\x39\x59\x47\x3b\xa0\xdf\x16\xcf\x9c\x11\x96\x10\x31\x26\xad\x21\xa1\x0c\xa0\xf3\x3b\x62\xa6\x72\xf1\x06\x9c\x9d\xef\x5d\xf2\x26\x31\x51\x36\xf5\x24\xbe\x49\x56\xc9\x43\xc4\xd8\x00\x1f\xb2\x75\x41\xda\x3c\x17\x26\xe3\xf5\x47\xcc\xd2\xd2\x61\xaa\xad\x14\x3a\x3d\x2a\x53\x53\xda\x4a\x1c\x7b\x46\xfb\xf1\xdf\x9f\xdd\xfe\x71\xfb\xba\xfb\xf2\xbc\xfd\x08\x75\x65\x14\x29\xa1\x63\x91\x55\x80\xa4\x1c\xc4\x05\x00\xc6\x25\x6a\xd7\xee\x39\x11\x15\x3c\x4d\xdb\xf4\xd3\xe1\x83\x6f\xfe\xbf\x5f\x05\x80\x56\x8e\xc0\x2c\x4d\x75\xc7\x49\xad\xc0\xd0\xad\xe8\xdd\xc3\xf8\xc0\xab\xb9\xf5\xe6\x2e\x59\x25\xab\x64\x3d\x8c\xf9\x3b\x8b\x33\x85\x9f\x33\xab\x04\xd6\x93\x4a\x7d\xa1\xdb\xa5\x9c\xb4\x15\xe0\x7b\x98\xd9\xe3\xd3\x8f\xaf\xfb\x97\xed\xf7\x5f\xaf\x3f\xf7\xdf\xb6\xbb\x66\x72\x85\x45\x72\x9f\xe3\x0f\x77\x73\xb0\x48\x9c\x85\xdf\xd9\x58\x30\x59\x6c\x6e\xb5\xf1\xc5\x73\xae\x51\xda\xde\x87\x94\xb0\xd8\x50\x9a\x21\x04\x4a\x65\x75\x99\xc3\xb3\x2d\x4d\xd7\x5d\xee\xbf\x0e\x82\x4e\xbc\xfb\xcd\x03\x46\x25\xb0\x67\x4c\x7f\x3b\x90\x4c\x9d\xd3\x83\xdd\x40\xb2\x5b\x42\x10\xd9\xde\xe8\xf7\xa0\xf8\x98\xe0\xc5\x74\x27\x81\x30\xe1\x94\x0e\xeb\xc2\x02\x98\xef\x7e\x8c\xa9\x04\x2e\x6d\xe7\x42\x23\xcb\x08\x5a\x1d\x2f\x51\xb4\x3a\x2e\x05\xd5\x4f\xd6\x16\x60\x2e\xe1\x7c\x71\x58\xbb\x09\xf5\x17\x76\x09\x07\x24\xff\x81\x54\x9c\x55\x4a\xed\xeb\xea\x91\x8a\xb3\xea\x56\x27\xa0\x46\xc1\xf6\x1f\xae\x36\xd7\x03\xdb\xdd\xc5\x50\xc3\xee\xe9\x8d\x4d\xbc\x1a\xed\x2b\x39\x12\xf2\x6a\x66\x2a\xe1\x25\x05\x67\xbb\x1d\x06\x83\x74\xf3\x47\x4e\x0e\xbb\x9d\xe9\xab\x35\x15\x6b\x3e\x3a\x91\xe9\x9a\x4a\xb3\xc3\x9d\x02\x06\xf2\xcc\x66\xfb\xc2\x8c\x75\xf9\x1b\x00\x00\xff\xff\xfe\xad\x78\xd0\x50\x07\x00\x00") - -func testFixturesDocYamlAdminHighAvailabilityEtcdYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminHighAvailabilityEtcdYaml, - "test/fixtures/doc-yaml/admin/high-availability/etcd.yaml", - ) -} - -func testFixturesDocYamlAdminHighAvailabilityEtcdYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminHighAvailabilityEtcdYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/high-availability/etcd.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminHighAvailabilityKubeApiserverYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x95\xcf\x8e\xdb\x36\x10\xc6\xef\x7e\x0a\x9e\x7a\x5a\xea\x8f\xe3\xee\x7a\x05\x68\x81\x22\x45\x4e\x69\xb2\x4d\x80\x5e\x03\x9a\x9a\xc8\x84\x28\x52\x98\x19\x69\xeb\xb7\x2f\x48\x3b\x5a\x5b\x92\xbd\xd8\x1e\x35\x33\xdf\x6f\x86\xa3\x8f\x92\xea\xcc\x3f\x80\x64\xbc\x2b\xc4\x90\xaf\x1a\xe3\xaa\x42\x3c\xfb\x6a\xd5\x02\xab\x4a\xb1\x2a\x56\x42\x38\xd5\x42\x21\x9a\x7e\x07\x52\x75\x86\x00\x07\xc0\x15\x75\xa0\x43\x72\xef\x89\xbf\x00\xbf\x78\x6c\x0a\xc1\xd8\xc3\x4a\x08\xed\x1d\x2b\xe3\x00\x29\x54\xc8\x65\x80\x10\x42\x98\x56\xd5\x21\xb3\xa5\xa4\xd6\x98\x18\x9f\x5e\x16\x15\x8f\xf7\xdb\x0c\x1e\xb6\x6b\xc8\xb6\x2a\x57\xb9\x7e\xdc\xe8\xfb\xdf\xef\xf3\xc7\x2c\xcb\xf3\x5d\x95\xad\x23\x45\xfb\xb6\x55\xae\x2a\xe2\x83\x14\xe9\xce\xb8\x94\xf6\xa7\x27\xa9\x7f\x85\x7b\xc2\xd4\x7a\xad\x6c\x2c\xb8\x6c\x24\xa4\x54\x55\x85\x40\x54\xe6\xeb\x87\x24\x4b\xb2\x24\x17\x52\x02\xeb\x4a\x1e\x2b\xa8\xdc\x33\x77\x45\x9a\x8e\xf9\x62\x93\x65\x79\x84\x0b\x21\xa5\xb6\xbe\xaf\x64\x87\x7e\x30\x15\x60\x59\x6b\x88\x61\x55\xb5\x86\xc2\x7e\x65\x58\x0a\x7a\x5b\x7e\x51\x2d\x50\xa7\x34\x7c\x36\x3f\x41\x1f\xb4\x85\xbb\xcf\xa6\x35\xfc\x4d\xb9\x1a\xf0\xee\x3b\xe8\x1e\x0d\x1f\x3e\x7a\xc7\xf0\x2f\xff\x09\xee\x70\xf7\x1d\x70\x30\x1a\xfe\xd0\xda\xf7\x8e\xef\xbe\x01\xf9\x1e\x35\xfc\xdd\x7b\x56\xe3\x00\x74\x2c\x92\xda\xf6\xc4\x80\xd2\x74\x12\x03\xb2\xcc\xb3\x38\x6f\x96\xe6\xf7\x71\x4e\x03\x8e\xa5\x56\xf2\xa7\xb1\x50\xa6\x84\x43\xdc\x05\x3a\x60\xa0\x54\xab\x44\x23\x8f\xd0\x9d\x22\xa3\xa5\xea\x79\xbf\x5c\x1e\xf3\x3f\x42\x3e\xd1\x34\x44\xfc\xb1\x7b\x78\xe5\x25\xac\x41\x32\x10\xcb\xdd\xae\x47\x47\x23\x95\x2d\x49\x0d\xc8\xcb\xcc\xe3\xbe\x93\x50\x70\xaa\xed\xd0\x0c\x8a\x41\x36\x70\xb8\x29\x69\xe0\x70\xb6\x0e\xdd\x23\xc8\xce\x23\x97\x9b\xcd\x87\x40\xf2\x0d\xb8\x1b\x67\x69\x9c\x7f\x71\x3f\x62\x15\xc5\xd3\x08\x29\x87\x72\x3d\x12\x95\xb5\xfe\x25\xce\x62\x2c\xd4\x50\x95\x9f\x94\x25\x10\xf9\xd3\x53\x3a\xa8\x60\xad\x7a\x62\xaa\xc4\xfa\x5a\xac\x9f\x7e\x3b\x9a\x24\x4c\x42\xbf\x3c\x3a\xde\x90\x67\x8f\x5c\x88\xcd\xe6\xc3\xa9\x4d\xb8\x4e\xd3\xd8\xf1\xfa\x04\xfb\xd1\xb2\xfc\x21\xdb\x66\x33\xfd\x59\xf0\x15\xb0\xac\xdf\x2e\xe9\xb7\x53\x7d\xbc\x3b\x31\x32\x78\xdb\xb7\xf0\x57\x30\xe3\x78\xa2\x36\x3c\x3d\x2b\xde\x17\x62\xb2\xd8\x0b\x08\xe1\x10\x32\xa7\x18\x82\xaa\xbe\x3a\x7b\x18\xbf\x1c\x53\xd2\xf5\xc5\x4e\x46\xab\xc3\x2b\x5d\x00\x00\xeb\x94\xc8\x5e\x54\x03\xeb\xd7\xd0\x9b\x23\x84\xcf\x06\xed\x15\xc2\x8c\xd3\x13\xc6\xc4\x3b\x60\xe1\x3c\x53\xcc\xa0\xf0\xbd\xe3\x2c\x0c\xf2\x3e\x82\x35\xbb\x25\x8a\x35\xbb\xf7\x82\xe2\x07\xd5\x77\xe0\x96\x70\x21\x79\x99\x7b\x13\x1a\x5e\xd8\x12\x0e\x58\xff\x0f\x52\xd7\x98\x94\x2d\x4d\x49\x5d\x63\x5e\xa3\x33\xd0\xd1\xde\xa7\x7f\x57\xbc\x10\x01\x78\xaa\xee\xae\x5a\x7c\x6a\xf0\xab\xda\x37\x4d\xcd\x87\x0e\x0a\xf1\xc9\x58\xf8\x8a\x1f\x11\x14\xc3\x6a\xc9\xeb\x57\x1b\x9c\x9b\x7e\x62\xf9\xab\x9a\xb9\xcd\x97\x4c\x7e\xf3\x4c\x97\xc2\xd1\xd6\xb7\x5b\xce\x9a\xbd\xad\x39\x37\xef\xdc\xba\xb7\xa5\x33\xbb\x5e\x33\xeb\xcd\xe5\xce\x01\x17\xf6\xbc\xa9\x3d\xb7\xe4\xd4\x90\xff\x05\x00\x00\xff\xff\xbf\x9d\x12\xe4\x8f\x09\x00\x00") - -func testFixturesDocYamlAdminHighAvailabilityKubeApiserverYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminHighAvailabilityKubeApiserverYaml, - "test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml", - ) -} - -func testFixturesDocYamlAdminHighAvailabilityKubeApiserverYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminHighAvailabilityKubeApiserverYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x94\xcd\x6e\xdb\x30\x0c\xc7\xef\x79\x0a\x9d\x76\x93\x1d\x3b\x49\x9b\x19\x48\x2f\x1b\xb6\xd3\xd6\x02\x03\x76\xa7\x25\x36\x11\x22\x4b\x06\x45\x7b\xc8\x9e\x7e\x90\x9b\x36\x71\x6c\xa7\xcd\x8e\xfc\xfa\x91\x32\xff\x34\xd4\xe6\x37\x52\x30\xde\x15\xa2\xcd\x66\x7b\xe3\x74\x21\x9e\xbc\x9e\x55\xc8\xa0\x81\xa1\x98\x09\xe1\xa0\xc2\x42\xec\x9b\x12\xa5\xf2\x8e\xc9\x5b\x8b\x24\x2b\x70\xb0\x45\x9a\x85\x1a\x55\xcc\x8a\x21\x30\x0e\x29\x44\x4b\x0a\xe5\xab\x0a\x9c\x8e\x46\x34\xd3\xd2\xb8\x34\xec\x8e\x96\x54\xaf\xee\x26\x50\x6a\xbd\x02\xdb\x25\x4c\x34\x11\x52\x56\x10\x18\x69\x93\xe5\xf7\xc9\x3c\x99\x27\x59\xb1\x9e\xaf\xe7\x42\x4a\x65\x9b\x18\x90\x71\xc8\x0d\xe6\x28\x19\x03\xcb\xb2\x6c\xc8\x85\xae\x87\x38\x4b\x52\x46\xd3\x26\x9b\x27\xf9\x72\x15\x29\x69\x76\x27\xa4\x04\x1b\xfb\x33\x4a\xe7\x35\x76\x29\x61\xc3\xd4\x60\x57\xe7\x1b\x2d\x6b\xf2\xad\xd1\x48\x9b\xad\xc2\x48\x0b\x48\xad\x51\x28\x41\x29\xdf\x38\x96\x35\x99\x36\xd6\xef\xf1\x20\x9f\x8d\xc5\x4d\x1a\xa8\xed\x9e\x42\x0e\x19\x43\x1a\x0b\x90\x92\x3d\x1e\xde\x26\x6a\x37\xb9\xc8\x1e\x1e\xd2\x16\xe2\xf3\xb7\x53\x0f\x4f\xac\xdf\x0a\x29\x2d\x82\x46\x92\x68\x51\xb1\xc8\x1f\x3e\x65\x1d\xc7\x54\xb0\x8d\x8b\x59\x87\x64\xab\x28\x31\x7e\x8a\x52\x3c\x6b\xc8\x97\x77\x8b\xb5\x5e\x65\xb0\x5c\x97\x00\xd9\x42\x2d\x56\x8b\xc5\xfd\xb3\xd2\xcb\xfb\xcf\x8b\x0e\x67\x4d\x8b\x0e\x43\x78\x22\x5f\x62\x71\x9c\x74\xc7\x5c\x7f\x47\x7e\x35\x85\xa8\x81\x77\x85\x48\x77\x08\x96\x77\x7f\x4f\x6e\x4f\x5c\x88\x6c\x9e\xaf\xf2\xa3\xcf\x38\xc3\x06\xec\x57\xb4\x70\xf8\x85\xca\x3b\x1d\x0a\x91\xad\x8e\x51\x36\x15\xfa\x86\x4f\x81\xce\x7f\x5d\x69\x31\xa3\xf5\xb6\xa9\xf0\x47\xfc\xee\xe1\x55\x5a\x55\xb4\x9e\x5e\xe6\xea\x7f\xf9\x63\xb3\x17\x6c\xa0\x36\x46\x8e\x3e\x42\xd0\x8f\xce\x1e\x0a\x11\x77\x3d\x42\xfa\xc0\x66\x7a\x78\xeb\xb7\x71\xf9\x23\x24\x64\x95\x86\x60\x7b\xd9\xc8\xea\xe4\x7a\x77\x96\x78\x24\x61\x07\x84\x03\x4e\x13\xa8\x0b\xdc\x00\x8b\x0f\xbb\xc4\xb4\x40\xb7\x8e\x33\x32\xc8\x6d\x04\x6b\xca\x31\x8a\x35\xe5\xad\xa0\xee\xf7\xe1\x6b\x74\x63\xb8\x18\xec\xc7\xde\x85\xc6\x85\x8d\xe1\x90\xd5\x7f\x90\xea\xbd\x49\xd9\x86\x4b\x52\xbd\x37\x27\xef\x00\xb4\xf3\x81\x7f\x22\xff\xf1\xb4\x7f\xf3\xbd\x68\xff\xf8\x7b\x8d\x09\x5d\x93\x59\xef\x2e\x47\xf4\x7f\xa9\xfe\xc9\xda\x8f\x2b\x9e\x0f\x35\x16\xe2\x9b\xb1\xf8\x48\x5f\x08\x81\x71\x36\x76\x08\x93\x9d\xce\x2f\xe2\xe2\x1e\x26\x6b\x86\x37\x30\x76\x01\x57\x1f\xd7\x2f\x7c\xd3\xfc\xf5\x96\x83\x66\xef\xd7\x9c\x2b\x7b\xa8\xeb\xeb\xa5\x03\x2d\x4f\x29\xf9\xea\xc7\x1d\x02\x7a\xda\xbd\x5a\x7b\xae\xd7\x4b\xb5\xfe\x0b\x00\x00\xff\xff\x6e\x92\xf3\xcb\x30\x08\x00\x00") - -func testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYaml, - "test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml", - ) -} - -func testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x84\x52\xc1\xae\x9b\x30\x10\xbc\xf3\x15\x7b\xea\xcd\x80\x49\xd3\x10\x4b\x2f\x97\x56\xed\xa9\x7d\x91\x2a\xf5\xbe\xd8\x1b\x70\x63\x6c\x64\x2f\x54\xe9\xd7\x57\x10\xd2\x27\xaa\x3e\xbd\x1b\x33\xb3\xcc\x68\xbc\x8b\x83\xfd\x41\x31\xd9\xe0\x15\x4c\x32\xbb\x5a\x6f\x14\x9c\x83\xc9\x7a\x62\x34\xc8\xa8\x32\x00\x8f\x3d\x29\xb8\x8e\x0d\x89\xa4\x3b\x32\xa3\xa3\x98\xa5\x81\xf4\x2c\x76\x21\xf1\x37\xe2\x5f\x21\x5e\x15\x70\x1c\x29\x03\xd0\xc1\x33\x5a\x4f\x31\xcd\x13\xe2\xff\x06\x00\x00\xb6\xc7\x76\x56\xea\x94\xb7\x3a\xe6\x36\x14\xdb\x21\xb5\x7b\x6f\xca\xa6\xbe\xd4\xcd\x4e\x52\x75\x38\xee\x0e\xbb\xea\x70\xfc\x20\xf7\x55\x7d\xd8\x1d\x1b\x7d\x5c\x5c\x74\xe8\x7b\xf4\x46\x2d\x40\x40\xd1\x58\x5f\xa4\x6e\x45\x42\x3f\xe8\x31\xc5\xc2\x05\x8d\x6e\x19\xd8\x06\x81\x10\x3d\x26\xa6\xf8\x24\xab\x43\x5e\xe6\x65\x2e\x55\x5d\xd6\x25\x08\x31\x3d\x55\x20\x84\x23\x34\x14\x05\x39\xd2\x0c\xf2\x74\x2a\x26\x9c\xdd\xda\x7f\x7c\x72\x17\xda\x25\x0f\xa0\x3a\xbd\x93\xcb\xa7\xb3\x13\x79\x4a\xe9\x1c\x43\x43\x6a\x55\x3b\xe6\xe1\x0b\xf1\x03\x02\x0c\xc8\x9d\x82\xa2\x23\x74\xdc\xfd\x7e\xa1\x43\x64\x05\xb2\xac\xf6\x72\xe5\xac\xb7\x6c\xd1\x7d\x22\x87\xb7\xef\xa4\x83\x37\x49\x81\xdc\xaf\x2a\xdb\x9e\xc2\xc8\x2f\xc2\xc2\x4f\xc1\x8d\x3d\x7d\x0d\xa3\xe7\xf4\x78\xa6\x7e\x46\xe7\x7b\xea\x9b\x65\xee\x1b\x74\xa1\xbd\x58\x47\xaf\x18\xc4\xd1\x17\x89\x74\x24\x4e\x8b\x51\xf4\xc4\x94\xe6\xa5\x26\x8a\x93\xd5\x84\x5a\xcf\xbf\x6c\x2c\x0d\x5d\x70\x74\x2c\x38\x5c\xc9\x8b\x54\xd3\x4f\xb3\xea\x91\xd0\x3c\x7b\x77\xfb\x7b\x55\xf7\x12\xeb\x49\xcd\x67\xb7\x64\x67\x9b\xe7\x7b\xb3\x08\xdf\x06\x52\xf0\xd9\x3a\x7a\x8e\x1f\x23\x21\xdf\xdb\x6c\xfb\xfd\x09\x00\x00\xff\xff\xb8\x36\x00\x0a\x16\x03\x00\x00") - -func testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYaml, - "test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml", - ) -} - -func testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminLimitrangeInvalidPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xcc\x41\x8a\xc3\x30\x0c\x05\xd0\xbd\x4f\x21\xb2\x77\x26\x61\x36\x83\xef\x30\x30\xab\xd9\x16\xd5\x16\xa9\x48\x6c\x19\xc9\x09\xf4\xf6\xc5\xa1\x04\xaa\xdd\xd7\x7f\x7c\xac\xfc\x4f\x6a\x2c\x25\xc0\x31\xbb\x95\x4b\x0a\xf0\x27\xc9\x65\x6a\x98\xb0\x61\x70\x00\x05\x33\x05\xe0\x72\xe0\xc6\xc9\x57\x49\xce\x2a\xc5\xde\x44\x29\x0d\xb9\x90\x5a\x4f\xfe\x2d\xd7\xfd\x4e\x5a\xa8\x91\x79\x23\x3d\xc8\x3f\xc4\x5a\xaf\x1c\x00\x00\x67\x5c\x3a\xfa\xb1\x71\x89\x3a\xb2\x7c\x9d\xe8\xf6\x81\x94\x4c\x76\x8d\x74\xee\xf6\xdb\x38\x73\xbb\x12\x40\xac\x7b\x80\xe1\x7b\xb8\x1e\x99\xb2\xe8\x33\xc0\x3c\x4d\xbf\xec\x5e\x01\x00\x00\xff\xff\x01\x0f\xba\xef\xd8\x00\x00\x00") - -func testFixturesDocYamlAdminLimitrangeInvalidPodYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminLimitrangeInvalidPodYaml, - "test/fixtures/doc-yaml/admin/limitrange/invalid-pod.yaml", - ) -} - -func testFixturesDocYamlAdminLimitrangeInvalidPodYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminLimitrangeInvalidPodYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/limitrange/invalid-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminLimitrangeLimitsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x8f\x31\x8b\xc3\x30\x0c\x85\x77\xff\x0a\x91\xfd\xc0\x4e\xe0\x06\xaf\x37\xdc\x72\x07\x25\x43\x77\x11\xab\x45\x34\xb2\xdd\xd8\x29\xcd\xbf\x2f\x4e\x42\x21\xcd\x50\xa8\x27\xe9\xf9\x7d\x7a\x3c\x8c\x7c\xa4\x21\x71\xf0\x16\x6e\x46\x5d\xd8\x3b\x0b\x7f\x2c\x9c\x5b\xf4\x67\x52\x42\x19\x1d\x66\xb4\x0a\xc0\xa3\x90\x05\x99\xfa\xf2\x9d\x54\x8a\xd4\x15\x79\x59\xcb\xf4\x05\x82\xf7\x32\x94\xd7\xc5\xd1\x42\x55\x57\xeb\x2a\x24\x61\x98\x2c\x98\x5f\x9e\x15\x61\xbf\x71\xd6\x5a\xcb\x8b\xf5\xfb\x7f\xb1\xe6\x29\x92\x85\x43\x70\x73\x84\xa3\x13\x8e\x7d\xde\xc0\xcd\x1e\xae\xb5\x5e\xf1\x15\x68\xe9\x3a\x52\xca\xef\x42\xcd\x93\xfb\xbc\x8b\xd9\x9f\x6d\x36\x5d\x7e\x82\xcf\xc8\x9e\x06\xf5\x08\x00\x00\xff\xff\xb5\xd3\x47\x59\x80\x01\x00\x00") - -func testFixturesDocYamlAdminLimitrangeLimitsYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminLimitrangeLimitsYaml, - "test/fixtures/doc-yaml/admin/limitrange/limits.yaml", - ) -} - -func testFixturesDocYamlAdminLimitrangeLimitsYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminLimitrangeLimitsYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/limitrange/limits.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminLimitrangeNamespaceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\x31\x0e\x84\x40\x08\x05\xd0\x9e\x53\x70\x81\x2d\xb6\xe5\x10\x96\xf6\x3f\xce\x2f\x88\x03\x12\x87\x18\x8f\xef\x43\xf9\xce\x7b\xf9\x95\xa6\xcf\x5f\x4e\xcf\x61\xba\x21\xb8\x0a\x07\x25\xd8\x18\x68\x98\xa8\x26\x82\xa6\xd3\xc3\xfb\xc7\x17\x51\x93\xf2\x05\x00\x00\xff\xff\xa4\x0d\x06\xa4\x3f\x00\x00\x00") - -func testFixturesDocYamlAdminLimitrangeNamespaceYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminLimitrangeNamespaceYaml, - "test/fixtures/doc-yaml/admin/limitrange/namespace.yaml", - ) -} - -func testFixturesDocYamlAdminLimitrangeNamespaceYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminLimitrangeNamespaceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/limitrange/namespace.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminLimitrangeValidPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\xcd\xc1\x4a\xc6\x30\x0c\xc0\xf1\x7b\x9f\x22\x7c\xf7\x4e\x26\x08\xd2\x77\x10\x3c\x79\x95\xac\x0d\x33\xac\x6d\x4a\xd2\x0d\x7c\x7b\xe9\x18\x03\xf9\x8e\xc9\xff\x47\x82\x8d\xbf\x48\x8d\xa5\x06\x38\x66\xb7\x71\x4d\x01\x3e\x25\xb9\x42\x1d\x13\x76\x0c\x0e\xa0\x62\xa1\x00\x07\x66\x4e\xbe\x49\x72\x00\x19\x17\xca\x36\xda\x73\xb5\x46\x71\x94\x28\xb5\x23\x57\xd2\xd3\xf9\xcb\x6d\xfb\x42\x5a\xa9\x93\x79\x23\x3d\xc8\xff\x88\xf5\x91\xce\x5b\x5c\x70\x1d\xe8\xdd\xa6\x35\xea\xc4\xf2\x72\xa2\xef\x7f\x48\xc9\x64\xd7\x48\xd7\x7f\x80\xcc\x85\xfb\x3d\x01\xc4\xb6\x07\x78\xcc\x8f\x7b\x51\xa8\x88\xfe\x06\x78\x9b\x5f\x3f\xd8\xfd\x05\x00\x00\xff\xff\x50\xe8\xe9\x7f\xf4\x00\x00\x00") - -func testFixturesDocYamlAdminLimitrangeValidPodYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminLimitrangeValidPodYaml, - "test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml", - ) -} - -func testFixturesDocYamlAdminLimitrangeValidPodYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminLimitrangeValidPodYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminNamespacesNamespaceDevJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xcb\xa1\x0e\x02\x31\x10\x84\x61\xdf\xa7\x98\xac\xc6\x60\xef\x21\x90\xf8\x81\x8e\x68\x68\xf7\x1a\xda\x9c\x21\xf7\xee\x64\x8f\x04\x77\x62\xcd\xfc\xdf\x7e\x12\x60\xaf\xe2\xd9\x16\xd8\x8d\x4d\xa3\xf3\x29\xbb\xc4\xcc\x5e\xee\x7a\x8f\xb2\x7a\xc4\xed\xfa\x5b\x9b\x26\x33\x27\x6d\x41\x3c\x03\xe6\x6c\x0a\x91\xb5\xa9\xae\xbd\xc9\xe7\x41\x01\xab\x7c\xa8\x8e\x3f\x3d\xc1\x47\xdb\x53\xdc\x9e\xbe\x01\x00\x00\xff\xff\x99\xf7\x0a\x5a\x92\x00\x00\x00") - -func testFixturesDocYamlAdminNamespacesNamespaceDevJsonBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminNamespacesNamespaceDevJson, - "test/fixtures/doc-yaml/admin/namespaces/namespace-dev.json", - ) -} - -func testFixturesDocYamlAdminNamespacesNamespaceDevJson() (*asset, error) { - bytes, err := testFixturesDocYamlAdminNamespacesNamespaceDevJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/namespaces/namespace-dev.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminNamespacesNamespaceProdJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\xca\xce\xcc\x4b\x51\xb2\x52\x50\xf2\x4b\xcc\x4d\x2d\x2e\x48\x4c\x4e\x55\xd2\x01\x09\x27\x16\x64\x86\xa5\x16\x15\x67\xe6\xe7\x81\x24\xcb\x0c\x21\xa2\xb9\xa9\x25\x89\x29\x89\x25\x89\x4a\x56\x0a\x20\xcd\x0a\x0a\x4a\x79\x89\xb9\xa9\x20\x15\x05\x45\xf9\x29\xa5\xc9\x25\x20\xf5\x3a\x10\x99\x9c\xc4\xa4\xd4\x9c\x62\xb8\x4a\xec\x6a\xc1\x52\xb5\x5c\x20\x5c\xcb\x05\x08\x00\x00\xff\xff\xa0\x41\x9f\x81\x90\x00\x00\x00") - -func testFixturesDocYamlAdminNamespacesNamespaceProdJsonBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminNamespacesNamespaceProdJson, - "test/fixtures/doc-yaml/admin/namespaces/namespace-prod.json", - ) -} - -func testFixturesDocYamlAdminNamespacesNamespaceProdJson() (*asset, error) { - bytes, err := testFixturesDocYamlAdminNamespacesNamespaceProdJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/namespaces/namespace-prod.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminResourcequotaLimitsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8b\x31\x0e\xc2\x30\x0c\x45\xf7\x9c\xc2\x17\x40\x6a\x2b\x95\xc1\x2b\x2b\x2c\x1d\xd8\xad\xd6\x20\x8b\xda\x0d\x89\x83\xd4\xdb\xa3\x40\x16\x84\x27\xbf\xf7\xf5\x28\xca\x95\x53\x96\xcd\x10\x5e\x7d\x78\x88\x2d\x08\x67\x51\xf1\x89\xec\xce\x41\xd9\x69\x21\x27\x0c\x00\x46\xca\x08\x6b\x1d\x73\xc8\x91\xe7\x2a\xbf\x58\xbf\x03\x2c\x7c\xa3\xb2\x7a\x85\x7a\x73\x2c\x08\x43\xd7\x69\x63\x65\xdd\xd2\x8e\x30\xf6\xc3\x45\x3e\xae\x05\x13\x3f\x0b\xe7\xdf\xae\xff\xef\x86\xf1\xd8\x3a\xdf\x23\x23\x9c\x36\x73\x12\xe3\x14\xde\x01\x00\x00\xff\xff\xc1\xba\xa5\x77\xc6\x00\x00\x00") - -func testFixturesDocYamlAdminResourcequotaLimitsYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminResourcequotaLimitsYaml, - "test/fixtures/doc-yaml/admin/resourcequota/limits.yaml", - ) -} - -func testFixturesDocYamlAdminResourcequotaLimitsYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminResourcequotaLimitsYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/resourcequota/limits.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminResourcequotaNamespaceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x04\xc0\xb1\x11\x84\x40\x08\x05\xd0\x9c\x2a\x68\xe0\x82\x4b\x29\xc2\xd0\xfc\x8f\xfb\x83\x1d\x85\x45\x17\x1d\xcb\xf7\x21\xfb\xca\x6b\xf6\x11\xa6\xcf\x5f\xf6\x1e\xcd\x74\x81\x73\x26\x36\x8a\xb3\xd0\x50\x30\x51\x0d\x38\x4d\xcf\x7b\x14\x7e\x7c\xe1\x79\x50\xbe\x00\x00\x00\xff\xff\x4d\x03\x2d\x13\x3f\x00\x00\x00") - -func testFixturesDocYamlAdminResourcequotaNamespaceYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminResourcequotaNamespaceYaml, - "test/fixtures/doc-yaml/admin/resourcequota/namespace.yaml", - ) -} - -func testFixturesDocYamlAdminResourcequotaNamespaceYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminResourcequotaNamespaceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/resourcequota/namespace.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlAdminResourcequotaQuotaYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8e\x31\x6a\x05\x31\x0c\x44\xfb\x3d\x85\xf0\x09\xb2\x81\x34\xbe\x40\xea\xa4\x48\x2f\x64\x41\x44\x6c\xcb\x91\xe4\x85\xdc\x3e\xd8\xff\x17\x5b\x89\xf7\x60\x34\x83\x43\xbe\xd8\x5c\xb4\x67\xb8\xce\xe3\x47\x7a\xc9\xf0\xc9\xae\xd3\x88\x3f\xa6\x06\x1e\x8d\x03\x0b\x06\xe6\x03\xa0\x63\xe3\x0c\xbf\xdb\xfb\x60\x5a\xee\x1b\xad\xac\x0b\x40\x63\x66\x48\xaf\x2f\x69\x53\xe3\xa6\xf6\x97\xe1\x7c\x97\xcd\x63\xf5\x78\x70\x8f\x4b\xeb\x6c\x4c\x15\xa5\x79\x86\x74\x3e\x03\x43\xcb\x1d\x8d\x47\x15\xc2\x10\xed\xa4\x3d\x4c\x6b\x65\xf3\x5b\x81\x3d\x67\xee\x39\x3b\xf9\xf0\xce\x64\x1c\xf7\x57\xce\x76\x09\xf1\x52\x6f\xe9\xf8\x0f\x00\x00\xff\xff\x9d\x63\xab\x79\xf4\x00\x00\x00") - -func testFixturesDocYamlAdminResourcequotaQuotaYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlAdminResourcequotaQuotaYaml, - "test/fixtures/doc-yaml/admin/resourcequota/quota.yaml", - ) -} - -func testFixturesDocYamlAdminResourcequotaQuotaYaml() (*asset, error) { - bytes, err := testFixturesDocYamlAdminResourcequotaQuotaYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/admin/resourcequota/quota.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideConfigmapConfigmapYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\xc8\x0c\x4b\x2d\x2a\xce\xcc\xcf\xb3\x52\x28\x33\xe4\xca\xce\xcc\x4b\xb1\x52\x70\xce\xcf\x4b\xcb\x4c\xf7\x4d\x2c\xe0\xca\x4d\x2d\x49\x4c\x49\x2c\x49\xb4\xe2\x52\x50\xc8\x4b\xcc\x4d\xb5\x52\x28\x49\x2d\x2e\xd1\x4d\x06\x2b\xc8\x4d\x2c\xe0\x82\x49\x82\x68\x5d\x43\x2b\x85\xb2\xc4\x9c\xd2\x54\x5d\x43\x98\x88\x11\x4c\xc4\x88\x0b\x10\x00\x00\xff\xff\x21\xcc\x3c\xb6\x6a\x00\x00\x00") - -func testFixturesDocYamlUserGuideConfigmapConfigmapYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideConfigmapConfigmapYaml, - "test/fixtures/doc-yaml/user-guide/configmap/configmap.yaml", - ) -} - -func testFixturesDocYamlUserGuideConfigmapConfigmapYaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideConfigmapConfigmapYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/configmap/configmap.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideDeploymentYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\xce\xbd\x6e\xc3\x30\x0c\x04\xe0\x5d\x4f\x71\x2f\x60\xb4\x45\x97\x42\x73\xc7\x0e\x9d\xb2\x33\x32\xe1\x08\x91\x28\x42\x22\x82\xe4\xed\x03\x21\x3f\xb6\x63\xe4\x46\xe1\xbb\x13\x49\xe3\x8e\x6b\x8b\x45\x3c\x48\xb5\x7d\x9c\xbe\xdc\x31\xca\xe8\xf1\xcb\x9a\xca\x25\xb3\x98\xcb\x6c\x34\x92\x91\x77\x80\x50\x66\x0f\x99\xa2\x9c\x87\x71\x26\x40\xa2\x3d\xa7\xd6\xc9\x5b\xd4\x94\x43\x07\x95\x35\xc5\x40\xcd\xe3\xdb\x01\x8d\x13\x07\x2b\xf5\x56\xcd\x64\xe1\xf0\xb7\xd8\x5a\xad\x39\xc0\x38\x6b\x22\xe3\x3b\x5f\x9c\xd6\x93\x56\xcd\xd7\x2e\xf0\x38\xa1\x27\x14\x31\x8a\xc2\xf5\xe9\x87\x8d\xef\x89\x99\xa6\xcd\xa3\x96\x6a\x8b\x7f\x86\x79\xed\xbf\x54\xf3\xf8\xf9\x74\xd7\x00\x00\x00\xff\xff\x93\x04\x6f\x26\x5c\x01\x00\x00") - -func testFixturesDocYamlUserGuideDeploymentYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideDeploymentYaml, - "test/fixtures/doc-yaml/user-guide/deployment.yaml", - ) -} - -func testFixturesDocYamlUserGuideDeploymentYaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideDeploymentYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/deployment.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideDownwardApiDapiPodYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x90\x4d\x4b\xf3\x40\x14\x85\xf7\xf9\x15\x97\xac\xdf\xb4\xbc\xdb\xd9\xb5\x7e\x60\x17\x6d\x07\x2b\x82\x88\x94\xeb\xcc\xad\x19\xcc\x7c\x30\x73\x13\x2c\xa5\xff\x5d\x26\xc4\x1a\x41\xdd\xa8\x9b\x90\x39\xcf\xe1\x3c\xc3\x60\x30\xb7\x14\x93\xf1\x4e\x40\xf7\xbf\x78\x36\x4e\x0b\x90\x5e\x17\x96\x18\x35\x32\x8a\x02\xc0\xa1\x25\x01\x1a\x83\xa9\x98\x12\x57\xc1\xeb\x22\x05\x52\x99\x29\xef\x18\x8d\xa3\x98\xf2\x09\xa0\x1a\xda\x7d\xf1\x04\x7b\x04\x60\x2c\x3e\x91\x80\xc3\x61\x32\x6f\xd3\x7e\xee\x5f\x16\x39\x38\x1e\x07\xac\xbc\xb5\x98\x2f\x70\x0f\xe5\xf4\xd1\xb8\x69\xaa\xcb\x7f\x50\x56\x2a\x7f\xc9\x75\x25\x3c\x0c\x4d\x72\x9d\x18\x7e\xdf\x95\xcb\xbb\xad\x5c\x9f\x6f\x57\xb3\xe5\xc5\x89\x01\x74\xd8\xb4\x74\x19\xbd\x15\xa3\x10\x60\x67\xa8\xd1\xd7\xb4\xfb\x98\x0e\xb9\x44\xae\x05\xbc\x3d\xc1\x24\xcf\x7f\x67\xdb\xc8\xd9\xd9\x1f\x28\x53\x40\xf5\xa5\x77\x21\x7f\x45\x98\x18\xb9\x4d\x93\xe0\xf5\x68\x70\xa4\xba\x5a\x6f\x6e\x7e\xe4\xfa\x44\x56\xfb\xc4\xfd\x64\xa4\xc4\x18\x59\xfa\xc6\xa8\xbd\x80\x15\x75\x14\x8b\xd7\x00\x00\x00\xff\xff\x17\xac\xa1\x83\x92\x02\x00\x00") - -func testFixturesDocYamlUserGuideDownwardApiDapiPodYamlInBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideDownwardApiDapiPodYamlIn, - "test/fixtures/doc-yaml/user-guide/downward-api/dapi-pod.yaml.in", - ) -} - -func testFixturesDocYamlUserGuideDownwardApiDapiPodYamlIn() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideDownwardApiDapiPodYamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/downward-api/dapi-pod.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideJobYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x8e\xcf\x6a\xc3\x30\x0c\x87\xef\x7e\x0a\xe1\xd3\x06\x09\xcb\x76\x34\xec\x05\x06\x1b\x3b\xed\x32\x7a\x90\x1d\x91\x8a\xfa\x1f\xb6\x9a\xd2\xb7\x2f\x82\x26\xb4\xbf\x8b\xa4\x8f\x4f\x42\x58\xf9\x8f\x5a\xe7\x92\x1d\x78\x94\x70\x7c\x5b\xdf\xcd\x89\xf3\xec\xe0\xab\x78\x93\x48\x70\x46\x41\x67\x00\x32\x26\x72\x50\xd9\xf4\x4a\x41\x81\x50\xaa\x11\x85\xb4\x07\x78\x54\x35\xbb\xae\xc3\xb6\xa2\x09\x25\x0b\x72\xa6\xd6\x37\x32\x3e\xcb\x1a\x4e\xb8\x28\xa1\x16\x77\x16\x4a\x4a\xa8\x9f\xfd\x5b\xe5\x76\x00\xb0\xe3\xb7\xe7\x25\x9f\xd3\xa7\xaf\x6c\x07\xb0\xe3\x25\x92\xd6\xda\x38\x0b\xf8\xca\x2f\x1f\xd3\x34\xbd\xda\xc3\xfd\x4a\xa3\x2e\xd8\xe4\xb7\x44\x0e\x57\x07\x3f\xb4\x52\x33\xe6\x16\x00\x00\xff\xff\x88\x8f\xaf\xe9\x06\x01\x00\x00") - -func testFixturesDocYamlUserGuideJobYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideJobYaml, - "test/fixtures/doc-yaml/user-guide/job.yaml", - ) -} - -func testFixturesDocYamlUserGuideJobYaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideJobYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/job.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideLivenessExecLivenessYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xbf\x6e\xc2\x30\x10\xc6\xf7\x3c\xc5\xf7\x02\x6e\x92\xa1\x1d\x8c\xd4\x01\x75\xe9\x86\x54\xa9\xfb\xc5\xb9\x92\x13\xfe\x13\xd9\x07\x02\x21\xde\xbd\x4a\x08\x0a\x03\xdb\x77\xbf\xcf\x3e\xff\x64\x1a\xe5\x97\x73\x91\x14\x2d\x4e\x6d\x75\x90\xd8\x5b\xec\x52\x5f\x05\x56\xea\x49\xc9\x56\x80\xa7\x8e\x7d\x99\x12\xa0\x5c\xd4\xc2\xcb\x89\x23\x97\x52\x01\x91\x02\xaf\xc0\xf0\x99\x5d\x55\x46\x76\xd3\x71\x97\xa2\x92\x44\xce\xf3\x65\x03\xca\xfb\x65\x8d\x41\xdd\x49\xac\xcb\xb0\x4c\xc6\x2d\x81\xdd\x90\x90\x0e\xf8\x44\xad\x61\xac\x07\x26\xaf\xc3\x06\xc5\x33\x8f\x68\x9b\x0d\x72\x80\xc9\x7f\xaf\xda\x8f\xa6\x99\x97\x48\xa0\x3d\x5b\x5c\xaf\x6f\xdb\x63\xb9\x6c\xd3\xf9\x7b\x02\xb7\xdb\x5c\x3e\x44\x77\x39\x75\x7c\x77\x01\x26\xe9\x47\x9e\xac\x43\xa0\xd8\xaf\xc0\xc0\x91\x3e\x4d\x4f\x6f\x2f\x54\xa2\xa8\x90\xff\x62\x4f\x97\x1f\x76\x29\xf6\xc5\xa2\x7d\x5f\x5a\x95\xc0\xe9\xa8\x6b\x31\xf3\x57\x1f\xf7\x1f\x00\x00\xff\xff\x27\xa4\xbd\xd0\x8f\x01\x00\x00") - -func testFixturesDocYamlUserGuideLivenessExecLivenessYamlInBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideLivenessExecLivenessYamlIn, - "test/fixtures/doc-yaml/user-guide/liveness/exec-liveness.yaml.in", - ) -} - -func testFixturesDocYamlUserGuideLivenessExecLivenessYamlIn() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideLivenessExecLivenessYamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/liveness/exec-liveness.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideLivenessHttpLivenessYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\xcb\x4a\x03\x31\x14\x86\xf7\xf3\x14\xff\x0b\xc4\xb6\x0b\xa1\x64\x27\x0a\x2a\xb8\x28\x08\xe2\xf6\xb4\xf3\xd3\x09\xe6\x32\x24\xa7\x23\x5a\xfa\xee\x32\xd3\x8c\xe3\xc2\xac\x72\xbe\xff\x92\x8b\xf4\xee\x8d\xb9\xb8\x14\x2d\x86\x4d\xf3\xe1\x62\x6b\xb1\x4b\x6d\x13\xa8\xd2\x8a\x8a\x6d\x00\x2f\x7b\xfa\x32\xee\x00\x65\x51\x0b\xef\x06\x46\x96\xd2\x00\x51\x02\x17\x60\x3a\xd5\xbe\x29\x3d\x0f\xa3\xfd\x90\xa2\x8a\x8b\xcc\x53\xd8\x40\xf2\xb1\xd6\x18\xac\x0a\xf3\xc0\x3c\x4d\x2e\xc8\x91\x16\xe7\xf3\xcd\x4b\xed\x79\x1e\xc9\xe5\x32\xa9\x73\xf7\x2e\xa7\x3d\xaf\x71\x60\x3c\xe7\x91\x3a\x8f\x40\x2f\xda\x59\xac\x3a\x8a\xd7\xee\x7b\xc1\x29\xab\xc5\x76\xbd\x5d\xff\xa2\x31\xfa\x44\x69\xeb\xb5\xe6\x65\xea\x53\xde\xcd\xfd\xa9\x68\x0a\xe6\xea\xf9\xe3\x00\x06\xf1\x27\x5a\xdc\x7d\xb2\xa4\xc0\x2a\xb9\xe8\xd4\x89\x7f\xa0\x97\xaf\x57\x1e\x52\x6c\x8b\xc5\xe6\xb6\xaa\xea\x02\xd3\x49\x17\x61\xe2\xff\xfd\xda\x4f\x00\x00\x00\xff\xff\xc1\xcb\xed\x19\x8c\x01\x00\x00") - -func testFixturesDocYamlUserGuideLivenessHttpLivenessYamlInBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideLivenessHttpLivenessYamlIn, - "test/fixtures/doc-yaml/user-guide/liveness/http-liveness.yaml.in", - ) -} - -func testFixturesDocYamlUserGuideLivenessHttpLivenessYamlIn() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideLivenessHttpLivenessYamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/liveness/http-liveness.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideMultiPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb4\x52\x4d\x6b\xc2\x40\x10\xbd\xef\xaf\x18\x72\x5f\x35\x16\x5b\xba\xb7\x42\x3d\x14\xaa\x48\x95\xde\xd7\x64\xd0\xc5\xfd\x08\xbb\x93\x80\x94\xfe\xf7\x92\x4f\x37\xd6\x43\x4b\x69\x4e\x9b\x37\xf3\xe6\xe3\xcd\xe3\x9c\x33\x59\xa8\x77\xf4\x41\x39\x2b\xa0\x4a\xd9\x49\xd9\x5c\xc0\xc6\xe5\xcc\x20\xc9\x5c\x92\x14\x0c\x40\xcb\x3d\xea\x50\xbf\x00\xac\x34\x28\xc0\x63\xae\x42\xf3\xdf\xbc\x78\x40\x4b\xca\xa2\x16\x90\x90\x2f\x31\x69\x43\x4e\xa3\x00\x23\x03\xa1\x67\x23\x26\xef\xc0\x50\x60\x56\x97\xcd\x9c\x25\xa9\x2c\xfa\xae\x09\xef\x92\x07\x6e\xfd\x29\x23\x0f\x28\xe0\x90\xf9\x89\x72\xd3\x53\xb9\x47\x6f\x91\x30\x70\x9c\x23\x27\x0c\xc4\x9b\x8c\x30\x6d\x5a\x88\x74\x32\xeb\x88\x68\x2b\xd1\x3d\x2f\xa5\x57\x4f\xdb\xdd\xf2\x6d\x80\x01\x2a\xa9\x4b\x1c\xcd\x0f\x50\x38\x4f\x21\xe6\x0e\x83\x6e\x9c\x27\x01\xf7\x77\x0f\x8f\x5d\xd4\x63\x70\xa5\xcf\x30\x4a\xd7\xca\xa8\x98\x0e\x90\x15\xa5\x80\x64\x36\x59\xf4\x0d\x2a\xa7\x4b\x83\x2b\x57\xda\x71\x1f\x53\x23\x1b\x49\x47\x01\xd3\x58\x31\x5e\x9f\x24\x2a\xd8\xee\x32\x80\xfd\x72\xfd\x39\xfe\x45\xb9\xed\x72\xbd\x7b\x59\x2f\x5f\xff\xa8\xdd\xbc\x13\xaf\x95\xe0\xea\xf0\xd1\x9a\x68\x0a\x3a\x3f\x2b\x2f\xe0\xe3\x93\xfd\xd8\xb2\x6d\x99\x4a\x6a\x95\xf3\xc2\xe5\x37\x4d\x7c\x89\xde\xf6\x61\x3f\x4c\x24\x58\x40\x5f\x21\x3f\xba\x40\x75\x88\xfd\x4a\xdc\x31\x77\x50\xf9\x9b\x71\xae\x6d\xd3\x9a\x26\x4d\x06\xc0\xa0\x71\xfe\x2c\x60\x91\xce\x57\x8a\x7d\x05\x00\x00\xff\xff\x49\x13\x6b\xed\xc6\x03\x00\x00") - -func testFixturesDocYamlUserGuideMultiPodYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideMultiPodYaml, - "test/fixtures/doc-yaml/user-guide/multi-pod.yaml", - ) -} - -func testFixturesDocYamlUserGuideMultiPodYaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideMultiPodYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/multi-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01Yaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xca\xb1\x0a\x02\x31\x10\x84\xe1\x3e\x4f\x31\x2f\x70\xc5\x61\x97\xd6\xc2\x4a\x14\x8b\xb3\x5e\x92\x41\x82\x97\xe4\xdc\xdd\x13\x7c\x7b\x09\x68\xf9\xcf\x7c\xcf\xd2\x72\xc4\x95\x6a\xc5\x9c\xcd\x97\xbe\xee\x95\xc7\x55\x4a\x0d\xb2\x95\x65\x1c\xbd\x45\xbc\xe7\x50\xe9\x92\xc5\x25\x06\xa0\x49\x65\x44\xfd\xa4\x01\xa7\x39\xd8\xc6\x34\x76\x49\x89\x66\xe7\x9e\x69\x23\x81\x09\x37\x4a\xbe\x6b\x71\x5e\x5a\x62\x00\x94\xd6\x77\x4d\x7f\xa0\x7c\xed\x34\xff\x15\x60\xde\x55\x1e\x8c\x38\x9c\x4a\xf8\x06\x00\x00\xff\xff\x87\xb5\xc5\xba\x9e\x00\x00\x00") - -func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01YamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01Yaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-01.yaml", - ) -} - -func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01Yaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01YamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-01.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02Yaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xca\xb1\x0a\x02\x31\x10\x84\xe1\x3e\x4f\x31\x2f\x70\x85\x56\x92\xd6\xc2\x4a\x14\x8b\xb3\x5e\x92\x41\x82\x97\xe4\xdc\xdd\x13\x7c\x7b\x09\x68\xf9\xcf\x7c\xcf\xd2\x72\xc4\x95\x6a\xc5\x9c\xcd\xe7\xbe\x6c\x95\xc7\x45\x4a\x0d\xb2\x96\x79\x1c\xbd\x45\xbc\x77\xa1\xd2\x25\x8b\x4b\x0c\x40\x93\xca\x88\xfa\x49\x03\x4e\xfb\x60\x2b\xd3\xd8\x25\x25\x9a\x9d\x7b\xa6\x8d\x04\x26\xdc\x28\xf9\xae\xc5\x79\x69\x89\x01\x50\x5a\xdf\x34\xfd\x81\xf2\xb5\xd1\xfc\x57\x80\x79\x57\x79\x30\xe2\x70\x2a\xe1\x1b\x00\x00\xff\xff\x1e\x84\x80\xc1\x9e\x00\x00\x00") - -func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02YamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02Yaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-02.yaml", - ) -} - -func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02Yaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02YamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-02.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03Json = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x8f\x31\x4b\xc6\x30\x10\x86\xf7\xfc\x8a\xe3\xe6\x0a\x16\xb7\xae\x0e\x4e\xa5\xe2\x50\x07\x71\x38\x92\x43\x82\x4d\x52\x73\xa9\x50\x4a\xfe\xbb\x24\xd5\x4a\xf8\xb6\xe3\x7d\x9e\x7b\x8f\x3b\x14\x00\x00\x7e\x5a\x6f\x70\x00\x7c\xe6\x28\x56\x12\xfb\x34\x87\x65\x73\xfc\xb8\x90\x75\xd8\x9d\x12\xad\x76\x2e\x3c\xf8\xa2\x7e\xf7\x7f\xb9\xe3\x44\x86\x12\xe1\x00\x67\x5d\x4d\x3d\x39\x2e\x9e\xdb\x75\x29\xb9\x7b\xc0\xca\x72\x07\x28\x2b\xeb\x56\x26\xad\x59\x64\x0c\x86\x05\x07\x78\xbb\x40\x85\x2f\x4c\xe6\x35\xda\xc4\x93\xd7\xfc\x7b\xb4\x81\x93\x5f\xf6\x91\xfc\x8e\x17\x7a\xff\xb7\x30\xb2\x84\x2d\xea\xda\x7c\xb4\xcb\x91\xbf\x36\x96\x74\x4b\x2a\x95\x14\x22\x7d\xd4\x27\xfa\xfb\x27\x6c\x84\xac\xda\x29\xab\xac\x7e\x02\x00\x00\xff\xff\xfa\x56\x3a\xe5\x4c\x01\x00\x00") - -func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03JsonBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03Json, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-03.json", - ) -} - -func testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03Json() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03JsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-03.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\xce\xb1\x6a\xc4\x30\x0c\xc6\xf1\xdd\x4f\x21\xb2\x17\x9c\xa6\x93\xe7\x42\xa7\x34\xa5\x94\x74\xd6\xc9\xba\x60\x92\xd8\x26\xd2\x85\xf3\xdb\x1f\x4e\x86\xbb\x4d\xfc\xd0\x07\xff\x39\x44\xef\xe0\x87\x37\x09\xa2\x1c\x75\x4c\xcb\x6d\x65\x83\x39\x8c\xd5\x52\x74\xb0\xb7\x66\x65\x45\x8f\x8a\xce\x00\x44\x5c\xd9\x41\xde\xad\xb5\x9d\x91\xcc\x54\x91\x30\x23\x05\x2d\xf5\x06\x10\x4d\x1b\x4e\xec\xa0\xb5\x5f\xc1\x00\x20\x11\x8b\xf4\xc9\xb3\x9c\x0f\x6f\xf0\xcb\xe8\xff\xb7\xa0\x3c\x44\xe2\x17\x1b\xe2\x52\x7a\x8c\xc5\x00\x4c\xc4\xcf\xae\xcf\x20\xf3\xb9\xcd\xfe\xfb\x28\x68\xf0\x42\xed\x7b\xd7\x1c\x78\x95\xbf\x92\x2b\xf2\x5d\x3f\x1a\xf3\x08\x00\x00\xff\xff\x23\x32\x13\xb0\xd6\x00\x00\x00") - -func testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/gce.yaml", - ) -} - -func testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/gce.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01Yaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8e\x3d\x6a\xc0\x30\x0c\x46\x77\x9d\xe2\x23\x7b\x89\xbd\xfa\x02\x9d\x4a\x43\x87\x74\x56\x6d\xd1\x98\xfa\x8f\x48\x0d\xe4\xf6\xc5\xa4\xdb\xe3\x3d\x21\xbe\x9f\xdc\x52\xc0\x26\xa7\x66\x35\x69\xb6\xf7\xf2\x5b\x85\x78\xe4\x7d\xba\xde\x02\x2e\x4f\x55\x8c\x13\x1b\x07\x02\x1a\x57\x09\x18\x97\x73\xce\x13\x50\xf8\x4b\x8a\xce\x00\xd8\x3d\x24\xa0\xf4\xc8\x85\x74\x48\x9c\x36\xf2\xe0\x98\xed\x7e\x2e\xd4\xfa\xc9\xdf\x12\xe0\xdd\x6b\x26\x80\x63\x14\xd5\xb7\x9e\xe4\xff\xc5\x0b\x3e\x84\xd3\xe7\x99\x4d\xde\x5b\x14\x02\x8e\xae\xb6\xb1\x1d\x4f\x1f\x93\xb0\xac\xda\xab\x4c\x5e\xe7\x2c\xe7\x17\xfa\x0b\x00\x00\xff\xff\xd4\x69\x2f\xa0\xc9\x00\x00\x00") - -func testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01YamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01Yaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-01.yaml", - ) -} - -func testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01Yaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01YamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-01.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02Yaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x8f\x31\x6a\x03\x41\x0c\x45\x7b\x9d\xe2\xe3\x3e\x78\xe3\x2a\xcc\x05\x52\x85\x2c\x5b\x38\xb5\xa2\xfd\xc4\x43\x66\x67\x86\x95\x62\xd8\xdb\x87\xc1\xa9\xd2\x3d\xde\x13\x42\xfa\xce\x75\x4d\x98\xb9\x7b\xf6\x60\x8d\x6b\x2b\x3f\x1b\x45\x7b\xbe\x0e\xd7\x6a\xc2\xfd\x59\x36\x86\xae\x1a\x9a\x04\xa8\xba\x31\xa1\xdf\xa7\x69\xba\x08\x50\xf4\x93\xc5\x47\x00\xe2\xe8\x4c\x28\xcd\xb4\x88\x77\xda\xb0\xa6\x5d\x2d\xc7\xf1\x98\xf0\x68\xbb\x7e\x31\xe1\xe5\x35\x0b\xa0\x66\x74\x7f\x6b\x2b\xff\x36\x3c\x61\xa1\xae\x1f\x7b\x0e\xbe\x57\xa3\x00\xb7\xe6\x31\x6b\xdc\x1e\xbd\x0f\xc2\xe9\xec\x6d\xe3\xe0\xf3\xb8\x6a\xba\x9c\x04\xe8\xff\x7e\x58\x68\x45\xf3\x36\xb7\x92\xed\x48\x58\x68\x87\x15\xca\x6f\x00\x00\x00\xff\xff\x1e\x18\x48\xf3\xf1\x00\x00\x00") - -func testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02YamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02Yaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-02.yaml", - ) -} - -func testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02Yaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02YamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-02.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8c\x4d\xaa\x02\x31\x10\x06\xf7\x39\x45\x5f\xe0\xcd\xcb\x8c\xc8\x40\x2e\xe0\x4a\x14\x17\xe3\xba\x49\x3e\x35\x68\x7e\x48\xb7\x03\xde\x5e\xc2\xb8\x2b\xaa\xa0\xb8\xc6\x05\x4d\x62\xc9\x8e\xd6\xd1\x3c\x63\x0e\x8e\xce\xdd\x88\x22\xeb\x52\x5e\xef\x04\x93\xa0\x1c\x58\xd9\x19\xa2\xcc\x09\x8e\xea\x6a\xad\xdd\x19\xa9\xf0\x5d\x7a\xae\xec\xa3\x7e\x3a\x13\x89\x96\xc6\x77\x38\xda\x1f\xa2\x21\x62\xef\x21\x72\x2c\x01\xb2\xf5\x3f\xba\x80\xc3\xb5\x45\xc5\x29\x7b\xf4\xe9\xed\x97\x2a\xeb\xc3\xd1\xbf\x94\x84\x8e\xdb\x0e\x6d\x45\x73\x34\xce\xd3\x30\xce\x83\x1d\x26\xf3\x0d\x00\x00\xff\xff\xe0\xa5\xa0\x46\xb7\x00\x00\x00") - -func testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/nfs.yaml", - ) -} - -func testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/nfs.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuidePodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\xcc\x41\x0a\xc2\x40\x0c\x85\xe1\xfd\x9c\xe2\x5d\xa0\xa0\x3b\xc9\x29\xba\x72\x1f\x3b\xa1\x04\x3b\x49\x98\x09\xe2\xf1\xa5\xa2\x88\xdd\x7e\xc9\xff\x38\xf4\x2a\x7d\xa8\x1b\xe1\x71\x2e\x77\xb5\x4a\x98\xbd\x96\x26\xc9\x95\x93\xa9\x00\xc6\x4d\x08\xb6\xaa\x3d\x0b\xb0\xf1\x4d\xb6\xb1\x3b\xc0\x11\xdf\xc3\x08\x59\x76\x5c\xdc\x92\xd5\xa4\xbf\x5f\xa6\x43\x0c\x68\xe3\xf5\x0f\xc2\x7b\x7e\xe6\xa6\x5f\x3d\x7b\x4f\xc2\xe5\x54\x5e\x01\x00\x00\xff\xff\x76\xb9\xf1\x84\xa2\x00\x00\x00") - -func testFixturesDocYamlUserGuidePodYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuidePodYaml, - "test/fixtures/doc-yaml/user-guide/pod.yaml", - ) -} - -func testFixturesDocYamlUserGuidePodYaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuidePodYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideReplicasetRedisSlaveYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x92\xcd\x4e\xdd\x30\x10\x85\xf7\x79\x8a\x23\xb1\x60\xc3\xe5\xa7\x48\xad\xea\x7d\xff\xa4\x22\x2a\x40\xdd\xa2\x89\x3d\x37\xd7\xc2\xf6\xa4\x1e\x27\x15\x6f\x5f\x39\x24\xdc\xa4\xe0\x5d\x66\xe6\x7c\xe7\xc4\x63\xea\xfd\x6f\xce\xea\x25\x19\x50\xdf\xeb\xc5\x78\xd5\x3c\xf9\xe4\x0c\xee\xb8\x0f\xde\xd2\x3d\x97\x26\x72\x21\x47\x85\x4c\x03\x24\x8a\x6c\x90\xd9\x79\xdd\x69\xa0\x91\x1b\x20\x50\xcb\x41\x6b\x17\x15\x32\xb7\xa7\xcf\x2c\x81\x0d\x96\x41\xa0\x78\xce\x06\x2d\xd9\x27\x4e\xae\xd1\x9e\x6d\x95\x9d\xa0\x1c\xbc\x22\xbf\x58\x2a\x46\x0a\x03\xc3\x2b\x1c\xef\x69\x08\x65\x1a\x89\xe2\xfc\xfe\x19\xbe\x80\xac\x95\xec\x7c\xea\x50\x04\xcf\x32\x64\x58\xd2\xca\x5f\x00\x06\x1f\x1a\x40\x39\xb0\x2d\x92\x5f\x82\x45\x2a\xf6\xf0\x73\x95\xf4\x4d\xd6\xb7\x69\xff\xcf\x0b\x14\x8e\x7d\xa0\xc2\x33\x73\x75\x31\xf5\x84\x0d\xfe\x1d\x83\xf7\x2c\xde\x9a\x00\xcb\xc5\xd4\x63\x25\x15\xf2\x89\xf3\x2b\x78\x37\x6f\x61\x4b\xf1\x91\x3a\x36\xe8\x6c\x3e\xf7\x72\xd1\x89\x74\x81\x77\x4a\xb1\x0f\xac\x17\x5d\xbb\x9b\x72\x4c\x12\x33\x5e\x1f\xf3\xb0\xca\x90\x2d\xaf\x52\xd7\xe2\x9f\x81\xb5\x6c\x6a\x80\xed\x07\x83\xab\xcb\xcb\xb8\xa9\x46\x8e\x92\x9f\xa7\xc6\x8d\x7f\xed\x70\x1a\x8f\xe2\x25\xef\xb7\x2f\x0f\x8f\xdf\x6f\xef\x1f\xee\x1f\xbf\xde\xdd\xde\xac\x28\xd3\xbe\x0d\x5c\xd2\x55\xf1\x04\x3f\xf6\xf3\x76\xc3\xa0\x85\x73\xbd\x89\xbd\xef\xe0\x84\x15\x49\x0a\x7c\xb2\x61\x70\x0c\xaa\x4a\x28\xe7\xd1\x5b\x3e\x43\x39\x70\x42\x91\x0d\xca\x27\x2d\x4c\xae\x3e\x1d\x56\x05\xa5\x9a\xd0\x67\x49\x91\x53\xc1\x48\xd9\x53\x1b\xb8\xbe\xa7\xbd\x4f\xae\x22\x10\xa9\x9a\x6e\x28\xb3\xc5\xa9\xe2\x20\x5a\xce\x60\x25\x4e\x7a\x19\xca\x24\x39\x3d\xfe\xc8\x29\x82\x4f\x0c\x6a\x65\xe4\x33\xd0\xbc\xd7\x05\x34\xa4\x45\x5a\x65\xd3\x64\xcb\x41\xfe\x9e\x6f\xa6\x66\x1a\xa7\xf1\xb5\xdc\x4b\x5e\xaf\x65\x77\x7c\x1d\xbf\x24\x17\x83\x8f\xd7\x9f\x3e\x37\xff\x02\x00\x00\xff\xff\x35\x01\x59\x90\xd5\x03\x00\x00") - -func testFixturesDocYamlUserGuideReplicasetRedisSlaveYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideReplicasetRedisSlaveYaml, - "test/fixtures/doc-yaml/user-guide/replicaset/redis-slave.yaml", - ) -} - -func testFixturesDocYamlUserGuideReplicasetRedisSlaveYaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideReplicasetRedisSlaveYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/replicaset/redis-slave.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideReplicationYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x8d\x31\x6a\x04\x31\x0c\x45\x7b\x9f\xe2\x5f\x60\x20\x21\x4d\x70\x9b\x0b\x84\x14\xe9\x15\x8f\x18\x44\x6c\xc9\xc8\x22\xe4\xf8\x8b\x19\x66\x77\xd8\x5d\x95\xff\x7d\xbd\x4f\x5d\xbe\xd9\x87\x98\x66\xfc\xbd\xa6\x5f\xd1\x35\xe3\x8b\x7b\x95\x42\x21\xa6\x1f\xa6\xe1\x56\x2b\x7b\x6a\x1c\xb4\x52\x50\x4e\x80\x52\xe3\x0c\xdd\x44\xff\xd3\xe8\x5c\x66\xe6\xfb\xd7\xc8\x78\x4b\xc0\xe0\xca\x25\xcc\x27\x01\xa8\xf7\xa3\x0e\x04\xb7\x5e\x29\x78\x47\x67\xed\xbc\xb3\x7a\x4f\x2a\xfd\x70\x1d\x07\xbf\x93\x01\xc7\xfe\xbc\x62\x1a\x24\xca\x7e\xad\x2f\x4f\x84\x80\x34\xda\x1e\xc2\x6e\x1e\xa7\x99\xe5\x66\xfb\x34\x8f\x8c\xf7\x97\x74\x09\x00\x00\xff\xff\x61\x99\x01\xcd\x2f\x01\x00\x00") - -func testFixturesDocYamlUserGuideReplicationYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideReplicationYaml, - "test/fixtures/doc-yaml/user-guide/replication.yaml", - ) -} - -func testFixturesDocYamlUserGuideReplicationYaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideReplicationYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/replication.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideSecretsSecretEnvPodYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x90\x41\x4b\x03\x31\x10\x85\xef\xf9\x15\x8f\x3d\x1b\x4a\xaf\xb9\x15\xad\x17\x51\x4a\x2d\x82\x88\x94\xd9\xec\x53\x43\x9b\x64\x49\xd2\xe0\xfe\x7b\x59\x0d\xb5\x7a\x19\x66\xde\xf7\xe0\xcd\x8c\x8c\xee\x89\x29\xbb\x18\x0c\xea\x52\x1d\x5c\x18\x0c\x36\x71\x50\x9e\x45\x06\x29\x62\x14\x10\xc4\xd3\x20\xd3\x26\x16\xcd\x50\xf5\x18\x07\x95\x47\xda\x19\xda\x18\x8a\xb8\xc0\x94\xe7\x09\xd0\xcd\x5e\x98\x8b\x3e\xc3\x6f\x04\x38\x2f\xef\x34\xe8\x4f\x79\xea\xe3\x67\x13\x6d\xf4\x5e\xe6\xdc\x17\x74\x8b\xde\x85\x45\xfe\xe8\xae\xd0\x69\x3b\x57\x86\xda\xe1\xb5\x39\x19\xaa\x69\xed\x6f\xd0\xfd\xf3\xfe\x71\x7d\xbd\x5d\xef\xf6\x37\xab\xdd\xea\x8c\x81\x2a\xc7\x13\x6f\x53\xf4\xe6\x42\x44\xbb\xe3\x8e\xd3\x96\x6f\x7f\x09\x2e\x57\xff\xb1\xfd\xe3\x07\x4e\x06\xf3\x5b\xf4\x52\x01\x89\xb9\x48\x2a\x9b\x78\x74\x76\x32\x78\x60\x65\x52\x5f\x01\x00\x00\xff\xff\xab\xfe\x4b\x14\x52\x01\x00\x00") - -func testFixturesDocYamlUserGuideSecretsSecretEnvPodYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideSecretsSecretEnvPodYaml, - "test/fixtures/doc-yaml/user-guide/secrets/secret-env-pod.yaml", - ) -} - -func testFixturesDocYamlUserGuideSecretsSecretEnvPodYaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideSecretsSecretEnvPodYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/secrets/secret-env-pod.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideSecretsSecretPodYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x90\x4d\x4e\xc3\x30\x10\x85\xf7\x3e\xc5\x53\xd8\x62\xa2\x6e\x2d\x71\x00\x16\x54\x5d\xb1\x41\x08\x0d\xce\x40\x2d\x62\x3b\xb2\x27\x41\xa8\xea\xdd\x91\x63\x97\x96\x9f\xec\xe6\xbd\x2f\xe3\x4f\x43\x93\x7b\xe0\x94\x5d\x0c\x06\xcb\x46\xbd\xbb\x30\x18\xec\xe2\xa0\x3c\x0b\x0d\x24\x64\x14\x10\xc8\xb3\x41\x66\x9b\x58\xb4\x70\x16\x3d\xc5\x41\xe5\x89\x6d\x69\x6d\x0c\x42\x2e\x70\xca\x65\x02\x74\xe3\x57\xf0\xbb\x5c\x2b\xc0\x79\x7a\x63\x83\xc3\xe1\xe6\x3e\xce\x41\x0a\x73\x57\xa2\xe3\xb1\x01\x36\x7a\x4f\x45\xe2\x11\x5d\xef\x4f\x4c\x77\x8d\x4e\xeb\x57\x37\xf2\x73\xd9\xc8\x41\x6e\x7b\x16\xdb\x37\xa7\x25\x8e\xb3\xe7\xbe\xf8\xea\x4d\x87\xa7\xb6\xab\xc6\xeb\x43\xcd\xad\x7e\x57\xab\x21\xfc\x9c\x05\x9e\xc4\xee\x21\x7b\x6e\x74\xad\x5e\x78\x8c\x1f\x17\x7f\xe8\x9f\x37\xa8\xe8\x45\x0f\xac\xaa\x3b\x92\xbd\xc1\x5f\x33\x75\x72\xf9\x75\xa2\xff\xd6\xd5\xec\xac\x5b\xe7\xed\xf9\xa4\x35\x50\x40\xe2\x2c\x94\x64\x17\x47\x67\x3f\x0d\xb6\xbc\x70\x52\x5f\x01\x00\x00\xff\xff\xff\xe9\x9b\xfb\xd1\x01\x00\x00") - -func testFixturesDocYamlUserGuideSecretsSecretPodYamlInBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideSecretsSecretPodYamlIn, - "test/fixtures/doc-yaml/user-guide/secrets/secret-pod.yaml.in", - ) -} - -func testFixturesDocYamlUserGuideSecretsSecretPodYamlIn() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideSecretsSecretPodYamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/secrets/secret-pod.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideSecretsSecretYaml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4a\x2c\xc8\x0c\x4b\x2d\x2a\xce\xcc\xcf\xb3\x52\x28\x33\xe4\xca\xce\xcc\x4b\xb1\x52\x08\x4e\x4d\x2e\x4a\x2d\xe1\xca\x4d\x2d\x49\x4c\x49\x2c\x49\xb4\xe2\x52\x50\xc8\x4b\xcc\x4d\xb5\x52\x28\x49\x2d\x2e\xd1\x2d\x86\xc8\xc2\x64\x40\xb4\xae\xa1\x95\x42\x4a\xae\x5b\x71\x4a\x78\x68\x89\x6f\xa0\x81\x37\x4c\xd8\x08\x49\x38\xdd\xc0\xdb\x25\x30\xdf\x96\x0b\x10\x00\x00\xff\xff\x5d\x68\x23\xda\x72\x00\x00\x00") - -func testFixturesDocYamlUserGuideSecretsSecretYamlBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideSecretsSecretYaml, - "test/fixtures/doc-yaml/user-guide/secrets/secret.yaml", - ) -} - -func testFixturesDocYamlUserGuideSecretsSecretYaml() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideSecretsSecretYamlBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/secrets/secret.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\xca\xcc\x4d\x4c\x4f\x55\xb2\x52\x50\xca\xce\x2c\x29\x49\xcd\xd3\xcb\x2a\x48\x57\xe2\xaa\xe5\x02\x04\x00\x00\xff\xff\x27\x07\xd0\xf9\x1c\x00\x00\x00") - -func testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJsonBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJson, - "test/fixtures/doc-yaml/user-guide/update-demo/images/kitten/html/data.json", - ) -} - -func testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJson() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/update-demo/images/kitten/html/data.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xaa\xe6\x52\x50\x50\xca\xcc\x4d\x4c\x4f\x55\xb2\x52\x50\xca\x4b\x2c\x2d\xc9\xcc\x29\x2d\xd6\xcb\x2a\x48\x57\xe2\xaa\xe5\x02\x04\x00\x00\xff\xff\xbe\x2a\xe3\xd9\x1e\x00\x00\x00") - -func testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJsonBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJson, - "test/fixtures/doc-yaml/user-guide/update-demo/images/nautilus/html/data.json", - ) -} - -func testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJson() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/update-demo/images/nautilus/html/data.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x8e\x31\x4f\x03\x31\x0c\x85\xf7\xfc\x0a\xff\x81\x43\xb0\xa1\xac\x9d\x10\x4b\x85\x10\xbb\xc9\x3d\xa1\xa8\x8e\x1d\xf9\x4c\x97\xaa\xff\x1d\xa5\x70\xa5\xc3\x21\xe1\x29\x8e\xdf\xfb\xde\xe3\x5e\xdf\xe0\x4b\x35\xcd\x74\x7c\x48\x87\xaa\x73\xa6\x17\x74\xa9\x85\xa3\x9a\xee\x4c\xc3\x4d\x04\x9e\x1a\x82\x67\x0e\xce\x89\x48\xb9\x21\xd3\x67\x9f\x39\x30\xcd\x68\x36\x1d\x6a\x04\x34\x2d\x1d\x65\x08\x16\x08\x4a\x98\x8f\xf7\x86\xfc\xf2\x7b\x5c\x83\x7f\xbc\x44\x81\xd6\x85\x03\xdf\xae\xdb\xc0\x31\xc2\xef\x90\x65\xdd\xfe\xa2\x6e\x93\x89\xd6\x66\x63\x8a\x69\x70\x55\xf8\x95\x36\x51\x6d\xfc\x81\x4c\xa7\xd3\xdd\xf3\xc5\xf4\x34\xf6\xf3\xf9\x1f\x69\xdd\x3c\x6e\x6a\x4d\xbf\xf8\xbd\x79\x64\x7a\xbc\xbf\xde\x88\xba\x5b\x58\x31\xc9\xf4\xba\xdb\xa7\xaf\x00\x00\x00\xff\xff\x67\x96\xe2\x98\x7f\x01\x00\x00") - -func testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlInBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlIn, - "test/fixtures/doc-yaml/user-guide/update-demo/kitten-rc.yaml.in", - ) -} - -func testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlIn() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/update-demo/kitten-rc.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlIn = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x8c\x8e\xb1\x4e\x03\x31\x0c\x86\xf7\x3c\xc5\xff\x02\x87\x80\x09\x65\xed\xc4\x82\x2a\x84\xd8\x4d\xce\x42\x11\x4e\x1c\x39\xbe\x2e\x55\xdf\x1d\x85\x72\x47\x07\x2a\xd5\x5b\xec\xfc\xdf\xff\x51\xcb\xef\x6c\x3d\x6b\x8d\x38\x3c\x84\xaf\x5c\xe7\x88\x57\x6e\x92\x13\x79\xd6\xba\xd3\xea\xa6\x22\x6c\xa1\xb0\xd3\x4c\x4e\x31\x00\x95\x0a\x47\x2c\x6d\x26\xe7\x69\xe6\xa2\x53\xa5\xc5\xb3\x2c\x3d\xf4\xc6\x69\x7c\xb1\x33\xa4\x47\x3c\x06\xa0\xb3\x70\x72\xb5\x71\xf9\x27\xfe\xb3\x3d\xac\x22\x1b\x0b\x70\x2e\x4d\xc8\xf9\x9c\xbb\x54\x18\x23\xf4\xc1\xd2\xd7\xd7\x35\xee\x35\x36\xb0\xba\x8e\x49\x5a\x9d\x72\x65\xdb\x78\x13\x72\xa1\x4f\x8e\x38\x1e\xef\x5e\x7e\x63\xcf\x63\x73\x3a\xdd\xd0\xd8\xd4\xfc\x42\x6d\xfa\x2b\xd8\xab\x79\xc4\xd3\xfd\x76\x03\x9a\xa9\x6b\x52\x89\x78\xdb\xed\xc3\x77\x00\x00\x00\xff\xff\x95\x67\x7a\xc0\x95\x01\x00\x00") - -func testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlInBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlIn, - "test/fixtures/doc-yaml/user-guide/update-demo/nautilus-rc.yaml.in", - ) -} - -func testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlIn() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlInBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/update-demo/nautilus-rc.yaml.in", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesDocYamlUserGuideWalkthroughPodtemplateJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x8d\x3d\x8a\xc3\x30\x10\x85\x7b\x9f\x62\x98\xda\x0b\xbb\xdd\xe2\x43\x2c\x2e\x96\x34\x21\xc5\xc4\x1e\x8c\x88\x35\x12\xf2\x10\x02\x41\x77\x0f\xfe\x91\x2d\x07\xa7\x11\xe2\xbd\x6f\xbe\x07\xf0\x2c\x00\x00\x90\xbc\x39\x71\x18\x8c\x13\xac\x00\xef\x3f\x58\xce\xf9\xcd\x48\x3b\x26\xb5\x6b\xff\xd9\xfa\x9e\x94\x53\x65\x59\xa9\x25\x25\xac\x16\x09\x00\x0a\x59\x1e\x71\xe9\x8c\x3c\x70\x4a\xe3\x82\x6b\x3a\xcf\xf0\x03\x05\x00\xf6\x74\xe5\x7e\xd8\x65\xc7\xea\x4c\x3f\x21\x1d\x0b\x07\x52\xfe\xcb\xd1\xaf\xc4\xae\x24\x0e\x9e\x9b\xbd\x1e\x1b\x27\x4a\x46\x38\x8c\xbb\xe7\x7c\xf8\x7d\xb9\xdc\x75\xc6\x52\xf7\xb1\xf4\x2e\xe8\xec\xdb\xfc\xb5\x0b\x8a\x15\xfc\x7e\xc7\xcb\xc6\xae\xff\x58\xa4\x37\x16\xaf\x00\x00\x00\xff\xff\x18\xd3\xb9\x9c\x9c\x01\x00\x00") - -func testFixturesDocYamlUserGuideWalkthroughPodtemplateJsonBytes() ([]byte, error) { - return bindataRead( - _testFixturesDocYamlUserGuideWalkthroughPodtemplateJson, - "test/fixtures/doc-yaml/user-guide/walkthrough/podtemplate.json", - ) -} - -func testFixturesDocYamlUserGuideWalkthroughPodtemplateJson() (*asset, error) { - bytes, err := testFixturesDocYamlUserGuideWalkthroughPodtemplateJsonBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/doc-yaml/user-guide/walkthrough/podtemplate.json", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesPkgKubectlOwners = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\xca\xb1\x0a\x02\x31\x0c\x00\xd0\x3d\x5f\x11\x70\xee\x75\x95\xdb\x5d\x15\xbc\xc1\x39\xd4\xd0\x06\xb5\x29\x49\x68\x7f\x5f\x70\x73\x7f\x27\x3c\x98\x31\x1a\xe3\xed\x71\xbd\xdc\x0f\x7c\x6a\x71\xa4\xc0\x16\x31\x7c\xcf\xb9\xea\xf6\x3a\xfb\x26\x9a\x75\x75\x36\x07\xa0\x31\x4c\x27\x9b\xef\x90\xd0\xa5\xa6\xf2\x96\xf4\x21\xe9\x41\xf2\x13\xc6\x53\x78\xfd\x03\xf8\x06\x00\x00\xff\xff\xf3\x7b\xef\xed\x69\x00\x00\x00") - -func testFixturesPkgKubectlOwnersBytes() ([]byte, error) { - return bindataRead( - _testFixturesPkgKubectlOwners, - "test/fixtures/pkg/kubectl/OWNERS", - ) -} - -func testFixturesPkgKubectlOwners() (*asset, error) { - bytes, err := testFixturesPkgKubectlOwnersBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/pkg/kubectl/OWNERS", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesPkgKubectlPluginsFooKubectlFoo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x52\x56\xd4\x4f\xca\xcc\xd3\x4f\x4a\x2c\xce\xe0\xe2\x4a\x4d\xce\xc8\x57\x50\xf2\x54\x48\xcc\x55\x28\xc8\x29\x4d\xcf\xcc\x53\x48\xcb\xcf\x57\xe2\x02\x04\x00\x00\xff\xff\xb5\x26\x01\x36\x24\x00\x00\x00") - -func testFixturesPkgKubectlPluginsFooKubectlFooBytes() ([]byte, error) { - return bindataRead( - _testFixturesPkgKubectlPluginsFooKubectlFoo, - "test/fixtures/pkg/kubectl/plugins/foo/kubectl-foo", - ) -} - -func testFixturesPkgKubectlPluginsFooKubectlFoo() (*asset, error) { - bytes, err := testFixturesPkgKubectlPluginsFooKubectlFooBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/pkg/kubectl/plugins/foo/kubectl-foo", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesPkgKubectlPluginsKubectlFoo = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x52\x56\xd4\x4f\xca\xcc\xd3\x4f\x4a\x2c\xce\xe0\xe2\x4a\x4d\xce\xc8\x57\x50\xf2\x54\x48\xcc\x55\x28\xc8\x29\x4d\xcf\xcc\x53\x48\xcb\xcf\x57\xe2\x02\x04\x00\x00\xff\xff\xb5\x26\x01\x36\x24\x00\x00\x00") - -func testFixturesPkgKubectlPluginsKubectlFooBytes() ([]byte, error) { - return bindataRead( - _testFixturesPkgKubectlPluginsKubectlFoo, - "test/fixtures/pkg/kubectl/plugins/kubectl-foo", - ) -} - -func testFixturesPkgKubectlPluginsKubectlFoo() (*asset, error) { - bytes, err := testFixturesPkgKubectlPluginsKubectlFooBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/pkg/kubectl/plugins/kubectl-foo", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -var _testFixturesPkgKubectlPluginsVersionKubectlVersion = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xca\xc1\x09\x02\x41\x0c\x05\xd0\x7b\xaa\xf8\x32\x67\xd9\x66\x6c\x20\xcb\x84\x4d\x40\x92\xc5\x9f\x51\xcb\x17\x41\x8f\x0f\xde\xb8\x6c\x7b\xe4\xb6\x2b\x5d\x64\xe0\xe6\x41\x9c\xf7\x75\x44\x22\x08\x45\xd6\xb5\x4e\x68\xce\x2f\x17\x6d\xa2\x0b\x6d\x6c\x19\xd0\xff\x6c\xd7\x46\x3d\xed\x41\xd7\x59\x2f\x42\x13\xf6\x0e\x76\xe4\xf1\x3b\xf2\x09\x00\x00\xff\xff\xa4\x70\x55\x31\x69\x00\x00\x00") - -func testFixturesPkgKubectlPluginsVersionKubectlVersionBytes() ([]byte, error) { - return bindataRead( - _testFixturesPkgKubectlPluginsVersionKubectlVersion, - "test/fixtures/pkg/kubectl/plugins/version/kubectl-version", - ) -} - -func testFixturesPkgKubectlPluginsVersionKubectlVersion() (*asset, error) { - bytes, err := testFixturesPkgKubectlPluginsVersionKubectlVersionBytes() - if err != nil { - return nil, err - } - - info := bindataFileInfo{name: "test/fixtures/pkg/kubectl/plugins/version/kubectl-version", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)} - a := &asset{bytes: bytes, info: info} - return a, nil -} - -// Asset loads and returns the asset for the given name. -// It returns an error if the asset could not be found or -// could not be loaded. -func Asset(name string) ([]byte, error) { - cannonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[cannonicalName]; ok { - a, err := f() - if err != nil { - return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) - } - return a.bytes, nil - } - return nil, fmt.Errorf("Asset %s not found", name) -} - -// MustAsset is like Asset but panics when Asset would return an error. -// It simplifies safe initialization of global variables. -func MustAsset(name string) []byte { - a, err := Asset(name) - if err != nil { - panic("asset: Asset(" + name + "): " + err.Error()) - } - - return a -} - -// AssetInfo loads and returns the asset info for the given name. -// It returns an error if the asset could not be found or -// could not be loaded. -func AssetInfo(name string) (os.FileInfo, error) { - cannonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[cannonicalName]; ok { - a, err := f() - if err != nil { - return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) - } - return a.info, nil - } - return nil, fmt.Errorf("AssetInfo %s not found", name) -} - -// AssetNames returns the names of the assets. -func AssetNames() []string { - names := make([]string, 0, len(_bindata)) - for name := range _bindata { - names = append(names, name) - } - return names -} - -// _bindata is a table, holding each asset generator, mapped to its name. -var _bindata = map[string]func() (*asset, error){ - "test/e2e/testing-manifests/flexvolume/attachable-with-long-mount": testE2eTestingManifestsFlexvolumeAttachableWithLongMount, - "test/e2e/testing-manifests/flexvolume/dummy": testE2eTestingManifestsFlexvolumeDummy, - "test/e2e/testing-manifests/flexvolume/dummy-attachable": testE2eTestingManifestsFlexvolumeDummyAttachable, - "test/e2e/testing-manifests/guestbook/frontend-deployment.yaml.in": testE2eTestingManifestsGuestbookFrontendDeploymentYamlIn, - "test/e2e/testing-manifests/guestbook/frontend-service.yaml": testE2eTestingManifestsGuestbookFrontendServiceYaml, - "test/e2e/testing-manifests/guestbook/legacy/frontend-controller.yaml": testE2eTestingManifestsGuestbookLegacyFrontendControllerYaml, - "test/e2e/testing-manifests/guestbook/legacy/redis-master-controller.yaml": testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYaml, - "test/e2e/testing-manifests/guestbook/legacy/redis-slave-controller.yaml": testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYaml, - "test/e2e/testing-manifests/guestbook/redis-master-deployment.yaml.in": testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlIn, - "test/e2e/testing-manifests/guestbook/redis-master-service.yaml": testE2eTestingManifestsGuestbookRedisMasterServiceYaml, - "test/e2e/testing-manifests/guestbook/redis-slave-deployment.yaml.in": testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlIn, - "test/e2e/testing-manifests/guestbook/redis-slave-service.yaml": testE2eTestingManifestsGuestbookRedisSlaveServiceYaml, - "test/e2e/testing-manifests/ingress/gce/static-ip-2/ing.yaml": testE2eTestingManifestsIngressGceStaticIp2IngYaml, - "test/e2e/testing-manifests/ingress/gce/static-ip-2/rc.yaml": testE2eTestingManifestsIngressGceStaticIp2RcYaml, - "test/e2e/testing-manifests/ingress/gce/static-ip-2/svc.yaml": testE2eTestingManifestsIngressGceStaticIp2SvcYaml, - "test/e2e/testing-manifests/ingress/http/ing.yaml": testE2eTestingManifestsIngressHttpIngYaml, - "test/e2e/testing-manifests/ingress/http/rc.yaml": testE2eTestingManifestsIngressHttpRcYaml, - "test/e2e/testing-manifests/ingress/http/svc.yaml": testE2eTestingManifestsIngressHttpSvcYaml, - "test/e2e/testing-manifests/ingress/http2/ing.yaml": testE2eTestingManifestsIngressHttp2IngYaml, - "test/e2e/testing-manifests/ingress/http2/rc.yaml": testE2eTestingManifestsIngressHttp2RcYaml, - "test/e2e/testing-manifests/ingress/http2/svc.yaml": testE2eTestingManifestsIngressHttp2SvcYaml, - "test/e2e/testing-manifests/ingress/multiple-certs/ing.yaml": testE2eTestingManifestsIngressMultipleCertsIngYaml, - "test/e2e/testing-manifests/ingress/multiple-certs/rc.yaml": testE2eTestingManifestsIngressMultipleCertsRcYaml, - "test/e2e/testing-manifests/ingress/multiple-certs/svc.yaml": testE2eTestingManifestsIngressMultipleCertsSvcYaml, - "test/e2e/testing-manifests/ingress/neg/ing.yaml": testE2eTestingManifestsIngressNegIngYaml, - "test/e2e/testing-manifests/ingress/neg/rc.yaml": testE2eTestingManifestsIngressNegRcYaml, - "test/e2e/testing-manifests/ingress/neg/svc.yaml": testE2eTestingManifestsIngressNegSvcYaml, - "test/e2e/testing-manifests/ingress/neg-clusterip/ing.yaml": testE2eTestingManifestsIngressNegClusteripIngYaml, - "test/e2e/testing-manifests/ingress/neg-clusterip/rc.yaml": testE2eTestingManifestsIngressNegClusteripRcYaml, - "test/e2e/testing-manifests/ingress/neg-clusterip/svc.yaml": testE2eTestingManifestsIngressNegClusteripSvcYaml, - "test/e2e/testing-manifests/ingress/neg-exposed/ing.yaml": testE2eTestingManifestsIngressNegExposedIngYaml, - "test/e2e/testing-manifests/ingress/neg-exposed/rc.yaml": testE2eTestingManifestsIngressNegExposedRcYaml, - "test/e2e/testing-manifests/ingress/neg-exposed/svc.yaml": testE2eTestingManifestsIngressNegExposedSvcYaml, - "test/e2e/testing-manifests/ingress/nginx/rc.yaml": testE2eTestingManifestsIngressNginxRcYaml, - "test/e2e/testing-manifests/ingress/pre-shared-cert/ing.yaml": testE2eTestingManifestsIngressPreSharedCertIngYaml, - "test/e2e/testing-manifests/ingress/pre-shared-cert/rc.yaml": testE2eTestingManifestsIngressPreSharedCertRcYaml, - "test/e2e/testing-manifests/ingress/pre-shared-cert/svc.yaml": testE2eTestingManifestsIngressPreSharedCertSvcYaml, - "test/e2e/testing-manifests/ingress/static-ip/ing.yaml": testE2eTestingManifestsIngressStaticIpIngYaml, - "test/e2e/testing-manifests/ingress/static-ip/rc.yaml": testE2eTestingManifestsIngressStaticIpRcYaml, - "test/e2e/testing-manifests/ingress/static-ip/secret.yaml": testE2eTestingManifestsIngressStaticIpSecretYaml, - "test/e2e/testing-manifests/ingress/static-ip/svc.yaml": testE2eTestingManifestsIngressStaticIpSvcYaml, - "test/e2e/testing-manifests/kubectl/busybox-pod.yaml": testE2eTestingManifestsKubectlBusyboxPodYaml, - "test/e2e/testing-manifests/kubectl/nginx-deployment1.yaml.in": testE2eTestingManifestsKubectlNginxDeployment1YamlIn, - "test/e2e/testing-manifests/kubectl/nginx-deployment2.yaml.in": testE2eTestingManifestsKubectlNginxDeployment2YamlIn, - "test/e2e/testing-manifests/kubectl/nginx-deployment3.yaml.in": testE2eTestingManifestsKubectlNginxDeployment3YamlIn, - "test/e2e/testing-manifests/kubectl/pause-pod.yaml.in": testE2eTestingManifestsKubectlPausePodYamlIn, - "test/e2e/testing-manifests/kubectl/pod-with-readiness-probe.yaml.in": testE2eTestingManifestsKubectlPodWithReadinessProbeYamlIn, - "test/e2e/testing-manifests/kubectl/redis-master-controller.json.in": testE2eTestingManifestsKubectlRedisMasterControllerJsonIn, - "test/e2e/testing-manifests/kubectl/redis-master-pod.yaml": testE2eTestingManifestsKubectlRedisMasterPodYaml, - "test/e2e/testing-manifests/kubectl/redis-master-service.json": testE2eTestingManifestsKubectlRedisMasterServiceJson, - "test/e2e/testing-manifests/pod": testE2eTestingManifestsPod, - "test/e2e/testing-manifests/rbd-storage-class.yaml": testE2eTestingManifestsRbdStorageClassYaml, - "test/e2e/testing-manifests/serviceloadbalancer/haproxyrc.yaml": testE2eTestingManifestsServiceloadbalancerHaproxyrcYaml, - "test/e2e/testing-manifests/serviceloadbalancer/netexecrc.yaml": testE2eTestingManifestsServiceloadbalancerNetexecrcYaml, - "test/e2e/testing-manifests/serviceloadbalancer/netexecsvc.yaml": testE2eTestingManifestsServiceloadbalancerNetexecsvcYaml, - "test/e2e/testing-manifests/serviceloadbalancer/nginxrc.yaml": testE2eTestingManifestsServiceloadbalancerNginxrcYaml, - "test/e2e/testing-manifests/serviceloadbalancer/nginxsvc.yaml": testE2eTestingManifestsServiceloadbalancerNginxsvcYaml, - "test/e2e/testing-manifests/statefulset/cassandra/controller.yaml": testE2eTestingManifestsStatefulsetCassandraControllerYaml, - "test/e2e/testing-manifests/statefulset/cassandra/pdb.yaml": testE2eTestingManifestsStatefulsetCassandraPdbYaml, - "test/e2e/testing-manifests/statefulset/cassandra/service.yaml": testE2eTestingManifestsStatefulsetCassandraServiceYaml, - "test/e2e/testing-manifests/statefulset/cassandra/statefulset.yaml": testE2eTestingManifestsStatefulsetCassandraStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/cassandra/tester.yaml": testE2eTestingManifestsStatefulsetCassandraTesterYaml, - "test/e2e/testing-manifests/statefulset/cockroachdb/service.yaml": testE2eTestingManifestsStatefulsetCockroachdbServiceYaml, - "test/e2e/testing-manifests/statefulset/cockroachdb/statefulset.yaml": testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/etcd/pdb.yaml": testE2eTestingManifestsStatefulsetEtcdPdbYaml, - "test/e2e/testing-manifests/statefulset/etcd/service.yaml": testE2eTestingManifestsStatefulsetEtcdServiceYaml, - "test/e2e/testing-manifests/statefulset/etcd/statefulset.yaml": testE2eTestingManifestsStatefulsetEtcdStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/etcd/tester.yaml": testE2eTestingManifestsStatefulsetEtcdTesterYaml, - "test/e2e/testing-manifests/statefulset/mysql-galera/service.yaml": testE2eTestingManifestsStatefulsetMysqlGaleraServiceYaml, - "test/e2e/testing-manifests/statefulset/mysql-galera/statefulset.yaml": testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/mysql-upgrade/configmap.yaml": testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYaml, - "test/e2e/testing-manifests/statefulset/mysql-upgrade/service.yaml": testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYaml, - "test/e2e/testing-manifests/statefulset/mysql-upgrade/statefulset.yaml": testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/mysql-upgrade/tester.yaml": testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYaml, - "test/e2e/testing-manifests/statefulset/nginx/service.yaml": testE2eTestingManifestsStatefulsetNginxServiceYaml, - "test/e2e/testing-manifests/statefulset/nginx/statefulset.yaml": testE2eTestingManifestsStatefulsetNginxStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/redis/service.yaml": testE2eTestingManifestsStatefulsetRedisServiceYaml, - "test/e2e/testing-manifests/statefulset/redis/statefulset.yaml": testE2eTestingManifestsStatefulsetRedisStatefulsetYaml, - "test/e2e/testing-manifests/statefulset/zookeeper/service.yaml": testE2eTestingManifestsStatefulsetZookeeperServiceYaml, - "test/e2e/testing-manifests/statefulset/zookeeper/statefulset.yaml": testE2eTestingManifestsStatefulsetZookeeperStatefulsetYaml, - "test/e2e/testing-manifests/storage-csi/OWNERS": testE2eTestingManifestsStorageCsiOwners, - "test/e2e/testing-manifests/storage-csi/cluster-driver-registrar/rbac.yaml": testE2eTestingManifestsStorageCsiClusterDriverRegistrarRbacYaml, - "test/e2e/testing-manifests/storage-csi/controller-role.yaml": testE2eTestingManifestsStorageCsiControllerRoleYaml, - "test/e2e/testing-manifests/storage-csi/driver-registrar/rbac.yaml": testE2eTestingManifestsStorageCsiDriverRegistrarRbacYaml, - "test/e2e/testing-manifests/storage-csi/external-attacher/rbac.yaml": testE2eTestingManifestsStorageCsiExternalAttacherRbacYaml, - "test/e2e/testing-manifests/storage-csi/external-provisioner/rbac.yaml": testE2eTestingManifestsStorageCsiExternalProvisionerRbacYaml, - "test/e2e/testing-manifests/storage-csi/external-resizer/rbac.yaml": testE2eTestingManifestsStorageCsiExternalResizerRbacYaml, - "test/e2e/testing-manifests/storage-csi/external-snapshotter/rbac.yaml": testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYaml, - "test/e2e/testing-manifests/storage-csi/gce-pd/controller_ss.yaml": testE2eTestingManifestsStorageCsiGcePdController_ssYaml, - "test/e2e/testing-manifests/storage-csi/gce-pd/csi-controller-rbac.yaml": testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYaml, - "test/e2e/testing-manifests/storage-csi/gce-pd/node_ds.yaml": testE2eTestingManifestsStorageCsiGcePdNode_dsYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-attacher.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-provisioner.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpath-snapshotter.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/csi-hostpathplugin.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathpluginYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath/e2e-test-rbac.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpath-attacher.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathAttacherYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpath-provisioner.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathProvisionerYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/csi-hostpathplugin.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathpluginYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/hostpath-v0/e2e-test-rbac.yaml": testE2eTestingManifestsStorageCsiHostpathHostpathV0E2eTestRbacYaml, - "test/e2e/testing-manifests/storage-csi/hostpath/usage/csi-storageclass.yaml": testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-mock-cluster-driver-registrar.yaml": testE2eTestingManifestsStorageCsiMockCsiMockClusterDriverRegistrarYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml": testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml": testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver.yaml": testE2eTestingManifestsStorageCsiMockCsiMockDriverYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-mock-rbac.yaml": testE2eTestingManifestsStorageCsiMockCsiMockRbacYaml, - "test/e2e/testing-manifests/storage-csi/mock/csi-storageclass.yaml": testE2eTestingManifestsStorageCsiMockCsiStorageclassYaml, - "test/e2e/testing-manifests/storage-csi/mock/e2e-test-rbac.yaml": testE2eTestingManifestsStorageCsiMockE2eTestRbacYaml, - "test/images/Makefile": testImagesMakefile, - "test/images/OWNERS": testImagesOwners, - "test/images/apparmor-loader/BASEIMAGE": testImagesApparmorLoaderBaseimage, - "test/images/apparmor-loader/Dockerfile": testImagesApparmorLoaderDockerfile, - "test/images/apparmor-loader/Makefile": testImagesApparmorLoaderMakefile, - "test/images/apparmor-loader/VERSION": testImagesApparmorLoaderVersion, - "test/images/apparmor-loader/example-configmap.yaml": testImagesApparmorLoaderExampleConfigmapYaml, - "test/images/apparmor-loader/example-daemon.yaml": testImagesApparmorLoaderExampleDaemonYaml, - "test/images/apparmor-loader/example-namespace.yaml": testImagesApparmorLoaderExampleNamespaceYaml, - "test/images/apparmor-loader/example-pod.yaml": testImagesApparmorLoaderExamplePodYaml, - "test/images/apparmor-loader/loader.go": testImagesApparmorLoaderLoaderGo, - "test/images/audit-proxy/Dockerfile": testImagesAuditProxyDockerfile, - "test/images/audit-proxy/Makefile": testImagesAuditProxyMakefile, - "test/images/audit-proxy/VERSION": testImagesAuditProxyVersion, - "test/images/audit-proxy/main.go": testImagesAuditProxyMainGo, - "test/images/crd-conversion-webhook/BASEIMAGE": testImagesCrdConversionWebhookBaseimage, - "test/images/crd-conversion-webhook/Dockerfile": testImagesCrdConversionWebhookDockerfile, - "test/images/crd-conversion-webhook/Makefile": testImagesCrdConversionWebhookMakefile, - "test/images/crd-conversion-webhook/VERSION": testImagesCrdConversionWebhookVersion, - "test/images/crd-conversion-webhook/config.go": testImagesCrdConversionWebhookConfigGo, - "test/images/crd-conversion-webhook/converter/converter_test.go": testImagesCrdConversionWebhookConverterConverter_testGo, - "test/images/crd-conversion-webhook/converter/example_converter.go": testImagesCrdConversionWebhookConverterExample_converterGo, - "test/images/crd-conversion-webhook/converter/framework.go": testImagesCrdConversionWebhookConverterFrameworkGo, - "test/images/crd-conversion-webhook/main.go": testImagesCrdConversionWebhookMainGo, - "test/images/cuda-vector-add/BASEIMAGE": testImagesCudaVectorAddBaseimage, - "test/images/cuda-vector-add/Dockerfile": testImagesCudaVectorAddDockerfile, - "test/images/cuda-vector-add/VERSION": testImagesCudaVectorAddVersion, - "test/images/dnsutils/BASEIMAGE": testImagesDnsutilsBaseimage, - "test/images/dnsutils/Dockerfile": testImagesDnsutilsDockerfile, - "test/images/dnsutils/VERSION": testImagesDnsutilsVersion, - "test/images/echoserver/BASEIMAGE": testImagesEchoserverBaseimage, - "test/images/echoserver/Dockerfile": testImagesEchoserverDockerfile, - "test/images/echoserver/VERSION": testImagesEchoserverVersion, - "test/images/echoserver/nginx.conf": testImagesEchoserverNginxConf, - "test/images/echoserver/run.sh": testImagesEchoserverRunSh, - "test/images/echoserver/template.lua": testImagesEchoserverTemplateLua, - "test/images/entrypoint-tester/Dockerfile": testImagesEntrypointTesterDockerfile, - "test/images/entrypoint-tester/Makefile": testImagesEntrypointTesterMakefile, - "test/images/entrypoint-tester/VERSION": testImagesEntrypointTesterVersion, - "test/images/entrypoint-tester/ep.go": testImagesEntrypointTesterEpGo, - "test/images/fakegitserver/Dockerfile": testImagesFakegitserverDockerfile, - "test/images/fakegitserver/Makefile": testImagesFakegitserverMakefile, - "test/images/fakegitserver/VERSION": testImagesFakegitserverVersion, - "test/images/fakegitserver/gitserver.go": testImagesFakegitserverGitserverGo, - "test/images/hostexec/BASEIMAGE": testImagesHostexecBaseimage, - "test/images/hostexec/Dockerfile": testImagesHostexecDockerfile, - "test/images/hostexec/VERSION": testImagesHostexecVersion, - "test/images/hostexec/pod.yaml": testImagesHostexecPodYaml, - "test/images/image-util.sh": testImagesImageUtilSh, - "test/images/ipc-utils/BASEIMAGE": testImagesIpcUtilsBaseimage, - "test/images/ipc-utils/Dockerfile": testImagesIpcUtilsDockerfile, - "test/images/ipc-utils/VERSION": testImagesIpcUtilsVersion, - "test/images/iperf/BASEIMAGE": testImagesIperfBaseimage, - "test/images/iperf/Dockerfile": testImagesIperfDockerfile, - "test/images/iperf/VERSION": testImagesIperfVersion, - "test/images/jessie-dnsutils/BASEIMAGE": testImagesJessieDnsutilsBaseimage, - "test/images/jessie-dnsutils/Dockerfile": testImagesJessieDnsutilsDockerfile, - "test/images/jessie-dnsutils/VERSION": testImagesJessieDnsutilsVersion, - "test/images/jessie-dnsutils/fixup-apt-list.sh": testImagesJessieDnsutilsFixupAptListSh, - "test/images/kitten/BASEIMAGE": testImagesKittenBaseimage, - "test/images/kitten/Dockerfile": testImagesKittenDockerfile, - "test/images/kitten/VERSION": testImagesKittenVersion, - "test/images/kitten/html/data.json": testImagesKittenHtmlDataJson, - "test/images/liveness/Dockerfile": testImagesLivenessDockerfile, - "test/images/liveness/Makefile": testImagesLivenessMakefile, - "test/images/liveness/VERSION": testImagesLivenessVersion, - "test/images/liveness/server.go": testImagesLivenessServerGo, - "test/images/logs-generator/BASEIMAGE": testImagesLogsGeneratorBaseimage, - "test/images/logs-generator/Dockerfile": testImagesLogsGeneratorDockerfile, - "test/images/logs-generator/Makefile": testImagesLogsGeneratorMakefile, - "test/images/logs-generator/VERSION": testImagesLogsGeneratorVersion, - "test/images/logs-generator/logs_generator.go": testImagesLogsGeneratorLogs_generatorGo, - "test/images/metadata-concealment/Dockerfile": testImagesMetadataConcealmentDockerfile, - "test/images/metadata-concealment/Makefile": testImagesMetadataConcealmentMakefile, - "test/images/metadata-concealment/VERSION": testImagesMetadataConcealmentVersion, - "test/images/metadata-concealment/check_metadata_concealment.go": testImagesMetadataConcealmentCheck_metadata_concealmentGo, - "test/images/mounttest/Dockerfile": testImagesMounttestDockerfile, - "test/images/mounttest/Makefile": testImagesMounttestMakefile, - "test/images/mounttest/VERSION": testImagesMounttestVersion, - "test/images/mounttest/mt.go": testImagesMounttestMtGo, - "test/images/mounttest-user/BASEIMAGE": testImagesMounttestUserBaseimage, - "test/images/mounttest-user/Dockerfile": testImagesMounttestUserDockerfile, - "test/images/mounttest-user/VERSION": testImagesMounttestUserVersion, - "test/images/nautilus/BASEIMAGE": testImagesNautilusBaseimage, - "test/images/nautilus/Dockerfile": testImagesNautilusDockerfile, - "test/images/nautilus/VERSION": testImagesNautilusVersion, - "test/images/nautilus/html/data.json": testImagesNautilusHtmlDataJson, - "test/images/net/.gitignore": testImagesNetGitignore, - "test/images/net/BASEIMAGE": testImagesNetBaseimage, - "test/images/net/Dockerfile": testImagesNetDockerfile, - "test/images/net/Makefile": testImagesNetMakefile, - "test/images/net/VERSION": testImagesNetVersion, - "test/images/net/common/common.go": testImagesNetCommonCommonGo, - "test/images/net/main.go": testImagesNetMainGo, - "test/images/net/nat/closewait.go": testImagesNetNatClosewaitGo, - "test/images/netexec/.gitignore": testImagesNetexecGitignore, - "test/images/netexec/BASEIMAGE": testImagesNetexecBaseimage, - "test/images/netexec/Dockerfile": testImagesNetexecDockerfile, - "test/images/netexec/Makefile": testImagesNetexecMakefile, - "test/images/netexec/VERSION": testImagesNetexecVersion, - "test/images/netexec/netexec.go": testImagesNetexecNetexecGo, - "test/images/netexec/pod.yaml": testImagesNetexecPodYaml, - "test/images/nettest/Dockerfile": testImagesNettestDockerfile, - "test/images/nettest/Makefile": testImagesNettestMakefile, - "test/images/nettest/VERSION": testImagesNettestVersion, - "test/images/nettest/nettest.go": testImagesNettestNettestGo, - "test/images/nettest/rc.json": testImagesNettestRcJson, - "test/images/nettest/service.json": testImagesNettestServiceJson, - "test/images/nettest/slow-pod.json": testImagesNettestSlowPodJson, - "test/images/nettest/slow-rc.json": testImagesNettestSlowRcJson, - "test/images/no-snat-test/BASEIMAGE": testImagesNoSnatTestBaseimage, - "test/images/no-snat-test/Dockerfile": testImagesNoSnatTestDockerfile, - "test/images/no-snat-test/Makefile": testImagesNoSnatTestMakefile, - "test/images/no-snat-test/VERSION": testImagesNoSnatTestVersion, - "test/images/no-snat-test/main.go": testImagesNoSnatTestMainGo, - "test/images/no-snat-test-proxy/BASEIMAGE": testImagesNoSnatTestProxyBaseimage, - "test/images/no-snat-test-proxy/Dockerfile": testImagesNoSnatTestProxyDockerfile, - "test/images/no-snat-test-proxy/Makefile": testImagesNoSnatTestProxyMakefile, - "test/images/no-snat-test-proxy/VERSION": testImagesNoSnatTestProxyVersion, - "test/images/no-snat-test-proxy/main.go": testImagesNoSnatTestProxyMainGo, - "test/images/node-perf/npb-ep/BASEIMAGE": testImagesNodePerfNpbEpBaseimage, - "test/images/node-perf/npb-ep/Dockerfile": testImagesNodePerfNpbEpDockerfile, - "test/images/node-perf/npb-ep/VERSION": testImagesNodePerfNpbEpVersion, - "test/images/node-perf/npb-is/BASEIMAGE": testImagesNodePerfNpbIsBaseimage, - "test/images/node-perf/npb-is/Dockerfile": testImagesNodePerfNpbIsDockerfile, - "test/images/node-perf/npb-is/VERSION": testImagesNodePerfNpbIsVersion, - "test/images/node-perf/tf-wide-deep/BASEIMAGE": testImagesNodePerfTfWideDeepBaseimage, - "test/images/node-perf/tf-wide-deep/Dockerfile": testImagesNodePerfTfWideDeepDockerfile, - "test/images/node-perf/tf-wide-deep/VERSION": testImagesNodePerfTfWideDeepVersion, - "test/images/nonewprivs/.gitignore": testImagesNonewprivsGitignore, - "test/images/nonewprivs/BASEIMAGE": testImagesNonewprivsBaseimage, - "test/images/nonewprivs/Dockerfile": testImagesNonewprivsDockerfile, - "test/images/nonewprivs/Makefile": testImagesNonewprivsMakefile, - "test/images/nonewprivs/VERSION": testImagesNonewprivsVersion, - "test/images/nonewprivs/nnp.go": testImagesNonewprivsNnpGo, - "test/images/pets/peer-finder/BASEIMAGE": testImagesPetsPeerFinderBaseimage, - "test/images/pets/peer-finder/Dockerfile": testImagesPetsPeerFinderDockerfile, - "test/images/pets/peer-finder/Makefile": testImagesPetsPeerFinderMakefile, - "test/images/pets/peer-finder/VERSION": testImagesPetsPeerFinderVersion, - "test/images/pets/peer-finder/peer-finder.go": testImagesPetsPeerFinderPeerFinderGo, - "test/images/pets/redis-installer/BASEIMAGE": testImagesPetsRedisInstallerBaseimage, - "test/images/pets/redis-installer/Dockerfile": testImagesPetsRedisInstallerDockerfile, - "test/images/pets/redis-installer/Makefile": testImagesPetsRedisInstallerMakefile, - "test/images/pets/redis-installer/VERSION": testImagesPetsRedisInstallerVersion, - "test/images/pets/redis-installer/install.sh": testImagesPetsRedisInstallerInstallSh, - "test/images/pets/redis-installer/on-start.sh": testImagesPetsRedisInstallerOnStartSh, - "test/images/pets/zookeeper-installer/BASEIMAGE": testImagesPetsZookeeperInstallerBaseimage, - "test/images/pets/zookeeper-installer/Dockerfile": testImagesPetsZookeeperInstallerDockerfile, - "test/images/pets/zookeeper-installer/Makefile": testImagesPetsZookeeperInstallerMakefile, - "test/images/pets/zookeeper-installer/VERSION": testImagesPetsZookeeperInstallerVersion, - "test/images/pets/zookeeper-installer/install.sh": testImagesPetsZookeeperInstallerInstallSh, - "test/images/pets/zookeeper-installer/on-start.sh": testImagesPetsZookeeperInstallerOnStartSh, - "test/images/port-forward-tester/.gitignore": testImagesPortForwardTesterGitignore, - "test/images/port-forward-tester/Dockerfile": testImagesPortForwardTesterDockerfile, - "test/images/port-forward-tester/Makefile": testImagesPortForwardTesterMakefile, - "test/images/port-forward-tester/VERSION": testImagesPortForwardTesterVersion, - "test/images/port-forward-tester/portforwardtester.go": testImagesPortForwardTesterPortforwardtesterGo, - "test/images/porter/.gitignore": testImagesPorterGitignore, - "test/images/porter/Dockerfile": testImagesPorterDockerfile, - "test/images/porter/Makefile": testImagesPorterMakefile, - "test/images/porter/VERSION": testImagesPorterVersion, - "test/images/porter/localhost.crt": testImagesPorterLocalhostCrt, - "test/images/porter/localhost.key": testImagesPorterLocalhostKey, - "test/images/porter/pod.json": testImagesPorterPodJson, - "test/images/porter/porter.go": testImagesPorterPorterGo, - "test/images/redis/BASEIMAGE": testImagesRedisBaseimage, - "test/images/redis/Dockerfile": testImagesRedisDockerfile, - "test/images/redis/VERSION": testImagesRedisVersion, - "test/images/redis/redis.conf": testImagesRedisRedisConf, - "test/images/resource-consumer/.gitignore": testImagesResourceConsumerGitignore, - "test/images/resource-consumer/BASEIMAGE": testImagesResourceConsumerBaseimage, - "test/images/resource-consumer/Dockerfile": testImagesResourceConsumerDockerfile, - "test/images/resource-consumer/Makefile": testImagesResourceConsumerMakefile, - "test/images/resource-consumer/VERSION": testImagesResourceConsumerVersion, - "test/images/resource-consumer/common/common.go": testImagesResourceConsumerCommonCommonGo, - "test/images/resource-consumer/consume-cpu/consume_cpu.go": testImagesResourceConsumerConsumeCpuConsume_cpuGo, - "test/images/resource-consumer/controller/BASEIMAGE": testImagesResourceConsumerControllerBaseimage, - "test/images/resource-consumer/controller/Dockerfile": testImagesResourceConsumerControllerDockerfile, - "test/images/resource-consumer/controller/Makefile": testImagesResourceConsumerControllerMakefile, - "test/images/resource-consumer/controller/VERSION": testImagesResourceConsumerControllerVersion, - "test/images/resource-consumer/controller/controller.go": testImagesResourceConsumerControllerControllerGo, - "test/images/resource-consumer/resource_consumer.go": testImagesResourceConsumerResource_consumerGo, - "test/images/resource-consumer/resource_consumer_handler.go": testImagesResourceConsumerResource_consumer_handlerGo, - "test/images/resource-consumer/utils.go": testImagesResourceConsumerUtilsGo, - "test/images/sample-apiserver/BASEIMAGE": testImagesSampleApiserverBaseimage, - "test/images/sample-apiserver/Dockerfile": testImagesSampleApiserverDockerfile, - "test/images/sample-apiserver/VERSION": testImagesSampleApiserverVersion, - "test/images/sample-device-plugin/BASEIMAGE": testImagesSampleDevicePluginBaseimage, - "test/images/sample-device-plugin/Dockerfile": testImagesSampleDevicePluginDockerfile, - "test/images/sample-device-plugin/Makefile": testImagesSampleDevicePluginMakefile, - "test/images/sample-device-plugin/VERSION": testImagesSampleDevicePluginVersion, - "test/images/sample-device-plugin/sampledeviceplugin.go": testImagesSampleDevicePluginSampledevicepluginGo, - "test/images/serve-hostname/BASEIMAGE": testImagesServeHostnameBaseimage, - "test/images/serve-hostname/Dockerfile": testImagesServeHostnameDockerfile, - "test/images/serve-hostname/Makefile": testImagesServeHostnameMakefile, - "test/images/serve-hostname/VERSION": testImagesServeHostnameVersion, - "test/images/serve-hostname/serve_hostname.go": testImagesServeHostnameServe_hostnameGo, - "test/images/test-webserver/Dockerfile": testImagesTestWebserverDockerfile, - "test/images/test-webserver/Makefile": testImagesTestWebserverMakefile, - "test/images/test-webserver/VERSION": testImagesTestWebserverVersion, - "test/images/test-webserver/test-webserver.go": testImagesTestWebserverTestWebserverGo, - "test/images/volume/gluster/BASEIMAGE": testImagesVolumeGlusterBaseimage, - "test/images/volume/gluster/Dockerfile": testImagesVolumeGlusterDockerfile, - "test/images/volume/gluster/VERSION": testImagesVolumeGlusterVersion, - "test/images/volume/gluster/glusterd.vol": testImagesVolumeGlusterGlusterdVol, - "test/images/volume/gluster/index.html": testImagesVolumeGlusterIndexHtml, - "test/images/volume/gluster/run_gluster.sh": testImagesVolumeGlusterRun_glusterSh, - "test/images/volume/iscsi/BASEIMAGE": testImagesVolumeIscsiBaseimage, - "test/images/volume/iscsi/Dockerfile": testImagesVolumeIscsiDockerfile, - "test/images/volume/iscsi/VERSION": testImagesVolumeIscsiVersion, - "test/images/volume/iscsi/block.tar.gz": testImagesVolumeIscsiBlockTarGz, - "test/images/volume/iscsi/create_block.sh": testImagesVolumeIscsiCreate_blockSh, - "test/images/volume/iscsi/initiatorname.iscsi": testImagesVolumeIscsiInitiatornameIscsi, - "test/images/volume/iscsi/run_iscsid.sh": testImagesVolumeIscsiRun_iscsidSh, - "test/images/volume/iscsi/saveconfig.json": testImagesVolumeIscsiSaveconfigJson, - "test/images/volume/nfs/BASEIMAGE": testImagesVolumeNfsBaseimage, - "test/images/volume/nfs/Dockerfile": testImagesVolumeNfsDockerfile, - "test/images/volume/nfs/VERSION": testImagesVolumeNfsVersion, - "test/images/volume/nfs/index.html": testImagesVolumeNfsIndexHtml, - "test/images/volume/nfs/run_nfs.sh": testImagesVolumeNfsRun_nfsSh, - "test/images/volume/rbd/BASEIMAGE": testImagesVolumeRbdBaseimage, - "test/images/volume/rbd/Dockerfile": testImagesVolumeRbdDockerfile, - "test/images/volume/rbd/VERSION": testImagesVolumeRbdVersion, - "test/images/volume/rbd/block.tar.gz": testImagesVolumeRbdBlockTarGz, - "test/images/volume/rbd/bootstrap.sh": testImagesVolumeRbdBootstrapSh, - "test/images/volume/rbd/ceph.conf.sh": testImagesVolumeRbdCephConfSh, - "test/images/volume/rbd/create_block.sh": testImagesVolumeRbdCreate_blockSh, - "test/images/volume/rbd/keyring": testImagesVolumeRbdKeyring, - "test/images/volume/rbd/mon.sh": testImagesVolumeRbdMonSh, - "test/images/volume/rbd/osd.sh": testImagesVolumeRbdOsdSh, - "test/images/webhook/BASEIMAGE": testImagesWebhookBaseimage, - "test/images/webhook/Dockerfile": testImagesWebhookDockerfile, - "test/images/webhook/Makefile": testImagesWebhookMakefile, - "test/images/webhook/VERSION": testImagesWebhookVersion, - "test/images/webhook/addlabel.go": testImagesWebhookAddlabelGo, - "test/images/webhook/alwaysallow.go": testImagesWebhookAlwaysallowGo, - "test/images/webhook/alwaysdeny.go": testImagesWebhookAlwaysdenyGo, - "test/images/webhook/config.go": testImagesWebhookConfigGo, - "test/images/webhook/configmap.go": testImagesWebhookConfigmapGo, - "test/images/webhook/crd.go": testImagesWebhookCrdGo, - "test/images/webhook/customresource.go": testImagesWebhookCustomresourceGo, - "test/images/webhook/main.go": testImagesWebhookMainGo, - "test/images/webhook/patch_test.go": testImagesWebhookPatch_testGo, - "test/images/webhook/pods.go": testImagesWebhookPodsGo, - "test/images/webhook/scheme.go": testImagesWebhookSchemeGo, - "test/fixtures/doc-yaml/admin/daemon.yaml": testFixturesDocYamlAdminDaemonYaml, - "test/fixtures/doc-yaml/admin/high-availability/etcd.yaml": testFixturesDocYamlAdminHighAvailabilityEtcdYaml, - "test/fixtures/doc-yaml/admin/high-availability/kube-apiserver.yaml": testFixturesDocYamlAdminHighAvailabilityKubeApiserverYaml, - "test/fixtures/doc-yaml/admin/high-availability/kube-controller-manager.yaml": testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYaml, - "test/fixtures/doc-yaml/admin/high-availability/kube-scheduler.yaml": testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYaml, - "test/fixtures/doc-yaml/admin/limitrange/invalid-pod.yaml": testFixturesDocYamlAdminLimitrangeInvalidPodYaml, - "test/fixtures/doc-yaml/admin/limitrange/limits.yaml": testFixturesDocYamlAdminLimitrangeLimitsYaml, - "test/fixtures/doc-yaml/admin/limitrange/namespace.yaml": testFixturesDocYamlAdminLimitrangeNamespaceYaml, - "test/fixtures/doc-yaml/admin/limitrange/valid-pod.yaml": testFixturesDocYamlAdminLimitrangeValidPodYaml, - "test/fixtures/doc-yaml/admin/namespaces/namespace-dev.json": testFixturesDocYamlAdminNamespacesNamespaceDevJson, - "test/fixtures/doc-yaml/admin/namespaces/namespace-prod.json": testFixturesDocYamlAdminNamespacesNamespaceProdJson, - "test/fixtures/doc-yaml/admin/resourcequota/limits.yaml": testFixturesDocYamlAdminResourcequotaLimitsYaml, - "test/fixtures/doc-yaml/admin/resourcequota/namespace.yaml": testFixturesDocYamlAdminResourcequotaNamespaceYaml, - "test/fixtures/doc-yaml/admin/resourcequota/quota.yaml": testFixturesDocYamlAdminResourcequotaQuotaYaml, - "test/fixtures/doc-yaml/user-guide/configmap/configmap.yaml": testFixturesDocYamlUserGuideConfigmapConfigmapYaml, - "test/fixtures/doc-yaml/user-guide/deployment.yaml": testFixturesDocYamlUserGuideDeploymentYaml, - "test/fixtures/doc-yaml/user-guide/downward-api/dapi-pod.yaml.in": testFixturesDocYamlUserGuideDownwardApiDapiPodYamlIn, - "test/fixtures/doc-yaml/user-guide/job.yaml": testFixturesDocYamlUserGuideJobYaml, - "test/fixtures/doc-yaml/user-guide/liveness/exec-liveness.yaml.in": testFixturesDocYamlUserGuideLivenessExecLivenessYamlIn, - "test/fixtures/doc-yaml/user-guide/liveness/http-liveness.yaml.in": testFixturesDocYamlUserGuideLivenessHttpLivenessYamlIn, - "test/fixtures/doc-yaml/user-guide/multi-pod.yaml": testFixturesDocYamlUserGuideMultiPodYaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-01.yaml": testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01Yaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-02.yaml": testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02Yaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/claims/claim-03.json": testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03Json, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/gce.yaml": testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-01.yaml": testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01Yaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/local-02.yaml": testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02Yaml, - "test/fixtures/doc-yaml/user-guide/persistent-volumes/volumes/nfs.yaml": testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYaml, - "test/fixtures/doc-yaml/user-guide/pod.yaml": testFixturesDocYamlUserGuidePodYaml, - "test/fixtures/doc-yaml/user-guide/replicaset/redis-slave.yaml": testFixturesDocYamlUserGuideReplicasetRedisSlaveYaml, - "test/fixtures/doc-yaml/user-guide/replication.yaml": testFixturesDocYamlUserGuideReplicationYaml, - "test/fixtures/doc-yaml/user-guide/secrets/secret-env-pod.yaml": testFixturesDocYamlUserGuideSecretsSecretEnvPodYaml, - "test/fixtures/doc-yaml/user-guide/secrets/secret-pod.yaml.in": testFixturesDocYamlUserGuideSecretsSecretPodYamlIn, - "test/fixtures/doc-yaml/user-guide/secrets/secret.yaml": testFixturesDocYamlUserGuideSecretsSecretYaml, - "test/fixtures/doc-yaml/user-guide/update-demo/images/kitten/html/data.json": testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJson, - "test/fixtures/doc-yaml/user-guide/update-demo/images/nautilus/html/data.json": testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJson, - "test/fixtures/doc-yaml/user-guide/update-demo/kitten-rc.yaml.in": testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlIn, - "test/fixtures/doc-yaml/user-guide/update-demo/nautilus-rc.yaml.in": testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlIn, - "test/fixtures/doc-yaml/user-guide/walkthrough/podtemplate.json": testFixturesDocYamlUserGuideWalkthroughPodtemplateJson, - "test/fixtures/pkg/kubectl/OWNERS": testFixturesPkgKubectlOwners, - "test/fixtures/pkg/kubectl/plugins/foo/kubectl-foo": testFixturesPkgKubectlPluginsFooKubectlFoo, - "test/fixtures/pkg/kubectl/plugins/kubectl-foo": testFixturesPkgKubectlPluginsKubectlFoo, - "test/fixtures/pkg/kubectl/plugins/version/kubectl-version": testFixturesPkgKubectlPluginsVersionKubectlVersion, -} - -// AssetDir returns the file names below a certain -// directory embedded in the file by go-bindata. -// For example if you run go-bindata on data/... and data contains the -// following hierarchy: -// data/ -// foo.txt -// img/ -// a.png -// b.png -// then AssetDir("data") would return []string{"foo.txt", "img"} -// AssetDir("data/img") would return []string{"a.png", "b.png"} -// AssetDir("foo.txt") and AssetDir("notexist") would return an error -// AssetDir("") will return []string{"data"}. -func AssetDir(name string) ([]string, error) { - node := _bintree - if len(name) != 0 { - cannonicalName := strings.Replace(name, "\\", "/", -1) - pathList := strings.Split(cannonicalName, "/") - for _, p := range pathList { - node = node.Children[p] - if node == nil { - return nil, fmt.Errorf("Asset %s not found", name) - } - } - } - if node.Func != nil { - return nil, fmt.Errorf("Asset %s not found", name) - } - rv := make([]string, 0, len(node.Children)) - for childName := range node.Children { - rv = append(rv, childName) - } - return rv, nil -} - -type bintree struct { - Func func() (*asset, error) - Children map[string]*bintree -} - -var _bintree = &bintree{nil, map[string]*bintree{ - "test": {nil, map[string]*bintree{ - "e2e": {nil, map[string]*bintree{ - "testing-manifests": {nil, map[string]*bintree{ - "flexvolume": {nil, map[string]*bintree{ - "attachable-with-long-mount": {testE2eTestingManifestsFlexvolumeAttachableWithLongMount, map[string]*bintree{}}, - "dummy": {testE2eTestingManifestsFlexvolumeDummy, map[string]*bintree{}}, - "dummy-attachable": {testE2eTestingManifestsFlexvolumeDummyAttachable, map[string]*bintree{}}, - }}, - "guestbook": {nil, map[string]*bintree{ - "frontend-deployment.yaml.in": {testE2eTestingManifestsGuestbookFrontendDeploymentYamlIn, map[string]*bintree{}}, - "frontend-service.yaml": {testE2eTestingManifestsGuestbookFrontendServiceYaml, map[string]*bintree{}}, - "legacy": {nil, map[string]*bintree{ - "frontend-controller.yaml": {testE2eTestingManifestsGuestbookLegacyFrontendControllerYaml, map[string]*bintree{}}, - "redis-master-controller.yaml": {testE2eTestingManifestsGuestbookLegacyRedisMasterControllerYaml, map[string]*bintree{}}, - "redis-slave-controller.yaml": {testE2eTestingManifestsGuestbookLegacyRedisSlaveControllerYaml, map[string]*bintree{}}, - }}, - "redis-master-deployment.yaml.in": {testE2eTestingManifestsGuestbookRedisMasterDeploymentYamlIn, map[string]*bintree{}}, - "redis-master-service.yaml": {testE2eTestingManifestsGuestbookRedisMasterServiceYaml, map[string]*bintree{}}, - "redis-slave-deployment.yaml.in": {testE2eTestingManifestsGuestbookRedisSlaveDeploymentYamlIn, map[string]*bintree{}}, - "redis-slave-service.yaml": {testE2eTestingManifestsGuestbookRedisSlaveServiceYaml, map[string]*bintree{}}, - }}, - "ingress": {nil, map[string]*bintree{ - "gce": {nil, map[string]*bintree{ - "static-ip-2": {nil, map[string]*bintree{ - "ing.yaml": {testE2eTestingManifestsIngressGceStaticIp2IngYaml, map[string]*bintree{}}, - "rc.yaml": {testE2eTestingManifestsIngressGceStaticIp2RcYaml, map[string]*bintree{}}, - "svc.yaml": {testE2eTestingManifestsIngressGceStaticIp2SvcYaml, map[string]*bintree{}}, - }}, - }}, - "http": {nil, map[string]*bintree{ - "ing.yaml": {testE2eTestingManifestsIngressHttpIngYaml, map[string]*bintree{}}, - "rc.yaml": {testE2eTestingManifestsIngressHttpRcYaml, map[string]*bintree{}}, - "svc.yaml": {testE2eTestingManifestsIngressHttpSvcYaml, map[string]*bintree{}}, - }}, - "http2": {nil, map[string]*bintree{ - "ing.yaml": {testE2eTestingManifestsIngressHttp2IngYaml, map[string]*bintree{}}, - "rc.yaml": {testE2eTestingManifestsIngressHttp2RcYaml, map[string]*bintree{}}, - "svc.yaml": {testE2eTestingManifestsIngressHttp2SvcYaml, map[string]*bintree{}}, - }}, - "multiple-certs": {nil, map[string]*bintree{ - "ing.yaml": {testE2eTestingManifestsIngressMultipleCertsIngYaml, map[string]*bintree{}}, - "rc.yaml": {testE2eTestingManifestsIngressMultipleCertsRcYaml, map[string]*bintree{}}, - "svc.yaml": {testE2eTestingManifestsIngressMultipleCertsSvcYaml, map[string]*bintree{}}, - }}, - "neg": {nil, map[string]*bintree{ - "ing.yaml": {testE2eTestingManifestsIngressNegIngYaml, map[string]*bintree{}}, - "rc.yaml": {testE2eTestingManifestsIngressNegRcYaml, map[string]*bintree{}}, - "svc.yaml": {testE2eTestingManifestsIngressNegSvcYaml, map[string]*bintree{}}, - }}, - "neg-clusterip": {nil, map[string]*bintree{ - "ing.yaml": {testE2eTestingManifestsIngressNegClusteripIngYaml, map[string]*bintree{}}, - "rc.yaml": {testE2eTestingManifestsIngressNegClusteripRcYaml, map[string]*bintree{}}, - "svc.yaml": {testE2eTestingManifestsIngressNegClusteripSvcYaml, map[string]*bintree{}}, - }}, - "neg-exposed": {nil, map[string]*bintree{ - "ing.yaml": {testE2eTestingManifestsIngressNegExposedIngYaml, map[string]*bintree{}}, - "rc.yaml": {testE2eTestingManifestsIngressNegExposedRcYaml, map[string]*bintree{}}, - "svc.yaml": {testE2eTestingManifestsIngressNegExposedSvcYaml, map[string]*bintree{}}, - }}, - "nginx": {nil, map[string]*bintree{ - "rc.yaml": {testE2eTestingManifestsIngressNginxRcYaml, map[string]*bintree{}}, - }}, - "pre-shared-cert": {nil, map[string]*bintree{ - "ing.yaml": {testE2eTestingManifestsIngressPreSharedCertIngYaml, map[string]*bintree{}}, - "rc.yaml": {testE2eTestingManifestsIngressPreSharedCertRcYaml, map[string]*bintree{}}, - "svc.yaml": {testE2eTestingManifestsIngressPreSharedCertSvcYaml, map[string]*bintree{}}, - }}, - "static-ip": {nil, map[string]*bintree{ - "ing.yaml": {testE2eTestingManifestsIngressStaticIpIngYaml, map[string]*bintree{}}, - "rc.yaml": {testE2eTestingManifestsIngressStaticIpRcYaml, map[string]*bintree{}}, - "secret.yaml": {testE2eTestingManifestsIngressStaticIpSecretYaml, map[string]*bintree{}}, - "svc.yaml": {testE2eTestingManifestsIngressStaticIpSvcYaml, map[string]*bintree{}}, - }}, - }}, - "kubectl": {nil, map[string]*bintree{ - "busybox-pod.yaml": {testE2eTestingManifestsKubectlBusyboxPodYaml, map[string]*bintree{}}, - "nginx-deployment1.yaml.in": {testE2eTestingManifestsKubectlNginxDeployment1YamlIn, map[string]*bintree{}}, - "nginx-deployment2.yaml.in": {testE2eTestingManifestsKubectlNginxDeployment2YamlIn, map[string]*bintree{}}, - "nginx-deployment3.yaml.in": {testE2eTestingManifestsKubectlNginxDeployment3YamlIn, map[string]*bintree{}}, - "pause-pod.yaml.in": {testE2eTestingManifestsKubectlPausePodYamlIn, map[string]*bintree{}}, - "pod-with-readiness-probe.yaml.in": {testE2eTestingManifestsKubectlPodWithReadinessProbeYamlIn, map[string]*bintree{}}, - "redis-master-controller.json.in": {testE2eTestingManifestsKubectlRedisMasterControllerJsonIn, map[string]*bintree{}}, - "redis-master-pod.yaml": {testE2eTestingManifestsKubectlRedisMasterPodYaml, map[string]*bintree{}}, - "redis-master-service.json": {testE2eTestingManifestsKubectlRedisMasterServiceJson, map[string]*bintree{}}, - }}, - "pod": {testE2eTestingManifestsPod, map[string]*bintree{}}, - "rbd-storage-class.yaml": {testE2eTestingManifestsRbdStorageClassYaml, map[string]*bintree{}}, - "serviceloadbalancer": {nil, map[string]*bintree{ - "haproxyrc.yaml": {testE2eTestingManifestsServiceloadbalancerHaproxyrcYaml, map[string]*bintree{}}, - "netexecrc.yaml": {testE2eTestingManifestsServiceloadbalancerNetexecrcYaml, map[string]*bintree{}}, - "netexecsvc.yaml": {testE2eTestingManifestsServiceloadbalancerNetexecsvcYaml, map[string]*bintree{}}, - "nginxrc.yaml": {testE2eTestingManifestsServiceloadbalancerNginxrcYaml, map[string]*bintree{}}, - "nginxsvc.yaml": {testE2eTestingManifestsServiceloadbalancerNginxsvcYaml, map[string]*bintree{}}, - }}, - "statefulset": {nil, map[string]*bintree{ - "cassandra": {nil, map[string]*bintree{ - "controller.yaml": {testE2eTestingManifestsStatefulsetCassandraControllerYaml, map[string]*bintree{}}, - "pdb.yaml": {testE2eTestingManifestsStatefulsetCassandraPdbYaml, map[string]*bintree{}}, - "service.yaml": {testE2eTestingManifestsStatefulsetCassandraServiceYaml, map[string]*bintree{}}, - "statefulset.yaml": {testE2eTestingManifestsStatefulsetCassandraStatefulsetYaml, map[string]*bintree{}}, - "tester.yaml": {testE2eTestingManifestsStatefulsetCassandraTesterYaml, map[string]*bintree{}}, - }}, - "cockroachdb": {nil, map[string]*bintree{ - "service.yaml": {testE2eTestingManifestsStatefulsetCockroachdbServiceYaml, map[string]*bintree{}}, - "statefulset.yaml": {testE2eTestingManifestsStatefulsetCockroachdbStatefulsetYaml, map[string]*bintree{}}, - }}, - "etcd": {nil, map[string]*bintree{ - "pdb.yaml": {testE2eTestingManifestsStatefulsetEtcdPdbYaml, map[string]*bintree{}}, - "service.yaml": {testE2eTestingManifestsStatefulsetEtcdServiceYaml, map[string]*bintree{}}, - "statefulset.yaml": {testE2eTestingManifestsStatefulsetEtcdStatefulsetYaml, map[string]*bintree{}}, - "tester.yaml": {testE2eTestingManifestsStatefulsetEtcdTesterYaml, map[string]*bintree{}}, - }}, - "mysql-galera": {nil, map[string]*bintree{ - "service.yaml": {testE2eTestingManifestsStatefulsetMysqlGaleraServiceYaml, map[string]*bintree{}}, - "statefulset.yaml": {testE2eTestingManifestsStatefulsetMysqlGaleraStatefulsetYaml, map[string]*bintree{}}, - }}, - "mysql-upgrade": {nil, map[string]*bintree{ - "configmap.yaml": {testE2eTestingManifestsStatefulsetMysqlUpgradeConfigmapYaml, map[string]*bintree{}}, - "service.yaml": {testE2eTestingManifestsStatefulsetMysqlUpgradeServiceYaml, map[string]*bintree{}}, - "statefulset.yaml": {testE2eTestingManifestsStatefulsetMysqlUpgradeStatefulsetYaml, map[string]*bintree{}}, - "tester.yaml": {testE2eTestingManifestsStatefulsetMysqlUpgradeTesterYaml, map[string]*bintree{}}, - }}, - "nginx": {nil, map[string]*bintree{ - "service.yaml": {testE2eTestingManifestsStatefulsetNginxServiceYaml, map[string]*bintree{}}, - "statefulset.yaml": {testE2eTestingManifestsStatefulsetNginxStatefulsetYaml, map[string]*bintree{}}, - }}, - "redis": {nil, map[string]*bintree{ - "service.yaml": {testE2eTestingManifestsStatefulsetRedisServiceYaml, map[string]*bintree{}}, - "statefulset.yaml": {testE2eTestingManifestsStatefulsetRedisStatefulsetYaml, map[string]*bintree{}}, - }}, - "zookeeper": {nil, map[string]*bintree{ - "service.yaml": {testE2eTestingManifestsStatefulsetZookeeperServiceYaml, map[string]*bintree{}}, - "statefulset.yaml": {testE2eTestingManifestsStatefulsetZookeeperStatefulsetYaml, map[string]*bintree{}}, - }}, - }}, - "storage-csi": {nil, map[string]*bintree{ - "OWNERS": {testE2eTestingManifestsStorageCsiOwners, map[string]*bintree{}}, - "cluster-driver-registrar": {nil, map[string]*bintree{ - "rbac.yaml": {testE2eTestingManifestsStorageCsiClusterDriverRegistrarRbacYaml, map[string]*bintree{}}, - }}, - "controller-role.yaml": {testE2eTestingManifestsStorageCsiControllerRoleYaml, map[string]*bintree{}}, - "driver-registrar": {nil, map[string]*bintree{ - "rbac.yaml": {testE2eTestingManifestsStorageCsiDriverRegistrarRbacYaml, map[string]*bintree{}}, - }}, - "external-attacher": {nil, map[string]*bintree{ - "rbac.yaml": {testE2eTestingManifestsStorageCsiExternalAttacherRbacYaml, map[string]*bintree{}}, - }}, - "external-provisioner": {nil, map[string]*bintree{ - "rbac.yaml": {testE2eTestingManifestsStorageCsiExternalProvisionerRbacYaml, map[string]*bintree{}}, - }}, - "external-resizer": {nil, map[string]*bintree{ - "rbac.yaml": {testE2eTestingManifestsStorageCsiExternalResizerRbacYaml, map[string]*bintree{}}, - }}, - "external-snapshotter": {nil, map[string]*bintree{ - "rbac.yaml": {testE2eTestingManifestsStorageCsiExternalSnapshotterRbacYaml, map[string]*bintree{}}, - }}, - "gce-pd": {nil, map[string]*bintree{ - "controller_ss.yaml": {testE2eTestingManifestsStorageCsiGcePdController_ssYaml, map[string]*bintree{}}, - "csi-controller-rbac.yaml": {testE2eTestingManifestsStorageCsiGcePdCsiControllerRbacYaml, map[string]*bintree{}}, - "node_ds.yaml": {testE2eTestingManifestsStorageCsiGcePdNode_dsYaml, map[string]*bintree{}}, - }}, - "hostpath": {nil, map[string]*bintree{ - "hostpath": {nil, map[string]*bintree{ - "csi-hostpath-attacher.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathAttacherYaml, map[string]*bintree{}}, - "csi-hostpath-provisioner.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathProvisionerYaml, map[string]*bintree{}}, - "csi-hostpath-snapshotter.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathSnapshotterYaml, map[string]*bintree{}}, - "csi-hostpathplugin.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathCsiHostpathpluginYaml, map[string]*bintree{}}, - "e2e-test-rbac.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathE2eTestRbacYaml, map[string]*bintree{}}, - }}, - "hostpath-v0": {nil, map[string]*bintree{ - "csi-hostpath-attacher.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathAttacherYaml, map[string]*bintree{}}, - "csi-hostpath-provisioner.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathProvisionerYaml, map[string]*bintree{}}, - "csi-hostpathplugin.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathV0CsiHostpathpluginYaml, map[string]*bintree{}}, - "e2e-test-rbac.yaml": {testE2eTestingManifestsStorageCsiHostpathHostpathV0E2eTestRbacYaml, map[string]*bintree{}}, - }}, - "usage": {nil, map[string]*bintree{ - "csi-storageclass.yaml": {testE2eTestingManifestsStorageCsiHostpathUsageCsiStorageclassYaml, map[string]*bintree{}}, - }}, - }}, - "mock": {nil, map[string]*bintree{ - "csi-mock-cluster-driver-registrar.yaml": {testE2eTestingManifestsStorageCsiMockCsiMockClusterDriverRegistrarYaml, map[string]*bintree{}}, - "csi-mock-driver-attacher.yaml": {testE2eTestingManifestsStorageCsiMockCsiMockDriverAttacherYaml, map[string]*bintree{}}, - "csi-mock-driver-resizer.yaml": {testE2eTestingManifestsStorageCsiMockCsiMockDriverResizerYaml, map[string]*bintree{}}, - "csi-mock-driver.yaml": {testE2eTestingManifestsStorageCsiMockCsiMockDriverYaml, map[string]*bintree{}}, - "csi-mock-rbac.yaml": {testE2eTestingManifestsStorageCsiMockCsiMockRbacYaml, map[string]*bintree{}}, - "csi-storageclass.yaml": {testE2eTestingManifestsStorageCsiMockCsiStorageclassYaml, map[string]*bintree{}}, - "e2e-test-rbac.yaml": {testE2eTestingManifestsStorageCsiMockE2eTestRbacYaml, map[string]*bintree{}}, - }}, - }}, - }}, - }}, - "fixtures": {nil, map[string]*bintree{ - "doc-yaml": {nil, map[string]*bintree{ - "admin": {nil, map[string]*bintree{ - "daemon.yaml": {testFixturesDocYamlAdminDaemonYaml, map[string]*bintree{}}, - "high-availability": {nil, map[string]*bintree{ - "etcd.yaml": {testFixturesDocYamlAdminHighAvailabilityEtcdYaml, map[string]*bintree{}}, - "kube-apiserver.yaml": {testFixturesDocYamlAdminHighAvailabilityKubeApiserverYaml, map[string]*bintree{}}, - "kube-controller-manager.yaml": {testFixturesDocYamlAdminHighAvailabilityKubeControllerManagerYaml, map[string]*bintree{}}, - "kube-scheduler.yaml": {testFixturesDocYamlAdminHighAvailabilityKubeSchedulerYaml, map[string]*bintree{}}, - }}, - "limitrange": {nil, map[string]*bintree{ - "invalid-pod.yaml": {testFixturesDocYamlAdminLimitrangeInvalidPodYaml, map[string]*bintree{}}, - "limits.yaml": {testFixturesDocYamlAdminLimitrangeLimitsYaml, map[string]*bintree{}}, - "namespace.yaml": {testFixturesDocYamlAdminLimitrangeNamespaceYaml, map[string]*bintree{}}, - "valid-pod.yaml": {testFixturesDocYamlAdminLimitrangeValidPodYaml, map[string]*bintree{}}, - }}, - "namespaces": {nil, map[string]*bintree{ - "namespace-dev.json": {testFixturesDocYamlAdminNamespacesNamespaceDevJson, map[string]*bintree{}}, - "namespace-prod.json": {testFixturesDocYamlAdminNamespacesNamespaceProdJson, map[string]*bintree{}}, - }}, - "resourcequota": {nil, map[string]*bintree{ - "limits.yaml": {testFixturesDocYamlAdminResourcequotaLimitsYaml, map[string]*bintree{}}, - "namespace.yaml": {testFixturesDocYamlAdminResourcequotaNamespaceYaml, map[string]*bintree{}}, - "quota.yaml": {testFixturesDocYamlAdminResourcequotaQuotaYaml, map[string]*bintree{}}, - }}, - }}, - "user-guide": {nil, map[string]*bintree{ - "configmap": {nil, map[string]*bintree{ - "configmap.yaml": {testFixturesDocYamlUserGuideConfigmapConfigmapYaml, map[string]*bintree{}}, - }}, - "deployment.yaml": {testFixturesDocYamlUserGuideDeploymentYaml, map[string]*bintree{}}, - "downward-api": {nil, map[string]*bintree{ - "dapi-pod.yaml.in": {testFixturesDocYamlUserGuideDownwardApiDapiPodYamlIn, map[string]*bintree{}}, - }}, - "job.yaml": {testFixturesDocYamlUserGuideJobYaml, map[string]*bintree{}}, - "liveness": {nil, map[string]*bintree{ - "exec-liveness.yaml.in": {testFixturesDocYamlUserGuideLivenessExecLivenessYamlIn, map[string]*bintree{}}, - "http-liveness.yaml.in": {testFixturesDocYamlUserGuideLivenessHttpLivenessYamlIn, map[string]*bintree{}}, - }}, - "multi-pod.yaml": {testFixturesDocYamlUserGuideMultiPodYaml, map[string]*bintree{}}, - "persistent-volumes": {nil, map[string]*bintree{ - "claims": {nil, map[string]*bintree{ - "claim-01.yaml": {testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim01Yaml, map[string]*bintree{}}, - "claim-02.yaml": {testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim02Yaml, map[string]*bintree{}}, - "claim-03.json": {testFixturesDocYamlUserGuidePersistentVolumesClaimsClaim03Json, map[string]*bintree{}}, - }}, - "volumes": {nil, map[string]*bintree{ - "gce.yaml": {testFixturesDocYamlUserGuidePersistentVolumesVolumesGceYaml, map[string]*bintree{}}, - "local-01.yaml": {testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal01Yaml, map[string]*bintree{}}, - "local-02.yaml": {testFixturesDocYamlUserGuidePersistentVolumesVolumesLocal02Yaml, map[string]*bintree{}}, - "nfs.yaml": {testFixturesDocYamlUserGuidePersistentVolumesVolumesNfsYaml, map[string]*bintree{}}, - }}, - }}, - "pod.yaml": {testFixturesDocYamlUserGuidePodYaml, map[string]*bintree{}}, - "replicaset": {nil, map[string]*bintree{ - "redis-slave.yaml": {testFixturesDocYamlUserGuideReplicasetRedisSlaveYaml, map[string]*bintree{}}, - }}, - "replication.yaml": {testFixturesDocYamlUserGuideReplicationYaml, map[string]*bintree{}}, - "secrets": {nil, map[string]*bintree{ - "secret-env-pod.yaml": {testFixturesDocYamlUserGuideSecretsSecretEnvPodYaml, map[string]*bintree{}}, - "secret-pod.yaml.in": {testFixturesDocYamlUserGuideSecretsSecretPodYamlIn, map[string]*bintree{}}, - "secret.yaml": {testFixturesDocYamlUserGuideSecretsSecretYaml, map[string]*bintree{}}, - }}, - "update-demo": {nil, map[string]*bintree{ - "images": {nil, map[string]*bintree{ - "kitten": {nil, map[string]*bintree{ - "html": {nil, map[string]*bintree{ - "data.json": {testFixturesDocYamlUserGuideUpdateDemoImagesKittenHtmlDataJson, map[string]*bintree{}}, - }}, - }}, - "nautilus": {nil, map[string]*bintree{ - "html": {nil, map[string]*bintree{ - "data.json": {testFixturesDocYamlUserGuideUpdateDemoImagesNautilusHtmlDataJson, map[string]*bintree{}}, - }}, - }}, - }}, - "kitten-rc.yaml.in": {testFixturesDocYamlUserGuideUpdateDemoKittenRcYamlIn, map[string]*bintree{}}, - "nautilus-rc.yaml.in": {testFixturesDocYamlUserGuideUpdateDemoNautilusRcYamlIn, map[string]*bintree{}}, - }}, - "walkthrough": {nil, map[string]*bintree{ - "podtemplate.json": {testFixturesDocYamlUserGuideWalkthroughPodtemplateJson, map[string]*bintree{}}, - }}, - }}, - }}, - "pkg": {nil, map[string]*bintree{ - "kubectl": {nil, map[string]*bintree{ - "OWNERS": {testFixturesPkgKubectlOwners, map[string]*bintree{}}, - "plugins": {nil, map[string]*bintree{ - "foo": {nil, map[string]*bintree{ - "kubectl-foo": {testFixturesPkgKubectlPluginsFooKubectlFoo, map[string]*bintree{}}, - }}, - "kubectl-foo": {testFixturesPkgKubectlPluginsKubectlFoo, map[string]*bintree{}}, - "version": {nil, map[string]*bintree{ - "kubectl-version": {testFixturesPkgKubectlPluginsVersionKubectlVersion, map[string]*bintree{}}, - }}, - }}, - }}, - }}, - }}, - "images": {nil, map[string]*bintree{ - "Makefile": {testImagesMakefile, map[string]*bintree{}}, - "OWNERS": {testImagesOwners, map[string]*bintree{}}, - "apparmor-loader": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesApparmorLoaderBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesApparmorLoaderDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesApparmorLoaderMakefile, map[string]*bintree{}}, - "VERSION": {testImagesApparmorLoaderVersion, map[string]*bintree{}}, - "example-configmap.yaml": {testImagesApparmorLoaderExampleConfigmapYaml, map[string]*bintree{}}, - "example-daemon.yaml": {testImagesApparmorLoaderExampleDaemonYaml, map[string]*bintree{}}, - "example-namespace.yaml": {testImagesApparmorLoaderExampleNamespaceYaml, map[string]*bintree{}}, - "example-pod.yaml": {testImagesApparmorLoaderExamplePodYaml, map[string]*bintree{}}, - "loader.go": {testImagesApparmorLoaderLoaderGo, map[string]*bintree{}}, - }}, - "audit-proxy": {nil, map[string]*bintree{ - "Dockerfile": {testImagesAuditProxyDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesAuditProxyMakefile, map[string]*bintree{}}, - "VERSION": {testImagesAuditProxyVersion, map[string]*bintree{}}, - "main.go": {testImagesAuditProxyMainGo, map[string]*bintree{}}, - }}, - "crd-conversion-webhook": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesCrdConversionWebhookBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesCrdConversionWebhookDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesCrdConversionWebhookMakefile, map[string]*bintree{}}, - "VERSION": {testImagesCrdConversionWebhookVersion, map[string]*bintree{}}, - "config.go": {testImagesCrdConversionWebhookConfigGo, map[string]*bintree{}}, - "converter": {nil, map[string]*bintree{ - "converter_test.go": {testImagesCrdConversionWebhookConverterConverter_testGo, map[string]*bintree{}}, - "example_converter.go": {testImagesCrdConversionWebhookConverterExample_converterGo, map[string]*bintree{}}, - "framework.go": {testImagesCrdConversionWebhookConverterFrameworkGo, map[string]*bintree{}}, - }}, - "main.go": {testImagesCrdConversionWebhookMainGo, map[string]*bintree{}}, - }}, - "cuda-vector-add": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesCudaVectorAddBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesCudaVectorAddDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesCudaVectorAddVersion, map[string]*bintree{}}, - }}, - "dnsutils": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesDnsutilsBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesDnsutilsDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesDnsutilsVersion, map[string]*bintree{}}, - }}, - "echoserver": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesEchoserverBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesEchoserverDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesEchoserverVersion, map[string]*bintree{}}, - "nginx.conf": {testImagesEchoserverNginxConf, map[string]*bintree{}}, - "run.sh": {testImagesEchoserverRunSh, map[string]*bintree{}}, - "template.lua": {testImagesEchoserverTemplateLua, map[string]*bintree{}}, - }}, - "entrypoint-tester": {nil, map[string]*bintree{ - "Dockerfile": {testImagesEntrypointTesterDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesEntrypointTesterMakefile, map[string]*bintree{}}, - "VERSION": {testImagesEntrypointTesterVersion, map[string]*bintree{}}, - "ep.go": {testImagesEntrypointTesterEpGo, map[string]*bintree{}}, - }}, - "fakegitserver": {nil, map[string]*bintree{ - "Dockerfile": {testImagesFakegitserverDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesFakegitserverMakefile, map[string]*bintree{}}, - "VERSION": {testImagesFakegitserverVersion, map[string]*bintree{}}, - "gitserver.go": {testImagesFakegitserverGitserverGo, map[string]*bintree{}}, - }}, - "hostexec": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesHostexecBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesHostexecDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesHostexecVersion, map[string]*bintree{}}, - "pod.yaml": {testImagesHostexecPodYaml, map[string]*bintree{}}, - }}, - "image-util.sh": {testImagesImageUtilSh, map[string]*bintree{}}, - "ipc-utils": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesIpcUtilsBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesIpcUtilsDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesIpcUtilsVersion, map[string]*bintree{}}, - }}, - "iperf": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesIperfBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesIperfDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesIperfVersion, map[string]*bintree{}}, - }}, - "jessie-dnsutils": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesJessieDnsutilsBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesJessieDnsutilsDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesJessieDnsutilsVersion, map[string]*bintree{}}, - "fixup-apt-list.sh": {testImagesJessieDnsutilsFixupAptListSh, map[string]*bintree{}}, - }}, - "kitten": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesKittenBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesKittenDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesKittenVersion, map[string]*bintree{}}, - "html": {nil, map[string]*bintree{ - "data.json": {testImagesKittenHtmlDataJson, map[string]*bintree{}}, - }}, - }}, - "liveness": {nil, map[string]*bintree{ - "Dockerfile": {testImagesLivenessDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesLivenessMakefile, map[string]*bintree{}}, - "VERSION": {testImagesLivenessVersion, map[string]*bintree{}}, - "server.go": {testImagesLivenessServerGo, map[string]*bintree{}}, - }}, - "logs-generator": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesLogsGeneratorBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesLogsGeneratorDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesLogsGeneratorMakefile, map[string]*bintree{}}, - "VERSION": {testImagesLogsGeneratorVersion, map[string]*bintree{}}, - "logs_generator.go": {testImagesLogsGeneratorLogs_generatorGo, map[string]*bintree{}}, - }}, - "metadata-concealment": {nil, map[string]*bintree{ - "Dockerfile": {testImagesMetadataConcealmentDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesMetadataConcealmentMakefile, map[string]*bintree{}}, - "VERSION": {testImagesMetadataConcealmentVersion, map[string]*bintree{}}, - "check_metadata_concealment.go": {testImagesMetadataConcealmentCheck_metadata_concealmentGo, map[string]*bintree{}}, - }}, - "mounttest": {nil, map[string]*bintree{ - "Dockerfile": {testImagesMounttestDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesMounttestMakefile, map[string]*bintree{}}, - "VERSION": {testImagesMounttestVersion, map[string]*bintree{}}, - "mt.go": {testImagesMounttestMtGo, map[string]*bintree{}}, - }}, - "mounttest-user": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesMounttestUserBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesMounttestUserDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesMounttestUserVersion, map[string]*bintree{}}, - }}, - "nautilus": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesNautilusBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesNautilusDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesNautilusVersion, map[string]*bintree{}}, - "html": {nil, map[string]*bintree{ - "data.json": {testImagesNautilusHtmlDataJson, map[string]*bintree{}}, - }}, - }}, - "net": {nil, map[string]*bintree{ - ".gitignore": {testImagesNetGitignore, map[string]*bintree{}}, - "BASEIMAGE": {testImagesNetBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesNetDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesNetMakefile, map[string]*bintree{}}, - "VERSION": {testImagesNetVersion, map[string]*bintree{}}, - "common": {nil, map[string]*bintree{ - "common.go": {testImagesNetCommonCommonGo, map[string]*bintree{}}, - }}, - "main.go": {testImagesNetMainGo, map[string]*bintree{}}, - "nat": {nil, map[string]*bintree{ - "closewait.go": {testImagesNetNatClosewaitGo, map[string]*bintree{}}, - }}, - }}, - "netexec": {nil, map[string]*bintree{ - ".gitignore": {testImagesNetexecGitignore, map[string]*bintree{}}, - "BASEIMAGE": {testImagesNetexecBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesNetexecDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesNetexecMakefile, map[string]*bintree{}}, - "VERSION": {testImagesNetexecVersion, map[string]*bintree{}}, - "netexec.go": {testImagesNetexecNetexecGo, map[string]*bintree{}}, - "pod.yaml": {testImagesNetexecPodYaml, map[string]*bintree{}}, - }}, - "nettest": {nil, map[string]*bintree{ - "Dockerfile": {testImagesNettestDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesNettestMakefile, map[string]*bintree{}}, - "VERSION": {testImagesNettestVersion, map[string]*bintree{}}, - "nettest.go": {testImagesNettestNettestGo, map[string]*bintree{}}, - "rc.json": {testImagesNettestRcJson, map[string]*bintree{}}, - "service.json": {testImagesNettestServiceJson, map[string]*bintree{}}, - "slow-pod.json": {testImagesNettestSlowPodJson, map[string]*bintree{}}, - "slow-rc.json": {testImagesNettestSlowRcJson, map[string]*bintree{}}, - }}, - "no-snat-test": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesNoSnatTestBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesNoSnatTestDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesNoSnatTestMakefile, map[string]*bintree{}}, - "VERSION": {testImagesNoSnatTestVersion, map[string]*bintree{}}, - "main.go": {testImagesNoSnatTestMainGo, map[string]*bintree{}}, - }}, - "no-snat-test-proxy": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesNoSnatTestProxyBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesNoSnatTestProxyDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesNoSnatTestProxyMakefile, map[string]*bintree{}}, - "VERSION": {testImagesNoSnatTestProxyVersion, map[string]*bintree{}}, - "main.go": {testImagesNoSnatTestProxyMainGo, map[string]*bintree{}}, - }}, - "node-perf": {nil, map[string]*bintree{ - "npb-ep": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesNodePerfNpbEpBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesNodePerfNpbEpDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesNodePerfNpbEpVersion, map[string]*bintree{}}, - }}, - "npb-is": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesNodePerfNpbIsBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesNodePerfNpbIsDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesNodePerfNpbIsVersion, map[string]*bintree{}}, - }}, - "tf-wide-deep": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesNodePerfTfWideDeepBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesNodePerfTfWideDeepDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesNodePerfTfWideDeepVersion, map[string]*bintree{}}, - }}, - }}, - "nonewprivs": {nil, map[string]*bintree{ - ".gitignore": {testImagesNonewprivsGitignore, map[string]*bintree{}}, - "BASEIMAGE": {testImagesNonewprivsBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesNonewprivsDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesNonewprivsMakefile, map[string]*bintree{}}, - "VERSION": {testImagesNonewprivsVersion, map[string]*bintree{}}, - "nnp.go": {testImagesNonewprivsNnpGo, map[string]*bintree{}}, - }}, - "pets": {nil, map[string]*bintree{ - "peer-finder": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesPetsPeerFinderBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesPetsPeerFinderDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesPetsPeerFinderMakefile, map[string]*bintree{}}, - "VERSION": {testImagesPetsPeerFinderVersion, map[string]*bintree{}}, - "peer-finder.go": {testImagesPetsPeerFinderPeerFinderGo, map[string]*bintree{}}, - }}, - "redis-installer": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesPetsRedisInstallerBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesPetsRedisInstallerDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesPetsRedisInstallerMakefile, map[string]*bintree{}}, - "VERSION": {testImagesPetsRedisInstallerVersion, map[string]*bintree{}}, - "install.sh": {testImagesPetsRedisInstallerInstallSh, map[string]*bintree{}}, - "on-start.sh": {testImagesPetsRedisInstallerOnStartSh, map[string]*bintree{}}, - }}, - "zookeeper-installer": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesPetsZookeeperInstallerBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesPetsZookeeperInstallerDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesPetsZookeeperInstallerMakefile, map[string]*bintree{}}, - "VERSION": {testImagesPetsZookeeperInstallerVersion, map[string]*bintree{}}, - "install.sh": {testImagesPetsZookeeperInstallerInstallSh, map[string]*bintree{}}, - "on-start.sh": {testImagesPetsZookeeperInstallerOnStartSh, map[string]*bintree{}}, - }}, - }}, - "port-forward-tester": {nil, map[string]*bintree{ - ".gitignore": {testImagesPortForwardTesterGitignore, map[string]*bintree{}}, - "Dockerfile": {testImagesPortForwardTesterDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesPortForwardTesterMakefile, map[string]*bintree{}}, - "VERSION": {testImagesPortForwardTesterVersion, map[string]*bintree{}}, - "portforwardtester.go": {testImagesPortForwardTesterPortforwardtesterGo, map[string]*bintree{}}, - }}, - "porter": {nil, map[string]*bintree{ - ".gitignore": {testImagesPorterGitignore, map[string]*bintree{}}, - "Dockerfile": {testImagesPorterDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesPorterMakefile, map[string]*bintree{}}, - "VERSION": {testImagesPorterVersion, map[string]*bintree{}}, - "localhost.crt": {testImagesPorterLocalhostCrt, map[string]*bintree{}}, - "localhost.key": {testImagesPorterLocalhostKey, map[string]*bintree{}}, - "pod.json": {testImagesPorterPodJson, map[string]*bintree{}}, - "porter.go": {testImagesPorterPorterGo, map[string]*bintree{}}, - }}, - "redis": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesRedisBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesRedisDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesRedisVersion, map[string]*bintree{}}, - "redis.conf": {testImagesRedisRedisConf, map[string]*bintree{}}, - }}, - "resource-consumer": {nil, map[string]*bintree{ - ".gitignore": {testImagesResourceConsumerGitignore, map[string]*bintree{}}, - "BASEIMAGE": {testImagesResourceConsumerBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesResourceConsumerDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesResourceConsumerMakefile, map[string]*bintree{}}, - "VERSION": {testImagesResourceConsumerVersion, map[string]*bintree{}}, - "common": {nil, map[string]*bintree{ - "common.go": {testImagesResourceConsumerCommonCommonGo, map[string]*bintree{}}, - }}, - "consume-cpu": {nil, map[string]*bintree{ - "consume_cpu.go": {testImagesResourceConsumerConsumeCpuConsume_cpuGo, map[string]*bintree{}}, - }}, - "controller": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesResourceConsumerControllerBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesResourceConsumerControllerDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesResourceConsumerControllerMakefile, map[string]*bintree{}}, - "VERSION": {testImagesResourceConsumerControllerVersion, map[string]*bintree{}}, - "controller.go": {testImagesResourceConsumerControllerControllerGo, map[string]*bintree{}}, - }}, - "resource_consumer.go": {testImagesResourceConsumerResource_consumerGo, map[string]*bintree{}}, - "resource_consumer_handler.go": {testImagesResourceConsumerResource_consumer_handlerGo, map[string]*bintree{}}, - "utils.go": {testImagesResourceConsumerUtilsGo, map[string]*bintree{}}, - }}, - "sample-apiserver": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesSampleApiserverBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesSampleApiserverDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesSampleApiserverVersion, map[string]*bintree{}}, - }}, - "sample-device-plugin": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesSampleDevicePluginBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesSampleDevicePluginDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesSampleDevicePluginMakefile, map[string]*bintree{}}, - "VERSION": {testImagesSampleDevicePluginVersion, map[string]*bintree{}}, - "sampledeviceplugin.go": {testImagesSampleDevicePluginSampledevicepluginGo, map[string]*bintree{}}, - }}, - "serve-hostname": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesServeHostnameBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesServeHostnameDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesServeHostnameMakefile, map[string]*bintree{}}, - "VERSION": {testImagesServeHostnameVersion, map[string]*bintree{}}, - "serve_hostname.go": {testImagesServeHostnameServe_hostnameGo, map[string]*bintree{}}, - }}, - "test-webserver": {nil, map[string]*bintree{ - "Dockerfile": {testImagesTestWebserverDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesTestWebserverMakefile, map[string]*bintree{}}, - "VERSION": {testImagesTestWebserverVersion, map[string]*bintree{}}, - "test-webserver.go": {testImagesTestWebserverTestWebserverGo, map[string]*bintree{}}, - }}, - "volume": {nil, map[string]*bintree{ - "gluster": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesVolumeGlusterBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesVolumeGlusterDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesVolumeGlusterVersion, map[string]*bintree{}}, - "glusterd.vol": {testImagesVolumeGlusterGlusterdVol, map[string]*bintree{}}, - "index.html": {testImagesVolumeGlusterIndexHtml, map[string]*bintree{}}, - "run_gluster.sh": {testImagesVolumeGlusterRun_glusterSh, map[string]*bintree{}}, - }}, - "iscsi": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesVolumeIscsiBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesVolumeIscsiDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesVolumeIscsiVersion, map[string]*bintree{}}, - "block.tar.gz": {testImagesVolumeIscsiBlockTarGz, map[string]*bintree{}}, - "create_block.sh": {testImagesVolumeIscsiCreate_blockSh, map[string]*bintree{}}, - "initiatorname.iscsi": {testImagesVolumeIscsiInitiatornameIscsi, map[string]*bintree{}}, - "run_iscsid.sh": {testImagesVolumeIscsiRun_iscsidSh, map[string]*bintree{}}, - "saveconfig.json": {testImagesVolumeIscsiSaveconfigJson, map[string]*bintree{}}, - }}, - "nfs": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesVolumeNfsBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesVolumeNfsDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesVolumeNfsVersion, map[string]*bintree{}}, - "index.html": {testImagesVolumeNfsIndexHtml, map[string]*bintree{}}, - "run_nfs.sh": {testImagesVolumeNfsRun_nfsSh, map[string]*bintree{}}, - }}, - "rbd": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesVolumeRbdBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesVolumeRbdDockerfile, map[string]*bintree{}}, - "VERSION": {testImagesVolumeRbdVersion, map[string]*bintree{}}, - "block.tar.gz": {testImagesVolumeRbdBlockTarGz, map[string]*bintree{}}, - "bootstrap.sh": {testImagesVolumeRbdBootstrapSh, map[string]*bintree{}}, - "ceph.conf.sh": {testImagesVolumeRbdCephConfSh, map[string]*bintree{}}, - "create_block.sh": {testImagesVolumeRbdCreate_blockSh, map[string]*bintree{}}, - "keyring": {testImagesVolumeRbdKeyring, map[string]*bintree{}}, - "mon.sh": {testImagesVolumeRbdMonSh, map[string]*bintree{}}, - "osd.sh": {testImagesVolumeRbdOsdSh, map[string]*bintree{}}, - }}, - }}, - "webhook": {nil, map[string]*bintree{ - "BASEIMAGE": {testImagesWebhookBaseimage, map[string]*bintree{}}, - "Dockerfile": {testImagesWebhookDockerfile, map[string]*bintree{}}, - "Makefile": {testImagesWebhookMakefile, map[string]*bintree{}}, - "VERSION": {testImagesWebhookVersion, map[string]*bintree{}}, - "addlabel.go": {testImagesWebhookAddlabelGo, map[string]*bintree{}}, - "alwaysallow.go": {testImagesWebhookAlwaysallowGo, map[string]*bintree{}}, - "alwaysdeny.go": {testImagesWebhookAlwaysdenyGo, map[string]*bintree{}}, - "config.go": {testImagesWebhookConfigGo, map[string]*bintree{}}, - "configmap.go": {testImagesWebhookConfigmapGo, map[string]*bintree{}}, - "crd.go": {testImagesWebhookCrdGo, map[string]*bintree{}}, - "customresource.go": {testImagesWebhookCustomresourceGo, map[string]*bintree{}}, - "main.go": {testImagesWebhookMainGo, map[string]*bintree{}}, - "patch_test.go": {testImagesWebhookPatch_testGo, map[string]*bintree{}}, - "pods.go": {testImagesWebhookPodsGo, map[string]*bintree{}}, - "scheme.go": {testImagesWebhookSchemeGo, map[string]*bintree{}}, - }}, - }}, - }}, -}} - -// RestoreAsset restores an asset under the given directory -func RestoreAsset(dir, name string) error { - data, err := Asset(name) - if err != nil { - return err - } - info, err := AssetInfo(name) - if err != nil { - return err - } - err = os.MkdirAll(_filePath(dir, filepath.Dir(name)), os.FileMode(0755)) - if err != nil { - return err - } - err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) - if err != nil { - return err - } - err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) - if err != nil { - return err - } - return nil -} - -// RestoreAssets restores an asset under the given directory recursively -func RestoreAssets(dir, name string) error { - children, err := AssetDir(name) - // File - if err != nil { - return RestoreAsset(dir, name) - } - // Dir - for _, child := range children { - err = RestoreAssets(dir, filepath.Join(name, child)) - if err != nil { - return err - } - } - return nil -} - -func _filePath(dir, name string) string { - cannonicalName := strings.Replace(name, "\\", "/", -1) - return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) -} diff --git a/vendor/k8s.io/kubernetes/test/e2e/kubectl/BUILD b/vendor/k8s.io/kubernetes/test/e2e/kubectl/BUILD index 954c43630..eb665e57e 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/kubectl/BUILD +++ b/vendor/k8s.io/kubernetes/test/e2e/kubectl/BUILD @@ -37,7 +37,6 @@ go_library( "//test/utils/crd:go_default_library", "//test/utils/image:go_default_library", "//vendor/github.com/elazarl/goproxy:go_default_library", - "//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library", "//vendor/github.com/onsi/ginkgo:go_default_library", "//vendor/github.com/onsi/gomega:go_default_library", "//vendor/golang.org/x/net/websocket:go_default_library", diff --git a/vendor/k8s.io/kubernetes/test/e2e/kubectl/kubectl.go b/vendor/k8s.io/kubernetes/test/e2e/kubectl/kubectl.go index cfcbaa786..3f197b2b6 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/kubectl/kubectl.go +++ b/vendor/k8s.io/kubernetes/test/e2e/kubectl/kubectl.go @@ -40,7 +40,6 @@ import ( "time" "github.com/elazarl/goproxy" - openapi_v2 "github.com/googleapis/gnostic/OpenAPIv2" "sigs.k8s.io/yaml" "k8s.io/api/core/v1" @@ -571,21 +570,6 @@ var _ = SIGDescribe("Kubectl client", func() { gomega.Expect(c.BatchV1().Jobs(ns).Delete("run-test-3", nil)).To(gomega.BeNil()) }) - ginkgo.It("should contain last line of the log", func() { - nsFlag := fmt.Sprintf("--namespace=%v", ns) - podName := "run-log-test" - - ginkgo.By("executing a command with run") - framework.RunKubectlOrDie("run", podName, "--generator=run-pod/v1", "--image="+busyboxImage, "--restart=OnFailure", nsFlag, "--", "sh", "-c", "sleep 10; seq 100 | while read i; do echo $i; sleep 0.01; done; echo EOF") - - if !framework.CheckPodsRunningReady(c, ns, []string{podName}, framework.PodStartTimeout) { - framework.Failf("Pod for run-log-test was not ready") - } - - logOutput := framework.RunKubectlOrDie(nsFlag, "logs", "-f", "run-log-test") - gomega.Expect(logOutput).To(gomega.ContainSubstring("EOF")) - }) - ginkgo.It("should support port-forward", func() { ginkgo.By("forwarding the container port to a local port") cmd := runPortForward(ns, simplePodName, simplePodPort) @@ -837,56 +821,6 @@ metadata: }) }) - // definitionMatchesGVK returns true if the specified GVK is listed as an x-kubernetes-group-version-kind extension - definitionMatchesGVK := func(extensions []*openapi_v2.NamedAny, desiredGVK schema.GroupVersionKind) bool { - for _, extension := range extensions { - if extension.GetValue().GetYaml() == "" || - extension.GetName() != "x-kubernetes-group-version-kind" { - continue - } - var values []map[string]string - err := yaml.Unmarshal([]byte(extension.GetValue().GetYaml()), &values) - if err != nil { - framework.Logf("%v\n%s", err, string(extension.GetValue().GetYaml())) - continue - } - for _, value := range values { - if value["group"] != desiredGVK.Group { - continue - } - if value["version"] != desiredGVK.Version { - continue - } - if value["kind"] != desiredGVK.Kind { - continue - } - return true - } - } - return false - } - - // schemaForGVK returns a schema (if defined) for the specified GVK - schemaForGVK := func(desiredGVK schema.GroupVersionKind) *openapi_v2.Schema { - d, err := f.ClientSet.Discovery().OpenAPISchema() - if err != nil { - framework.Failf("%v", err) - } - if d == nil || d.Definitions == nil { - return nil - } - for _, p := range d.Definitions.AdditionalProperties { - if p == nil || p.Value == nil { - continue - } - if !definitionMatchesGVK(p.Value.VendorExtension, desiredGVK) { - continue - } - return p.Value - } - return nil - } - framework.KubeDescribe("Kubectl client-side validation", func() { ginkgo.It("should create/apply a CR with unknown fields for CRD with no validation schema", func() { ginkgo.By("create CRD with no validation schema") @@ -941,28 +875,10 @@ metadata: ginkgo.By("sleep for 10s to wait for potential crd openapi publishing alpha feature") time.Sleep(10 * time.Second) - publishedSchema := schemaForGVK(schema.GroupVersionKind{Group: crd.APIGroup, Version: crd.Versions[0].Name, Kind: crd.Kind}) - expectSuccess := false - if publishedSchema == nil || publishedSchema.Properties == nil || publishedSchema.Properties.AdditionalProperties == nil || len(publishedSchema.Properties.AdditionalProperties) == 0 { - // expect success in the following cases: - // - no schema was published - // - a schema was published with no properties - expectSuccess = true - framework.Logf("no schema with properties found, expect apply with extra properties to succeed") - } else { - framework.Logf("schema with properties found, expect apply with extra properties to fail") - } - meta := fmt.Sprintf(metaPattern, crd.Kind, crd.APIGroup, crd.Versions[0].Name, "test-cr") validArbitraryCR := fmt.Sprintf(`{%s,"spec":{"bars":[{"name":"test-bar"}],"extraProperty":"arbitrary-value"}}`, meta) if err := createApplyCustomResource(validArbitraryCR, f.Namespace.Name, "test-cr", crd); err != nil { - if expectSuccess { - framework.Failf("%v", err) - } - } else { - if !expectSuccess { - framework.Failf("expected error, got none") - } + framework.Failf("%v", err) } }) @@ -2314,14 +2230,14 @@ func startLocalProxy() (srv *httptest.Server, logs *bytes.Buffer) { func createApplyCustomResource(resource, namespace, name string, crd *crd.TestCrd) error { ns := fmt.Sprintf("--namespace=%v", namespace) ginkgo.By("successfully create CR") - if _, err := framework.RunKubectlInput(resource, ns, "create", "--validate=true", "-f", "-"); err != nil { + if _, err := framework.RunKubectlInput(resource, ns, "create", "-f", "-"); err != nil { return fmt.Errorf("failed to create CR %s in namespace %s: %v", resource, ns, err) } if _, err := framework.RunKubectl(ns, "delete", crd.GetPluralName(), name); err != nil { return fmt.Errorf("failed to delete CR %s: %v", name, err) } ginkgo.By("successfully apply CR") - if _, err := framework.RunKubectlInput(resource, ns, "apply", "--validate=true", "-f", "-"); err != nil { + if _, err := framework.RunKubectlInput(resource, ns, "apply", "-f", "-"); err != nil { return fmt.Errorf("failed to apply CR %s in namespace %s: %v", resource, ns, err) } if _, err := framework.RunKubectl(ns, "delete", crd.GetPluralName(), name); err != nil { diff --git a/vendor/k8s.io/kubernetes/test/e2e/lifecycle/patch_flagaccess.go b/vendor/k8s.io/kubernetes/test/e2e/lifecycle/patch_flagaccess.go deleted file mode 100644 index 16255251b..000000000 --- a/vendor/k8s.io/kubernetes/test/e2e/lifecycle/patch_flagaccess.go +++ /dev/null @@ -1,17 +0,0 @@ -package lifecycle - -func GetUpgradeTarget() string { - return *upgradeTarget -} - -func SetUpgradeTarget(val string) { - upgradeTarget = &val -} - -func GetUpgradeImage() string { - return *upgradeImage -} - -func SetUpgradeImage(val string) { - upgradeImage = &val -} diff --git a/vendor/k8s.io/kubernetes/test/e2e/patch_from_e2e_testfile.go b/vendor/k8s.io/kubernetes/test/e2e/patch_from_e2e_testfile.go deleted file mode 100644 index 093aee68c..000000000 --- a/vendor/k8s.io/kubernetes/test/e2e/patch_from_e2e_testfile.go +++ /dev/null @@ -1,59 +0,0 @@ -package e2e - -import ( - "fmt" - "os" - - "k8s.io/kubernetes/test/e2e/framework" - "k8s.io/kubernetes/test/e2e/framework/testfiles" - "k8s.io/kubernetes/test/e2e/framework/viperconfig" - "k8s.io/kubernetes/test/e2e/generated" - "k8s.io/kubernetes/test/utils/image" -) - -// this function matches the init block from e2e_test.go -func ViperizeFlags(viperConfig string) { - // Register framework flags, then handle flags and Viper config. - framework.HandleFlags() - if err := viperconfig.ViperizeFlags(viperConfig, "e2e"); err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } - - if framework.TestContext.ListImages { - for _, v := range image.GetImageConfigs() { - fmt.Println(v.GetE2EImage()) - } - os.Exit(0) - } - - framework.AfterReadingAllFlags(&framework.TestContext) - - // this came from the init block, but it breaks on openshift. Not really sure why. - // TODO: Deprecating repo-root over time... instead just use gobindata_util.go , see #23987. - // Right now it is still needed, for example by - // test/e2e/framework/ingress/ingress_utils.go - // for providing the optional secret.yaml file and by - // test/e2e/framework/util.go for cluster/log-dump. - //if framework.TestContext.RepoRoot != "" { - // testfiles.AddFileSource(testfiles.RootFileSource{Root: framework.TestContext.RepoRoot}) - //} - - // Enable bindata file lookup as fallback. - testfiles.AddFileSource(testfiles.BindataFileSource{ - Asset: generated.Asset, - AssetNames: generated.AssetNames, - }) - -} - -var viperConfig = "" - -// we appear to set ours via env-var, not flag -func GetViperConfig() string { - return viperConfig -} - -func SetViperConfig(val string) { - viperConfig = val -} diff --git a/vendor/k8s.io/kubernetes/test/e2e/scheduling/BUILD b/vendor/k8s.io/kubernetes/test/e2e/scheduling/BUILD index 8f934fb2f..cb6f9752f 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/scheduling/BUILD +++ b/vendor/k8s.io/kubernetes/test/e2e/scheduling/BUILD @@ -20,7 +20,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/apis/core:go_default_library", - "//pkg/apis/core/v1/helper/qos:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/apis/scheduling:go_default_library", "//pkg/scheduler/algorithm/priorities/util:go_default_library", diff --git a/vendor/k8s.io/kubernetes/test/e2e/scheduling/limit_range.go b/vendor/k8s.io/kubernetes/test/e2e/scheduling/limit_range.go index dc5d0d570..dc68705ad 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/scheduling/limit_range.go +++ b/vendor/k8s.io/kubernetes/test/e2e/scheduling/limit_range.go @@ -43,10 +43,10 @@ var _ = SIGDescribe("LimitRange", func() { It("should create a LimitRange with defaults and ensure pod has those defaults applied.", func() { By("Creating a LimitRange") - min := getResourceList("50m", "100Mi", "") - max := getResourceList("500m", "500Mi", "") - defaultLimit := getResourceList("500m", "500Mi", "") - defaultRequest := getResourceList("100m", "200Mi", "") + min := getResourceList("50m", "100Mi", "100Gi") + max := getResourceList("500m", "500Mi", "500Gi") + defaultLimit := getResourceList("500m", "500Mi", "500Gi") + defaultRequest := getResourceList("100m", "200Mi", "200Gi") maxLimitRequestRatio := v1.ResourceList{} limitRange := newLimitRange("limit-range", v1.LimitTypeContainer, min, max, @@ -106,7 +106,7 @@ var _ = SIGDescribe("LimitRange", func() { } By("Creating a Pod with partial resource requirements") - pod = f.NewTestPod("pod-partial-resources", getResourceList("", "150Mi", ""), getResourceList("300m", "", "")) + pod = f.NewTestPod("pod-partial-resources", getResourceList("", "150Mi", "150Gi"), getResourceList("300m", "", "")) pod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(pod) Expect(err).NotTo(HaveOccurred()) @@ -116,7 +116,7 @@ var _ = SIGDescribe("LimitRange", func() { // This is an interesting case, so it's worth a comment // If you specify a Limit, and no Request, the Limit will default to the Request // This means that the LimitRange.DefaultRequest will ONLY take affect if a container.resources.limit is not supplied - expected = v1.ResourceRequirements{Requests: getResourceList("300m", "150Mi", ""), Limits: getResourceList("300m", "500Mi", "")} + expected = v1.ResourceRequirements{Requests: getResourceList("300m", "150Mi", "150Gi"), Limits: getResourceList("300m", "500Mi", "500Gi")} for i := range pod.Spec.Containers { err = equalResourceRequirement(expected, pod.Spec.Containers[i].Resources) if err != nil { @@ -127,17 +127,17 @@ var _ = SIGDescribe("LimitRange", func() { } By("Failing to create a Pod with less than min resources") - pod = f.NewTestPod(podName, getResourceList("10m", "50Mi", ""), v1.ResourceList{}) + pod = f.NewTestPod(podName, getResourceList("10m", "50Mi", "50Gi"), v1.ResourceList{}) pod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(pod) Expect(err).To(HaveOccurred()) By("Failing to create a Pod with more than max resources") - pod = f.NewTestPod(podName, getResourceList("600m", "600Mi", ""), v1.ResourceList{}) + pod = f.NewTestPod(podName, getResourceList("600m", "600Mi", "600Gi"), v1.ResourceList{}) pod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(pod) Expect(err).To(HaveOccurred()) By("Updating a LimitRange") - newMin := getResourceList("9m", "49Mi", "") + newMin := getResourceList("9m", "49Mi", "49Gi") limitRange.Spec.Limits[0].Min = newMin limitRange, err = f.ClientSet.CoreV1().LimitRanges(f.Namespace.Name).Update(limitRange) Expect(err).NotTo(HaveOccurred()) @@ -150,12 +150,12 @@ var _ = SIGDescribe("LimitRange", func() { })).NotTo(HaveOccurred()) By("Creating a Pod with less than former min resources") - pod = f.NewTestPod(podName, getResourceList("10m", "50Mi", ""), v1.ResourceList{}) + pod = f.NewTestPod(podName, getResourceList("10m", "50Mi", "50Gi"), v1.ResourceList{}) pod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(pod) Expect(err).NotTo(HaveOccurred()) By("Failing to create a Pod with more than max resources") - pod = f.NewTestPod(podName, getResourceList("600m", "600Mi", ""), v1.ResourceList{}) + pod = f.NewTestPod(podName, getResourceList("600m", "600Mi", "600Gi"), v1.ResourceList{}) pod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(pod) Expect(err).To(HaveOccurred()) @@ -192,7 +192,7 @@ var _ = SIGDescribe("LimitRange", func() { })).NotTo(HaveOccurred(), "kubelet never observed the termination notice") By("Creating a Pod with more than former max resources") - pod = f.NewTestPod(podName+"2", getResourceList("600m", "600Mi", ""), v1.ResourceList{}) + pod = f.NewTestPod(podName+"2", getResourceList("600m", "600Mi", "600Gi"), v1.ResourceList{}) pod, err = f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(pod) Expect(err).NotTo(HaveOccurred()) }) diff --git a/vendor/k8s.io/kubernetes/test/e2e/scheduling/preemption.go b/vendor/k8s.io/kubernetes/test/e2e/scheduling/preemption.go index 8cd402596..95cf84c60 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/scheduling/preemption.go +++ b/vendor/k8s.io/kubernetes/test/e2e/scheduling/preemption.go @@ -23,9 +23,6 @@ import ( "k8s.io/client-go/tools/cache" - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" - _ "github.com/stretchr/testify/assert" appsv1 "k8s.io/api/apps/v1" "k8s.io/api/core/v1" schedulerapi "k8s.io/api/scheduling/v1" @@ -35,9 +32,12 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" clientset "k8s.io/client-go/kubernetes" - v1qos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" "k8s.io/kubernetes/pkg/apis/scheduling" "k8s.io/kubernetes/test/e2e/framework" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + _ "github.com/stretchr/testify/assert" ) type priorityPair struct { @@ -91,20 +91,13 @@ var _ = SIGDescribe("SchedulerPreemption [Serial]", func() { // Create one pod per node that uses a lot of the node's resources. By("Create pods that use 60% of node resources.") pods := make([]*v1.Pod, len(nodeList.Items)) - allPods, err := cs.CoreV1().Pods(metav1.NamespaceAll).List(metav1.ListOptions{}) for i, node := range nodeList.Items { - currentCpuUsage, currentMemUsage := getCurrentPodUsageOnTheNode(node.Name, allPods.Items, podRequestedResource) - framework.Logf("Current cpu and memory usage %v, %v", currentCpuUsage, currentMemUsage) - currentNode, err := cs.CoreV1().Nodes().Get(node.Name, metav1.GetOptions{}) - framework.ExpectNoError(err) - cpuAllocatable, found := currentNode.Status.Allocatable["cpu"] + cpuAllocatable, found := node.Status.Allocatable["cpu"] Expect(found).To(Equal(true)) - milliCPU := cpuAllocatable.MilliValue() - milliCPU = milliCPU * 40 / 100 - memAllocatable, found := currentNode.Status.Allocatable["memory"] + milliCPU := cpuAllocatable.MilliValue() * 40 / 100 + memAllocatable, found := node.Status.Allocatable["memory"] Expect(found).To(Equal(true)) - memory := memAllocatable.Value() - memory = memory * 60 / 100 + memory := memAllocatable.Value() * 60 / 100 podRes = v1.ResourceList{} podRes[v1.ResourceCPU] = *resource.NewMilliQuantity(int64(milliCPU), resource.DecimalSI) podRes[v1.ResourceMemory] = *resource.NewQuantity(int64(memory), resource.BinarySI) @@ -158,20 +151,13 @@ var _ = SIGDescribe("SchedulerPreemption [Serial]", func() { // Create one pod per node that uses a lot of the node's resources. By("Create pods that use 60% of node resources.") pods := make([]*v1.Pod, len(nodeList.Items)) - allPods, err := cs.CoreV1().Pods(metav1.NamespaceAll).List(metav1.ListOptions{}) for i, node := range nodeList.Items { - currentCpuUsage, currentMemUsage := getCurrentPodUsageOnTheNode(node.Name, allPods.Items, podRequestedResource) - framework.Logf("Current cpu usage and memory usage is %v, %v", currentCpuUsage, currentMemUsage) - currentNode, err := cs.CoreV1().Nodes().Get(node.Name, metav1.GetOptions{}) - framework.ExpectNoError(err) - cpuAllocatable, found := currentNode.Status.Allocatable["cpu"] + cpuAllocatable, found := node.Status.Allocatable["cpu"] Expect(found).To(Equal(true)) - milliCPU := cpuAllocatable.MilliValue() - milliCPU = milliCPU * 40 / 100 - memAllocatable, found := currentNode.Status.Allocatable["memory"] + milliCPU := cpuAllocatable.MilliValue() * 40 / 100 + memAllocatable, found := node.Status.Allocatable["memory"] Expect(found).To(Equal(true)) - memory := memAllocatable.Value() - memory = memory * 60 / 100 + memory := memAllocatable.Value() * 60 / 100 podRes = v1.ResourceList{} podRes[v1.ResourceCPU] = *resource.NewMilliQuantity(int64(milliCPU), resource.DecimalSI) podRes[v1.ResourceMemory] = *resource.NewQuantity(int64(memory), resource.BinarySI) @@ -237,21 +223,14 @@ var _ = SIGDescribe("SchedulerPreemption [Serial]", func() { numPods = len(nodeList.Items) } pods := make([]*v1.Pod, numPods) - allPods, err := cs.CoreV1().Pods(metav1.NamespaceAll).List(metav1.ListOptions{}) for i := 0; i < numPods; i++ { node := nodeList.Items[i] - currentCpuUsage, currentMemUsage := getCurrentPodUsageOnTheNode(node.Name, allPods.Items, podRequestedResource) - framework.Logf("Current cpu usage and memory usage is %v, %v", currentCpuUsage, currentMemUsage) - currentNode, err := cs.CoreV1().Nodes().Get(node.Name, metav1.GetOptions{}) - framework.ExpectNoError(err) - cpuAllocatable, found := currentNode.Status.Allocatable["cpu"] - Expect(found).To(Equal(true)) - milliCPU := cpuAllocatable.MilliValue() - milliCPU = milliCPU * 10 / 100 - memAllocatable, found := currentNode.Status.Allocatable["memory"] + cpuAllocatable, found := node.Status.Allocatable["cpu"] Expect(found).To(BeTrue()) - memory := memAllocatable.Value() - memory = memory * 10 / 100 + milliCPU := cpuAllocatable.MilliValue() * 10 / 100 + memAllocatable, found := node.Status.Allocatable["memory"] + Expect(found).To(BeTrue()) + memory := memAllocatable.Value() * 10 / 100 podRes = v1.ResourceList{} podRes[v1.ResourceCPU] = *resource.NewMilliQuantity(int64(milliCPU), resource.DecimalSI) podRes[v1.ResourceMemory] = *resource.NewQuantity(int64(memory), resource.BinarySI) @@ -639,19 +618,3 @@ func runPauseRS(f *framework.Framework, conf pauseRSConfig) *appsv1.ReplicaSet { framework.ExpectNoError(framework.WaitForReplicaSetTargetAvailableReplicas(f.ClientSet, rs, conf.Replicas)) return rs } - -func getCurrentPodUsageOnTheNode(nodeName string, pods []v1.Pod, resource *v1.ResourceRequirements) (int64, int64) { - totalRequestedCpuResource := resource.Requests.Cpu().MilliValue() - totalRequestedMemResource := resource.Requests.Memory().Value() - for _, pod := range pods { - if pod.Spec.NodeName == nodeName { - if v1qos.GetPodQOS(&pod) == v1.PodQOSBestEffort { - continue - } - } - result := getNonZeroRequests(&pod) - totalRequestedCpuResource += result.MilliCPU - totalRequestedMemResource += result.Memory - } - return totalRequestedCpuResource, totalRequestedMemResource -} diff --git a/vendor/k8s.io/kubernetes/test/e2e/scheduling/priorities.go b/vendor/k8s.io/kubernetes/test/e2e/scheduling/priorities.go index a38e711f5..b395a39f1 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/scheduling/priorities.go +++ b/vendor/k8s.io/kubernetes/test/e2e/scheduling/priorities.go @@ -36,7 +36,6 @@ import ( "k8s.io/kubernetes/test/e2e/framework" testutils "k8s.io/kubernetes/test/utils" imageutils "k8s.io/kubernetes/test/utils/image" - v1qos "k8s.io/kubernetes/pkg/apis/core/v1/helper/qos" ) type Resource struct { @@ -327,10 +326,6 @@ func computeCpuMemFraction(cs clientset.Interface, node v1.Node, resource *v1.Re for _, pod := range allpods.Items { if pod.Spec.NodeName == node.Name { framework.Logf("Pod for on the node: %v, Cpu: %v, Mem: %v", pod.Name, getNonZeroRequests(&pod).MilliCPU, getNonZeroRequests(&pod).Memory) - // Ignore best effort pods while computing fractions as they won't be taken in account by scheduler. - if v1qos.GetPodQOS(&pod) == v1.PodQOSBestEffort { - continue - } totalRequestedCpuResource += getNonZeroRequests(&pod).MilliCPU totalRequestedMemResource += getNonZeroRequests(&pod).Memory } @@ -339,18 +334,11 @@ func computeCpuMemFraction(cs clientset.Interface, node v1.Node, resource *v1.Re Expect(found).To(Equal(true)) cpuAllocatableMil := cpuAllocatable.MilliValue() - floatOne := float64(1) cpuFraction := float64(totalRequestedCpuResource) / float64(cpuAllocatableMil) - if cpuFraction > floatOne { - cpuFraction = floatOne - } memAllocatable, found := node.Status.Allocatable[v1.ResourceMemory] Expect(found).To(Equal(true)) memAllocatableVal := memAllocatable.Value() memFraction := float64(totalRequestedMemResource) / float64(memAllocatableVal) - if memFraction > floatOne { - memFraction = floatOne - } framework.Logf("Node: %v, totalRequestedCpuResource: %v, cpuAllocatableMil: %v, cpuFraction: %v", node.Name, totalRequestedCpuResource, cpuAllocatableMil, cpuFraction) framework.Logf("Node: %v, totalRequestedMemResource: %v, memAllocatableVal: %v, memFraction: %v", node.Name, totalRequestedMemResource, memAllocatableVal, memFraction) diff --git a/vendor/k8s.io/kubernetes/test/e2e/scheduling/taints.go b/vendor/k8s.io/kubernetes/test/e2e/scheduling/taints.go index bdf054f88..edf5a1781 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/scheduling/taints.go +++ b/vendor/k8s.io/kubernetes/test/e2e/scheduling/taints.go @@ -410,16 +410,10 @@ var _ = SIGDescribe("NoExecuteTaintManager Multiple Pods [Serial]", func() { By("Starting pods...") nodeName, err := testutils.RunPodAndGetNodeName(cs, pod1, 2*time.Minute) - node, err := cs.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{}) - framework.ExpectNoError(err) - nodeHostNameLabel, ok := node.GetObjectMeta().GetLabels()["kubernetes.io/hostname"] - if !ok { - framework.Failf("error getting kubernetes.io/hostname label on node %s", nodeName) - } framework.ExpectNoError(err) framework.Logf("Pod1 is running on %v. Tainting Node", nodeName) // ensure pod2 lands on the same node as pod1 - pod2.Spec.NodeSelector = map[string]string{"kubernetes.io/hostname": nodeHostNameLabel} + pod2.Spec.NodeSelector = map[string]string{"kubernetes.io/hostname": nodeName} _, err = testutils.RunPodAndGetNodeName(cs, pod2, 2*time.Minute) framework.ExpectNoError(err) framework.Logf("Pod2 is running on %v. Tainting Node", nodeName) diff --git a/vendor/k8s.io/kubernetes/test/e2e/storage/csi_volumes.go b/vendor/k8s.io/kubernetes/test/e2e/storage/csi_volumes.go index 5216d2afb..29fb6f993 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/storage/csi_volumes.go +++ b/vendor/k8s.io/kubernetes/test/e2e/storage/csi_volumes.go @@ -22,7 +22,6 @@ import ( clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e/storage/drivers" - "k8s.io/kubernetes/test/e2e/storage/testpatterns" "k8s.io/kubernetes/test/e2e/storage/testsuites" "k8s.io/kubernetes/test/e2e/storage/utils" @@ -69,7 +68,6 @@ var _ = utils.SIGDescribe("CSI Volumes", func() { testCleanup func() ) BeforeEach(func() { - driver.SkipUnsupportedTest(testpatterns.TestPattern{}) config, testCleanup = driver.PrepareTest(f) }) diff --git a/vendor/k8s.io/kubernetes/test/e2e/storage/pvc_protection.go b/vendor/k8s.io/kubernetes/test/e2e/storage/pvc_protection.go index 22a58d68f..64011df46 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/storage/pvc_protection.go +++ b/vendor/k8s.io/kubernetes/test/e2e/storage/pvc_protection.go @@ -48,11 +48,12 @@ var _ = utils.SIGDescribe("PVC Protection", func() { By("Creating a PVC") suffix := "pvc-protection" - framework.SkipIfNoDefaultStorageClass(client) + defaultSC := getDefaultStorageClassName(client) testStorageClass := testsuites.StorageClassTest{ ClaimSize: "1Gi", } pvc = newClaim(testStorageClass, nameSpace, suffix) + pvc.Spec.StorageClassName = &defaultSC pvc, err = client.CoreV1().PersistentVolumeClaims(pvc.Namespace).Create(pvc) Expect(err).NotTo(HaveOccurred(), "Error creating PVC") pvcCreatedAndNotDeleted = true diff --git a/vendor/k8s.io/kubernetes/test/e2e/storage/testsuites/provisioning.go b/vendor/k8s.io/kubernetes/test/e2e/storage/testsuites/provisioning.go index aa1a1a76f..cefce04b3 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/storage/testsuites/provisioning.go +++ b/vendor/k8s.io/kubernetes/test/e2e/storage/testsuites/provisioning.go @@ -452,15 +452,21 @@ func PVMultiNodeCheck(client clientset.Interface, claim *v1.PersistentVolumeClai if secondNode.Affinity.NodeAffinity == nil { secondNode.Affinity.NodeAffinity = &v1.NodeAffinity{} } - // Set anti-affinity preference: in case there are no nodes in the same AZ it may happen the second pod gets - // scheduled on the same node as the first one. In such a case the test needs to be skipped. - secondNode.Affinity.NodeAffinity.PreferredDuringSchedulingIgnoredDuringExecution = append(secondNode.Affinity.NodeAffinity.PreferredDuringSchedulingIgnoredDuringExecution, - v1.PreferredSchedulingTerm{ - Weight: int32(100), - Preference: v1.NodeSelectorTerm{ - MatchFields: []v1.NodeSelectorRequirement{ - {Key: "metadata.name", Operator: v1.NodeSelectorOpNotIn, Values: []string{actualNodeName}}, - }, + if secondNode.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution == nil { + secondNode.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution = &v1.NodeSelector{} + } + secondNode.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms = append(secondNode.Affinity.NodeAffinity.RequiredDuringSchedulingIgnoredDuringExecution.NodeSelectorTerms, + v1.NodeSelectorTerm{ + // https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity warns + // that "the value of kubernetes.io/hostname may be the same as the Node name in some environments and a different value in other environments". + // So this might be cleaner: + // MatchFields: []v1.NodeSelectorRequirement{ + // {Key: "name", Operator: v1.NodeSelectorOpNotIn, Values: []string{actualNodeName}}, + // }, + // However, "name", "Name", "ObjectMeta.Name" all got rejected with "not a valid field selector key". + + MatchExpressions: []v1.NodeSelectorRequirement{ + {Key: "kubernetes.io/hostname", Operator: v1.NodeSelectorOpNotIn, Values: []string{actualNodeName}}, }, }) @@ -473,13 +479,9 @@ func PVMultiNodeCheck(client clientset.Interface, claim *v1.PersistentVolumeClai framework.ExpectNoError(framework.WaitForPodSuccessInNamespaceSlow(client, pod.Name, pod.Namespace)) runningPod, err = client.CoreV1().Pods(pod.Namespace).Get(pod.Name, metav1.GetOptions{}) Expect(err).NotTo(HaveOccurred(), "get pod") + Expect(runningPod.Spec.NodeName).NotTo(Equal(actualNodeName), "second pod should have run on a different node") StopPod(client, pod) pod = nil - // The second pod got scheduled on the same node as the first one: skip the test. - if runningPod.Spec.NodeName == actualNodeName { - framework.Logf("Warning: The reader pod got scheduled on the same node as the writer pod: skipping test") - framework.Skipf("No node available for the second pod found") - } } func (t StorageClassTest) TestBindingWaitForFirstConsumer(nodeSelector map[string]string, expectUnschedulable bool) (*v1.PersistentVolume, *v1.Node) { diff --git a/vendor/k8s.io/kubernetes/test/e2e/storage/volume_metrics.go b/vendor/k8s.io/kubernetes/test/e2e/storage/volume_metrics.go index 26b87541e..06a83ccb1 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/storage/volume_metrics.go +++ b/vendor/k8s.io/kubernetes/test/e2e/storage/volume_metrics.go @@ -49,13 +49,9 @@ var _ = utils.SIGDescribe("[Serial] Volume metrics", func() { BeforeEach(func() { c = f.ClientSet ns = f.Namespace.Name - var err error - framework.SkipUnlessProviderIs("gce", "gke", "aws") - _, err = framework.GetDefaultStorageClassName(c) - if err != nil { - framework.Failf(err.Error()) - } + defaultScName := getDefaultStorageClassName(c) + verifyDefaultStorageClass(c, defaultScName, true) test := testsuites.StorageClassTest{ Name: "default", @@ -63,6 +59,7 @@ var _ = utils.SIGDescribe("[Serial] Volume metrics", func() { } pvc = newClaim(test, ns, "default") + var err error metricsGrabber, err = metrics.NewMetricsGrabber(c, nil, true, false, true, false, false) if err != nil { diff --git a/vendor/k8s.io/kubernetes/test/e2e/storage/volume_provisioning.go b/vendor/k8s.io/kubernetes/test/e2e/storage/volume_provisioning.go index da3f2ea06..291fb4549 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/storage/volume_provisioning.go +++ b/vendor/k8s.io/kubernetes/test/e2e/storage/volume_provisioning.go @@ -756,10 +756,7 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() { // Modifying the default storage class can be disruptive to other tests that depend on it It("should be disabled by changing the default annotation [Serial] [Disruptive]", func() { framework.SkipUnlessProviderIs("openstack", "gce", "aws", "gke", "vsphere", "azure") - scName, scErr := framework.GetDefaultStorageClassName(c) - if scErr != nil { - framework.Failf(scErr.Error()) - } + scName := getDefaultStorageClassName(c) test := testsuites.StorageClassTest{ Name: "default", ClaimSize: "2Gi", @@ -790,10 +787,7 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() { // Modifying the default storage class can be disruptive to other tests that depend on it It("should be disabled by removing the default annotation [Serial] [Disruptive]", func() { framework.SkipUnlessProviderIs("openstack", "gce", "aws", "gke", "vsphere", "azure") - scName, scErr := framework.GetDefaultStorageClassName(c) - if scErr != nil { - framework.Failf(scErr.Error()) - } + scName := getDefaultStorageClassName(c) test := testsuites.StorageClassTest{ Name: "default", ClaimSize: "2Gi", @@ -961,6 +955,27 @@ var _ = utils.SIGDescribe("Dynamic Provisioning", func() { }) }) +func getDefaultStorageClassName(c clientset.Interface) string { + list, err := c.StorageV1().StorageClasses().List(metav1.ListOptions{}) + if err != nil { + framework.Failf("Error listing storage classes: %v", err) + } + var scName string + for _, sc := range list.Items { + if storageutil.IsDefaultAnnotation(sc.ObjectMeta) { + if len(scName) != 0 { + framework.Failf("Multiple default storage classes found: %q and %q", scName, sc.Name) + } + scName = sc.Name + } + } + if len(scName) == 0 { + framework.Failf("No default storage class found") + } + framework.Logf("Default storage class: %q", scName) + return scName +} + func verifyDefaultStorageClass(c clientset.Interface, scName string, expectedDefault bool) { sc, err := c.StorageV1().StorageClasses().Get(scName, metav1.GetOptions{}) Expect(err).NotTo(HaveOccurred()) diff --git a/vendor/k8s.io/kubernetes/test/e2e/storage/vsphere/vsphere_volume_disksize.go b/vendor/k8s.io/kubernetes/test/e2e/storage/vsphere/vsphere_volume_disksize.go index b46d322e1..76e8f835a 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/storage/vsphere/vsphere_volume_disksize.go +++ b/vendor/k8s.io/kubernetes/test/e2e/storage/vsphere/vsphere_volume_disksize.go @@ -17,12 +17,13 @@ limitations under the License. package vsphere import ( + "fmt" + "strings" "time" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" - v1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/test/e2e/framework" @@ -34,12 +35,13 @@ const ( ) /* - Test to verify disk size specified in PVC is being rounded up correctly. + Test to verify disk size specified in PVC is being honored while volume creation. Steps 1. Create StorageClass. 2. Create PVC with invalid disk size which uses the StorageClass created in step 1. - 3. Verify the provisioned PV size is correct. + 3. Expect the PVC to fail. + 4. Verify the error returned on PVC failure is the correct. */ var _ = utils.SIGDescribe("Volume Disk Size [Feature:vsphere]", func() { @@ -59,38 +61,35 @@ var _ = utils.SIGDescribe("Volume Disk Size [Feature:vsphere]", func() { datastore = GetAndExpectStringEnvVar(StorageClassDatastoreName) }) - It("verify dynamically provisioned pv has size rounded up correctly", func() { - By("Invoking Test disk size") + It("verify dynamically provisioned pv using storageclass with an invalid disk size fails", func() { + By("Invoking Test for invalid disk size") scParameters[Datastore] = datastore scParameters[DiskFormat] = ThinDisk diskSize := "1" - expectedDiskSize := "1Mi" - - By("Creating Storage Class") - storageclass, err := client.StorageV1().StorageClasses().Create(getVSphereStorageClassSpec(DiskSizeSCName, scParameters, nil)) - framework.ExpectNoError(err) - defer client.StorageV1().StorageClasses().Delete(storageclass.Name, nil) - - By("Creating PVC using the Storage Class") - pvclaim, err := framework.CreatePVC(client, namespace, getVSphereClaimSpecWithStorageClass(namespace, diskSize, storageclass)) - framework.ExpectNoError(err) - defer framework.DeletePersistentVolumeClaim(client, pvclaim.Name, namespace) + err := invokeInvalidDiskSizeTestNeg(client, namespace, scParameters, diskSize) + Expect(err).To(HaveOccurred()) + errorMsg := `Failed to provision volume with StorageClass \"` + DiskSizeSCName + `\": A specified parameter was not correct` + if !strings.Contains(err.Error(), errorMsg) { + Expect(err).NotTo(HaveOccurred(), errorMsg) + } + }) +}) - By("Waiting for claim to be in bound phase") - err = framework.WaitForPersistentVolumeClaimPhase(v1.ClaimBound, client, pvclaim.Namespace, pvclaim.Name, framework.Poll, 2*time.Minute) - framework.ExpectNoError(err) +func invokeInvalidDiskSizeTestNeg(client clientset.Interface, namespace string, scParameters map[string]string, diskSize string) error { + By("Creating Storage Class With invalid disk size") + storageclass, err := client.StorageV1().StorageClasses().Create(getVSphereStorageClassSpec(DiskSizeSCName, scParameters, nil)) + Expect(err).NotTo(HaveOccurred(), fmt.Sprintf("Failed to create storage class with err: %v", err)) + defer client.StorageV1().StorageClasses().Delete(storageclass.Name, nil) - By("Getting new copy of PVC") - pvclaim, err = client.CoreV1().PersistentVolumeClaims(pvclaim.Namespace).Get(pvclaim.Name, metav1.GetOptions{}) - framework.ExpectNoError(err) + By("Creating PVC using the Storage Class") + pvclaim, err := framework.CreatePVC(client, namespace, getVSphereClaimSpecWithStorageClass(namespace, diskSize, storageclass)) + Expect(err).NotTo(HaveOccurred()) + defer framework.DeletePersistentVolumeClaim(client, pvclaim.Name, namespace) - By("Getting PV created") - pv, err := client.CoreV1().PersistentVolumes().Get(pvclaim.Spec.VolumeName, metav1.GetOptions{}) - framework.ExpectNoError(err) + By("Expect claim to fail provisioning volume") + err = framework.WaitForPersistentVolumeClaimPhase(v1.ClaimBound, client, pvclaim.Namespace, pvclaim.Name, framework.Poll, 2*time.Minute) + Expect(err).To(HaveOccurred()) - By("Verifying if provisioned PV has the correct size") - expectedCapacity := resource.MustParse(expectedDiskSize) - pvCapacity := pv.Spec.Capacity[v1.ResourceName(v1.ResourceStorage)] - Expect(pvCapacity.Value()).To(Equal(expectedCapacity.Value())) - }) -}) + eventList, err := client.CoreV1().Events(pvclaim.Namespace).List(metav1.ListOptions{}) + return fmt.Errorf("Failure message: %+q", eventList.Items[0].Message) +} diff --git a/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-cluster-driver-registrar.yaml b/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-cluster-driver-registrar.yaml index e266c6c3c..75b0f31f1 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-cluster-driver-registrar.yaml +++ b/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-cluster-driver-registrar.yaml @@ -24,8 +24,6 @@ spec: - name: ADDRESS value: /csi/csi.sock imagePullPolicy: Always - securityContext: - privileged: true volumeMounts: - mountPath: /csi name: socket-dir diff --git a/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml b/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml index 5417bfd1d..ef9a1cbb6 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml +++ b/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-attacher.yaml @@ -23,8 +23,6 @@ spec: - name: ADDRESS value: /csi/csi.sock imagePullPolicy: Always - securityContext: - privileged: true volumeMounts: - mountPath: /csi name: socket-dir diff --git a/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml b/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml index 1b25905ef..0ea5ce693 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml +++ b/vendor/k8s.io/kubernetes/test/e2e/testing-manifests/storage-csi/mock/csi-mock-driver-resizer.yaml @@ -23,8 +23,6 @@ spec: - name: ADDRESS value: /csi/csi.sock imagePullPolicy: Always - securityContext: - privileged: true volumeMounts: - mountPath: /csi name: socket-dir diff --git a/vendor/k8s.io/kubernetes/test/e2e/upgrades/apps/job.go b/vendor/k8s.io/kubernetes/test/e2e/upgrades/apps/job.go index 9cad9de8b..36612a09c 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/upgrades/apps/job.go +++ b/vendor/k8s.io/kubernetes/test/e2e/upgrades/apps/job.go @@ -56,11 +56,6 @@ func (t *JobUpgradeTest) Test(f *framework.Framework, done <-chan struct{}, upgr ginkgo.By("Ensuring active pods == parallelism") running, err := framework.CheckForAllJobPodsRunning(f.ClientSet, t.namespace, t.job.Name, 2) gomega.Expect(err).NotTo(gomega.HaveOccurred()) - - if !running { - framework.DumpAllNamespaceInfo(f.ClientSet, t.namespace) - } - gomega.Expect(running).To(gomega.BeTrue()) } diff --git a/vendor/k8s.io/kubernetes/test/e2e/upgrades/apps/replicasets.go b/vendor/k8s.io/kubernetes/test/e2e/upgrades/apps/replicasets.go index 299acc7e7..a85d250e0 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/upgrades/apps/replicasets.go +++ b/vendor/k8s.io/kubernetes/test/e2e/upgrades/apps/replicasets.go @@ -84,13 +84,7 @@ func (r *ReplicaSetUpgradeTest) Test(f *framework.Framework, done <-chan struct{ } ginkgo.By(fmt.Sprintf("Waiting for replicaset %s to have all of its replicas ready after upgrade", rsName)) - - err = framework.WaitForReadyReplicaSet(c, ns, rsName) - if err != nil { - framework.DumpAllNamespaceInfo(f.ClientSet, ns) - } - - framework.ExpectNoError(err) + framework.ExpectNoError(framework.WaitForReadyReplicaSet(c, ns, rsName)) // Verify the upgraded RS is active by scaling up the RS to scaleNum and ensuring all pods are Ready ginkgo.By(fmt.Sprintf("Scaling up replicaset %s to %d", rsName, scaleNum)) diff --git a/vendor/k8s.io/kubernetes/test/e2e/upgrades/services.go b/vendor/k8s.io/kubernetes/test/e2e/upgrades/services.go index 06bad1f4f..93cffa1ef 100644 --- a/vendor/k8s.io/kubernetes/test/e2e/upgrades/services.go +++ b/vendor/k8s.io/kubernetes/test/e2e/upgrades/services.go @@ -17,8 +17,6 @@ limitations under the License. package upgrades import ( - "time" - v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/kubernetes/test/e2e/framework" @@ -39,7 +37,7 @@ type ServiceUpgradeTest struct { // Name returns the tracking name of the test. func (ServiceUpgradeTest) Name() string { return "service-upgrade" } -func shouldTestPDBs() bool { return true } +func shouldTestPDBs() bool { return framework.ProviderIs("gce", "gke") } // Setup creates a service with a load balancer and makes sure it's reachable. func (t *ServiceUpgradeTest) Setup(f *framework.Framework) { @@ -69,8 +67,7 @@ func (t *ServiceUpgradeTest) Setup(f *framework.Framework) { // Hit it once before considering ourselves ready ginkgo.By("hitting the pod through the service's LoadBalancer") - // Load balancers can take more than 2 minutes in heavily contended AWS accounts - jig.TestReachableHTTP(tcpIngressIP, svcPort, 3*time.Minute) + jig.TestReachableHTTP(tcpIngressIP, svcPort, framework.LoadBalancerLagTimeoutDefault) t.jig = jig t.tcpService = tcpService