cue.dev/x/k8s.io@v0.12.0

api/batch/v1/schema.cue raw

  1package v1
  2
  3import (
  4	"cue.dev/x/k8s.io/apimachinery/pkg/apis/meta/v1"
  5	v1_9 "cue.dev/x/k8s.io/api/core/v1"
  6)
  7
  8// CronJob represents the configuration of a single cron job.
  9#CronJob: {
 10	// APIVersion defines the versioned schema of this representation of an object.
 11	// Servers should convert recognized schemas to the latest internal value, and
 12	// may reject unrecognized values. More info:
 13	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
 14	"apiVersion": "batch/v1"
 15
 16	// Kind is a string value representing the REST resource this object represents.
 17	// Servers may infer this from the endpoint the client submits requests to.
 18	// Cannot be updated. In CamelCase. More info:
 19	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 20	"kind": "CronJob"
 21
 22	// Standard object's metadata. More info:
 23	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 24	"metadata"?: v1.#ObjectMeta
 25
 26	// Specification of the desired behavior of a cron job, including the schedule.
 27	// More info:
 28	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 29	"spec"!: #CronJobSpec
 30
 31	// Current status of a cron job. More info:
 32	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 33	"status"?: #CronJobStatus
 34}
 35
 36// CronJobList is a collection of cron jobs.
 37#CronJobList: {
 38	// APIVersion defines the versioned schema of this representation of an object.
 39	// Servers should convert recognized schemas to the latest internal value, and
 40	// may reject unrecognized values. More info:
 41	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
 42	"apiVersion": "batch/v1"
 43
 44	// items is the list of CronJobs.
 45	"items"!: [...#CronJob]
 46
 47	// Kind is a string value representing the REST resource this object represents.
 48	// Servers may infer this from the endpoint the client submits requests to.
 49	// Cannot be updated. In CamelCase. More info:
 50	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 51	"kind": "CronJobList"
 52
 53	// Standard list metadata. More info:
 54	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 55	"metadata"?: v1.#ListMeta
 56}
 57
 58// CronJobSpec describes how the job execution will look like and when it will actually run.
 59#CronJobSpec: {
 60	// Specifies how to treat concurrent executions of a Job. Valid values are:
 61	//
 62	// - "Allow" (default): allows CronJobs to run concurrently; - "Forbid": forbids
 63	// concurrent runs, skipping next run if previous run hasn't finished yet; -
 64	// "Replace": cancels currently running job and replaces it with a new one
 65	"concurrencyPolicy"?: string
 66
 67	// The number of failed finished jobs to retain. Value must be non-negative integer. Defaults to 1.
 68	"failedJobsHistoryLimit"?: int32 & int
 69
 70	// Specifies the job that will be created when executing a CronJob.
 71	"jobTemplate"!: #JobTemplateSpec
 72
 73	// The schedule in Cron format, see https://en.wikipedia.org/wiki/Cron.
 74	"schedule"!: string
 75
 76	// Optional deadline in seconds for starting the job if it misses scheduled time
 77	// for any reason. Missed jobs executions will be counted as failed ones.
 78	"startingDeadlineSeconds"?: int64 & int
 79
 80	// The number of successful finished jobs to retain. Value must be non-negative
 81	// integer. Defaults to 3.
 82	"successfulJobsHistoryLimit"?: int32 & int
 83
 84	// This flag tells the controller to suspend subsequent executions, it does not
 85	// apply to already started executions. Defaults to false.
 86	"suspend"?: bool
 87
 88	// The time zone name for the given schedule, see
 89	// https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. If not
 90	// specified, this will default to the time zone of the kube-controller-manager
 91	// process. The set of valid time zone names and the time zone offset is loaded
 92	// from the system-wide time zone database by the API server during CronJob
 93	// validation and the controller manager during execution. If no system-wide
 94	// time zone database can be found a bundled version of the database is used
 95	// instead. If the time zone name becomes invalid during the lifetime of a
 96	// CronJob or due to a change in host configuration, the controller will stop
 97	// creating new new Jobs and will create a system event with the reason
 98	// UnknownTimeZone. More information can be found in
 99	// https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#time-zones
