utils

package
v1.16.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 23, 2019 License: Apache-2.0 Imports: 26 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckReadFromPath

func CheckReadFromPath(pod *v1.Pod, volMode v1.PersistentVolumeMode, path string, len int, seed int64)

CheckReadFromPath validate that file can be properly read.

func CheckReadWriteToPath

func CheckReadWriteToPath(pod *v1.Pod, volMode v1.PersistentVolumeMode, path string)

CheckReadWriteToPath check that path can b e read and written

func CheckVolumeModeOfPath

func CheckVolumeModeOfPath(pod *v1.Pod, volMode v1.PersistentVolumeMode, path string)

CheckVolumeModeOfPath check mode of volume

func CheckWriteToPath

func CheckWriteToPath(pod *v1.Pod, volMode v1.PersistentVolumeMode, path string, len int, seed int64)

CheckWriteToPath that file can be properly written.

func KubeletCommand

func KubeletCommand(kOp KubeletOpt, c clientset.Interface, pod *v1.Pod)

KubeletCommand performs `start`, `restart`, or `stop` on the kubelet running on the node of the target pod and waits for the desired statues.. - First issues the command via `systemctl` - If `systemctl` returns stderr "command not found, issues the command via `service` - If `service` also returns stderr "command not found", the test is aborted. Allowed kubeletOps are `KStart`, `KStop`, and `KRestart`

func PatchCSIDeployment

func PatchCSIDeployment(f *framework.Framework, o PatchCSIOptions, object interface{}) error

PatchCSIDeployment modifies the CSI driver deployment: - replaces the provisioner name - forces pods onto a specific host

All of that is optional, see PatchCSIOptions. Just beware that not renaming the CSI driver deployment can be problematic:

  • when multiple tests deploy the driver, they need to run sequentially
  • might conflict with manual deployments

This function is written so that it works for CSI driver deployments that follow these conventions:

  • driver and provisioner names are identical
  • the driver binary accepts a --drivername parameter
  • the provisioner binary accepts a --provisioner parameter
  • the paths inside the container are either fixed and don't need to be patch (for example, --csi-address=/csi/csi.sock is okay) or are specified directly in a parameter (for example, --kubelet-registration-path=/var/lib/kubelet/plugins/csi-hostpath/csi.sock)

Driver deployments that are different will have to do the patching without this function, or skip patching entirely.

func PodExec

func PodExec(pod *v1.Pod, bashExec string) (string, error)

PodExec wraps RunKubectl to execute a bash cmd in target pod

func PrivilegedTestPSPClusterRoleBinding

func PrivilegedTestPSPClusterRoleBinding(client clientset.Interface,
	namespace string,
	teardown bool,
	saNames []string)

PrivilegedTestPSPClusterRoleBinding test Pod Security Policy Role bindings

func RunInPodWithVolume

func RunInPodWithVolume(c clientset.Interface, ns, claimName, command string)

RunInPodWithVolume runs a command in a pod with given claim mounted to /mnt directory.

func SIGDescribe

func SIGDescribe(text string, body func()) bool

SIGDescribe annotates the test with the SIG label.

func StartExternalProvisioner

func StartExternalProvisioner(c clientset.Interface, ns string, externalPluginName string) *v1.Pod

StartExternalProvisioner create external provisioner pod

func TestKubeletRestartsAndRestoresMap

func TestKubeletRestartsAndRestoresMap(c clientset.Interface, f *framework.Framework, clientPod *v1.Pod)

TestKubeletRestartsAndRestoresMap tests that a volume mapped to a pod remains mapped after a kubelet restarts

func TestKubeletRestartsAndRestoresMount

func TestKubeletRestartsAndRestoresMount(c clientset.Interface, f *framework.Framework, clientPod *v1.Pod)

TestKubeletRestartsAndRestoresMount tests that a volume mounted to a pod remains mounted after a kubelet restarts

func TestVolumeUnmapsFromDeletedPod

func TestVolumeUnmapsFromDeletedPod(c clientset.Interface, f *framework.Framework, clientPod *v1.Pod)

TestVolumeUnmapsFromDeletedPod tests that a volume unmaps if the client pod was deleted while the kubelet was down.

func TestVolumeUnmapsFromDeletedPodWithForceOption

func TestVolumeUnmapsFromDeletedPodWithForceOption(c clientset.Interface, f *framework.Framework, clientPod *v1.Pod, forceDelete bool)

TestVolumeUnmapsFromDeletedPodWithForceOption tests that a volume unmaps if the client pod was deleted while the kubelet was down. forceDelete is true indicating whether the pod is forcefully deleted.

func TestVolumeUnmapsFromForceDeletedPod

func TestVolumeUnmapsFromForceDeletedPod(c clientset.Interface, f *framework.Framework, clientPod *v1.Pod)

TestVolumeUnmapsFromForceDeletedPod tests that a volume unmaps if the client pod was forcefully deleted while the kubelet was down.

func TestVolumeUnmountsFromDeletedPod

func TestVolumeUnmountsFromDeletedPod(c clientset.Interface, f *framework.Framework, clientPod *v1.Pod)

TestVolumeUnmountsFromDeletedPod tests that a volume unmounts if the client pod was deleted while the kubelet was down.

func TestVolumeUnmountsFromDeletedPodWithForceOption

func TestVolumeUnmountsFromDeletedPodWithForceOption(c clientset.Interface, f *framework.Framework, clientPod *v1.Pod, forceDelete bool, checkSubpath bool)

TestVolumeUnmountsFromDeletedPodWithForceOption tests that a volume unmounts if the client pod was deleted while the kubelet was down. forceDelete is true indicating whether the pod is forcefully deleted.

