mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-06-13 10:33:35 +00:00
vendor updates
This commit is contained in:
5
vendor/k8s.io/kubernetes/test/utils/BUILD
generated
vendored
5
vendor/k8s.io/kubernetes/test/utils/BUILD
generated
vendored
@ -9,12 +9,14 @@ go_library(
|
||||
name = "go_default_library",
|
||||
srcs = [
|
||||
"conditions.go",
|
||||
"create_resources.go",
|
||||
"density_utils.go",
|
||||
"deployment.go",
|
||||
"pod_store.go",
|
||||
"replicaset.go",
|
||||
"runners.go",
|
||||
"tmpdir.go",
|
||||
"update_resources.go",
|
||||
],
|
||||
importpath = "k8s.io/kubernetes/test/utils",
|
||||
deps = [
|
||||
@ -24,6 +26,7 @@ go_library(
|
||||
"//pkg/apis/extensions:go_default_library",
|
||||
"//pkg/client/clientset_generated/internalclientset:go_default_library",
|
||||
"//pkg/controller/deployment/util:go_default_library",
|
||||
"//pkg/kubectl:go_default_library",
|
||||
"//pkg/util/labels:go_default_library",
|
||||
"//vendor/github.com/davecgh/go-spew/spew:go_default_library",
|
||||
"//vendor/github.com/golang/glog:go_default_library",
|
||||
@ -39,11 +42,13 @@ go_library(
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/net:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/uuid:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/watch:go_default_library",
|
||||
"//vendor/k8s.io/client-go/kubernetes:go_default_library",
|
||||
"//vendor/k8s.io/client-go/scale:go_default_library",
|
||||
"//vendor/k8s.io/client-go/tools/cache:go_default_library",
|
||||
"//vendor/k8s.io/client-go/util/workqueue:go_default_library",
|
||||
],
|
||||
|
225
vendor/k8s.io/kubernetes/test/utils/create_resources.go
generated
vendored
Normal file
225
vendor/k8s.io/kubernetes/test/utils/create_resources.go
generated
vendored
Normal file
@ -0,0 +1,225 @@
|
||||
/*
|
||||
Copyright 2018 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.
|
||||
*/
|
||||
|
||||
// TODO: Refactor common part of functions in this file for generic object kinds.
|
||||
|
||||
package utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
batch "k8s.io/api/batch/v1"
|
||||
"k8s.io/api/core/v1"
|
||||
extensions "k8s.io/api/extensions/v1beta1"
|
||||
apierrs "k8s.io/apimachinery/pkg/api/errors"
|
||||
utilnet "k8s.io/apimachinery/pkg/util/net"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
)
|
||||
|
||||
const (
|
||||
// Parameters for retrying with exponential backoff.
|
||||
retryBackoffInitialDuration = 100 * time.Millisecond
|
||||
retryBackoffFactor = 3
|
||||
retryBackoffJitter = 0
|
||||
retryBackoffSteps = 6
|
||||
)
|
||||
|
||||
// Utility for retrying the given function with exponential backoff.
|
||||
func RetryWithExponentialBackOff(fn wait.ConditionFunc) error {
|
||||
backoff := wait.Backoff{
|
||||
Duration: retryBackoffInitialDuration,
|
||||
Factor: retryBackoffFactor,
|
||||
Jitter: retryBackoffJitter,
|
||||
Steps: retryBackoffSteps,
|
||||
}
|
||||
return wait.ExponentialBackoff(backoff, fn)
|
||||
}
|
||||
|
||||
func IsRetryableAPIError(err error) bool {
|
||||
return apierrs.IsTimeout(err) || apierrs.IsServerTimeout(err) || apierrs.IsTooManyRequests(err) || utilnet.IsProbableEOF(err)
|
||||
}
|
||||
|
||||
func CreatePodWithRetries(c clientset.Interface, namespace string, obj *v1.Pod) error {
|
||||
if obj == nil {
|
||||
return fmt.Errorf("Object provided to create is empty")
|
||||
}
|
||||
createFunc := func() (bool, error) {
|
||||
_, err := c.CoreV1().Pods(namespace).Create(obj)
|
||||
if err == nil || apierrs.IsAlreadyExists(err) {
|
||||
return true, nil
|
||||
}
|
||||
if IsRetryableAPIError(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("Failed to create object with non-retriable error: %v", err)
|
||||
}
|
||||
return RetryWithExponentialBackOff(createFunc)
|
||||
}
|
||||
|
||||
func CreateRCWithRetries(c clientset.Interface, namespace string, obj *v1.ReplicationController) error {
|
||||
if obj == nil {
|
||||
return fmt.Errorf("Object provided to create is empty")
|
||||
}
|
||||
createFunc := func() (bool, error) {
|
||||
_, err := c.CoreV1().ReplicationControllers(namespace).Create(obj)
|
||||
if err == nil || apierrs.IsAlreadyExists(err) {
|
||||
return true, nil
|
||||
}
|
||||
if IsRetryableAPIError(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("Failed to create object with non-retriable error: %v", err)
|
||||
}
|
||||
return RetryWithExponentialBackOff(createFunc)
|
||||
}
|
||||
|
||||
func CreateReplicaSetWithRetries(c clientset.Interface, namespace string, obj *extensions.ReplicaSet) error {
|
||||
if obj == nil {
|
||||
return fmt.Errorf("Object provided to create is empty")
|
||||
}
|
||||
createFunc := func() (bool, error) {
|
||||
_, err := c.ExtensionsV1beta1().ReplicaSets(namespace).Create(obj)
|
||||
if err == nil || apierrs.IsAlreadyExists(err) {
|
||||
return true, nil
|
||||
}
|
||||
if IsRetryableAPIError(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("Failed to create object with non-retriable error: %v", err)
|
||||
}
|
||||
return RetryWithExponentialBackOff(createFunc)
|
||||
}
|
||||
|
||||
func CreateDeploymentWithRetries(c clientset.Interface, namespace string, obj *extensions.Deployment) error {
|
||||
if obj == nil {
|
||||
return fmt.Errorf("Object provided to create is empty")
|
||||
}
|
||||
createFunc := func() (bool, error) {
|
||||
_, err := c.ExtensionsV1beta1().Deployments(namespace).Create(obj)
|
||||
if err == nil || apierrs.IsAlreadyExists(err) {
|
||||
return true, nil
|
||||
}
|
||||
if IsRetryableAPIError(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("Failed to create object with non-retriable error: %v", err)
|
||||
}
|
||||
return RetryWithExponentialBackOff(createFunc)
|
||||
}
|
||||
|
||||
func CreateDaemonSetWithRetries(c clientset.Interface, namespace string, obj *extensions.DaemonSet) error {
|
||||
if obj == nil {
|
||||
return fmt.Errorf("Object provided to create is empty")
|
||||
}
|
||||
createFunc := func() (bool, error) {
|
||||
_, err := c.ExtensionsV1beta1().DaemonSets(namespace).Create(obj)
|
||||
if err == nil || apierrs.IsAlreadyExists(err) {
|
||||
return true, nil
|
||||
}
|
||||
if IsRetryableAPIError(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("Failed to create object with non-retriable error: %v", err)
|
||||
}
|
||||
return RetryWithExponentialBackOff(createFunc)
|
||||
}
|
||||
|
||||
func CreateJobWithRetries(c clientset.Interface, namespace string, obj *batch.Job) error {
|
||||
if obj == nil {
|
||||
return fmt.Errorf("Object provided to create is empty")
|
||||
}
|
||||
createFunc := func() (bool, error) {
|
||||
_, err := c.BatchV1().Jobs(namespace).Create(obj)
|
||||
if err == nil || apierrs.IsAlreadyExists(err) {
|
||||
return true, nil
|
||||
}
|
||||
if IsRetryableAPIError(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("Failed to create object with non-retriable error: %v", err)
|
||||
}
|
||||
return RetryWithExponentialBackOff(createFunc)
|
||||
}
|
||||
|
||||
func CreateSecretWithRetries(c clientset.Interface, namespace string, obj *v1.Secret) error {
|
||||
if obj == nil {
|
||||
return fmt.Errorf("Object provided to create is empty")
|
||||
}
|
||||
createFunc := func() (bool, error) {
|
||||
_, err := c.CoreV1().Secrets(namespace).Create(obj)
|
||||
if err == nil || apierrs.IsAlreadyExists(err) {
|
||||
return true, nil
|
||||
}
|
||||
if IsRetryableAPIError(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("Failed to create object with non-retriable error: %v", err)
|
||||
}
|
||||
return RetryWithExponentialBackOff(createFunc)
|
||||
}
|
||||
|
||||
func CreateConfigMapWithRetries(c clientset.Interface, namespace string, obj *v1.ConfigMap) error {
|
||||
if obj == nil {
|
||||
return fmt.Errorf("Object provided to create is empty")
|
||||
}
|
||||
createFunc := func() (bool, error) {
|
||||
_, err := c.CoreV1().ConfigMaps(namespace).Create(obj)
|
||||
if err == nil || apierrs.IsAlreadyExists(err) {
|
||||
return true, nil
|
||||
}
|
||||
if IsRetryableAPIError(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("Failed to create object with non-retriable error: %v", err)
|
||||
}
|
||||
return RetryWithExponentialBackOff(createFunc)
|
||||
}
|
||||
|
||||
func CreateServiceWithRetries(c clientset.Interface, namespace string, obj *v1.Service) error {
|
||||
if obj == nil {
|
||||
return fmt.Errorf("Object provided to create is empty")
|
||||
}
|
||||
createFunc := func() (bool, error) {
|
||||
_, err := c.CoreV1().Services(namespace).Create(obj)
|
||||
if err == nil || apierrs.IsAlreadyExists(err) {
|
||||
return true, nil
|
||||
}
|
||||
if IsRetryableAPIError(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("Failed to create object with non-retriable error: %v", err)
|
||||
}
|
||||
return RetryWithExponentialBackOff(createFunc)
|
||||
}
|
||||
|
||||
func CreateResourceQuotaWithRetries(c clientset.Interface, namespace string, obj *v1.ResourceQuota) error {
|
||||
if obj == nil {
|
||||
return fmt.Errorf("Object provided to create is empty")
|
||||
}
|
||||
createFunc := func() (bool, error) {
|
||||
_, err := c.CoreV1().ResourceQuotas(namespace).Create(obj)
|
||||
if err == nil || apierrs.IsAlreadyExists(err) {
|
||||
return true, nil
|
||||
}
|
||||
if IsRetryableAPIError(err) {
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("Failed to create object with non-retriable error: %v", err)
|
||||
}
|
||||
return RetryWithExponentialBackOff(createFunc)
|
||||
}
|
10
vendor/k8s.io/kubernetes/test/utils/deployment.go
generated
vendored
10
vendor/k8s.io/kubernetes/test/utils/deployment.go
generated
vendored
@ -259,12 +259,12 @@ func UpdateDeploymentWithRetries(c clientset.Interface, namespace, name string,
|
||||
var updateErr error
|
||||
pollErr := wait.PollImmediate(pollInterval, pollTimeout, func() (bool, error) {
|
||||
var err error
|
||||
if deployment, err = c.Extensions().Deployments(namespace).Get(name, metav1.GetOptions{}); err != nil {
|
||||
if deployment, err = c.ExtensionsV1beta1().Deployments(namespace).Get(name, metav1.GetOptions{}); err != nil {
|
||||
return false, err
|
||||
}
|
||||
// Apply the update, then attempt to push it to the apiserver.
|
||||
applyUpdate(deployment)
|
||||
if deployment, err = c.Extensions().Deployments(namespace).Update(deployment); err == nil {
|
||||
if deployment, err = c.ExtensionsV1beta1().Deployments(namespace).Update(deployment); err == nil {
|
||||
logf("Updating deployment %s", name)
|
||||
return true, nil
|
||||
}
|
||||
@ -279,7 +279,7 @@ func UpdateDeploymentWithRetries(c clientset.Interface, namespace, name string,
|
||||
|
||||
func WaitForObservedDeployment(c clientset.Interface, ns, deploymentName string, desiredGeneration int64) error {
|
||||
return deploymentutil.WaitForObservedDeployment(func() (*extensions.Deployment, error) {
|
||||
return c.Extensions().Deployments(ns).Get(deploymentName, metav1.GetOptions{})
|
||||
return c.ExtensionsV1beta1().Deployments(ns).Get(deploymentName, metav1.GetOptions{})
|
||||
}, desiredGeneration, 2*time.Second, 1*time.Minute)
|
||||
}
|
||||
|
||||
@ -302,8 +302,8 @@ func WaitForDeploymentRollbackCleared(c clientset.Interface, ns, deploymentName
|
||||
return nil
|
||||
}
|
||||
|
||||
// WaitForDeploymentUpdatedReplicasLTE waits for given deployment to be observed by the controller and has at least a number of updatedReplicas
|
||||
func WaitForDeploymentUpdatedReplicasLTE(c clientset.Interface, ns, deploymentName string, minUpdatedReplicas int32, desiredGeneration int64, pollInterval, pollTimeout time.Duration) error {
|
||||
// WaitForDeploymentUpdatedReplicasGTE waits for given deployment to be observed by the controller and has at least a number of updatedReplicas
|
||||
func WaitForDeploymentUpdatedReplicasGTE(c clientset.Interface, ns, deploymentName string, minUpdatedReplicas int32, desiredGeneration int64, pollInterval, pollTimeout time.Duration) error {
|
||||
var deployment *extensions.Deployment
|
||||
err := wait.PollImmediate(pollInterval, pollTimeout, func() (bool, error) {
|
||||
d, err := c.ExtensionsV1beta1().Deployments(ns).Get(deploymentName, metav1.GetOptions{})
|
||||
|
7
vendor/k8s.io/kubernetes/test/utils/image/OWNERS
generated
vendored
Normal file
7
vendor/k8s.io/kubernetes/test/utils/image/OWNERS
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
reviewers:
|
||||
- luxas
|
||||
- mkumatag
|
||||
- ixdy
|
||||
approvers:
|
||||
- luxas
|
||||
- ixdy
|
103
vendor/k8s.io/kubernetes/test/utils/image/manifest.go
generated
vendored
103
vendor/k8s.io/kubernetes/test/utils/image/manifest.go
generated
vendored
@ -23,7 +23,7 @@ import (
|
||||
|
||||
const (
|
||||
e2eRegistry = "gcr.io/kubernetes-e2e-test-images"
|
||||
gcRegistry = "gcr.io/google-containers"
|
||||
gcRegistry = "k8s.gcr.io"
|
||||
PrivateRegistry = "gcr.io/k8s-authenticated-test"
|
||||
sampleRegistry = "gcr.io/google-samples"
|
||||
)
|
||||
@ -32,6 +32,7 @@ type ImageConfig struct {
|
||||
registry string
|
||||
name string
|
||||
version string
|
||||
hasArch bool
|
||||
}
|
||||
|
||||
func (i *ImageConfig) SetRegistry(registry string) {
|
||||
@ -47,42 +48,72 @@ func (i *ImageConfig) SetVersion(version string) {
|
||||
}
|
||||
|
||||
var (
|
||||
ClusterTester = ImageConfig{e2eRegistry, "clusterapi-tester", "1.0"}
|
||||
CudaVectorAdd = ImageConfig{e2eRegistry, "cuda-vector-add", "1.0"}
|
||||
Dnsutils = ImageConfig{e2eRegistry, "dnsutils", "1.0"}
|
||||
EntrypointTester = ImageConfig{e2eRegistry, "entrypoint-tester", "1.0"}
|
||||
Fakegitserver = ImageConfig{e2eRegistry, "fakegitserver", "1.0"}
|
||||
GBFrontend = ImageConfig{sampleRegistry, "gb-frontend", "v5"}
|
||||
GBRedisSlave = ImageConfig{sampleRegistry, "gb-redisslave", "v2"}
|
||||
Goproxy = ImageConfig{e2eRegistry, "goproxy", "1.0"}
|
||||
Hostexec = ImageConfig{e2eRegistry, "hostexec", "1.0"}
|
||||
Iperf = ImageConfig{e2eRegistry, "iperf", "1.0"}
|
||||
JessieDnsutils = ImageConfig{e2eRegistry, "jessie-dnsutils", "1.0"}
|
||||
Kitten = ImageConfig{e2eRegistry, "kitten", "1.0"}
|
||||
Liveness = ImageConfig{e2eRegistry, "liveness", "1.0"}
|
||||
LogsGenerator = ImageConfig{e2eRegistry, "logs-generator", "1.0"}
|
||||
Mounttest = ImageConfig{e2eRegistry, "mounttest", "1.0"}
|
||||
MounttestUser = ImageConfig{e2eRegistry, "mounttest-user", "1.0"}
|
||||
Nautilus = ImageConfig{e2eRegistry, "nautilus", "1.0"}
|
||||
Net = ImageConfig{e2eRegistry, "net", "1.0"}
|
||||
Netexec = ImageConfig{e2eRegistry, "netexec", "1.0"}
|
||||
Nettest = ImageConfig{e2eRegistry, "nettest", "1.0"}
|
||||
NginxSlim = ImageConfig{gcRegistry, "nginx-slim", "0.20"}
|
||||
NginxSlimNew = ImageConfig{gcRegistry, "nginx-slim", "0.21"}
|
||||
Nonewprivs = ImageConfig{e2eRegistry, "nonewprivs", "1.0"}
|
||||
NoSnatTest = ImageConfig{e2eRegistry, "no-snat-test", "1.0"}
|
||||
NoSnatTestProxy = ImageConfig{e2eRegistry, "no-snat-test-proxy", "1.0"}
|
||||
NWayHTTP = ImageConfig{e2eRegistry, "n-way-http", "1.0"}
|
||||
Pause = ImageConfig{gcRegistry, "pause", "3.0"}
|
||||
Porter = ImageConfig{e2eRegistry, "porter", "1.0"}
|
||||
PortForwardTester = ImageConfig{e2eRegistry, "port-forward-tester", "1.0"}
|
||||
Redis = ImageConfig{e2eRegistry, "redis", "1.0"}
|
||||
ResourceConsumer = ImageConfig{e2eRegistry, "resource-consumer", "1.3"}
|
||||
ResourceController = ImageConfig{e2eRegistry, "resource-consumer/controller", "1.0"}
|
||||
ServeHostname = ImageConfig{e2eRegistry, "serve-hostname", "1.0"}
|
||||
TestWebserver = ImageConfig{e2eRegistry, "test-webserver", "1.0"}
|
||||
AdmissionWebhook = ImageConfig{e2eRegistry, "k8s-sample-admission-webhook", "1.9v1", true}
|
||||
APIServer = ImageConfig{e2eRegistry, "k8s-aggregator-sample-apiserver", "1.7v2", true}
|
||||
AppArmorLoader = ImageConfig{gcRegistry, "apparmor-loader", "0.1", false}
|
||||
BusyBox = ImageConfig{gcRegistry, "busybox", "1.24", false}
|
||||
CheckMetadataConcealment = ImageConfig{gcRegistry, "check-metadata-concealment", "v0.0.3", false}
|
||||
ClusterTester = ImageConfig{e2eRegistry, "clusterapi-tester", "1.0", true}
|
||||
CudaVectorAdd = ImageConfig{e2eRegistry, "cuda-vector-add", "1.0", true}
|
||||
Dnsutils = ImageConfig{e2eRegistry, "dnsutils", "1.0", true}
|
||||
DNSMasq = ImageConfig{gcRegistry, "k8s-dns-dnsmasq", "1.14.5", true}
|
||||
EchoServer = ImageConfig{gcRegistry, "echoserver", "1.6", false}
|
||||
EntrypointTester = ImageConfig{e2eRegistry, "entrypoint-tester", "1.0", true}
|
||||
E2ENet = ImageConfig{gcRegistry, "e2e-net", "1.0", true}
|
||||
Fakegitserver = ImageConfig{e2eRegistry, "fakegitserver", "1.0", true}
|
||||
GBFrontend = ImageConfig{sampleRegistry, "gb-frontend", "v5", true}
|
||||
GBRedisSlave = ImageConfig{sampleRegistry, "gb-redisslave", "v2", true}
|
||||
Goproxy = ImageConfig{e2eRegistry, "goproxy", "1.0", true}
|
||||
Hostexec = ImageConfig{e2eRegistry, "hostexec", "1.1", true}
|
||||
IpcUtils = ImageConfig{e2eRegistry, "ipc-utils", "1.0", true}
|
||||
Iperf = ImageConfig{e2eRegistry, "iperf", "1.0", true}
|
||||
JessieDnsutils = ImageConfig{e2eRegistry, "jessie-dnsutils", "1.0", true}
|
||||
Kitten = ImageConfig{e2eRegistry, "kitten", "1.0", true}
|
||||
Liveness = ImageConfig{e2eRegistry, "liveness", "1.0", true}
|
||||
LogsGenerator = ImageConfig{e2eRegistry, "logs-generator", "1.0", true}
|
||||
Mounttest = ImageConfig{e2eRegistry, "mounttest", "1.0", true}
|
||||
MounttestUser = ImageConfig{e2eRegistry, "mounttest-user", "1.0", true}
|
||||
Nautilus = ImageConfig{e2eRegistry, "nautilus", "1.0", true}
|
||||
Net = ImageConfig{e2eRegistry, "net", "1.0", true}
|
||||
Netexec = ImageConfig{e2eRegistry, "netexec", "1.0", true}
|
||||
Nettest = ImageConfig{e2eRegistry, "nettest", "1.0", true}
|
||||
NginxSlim = ImageConfig{gcRegistry, "nginx-slim", "0.20", true}
|
||||
NginxSlimNew = ImageConfig{gcRegistry, "nginx-slim", "0.21", true}
|
||||
Nonewprivs = ImageConfig{e2eRegistry, "nonewprivs", "1.0", true}
|
||||
NoSnatTest = ImageConfig{e2eRegistry, "no-snat-test", "1.0", true}
|
||||
NoSnatTestProxy = ImageConfig{e2eRegistry, "no-snat-test-proxy", "1.0", true}
|
||||
NWayHTTP = ImageConfig{e2eRegistry, "n-way-http", "1.0", true}
|
||||
// When these values are updated, also update cmd/kubelet/app/options/container_runtime.go
|
||||
Pause = ImageConfig{gcRegistry, "pause", "3.1", true}
|
||||
Porter = ImageConfig{e2eRegistry, "porter", "1.0", true}
|
||||
PortForwardTester = ImageConfig{e2eRegistry, "port-forward-tester", "1.0", true}
|
||||
Redis = ImageConfig{e2eRegistry, "redis", "1.0", true}
|
||||
ResourceConsumer = ImageConfig{e2eRegistry, "resource-consumer", "1.3", true}
|
||||
ResourceController = ImageConfig{e2eRegistry, "resource-consumer/controller", "1.0", true}
|
||||
SDDummyExporter = ImageConfig{gcRegistry, "sd-dummy-exporter", "v0.1.0", false}
|
||||
ServeHostname = ImageConfig{e2eRegistry, "serve-hostname", "1.0", true}
|
||||
TestWebserver = ImageConfig{e2eRegistry, "test-webserver", "1.0", true}
|
||||
VolumeNFSServer = ImageConfig{gcRegistry, "volume-nfs", "0.8", false}
|
||||
VolumeISCSIServer = ImageConfig{gcRegistry, "volume-icsci", "0.1", false}
|
||||
VolumeGlusterServer = ImageConfig{gcRegistry, "volume-gluster", "0.2", false}
|
||||
VolumeCephServer = ImageConfig{gcRegistry, "volume-ceph", "0.1", false}
|
||||
VolumeRBDServer = ImageConfig{gcRegistry, "volume-rbd", "0.1", false}
|
||||
)
|
||||
|
||||
func GetE2EImage(image ImageConfig) string {
|
||||
return fmt.Sprintf("%s/%s-%s:%s", image.registry, image.name, runtime.GOARCH, image.version)
|
||||
return GetE2EImageWithArch(image, runtime.GOARCH)
|
||||
}
|
||||
|
||||
func GetE2EImageWithArch(image ImageConfig, arch string) string {
|
||||
if image.hasArch {
|
||||
return fmt.Sprintf("%s/%s-%s:%s", image.registry, image.name, arch, image.version)
|
||||
} else {
|
||||
return fmt.Sprintf("%s/%s:%s", image.registry, image.name, image.version)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// GetPauseImageNameForHostArch fetches the pause image name for the same architecture the test is running on.
|
||||
func GetPauseImageNameForHostArch() string {
|
||||
return GetE2EImage(Pause)
|
||||
}
|
||||
|
27
vendor/k8s.io/kubernetes/test/utils/replicaset.go
generated
vendored
27
vendor/k8s.io/kubernetes/test/utils/replicaset.go
generated
vendored
@ -34,12 +34,12 @@ func UpdateReplicaSetWithRetries(c clientset.Interface, namespace, name string,
|
||||
var updateErr error
|
||||
pollErr := wait.PollImmediate(pollInterval, pollTimeout, func() (bool, error) {
|
||||
var err error
|
||||
if rs, err = c.Extensions().ReplicaSets(namespace).Get(name, metav1.GetOptions{}); err != nil {
|
||||
if rs, err = c.ExtensionsV1beta1().ReplicaSets(namespace).Get(name, metav1.GetOptions{}); err != nil {
|
||||
return false, err
|
||||
}
|
||||
// Apply the update, then attempt to push it to the apiserver.
|
||||
applyUpdate(rs)
|
||||
if rs, err = c.Extensions().ReplicaSets(namespace).Update(rs); err == nil {
|
||||
if rs, err = c.ExtensionsV1beta1().ReplicaSets(namespace).Update(rs); err == nil {
|
||||
logf("Updating replica set %q", name)
|
||||
return true, nil
|
||||
}
|
||||
@ -66,3 +66,26 @@ func WaitRSStable(t *testing.T, clientSet clientset.Interface, rs *extensions.Re
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func UpdateReplicaSetStatusWithRetries(c clientset.Interface, namespace, name string, applyUpdate UpdateReplicaSetFunc, logf LogfFn, pollInterval, pollTimeout time.Duration) (*extensions.ReplicaSet, error) {
|
||||
var rs *extensions.ReplicaSet
|
||||
var updateErr error
|
||||
pollErr := wait.PollImmediate(pollInterval, pollTimeout, func() (bool, error) {
|
||||
var err error
|
||||
if rs, err = c.ExtensionsV1beta1().ReplicaSets(namespace).Get(name, metav1.GetOptions{}); err != nil {
|
||||
return false, err
|
||||
}
|
||||
// Apply the update, then attempt to push it to the apiserver.
|
||||
applyUpdate(rs)
|
||||
if rs, err = c.ExtensionsV1beta1().ReplicaSets(namespace).UpdateStatus(rs); err == nil {
|
||||
logf("Updating replica set %q", name)
|
||||
return true, nil
|
||||
}
|
||||
updateErr = err
|
||||
return false, nil
|
||||
})
|
||||
if pollErr == wait.ErrWaitTimeout {
|
||||
pollErr = fmt.Errorf("couldn't apply the provided update to replicaset %q: %v", name, updateErr)
|
||||
}
|
||||
return rs, pollErr
|
||||
}
|
||||
|
87
vendor/k8s.io/kubernetes/test/utils/runners.go
generated
vendored
87
vendor/k8s.io/kubernetes/test/utils/runners.go
generated
vendored
@ -38,6 +38,7 @@ import (
|
||||
"k8s.io/apimachinery/pkg/util/uuid"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
scaleclient "k8s.io/client-go/scale"
|
||||
"k8s.io/client-go/util/workqueue"
|
||||
batchinternal "k8s.io/kubernetes/pkg/apis/batch"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
@ -80,15 +81,7 @@ func WaitUntilPodIsScheduled(c clientset.Interface, name, namespace string, time
|
||||
func RunPodAndGetNodeName(c clientset.Interface, pod *v1.Pod, timeout time.Duration) (string, error) {
|
||||
name := pod.Name
|
||||
namespace := pod.Namespace
|
||||
var err error
|
||||
// Create a Pod
|
||||
for i := 0; i < retries; i++ {
|
||||
_, err = c.CoreV1().Pods(namespace).Create(pod)
|
||||
if err == nil || apierrs.IsAlreadyExists(err) {
|
||||
break
|
||||
}
|
||||
}
|
||||
if err != nil && !apierrs.IsAlreadyExists(err) {
|
||||
if err := CreatePodWithRetries(c, namespace, pod); err != nil {
|
||||
return "", err
|
||||
}
|
||||
p, err := WaitUntilPodIsScheduled(c, name, namespace, timeout)
|
||||
@ -105,16 +98,20 @@ type RunObjectConfig interface {
|
||||
GetKind() schema.GroupKind
|
||||
GetClient() clientset.Interface
|
||||
GetInternalClient() internalclientset.Interface
|
||||
GetScalesGetter() scaleclient.ScalesGetter
|
||||
SetClient(clientset.Interface)
|
||||
SetInternalClient(internalclientset.Interface)
|
||||
SetScalesClient(scaleclient.ScalesGetter)
|
||||
GetReplicas() int
|
||||
GetLabelValue(string) (string, bool)
|
||||
GetGroupResource() schema.GroupResource
|
||||
}
|
||||
|
||||
type RCConfig struct {
|
||||
Affinity *v1.Affinity
|
||||
Client clientset.Interface
|
||||
InternalClient internalclientset.Interface
|
||||
ScalesGetter scaleclient.ScalesGetter
|
||||
Image string
|
||||
Command []string
|
||||
Name string
|
||||
@ -277,6 +274,10 @@ func (config *DeploymentConfig) GetKind() schema.GroupKind {
|
||||
return extensionsinternal.Kind("Deployment")
|
||||
}
|
||||
|
||||
func (config *DeploymentConfig) GetGroupResource() schema.GroupResource {
|
||||
return extensionsinternal.Resource("deployments")
|
||||
}
|
||||
|
||||
func (config *DeploymentConfig) create() error {
|
||||
deployment := &extensions.Deployment{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
@ -316,8 +317,7 @@ func (config *DeploymentConfig) create() error {
|
||||
|
||||
config.applyTo(&deployment.Spec.Template)
|
||||
|
||||
_, err := config.Client.ExtensionsV1beta1().Deployments(config.Namespace).Create(deployment)
|
||||
if err != nil {
|
||||
if err := CreateDeploymentWithRetries(config.Client, config.Namespace, deployment); err != nil {
|
||||
return fmt.Errorf("Error creating deployment: %v", err)
|
||||
}
|
||||
config.RCConfigLog("Created deployment with name: %v, namespace: %v, replica count: %v", deployment.Name, config.Namespace, removePtr(deployment.Spec.Replicas))
|
||||
@ -344,6 +344,10 @@ func (config *ReplicaSetConfig) GetKind() schema.GroupKind {
|
||||
return extensionsinternal.Kind("ReplicaSet")
|
||||
}
|
||||
|
||||
func (config *ReplicaSetConfig) GetGroupResource() schema.GroupResource {
|
||||
return extensionsinternal.Resource("replicasets")
|
||||
}
|
||||
|
||||
func (config *ReplicaSetConfig) create() error {
|
||||
rs := &extensions.ReplicaSet{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
@ -383,8 +387,7 @@ func (config *ReplicaSetConfig) create() error {
|
||||
|
||||
config.applyTo(&rs.Spec.Template)
|
||||
|
||||
_, err := config.Client.ExtensionsV1beta1().ReplicaSets(config.Namespace).Create(rs)
|
||||
if err != nil {
|
||||
if err := CreateReplicaSetWithRetries(config.Client, config.Namespace, rs); err != nil {
|
||||
return fmt.Errorf("Error creating replica set: %v", err)
|
||||
}
|
||||
config.RCConfigLog("Created replica set with name: %v, namespace: %v, replica count: %v", rs.Name, config.Namespace, removePtr(rs.Spec.Replicas))
|
||||
@ -411,6 +414,10 @@ func (config *JobConfig) GetKind() schema.GroupKind {
|
||||
return batchinternal.Kind("Job")
|
||||
}
|
||||
|
||||
func (config *JobConfig) GetGroupResource() schema.GroupResource {
|
||||
return batchinternal.Resource("jobs")
|
||||
}
|
||||
|
||||
func (config *JobConfig) create() error {
|
||||
job := &batch.Job{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
@ -446,8 +453,7 @@ func (config *JobConfig) create() error {
|
||||
|
||||
config.applyTo(&job.Spec.Template)
|
||||
|
||||
_, err := config.Client.BatchV1().Jobs(config.Namespace).Create(job)
|
||||
if err != nil {
|
||||
if err := CreateJobWithRetries(config.Client, config.Namespace, job); err != nil {
|
||||
return fmt.Errorf("Error creating job: %v", err)
|
||||
}
|
||||
config.RCConfigLog("Created job with name: %v, namespace: %v, parallelism/completions: %v", job.Name, config.Namespace, job.Spec.Parallelism)
|
||||
@ -482,6 +488,10 @@ func (config *RCConfig) GetKind() schema.GroupKind {
|
||||
return api.Kind("ReplicationController")
|
||||
}
|
||||
|
||||
func (config *RCConfig) GetGroupResource() schema.GroupResource {
|
||||
return api.Resource("replicationcontrollers")
|
||||
}
|
||||
|
||||
func (config *RCConfig) GetClient() clientset.Interface {
|
||||
return config.Client
|
||||
}
|
||||
@ -490,6 +500,10 @@ func (config *RCConfig) GetInternalClient() internalclientset.Interface {
|
||||
return config.InternalClient
|
||||
}
|
||||
|
||||
func (config *RCConfig) GetScalesGetter() scaleclient.ScalesGetter {
|
||||
return config.ScalesGetter
|
||||
}
|
||||
|
||||
func (config *RCConfig) SetClient(c clientset.Interface) {
|
||||
config.Client = c
|
||||
}
|
||||
@ -498,6 +512,10 @@ func (config *RCConfig) SetInternalClient(c internalclientset.Interface) {
|
||||
config.InternalClient = c
|
||||
}
|
||||
|
||||
func (config *RCConfig) SetScalesClient(getter scaleclient.ScalesGetter) {
|
||||
config.ScalesGetter = getter
|
||||
}
|
||||
|
||||
func (config *RCConfig) GetReplicas() int {
|
||||
return config.Replicas
|
||||
}
|
||||
@ -555,8 +573,7 @@ func (config *RCConfig) create() error {
|
||||
|
||||
config.applyTo(rc.Spec.Template)
|
||||
|
||||
_, err := config.Client.CoreV1().ReplicationControllers(config.Namespace).Create(rc)
|
||||
if err != nil {
|
||||
if err := CreateRCWithRetries(config.Client, config.Namespace, rc); err != nil {
|
||||
return fmt.Errorf("Error creating replication controller: %v", err)
|
||||
}
|
||||
config.RCConfigLog("Created replication controller with name: %v, namespace: %v, replica count: %v", rc.Name, config.Namespace, removePtr(rc.Spec.Replicas))
|
||||
@ -766,7 +783,6 @@ func (config *RCConfig) start() error {
|
||||
// List only pods from a given replication controller.
|
||||
options := metav1.ListOptions{LabelSelector: label.String()}
|
||||
if pods, err := config.Client.CoreV1().Pods(metav1.NamespaceAll).List(options); err == nil {
|
||||
|
||||
for _, pod := range pods.Items {
|
||||
config.RCConfigLog("Pod %s\t%s\t%s\t%s", pod.Name, pod.Spec.NodeName, pod.Status.Phase, pod.DeletionTimestamp)
|
||||
}
|
||||
@ -794,8 +810,7 @@ func StartPods(c clientset.Interface, replicas int, namespace string, podNamePre
|
||||
pod.ObjectMeta.Labels["name"] = podName
|
||||
pod.ObjectMeta.Labels["startPodsID"] = startPodsID
|
||||
pod.Spec.Containers[0].Name = podName
|
||||
_, err := c.CoreV1().Pods(namespace).Create(&pod)
|
||||
if err != nil {
|
||||
if err := CreatePodWithRetries(c, namespace, &pod); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@ -991,14 +1006,10 @@ func MakePodSpec() v1.PodSpec {
|
||||
}
|
||||
|
||||
func makeCreatePod(client clientset.Interface, namespace string, podTemplate *v1.Pod) error {
|
||||
var err error
|
||||
for attempt := 0; attempt < retries; attempt++ {
|
||||
if _, err := client.CoreV1().Pods(namespace).Create(podTemplate); err == nil {
|
||||
return nil
|
||||
}
|
||||
glog.Errorf("Error while creating pod, maybe retry: %v", err)
|
||||
if err := CreatePodWithRetries(client, namespace, podTemplate); err != nil {
|
||||
return fmt.Errorf("Error creating pod: %v", err)
|
||||
}
|
||||
return fmt.Errorf("Terminal error while creating pod, won't retry: %v", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreatePod(client clientset.Interface, namespace string, podCount int, podTemplate *v1.Pod) error {
|
||||
@ -1036,14 +1047,10 @@ func createController(client clientset.Interface, controllerName, namespace stri
|
||||
},
|
||||
},
|
||||
}
|
||||
var err error
|
||||
for attempt := 0; attempt < retries; attempt++ {
|
||||
if _, err := client.CoreV1().ReplicationControllers(namespace).Create(rc); err == nil {
|
||||
return nil
|
||||
}
|
||||
glog.Errorf("Error while creating rc, maybe retry: %v", err)
|
||||
if err := CreateRCWithRetries(client, namespace, rc); err != nil {
|
||||
return fmt.Errorf("Error creating replication controller: %v", err)
|
||||
}
|
||||
return fmt.Errorf("Terminal error while creating rc, won't retry: %v", err)
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewCustomCreatePodStrategy(podTemplate *v1.Pod) TestPodCreateStrategy {
|
||||
@ -1098,8 +1105,7 @@ func (config *SecretConfig) Run() error {
|
||||
secret.StringData[k] = v
|
||||
}
|
||||
|
||||
_, err := config.Client.CoreV1().Secrets(config.Namespace).Create(secret)
|
||||
if err != nil {
|
||||
if err := CreateSecretWithRetries(config.Client, config.Namespace, secret); err != nil {
|
||||
return fmt.Errorf("Error creating secret: %v", err)
|
||||
}
|
||||
config.LogFunc("Created secret %v/%v", config.Namespace, config.Name)
|
||||
@ -1157,8 +1163,7 @@ func (config *ConfigMapConfig) Run() error {
|
||||
configMap.Data[k] = v
|
||||
}
|
||||
|
||||
_, err := config.Client.CoreV1().ConfigMaps(config.Namespace).Create(configMap)
|
||||
if err != nil {
|
||||
if err := CreateConfigMapWithRetries(config.Client, config.Namespace, configMap); err != nil {
|
||||
return fmt.Errorf("Error creating configmap: %v", err)
|
||||
}
|
||||
config.LogFunc("Created configmap %v/%v", config.Namespace, config.Name)
|
||||
@ -1237,12 +1242,12 @@ func (config *DaemonConfig) Run() error {
|
||||
},
|
||||
}
|
||||
|
||||
_, err := config.Client.ExtensionsV1beta1().DaemonSets(config.Namespace).Create(daemon)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error creating DaemonSet %v: %v", config.Name, err)
|
||||
if err := CreateDaemonSetWithRetries(config.Client, config.Namespace, daemon); err != nil {
|
||||
return fmt.Errorf("Error creating daemonset: %v", err)
|
||||
}
|
||||
|
||||
var nodes *v1.NodeList
|
||||
var err error
|
||||
for i := 0; i < retries; i++ {
|
||||
// Wait for all daemons to be running
|
||||
nodes, err = config.Client.CoreV1().Nodes().List(metav1.ListOptions{ResourceVersion: "0"})
|
||||
|
42
vendor/k8s.io/kubernetes/test/utils/update_resources.go
generated
vendored
Normal file
42
vendor/k8s.io/kubernetes/test/utils/update_resources.go
generated
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
Copyright 2018 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 utils
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"k8s.io/kubernetes/pkg/kubectl"
|
||||
)
|
||||
|
||||
const (
|
||||
// Parameters for retrying updates/waits with linear backoff.
|
||||
// TODO: Try to move this to exponential backoff by modifying kubectl.Scale().
|
||||
updateRetryInterval = 5 * time.Second
|
||||
updateRetryTimeout = 1 * time.Minute
|
||||
waitRetryInterval = 5 * time.Second
|
||||
waitRetryTImeout = 5 * time.Minute
|
||||
)
|
||||
|
||||
func ScaleResourceWithRetries(scaler kubectl.Scaler, namespace, name string, size uint) error {
|
||||
waitForScale := kubectl.NewRetryParams(updateRetryInterval, updateRetryTimeout)
|
||||
waitForReplicas := kubectl.NewRetryParams(waitRetryInterval, waitRetryTImeout)
|
||||
if err := scaler.Scale(namespace, name, size, nil, waitForScale, waitForReplicas); err != nil {
|
||||
return fmt.Errorf("Error while scaling %s to %d replicas: %v", name, size, err)
|
||||
}
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user