mirror of https://github.com/k3s-io/k3s
Add ServiceAccount as an alias for ServiceAccountName
parent
f3b752d831
commit
7a3891e5f8
|
@ -12417,6 +12417,10 @@
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "name of the ServiceAccount to use to run this pod; see http://releases.k8s.io/HEAD/docs/service_accounts.md"
|
"description": "name of the ServiceAccount to use to run this pod; see http://releases.k8s.io/HEAD/docs/service_accounts.md"
|
||||||
},
|
},
|
||||||
|
"serviceAccount": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "deprecated; use serviceAccountName instead"
|
||||||
|
},
|
||||||
"nodeName": {
|
"nodeName": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "node requested for this pod"
|
"description": "node requested for this pod"
|
||||||
|
|
|
@ -27,8 +27,10 @@ import (
|
||||||
func addConversionFuncs() {
|
func addConversionFuncs() {
|
||||||
// Add non-generated conversion functions
|
// Add non-generated conversion functions
|
||||||
err := api.Scheme.AddConversionFuncs(
|
err := api.Scheme.AddConversionFuncs(
|
||||||
convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec,
|
convert_api_PodSpec_To_v1_PodSpec,
|
||||||
convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec,
|
convert_api_ReplicationControllerSpec_To_v1_ReplicationControllerSpec,
|
||||||
|
convert_v1_PodSpec_To_api_PodSpec,
|
||||||
|
convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// If one of the conversion functions is malformed, detect it immediately.
|
// If one of the conversion functions is malformed, detect it immediately.
|
||||||
|
@ -223,3 +225,136 @@ func convert_v1_ReplicationControllerSpec_To_api_ReplicationControllerSpec(in *R
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The following two PodSpec conversions are done here to support ServiceAccount
|
||||||
|
// as an alias for ServiceAccountName.
|
||||||
|
func convert_api_PodSpec_To_v1_PodSpec(in *api.PodSpec, out *PodSpec, s conversion.Scope) error {
|
||||||
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
|
defaulting.(func(*api.PodSpec))(in)
|
||||||
|
}
|
||||||
|
if in.Volumes != nil {
|
||||||
|
out.Volumes = make([]Volume, len(in.Volumes))
|
||||||
|
for i := range in.Volumes {
|
||||||
|
if err := convert_api_Volume_To_v1_Volume(&in.Volumes[i], &out.Volumes[i], s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Volumes = nil
|
||||||
|
}
|
||||||
|
if in.Containers != nil {
|
||||||
|
out.Containers = make([]Container, len(in.Containers))
|
||||||
|
for i := range in.Containers {
|
||||||
|
if err := convert_api_Container_To_v1_Container(&in.Containers[i], &out.Containers[i], s); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.Containers = nil
|
||||||
|
}
|
||||||
|
out.RestartPolicy = 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 = 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.ServiceAccountName
|
||||||
|
// DeprecatedServiceAccount is an alias for ServiceAccountName.
|
||||||
|
out.DeprecatedServiceAccount = in.ServiceAccountName
|
||||||
|
out.NodeName = in.NodeName
|
||||||
|
out.HostNetwork = in.HostNetwork
|
||||||
|
if in.ImagePullSecrets != nil {
|
||||||
|
out.ImagePullSecrets = make([]LocalObjectReference, len(in.ImagePullSecrets))
|
||||||
|
for i := range in.ImagePullSecrets {
|
||||||
|
if err := convert_api_LocalObjectReference_To_v1_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 {
|
||||||
|
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_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
|
||||||
|
out.HostNetwork = in.HostNetwork
|
||||||
|
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
|
||||||
|
}
|
||||||
|
|
|
@ -1472,68 +1472,6 @@ func convert_api_PodProxyOptions_To_v1_PodProxyOptions(in *api.PodProxyOptions,
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func convert_api_PodSpec_To_v1_PodSpec(in *api.PodSpec, out *PodSpec, s conversion.Scope) error {
|
|
||||||
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
|
||||||
defaulting.(func(*api.PodSpec))(in)
|
|
||||||
}
|
|
||||||
if in.Volumes != nil {
|
|
||||||
out.Volumes = make([]Volume, len(in.Volumes))
|
|
||||||
for i := range in.Volumes {
|
|
||||||
if err := convert_api_Volume_To_v1_Volume(&in.Volumes[i], &out.Volumes[i], s); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
out.Volumes = nil
|
|
||||||
}
|
|
||||||
if in.Containers != nil {
|
|
||||||
out.Containers = make([]Container, len(in.Containers))
|
|
||||||
for i := range in.Containers {
|
|
||||||
if err := convert_api_Container_To_v1_Container(&in.Containers[i], &out.Containers[i], s); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
out.Containers = nil
|
|
||||||
}
|
|
||||||
out.RestartPolicy = 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 = 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.ServiceAccountName
|
|
||||||
out.NodeName = in.NodeName
|
|
||||||
out.HostNetwork = in.HostNetwork
|
|
||||||
if in.ImagePullSecrets != nil {
|
|
||||||
out.ImagePullSecrets = make([]LocalObjectReference, len(in.ImagePullSecrets))
|
|
||||||
for i := range in.ImagePullSecrets {
|
|
||||||
if err := convert_api_LocalObjectReference_To_v1_LocalObjectReference(&in.ImagePullSecrets[i], &out.ImagePullSecrets[i], s); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
out.ImagePullSecrets = nil
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func convert_api_PodStatus_To_v1_PodStatus(in *api.PodStatus, out *PodStatus, s conversion.Scope) error {
|
func convert_api_PodStatus_To_v1_PodStatus(in *api.PodStatus, out *PodStatus, s conversion.Scope) error {
|
||||||
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
defaulting.(func(*api.PodStatus))(in)
|
defaulting.(func(*api.PodStatus))(in)
|
||||||
|
@ -3784,68 +3722,6 @@ func convert_v1_PodProxyOptions_To_api_PodProxyOptions(in *PodProxyOptions, out
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func convert_v1_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_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
|
|
||||||
}
|
|
||||||
out.ServiceAccountName = in.ServiceAccountName
|
|
||||||
out.NodeName = in.NodeName
|
|
||||||
out.HostNetwork = in.HostNetwork
|
|
||||||
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_PodStatus_To_api_PodStatus(in *PodStatus, out *api.PodStatus, s conversion.Scope) error {
|
func convert_v1_PodStatus_To_api_PodStatus(in *PodStatus, out *api.PodStatus, s conversion.Scope) error {
|
||||||
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
|
||||||
defaulting.(func(*PodStatus))(in)
|
defaulting.(func(*PodStatus))(in)
|
||||||
|
@ -4725,7 +4601,6 @@ func init() {
|
||||||
convert_api_PodList_To_v1_PodList,
|
convert_api_PodList_To_v1_PodList,
|
||||||
convert_api_PodLogOptions_To_v1_PodLogOptions,
|
convert_api_PodLogOptions_To_v1_PodLogOptions,
|
||||||
convert_api_PodProxyOptions_To_v1_PodProxyOptions,
|
convert_api_PodProxyOptions_To_v1_PodProxyOptions,
|
||||||
convert_api_PodSpec_To_v1_PodSpec,
|
|
||||||
convert_api_PodStatusResult_To_v1_PodStatusResult,
|
convert_api_PodStatusResult_To_v1_PodStatusResult,
|
||||||
convert_api_PodStatus_To_v1_PodStatus,
|
convert_api_PodStatus_To_v1_PodStatus,
|
||||||
convert_api_PodTemplateList_To_v1_PodTemplateList,
|
convert_api_PodTemplateList_To_v1_PodTemplateList,
|
||||||
|
@ -4838,7 +4713,6 @@ func init() {
|
||||||
convert_v1_PodList_To_api_PodList,
|
convert_v1_PodList_To_api_PodList,
|
||||||
convert_v1_PodLogOptions_To_api_PodLogOptions,
|
convert_v1_PodLogOptions_To_api_PodLogOptions,
|
||||||
convert_v1_PodProxyOptions_To_api_PodProxyOptions,
|
convert_v1_PodProxyOptions_To_api_PodProxyOptions,
|
||||||
convert_v1_PodSpec_To_api_PodSpec,
|
|
||||||
convert_v1_PodStatusResult_To_api_PodStatusResult,
|
convert_v1_PodStatusResult_To_api_PodStatusResult,
|
||||||
convert_v1_PodStatus_To_api_PodStatus,
|
convert_v1_PodStatus_To_api_PodStatus,
|
||||||
convert_v1_PodTemplateList_To_api_PodTemplateList,
|
convert_v1_PodTemplateList_To_api_PodTemplateList,
|
||||||
|
|
|
@ -45,3 +45,49 @@ func TestNodeConversion(t *testing.T) {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestPodSpecConversion tests that ServiceAccount is an alias for
|
||||||
|
// ServiceAccountName.
|
||||||
|
func TestPodSpecConversion(t *testing.T) {
|
||||||
|
name, other := "foo", "bar"
|
||||||
|
|
||||||
|
// Test internal -> v1. Should have both alias (DeprecatedServiceAccount)
|
||||||
|
// and new field (ServiceAccountName).
|
||||||
|
i := &api.PodSpec{
|
||||||
|
ServiceAccountName: name,
|
||||||
|
}
|
||||||
|
v := versioned.PodSpec{}
|
||||||
|
if err := api.Scheme.Convert(i, &v); err != nil {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if v.ServiceAccountName != name {
|
||||||
|
t.Fatalf("want v1.ServiceAccountName %q, got %q", name, v.ServiceAccountName)
|
||||||
|
}
|
||||||
|
if v.DeprecatedServiceAccount != name {
|
||||||
|
t.Fatalf("want v1.DeprecatedServiceAccount %q, got %q", name, v.DeprecatedServiceAccount)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test v1 -> internal. Either DeprecatedServiceAccount, ServiceAccountName,
|
||||||
|
// or both should translate to ServiceAccountName. ServiceAccountName wins
|
||||||
|
// if both are set.
|
||||||
|
testCases := []*versioned.PodSpec{
|
||||||
|
// New
|
||||||
|
{ServiceAccountName: name},
|
||||||
|
// Alias
|
||||||
|
{DeprecatedServiceAccount: name},
|
||||||
|
// Both: same
|
||||||
|
{ServiceAccountName: name, DeprecatedServiceAccount: name},
|
||||||
|
// Both: different
|
||||||
|
{ServiceAccountName: name, DeprecatedServiceAccount: other},
|
||||||
|
}
|
||||||
|
for k, v := range testCases {
|
||||||
|
got := api.PodSpec{}
|
||||||
|
err := api.Scheme.Convert(v, &got)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error for case %d: %v", k, err)
|
||||||
|
}
|
||||||
|
if got.ServiceAccountName != name {
|
||||||
|
t.Fatalf("want api.ServiceAccountName %q, got %q", name, got.ServiceAccountName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1311,6 +1311,7 @@ func deepCopy_v1_PodSpec(in PodSpec, out *PodSpec, c *conversion.Cloner) error {
|
||||||
out.NodeSelector = nil
|
out.NodeSelector = nil
|
||||||
}
|
}
|
||||||
out.ServiceAccountName = in.ServiceAccountName
|
out.ServiceAccountName = in.ServiceAccountName
|
||||||
|
out.DeprecatedServiceAccount = in.DeprecatedServiceAccount
|
||||||
out.NodeName = in.NodeName
|
out.NodeName = in.NodeName
|
||||||
out.HostNetwork = in.HostNetwork
|
out.HostNetwork = in.HostNetwork
|
||||||
if in.ImagePullSecrets != nil {
|
if in.ImagePullSecrets != nil {
|
||||||
|
|
|
@ -877,6 +877,8 @@ type PodSpec struct {
|
||||||
|
|
||||||
// ServiceAccountName is the name of the ServiceAccount to use to run this pod
|
// ServiceAccountName is the name of the ServiceAccount to use to run this pod
|
||||||
ServiceAccountName string `json:"serviceAccountName,omitempty" description:"name of the ServiceAccount to use to run this pod; see http://releases.k8s.io/HEAD/docs/service_accounts.md"`
|
ServiceAccountName string `json:"serviceAccountName,omitempty" description:"name of the ServiceAccount to use to run this pod; see http://releases.k8s.io/HEAD/docs/service_accounts.md"`
|
||||||
|
// DeprecatedServiceAccount is a depreciated alias for ServiceAccountName.
|
||||||
|
DeprecatedServiceAccount string `json:"serviceAccount,omitempty" description:"deprecated; use serviceAccountName instead"`
|
||||||
|
|
||||||
// NodeName is a request to schedule this pod onto a specific node. If it is non-empty,
|
// NodeName is a request to schedule this pod onto a specific node. If it is non-empty,
|
||||||
// the scheduler simply schedules this pod onto that node, assuming that it fits resource
|
// the scheduler simply schedules this pod onto that node, assuming that it fits resource
|
||||||
|
|
Loading…
Reference in New Issue