func generatePod(genericParams map[string]interface{}, containers []api.Container) (runtime.Object, error) { params := map[string]string{} for key, value := range genericParams { strVal, isString := value.(string) if !isString { return nil, fmt.Errorf("expected string, saw %v for '%s'", value, key) } params[key] = strVal } labelString, found := params["labels"] var labels map[string]string var err error if found && len(labelString) > 0 { labels, err = kubectl.ParseLabels(labelString) if err != nil { return nil, err } } restartPolicy := api.RestartPolicy(params["restart"]) pod := api.Pod{ ObjectMeta: api.ObjectMeta{ Name: params["name"], Labels: labels, }, Spec: api.PodSpec{ Containers: containers, DNSPolicy: api.DNSClusterFirst, RestartPolicy: restartPolicy, }, } return &pod, nil }
func (BasicPod) Generate(params map[string]string) (runtime.Object, error) { name, found := params["name"] if !found || len(name) == 0 { name, found = params["default-name"] if !found || len(name) == 0 { return nil, fmt.Errorf("'name' is a required parameter.") } } // TODO: extract this flag to a central location. labelString, found := params["labels"] var labels map[string]string var err error if found && len(labelString) > 0 { labels, err = ParseLabels(labelString) if err != nil { return nil, err } } stdin, err := GetBool(params, "stdin", false) if err != nil { return nil, err } tty, err := GetBool(params, "tty", false) if err != nil { return nil, err } restartPolicy := api.RestartPolicy(params["restart"]) if len(restartPolicy) == 0 { restartPolicy = api.RestartPolicyAlways } pod := api.Pod{ ObjectMeta: api.ObjectMeta{ Name: name, Labels: labels, }, Spec: api.PodSpec{ Containers: []api.Container{ { Name: name, Image: params["image"], ImagePullPolicy: api.PullIfNotPresent, Stdin: stdin, TTY: tty, }, }, DNSPolicy: api.DNSClusterFirst, RestartPolicy: restartPolicy, }, } if err := updatePodPorts(params, &pod.Spec); err != nil { return nil, err } return &pod, nil }
func buildPodSpec(podSpecs []interface{}) api.PodSpec { if len(podSpecs) == 0 { return api.PodSpec{} } userPodSpec := podSpecs[0].(map[string]interface{}) podSpec := api.PodSpec{ Containers: buildContainers(userPodSpec["containers"].([]interface{})), ActiveDeadlineSeconds: nil, TerminationGracePeriodSeconds: nil, } if _, ok := userPodSpec["node_selector"]; ok { podSpec.NodeSelector = convertMapTypeToStringMap(userPodSpec["node_selector"].(map[string]interface{})) } if _, ok := userPodSpec["node_name"]; ok { podSpec.NodeName = userPodSpec["node_name"].(string) } if _, ok := userPodSpec["service_account_name"]; ok { podSpec.ServiceAccountName = userPodSpec["service_account_name"].(string) } if _, ok := userPodSpec["host_network"]; ok { podSpec.HostNetwork = userPodSpec["host_network"].(bool) } if _, ok := userPodSpec["termination_grace_period"]; ok { helper := int64(userPodSpec["termination_grace_period"].(int)) podSpec.TerminationGracePeriodSeconds = &helper if helper > 0 { podSpec.TerminationGracePeriodSeconds = &helper } else { podSpec.TerminationGracePeriodSeconds = nil } } else { podSpec.TerminationGracePeriodSeconds = nil } if _, ok := userPodSpec["active_deadline_seconds"]; ok { helper := int64(userPodSpec["active_deadline_seconds"].(int)) if helper > 0 { podSpec.ActiveDeadlineSeconds = &helper } else { podSpec.ActiveDeadlineSeconds = nil } } else { podSpec.ActiveDeadlineSeconds = nil } if _, ok := userPodSpec["restart_policy"]; ok { podSpec.RestartPolicy = api.RestartPolicy(userPodSpec["restart_policy"].(string)) } return podSpec }
func getRestartPolicy(cmd *cobra.Command, interactive bool) (api.RestartPolicy, error) { restart := cmdutil.GetFlagString(cmd, "restart") if len(restart) == 0 { if interactive { return api.RestartPolicyOnFailure, nil } else { return api.RestartPolicyAlways, nil } } switch api.RestartPolicy(restart) { case api.RestartPolicyAlways: return api.RestartPolicyAlways, nil case api.RestartPolicyOnFailure: return api.RestartPolicyOnFailure, nil case api.RestartPolicyNever: return api.RestartPolicyNever, nil default: return "", cmdutil.UsageError(cmd, fmt.Sprintf("invalid restart policy: %s", restart)) } }
func Convert_v1_PodSpec_To_api_PodSpec(in *v1.PodSpec, out *api.PodSpec, s conversion.Scope) error { if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { defaulting.(func(*v1.PodSpec))(in) } if in.Volumes != nil { out.Volumes = make([]api.Volume, len(in.Volumes)) for i := range in.Volumes { if err := Convert_v1_Volume_To_api_Volume(&in.Volumes[i], &out.Volumes[i], s); err != nil { return err } } } else { out.Volumes = nil } if in.Containers != nil { out.Containers = make([]api.Container, len(in.Containers)) for i := range in.Containers { if err := Convert_v1_Container_To_api_Container(&in.Containers[i], &out.Containers[i], s); err != nil { return err } } } else { out.Containers = nil } out.RestartPolicy = api.RestartPolicy(in.RestartPolicy) if in.TerminationGracePeriodSeconds != nil { out.TerminationGracePeriodSeconds = new(int64) *out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds } else { out.TerminationGracePeriodSeconds = nil } if in.ActiveDeadlineSeconds != nil { out.ActiveDeadlineSeconds = new(int64) *out.ActiveDeadlineSeconds = *in.ActiveDeadlineSeconds } else { out.ActiveDeadlineSeconds = nil } out.DNSPolicy = api.DNSPolicy(in.DNSPolicy) if in.NodeSelector != nil { out.NodeSelector = make(map[string]string) for key, val := range in.NodeSelector { out.NodeSelector[key] = val } } else { out.NodeSelector = nil } // We support DeprecatedServiceAccount as an alias for ServiceAccountName. // If both are specified, ServiceAccountName (the new field) wins. out.ServiceAccountName = in.ServiceAccountName if in.ServiceAccountName == "" { out.ServiceAccountName = in.DeprecatedServiceAccount } out.NodeName = in.NodeName if in.SecurityContext != nil { out.SecurityContext = new(api.PodSecurityContext) if err := Convert_v1_PodSecurityContext_To_api_PodSecurityContext(in.SecurityContext, out.SecurityContext, s); err != nil { return err } } if out.SecurityContext == nil { out.SecurityContext = new(api.PodSecurityContext) } out.SecurityContext.HostNetwork = in.HostNetwork out.SecurityContext.HostPID = in.HostPID out.SecurityContext.HostIPC = in.HostIPC if in.ImagePullSecrets != nil { out.ImagePullSecrets = make([]api.LocalObjectReference, len(in.ImagePullSecrets)) for i := range in.ImagePullSecrets { if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.ImagePullSecrets[i], &out.ImagePullSecrets[i], s); err != nil { return err } } } else { out.ImagePullSecrets = nil } return nil }
func Convert_v1_PodSpec_To_api_PodSpec(in *PodSpec, out *api.PodSpec, s conversion.Scope) error { SetDefaults_PodSpec(in) if in.Volumes != nil { out.Volumes = make([]api.Volume, len(in.Volumes)) for i := range in.Volumes { if err := Convert_v1_Volume_To_api_Volume(&in.Volumes[i], &out.Volumes[i], s); err != nil { return err } } } else { out.Volumes = nil } if in.InitContainers != nil { out.InitContainers = make([]api.Container, len(in.InitContainers)) for i := range in.InitContainers { if err := Convert_v1_Container_To_api_Container(&in.InitContainers[i], &out.InitContainers[i], s); err != nil { return err } } } else { out.InitContainers = nil } if in.Containers != nil { out.Containers = make([]api.Container, len(in.Containers)) for i := range in.Containers { if err := Convert_v1_Container_To_api_Container(&in.Containers[i], &out.Containers[i], s); err != nil { return err } } } else { out.Containers = nil } out.RestartPolicy = api.RestartPolicy(in.RestartPolicy) out.TerminationGracePeriodSeconds = in.TerminationGracePeriodSeconds out.ActiveDeadlineSeconds = in.ActiveDeadlineSeconds out.DNSPolicy = api.DNSPolicy(in.DNSPolicy) out.NodeSelector = in.NodeSelector // We support DeprecatedServiceAccount as an alias for ServiceAccountName. // If both are specified, ServiceAccountName (the new field) wins. out.ServiceAccountName = in.ServiceAccountName if in.ServiceAccountName == "" { out.ServiceAccountName = in.DeprecatedServiceAccount } out.NodeName = in.NodeName if in.SecurityContext != nil { out.SecurityContext = new(api.PodSecurityContext) if err := Convert_v1_PodSecurityContext_To_api_PodSecurityContext(in.SecurityContext, out.SecurityContext, s); err != nil { return err } } // the host namespace fields have to be handled specially for backward compatibility // with v1.0.0 if out.SecurityContext == nil { out.SecurityContext = new(api.PodSecurityContext) } out.SecurityContext.HostNetwork = in.HostNetwork out.SecurityContext.HostPID = in.HostPID out.SecurityContext.HostIPC = in.HostIPC if in.ImagePullSecrets != nil { out.ImagePullSecrets = make([]api.LocalObjectReference, len(in.ImagePullSecrets)) for i := range in.ImagePullSecrets { if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.ImagePullSecrets[i], &out.ImagePullSecrets[i], s); err != nil { return err } } } else { out.ImagePullSecrets = nil } out.Hostname = in.Hostname out.Subdomain = in.Subdomain return nil }
func convert_v1beta3_PodSpec_To_api_PodSpec(in *PodSpec, out *api.PodSpec, s conversion.Scope) error { if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { defaulting.(func(*PodSpec))(in) } if in.Volumes != nil { out.Volumes = make([]api.Volume, len(in.Volumes)) for i := range in.Volumes { if err := convert_v1beta3_Volume_To_api_Volume(&in.Volumes[i], &out.Volumes[i], s); err != nil { return err } } } else { out.Volumes = nil } if in.Containers != nil { out.Containers = make([]api.Container, len(in.Containers)) for i := range in.Containers { if err := convert_v1beta3_Container_To_api_Container(&in.Containers[i], &out.Containers[i], s); err != nil { return err } } } else { out.Containers = nil } out.RestartPolicy = api.RestartPolicy(in.RestartPolicy) if in.TerminationGracePeriodSeconds != nil { out.TerminationGracePeriodSeconds = new(int64) *out.TerminationGracePeriodSeconds = *in.TerminationGracePeriodSeconds } else { out.TerminationGracePeriodSeconds = nil } if in.ActiveDeadlineSeconds != nil { out.ActiveDeadlineSeconds = new(int64) *out.ActiveDeadlineSeconds = *in.ActiveDeadlineSeconds } else { out.ActiveDeadlineSeconds = nil } out.DNSPolicy = api.DNSPolicy(in.DNSPolicy) if in.NodeSelector != nil { out.NodeSelector = make(map[string]string) for key, val := range in.NodeSelector { out.NodeSelector[key] = val } } else { out.NodeSelector = nil } out.ServiceAccountName = in.ServiceAccount out.NodeName = in.Host out.HostNetwork = in.HostNetwork if in.ImagePullSecrets != nil { out.ImagePullSecrets = make([]api.LocalObjectReference, len(in.ImagePullSecrets)) for i := range in.ImagePullSecrets { if err := convert_v1beta3_LocalObjectReference_To_api_LocalObjectReference(&in.ImagePullSecrets[i], &out.ImagePullSecrets[i], s); err != nil { return err } } } else { out.ImagePullSecrets = nil } return nil }
func (BasicPod) Generate(genericParams map[string]interface{}) (runtime.Object, error) { args := []string{} val, found := genericParams["args"] if found { var isArray bool args, isArray = val.([]string) if !isArray { return nil, fmt.Errorf("expected []string, found: %v", val) } delete(genericParams, "args") } params := map[string]string{} for key, value := range genericParams { strVal, isString := value.(string) if !isString { return nil, fmt.Errorf("expected string, saw %v for '%s'", value, key) } params[key] = strVal } name, found := params["name"] if !found || len(name) == 0 { name, found = params["default-name"] if !found || len(name) == 0 { return nil, fmt.Errorf("'name' is a required parameter.") } } // TODO: extract this flag to a central location. labelString, found := params["labels"] var labels map[string]string var err error if found && len(labelString) > 0 { labels, err = ParseLabels(labelString) if err != nil { return nil, err } } stdin, err := GetBool(params, "stdin", false) if err != nil { return nil, err } tty, err := GetBool(params, "tty", false) if err != nil { return nil, err } restartPolicy := api.RestartPolicy(params["restart"]) if len(restartPolicy) == 0 { restartPolicy = api.RestartPolicyAlways } pod := api.Pod{ ObjectMeta: api.ObjectMeta{ Name: name, Labels: labels, }, Spec: api.PodSpec{ Containers: []api.Container{ { Name: name, Image: params["image"], ImagePullPolicy: api.PullIfNotPresent, Stdin: stdin, TTY: tty, }, }, DNSPolicy: api.DNSClusterFirst, RestartPolicy: restartPolicy, }, } if len(args) > 0 { command, err := GetBool(params, "command", false) if err != nil { return nil, err } if command { pod.Spec.Containers[0].Command = args } else { pod.Spec.Containers[0].Args = args } } if err := updatePodPorts(params, &pod.Spec); err != nil { return nil, err } return &pod, nil }
func (BasicPod) Generate(genericParams map[string]interface{}) (runtime.Object, error) { args, err := getArgs(genericParams) if err != nil { return nil, err } envs, err := getEnvs(genericParams) if err != nil { return nil, err } params, err := getParams(genericParams) if err != nil { return nil, err } name, err := getName(params) if err != nil { return nil, err } labels, err := getLabels(params, false, name) if err != nil { return nil, err } stdin, err := GetBool(params, "stdin", false) if err != nil { return nil, err } leaveStdinOpen, err := GetBool(params, "leave-stdin-open", false) if err != nil { return nil, err } tty, err := GetBool(params, "tty", false) if err != nil { return nil, err } resourceRequirements, err := HandleResourceRequirements(params) if err != nil { return nil, err } restartPolicy := api.RestartPolicy(params["restart"]) if len(restartPolicy) == 0 { restartPolicy = api.RestartPolicyAlways } pod := api.Pod{ ObjectMeta: api.ObjectMeta{ Name: name, Labels: labels, }, Spec: api.PodSpec{ Containers: []api.Container{ { Name: name, Image: params["image"], ImagePullPolicy: api.PullIfNotPresent, Stdin: stdin, StdinOnce: !leaveStdinOpen && stdin, TTY: tty, Resources: resourceRequirements, }, }, DNSPolicy: api.DNSClusterFirst, RestartPolicy: restartPolicy, }, } if err = updatePodContainers(params, args, envs, &pod.Spec); err != nil { return nil, err } if err := updatePodPorts(params, &pod.Spec); err != nil { return nil, err } return &pod, nil }
func (JobV1Beta1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { args, err := getArgs(genericParams) if err != nil { return nil, err } envs, err := getEnvs(genericParams) if err != nil { return nil, err } params, err := getParams(genericParams) if err != nil { return nil, err } name, err := getName(params) if err != nil { return nil, err } labels, err := getLabels(params, true, name) if err != nil { return nil, err } podSpec, err := makePodSpec(params, name) if err != nil { return nil, err } if err = updatePodContainers(params, args, envs, podSpec); err != nil { return nil, err } leaveStdinOpen, err := GetBool(params, "leave-stdin-open", false) if err != nil { return nil, err } podSpec.Containers[0].StdinOnce = !leaveStdinOpen && podSpec.Containers[0].Stdin if err := updatePodPorts(params, podSpec); err != nil { return nil, err } restartPolicy := api.RestartPolicy(params["restart"]) if len(restartPolicy) == 0 { restartPolicy = api.RestartPolicyNever } podSpec.RestartPolicy = restartPolicy job := batch.Job{ ObjectMeta: api.ObjectMeta{ Name: name, Labels: labels, }, Spec: batch.JobSpec{ Selector: &unversioned.LabelSelector{ MatchLabels: labels, }, ManualSelector: newBool(true), Template: api.PodTemplateSpec{ ObjectMeta: api.ObjectMeta{ Labels: labels, }, Spec: *podSpec, }, }, } return &job, nil }
func (CronJobV2Alpha1) Generate(genericParams map[string]interface{}) (runtime.Object, error) { args, err := getArgs(genericParams) if err != nil { return nil, err } envs, err := getEnvs(genericParams) if err != nil { return nil, err } params, err := getParams(genericParams) if err != nil { return nil, err } name, err := getName(params) if err != nil { return nil, err } labels, err := getLabels(params, true, name) if err != nil { return nil, err } podSpec, err := makePodSpec(params, name) if err != nil { return nil, err } imagePullPolicy := api.PullPolicy(params["image-pull-policy"]) if err = updatePodContainers(params, args, envs, imagePullPolicy, podSpec); err != nil { return nil, err } leaveStdinOpen, err := GetBool(params, "leave-stdin-open", false) if err != nil { return nil, err } podSpec.Containers[0].StdinOnce = !leaveStdinOpen && podSpec.Containers[0].Stdin if err := updatePodPorts(params, podSpec); err != nil { return nil, err } restartPolicy := api.RestartPolicy(params["restart"]) if len(restartPolicy) == 0 { restartPolicy = api.RestartPolicyNever } podSpec.RestartPolicy = restartPolicy cronJob := batch.CronJob{ ObjectMeta: metav1.ObjectMeta{ Name: name, Labels: labels, }, Spec: batch.CronJobSpec{ Schedule: params["schedule"], ConcurrencyPolicy: batch.AllowConcurrent, JobTemplate: batch.JobTemplateSpec{ Spec: batch.JobSpec{ Template: api.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ Labels: labels, }, Spec: *podSpec, }, }, }, }, } return &cronJob, nil }
func writePodTemplateSpec(r *schema.ResourceData, item *api.PodTemplateSpec) error { var template map[string]interface{} if x, ok := extractSingleMap(r.Get("template")); ok { template = x } if template == nil { return fmt.Errorf("missing template") } if x, ok := extractSingleMap(template["labels"]); ok && x != nil { item.Labels = map[string]string{} for k, v := range x { item.Labels[k] = v.(string) } } if x, ok := extractSingleMap(template["node_selector"]); ok && x != nil { item.Spec.NodeSelector = map[string]string{} for k, v := range x { item.Spec.NodeSelector[k] = v.(string) } } if x, ok := template["volume"].([]interface{}); ok && x != nil { for _, i := range x { volume := api.Volume{} writePodVolume(i.(map[string]interface{}), &volume) item.Spec.Volumes = append(item.Spec.Volumes, volume) } } if x, ok := template["image_pull_secret"].([]interface{}); ok && x != nil { for _, i := range x { ref := api.LocalObjectReference{} writePodImagePullSecret(i.(map[string]interface{}), &ref) item.Spec.ImagePullSecrets = append(item.Spec.ImagePullSecrets, ref) } } if x, ok := template["container"].([]interface{}); ok && x != nil { for _, i := range x { ref := api.Container{} err := writePodContainer(i.(map[string]interface{}), &ref) if err != nil { return err } item.Spec.Containers = append(item.Spec.Containers, ref) } } if x, ok := template["restart_policy"].(string); ok { item.Spec.RestartPolicy = api.RestartPolicy(x) } if x, ok := template["dns_policy"].(string); ok { item.Spec.DNSPolicy = api.DNSPolicy(x) } if x, ok := template["service_account_name"].(string); ok { item.Spec.ServiceAccountName = x } if x, ok := template["node_name"].(string); ok { item.Spec.NodeName = x } if x, ok := template["termination_grace_period"].(int); ok && x > 0 { l := int64(x) item.Spec.TerminationGracePeriodSeconds = &l } if x, ok := template["active_deadline"].(int); ok && x > 0 { l := int64(x) item.Spec.ActiveDeadlineSeconds = &l } return nil }