tests: Refactors container image usage

Currently, the cri-integration tests do not work on Windows due to various reasons.
One of the reasons is because all the tests are using Linux-specific images. This
commit refactors the image pulling / usage in the cri-integration tests, making it
easier to update, and easier to configure the a custom registry to pull those images
from.

For Windows runs, custom registries can be created, which will also contain Windows
images, and the cri-integration tests can be configured to use those registries by
specifying the "--image-list" argument, a TOML file which will contain an alternative
mapping of the default images.

Signed-off-by: Claudiu Belu <cbelu@cloudbasesolutions.com>
This commit is contained in:
Claudiu Belu
2021-02-16 12:45:45 +00:00
parent b0fb8a5a04
commit 5847340a7d
17 changed files with 139 additions and 31 deletions

101
integration/common.go Normal file
View File

@@ -0,0 +1,101 @@
// +build linux
/*
Copyright The containerd 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"
"io/ioutil"
"github.com/pelletier/go-toml"
"github.com/sirupsen/logrus"
cri "k8s.io/cri-api/pkg/apis"
)
// ImageList holds public image references
type ImageList struct {
Alpine string
BusyBox string
Pause string
VolumeCopyUp string
VolumeOwnership string
}
var (
imageService cri.ImageManagerService
imageMap map[int]string
imageList ImageList
pauseImage string // This is the same with default sandbox image
)
func initImages(imageListFile string) {
imageList = ImageList{
Alpine: "docker.io/library/alpine:latest",
BusyBox: "docker.io/library/busybox:latest",
Pause: "k8s.gcr.io/pause:3.5",
VolumeCopyUp: "gcr.io/k8s-cri-containerd/volume-copy-up:2.0",
VolumeOwnership: "gcr.io/k8s-cri-containerd/volume-ownership:2.0",
}
if imageListFile != "" {
fileContent, err := ioutil.ReadFile(imageListFile)
if err != nil {
panic(fmt.Errorf("Error reading '%v' file contents: %v", imageList, err))
}
err = toml.Unmarshal(fileContent, &imageList)
if err != nil {
panic(fmt.Errorf("Error unmarshalling '%v' TOML file: %v", imageList, err))
}
}
logrus.Infof("Using the following image list: %+v", imageList)
imageMap = initImageMap(imageList)
pauseImage = GetImage(Pause)
}
const (
// None is to be used for unset/default images
None = iota
// Alpine image
Alpine
// BusyBox image
BusyBox
// Pause image
Pause
// VolumeCopyUp image
VolumeCopyUp
// VolumeOwnership image
VolumeOwnership
)
func initImageMap(imageList ImageList) map[int]string {
images := map[int]string{}
images[Alpine] = imageList.Alpine
images[BusyBox] = imageList.BusyBox
images[Pause] = imageList.Pause
images[VolumeCopyUp] = imageList.VolumeCopyUp
images[VolumeOwnership] = imageList.VolumeOwnership
return images
}
// GetImage returns the fully qualified URI to an image (including version)
func GetImage(image int) string {
return imageMap[image]
}