func TestVolumeUnmountsFromForceDeletedPod

func TestVolumeUnmountsFromForceDeletedPod(c clientset.Interface, f *framework.Framework, clientPod *v1.Pod)

TestVolumeUnmountsFromForceDeletedPod tests that a volume unmounts if the client pod was forcefully deleted while the kubelet was down.

func VerifyExecInPodFail

func VerifyExecInPodFail(pod *v1.Pod, bashExec string, exitCode int)

VerifyExecInPodFail verifies bash cmd in target pod fail with certain exit code

func VerifyExecInPodSucceed

func VerifyExecInPodSucceed(pod *v1.Pod, bashExec string)

VerifyExecInPodSucceed verifies bash cmd in target pod succeed

Types

type HostExec

type HostExec interface {
	IssueCommandWithResult(cmd string, node *v1.Node) (string, error)
	IssueCommand(cmd string, node *v1.Node) error
	Cleanup()
}

HostExec represents interface we require to execute commands on remote host.

func NewHostExec

func NewHostExec(framework *framework.Framework) HostExec

NewHostExec returns a HostExec

type KubeletOpt

type KubeletOpt string

KubeletOpt type definition

const (
	// NodeStateTimeout defines Timeout
	NodeStateTimeout = 1 * time.Minute
	// KStart defines start value
	KStart KubeletOpt = "start"
	// KStop defines stop value
	KStop KubeletOpt = "stop"
	// KRestart defines restart value
	KRestart KubeletOpt = "restart"
)

type LocalTestResource

type LocalTestResource struct {
	VolumeType LocalVolumeType
	Node       *v1.Node
	// Volume path, path to filesystem or block device on the node
	Path string
	// contains filtered or unexported fields
}

LocalTestResource represents test resource of a local volume.

type LocalTestResourceManager

type LocalTestResourceManager interface {
	Create(node *v1.Node, volumeType LocalVolumeType, parameters map[string]string) *LocalTestResource
	Remove(ltr *LocalTestResource)
}

LocalTestResourceManager represents interface to create/destroy local test resources on node

func NewLocalResourceManager

func NewLocalResourceManager(prefix string, hostExec HostExec, hostBase string) LocalTestResourceManager

NewLocalResourceManager returns a instance of LocalTestResourceManager

type LocalVolumeType

type LocalVolumeType string

LocalVolumeType represents type of local volume, e.g. tmpfs, directory, block, etc.

const (
	// LocalVolumeDirectory reprensents a simple directory as local volume
	LocalVolumeDirectory LocalVolumeType = "dir"
	// LocalVolumeDirectoryLink is like LocalVolumeDirectory but it's a symbolic link to directory
	LocalVolumeDirectoryLink LocalVolumeType = "dir-link"
	// LocalVolumeDirectoryBindMounted is like LocalVolumeDirectory but bind mounted
	LocalVolumeDirectoryBindMounted LocalVolumeType = "dir-bindmounted"
	// LocalVolumeDirectoryLinkBindMounted is like LocalVolumeDirectory but it's a symbolic link to self bind mounted directory
	// Note that bind mounting at symbolic link actually mounts at directory it
	// links to
	LocalVolumeDirectoryLinkBindMounted LocalVolumeType = "dir-link-bindmounted"
	// LocalVolumeTmpfs represents a temporary filesystem to be used as local volume
	LocalVolumeTmpfs LocalVolumeType = "tmpfs"
	// LocalVolumeBlock represents a Block device, creates a local file, and maps it as a block device
	LocalVolumeBlock LocalVolumeType = "block"
	// LocalVolumeBlockFS represents a filesystem backed by a block device
	LocalVolumeBlockFS LocalVolumeType = "blockfs"
	// LocalVolumeGCELocalSSD represents a Filesystem backed by GCE Local SSD as local volume
	LocalVolumeGCELocalSSD LocalVolumeType = "gce-localssd-scsi-fs"
)

type PatchCSIOptions

type PatchCSIOptions struct {
	// The original driver name.
	OldDriverName string
	// The driver name that replaces the original name.
	// Can be empty (not used at all) or equal to OldDriverName
	// (then it will be added were appropriate without renaming
	// in existing fields).
	NewDriverName string
	// The name of the container which has the CSI driver binary.
	// If non-empty, DriverContainerArguments are added to argument
	// list in container with that name.
	DriverContainerName string
	// List of arguments to add to container with
	// DriverContainerName.
	DriverContainerArguments []string
	// The name of the container which has the provisioner binary.
	// If non-empty, --provisioner with new name will be appended
	// to the argument list.
	ProvisionerContainerName string
	// The name of the container which has the snapshotter binary.
	// If non-empty, --snapshotter with new name will be appended
	// to the argument list.
	SnapshotterContainerName string
	// If non-empty, all pods are forced to run on this node.
	NodeName string
	// If not nil, the value to use for the CSIDriver.Spec.PodInfo
	// field *if* the driver deploys a CSIDriver object. Ignored
	// otherwise.
	PodInfo *bool
	// If not nil, the value to use for the CSIDriver.Spec.CanAttach
	// field *if* the driver deploys a CSIDriver object. Ignored
	// otherwise.
	CanAttach *bool
	// If not nil, the value to use for the CSIDriver.Spec.VolumeLifecycleModes
	// field *if* the driver deploys a CSIDriver object. Ignored
	// otherwise.
	VolumeLifecycleModes *[]storagev1beta1.VolumeLifecycleMode
}

PatchCSIOptions controls how PatchCSIDeployment patches the objects.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL