diff --git a/api/jobset/v1alpha2/jobset_types.go b/api/jobset/v1alpha2/jobset_types.go index 620115ec3..38f7353fb 100644 --- a/api/jobset/v1alpha2/jobset_types.go +++ b/api/jobset/v1alpha2/jobset_types.go @@ -198,6 +198,11 @@ type Network struct { // Defaults to if not set. // +optional Subdomain string `json:"subdomain,omitempty"` + + // Indicates if DNS records of pods should be published before the pods are ready. + // Defaults to True. + // +optional + PublishNotReadyAddresses *bool `json:"publishNotReadyAddresses,omitempty"` } // Operator defines the target of a SuccessPolicy or FailurePolicy. diff --git a/api/jobset/v1alpha2/openapi_generated.go b/api/jobset/v1alpha2/openapi_generated.go index 8c2fb50f7..9e7535795 100644 --- a/api/jobset/v1alpha2/openapi_generated.go +++ b/api/jobset/v1alpha2/openapi_generated.go @@ -321,6 +321,13 @@ func schema_jobset_api_jobset_v1alpha2_Network(ref common.ReferenceCallback) com Format: "", }, }, + "publishNotReadyAddresses": { + SchemaProps: spec.SchemaProps{ + Description: "Indicates if DNS records of pods should be published before the pods are ready. Defaults to True.", + Type: []string{"boolean"}, + Format: "", + }, + }, }, }, }, diff --git a/api/jobset/v1alpha2/zz_generated.deepcopy.go b/api/jobset/v1alpha2/zz_generated.deepcopy.go index ed5482434..7bc6f25b9 100644 --- a/api/jobset/v1alpha2/zz_generated.deepcopy.go +++ b/api/jobset/v1alpha2/zz_generated.deepcopy.go @@ -188,6 +188,11 @@ func (in *Network) DeepCopyInto(out *Network) { *out = new(bool) **out = **in } + if in.PublishNotReadyAddresses != nil { + in, out := &in.PublishNotReadyAddresses, &out.PublishNotReadyAddresses + *out = new(bool) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Network. diff --git a/client-go/applyconfiguration/jobset/v1alpha2/network.go b/client-go/applyconfiguration/jobset/v1alpha2/network.go index 8041458c3..a943b2095 100644 --- a/client-go/applyconfiguration/jobset/v1alpha2/network.go +++ b/client-go/applyconfiguration/jobset/v1alpha2/network.go @@ -17,8 +17,9 @@ package v1alpha2 // NetworkApplyConfiguration represents an declarative configuration of the Network type for use // with apply. type NetworkApplyConfiguration struct { - EnableDNSHostnames *bool `json:"enableDNSHostnames,omitempty"` - Subdomain *string `json:"subdomain,omitempty"` + EnableDNSHostnames *bool `json:"enableDNSHostnames,omitempty"` + Subdomain *string `json:"subdomain,omitempty"` + PublishNotReadyAddresses *bool `json:"publishNotReadyAddresses,omitempty"` } // NetworkApplyConfiguration constructs an declarative configuration of the Network type for use with @@ -42,3 +43,11 @@ func (b *NetworkApplyConfiguration) WithSubdomain(value string) *NetworkApplyCon b.Subdomain = &value return b } + +// WithPublishNotReadyAddresses sets the PublishNotReadyAddresses field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PublishNotReadyAddresses field is set to the value of the last call. +func (b *NetworkApplyConfiguration) WithPublishNotReadyAddresses(value bool) *NetworkApplyConfiguration { + b.PublishNotReadyAddresses = &value + return b +} diff --git a/config/components/crd/bases/jobset.x-k8s.io_jobsets.yaml b/config/components/crd/bases/jobset.x-k8s.io_jobsets.yaml index da2c918c2..e0f3fc6a7 100644 --- a/config/components/crd/bases/jobset.x-k8s.io_jobsets.yaml +++ b/config/components/crd/bases/jobset.x-k8s.io_jobsets.yaml @@ -85,6 +85,11 @@ spec: Pods will be reachable using the fully qualified pod hostname: ---. type: boolean + publishNotReadyAddresses: + description: |- + Indicates if DNS records of pods should be published before the pods are ready. + Defaults to True. + type: boolean subdomain: description: |- Subdomain is an explicit choice for a network subdomain name diff --git a/hack/python-sdk/swagger.json b/hack/python-sdk/swagger.json index 78ad898f6..0bcad8eca 100644 --- a/hack/python-sdk/swagger.json +++ b/hack/python-sdk/swagger.json @@ -159,6 +159,10 @@ "description": "EnableDNSHostnames allows pods to be reached via their hostnames. Pods will be reachable using the fully qualified pod hostname: \u003cjobSet.name\u003e-\u003cspec.replicatedJob.name\u003e-\u003cjob-index\u003e-\u003cpod-index\u003e.\u003csubdomain\u003e", "type": "boolean" }, + "publishNotReadyAddresses": { + "description": "Indicates if DNS records of pods should be published before the pods are ready. Defaults to True.", + "type": "boolean" + }, "subdomain": { "description": "Subdomain is an explicit choice for a network subdomain name When set, any replicated job in the set is added to this network. Defaults to \u003cjobSet.name\u003e if not set.", "type": "string" diff --git a/pkg/controllers/jobset_controller.go b/pkg/controllers/jobset_controller.go index 387ec5f33..e63a9ff04 100644 --- a/pkg/controllers/jobset_controller.go +++ b/pkg/controllers/jobset_controller.go @@ -566,6 +566,7 @@ func (r *JobSetReconciler) createHeadlessSvcIfNecessary(ctx context.Context, js Selector: map[string]string{ jobset.JobSetNameKey: js.Name, }, + PublishNotReadyAddresses: ptr.Deref(js.Spec.Network.PublishNotReadyAddresses, true), }, } diff --git a/pkg/util/testing/wrappers.go b/pkg/util/testing/wrappers.go index 4f3d4bb6b..9439e8549 100644 --- a/pkg/util/testing/wrappers.go +++ b/pkg/util/testing/wrappers.go @@ -121,12 +121,18 @@ func (j *JobSetWrapper) NetworkSubdomain(val string) *JobSetWrapper { return j } -// EnableDNSHostnames sets the value of ReplicatedJob.Network.EnableDNSHostnames. +// EnableDNSHostnames sets the value of JobSet.Network.EnableDNSHostnames. func (j *JobSetWrapper) EnableDNSHostnames(val bool) *JobSetWrapper { j.JobSet.Spec.Network.EnableDNSHostnames = ptr.To(val) return j } +// PublishNotReadyAddresses sets the value of JobSet.Network.PublishNotReadyAddresses. +func (j *JobSetWrapper) PublishNotReadyAddresses(val bool) *JobSetWrapper { + j.JobSet.Spec.Network.PublishNotReadyAddresses = ptr.To(val) + return j +} + // TTLSecondsAfterFinished sets the value of JobSet.Spec.TTLSecondsAfterFinished func (j *JobSetWrapper) TTLSecondsAfterFinished(seconds int32) *JobSetWrapper { j.Spec.TTLSecondsAfterFinished = &seconds diff --git a/pkg/webhooks/jobset_webhook.go b/pkg/webhooks/jobset_webhook.go index 7eab1472c..f14474d0d 100644 --- a/pkg/webhooks/jobset_webhook.go +++ b/pkg/webhooks/jobset_webhook.go @@ -104,20 +104,23 @@ func (j *jobSetWebhook) Default(ctx context.Context, obj runtime.Object) error { if js.Spec.ReplicatedJobs[i].Template.Spec.CompletionMode == nil { js.Spec.ReplicatedJobs[i].Template.Spec.CompletionMode = completionModePtr(batchv1.IndexedCompletion) } - // Enable DNS hostnames by default. - if js.Spec.Network == nil { - js.Spec.Network = &jobset.Network{} - } - if js.Spec.Network.EnableDNSHostnames == nil { - js.Spec.Network.EnableDNSHostnames = ptr.To(true) - } - // Default pod restart policy to OnFailure. if js.Spec.ReplicatedJobs[i].Template.Spec.Template.Spec.RestartPolicy == "" { js.Spec.ReplicatedJobs[i].Template.Spec.Template.Spec.RestartPolicy = corev1.RestartPolicyOnFailure } } + // Enable DNS hostnames by default. + if js.Spec.Network == nil { + js.Spec.Network = &jobset.Network{} + } + if js.Spec.Network.EnableDNSHostnames == nil { + js.Spec.Network.EnableDNSHostnames = ptr.To(true) + } + if js.Spec.Network.PublishNotReadyAddresses == nil { + js.Spec.Network.PublishNotReadyAddresses = ptr.To(true) + } + if js.Spec.ManagedBy == nil { js.Spec.ManagedBy = ptr.To(jobset.JobSetControllerName) } diff --git a/pkg/webhooks/jobset_webhook_test.go b/pkg/webhooks/jobset_webhook_test.go index 22283b117..8470e602b 100644 --- a/pkg/webhooks/jobset_webhook_test.go +++ b/pkg/webhooks/jobset_webhook_test.go @@ -38,6 +38,7 @@ var TestPodTemplate = corev1.PodTemplateSpec{ func TestJobSetDefaulting(t *testing.T) { defaultSuccessPolicy := &jobset.SuccessPolicy{Operator: jobset.OperatorAll} defaultStartupPolicy := &jobset.StartupPolicy{StartupPolicyOrder: jobset.AnyOrder} + defaultNetwork := &jobset.Network{EnableDNSHostnames: ptr.To(true), PublishNotReadyAddresses: ptr.To(true)} testCases := []struct { name string js *jobset.JobSet @@ -49,7 +50,7 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -66,7 +67,7 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -86,7 +87,7 @@ func TestJobSetDefaulting(t *testing.T) { js: &jobset.JobSet{ Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -104,7 +105,7 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -142,7 +143,7 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -181,7 +182,85 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(false)}, + Network: &jobset.Network{EnableDNSHostnames: ptr.To(false), PublishNotReadyAddresses: ptr.To(true)}, + ReplicatedJobs: []jobset.ReplicatedJob{ + { + Template: batchv1.JobTemplateSpec{ + Spec: batchv1.JobSpec{ + Template: TestPodTemplate, + CompletionMode: completionModePtr(batchv1.NonIndexedCompletion), + }, + }, + }, + }, + ManagedBy: ptr.To(jobset.JobSetControllerName), + }, + }, + }, + { + name: "PublishNotReadyNetworkAddresess is false", + js: &jobset.JobSet{ + Spec: jobset.JobSetSpec{ + SuccessPolicy: defaultSuccessPolicy, + StartupPolicy: defaultStartupPolicy, + Network: &jobset.Network{PublishNotReadyAddresses: ptr.To(false)}, + ReplicatedJobs: []jobset.ReplicatedJob{ + { + Template: batchv1.JobTemplateSpec{ + Spec: batchv1.JobSpec{ + Template: TestPodTemplate, + CompletionMode: completionModePtr(batchv1.NonIndexedCompletion), + }, + }, + }, + }, + ManagedBy: ptr.To(jobset.JobSetControllerName), + }, + }, + want: &jobset.JobSet{ + Spec: jobset.JobSetSpec{ + SuccessPolicy: defaultSuccessPolicy, + StartupPolicy: defaultStartupPolicy, + Network: &jobset.Network{EnableDNSHostnames: ptr.To(true), PublishNotReadyAddresses: ptr.To(false)}, + ReplicatedJobs: []jobset.ReplicatedJob{ + { + Template: batchv1.JobTemplateSpec{ + Spec: batchv1.JobSpec{ + Template: TestPodTemplate, + CompletionMode: completionModePtr(batchv1.NonIndexedCompletion), + }, + }, + }, + }, + ManagedBy: ptr.To(jobset.JobSetControllerName), + }, + }, + }, + { + name: "PublishNotReadyNetworkAddresess is true", + js: &jobset.JobSet{ + Spec: jobset.JobSetSpec{ + SuccessPolicy: defaultSuccessPolicy, + StartupPolicy: defaultStartupPolicy, + Network: &jobset.Network{EnableDNSHostnames: ptr.To(false), PublishNotReadyAddresses: ptr.To(true)}, + ReplicatedJobs: []jobset.ReplicatedJob{ + { + Template: batchv1.JobTemplateSpec{ + Spec: batchv1.JobSpec{ + Template: TestPodTemplate, + CompletionMode: completionModePtr(batchv1.NonIndexedCompletion), + }, + }, + }, + }, + ManagedBy: ptr.To(jobset.JobSetControllerName), + }, + }, + want: &jobset.JobSet{ + Spec: jobset.JobSetSpec{ + SuccessPolicy: defaultSuccessPolicy, + StartupPolicy: defaultStartupPolicy, + Network: &jobset.Network{EnableDNSHostnames: ptr.To(false), PublishNotReadyAddresses: ptr.To(true)}, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -202,7 +281,7 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -222,7 +301,7 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -247,7 +326,7 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -269,7 +348,7 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -293,7 +372,7 @@ func TestJobSetDefaulting(t *testing.T) { js: &jobset.JobSet{ Spec: jobset.JobSetSpec{ StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -315,7 +394,7 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ StartupPolicy: defaultStartupPolicy, SuccessPolicy: defaultSuccessPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -341,7 +420,7 @@ func TestJobSetDefaulting(t *testing.T) { SuccessPolicy: &jobset.SuccessPolicy{ Operator: jobset.OperatorAny, }, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, StartupPolicy: defaultStartupPolicy, ReplicatedJobs: []jobset.ReplicatedJob{ { @@ -366,7 +445,7 @@ func TestJobSetDefaulting(t *testing.T) { Operator: jobset.OperatorAny, }, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -392,7 +471,7 @@ func TestJobSetDefaulting(t *testing.T) { SuccessPolicy: &jobset.SuccessPolicy{ Operator: jobset.OperatorAny, }, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, StartupPolicy: &jobset.StartupPolicy{ StartupPolicyOrder: jobset.InOrder, }, @@ -420,7 +499,7 @@ func TestJobSetDefaulting(t *testing.T) { StartupPolicy: &jobset.StartupPolicy{ StartupPolicyOrder: jobset.InOrder, }, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -444,7 +523,7 @@ func TestJobSetDefaulting(t *testing.T) { js: &jobset.JobSet{ Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -461,7 +540,7 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -481,7 +560,7 @@ func TestJobSetDefaulting(t *testing.T) { js: &jobset.JobSet{ Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ @@ -499,7 +578,7 @@ func TestJobSetDefaulting(t *testing.T) { Spec: jobset.JobSetSpec{ SuccessPolicy: defaultSuccessPolicy, StartupPolicy: defaultStartupPolicy, - Network: &jobset.Network{EnableDNSHostnames: ptr.To(true)}, + Network: defaultNetwork, ReplicatedJobs: []jobset.ReplicatedJob{ { Template: batchv1.JobTemplateSpec{ diff --git a/sdk/python/docs/JobsetV1alpha2Network.md b/sdk/python/docs/JobsetV1alpha2Network.md index 753dad681..32cd4fb11 100644 --- a/sdk/python/docs/JobsetV1alpha2Network.md +++ b/sdk/python/docs/JobsetV1alpha2Network.md @@ -4,6 +4,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **enable_dns_hostnames** | **bool** | EnableDNSHostnames allows pods to be reached via their hostnames. Pods will be reachable using the fully qualified pod hostname: <jobSet.name>-<spec.replicatedJob.name>-<job-index>-<pod-index>.<subdomain> | [optional] +**publish_not_ready_addresses** | **bool** | Indicates if DNS records of pods should be published before the pods are ready. Defaults to True. | [optional] **subdomain** | **str** | Subdomain is an explicit choice for a network subdomain name When set, any replicated job in the set is added to this network. Defaults to <jobSet.name> if not set. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/sdk/python/jobset/models/jobset_v1alpha2_network.py b/sdk/python/jobset/models/jobset_v1alpha2_network.py index 09e72fa27..fe280a1cf 100644 --- a/sdk/python/jobset/models/jobset_v1alpha2_network.py +++ b/sdk/python/jobset/models/jobset_v1alpha2_network.py @@ -34,26 +34,31 @@ class JobsetV1alpha2Network(object): """ openapi_types = { 'enable_dns_hostnames': 'bool', + 'publish_not_ready_addresses': 'bool', 'subdomain': 'str' } attribute_map = { 'enable_dns_hostnames': 'enableDNSHostnames', + 'publish_not_ready_addresses': 'publishNotReadyAddresses', 'subdomain': 'subdomain' } - def __init__(self, enable_dns_hostnames=None, subdomain=None, local_vars_configuration=None): # noqa: E501 + def __init__(self, enable_dns_hostnames=None, publish_not_ready_addresses=None, subdomain=None, local_vars_configuration=None): # noqa: E501 """JobsetV1alpha2Network - a model defined in OpenAPI""" # noqa: E501 if local_vars_configuration is None: local_vars_configuration = Configuration() self.local_vars_configuration = local_vars_configuration self._enable_dns_hostnames = None + self._publish_not_ready_addresses = None self._subdomain = None self.discriminator = None if enable_dns_hostnames is not None: self.enable_dns_hostnames = enable_dns_hostnames + if publish_not_ready_addresses is not None: + self.publish_not_ready_addresses = publish_not_ready_addresses if subdomain is not None: self.subdomain = subdomain @@ -80,6 +85,29 @@ def enable_dns_hostnames(self, enable_dns_hostnames): self._enable_dns_hostnames = enable_dns_hostnames + @property + def publish_not_ready_addresses(self): + """Gets the publish_not_ready_addresses of this JobsetV1alpha2Network. # noqa: E501 + + Indicates if DNS records of pods should be published before the pods are ready. Defaults to True. # noqa: E501 + + :return: The publish_not_ready_addresses of this JobsetV1alpha2Network. # noqa: E501 + :rtype: bool + """ + return self._publish_not_ready_addresses + + @publish_not_ready_addresses.setter + def publish_not_ready_addresses(self, publish_not_ready_addresses): + """Sets the publish_not_ready_addresses of this JobsetV1alpha2Network. + + Indicates if DNS records of pods should be published before the pods are ready. Defaults to True. # noqa: E501 + + :param publish_not_ready_addresses: The publish_not_ready_addresses of this JobsetV1alpha2Network. # noqa: E501 + :type: bool + """ + + self._publish_not_ready_addresses = publish_not_ready_addresses + @property def subdomain(self): """Gets the subdomain of this JobsetV1alpha2Network. # noqa: E501 diff --git a/sdk/python/test/test_jobset_v1alpha2_job_set.py b/sdk/python/test/test_jobset_v1alpha2_job_set.py index 508995212..c16e2b37f 100644 --- a/sdk/python/test/test_jobset_v1alpha2_job_set.py +++ b/sdk/python/test/test_jobset_v1alpha2_job_set.py @@ -47,6 +47,7 @@ def make_instance(self, include_optional): managed_by = '0', network = jobset.models.jobset_v1alpha2_network.JobsetV1alpha2Network( enable_dns_hostnames = True, + publish_not_ready_addresses = True, subdomain = '0', ), replicated_jobs = [ jobset.models.jobset_v1alpha2_replicated_job.JobsetV1alpha2ReplicatedJob( diff --git a/sdk/python/test/test_jobset_v1alpha2_job_set_list.py b/sdk/python/test/test_jobset_v1alpha2_job_set_list.py index 8faab09a2..662f81d98 100644 --- a/sdk/python/test/test_jobset_v1alpha2_job_set_list.py +++ b/sdk/python/test/test_jobset_v1alpha2_job_set_list.py @@ -50,6 +50,7 @@ def make_instance(self, include_optional): managed_by = '0', network = jobset.models.jobset_v1alpha2_network.JobsetV1alpha2Network( enable_dns_hostnames = True, + publish_not_ready_addresses = True, subdomain = '0', ), replicated_jobs = [ jobset.models.jobset_v1alpha2_replicated_job.JobsetV1alpha2ReplicatedJob( @@ -97,6 +98,7 @@ def make_instance(self, include_optional): managed_by = '0', network = jobset.models.jobset_v1alpha2_network.JobsetV1alpha2Network( enable_dns_hostnames = True, + publish_not_ready_addresses = True, subdomain = '0', ), replicated_jobs = [ jobset.models.jobset_v1alpha2_replicated_job.JobsetV1alpha2ReplicatedJob( diff --git a/sdk/python/test/test_jobset_v1alpha2_job_set_spec.py b/sdk/python/test/test_jobset_v1alpha2_job_set_spec.py index 1a6042796..6671320c6 100644 --- a/sdk/python/test/test_jobset_v1alpha2_job_set_spec.py +++ b/sdk/python/test/test_jobset_v1alpha2_job_set_spec.py @@ -43,6 +43,7 @@ def make_instance(self, include_optional): managed_by = '0', network = jobset.models.jobset_v1alpha2_network.JobsetV1alpha2Network( enable_dns_hostnames = True, + publish_not_ready_addresses = True, subdomain = '0', ), replicated_jobs = [ jobset.models.jobset_v1alpha2_replicated_job.JobsetV1alpha2ReplicatedJob( diff --git a/sdk/python/test/test_jobset_v1alpha2_network.py b/sdk/python/test/test_jobset_v1alpha2_network.py index 68c7f57c3..5b6a61e95 100644 --- a/sdk/python/test/test_jobset_v1alpha2_network.py +++ b/sdk/python/test/test_jobset_v1alpha2_network.py @@ -39,6 +39,7 @@ def make_instance(self, include_optional): if include_optional : return JobsetV1alpha2Network( enable_dns_hostnames = True, + publish_not_ready_addresses = True, subdomain = '0' ) else : diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index e31064042..ec6e5ec64 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -146,6 +146,7 @@ func pingTestJobSet(ns *corev1.Namespace) *testing.JobSetWrapper { cmd := getPingCommand(podHostnames) return testing.MakeJobSet(jsName, ns.Name). EnableDNSHostnames(true). + PublishNotReadyAddresses(true). ReplicatedJob(testing.MakeReplicatedJob(rjobName). Job(testing.MakeJobTemplate("job", ns.Name). PodSpec(corev1.PodSpec{ @@ -180,6 +181,7 @@ func pingTestJobSetSubdomain(ns *corev1.Namespace) *testing.JobSetWrapper { cmd := getPingCommand(podHostnames) return testing.MakeJobSet(jsName, ns.Name). EnableDNSHostnames(true). + PublishNotReadyAddresses(true). NetworkSubdomain(subdomain). ReplicatedJob(testing.MakeReplicatedJob(rjobName). Job(testing.MakeJobTemplate("job", ns.Name). diff --git a/test/integration/webhook/jobset_webhook_test.go b/test/integration/webhook/jobset_webhook_test.go index f61de4d3f..47323144a 100644 --- a/test/integration/webhook/jobset_webhook_test.go +++ b/test/integration/webhook/jobset_webhook_test.go @@ -149,6 +149,20 @@ var _ = ginkgo.Describe("jobset webhook defaulting", func() { return js.Spec.Network != nil && *js.Spec.Network.EnableDNSHostnames }, }), + ginkgo.Entry("publishNotReadyAddresses defaults to true if unset", &testCase{ + makeJobSet: func(ns *corev1.Namespace) *testing.JobSetWrapper { + return testing.MakeJobSet("publishnotready-unset", ns.Name). + EnableDNSHostnames(true). + ReplicatedJob(testing.MakeReplicatedJob("rjob"). + Job(testing.MakeJobTemplate("job", ns.Name). + CompletionMode(batchv1.IndexedCompletion). + PodSpec(testing.TestPodSpec).Obj()). + Obj()) + }, + defaultsApplied: func(js *jobset.JobSet) bool { + return js.Spec.Network != nil && *js.Spec.Network.PublishNotReadyAddresses + }, + }), ginkgo.Entry("pod restart policy defaults to OnFailure if unset", &testCase{ makeJobSet: func(ns *corev1.Namespace) *testing.JobSetWrapper { return testing.MakeJobSet("enablednshostnames-unset", ns.Name). @@ -174,6 +188,7 @@ var _ = ginkgo.Describe("jobset webhook defaulting", func() { return testing.MakeJobSet("js-hostnames-non-indexed", ns.Name). Suspend(true). EnableDNSHostnames(false). + PublishNotReadyAddresses(true). ReplicatedJob(testing.MakeReplicatedJob("rjob"). Job(testing.MakeJobTemplate("job", ns.Name). PodSpec(testing.TestPodSpec). @@ -204,6 +219,7 @@ var _ = ginkgo.Describe("jobset webhook defaulting", func() { makeJobSet: func(ns *corev1.Namespace) *testing.JobSetWrapper { return testing.MakeJobSet("js-hostnames-non-indexed", ns.Name). EnableDNSHostnames(true). + PublishNotReadyAddresses(true). ReplicatedJob(testing.MakeReplicatedJob("rjob"). Job(testing.MakeJobTemplate("job", ns.Name). PodSpec(testing.TestPodSpec). @@ -275,6 +291,7 @@ var _ = ginkgo.Describe("jobset webhook defaulting", func() { makeJobSet: func(ns *corev1.Namespace) *testing.JobSetWrapper { return testing.MakeJobSet("js-hostnames-non-indexed", ns.Name). EnableDNSHostnames(true). + PublishNotReadyAddresses(true). ReplicatedJob(testing.MakeReplicatedJob("rjob"). Job(testing.MakeJobTemplate("job", ns.Name). PodSpec(testing.TestPodSpec). @@ -290,6 +307,7 @@ var _ = ginkgo.Describe("jobset webhook defaulting", func() { makeJobSet: func(ns *corev1.Namespace) *testing.JobSetWrapper { return testing.MakeJobSet("js-hostnames-non-indexed", ns.Name). EnableDNSHostnames(true). + PublishNotReadyAddresses(true). Suspend(true). ReplicatedJob(testing.MakeReplicatedJob("rjob"). Job(testing.MakeJobTemplate("job", ns.Name).