本文整理匯總了Golang中k8s/io/kubernetes/pkg/api.Container類的典型用法代碼示例。如果您正苦於以下問題:Golang Container類的具體用法?Golang Container怎麽用?Golang Container使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。
在下文中一共展示了Container類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: restoreSpecsFromContainerLabels
// restoreSpecsFromContainerLabels restores all information needed for killing a container. In some
// case we may not have pod and container spec when killing a container, e.g. pod is deleted during
// kubelet restart.
// To solve this problem, we've already written necessary information into container labels. Here we
// just need to retrieve them from container labels and restore the specs.
// TODO(random-liu): Add a node e2e test to test this behaviour.
// TODO(random-liu): Change the lifecycle handler to just accept information needed, so that we can
// just pass the needed function not create the fake object.
func (m *kubeGenericRuntimeManager) restoreSpecsFromContainerLabels(containerID kubecontainer.ContainerID) (*api.Pod, *api.Container, error) {
var pod *api.Pod
var container *api.Container
s, err := m.runtimeService.ContainerStatus(containerID.ID)
if err != nil {
return nil, nil, err
}
l := getContainerInfoFromLabels(s.Labels)
a := getContainerInfoFromAnnotations(s.Annotations)
// Notice that the followings are not full spec. The container killing code should not use
// un-restored fields.
pod = &api.Pod{
ObjectMeta: api.ObjectMeta{
UID: l.PodUID,
Name: l.PodName,
Namespace: l.PodNamespace,
DeletionGracePeriodSeconds: a.PodDeletionGracePeriod,
},
Spec: api.PodSpec{
TerminationGracePeriodSeconds: a.PodTerminationGracePeriod,
},
}
container = &api.Container{
Name: l.ContainerName,
Ports: a.ContainerPorts,
TerminationMessagePath: a.TerminationMessagePath,
}
if a.PreStopHandler != nil {
container.Lifecycle = &api.Lifecycle{
PreStop: a.PreStopHandler,
}
}
return pod, container, nil
}
示例2: fakeDeploymentConfig
func fakeDeploymentConfig(name string, containers ...containerDesc) *deployapi.DeploymentConfig {
specContainers := []kapi.Container{}
for _, c := range containers {
container := kapi.Container{
Name: c.name,
}
container.Ports = []kapi.ContainerPort{}
for _, p := range c.ports {
container.Ports = append(container.Ports, kapi.ContainerPort{
Name: fmt.Sprintf("port-%d-%s", p.port, p.protocol),
ContainerPort: p.port,
Protocol: kapi.Protocol(p.protocol),
})
}
specContainers = append(specContainers, container)
}
return &deployapi.DeploymentConfig{
ObjectMeta: kapi.ObjectMeta{
Name: name,
},
Spec: deployapi.DeploymentConfigSpec{
Replicas: 1,
Selector: map[string]string{"name": "test"},
Template: &kapi.PodTemplateSpec{
Spec: kapi.PodSpec{
Containers: specContainers,
},
},
},
}
}
示例3: admissionTestPod
func admissionTestPod() *kapi.Pod {
pod := &kapi.Pod{}
pod.Name = "test-pod"
container := kapi.Container{}
container.Name = "foo"
container.Image = "openshift/hello-openshift"
pod.Spec.Containers = []kapi.Container{container}
return pod
}
示例4: resolveContainerSecurityContext
// resolveContainerSecurityContext checks the provided container against the provider, returning any
// validation errors encountered on the resulting security context, or the security context that was
// resolved. The SecurityContext field of the container is updated, so ensure that a copy of the original
// container is passed here if you wish to preserve the original input.
func resolveContainerSecurityContext(provider scc.SecurityContextConstraintsProvider, pod *kapi.Pod, container *kapi.Container, path *field.Path) (*kapi.SecurityContext, field.ErrorList) {
// We will determine the effective security context for the container and validate against that
// since that is how the sc provider will eventually apply settings in the runtime.
// This results in an SC that is based on the Pod's PSC with the set fields from the container
// overriding pod level settings.
container.SecurityContext = sc.DetermineEffectiveSecurityContext(pod, container)
csc, err := provider.CreateContainerSecurityContext(pod, container)
if err != nil {
return nil, field.ErrorList{field.Invalid(path.Child("securityContext"), "", err.Error())}
}
container.SecurityContext = csc
return csc, provider.ValidateContainerSecurityContext(pod, container, path.Child("securityContext"))
}
示例5: ToAPIPod
// ToAPIPod converts Pod to api.Pod. Note that if a field in api.Pod has no
// corresponding field in Pod, the field would not be populated.
func (p *Pod) ToAPIPod() *api.Pod {
var pod api.Pod
pod.UID = p.ID
pod.Name = p.Name
pod.Namespace = p.Namespace
for _, c := range p.Containers {
var container api.Container
container.Name = c.Name
container.Image = c.Image
pod.Spec.Containers = append(pod.Spec.Containers, container)
}
return &pod
}
示例6: Containers
func Containers(userContainers []interface{}) []api.Container {
if len(userContainers) == 0 {
return nil
}
var containers []api.Container
for _, c := range userContainers {
userContainer := c.(map[string]interface{})
container := api.Container{
Image: userContainer["image"].(string),
Name: userContainer["name"].(string),
}
if _, ok := userContainer["args"]; ok {
container.Args = convertListToStringArray(userContainer["args"].([]interface{}))
}
if _, ok := userContainer["command"]; ok {
container.Command = convertListToStringArray(userContainer["command"].([]interface{}))
}
if _, ok := userContainer["working_dir"]; ok {
container.WorkingDir = userContainer["working_dir"].(string)
}
if _, ok := userContainer["ports"]; ok {
container.Ports = ContainerPorts(userContainer["ports"].([]interface{}))
}
if _, ok := userContainer["env"]; ok {
container.Env = EnvVar(userContainer["env"].([]interface{}))
}
if _, ok := userContainer["volume_mounts"]; ok {
container.VolumeMounts = VolumeMounts(userContainer["volume_mounts"].([]interface{}))
}
if _, ok := userContainer["termination_message_path"]; ok {
container.TerminationMessagePath = userContainer["termination_message_path"].(string)
}
if _, ok := userContainer["image_pull_policy"]; ok {
container.ImagePullPolicy = api.PullPolicy(userContainer["image_pull_policy"].(string))
}
// TODO: populate these fields:
// resources
// liveness_probe
// readiness_probe
// lifecycle
// security_context
containers = append(containers, container)
}
return containers
}
示例7: NewContainer
// NewContainer creates a new Entity for the provided kube.Container. Container must be valid.
func NewContainer(container kube.Container, defaults kube.ObjectMeta, source string, objects ...deploy.KubeObject) (*Container, error) {
err := validateContainer(container)
if err != nil {
return nil, fmt.Errorf("could not create Container from `%s`: %v", source, err)
}
base, err := newBase(EntityContainer, defaults, source, objects)
if err != nil {
return nil, err
}
newContainer := Container{base: base}
if len(container.Image) != 0 {
image, err := image.FromString(container.Image)
if err != nil {
return nil, err
}
newContainer.image, err = NewImage(image, defaults, source)
if err != nil {
return nil, err
}
container.Image = "placeholder"
}
newContainer.container = container
return &newContainer, nil
}
示例8: getTestPod
func getTestPod(probeType probeType, probeSpec api.Probe) api.Pod {
container := api.Container{
Name: containerName,
}
switch probeType {
case readiness:
container.ReadinessProbe = &probeSpec
case liveness:
container.LivenessProbe = &probeSpec
}
pod := api.Pod{
Spec: api.PodSpec{
Containers: []api.Container{container},
RestartPolicy: api.RestartPolicyNever,
},
}
pod.UID = podUID
return pod
}
示例9: getTestPod
func getTestPod(probeType probeType, probeSpec api.Probe) api.Pod {
container := api.Container{
Name: testContainerName,
}
// All tests rely on the fake exec prober.
probeSpec.Handler = api.Handler{
Exec: &api.ExecAction{},
}
// Apply test defaults, overwridden for test speed.
defaults := map[string]int64{
"TimeoutSeconds": 1,
"PeriodSeconds": 1,
"SuccessThreshold": 1,
"FailureThreshold": 1,
}
for field, value := range defaults {
f := reflect.ValueOf(&probeSpec).Elem().FieldByName(field)
if f.Int() == 0 {
f.SetInt(value)
}
}
switch probeType {
case readiness:
container.ReadinessProbe = &probeSpec
case liveness:
container.LivenessProbe = &probeSpec
}
pod := api.Pod{
Spec: api.PodSpec{
Containers: []api.Container{container},
RestartPolicy: api.RestartPolicyNever,
},
}
pod.Name = "testPod"
pod.UID = testPodUID
return pod
}
示例10: buildContainers
func buildContainers(userContainers []interface{}) []api.Container {
if len(userContainers) == 0 {
return nil
}
var containers []api.Container
for _, c := range userContainers {
userContainer := c.(map[string]interface{})
container := api.Container{
Image: userContainer["image"].(string),
Name: userContainer["name"].(string),
}
if _, ok := userContainer["args"]; ok {
container.Args = convertListToStringArray(userContainer["args"].([]interface{}))
}
if _, ok := userContainer["command"]; ok {
container.Command = convertListToStringArray(userContainer["command"].([]interface{}))
}
if _, ok := userContainer["working_dir"]; ok {
container.WorkingDir = userContainer["working_dir"].(string)
}
if _, ok := userContainer["ports"]; ok {
container.Ports = buildContainerPorts(userContainer["ports"].([]interface{}))
}
if _, ok := userContainer["env"]; ok {
container.Env = buildEnvVar(userContainer["env"].([]interface{}))
}
containers = append(containers, container)
}
return containers
}
開發者ID:kelcecil,項目名稱:terraform-provider-kubernetes,代碼行數:34,代碼來源:build_kubernetes_resource_controller.go
示例11: EnsureContainerHasEnvVar
// EnsureContainerHasEnvVar if there is an existing EnvVar for the given name then lets update it
// with the given value otherwise lets add a new entry.
// Returns true if there was already an existing environment variable
func EnsureContainerHasEnvVar(container *api.Container, name string, value string) bool {
for _, env := range container.Env {
if env.Name == name {
env.Value = value
return true
}
}
container.Env = append(container.Env, api.EnvVar{
Name: name,
Value: value,
})
return false
}
示例12: EnsureContainerHasPreStopCommand
// EnsureContainerHasPreStopCommand ensures that the given container has a `preStop` lifecycle hook
// to invoke the given commands
func EnsureContainerHasPreStopCommand(container *api.Container, commands []string) {
if container.Lifecycle == nil {
container.Lifecycle = &api.Lifecycle{}
}
lifecycle := container.Lifecycle
if lifecycle.PreStop == nil {
lifecycle.PreStop = &api.Handler{}
}
preStop := lifecycle.PreStop
preStop.Exec = &api.ExecAction{
Command: commands,
}
}
示例13: EnsureContainerHasVolumeMount
// EnsureContainerHasVolumeMount ensures that there is a volume mount of the given name with the given values
// Returns true if there was already a volume mount
func EnsureContainerHasVolumeMount(container *api.Container, name string, mountPath string) bool {
for _, vm := range container.VolumeMounts {
if vm.Name == name {
vm.MountPath = mountPath
return true
}
}
container.VolumeMounts = append(container.VolumeMounts, api.VolumeMount{
Name: name,
MountPath: mountPath,
})
return false
}
示例14: updateContainer
func (o *ProbeOptions) updateContainer(container *kapi.Container) {
if o.Remove {
if o.Readiness {
container.ReadinessProbe = nil
}
if o.Liveness {
container.LivenessProbe = nil
}
return
}
if o.Readiness {
if container.ReadinessProbe == nil {
container.ReadinessProbe = &kapi.Probe{}
}
o.updateProbe(container.ReadinessProbe)
}
if o.Liveness {
if container.LivenessProbe == nil {
container.LivenessProbe = &kapi.Probe{}
}
o.updateProbe(container.LivenessProbe)
}
}
示例15: EnsureContainerHasEnvVarFromField
// EnsureContainerHasEnvVarFromField if there is an existing EnvVar for the given name then lets update it
// with the given fieldPath otherwise lets add a new entry.
// Returns true if there was already an existing environment variable
func EnsureContainerHasEnvVarFromField(container *api.Container, name string, fieldPath string) bool {
from := &api.EnvVarSource{
FieldRef: &api.ObjectFieldSelector{
FieldPath: fieldPath,
},
}
for _, env := range container.Env {
if env.Name == name {
env.ValueFrom = from
env.Value = ""
return true
}
}
container.Env = append(container.Env, api.EnvVar{
Name: name,
ValueFrom: from,
})
return false
}