100	"timeZone"?: string
101}
102
103// CronJobStatus represents the current state of a cron job.
104#CronJobStatus: {
105	// A list of pointers to currently running jobs.
106	"active"?: [...v1_9.#ObjectReference]
107
108	// Information when was the last time the job was successfully scheduled.
109	"lastScheduleTime"?: v1.#Time
110
111	// Information when was the last time the job successfully completed.
112	"lastSuccessfulTime"?: v1.#Time
113}
114
115// Job represents the configuration of a single job.
116#Job: {
117	// APIVersion defines the versioned schema of this representation of an object.
118	// Servers should convert recognized schemas to the latest internal value, and
119	// may reject unrecognized values. More info:
120	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
121	"apiVersion": "batch/v1"
122
123	// Kind is a string value representing the REST resource this object represents.
124	// Servers may infer this from the endpoint the client submits requests to.
125	// Cannot be updated. In CamelCase. More info:
126	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
127	"kind": "Job"
128
129	// Standard object's metadata. More info:
130	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
131	"metadata"?: v1.#ObjectMeta
132
133	// Specification of the desired behavior of a job. More info:
134	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
135	"spec"?: #JobSpec
136
137	// Current status of a job. More info:
138	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
139	"status"?: #JobStatus
140}
141
142// JobCondition describes current state of a job.
143#JobCondition: {
144	// Last time the condition was checked.
145	"lastProbeTime"?: v1.#Time
146
147	// Last time the condition transit from one status to another.
148	"lastTransitionTime"?: v1.#Time
149
150	// Human readable message indicating details about last transition.
151	"message"?: string
152
153	// (brief) reason for the condition's last transition.
154	"reason"?: string
155
156	// Status of the condition, one of True, False, Unknown.
157	"status"!: string
158
159	// Type of job condition, Complete or Failed.
160	"type"!: string
161}
162
163// JobList is a collection of jobs.
164#JobList: {
165	// APIVersion defines the versioned schema of this representation of an object.
166	// Servers should convert recognized schemas to the latest internal value, and
167	// may reject unrecognized values. More info:
168	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
169	"apiVersion": "batch/v1"
170
171	// items is the list of Jobs.
172	"items"!: [...#Job]
173
174	// Kind is a string value representing the REST resource this object represents.
175	// Servers may infer this from the endpoint the client submits requests to.
176	// Cannot be updated. In CamelCase. More info:
177	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
178	"kind": "JobList"
179
180	// Standard list metadata. More info:
181	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
182	"metadata"?: v1.#ListMeta
183}
184
185// JobSpec describes how the job execution will look like.
186#JobSpec: {
187	// Specifies the duration in seconds relative to the startTime that the job may
188	// be continuously active before the system tries to terminate it; value must
189	// be positive integer. If a Job is suspended (at creation or through an
190	// update), this timer will effectively be stopped and reset when the Job is
191	// resumed again.
192	"activeDeadlineSeconds"?: int64 & int
193
194	// Specifies the number of retries before marking this job failed. Defaults to
195	// 6, unless backoffLimitPerIndex (only Indexed Job) is specified. When
196	// backoffLimitPerIndex is specified, backoffLimit defaults to 2147483647.
197	"backoffLimit"?: int32 & int
198
199	// Specifies the limit for the number of retries within an index before marking
200	// this index as failed. When enabled the number of failures per index is kept
201	// in the pod's batch.kubernetes.io/job-index-failure-count annotation. It can
202	// only be set when Job's completionMode=Indexed, and the Pod's restart policy
203	// is Never. The field is immutable.
204	"backoffLimitPerIndex"?: int32 & int
205
206	// completionMode specifies how Pod completions are tracked. It can be
207	// `NonIndexed` (default) or `Indexed`.
208	//
209	// `NonIndexed` means that the Job is considered complete when there have been
210	// .spec.completions successfully completed Pods. Each Pod completion is
211	// homologous to each other.
212	//
213	// `Indexed` means that the Pods of a Job get an associated completion index
214	// from 0 to (.spec.completions - 1), available in the annotation
215	// batch.kubernetes.io/job-completion-index. The Job is considered complete
216	// when there is one successfully completed Pod for each index. When value is
217	// `Indexed`, .spec.completions must be specified and `.spec.parallelism` must
218	// be less than or equal to 10^5. In addition, The Pod name takes the form
219	// `$(job-name)-$(index)-$(random-string)`, the Pod hostname takes the form
220	// `$(job-name)-$(index)`.
221	//
222	// More completion modes can be added in the future. If the Job controller
223	// observes a mode that it doesn't recognize, which is possible during upgrades
224	// due to version skew, the controller skips updates for the Job.
225	"completionMode"?: string
226
227	// Specifies the desired number of successfully finished pods the job should be
228	// run with. Setting to null means that the success of any pod signals the
229	// success of all pods, and allows parallelism to have any positive value.
230	// Setting to 1 means that parallelism is limited to 1 and the success of that
231	// pod signals the success of the job. More info:
232	// https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
233	"completions"?: int32 & int
234
235	// ManagedBy field indicates the controller that manages a Job. The k8s Job
236	// controller reconciles jobs which don't have this field at all or the field
237	// value is the reserved string `kubernetes.io/job-controller`, but skips
238	// reconciling Jobs with a custom value for this field. The value must be a
239	// valid domain-prefixed path (e.g. acme.io/foo) - all characters before the
240	// first "/" must be a valid subdomain as defined by RFC 1123. All characters
241	// trailing the first "/" must be valid HTTP Path characters as defined by RFC
242	// 3986. The value cannot exceed 63 characters. This field is immutable.
243	"managedBy"?: string
244
245	// manualSelector controls generation of pod labels and pod selectors. Leave
246	// `manualSelector` unset unless you are certain what you are doing. When false
247	// or unset, the system pick labels unique to this job and appends those labels
248	// to the pod template. When true, the user is responsible for picking unique
249	// labels and specifying the selector. Failure to pick a unique label may cause
250	// this and other jobs to not function correctly. However, You may see
251	// `manualSelector=true` in jobs that were created with the old
252	// `extensions/v1beta1` API. More info:
253	// https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector
254	"manualSelector"?: bool
255
256	// Specifies the maximal number of failed indexes before marking the Job as
257	// failed, when backoffLimitPerIndex is set. Once the number of failed indexes
258	// exceeds this number the entire Job is marked as Failed and its execution is
259	// terminated. When left as null the job continues execution of all of its
260	// indexes and is marked with the `Complete` Job condition. It can only be
261	// specified when backoffLimitPerIndex is set. It can be null or up to
262	// completions. It is required and must be less than or equal to 10^4 when is
263	// completions greater than 10^5.
264	"maxFailedIndexes"?: int32 & int
265
266	// Specifies the maximum desired number of pods the job should run at any given
267	// time. The actual number of pods running in steady state will be less than
268	// this number when ((.spec.completions - .status.successful) <
269	// .spec.parallelism), i.e. when the work left to do is less than max
270	// parallelism. More info:
271	// https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
272	"parallelism"?: int32 & int
273
274	// Specifies the policy of handling failed pods. In particular, it allows to
275	// specify the set of actions and conditions which need to be satisfied to take
276	// the associated action. If empty, the default behaviour applies - the counter
277	// of failed pods, represented by the jobs's .status.failed field, is
278	// incremented and it is checked against the backoffLimit. This field cannot be
279	// used in combination with restartPolicy=OnFailure.
280	"podFailurePolicy"?: #PodFailurePolicy
281
282	// podReplacementPolicy specifies when to create replacement Pods. Possible
283	// values are: - TerminatingOrFailed means that we recreate pods
284	// when they are terminating (has a metadata.deletionTimestamp) or failed.
285	// - Failed means to wait until a previously created Pod is fully terminated (has phase
286	// Failed or Succeeded) before creating a replacement Pod.
287	//
288	// When using podFailurePolicy, Failed is the the only allowed value.
289	// TerminatingOrFailed and Failed are allowed values when podFailurePolicy is
290	// not in use.
291	"podReplacementPolicy"?: string
292
293	// A label query over pods that should match the pod count. Normally, the system
294	// sets this field for you. More info:
295	// https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
296	"selector"?: v1.#LabelSelector
297
298	// successPolicy specifies the policy when the Job can be declared as succeeded.
299	// If empty, the default behavior applies - the Job is declared as succeeded
300	// only when the number of succeeded pods equals to the completions. When the
301	// field is specified, it must be immutable and works only for the Indexed
302	// Jobs. Once the Job meets the SuccessPolicy, the lingering pods are
303	// terminated.
304	"successPolicy"?: #SuccessPolicy
305
306	// suspend specifies whether the Job controller should create Pods or not. If a
307	// Job is created with suspend set to true, no Pods are created by the Job
308	// controller. If a Job is suspended after creation (i.e. the flag goes from
309	// false to true), the Job controller will delete all active Pods associated
310	// with this Job. Users must design their workload to gracefully handle this.
311	// Suspending a Job will reset the StartTime field of the Job, effectively
312	// resetting the ActiveDeadlineSeconds timer too. Defaults to false.
313	"suspend"?: bool
314
315	// Describes the pod that will be created when executing a job. The only allowed
316	// template.spec.restartPolicy values are "Never" or "OnFailure". More info:
317	// https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
318	"template"!: v1_9.#PodTemplateSpec
319
320	// ttlSecondsAfterFinished limits the lifetime of a Job that has finished
321	// execution (either Complete or Failed). If this field is set,
322	// ttlSecondsAfterFinished after the Job finishes, it is eligible to be
323	// automatically deleted. When the Job is being deleted, its lifecycle
324	// guarantees (e.g. finalizers) will be honored. If this field is unset, the
325	// Job won't be automatically deleted. If this field is set to zero, the Job
326	// becomes eligible to be deleted immediately after it finishes.
327	"ttlSecondsAfterFinished"?: int32 & int
328}
329
330// JobStatus represents the current state of a Job.
331#JobStatus: {
332	// The number of pending and running pods which are not terminating (without a
333	// deletionTimestamp). The value is zero for finished jobs.
334	"active"?: int32 & int
335
336	// completedIndexes holds the completed indexes when .spec.completionMode =
337	// "Indexed" in a text format. The indexes are represented as decimal integers
338	// separated by commas. The numbers are listed in increasing order. Three or
339	// more consecutive numbers are compressed and represented by the first and
340	// last element of the series, separated by a hyphen. For example, if the
341	// completed indexes are 1, 3, 4, 5 and 7, they are represented as "1,3-5,7".
342	"completedIndexes"?: string
343
344	// Represents time when the job was completed. It is not guaranteed to be set in
345	// happens-before order across separate operations. It is represented in
346	// RFC3339 form and is in UTC. The completion time is set when the job finishes
347	// successfully, and only then. The value cannot be updated or removed. The
348	// value indicates the same or later point in time as the startTime field.
349	"completionTime"?: v1.#Time
350
351	// The latest available observations of an object's current state. When a Job
352	// fails, one of the conditions will have type "Failed" and status true. When a
353	// Job is suspended, one of the conditions will have type "Suspended" and
354	// status true; when the Job is resumed, the status of this condition will
355	// become false. When a Job is completed, one of the conditions will have type
356	// "Complete" and status true.
357	//
358	// A job is considered finished when it is in a terminal condition, either
359	// "Complete" or "Failed". A Job cannot have both the "Complete" and "Failed"
360	// conditions. Additionally, it cannot be in the "Complete" and "FailureTarget"
361	// conditions. The "Complete", "Failed" and "FailureTarget" conditions cannot
362	// be disabled.
363	//
364	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
365	"conditions"?: [...#JobCondition]
366
367	// The number of pods which reached phase Failed. The value increases monotonically.
368	"failed"?: int32 & int
369
370	// FailedIndexes holds the failed indexes when spec.backoffLimitPerIndex is set.
371	// The indexes are represented in the text format analogous as for the
372	// `completedIndexes` field, ie. they are kept as decimal integers separated by
373	// commas. The numbers are listed in increasing order. Three or more
374	// consecutive numbers are compressed and represented by the first and last
375	// element of the series, separated by a hyphen. For example, if the failed
376	// indexes are 1, 3, 4, 5 and 7, they are represented as "1,3-5,7". The set of
377	// failed indexes cannot overlap with the set of completed indexes.
378	"failedIndexes"?: string
379
380	// The number of active pods which have a Ready condition and are not
381	// terminating (without a deletionTimestamp).
382	"ready"?: int32 & int
383
384	// Represents time when the job controller started processing a job. When a Job
385	// is created in the suspended state, this field is not set until the first
386	// time it is resumed. This field is reset every time a Job is resumed from
387	// suspension. It is represented in RFC3339 form and is in UTC.
388	//
389	// Once set, the field can only be removed when the job is suspended. The field
390	// cannot be modified while the job is unsuspended or finished.
391	"startTime"?: v1.#Time
392
393	// The number of pods which reached phase Succeeded. The value increases
394	// monotonically for a given spec. However, it may decrease in reaction to
395	// scale down of elastic indexed jobs.
396	"succeeded"?: int32 & int
397
398	// The number of pods which are terminating (in phase Pending or Running and
399	// have a deletionTimestamp).
400	//
401	// This field is beta-level. The job controller populates the field when the
402	// feature gate JobPodReplacementPolicy is enabled (enabled by default).
403	"terminating"?: int32 & int
404
405	// uncountedTerminatedPods holds the UIDs of Pods that have terminated but the
406	// job controller hasn't yet accounted for in the status counters.
407	//
408	// The job controller creates pods with a finalizer. When a pod terminates
409	// (succeeded or failed), the controller does three steps to account for it in
410	// the job status:
411	//
412	// 1. Add the pod UID to the arrays in this field. 2. Remove the pod finalizer.
413	// 3. Remove the pod UID from the arrays while increasing the corresponding
414	// counter.
415	//
416	// Old jobs might not be tracked using this field, in which case the field
417	// remains null. The structure is empty for finished jobs.
418	"uncountedTerminatedPods"?: #UncountedTerminatedPods
419}
420
421// JobTemplateSpec describes the data a Job should have when created from a template
422#JobTemplateSpec: {
423	// Standard object's metadata of the jobs created from this template. More info:
424	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
425	"metadata"?: v1.#ObjectMeta
426
427	// Specification of the desired behavior of the job. More info:
428	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
429	"spec"?: #JobSpec
430}
431
432// PodFailurePolicy describes how failed pods influence the backoffLimit.
433#PodFailurePolicy: {
434	// A list of pod failure policy rules. The rules are evaluated in order. Once a
435	// rule matches a Pod failure, the remaining of the rules are ignored. When no
436	// rule matches the Pod failure, the default handling applies - the counter of
437	// pod failures is incremented and it is checked against the backoffLimit. At
438	// most 20 elements are allowed.
439	"rules"!: [...#PodFailurePolicyRule]
440}
441
442// PodFailurePolicyOnExitCodesRequirement describes the requirement for handling
443// a failed pod based on its container exit codes. In particular, it lookups
444// the .state.terminated.exitCode for each app container and init container
445// status, represented by the .status.containerStatuses and
446// .status.initContainerStatuses fields in the Pod status, respectively.
447// Containers completed with success (exit code 0) are excluded from the
448// requirement check.
449#PodFailurePolicyOnExitCodesRequirement: {
450	// Restricts the check for exit codes to the container with the specified name.
451	// When null, the rule applies to all containers. When specified, it should
452	// match one the container or initContainer names in the pod template.
453	"containerName"?: string
454
455	// Represents the relationship between the container exit code(s) and the
456	// specified values. Containers completed with success (exit code 0) are
457	// excluded from the requirement check. Possible values are:
458	//
459	// - In: the requirement is satisfied if at least one container exit code
460	// (might be multiple if there are multiple containers not restricted
461	// by the 'containerName' field) is in the set of specified values.
462	// - NotIn: the requirement is satisfied if at least one container exit code
463	// (might be multiple if there are multiple containers not restricted
464	// by the 'containerName' field) is not in the set of specified values.
465	// Additional values are considered to be added in the future. Clients should
466	// react to an unknown operator by assuming the requirement is not satisfied.
467	"operator"!: string
468
469	// Specifies the set of values. Each returned container exit code (might be
470	// multiple in case of multiple containers) is checked against this set of
471	// values with respect to the operator. The list of values must be ordered and
472	// must not contain duplicates. Value '0' cannot be used for the In operator.
473	// At least one element is required. At most 255 elements are allowed.
474	"values"!: [...int32 & int]
475}
476
477// PodFailurePolicyOnPodConditionsPattern describes a pattern for matching an
478// actual pod condition type.
479#PodFailurePolicyOnPodConditionsPattern: {
480	// Specifies the required Pod condition status. To match a pod condition it is
481	// required that the specified status equals the pod condition status. Defaults
482	// to True.
483	"status"?: string
484
485	// Specifies the required Pod condition type. To match a pod condition it is
486	// required that specified type equals the pod condition type.
487	"type"!: string
488}
489
490// PodFailurePolicyRule describes how a pod failure is handled when the
491// requirements are met. One of onExitCodes and onPodConditions, but not both,
492// can be used in each rule.
493#PodFailurePolicyRule: {
494	// Specifies the action taken on a pod failure when the requirements are
495	// satisfied. Possible values are:
496	//
497	// - FailJob: indicates that the pod's job is marked as Failed and all
498	// running pods are terminated.
499	// - FailIndex: indicates that the pod's index is marked as Failed and will
500	// not be restarted.
501	// - Ignore: indicates that the counter towards the .backoffLimit is not
502	// incremented and a replacement pod is created.
503	// - Count: indicates that the pod is handled in the default way - the
504	// counter towards the .backoffLimit is incremented.
505	// Additional values are considered to be added in the future. Clients should
506	// react to an unknown action by skipping the rule.
507	"action"!: string
508
509	// Represents the requirement on the container exit codes.
510	"onExitCodes"?: #PodFailurePolicyOnExitCodesRequirement
511
512	// Represents the requirement on the pod conditions. The requirement is
513	// represented as a list of pod condition patterns. The requirement is
514	// satisfied if at least one pattern matches an actual pod condition. At most
515	// 20 elements are allowed.
516	"onPodConditions"?: [...#PodFailurePolicyOnPodConditionsPattern]
517}
518
519// SuccessPolicy describes when a Job can be declared as succeeded based on the
520// success of some indexes.
521#SuccessPolicy: {
522	// rules represents the list of alternative rules for the declaring the Jobs as
523	// successful before `.status.succeeded >= .spec.completions`. Once any of the
524	// rules are met, the "SuccessCriteriaMet" condition is added, and the
525	// lingering pods are removed. The terminal state for such a Job has the
526	// "Complete" condition. Additionally, these rules are evaluated in order; Once
527	// the Job meets one of the rules, other rules are ignored. At most 20 elements
528	// are allowed.
529	"rules"!: [...#SuccessPolicyRule]
530}
531
532// SuccessPolicyRule describes rule for declaring a Job as succeeded. Each rule
533// must have at least one of the "succeededIndexes" or "succeededCount"
534// specified.
535#SuccessPolicyRule: {
536	// succeededCount specifies the minimal required size of the actual set of the
537	// succeeded indexes for the Job. When succeededCount is used along with
538	// succeededIndexes, the check is constrained only to the set of indexes
539	// specified by succeededIndexes. For example, given that succeededIndexes is
540	// "1-4", succeededCount is "3", and completed indexes are "1", "3", and "5",
541	// the Job isn't declared as succeeded because only "1" and "3" indexes are
542	// considered in that rules. When this field is null, this doesn't default to
543	// any value and is never evaluated at any time. When specified it needs to be
544	// a positive integer.
545	"succeededCount"?: int32 & int
546
547	// succeededIndexes specifies the set of indexes which need to be contained in
548	// the actual set of the succeeded indexes for the Job. The list of indexes
549	// must be within 0 to ".spec.completions-1" and must not contain duplicates.
550	// At least one element is required. The indexes are represented as intervals
551	// separated by commas. The intervals can be a decimal integer or a pair of
552	// decimal integers separated by a hyphen. The number are listed in represented
553	// by the first and last element of the series, separated by a hyphen. For
554	// example, if the completed indexes are 1, 3, 4, 5 and 7, they are represented
555	// as "1,3-5,7". When this field is null, this field doesn't default to any
556	// value and is never evaluated at any time.
557	"succeededIndexes"?: string
558}
559
560// UncountedTerminatedPods holds UIDs of Pods that have terminated but haven't
561// been accounted in Job status counters.
562#UncountedTerminatedPods: {
563	// failed holds UIDs of failed Pods.
564	"failed"?: [...string]
565
566	// succeeded holds UIDs of succeeded Pods.
567	"succeeded"?: [...string]
568}