123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /*
- 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 common
- import (
- "fmt"
- "time"
- "k8s.io/api/core/v1"
- "k8s.io/apimachinery/pkg/api/errors"
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/apimachinery/pkg/util/uuid"
- podutil "k8s.io/kubernetes/pkg/api/v1/pod"
- "k8s.io/kubernetes/test/e2e/framework"
- )
- const (
- ContainerStatusRetryTimeout = time.Minute * 5
- ContainerStatusPollInterval = time.Second * 1
- )
- // One pod one container
- type ConformanceContainer struct {
- Container v1.Container
- RestartPolicy v1.RestartPolicy
- Volumes []v1.Volume
- ImagePullSecrets []string
- PodClient *framework.PodClient
- podName string
- PodSecurityContext *v1.PodSecurityContext
- }
- func (cc *ConformanceContainer) Create() {
- cc.podName = cc.Container.Name + string(uuid.NewUUID())
- imagePullSecrets := []v1.LocalObjectReference{}
- for _, s := range cc.ImagePullSecrets {
- imagePullSecrets = append(imagePullSecrets, v1.LocalObjectReference{Name: s})
- }
- pod := &v1.Pod{
- ObjectMeta: metav1.ObjectMeta{
- Name: cc.podName,
- },
- Spec: v1.PodSpec{
- RestartPolicy: cc.RestartPolicy,
- Containers: []v1.Container{
- cc.Container,
- },
- SecurityContext: cc.PodSecurityContext,
- Volumes: cc.Volumes,
- ImagePullSecrets: imagePullSecrets,
- },
- }
- cc.PodClient.Create(pod)
- }
- func (cc *ConformanceContainer) Delete() error {
- return cc.PodClient.Delete(cc.podName, metav1.NewDeleteOptions(0))
- }
- func (cc *ConformanceContainer) IsReady() (bool, error) {
- pod, err := cc.PodClient.Get(cc.podName, metav1.GetOptions{})
- if err != nil {
- return false, err
- }
- return podutil.IsPodReady(pod), nil
- }
- func (cc *ConformanceContainer) GetPhase() (v1.PodPhase, error) {
- pod, err := cc.PodClient.Get(cc.podName, metav1.GetOptions{})
- if err != nil {
- return v1.PodUnknown, err
- }
- return pod.Status.Phase, nil
- }
- func (cc *ConformanceContainer) GetStatus() (v1.ContainerStatus, error) {
- pod, err := cc.PodClient.Get(cc.podName, metav1.GetOptions{})
- if err != nil {
- return v1.ContainerStatus{}, err
- }
- statuses := pod.Status.ContainerStatuses
- if len(statuses) != 1 || statuses[0].Name != cc.Container.Name {
- return v1.ContainerStatus{}, fmt.Errorf("unexpected container statuses %v", statuses)
- }
- return statuses[0], nil
- }
- func (cc *ConformanceContainer) Present() (bool, error) {
- _, err := cc.PodClient.Get(cc.podName, metav1.GetOptions{})
- if err == nil {
- return true, nil
- }
- if errors.IsNotFound(err) {
- return false, nil
- }
- return false, err
- }
- type ContainerState string
- const (
- ContainerStateWaiting ContainerState = "Waiting"
- ContainerStateRunning ContainerState = "Running"
- ContainerStateTerminated ContainerState = "Terminated"
- ContainerStateUnknown ContainerState = "Unknown"
- )
- func GetContainerState(state v1.ContainerState) ContainerState {
- if state.Waiting != nil {
- return ContainerStateWaiting
- }
- if state.Running != nil {
- return ContainerStateRunning
- }
- if state.Terminated != nil {
- return ContainerStateTerminated
- }
- return ContainerStateUnknown
- }
|