Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckReadWriteToPath

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

func CheckVolumeModeOfPath

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

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.

TODO (?): the storage.csi.image.version and storage.csi.image.registry settings are ignored. We could patch the image definitions or deprecate those options.

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)

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

func StartExternalProvisioner

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

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 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)

TestVolumeUnmountsFromDeletedPod 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)

TestVolumeUnmountsFromFoceDeletedPod 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
const (
	NodeStateTimeout            = 1 * time.Minute
	KStart           KubeletOpt = "start"
	KStop            KubeletOpt = "stop"
	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 (
	// A simple directory as local volume
	LocalVolumeDirectory LocalVolumeType = "dir"
	// Like LocalVolumeDirectory but it's a symbolic link to directory
	LocalVolumeDirectoryLink LocalVolumeType = "dir-link"
	// Like LocalVolumeDirectory but bind mounted
	LocalVolumeDirectoryBindMounted LocalVolumeType = "dir-bindmounted"
	// 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"
	// Use temporary filesystem as local volume
	LocalVolumeTmpfs LocalVolumeType = "tmpfs"
	// Block device, creates a local file, and maps it as a block device
	LocalVolumeBlock LocalVolumeType = "block"
	// Filesystem backed by a block device
	LocalVolumeBlockFS LocalVolumeType = "blockfs"
	// Use GCE Local SSD as local volume, this is a filesystem
	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
	// The name of the container which has the cluster-driver-registrar
	// binary.
	ClusterRegistrarContainerName string
	// If non-empty, all pods are forced to run on this node.
	NodeName string
	// If not nil, the argument to pass to the cluster-driver-registrar's
	// pod-info-mount argument.
	PodInfo *bool
}

PatchCSIOptions controls how PatchCSIDeployment patches the objects.